From 6833ce8bdca2d64e14485118f2a4417b7e1cb1b1 Mon Sep 17 00:00:00 2001 From: ak1 Date: Fri, 7 Jan 2005 12:07:52 +0000 Subject: [PATCH] Initial import of mutt-ng. git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@1 e385b8ad-14ed-0310-8656-cc95a2468c6d --- .gdb_history | 9 + ABOUT-NLS | 324 + BEWARE | 15 + COPYRIGHT | 31 + ChangeLog | 3153 ++++++ ChangeLog.nntp | 301 + ChangeLog.old | 12219 +++++++++++++++++++++++ GPL | 341 + INSTALL | 300 + Makefile.am | 198 + Makefile.in | 687 ++ Muttrc | 4116 ++++++++ Muttrc.head.in | 34 + NEWS | 159 + OPS | 196 + OPS.CRYPT | 4 + OPS.MIX | 7 + OPS.PGP | 6 + OPS.SMIME | 1 + PATCHES | 7 + README | 38 + README.SECURITY | 60 + README.SSL | 110 + TODO | 68 + VERSION | 1 + _regex.h | 535 + acconfig.h | 41 + account.c | 210 + account.h | 58 + aclocal.m4 | 1989 ++++ addrbook.c | 242 + alias.c | 577 ++ ascii.c | 97 + ascii.h | 42 + attach.c | 1069 ++ attach.h | 34 + base64.c | 118 + browser.c | 1590 +++ browser.h | 65 + buffy.c | 561 ++ buffy.h | 45 + charset.c | 583 ++ charset.h | 54 + color.c | 801 ++ commands.c | 1104 ++ compile.sh | 4 + complete.c | 263 + compose.c | 1551 +++ config.guess | 1388 +++ config.h.in | 560 ++ config.sub | 1489 +++ configure | 9058 +++++++++++++++++ configure.in | 1003 ++ contrib/Makefile.in | 74 + contrib/Mush.rc | 20 + contrib/Pine.rc | 44 + contrib/Tin.rc | 22 + contrib/ca-bundle.crt | 4599 +++++++++ contrib/colors.default | 23 + contrib/colors.linux | 22 + contrib/gpg.rc | 82 + contrib/iconv/README | 15 + contrib/iconv/iconv.aix-3.2.5.rc | 2 + contrib/iconv/iconv.aix-4.1.5.rc | 13 + contrib/iconv/iconv.aix-4.2.0.rc | 18 + contrib/iconv/iconv.aix-4.3.2.rc | 23 + contrib/iconv/iconv.freebsd-3.3.rc | 6 + contrib/iconv/iconv.glibc-2.1.3.rc | 1 + contrib/iconv/iconv.glibc-2.1.90.rc | 1 + contrib/iconv/iconv.hpux-10.01.rc | 15 + contrib/iconv/iconv.hpux-10.20.rc | 15 + contrib/iconv/iconv.hpux-11.00.rc | 21 + contrib/iconv/iconv.irix-6.5.rc | 9 + contrib/iconv/iconv.osf1-4.0a.rc | 3 + contrib/iconv/iconv.osf1-4.0d.rc | 4 + contrib/iconv/iconv.solaris-2.4.rc | 1 + contrib/iconv/iconv.solaris-2.5.1.rc | 1 + contrib/iconv/iconv.solaris-2.6-cjk.rc | 11 + contrib/iconv/iconv.solaris-2.6.rc | 6 + contrib/iconv/iconv.solaris-2.7.rc | 12 + contrib/iconv/make.sh | 25 + contrib/language.txt | 3261 ++++++ contrib/language50.txt | 1342 +++ contrib/patch.slang-1.2.2.keypad.1 | 76 + contrib/pgp2.rc | 48 + contrib/pgp5.rc | 44 + contrib/pgp6.rc | 45 + contrib/sample.mailcap | 6 + contrib/sample.muttrc | 339 + contrib/sample.muttrc-tlr | 279 + contrib/smime.rc | 96 + contrib/smime_keys_test.pl | 134 + copy.c | 925 ++ copy.h | 68 + crypt.c | 927 ++ cryptglue.c | 416 + curs_lib.c | 712 ++ curs_main.c | 2385 +++++ cvslog2changelog.pl | 120 + date.c | 186 + depcomp | 464 + doc/Makefile.in | 169 + doc/PGP-Notes.txt | 271 + doc/applying-patches.txt | 25 + doc/devel-notes.txt | 178 + doc/dotlock.man | 150 + doc/instdoc.sh | 24 + doc/instdoc.sh.in | 24 + doc/manual.sgml | 7400 ++++++++++++++ doc/manual.sgml.head | 3079 ++++++ doc/manual.sgml.tail | 388 + doc/manual.txt | 7016 +++++++++++++ doc/mbox.man | 189 + doc/mutt.man | 206 + doc/muttbug.man | 200 + doc/muttrc.man | 5042 ++++++++++ doc/muttrc.man.head | 487 + doc/muttrc.man.tail | 20 + doc/patch-notes.txt | 46 + doc/smime-notes.txt | 98 + dotlock.c | 755 ++ dotlock.h | 46 + edit.c | 479 + editmsg.c | 221 + enter.c | 707 ++ extlib.c | 39 + filter.c | 179 + flags.c | 417 + flea | 336 + from.c | 183 + functions.h | 471 + gen_defs | 35 + getdomain.c | 64 + globals.h | 261 + gnupgparse.c | 379 + handler.c | 1943 ++++ hash.c | 182 + hash.h | 49 + hdrline.c | 738 ++ headers.c | 204 + help.c | 351 + history.c | 123 + history.h | 42 + hook.c | 483 + imap/BUGS | 34 + imap/Makefile.am | 25 + imap/Makefile.in | 330 + imap/README | 31 + imap/TODO | 62 + imap/auth.c | 109 + imap/auth.h | 55 + imap/auth_anon.c | 72 + imap/auth_cram.c | 178 + imap/auth_gss.c | 270 + imap/auth_login.c | 66 + imap/auth_sasl.c | 204 + imap/browse.c | 555 + imap/command.c | 562 ++ imap/imap.c | 1469 +++ imap/imap.h | 71 + imap/imap_private.h | 241 + imap/message.c | 973 ++ imap/message.h | 53 + imap/utf7.c | 272 + imap/util.c | 637 ++ init.c | 2177 ++++ init.h | 3066 ++++++ install-sh | 269 + intl/ChangeLog | 4 + intl/Makefile.in | 313 + intl/VERSION | 1 + intl/bindtextdom.c | 369 + intl/config.charset | 438 + intl/dcgettext.c | 58 + intl/dcigettext.c | 1259 +++ intl/dcngettext.c | 60 + intl/dgettext.c | 59 + intl/dngettext.c | 61 + intl/explodename.c | 192 + intl/finddomain.c | 198 + intl/gettext.c | 64 + intl/gettext.h | 102 + intl/gettextP.h | 252 + intl/hash-string.h | 59 + intl/intl-compat.c | 166 + intl/l10nflist.c | 405 + intl/libgettext.h | 49 + intl/libgnuintl.h | 128 + intl/loadinfo.h | 109 + intl/loadmsgcat.c | 567 ++ intl/localcharset.c | 271 + intl/locale.alias | 78 + intl/localealias.c | 404 + intl/ngettext.c | 68 + intl/plural.c | 1326 +++ intl/plural.y | 413 + intl/ref-add.sin | 31 + intl/ref-del.sin | 26 + intl/textdomain.c | 142 + keymap.c | 923 ++ keymap.h | 118 + lib.c | 657 ++ lib.h | 150 + m4/Makefile.am | 25 + m4/Makefile.am.in | 15 + m4/Makefile.in | 228 + m4/README | 8 + m4/codeset.m4 | 17 + m4/curslib.m4 | 83 + m4/funcdecl.m4 | 62 + m4/gettext.m4 | 376 + m4/glibc21.m4 | 26 + m4/gssapi.m4 | 77 + m4/iconv.m4 | 69 + m4/lcmessage.m4 | 24 + m4/libesmtp.m4 | 63 + m4/progtest.m4 | 51 + mailbox.h | 84 + main.c | 975 ++ makedoc.c | 1208 +++ mapping.h | 33 + mbox.c | 1214 +++ mbyte.c | 467 + mbyte.h | 32 + md5.h | 62 + md5c.c | 330 + menu.c | 1070 ++ mh.c | 1845 ++++ mime.h | 78 + mime.types | 83 + missing | 336 + mkchangelog.sh | 5 + mkinstalldirs | 111 + mutt.h | 896 ++ mutt_crypt.h | 253 + mutt_curses.h | 174 + mutt_idna.c | 267 + mutt_idna.h | 57 + mutt_libesmtp.c | 228 + mutt_libesmtp.h | 10 + mutt_menu.h | 110 + mutt_regex.h | 55 + mutt_sasl.c | 670 ++ mutt_sasl.h | 61 + mutt_socket.c | 526 + mutt_socket.h | 72 + mutt_ssl.c | 669 ++ mutt_ssl.h | 28 + mutt_ssl_nss.c | 378 + mutt_tunnel.c | 165 + mutt_tunnel.h | 24 + muttbug | 3 + muttbug.sh.in | 336 + muttlib.c | 1443 +++ mx.c | 1779 ++++ mx.h | 93 + newsrc.c | 1043 ++ nntp.c | 1557 +++ nntp.h | 135 + pager.c | 2729 +++++ pager.h | 47 + parse.c | 1430 +++ patchlist.sh | 18 + pattern.c | 1342 +++ pgp.c | 1432 +++ pgp.h | 106 + pgpewrap.c | 53 + pgpinvoke.c | 351 + pgpkey.c | 1009 ++ pgplib.c | 246 + pgplib.h | 90 + pgpmicalg.c | 207 + pgppacket.c | 225 + pgppacket.h | 52 + pgppubring.c | 959 ++ po/Makefile.in.in | 200 + po/POTFILES.in | 68 + po/bg.gmo | Bin 0 -> 82917 bytes po/bg.po | 4202 ++++++++ po/ca.gmo | Bin 0 -> 83862 bytes po/ca.po | 4344 ++++++++ po/cs.gmo | Bin 0 -> 79737 bytes po/cs.po | 4985 +++++++++ po/da.gmo | Bin 0 -> 64172 bytes po/da.po | 4193 ++++++++ po/de.gmo | Bin 0 -> 82543 bytes po/de.po | 4220 ++++++++ po/el.gmo | Bin 0 -> 80018 bytes po/el.po | 5039 ++++++++++ po/eo.gmo | Bin 0 -> 79063 bytes po/eo.po | 4202 ++++++++ po/es.gmo | Bin 0 -> 64298 bytes po/es.po | 4286 ++++++++ po/et.gmo | Bin 0 -> 72107 bytes po/et.po | 4169 ++++++++ po/fr.gmo | Bin 0 -> 84263 bytes po/fr.po | 4662 +++++++++ po/gl.gmo | Bin 0 -> 62852 bytes po/gl.po | 4476 +++++++++ po/hu.gmo | Bin 0 -> 79559 bytes po/hu.po | 4163 ++++++++ po/id.gmo | Bin 0 -> 80281 bytes po/id.po | 4316 ++++++++ po/it.gmo | Bin 0 -> 67648 bytes po/it.po | 4199 ++++++++ po/ja.gmo | Bin 0 -> 74634 bytes po/ja.po | 4162 ++++++++ po/ko.gmo | Bin 0 -> 72535 bytes po/ko.po | 4143 ++++++++ po/lt.gmo | Bin 0 -> 59501 bytes po/lt.po | 4301 ++++++++ po/mutt.pot | 4012 ++++++++ po/nl.gmo | Bin 0 -> 81712 bytes po/nl.po | 4359 ++++++++ po/pl.gmo | Bin 0 -> 80705 bytes po/pl.po | 4155 ++++++++ po/pt_BR.gmo | Bin 0 -> 56386 bytes po/pt_BR.po | 4566 +++++++++ po/ru.gmo | Bin 0 -> 82433 bytes po/ru.po | 4170 ++++++++ po/sk.gmo | Bin 0 -> 44407 bytes po/sk.po | 4533 +++++++++ po/sv.gmo | Bin 0 -> 70324 bytes po/sv.po | 4311 ++++++++ po/tr.gmo | Bin 0 -> 55890 bytes po/tr.po | 4274 ++++++++ po/uk.gmo | Bin 0 -> 64513 bytes po/uk.po | 4336 ++++++++ po/zh_CN.gmo | Bin 0 -> 43046 bytes po/zh_CN.po | 4568 +++++++++ po/zh_TW.gmo | Bin 0 -> 61346 bytes po/zh_TW.po | 4493 +++++++++ pop.c | 687 ++ pop.h | 112 + pop_auth.c | 415 + pop_lib.c | 563 ++ postpone.c | 683 ++ prepare | 23 + protos.h | 490 + query.c | 527 + recvattach.c | 1232 +++ recvcmd.c | 939 ++ regex.c | 5754 +++++++++++ reldate.h | 1 + remailer.c | 781 ++ remailer.h | 65 + resize.c | 81 + rfc1524.c | 593 ++ rfc1524.h | 45 + rfc2047.c | 778 ++ rfc2047.h | 28 + rfc2231.c | 376 + rfc2231.h | 24 + rfc822.c | 814 ++ rfc822.h | 64 + score.c | 181 + send.c | 1869 ++++ sendlib.c | 2593 +++++ sha1.c | 190 + sha1.h | 50 + signal.c | 244 + smime.c | 1920 ++++ smime.h | 59 + smime_keys.pl | 964 ++ snprintf.c | 789 ++ sort.c | 307 + sort.h | 54 + stamp-h.in | 1 + status.c | 295 + stderr.txt | 0 strcasecmp.c | 40 + strdup.c | 19 + system.c | 137 + thread.c | 1338 +++ url.c | 257 + url.h | 37 + utf8.c | 76 + wcwidth.c | 140 + 378 files changed, 298604 insertions(+) create mode 100644 .gdb_history create mode 100644 ABOUT-NLS create mode 100644 BEWARE create mode 100644 COPYRIGHT create mode 100644 ChangeLog create mode 100644 ChangeLog.nntp create mode 100644 ChangeLog.old create mode 100644 GPL create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 Muttrc create mode 100644 Muttrc.head.in create mode 100644 NEWS create mode 100644 OPS create mode 100644 OPS.CRYPT create mode 100644 OPS.MIX create mode 100644 OPS.PGP create mode 100644 OPS.SMIME create mode 100644 PATCHES create mode 100644 README create mode 100644 README.SECURITY create mode 100644 README.SSL create mode 100644 TODO create mode 100644 VERSION create mode 100644 _regex.h create mode 100644 acconfig.h create mode 100644 account.c create mode 100644 account.h create mode 100644 aclocal.m4 create mode 100644 addrbook.c create mode 100644 alias.c create mode 100644 ascii.c create mode 100644 ascii.h create mode 100644 attach.c create mode 100644 attach.h create mode 100644 base64.c create mode 100644 browser.c create mode 100644 browser.h create mode 100644 buffy.c create mode 100644 buffy.h create mode 100644 charset.c create mode 100644 charset.h create mode 100644 color.c create mode 100644 commands.c create mode 100755 compile.sh create mode 100644 complete.c create mode 100644 compose.c create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.in create mode 100644 contrib/Makefile.in create mode 100644 contrib/Mush.rc create mode 100644 contrib/Pine.rc create mode 100644 contrib/Tin.rc create mode 100644 contrib/ca-bundle.crt create mode 100644 contrib/colors.default create mode 100644 contrib/colors.linux create mode 100644 contrib/gpg.rc create mode 100644 contrib/iconv/README create mode 100644 contrib/iconv/iconv.aix-3.2.5.rc create mode 100644 contrib/iconv/iconv.aix-4.1.5.rc create mode 100644 contrib/iconv/iconv.aix-4.2.0.rc create mode 100644 contrib/iconv/iconv.aix-4.3.2.rc create mode 100644 contrib/iconv/iconv.freebsd-3.3.rc create mode 100644 contrib/iconv/iconv.glibc-2.1.3.rc create mode 100644 contrib/iconv/iconv.glibc-2.1.90.rc create mode 100644 contrib/iconv/iconv.hpux-10.01.rc create mode 100644 contrib/iconv/iconv.hpux-10.20.rc create mode 100644 contrib/iconv/iconv.hpux-11.00.rc create mode 100644 contrib/iconv/iconv.irix-6.5.rc create mode 100644 contrib/iconv/iconv.osf1-4.0a.rc create mode 100644 contrib/iconv/iconv.osf1-4.0d.rc create mode 100644 contrib/iconv/iconv.solaris-2.4.rc create mode 100644 contrib/iconv/iconv.solaris-2.5.1.rc create mode 100644 contrib/iconv/iconv.solaris-2.6-cjk.rc create mode 100644 contrib/iconv/iconv.solaris-2.6.rc create mode 100644 contrib/iconv/iconv.solaris-2.7.rc create mode 100755 contrib/iconv/make.sh create mode 100644 contrib/language.txt create mode 100644 contrib/language50.txt create mode 100644 contrib/patch.slang-1.2.2.keypad.1 create mode 100644 contrib/pgp2.rc create mode 100644 contrib/pgp5.rc create mode 100644 contrib/pgp6.rc create mode 100644 contrib/sample.mailcap create mode 100644 contrib/sample.muttrc create mode 100644 contrib/sample.muttrc-tlr create mode 100644 contrib/smime.rc create mode 100644 contrib/smime_keys_test.pl create mode 100644 copy.c create mode 100644 copy.h create mode 100644 crypt.c create mode 100644 cryptglue.c create mode 100644 curs_lib.c create mode 100644 curs_main.c create mode 100644 cvslog2changelog.pl create mode 100644 date.c create mode 100644 depcomp create mode 100644 doc/Makefile.in create mode 100644 doc/PGP-Notes.txt create mode 100644 doc/applying-patches.txt create mode 100644 doc/devel-notes.txt create mode 100644 doc/dotlock.man create mode 100644 doc/instdoc.sh create mode 100644 doc/instdoc.sh.in create mode 100644 doc/manual.sgml create mode 100644 doc/manual.sgml.head create mode 100644 doc/manual.sgml.tail create mode 100644 doc/manual.txt create mode 100644 doc/mbox.man create mode 100644 doc/mutt.man create mode 100644 doc/muttbug.man create mode 100644 doc/muttrc.man create mode 100644 doc/muttrc.man.head create mode 100644 doc/muttrc.man.tail create mode 100644 doc/patch-notes.txt create mode 100644 doc/smime-notes.txt create mode 100644 dotlock.c create mode 100644 dotlock.h create mode 100644 edit.c create mode 100644 editmsg.c create mode 100644 enter.c create mode 100644 extlib.c create mode 100644 filter.c create mode 100644 flags.c create mode 100755 flea create mode 100644 from.c create mode 100644 functions.h create mode 100755 gen_defs create mode 100644 getdomain.c create mode 100644 globals.h create mode 100644 gnupgparse.c create mode 100644 handler.c create mode 100644 hash.c create mode 100644 hash.h create mode 100644 hdrline.c create mode 100644 headers.c create mode 100644 help.c create mode 100644 history.c create mode 100644 history.h create mode 100644 hook.c create mode 100644 imap/BUGS create mode 100644 imap/Makefile.am create mode 100644 imap/Makefile.in create mode 100644 imap/README create mode 100644 imap/TODO create mode 100644 imap/auth.c create mode 100644 imap/auth.h create mode 100644 imap/auth_anon.c create mode 100644 imap/auth_cram.c create mode 100644 imap/auth_gss.c create mode 100644 imap/auth_login.c create mode 100644 imap/auth_sasl.c create mode 100644 imap/browse.c create mode 100644 imap/command.c create mode 100644 imap/imap.c create mode 100644 imap/imap.h create mode 100644 imap/imap_private.h create mode 100644 imap/message.c create mode 100644 imap/message.h create mode 100644 imap/utf7.c create mode 100644 imap/util.c create mode 100644 init.c create mode 100644 init.h create mode 100755 install-sh create mode 100644 intl/ChangeLog create mode 100644 intl/Makefile.in create mode 100644 intl/VERSION create mode 100644 intl/bindtextdom.c create mode 100644 intl/config.charset create mode 100644 intl/dcgettext.c create mode 100644 intl/dcigettext.c create mode 100644 intl/dcngettext.c create mode 100644 intl/dgettext.c create mode 100644 intl/dngettext.c create mode 100644 intl/explodename.c create mode 100644 intl/finddomain.c create mode 100644 intl/gettext.c create mode 100644 intl/gettext.h create mode 100644 intl/gettextP.h create mode 100644 intl/hash-string.h create mode 100644 intl/intl-compat.c create mode 100644 intl/l10nflist.c create mode 100644 intl/libgettext.h create mode 100644 intl/libgnuintl.h create mode 100644 intl/loadinfo.h create mode 100644 intl/loadmsgcat.c create mode 100644 intl/localcharset.c create mode 100644 intl/locale.alias create mode 100644 intl/localealias.c create mode 100644 intl/ngettext.c create mode 100644 intl/plural.c create mode 100644 intl/plural.y create mode 100644 intl/ref-add.sin create mode 100644 intl/ref-del.sin create mode 100644 intl/textdomain.c create mode 100644 keymap.c create mode 100644 keymap.h create mode 100644 lib.c create mode 100644 lib.h create mode 100644 m4/Makefile.am create mode 100644 m4/Makefile.am.in create mode 100644 m4/Makefile.in create mode 100644 m4/README create mode 100644 m4/codeset.m4 create mode 100644 m4/curslib.m4 create mode 100644 m4/funcdecl.m4 create mode 100644 m4/gettext.m4 create mode 100644 m4/glibc21.m4 create mode 100644 m4/gssapi.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/lcmessage.m4 create mode 100644 m4/libesmtp.m4 create mode 100644 m4/progtest.m4 create mode 100644 mailbox.h create mode 100644 main.c create mode 100644 makedoc.c create mode 100644 mapping.h create mode 100644 mbox.c create mode 100644 mbyte.c create mode 100644 mbyte.h create mode 100644 md5.h create mode 100644 md5c.c create mode 100644 menu.c create mode 100644 mh.c create mode 100644 mime.h create mode 100644 mime.types create mode 100755 missing create mode 100755 mkchangelog.sh create mode 100755 mkinstalldirs create mode 100644 mutt.h create mode 100644 mutt_crypt.h create mode 100644 mutt_curses.h create mode 100644 mutt_idna.c create mode 100644 mutt_idna.h create mode 100644 mutt_libesmtp.c create mode 100644 mutt_libesmtp.h create mode 100644 mutt_menu.h create mode 100644 mutt_regex.h create mode 100644 mutt_sasl.c create mode 100644 mutt_sasl.h create mode 100644 mutt_socket.c create mode 100644 mutt_socket.h create mode 100644 mutt_ssl.c create mode 100644 mutt_ssl.h create mode 100644 mutt_ssl_nss.c create mode 100644 mutt_tunnel.c create mode 100644 mutt_tunnel.h create mode 100755 muttbug create mode 100644 muttbug.sh.in create mode 100644 muttlib.c create mode 100644 mx.c create mode 100644 mx.h create mode 100644 newsrc.c create mode 100644 nntp.c create mode 100644 nntp.h create mode 100644 pager.c create mode 100644 pager.h create mode 100644 parse.c create mode 100755 patchlist.sh create mode 100644 pattern.c create mode 100644 pgp.c create mode 100644 pgp.h create mode 100644 pgpewrap.c create mode 100644 pgpinvoke.c create mode 100644 pgpkey.c create mode 100644 pgplib.c create mode 100644 pgplib.h create mode 100644 pgpmicalg.c create mode 100644 pgppacket.c create mode 100644 pgppacket.h create mode 100644 pgppubring.c create mode 100644 po/Makefile.in.in create mode 100644 po/POTFILES.in create mode 100644 po/bg.gmo create mode 100644 po/bg.po create mode 100644 po/ca.gmo create mode 100644 po/ca.po create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/el.gmo create mode 100644 po/el.po create mode 100644 po/eo.gmo create mode 100644 po/eo.po create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/et.gmo create mode 100644 po/et.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/gl.gmo create mode 100644 po/gl.po create mode 100644 po/hu.gmo create mode 100644 po/hu.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/ko.gmo create mode 100644 po/ko.po create mode 100644 po/lt.gmo create mode 100644 po/lt.po create mode 100644 po/mutt.pot create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/sk.gmo create mode 100644 po/sk.po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/tr.gmo create mode 100644 po/tr.po create mode 100644 po/uk.gmo create mode 100644 po/uk.po create mode 100644 po/zh_CN.gmo create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.gmo create mode 100644 po/zh_TW.po create mode 100644 pop.c create mode 100644 pop.h create mode 100644 pop_auth.c create mode 100644 pop_lib.c create mode 100644 postpone.c create mode 100755 prepare create mode 100644 protos.h create mode 100644 query.c create mode 100644 recvattach.c create mode 100644 recvcmd.c create mode 100644 regex.c create mode 100644 reldate.h create mode 100644 remailer.c create mode 100644 remailer.h create mode 100644 resize.c create mode 100644 rfc1524.c create mode 100644 rfc1524.h create mode 100644 rfc2047.c create mode 100644 rfc2047.h create mode 100644 rfc2231.c create mode 100644 rfc2231.h create mode 100644 rfc822.c create mode 100644 rfc822.h create mode 100644 score.c create mode 100644 send.c create mode 100644 sendlib.c create mode 100644 sha1.c create mode 100644 sha1.h create mode 100644 signal.c create mode 100644 smime.c create mode 100644 smime.h create mode 100755 smime_keys.pl create mode 100644 snprintf.c create mode 100644 sort.c create mode 100644 sort.h create mode 100644 stamp-h.in create mode 100644 status.c create mode 100644 stderr.txt create mode 100644 strcasecmp.c create mode 100644 strdup.c create mode 100644 system.c create mode 100644 thread.c create mode 100644 url.c create mode 100644 url.h create mode 100644 utf8.c create mode 100644 wcwidth.c diff --git a/.gdb_history b/.gdb_history new file mode 100644 index 0000000..88f60ce --- /dev/null +++ b/.gdb_history @@ -0,0 +1,9 @@ +r +bt +quit +r +bt +quit +r +bt +quit diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..5fde45a --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,324 @@ +Notes on the Free Translation Project +************************************* + + Free software is going international! The Free Translation Project +is a way to get maintainers of free software, translators, and users all +together, so that will gradually become able to speak many languages. +A few packages already provide translations for their messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work at translations should contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +Quick configuration advice +========================== + + If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +INSTALL Matters +=============== + + Some packages are "localizable" when properly installed; the +programs they contain can be made to speak your own native language. +Most such packages use GNU `gettext'. Other packages have their own +ways to internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the GNU `gettext' own +library will be used. This library is wholly contained within this +package, usually in the `intl/' subdirectory, so prior installation of +the GNU `gettext' package is _not_ required. Installers may use +special options at configuration time for changing the default +behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will respectively bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might be not what is desirable. You +should use the more recent version of the GNU `gettext' library. I.e. +if the file `intl/VERSION' shows that the library which comes with this +package is more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages have usually many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +Using This Package +================== + + As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +Translating Teams +================= + + For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +Available Packages +================== + + Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of September +2001. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files bg cs da de el en eo es et fi fr gl he hr id it ja + +----------------------------------------------------+ + a2ps | [] [] [] | + bash | [] [] [] [] | + bfd | | + binutils | [] | + bison | [] [] [] [] [] | + clisp | [] [] [] [] | + cpio | [] [] [] [] [] | + diffutils | [] [] [] [] [] [] [] | + enscript | [] [] | + error | [] [] | + fetchmail | | + fileutils | [] [] [] [] [] [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] [] [] | + freetype | | + gas | | + gawk | [] [] | + gcal | | + gcc | | + gettext | [] [] [] [] [] [] [] [] [] [] | + gnupg | [] [] [] [] [] [] [] | + gprof | | + grep | [] [] [] [] [] [] [] [] | + hello | [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] | + indent | [] [] [] [] [] | + jpilot | [] | + kbd | | + ld | [] | + libc | [] [] [] [] [] [] [] [] | + lilypond | [] | + lynx | [] [] [] [] | + m4 | [] [] [] [] [] [] [] [] | + make | [] [] [] [] [] [] | + mysecretdiary | [] | + nano | [] [] [] | + opcodes | | + parted | [] [] [] | + ptx | [] [] [] [] [] [] [] | + python | | + recode | [] [] [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] [] | + sketch | | + soundtracker | [] [] [] | + sp | | + tar | [] [] [] [] [] [] [] [] | + texinfo | [] [] [] [] [] [] | + textutils | [] [] [] [] [] [] [] [] | + util-linux | [] [] | + wdiff | [] [] [] | + wget | [] [] [] [] [] [] [] [] [] [] | + +----------------------------------------------------+ + bg cs da de el en eo es et fi fr gl he hr id it ja + 0 14 24 32 11 1 8 23 13 1 33 22 4 0 7 9 18 + + ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh + +----------------------------------------------------+ + a2ps | [] [] [] | 6 + bash | | 4 + bfd | | 0 + binutils | | 1 + bison | [] | 6 + clisp | [] | 5 + cpio | [] [] [] [] [] | 10 + diffutils | [] [] [] [] | 11 + enscript | [] [] [] | 5 + error | [] [] | 4 + fetchmail | | 0 + fileutils | [] [] [] [] [] [] [] [] [] | 17 + findutils | [] [] [] [] [] [] [] [] | 16 + flex | [] [] [] | 6 + freetype | | 0 + gas | | 0 + gawk | [] | 3 + gcal | | 0 + gcc | | 0 + gettext | [] [] [] [] [] [] [] [] | 18 + gnupg | [] [] [] | 10 + gprof | | 0 + grep | [] [] [] [] | 12 + hello | [] [] [] [] [] [] [] [] [] [] [] | 22 + id-utils | [] [] [] | 6 + indent | [] [] [] [] [] [] [] | 12 + jpilot | | 1 + kbd | [] | 1 + ld | | 1 + libc | [] [] [] [] [] [] [] [] | 16 + lilypond | [] [] | 3 + lynx | [] [] [] [] | 8 + m4 | [] [] [] [] | 12 + make | [] [] [] [] [] [] | 12 + mysecretdiary | | 1 + nano | [] | 4 + opcodes | [] | 1 + parted | [] [] | 5 + ptx | [] [] [] [] [] [] [] [] | 15 + python | | 0 + recode | [] [] [] [] | 13 + sed | [] [] [] [] [] [] [] | 19 + sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 21 + sharutils | [] [] [] | 11 + sketch | | 0 + soundtracker | | 3 + sp | | 0 + tar | [] [] [] [] [] [] [] | 15 + texinfo | [] | 7 + textutils | [] [] [] [] [] [] [] [] | 16 + util-linux | [] [] | 4 + wdiff | [] [] [] [] | 7 + wget | [] [] [] [] [] [] [] | 17 + +----------------------------------------------------+ + 33 teams ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh + 53 domains 9 1 6 20 0 6 17 1 13 25 10 11 23 21 2 2 387 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If September 2001 seems to be old, you may fetch a more recent copy +of this `ABOUT-NLS' file on most GNU archive sites. The most +up-to-date matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +Using `gettext' in new packages +=============================== + + If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +to use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/BEWARE b/BEWARE new file mode 100644 index 0000000..d5a7df7 --- /dev/null +++ b/BEWARE @@ -0,0 +1,15 @@ +MUTT HACKERS BEWARE + +A word of warning about string comparisons: Since mutt may run in a +huge variety of locales, case-insensitive string comparisons and +case conversions may be dangerous. For instance, in iso-8859-9, +tolower('I') is DIFFERENT from 'i' - it's indeed the Turkish dotless +lowercase i. + +For this reason, always use the ascii_* functions defined in ascii.h +and implemented in ascii.c when comparing or handling strings whcih +are defined as us-ascii. This concerns lots of text-based +protocols, message header tags, character set names, domain names, +e-mail addresses, etc. + +Thu Apr 26 15:40:11 CEST 2001, diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100644 index 0000000..c0b3823 --- /dev/null +++ b/COPYRIGHT @@ -0,0 +1,31 @@ +The following copyright notices apply to most of the program. Some +modules are under different licenses, or in the public domain. + +Please note that this is by no means an exhaustive list of all the +persons who have been contributing to this program. Please see the +manual for a (probably still non complete) list of the persons who +have been helpful with the development of this program. + +Copyright (C) 1996-2001 Michael R. Elkins +Copyright (C) 1996-2001 Brandon Long +Copyright (C) 1997-2001 Thomas Roessler +Copyright (C) 1998-2001 Werner Koch +Copyright (C) 1999-2001 Brendan Cully +Copyright (C) 1999-2001 Tommi Komulainen +Copyright (C) 2000-2001 Edmund Grimley Evans + + + 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..1423066 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3153 @@ +2004-02-01 18:00:16 Mike Schiraldi <1074468571@schiraldi.org> (roessler) + + * init.c: As you all know, running "mutt -F foo.rc" will have + mutt read foo.rc as its config file. However, there is a bug -- + if you specify a directory (like accidentally typing "mutt -F + /etc/mutt") mutt will silently ignore the flag and leave you + wondering why it isn't working. + + Emil Sit posted a patch for this in March of 2002, but it seems + to have slipped through the cracks. Here's the patch again; + please consider it for inclusion. + +2004-02-01 17:50:43 Luke Mewburn (roessler) + + * buffy.c: Put a zero byte into the string, not into the pointer. + +2004-02-01 17:48:25 Dan Ohnesorg (roessler) + + * po/cs.po: update + +2004-02-01 17:45:33 Thomas Roessler (roessler) + + * doc/manual.sgml.head: A cross-reference was missing. + + * doc/manual.sgml.head: Improve documentation of alterantes. + + * alias.c, doc/manual.sgml.head, doc/muttrc.man.head, globals.h, + hdrline.c, init.c, init.h, mutt.h, mutt_regex.h, muttlib.c, + protos.h: Turn alternates, lists, and subscribe into regular + expression lists. + +2004-01-12 22:56:58 Christoph Ludwig (roessler) + + * smime_keys.pl: Avoid a Perl warning. + +2004-01-12 20:24:09 Matt Kraai (roessler) + + * doc/manual.sgml.head: A newline was missing from the + documentation; #1754. (The actual commit message for this + change is garbage; wrong window.) + +2004-01-12 19:59:38 Thomas Roessler (roessler) + + * crypt.c: Retainable PGP signatures were broken badly. #1757. + +2004-01-05 11:55:14 Robert Schiele (roessler) + + * mutt_sasl.c: Back out part of the previous SASL/IPv6 patch + due to portability issues. + +2004-01-04 10:55:20 René Clerc (roessler) + + * init.h: Fix hide_missing / hide_limited documentation. + +2004-01-04 10:51:49 Thomas Roessler (roessler) + + * hdrline.c: Permit list patterns that match the domain name of + an address; these patterns begin with '@'. Example: subscribe + @bugs.guug.de matches all messages sent to the bug tracking + system. + +2004-01-04 10:30:52 Thomas Roessler (roessler) + + * po/ru.po: Argh, I shouldn't replace files by patches. + +2004-01-04 10:25:13 Cameron Patrick (roessler) + + * menu.c: Fix #1697 (Debian #219594.) + +2004-01-04 10:21:19 Roland Rosenfeld (roessler) + + * po/de.po: update + +2004-01-04 10:19:45 TAKAHASHI Tamotsu (roessler) + + * po/ja.po: update + +2004-01-04 10:08:02 Pawel Dziekonski (roessler) + + * po/pl.po: update + +2004-01-04 10:03:46 Michael Elkins (roessler) + + * send.c: Fix #1488 (Debian#1882526): Honor Reply-To while + generating Mail-Followup-To headers. + +2004-01-04 09:59:42 Thomas Roessler (roessler) + + * init.h: Fix #1738; documentation issue re $from, $use_from. + +2004-01-04 09:52:55 Michael Elkins (roessler) + + * hook.c, send.c: Fix #1724, cannot use ~h pattern match with + reply-hook. + +2004-01-04 09:49:23 Vsevolod Volkov (roessler) + + * pop.h, pop_lib.c: Attached patch provides support of STLS + (STARTTLS) command in POP3 protocol. + + * po/ru.po: update + +2004-01-04 09:45:05 Brendan Cully (roessler) + + * imap/imap.c: Fix #1703. + +2004-01-04 09:42:35 Thomas Roessler (roessler) + + * smime.c: Fix a NULL pointer deference noted by Will Fiveash + . + +2003-12-30 13:04:20 Thomas Roessler (roessler) + + * commands.c, crypt.c, mutt.h, mutt_crypt.h, smime.c: Handle + partially signed messages more reasonably. See #1743. + +2003-12-29 11:44:35 Alain Bench (roessler) + + * commands.c: Fix #844. + +2003-12-29 11:37:41 Patrick Welche (roessler) + + * m4/gssapi.m4, mutt_sasl.c: A while ago I posted a similar + patch which is necessary as when mutt tries to connect to an + imap server over ipv6 it stores the address in a sockaddr which + may not be large enough to hold the ipv6 address. + +2003-12-17 17:42:02 Scott Koranda (roessler) + + * crypt.c: pkcs7-signature wasn't recognized properly in one + more place. + +2003-12-17 08:46:50 Michael Elkins (roessler) + + * rfc1524.c: Fix possible core dump in mailcap nametemplate + handling. + +2003-12-10 00:48:57 Thomas Roessler (roessler) + + * thread.c: Avoid NULL pointer deference in threading code. + +2003-12-03 08:19:11 Alain Bench (roessler) + + * pager.c: Fix 1716. + +2003-11-15 09:32:30 Velko Hristov (roessler) + + * po/bg.po: updat + +2003-11-12 22:31:51 Edmund GRIMLEY EVANS (roessler) + + * po/eo.po: update + +2003-11-12 14:01:03 René Clerc (roessler) + + * po/nl.po: update + +2003-11-12 13:49:32 Thomas Roessler (roessler) + + * configure.in, mutt_idna.c, mutt_idna.h, mutt_socket.c: Fix + IDN API incompatibility problems. + +2003-11-12 11:47:46 duvall@emufarm.org (roessler) + + * configure.in: Fix 1515, 1693. + +2003-11-12 11:40:27 Thomas Roessler (roessler) + + * mh.c, sort.c: Fix dangling pointer problems in threading code. + Noted and tracked down by q4xk3j002@sneakemail.com who also + provided the initial fix. + + CORRECTION: q4xk3j002 (whoever that is) reported the bug, + but thr problem was tracked down and fixed by YONETANI + Tomokazu + +2003-11-11 10:19:22 Ronny Haryanto (roessler) + + * po/id.po: update + +2003-11-10 18:02:26 Rudy Taraschi (roessler) + + * mutt_socket.c: Fix double-free problems related to IDN support. + +2003-11-10 10:37:10 Vincent Lefevre (roessler) + + * po/fr.po: update + +2003-11-09 21:41:28 Thomas Roessler (roessler) + + * mh.c: Fix #1692. + +2003-11-09 09:38:32 Thomas Roessler (roessler) + + * send.c: Commit the fix for #1509. This must have been lost + earlier this year. + +2003-11-05 20:09:36 Thomas Roessler (roessler) + + * po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, + po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, + po/zh_TW.po, ChangeLog, VERSION, po/bg.po, po/ca.po, po/cs.po, + po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, + po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po: automatic + post-release commit for mutt-1.5.5.1 + +2003-11-05 12:17:10 Thomas Roessler (roessler) + + * Makefile.am: Include regex.c and snprintf.c with the + distribution. Noted by Lars Hecking. + + * build-release: Ups, we don't upload the CVS any more. + + * po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, + po/uk.po, po/zh_CN.po, po/zh_TW.po, ChangeLog, VERSION, po/bg.po, + po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, + po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, + po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, reldate.h: + automatic post-release commit for mutt-1.5.5 + +2003-11-05 09:27:43 Thomas Roessler (roessler) + + * build-release: Use gpg for signing releases. + +2003-11-03 10:30:58 Thomas Roessler (roessler) + + * attach.c: Fix a logic flaw in attachment saving. + +2003-10-08 19:55:39 Thomas Roessler (roessler) + + * pgpkey.c: KeyTable is pgp_uid_t **, not pgp_key_t *. Fix some + sizeof statements accordingly. Note that pgp_key_t is also a + pointer, though, so this should not have broken things. + +2003-10-06 09:58:35 Thomas Roessler (roessler) + + * query.c: Fiy memory corruption. (# 1659) + +2003-10-04 22:12:10 Thomas Roessler (roessler) + + * lib.c: mutt_basename() was garbage. + +2003-10-04 20:54:37 Thomas Roessler (roessler) + + * doc/manual.sgml.head: Fix some tags. Noted by Todd + . + +2003-10-04 20:35:00 Thomas Roessler (roessler) + + * recvattach.c, attach.h, commands.c, compose.c, keymap.h, lib.c, + lib.h, menu.c, mutt.h, mutt_menu.h, muttlib.c, pager.c, protos.h: + This patch fixes various aspects of the attachment-saving user + interface. Changes include: + + - When tagging and saving multiple attachments, you can now use + the same target directory for multiple attachments. + + - When you can't save an attachment, you get an opportunity to + enter a new file name. + + - The menu cursor will highlight the attachment that you are + currently discussing with mutt. + + - Various bug fixes. + + This does, in particular, address #1619 (Debian#208430). + + * menu.c: Fix #1656. + +2003-09-29 16:34:32 René Clerc (roessler) + + * doc/muttrc.man.head: Fix typo. + +2003-09-29 15:05:52 Thomas Roessler (roessler) + + * doc/dotlock.man, doc/mutt.man, doc/muttrc.man.head: Fix #1652 + (Debian #213007), noted by Jens Seidel . + +2003-09-20 06:24:10 Thomas Roessler (roessler) + + * muttbug.sh.in: Adapt to new GNU coreutils by not using head (1). + +2003-09-19 13:09:59 René Clerc (roessler) + + * po/nl.po: update + +2003-09-19 13:05:13 Thomas Roessler (roessler) + + * imap/utf7.c: Fix remaining (void **) casts. + +2003-09-19 13:03:26 Mads Martin Joergensen (roessler) + + * imap/browse.c, imap/command.c, parse.c, pgp.c, pgpkey.c, + pop_lib.c, query.c, recvattach.c, remailer.c, rfc1524.c, + rfc2047.c, rfc2231.c, sendlib.c, smime.c, thread.c, addrbook.c, + browser.c, color.c, compose.c, copy.c, crypt.c, curs_lib.c, + edit.c, enter.c, handler.c, lib.c, lib.h, mh.c, mutt_idna.c, mx.c, + pager.c: As the ones of you who compile with new gcc's probably + have noticed, there's a lot of type-punning in Mutt. With help + from Philipp Thomas, I've fixed all I could find in CVS (please + double-check, one might have slipped through the cracks), I can + make one for 1.4 CVS branch as well if wanted. + +2003-09-19 12:56:49 Thomas Roessler (roessler) + + * send.c: Change abort_unmodified so it doesn't abort a message + that has an attachment. Catches the "send a file from the + command line, quickly" case. + +2003-09-11 16:59:54 Brendan Cully (roessler) + + * mutt_sasl.c: This trivial patch closes #1516 (NI_WITHSCOPEID + undefined). Thanks to Mads for the initial patch. + +2003-09-11 07:27:23 Velko Hristov (roessler) + + * po/bg.po: Bulgarian translation. (Seems like I screwed up an + earlier commit. -tlr) + +2003-09-10 13:20:49 Jon Miles (roessler) + + * pop_auth.c: In pop_auth.c:pop_auth_sasl(), if the main loop + received anything back from the server that didnt begin with '+ + ', it was bailing out and skipping the checks to see if there + was a +OK response. + +2003-09-07 10:11:49 Im Eunjea (roessler) + + * po/ko.po: update. + +2003-09-04 15:10:09 Thomas Roessler (roessler) + + * init.h: Fix some formatting glitches that lead to error messages + when viewing the muttrc(5) manual page. + +2003-09-04 14:59:57 Christoph Ludwig (roessler) + + * smime.c: Fix verification bug when messages are S/MIME signed + & encrypted. + +2003-09-03 17:22:09 Dan Born (roessler) + + * postpone.c: I've attached a patch for bug number 1036, as + reported at http://bugs.guug.de/db/pa/lmutt.html ("segfault + when more than one msg is postponed"). This is a patch against + mutt 1.4.1. + + As it was previously left, no one could reproduce it. The problem + occurs because sorting is disabled when opening the postponed + folder, but the Sort global variable still tells mutt to use + whatever sorting algorithm the $sort config option indicates. + Eventually, the code would get to mutt_messages_in_thread and + try to dereference a NULL thread object, causing the segfault. + +2003-09-03 17:20:56 Pawel Dziekonski (roessler) + + * po/pl.po: update. + +2003-09-03 17:15:20 TAKAHASHI Tamotsu (roessler) + + * po/ja.po: New ja.po. + +2003-09-03 17:12:52 Velko Hristov (roessler) + + * configure.in: Bulgarian translation. + +2003-09-03 17:10:37 Brendan Cully (roessler) + + * mutt_ssl.c: Fix a segmentation fault which occurs + when a certificate is rejected. Bug noted by Rob Latham + . + +2003-09-03 17:09:09 Anatoly Vorobey (roessler) + + * curs_main.c: The commands "read-thread" (^R) and + "read-subthread" (Esc-R) do not honor the resolve variable (don't + advance cursor after marking the thread/subthread as read), + which, to me at least, is a nuisance. + +2003-08-11 14:06:08 Brendan Cully (roessler) + + * imap/imap.c: 1595: My guess is this bug is caused by + mlarson@verisign.com's patch to check for UNSEEN rather than + RECENT messages. This means that as long as there are messages + in a mailbox either new or old, mutt will think it has new mail. + + The attached patch reverts that change. Let me know if it solves + the problem. + +2003-08-11 14:05:13 Thomas Roessler (roessler) + + * doc/muttrc.man.head: Fix a formatting bug. + +2003-08-05 13:55:47 Brendan Cully (roessler) + + * attach.c, buffy.c, commands.c, copy.c, editmsg.c, init.c, + mbox.c, mx.c, mx.h, sendlib.c: This patch removes the Kendra + format from mutt. (The support was broken anyways.) + +2003-08-02 11:01:09 Horvath Szabolcs (roessler) + + * po/hu.po: update + +2003-07-29 10:11:05 Edmund GRIMLEY EVANS (roessler) + + * pager.c: It seems that Solaris has an incorrect implementation + of mbrtowc: when there is an encoding error and mbrtowc returns + (size_t)(-1) no value should be stored in *pwc (the first + argument), as I understand it, but here mbrtowc is storing 8 + when presented with the bytes "\xc8\x4d". + + However, relying on mbrtowc not to store anything in *pwc when + there is an error is a bit silly; it makes sense to look at + the return value. So, the following patch should be applied if + Pawel can confirm that it fixes the problem. I've tested it and + it worked for me with glibc's mbrtowc. + +2003-07-24 18:40:50 Vincent Lefevre (roessler) + + * alias.c, copy.c, handler.c, imap/command.c, imap/imap.c, + imap/message.c, imap/util.c, init.c, intl/l10nflist.c, + intl/loadmsgcat.c, intl/localealias.c, keymap.c, lib.c, + makedoc.c, muttlib.c, pattern.c, rfc2047.c, rfc2231.c, rfc822.c, + strcasecmp.c, url.c: Some functions/macros like isspace take an + int and require the argument to have the value of an unsigned char + (or EOF). Under Solaris, gcc complains when the argument is a char + (as this is a possible bug, on platforms where char is signed, + like Solaris). The attached patch fixes such problems (well, + perhaps I've changed more than necessary, but this doesn't hurt). + +2003-07-22 12:56:38 dshaw@jabberwocky.com (roessler) + + * gnupgparse.c: When encrypting a message to a user that has more + than one subkey, at least one of which is revoked or expired, + mutt treats the entire key as unusable rather than just the + subkey(s) in question. + +2003-07-16 11:18:12 Brendan Cully (roessler) + + * account.c, account.h, imap/auth_sasl.c, imap/imap.c: I noticed + that my mutt hung when I tried SASL DIGEST-MD5 authentication + (I'm not sure when this started). I believe this patch should + solve that problem in a reliable way. + + This patch also attempts to reuse connections even when + authentication fails, instead of just throwing away a perfectly + good socket. + + * curs_lib.c, enter.c, keymap.c, keymap.h, mutt.h, mutt_curses.h, + mutt_ssl.c: This patch redoes yesterday's unbuffered input + patch. Now it uses a pseudo-option, which means less mess to carry + down the call stack. It also made it much easier to have the SSL + certificate menu be unbuffered, which it is now. So push commands + won't annoy you when entering passwords or accepting certificates. + +2003-07-15 11:41:32 Brendan Cully (roessler) + + * curs_main.c, globals.h, imap/command.c, imap/imap.c, + imap/imap.h, imap/imap_private.h, imap/util.c, mx.c: The attached + patch should keep all opened IMAP connections alive, no matter + what mailbox you are currently in. With the patch that got + committed yesterday, this should close bug 1523. + + (There was a typo in that patch. This one supersedes it.) + + * configure.in, .cvsignore: autoconf 2.5 compatibility. + +2003-07-14 12:40:03 Hugo Haas (roessler) + + * send.c: Fix #1520. + +2003-07-14 12:20:27 Pawel Dziekonski (roessler) + + * po/pl.po: small fix. + +2003-07-14 12:19:07 Brendan Cully (roessler) + + * imap/command.c, imap/imap.c: + + On Sunday, 13 July 2003 at 18:09, Brendan Cully wrote: + + > The attached patch should help when the connection to your + > postponed folder times out and you can't reconnect without + > restarting mutt. I'd like anyone who has that problem to + > try it and let me know how it works. + + I dug a little deeper. The attached patch seems to work better. It + complains the first time you try to recall a message, but works + the second. + + * account.c, curs_lib.c, enter.c, keymap.c, keymap.h, mutt.h, + mutt_curses.h: The attached patch prevents mutt from reading the + push buffer when asking for passwords. This is a proper fix for + bug 1312. I think it's uncontroversial. + +2003-07-04 17:15:34 Thomas Roessler (roessler) + + * imap/auth_sasl.c: Increase a buffer's size. + +2003-07-04 17:07:22 Nicolas Rachinsky (roessler) + + * OPS, curs_lib.c, curs_main.c, functions.h, menu.c: Introduce + tag-prefix-cond and end-cond. This makes simple conditional + execution of parts of macros possible. + +2003-07-04 17:03:51 Bruno Postle (roessler) + + * curs_main.c, pattern.c: Display an empty index when no messages + match search criteria. + +2003-07-04 16:57:56 Thomas Roessler (roessler) + + * init.h, muttlib.c: Add a ':' flag to % expandos. This will + make sure that any dots are converted into underscores. (_ + is already used for lowercasing the result of an expando.) + +2003-06-04 14:01:39 Thomas Roessler (roessler) + + * muttlib.c: Don't colorize empty lines generated with + state_attach_puts(); + +2003-05-29 17:49:00 Thomas Roessler (roessler) + + * po/id.po, po/eo.po: Updates from the respective authors. + +2003-05-29 17:48:28 David Shaw (roessler) + + * pgp.c: Fix part of #1564. + +2003-05-29 17:47:10 Matt Larson (roessler) + + * imap/imap.c: Look at UNSEEN, not RECENT in + imap_check_mailbox(). + +2003-05-29 17:47:10 Thomas Roessler (roessler) + + * init.c: Fix a segmentation fault which would occur when + pgp_sort_keys is set in a configuration file, but mutt is compiled + without PGP support. + + * gnupgparse.c: Fix PGP subkey handling when looking at key + capabilities. This should take care of the recent "mutt does + not see all keys" problems. + +2003-05-13 13:06:16 Dale Woolridge (roessler) + + * crypt.c: Fix gpg-agent use. + +2003-05-13 12:53:20 Thomas Roessler (roessler) + + * doc/manual.sgml.head: Remove useless examples about treating + text/enriched externally. #1549; Debian #190309. + +2003-05-13 12:50:04 Juan Altmayer Pizzorno (roessler) + + * recvattach.c: view-attachments does not extract the message + within a x-pkcs7-mime if it's only signed, but not encrypted. + Such a message results, for example, from a decrypt-save if the + message was previously encrypted and signed. + +2003-05-13 12:45:35 Thomas Glanzmann (roessler) + + * doc/manual.sgml.head: Fix an inconsistency between manual + and code. + +2003-05-13 12:43:45 David Shaw (roessler) + + * gnupgparse.c, pgppubring.c: Currently, mutt uses the OpenPGP key + algorithm to determine the capabilities of the key. For example, + in mutt, a key of type 1 (RSA) can both encrypt & sign. This is + not correct as per OpenPGP, however, where the capabilities of + the key are determined by both the algorithm and key capability + flags that are set on the key. This can lead to user confusion + when their RSA encrypt-only or sign-only key is listed for both + signing and encryption in mutt. + + GnuPG lists these flags in key listings, so it is easy to take + advantage of them. Here is a patch to use the flags, as well + as provide the flags in pgpring. Note that the pgp+pgpring + users won't see any change since the flags there are based on + the key algorithm as they are now, but the GnuPG users will see + an improvement. + +2003-05-12 16:21:26 Thomas Roessler (roessler) + + * enter.c: Fix alias completion when the alias is entered as + part of a group. (E.g., The Tea Party: alias1, alias2, alias3;) + +2003-05-03 20:07:40 Dan Nelson (roessler) + + * mutt.h, muttlib.c: Fix #1558. (mutt_expand_fmt rewrite; + OPT_MAX wasn't maximal.) + +2003-04-15 13:17:05 René Clerc (roessler) + + * compose.c: Fix two more cases in which ctrl-G is interpreted + as M_YES. + +2003-04-15 09:52:06 Dale Woolridge (roessler) + + * compose.c: The "sign (a)s" code strips the pgp application + bit causing drawing issues in redraw_crypt_lines(). Other bits + (well bit = encrypt) are ignored as a result. I've only tested + with pgp, but the same problem exists in the smime code too. + This inline patch (against cvs head revision) fixes the problem. + +2003-04-14 09:09:53 Thomas Roessler (roessler) + + * init.h, mutt.h, send.c: Fix the PGP / S/MIME selection mess + in send.c. This patch adds two new configuration variables, + $crypt_autopgp and $crypt_autsmime. Both are set to "yes" + by default. By turning them off, you can disable the automatic + selection of one or both mechanisms. (Useful when your mutt is + PGP- and S/MIME enabled, but you only use, say S/MIME.) + +2003-04-11 15:15:04 Thomas Roessler (roessler) + + * send.c: Backing out the previous change. It was nonsense. + +2003-04-11 11:56:58 Lars Hecking (roessler) + + * config.guess, config.sub, depcomp, install-sh, missing, + mkinstalldirs: updates. + +2003-04-11 11:56:22 Thomas Roessler (roessler) + + * send.c: Try to fix a PGP / S/MIME-related problem. Found by + Matt Larson , tracekd down by René Clerc + . + + * thread.c: Fix a segmentation fault. + +2003-04-09 08:21:59 Zardoz@users.sourceforge.net (roessler) + + * recvcmd.c: Fix #1531. (recvcmd.c duplicate of #1528) + +2003-04-08 22:32:56 Thomas Roessler (roessler) + + * lib.c: Avoid a division by zero. + + * color.c: Make sure has_colors() is only invoked when OPTNOCURSES + is unset. This fixes a segmentation fault on RH 8.0 which was + observed by Matt Larson . + + * browser.c, enter.c, imap/imap.c, lib.c, mutt_idna.c, mx.c, + sendlib.c, smime.c, thread.c: Try to catch a couple of cases + in which parameters for malloc calls could overflow. Thanks to + Timo Sirainen for the heads-up. + +2003-04-08 10:18:15 Thomas Roessler (roessler) + + * po/es.po: Mark a translation as fuzzy in order to fix #1522. + +2003-04-07 20:08:10 Thomas Roessler (roessler) + + * commands.c: Fix #1528. + +2003-04-07 07:57:49 René Clerc (roessler) + + * po/nl.po: update + +2003-04-06 11:00:59 Ivan Vilata i Balaguer (roessler) + + * po/ca.po: update + +2003-04-02 09:05:19 Bjoern Jacke (roessler) + + * smime_keys.pl: - add a missing filehandle closure - some + cleanups of unused/bogous code + +2003-04-02 08:47:28 Thomas Roessler (roessler) + + * contrib/Makefile.in, contrib/colors.default, + contrib/colors.linux: sample.muttrc-tlr would try to include + my color configurations, which weren't distrubted. Fix + that. (Bug noted while helping someone else to configure + mutt during a conference.) + +2003-04-02 08:43:24 Thomas Roessler (roessler) + + * contrib/sample.muttrc: Fix sample.muttrc. (Error noted by + Thomas Glanzmann.) + +2003-04-02 08:40:50 Gary Johnson (roessler) + + * curs_main.c: Here is the patch to fix the bug I reported + earlier in this thread, that sometimes when changing folders, + mutt would generate an error message and stop the further + processing of folder-hooks. + +2003-04-02 08:38:13 Vincent Lefevre (roessler) + + * po/fr.po: update + +2003-04-02 08:34:49 TAKAHASHI Tamotsu (roessler) + + * po/ja.po: update + +2003-04-02 08:31:00 Roland Rosenfeld (roessler) + + * po/de.po: update + +2003-04-02 08:28:24 David Shaw (roessler) + + * init.h, mutt.h, pgp.c: Here is the pgp_check_exit patch + updated for 1.5.4. This patch adds the pgp_check_exit option + (enabled by default) that causes mutt to check the exit code + of the PGP subprocess. A non-zero exit code means that the + subprocess failed and mutt will not continue to send the message. + + This is needed as in certain cases, PGP or GnuPG can fail to + completely process a document (say, if the gpg.conf file is + mangled, which is how I discovered the problem). Without an + exit code check, mutt will continue anyway and send the half + processed file. + +2003-04-02 08:21:09 Vsevolod Volkov (roessler) + + * po/ru.po: update. + +2003-03-19 22:43:08 Thomas Roessler (roessler) + + * po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, + po/uk.po, po/zh_CN.po, po/zh_TW.po, po/et.po, po/fr.po, po/gl.po, + po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, + po/nl.po, ChangeLog, Makefile.am, VERSION, po/Makefile.in.in, + po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, + po/es.po, reldate.h: automatic post-release commit for mutt-1.5.4 + +2003-03-19 22:18:43 Thomas Roessler (roessler) + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, + po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ja.po, po/ko.po, + po/lt.po, po/nl.po, po/gl.po, po/hu.po, po/id.po, po/it.po, + po/et.po, po/fr.po, po/da.po, po/de.po, po/el.po, po/eo.po, + po/es.po, VERSION, po/bg.po, po/ca.po, po/cs.po, reldate.h, + ChangeLog: automatic post-release commit for mutt-1.4.1 + + * pgppubring.c: Fix some memory management calls. (Stable branch.) + +2003-03-19 21:33:30 Edmund GRIMLEY EVANS (roessler) + + * imap/utf7.c: Fix a buffer overflow in utf8_to_utf7. (Stable + branch.) + + * imap/utf7.c: Fix a buffer overflow in utf8_to_utf7. + +2003-03-18 14:51:52 Andrew W. Nosenko (roessler) + + * buffy.c (test_last_status_new): Fix memory leak. Envelope + structure allocated by mutt_read_rfc822_header() was never + deallocated. + + * parse.c (mutt_read_rfc822_header): Comment added about + needing deallocate envelope structure returned by + mutt_read_rfc822_header(). + + * mutt_idna.c: (mutt_addr_for_display): Fix memory leak. `user' + and `domain' buffers was never deallocated. + + (mbox_to_udomain): Fix memory leak. `scratch' buffer was not + deallocated when `mbx' doesn't contain '@'. Also rewritten for + allocating memory only when needed and only how many as needed. + +2003-03-12 13:00:03 Thomas Roessler (roessler) + + * copy.c, sendlib.c: We need to re-format address headers instead + of just decoding them. + +2003-03-07 14:55:53 Brendan Cully (roessler) + + * mutt_sasl.c: The global callbacks set up in sasl_client_init + are not copied by the SASL library, so they can't be allocated + on the stack. This is the case with both versions of the SASL + library, and I frankly don't understand why it hasn't caused + problems before. Since it segfaults reliably on OS X for me now, + I thought a patch would be in order. + +2003-03-07 08:23:27 Thomas Roessler (roessler) + + * crypt.c, pgp.h: Don't use functions without importing the + corresponding prototype. + + * mutt_idna.c: It seems like libidn doesn't like to translate + NULL pointers. + +2003-03-07 07:52:49 Jim Mock (roessler) + + * globals.h: globals.h is looking for crypt.h instead of + mutt_crypt.h. + +2003-03-06 21:23:53 Thomas Roessler (roessler) + + * send.c: Fixing a segmentation fault. Here's how to + reproduce it: Start mutt. Compose a new message, with an + attachment. Turn on PGP signing. Press C-G on the pass + phrase prompt. Turn off PGP signing. Send the message. + +2003-03-05 21:18:24 Andrew W. Nosenko (roessler) + + * protos.h, sort.c: Fix a warning. + + * mutt_idna.c: Fix tlr's pre-processor screw-up. + +2003-03-04 09:51:07 Thomas Roessler (roessler) + + * mutt_idna.c, mutt_socket.c: Unset UseSTD3ASCIIRules, and set + AllowUnassigned. (Just reading some standards.) + +2003-03-04 09:31:19 Edmund GRIMLEY EVANS (roessler) + + * handler.c: Be more friendly about bad multipart/alternative + bodies; #1478. Note that the relevant standards explicitly + *forbid* nested MIME encodings. + +2003-03-04 09:27:21 Thomas Roessler (roessler) + + * copy.c: Fix another stupid error, and decode IDNs in the + CC header. + + * init.h: Fix two typos in one line. Noted by Thomas Glanzmann + and Steve Kennedy. + + * addrbook.c, alias.c, send.c: Fixing more IDN bugs. + +2003-03-03 14:25:14 Thomas Roessler (roessler) + + * copy.c, sort.c: Fixing some nits. + + * mutt_socket.c: IDNA support for the socket back-end. + + * Makefile.am, addrbook.c, alias.c, charset.h, commands.c, + compose.c, configure.in, copy.c, edit.c, hdrline.c, headers.c, + init.c, main.c, mutt_idna.c, mutt_idna.h, pgpinvoke.c, + protos.h, query.c, recvcmd.c, rfc822.c, rfc822.h, send.c, + sendlib.c: IDN support for e-mail messages. Things should work + automagically once you have the GNU IDN library available from + ftp://alpha.gnu.org/pub/gnu/libidn/ installed. For IDN's which + can't be losslessly recoded to your local character set, mutt + should automatically fall back to using the ASCII representation. + There's probably a considerable number of bugs in this, and the + code may, at this point, not even compile on machines without + libidn. Will start working on that ASAP. + +2003-03-03 08:26:21 Thomas Roessler (roessler) + + * contrib/sample.muttrc, doc/manual.sgml.head, recvcmd.c, + commands.c, init.h, mutt.h: Introduce a new option named + $bounce, and fix some inconsistencies in the messages created + when bouncing. Based on work done by Thomas Glanzmann + . + +2003-02-25 22:00:38 Thomas Roessler (roessler) + + * commands.c, recvcmd.c: Fix some (too lazy and tired to do all) + of the inconsistencies between message and attachment bouncing. + + * crypt.c: I should test-compile things before committing. + Stupid typo. + +2003-02-25 21:41:32 Michael Elkins (roessler) + + * query.c: Use mutt_strwidth for query response formatting. + (#1477) + +2003-02-25 21:37:59 Christian Vogel (roessler) + + * mx.c: Recognize MH folders used by sylpheed. + +2003-02-25 21:35:24 jesus.climent@hispalinux.es (roessler) + + * po/es.po: Fix a typo. (#1482) + +2003-02-25 21:33:16 Thomas Roessler (roessler) + + * doc/manual.sgml.head: Remove some ftp.guug.de URLs from the + manual. (#1485) + + * crypt.c: Fix #1486; noted by Jeroen Coekaerts + . + +2003-02-19 21:33:43 David Shaw (roessler) + + * pgpmicalg.c: 3156 defined several micalg values (pgp-md5, + pgp-sha1, etc.) Since then, three more hashes have been assigned + numbers in 2440bis. Here is a patch to add values for pgp-sha256, + pgp-sha384, and pgp-sha512 so mutt can properly handle them. + +2003-02-19 21:31:19 Thomas Roessler (roessler) + + * parse.c: Fix a memory leak observed by Vineet Kumar + . + +2003-02-13 09:55:02 David Shaw (roessler) + + * init.h: Here are some updates to the muttrc docs (spell check, + language tweaks, etc). No functional changes - this is just + language stuff. + +2003-02-13 09:50:00 Thomas Roessler (roessler) + + * pgp.c: Fix #1444, Debian #178563. The details of this problem + were tracked down by Steven Barker . + +2003-01-31 00:15:03 Thomas Roessler (roessler) + + * init.h: Change the default for crypt_replyencrypt back to "yes". + Noted by Thomas Poindessous in Debian bug #178899; also #1448. + + * pgp.c: Fix #1442 (thanks, Dale); properly initialize some + pointers which could otherwise lead to crashes. + +2003-01-30 23:54:30 David Shaw (roessler) + + * crypt.c, init.h, mutt.h, mutt_crypt.h, send.c: Introduce + $pgp_auto_traditional. + +2003-01-30 23:48:36 Thomas Roessler (roessler) + + * flags.c: The IMAP ACL patch broke things. + +2003-01-23 22:05:02 Nathan Dushman (roessler) + + * pop_auth.c: SASL2 support for popo_auth.c. + + * curs_main.c, flags.c, imap/imap.c, pager.c: The attached + patch provides improved support for IMAP ACLs (on servers that + support them). This means that mutt will now write the Seen + flag in mailboxes that allow it, even if the mailbox doesn't + allow other changes. + +2003-01-23 22:01:03 Thomas Roessler (roessler) + + * handler.c: Automatically use the text/plain handler for text/* + body parts which don't have a handler of their own. + +2003-01-21 18:56:10 Thomas Roessler (roessler) + + * cryptglue.c: Fix a typo which broke pgp-extract-traditional. + + * mutt_crypt.h: Fix an #ifdef. + +2003-01-21 12:33:41 Werner Koch (roessler) + + * Makefile.am, acconfig.h, attach.c, commands.c, compose.c, + configure.in, copy.c, copy.h, crypt.c, cryptglue.c, curs_main.c, + functions.h, globals.h, gnupgparse.c, handler.c, hdrline.c, + headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, + main.c, mutt.h, mutt_crypt.h, muttlib.c, mx.c, pager.c, + parse.c, pattern.c, pgp.c, pgp.h, pgpkey.c, pgplib.c, pgplib.h, + pgppubring.c, pop.c, postpone.c, protos.h, recvattach.c, send.c, + sendlib.c, smime.c, smime.h, sort.h: + + - To cleanup the pgp/smime code and prepare for other + backends. + - Support gpg-agent by not asking for a passphrase. + + This is just a start and probably we need a couple of other things + to do. One drawback is that the help menu does always list all + crypto realted stuff even when configured for no crypto at all. + Same goes for the configure options but I consider thsi a feature: + It allows to use the same .muttrc for different versions of mutt - + at least during development, this is an advantage. This all might + be fixed but requires some changes to the configuration system. + + Note, the use of the WithCrypto macro - it enables the compiler + to do dead-code-elimination depending on the configured backend. + This is better readable than all the nested ifdefs. I did some + short tests and it seems to work, althoug mutt's size does not + change largely when compiled w/o crypto. + + cryptglue.c is new as a warpper to all crypto calls; some are + still in crypt.c but they should eventually also be wrapped. + We don't use function pointers to keep a path to use dlopen or + runtime configured backends. crypt.h is also new and replaces + pgp.h and smime.h in most files (except for the backend). + + (Details are in Werner's changelog entries from January 4 + and January 6 below. Note that the configure update Werner + had done are not in the CVS at this point. -- T.R.) + +2003-01-09 17:27:25 Thomas Roessler (roessler) + + * pgppubring.c: Don't make a "hard" transition to the new GnuPG + syntax in pgpring. This change undoes one of David Shaw's + changes which were just committed. + +2003-01-09 17:24:41 David Shaw (roessler) + + * gnupgparse.c, pgppubring.c: The latest GnuPG has new abilities + to work with disabled keys. Part of this change will eventually + involve moving the 'd' that indicates a disabled key to a + different part of the key listing. + + To smooth this transition, as of version 1.2.2, GnuPG will + start giving the 'd' in both places (and will do this for a good + long time). + + Here is a patch so mutt will accept either the old or new syntax. + + * curs_lib.c: A recent change causes all mutt_yesorno prompts + to come out as [yes]/yes or [no]/no. Here's a fix. + +2003-01-06 Werner Koch (Committed 2003-01-21, roessler.) + + * crypt.c (crypt_valid_passphrase): Detect gpg-agent and don't ask + for the passphrase. + * pgp.c (pgp_decrypt_part, pgp_application_pgp_handler) + (pgp_sign_message, pgp_encrypt_message) + (pgp_traditional_encryptsign): Make sure that we never ever send + the passphrase if the gpg-agent has been detected. Likewise. + + * acconfig.h: Removed all remaining stuff as AC_TEMPLATEs to + configure.in. BTW, we should consider to rename configure.in to + configure.ac. + +2003-01-05 22:16:02 Thomas Roessler (roessler) + + * smime_keys.pl: Error checking for the creation of the temporary + directory; also, use file mode 0700. + +2003-01-05 22:08:25 Bjoern Jacke (roessler) + + * smime_keys.pl: Improve temporary file handling. + +2003-01-05 22:02:37 Thomas Roessler (roessler) + + * commands.c: Another mutt_yesorno() change, in order to correctly + interpret a C-g. + +2003-01-05 22:00:00 Armin Wolfermann (roessler) + + * recvcmd.c, send.c, alias.c, attach.c, commands.c, curs_lib.c, + main.c, muttlib.c, mx.c, pgpkey.c: Fix a number of invocations + of mutt_yesorno(): Always explicitly use the M_YES and M_NO + constants. Fixes a couple of cases in which C-g would be + mis-interpreted. + +2003-01-04 Werner Koch (Committed 2003-01-21, roessler.) + + Replaced the use of HAVE_PGP and HAVE_SMIME by a more readable + and extendable solution. + + * pgplib.h: Moved enum pgp_ring and KEYFLAGS_* to + * crypt.h: here. + * smime.c (mutt_is_application_smime): Moved to + * crypt.c (mutt_is_application_smime): here. + * pgp.c (mutt_is_application_pgp): Moved to + * crypt.c (mutt_is_application_pgp): here. + * pgp.c (pgp_is_multipart_encrypted): Removed. Merged code with + * crypt.c (mutt_is_multipart_encrypted): this. + + * mutt.h: Protect against double inclusion. + + * pgplib.h (struct pgp_keyinfo): Remove the typedef to pgp_key_t. + * crypt.h (pgp_key_t): Declare the typedef here. NOTE: This is + now a pointer. Changed all usages accordingly. + + * configure.in: Replace HAVE_PGP and HAVE_SMIME by the new + CRYPT_BACKEND macros. Always include all OPS.*. + (LIBOBJ): Replaced by AC_LIBOBJ as required by newer autoconfs. + * Makefile.am (EXTRA_mutt_SOURCES): Move crypt.c to mutt_SOURCES. + (mutt_SOURCES): Add cryptglue.c + (EXTRA_DIST): Add crypt.h + + * pgp.h, pgplib.h, smime.h: Use the header only when the + approriate backend has been configured. + * pgp.c, pgpkey.c, smime.c: Build only if the approriate + CRYPT_BACKEND_ macro is defined. + * pgp.h, smime.h, global.h: Moved all variable declarations to + global.h because they are now always defined. + + * sort.h: Always define PgpSortKey, although it does not belong to + here. + + * keymap.h: Unconditionally include all PGP and SMIME stuff. + * mutt.h: Ditto. + * protos.h: Ditto. + + * init.h (HAVE_SMIME): Unconditionally include all crypto related + definitions. Mark the doc entries with "(Crypto/PGP/SMIME only)". + + * globals.h: Replace gpg.h and smime.h by crypt.h. + + * functions.h: Always include all crypto commands. + + * copy.h: Unconditionally define the crypto related M_CM_ + + * pgplib.h: Move APPLICATION_PGP and PGP* to crypt.h and include + it. + * smime.h: Move APPLICATION_SMIME and SMIME* to crypt.h and + include it. + * mutt_crypt.h (ENCRYPT,SIGN,GOODSIGN, BADSIGN): Move to crypt.h. + + * crypt.c: Replaced pgp.h and smime.h header by crypt.h. Always + include all functions but shortcut them depending on WITHCRYPTO. + All over the place use WITHCRYPTO instead of ifdefs. Replaced all + direct calls of the backend fucntions by twrapper functions + defined in cryptglue.c + (crypt_get_keys): Removed prototypes. + * pgp.h (pgp_findKeys): New prototype. + * smime.h (smime_findKeys): New prototype. + * cryptglue.c: New. + * crypt.h: New. + * mutt_crypt.h: Moved all crypt_* prototypes to gcrypt.h. + Unconditionally use this file. + + * init.c: Replaced pgp.h and smime.h header by crypt.h. + (parse_set): Use WITHCRYPTO instead of ifdefs. + (mutt_var_value_complete): Ditto. + + * sendlib.c: Replaced pgp.h and smime.h header by crypt.h. + (write_as_text_part): Now one macro using WITHCRYPTO. + (mutt_write_mime_body): Use WITHCRYPTO instead of ifdefs. + (mutt_make_message_attach): Ditto. + (mutt_write_fcc): Ditto. + + * send.c: Replaced pgp.h and smime.h header by crypt.h. + (include_forward): Use WITHCRYPTO and validate passphrases for pgp + and smime. + (include_reply): Ditto. + (generate_body): Use WITHCRYPTO instead of ifdefs. + (ci_send_message): Ditto. + + * recvattach.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_gen_attach_list): Use WITHCRYPTO instead of ifdefs. + (mutt_attach_display_loop): Ditto + (mutt_view_attachments): Ditto. + + * postpone.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_get_postponed): Use WITHCRYPTO instead of ifdefs. + (mutt_parse_crypt_hdr): Always include and use WITHCRYPTO instead + of ifdefs. + (mutt_prepare_template): Use WITHCRYPTO instead of ifdefs. + + * pop.c: Removed pgp.h and smime.h. + (pop_fetch_message): Use WITHCRYPTO instead of ifdefs. + + * pattern.c: Replaced pgp.h and smime.h header by crypt.h. + (Flags): Always include the crypto flags. + (msg_search): Use WITHCRYPTO instead of ifdefs. + (mutt_pattern_exec): Ditto. + + * parse.c: Removed pgp.h and smime.h. + (mutt_parse_mime_message): Use WITHCRYPTO instead of ifdefs. + + * pager.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_pager): Use WITHCRYPTO instead of ifdefs. + + * mx.c: Removed smime.h and pgp.h. + (mx_update_context): Use WITHCRYPTO instead of ifdefs. + + * muttlib.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_needs_mailcap): Use WITHCRYPTO. Note, that there used to be + an error when PGP was not configured so that TYPEAPPLICATION was + not recognized for SMIME. + (mutt_is_text_part): Use WITHCRYPTO instead of ifdefs. + + * main.c: Include crypt.h. + (show_version): Remove HAVE_PGP and HAVE_SMIME. Add + CRYPT_BACKEND_CLASSIC_PGP, CRYPT_BACKEND_CLASSIC_SMIME. + + * keymap.c: Include crypt.h so that we can test WITHCRYPTO. + (Menus): Always include pgp and smime. + (km_init): Create smime and pgp bindings depending on WITHCRYPTO. + (km_get_table): Return OpPgp depending on WITHCRYPTO. + + * hook.c (mutt_parse_hook): Use WITHCRYPTO instead of ifdefs. + (mutt_crypt_hook): Always include. + + * headers.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_edit_headers): Use WITHCRYPTO instead of ifdefs + + * hdrline.c: Replaced pgp.h and smime.h header by crypt.h. + (hdr_format_str): Use WITHCRYPTO. + + * handler.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_can_decode): Use WITHCRYPTO instead of ifdefs. + (mutt_can_decode): Application/smime is now also checked when PGP + support is not configured. + (mutt_body_handler): Use WITHCRYPTO + + * curs_main.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_index_menu): Shortcut crypto only operations depending on + WITHCRYPTO. + + * copy.c: Replaced pgp.h and smime.h header by crypt.h. + (_mutt_copy_message): + + * compose.c: Replaced pgp.h and smime.h header by crypt.h. + (enum): Always include HDR_CRYPT and HDR_CRYPTINFO. + (redraw_crypt_lines): Always include this fnc but shortcut it + depending on WITHCRYPT. Draw lines depending on the configured + crypto support. + (pgp_send_menu): Always include this one. Call wrapper functions. + (smime_send_menu): Likewise. + (draw_envelope): Use WITHCRYPTO instead of ifdefs. + (mutt_compose_menu): Allow pgp/smime commands only when configured. + + * commands.c: Replaced pgp.h and smime.h header by crypt.h. + (mutt_display_message,pipe_msg, _mutt_pipe_message) + (set_copy_flags, mutt_save_message, mutt_edit_content_type) + (_mutt_check_traditional_pgp): Use pgp wrapper. + + * attach.c (mutt_view_attachment): Removed HAVE_GPG and HAVE_SMIME + and replaced by global variable WITHCRYPTO. Replaced pgp and + smime header by crypt.h.x + +2003-01-03 18:07:36 Thomas Roessler (roessler) + + * pgp.c: Detect in-line key material when checking for traditional + PGP messages. + +2002-12-22 20:04:51 René Clerc (roessler) + + * po/nl.po: update + +2002-12-22 20:01:32 Bjoern Jacke (roessler) + + * smime_keys.pl: Remove an unnecessary invocation of "cat"; + call openssl with the full path. + +2002-12-22 11:20:00 Vincent Lefevre (roessler) + + * po/fr.po: Another fr.po update for the CVS (taking into account + the change in pgpkey.c:486)... + +2002-12-22 11:17:24 Martin Michlmayr (roessler) + + * hdrline.c, init.h: Add %A to the format strings, which expands + to the reply-to address (if present) or to the author's address + when there's no Reply-To header. + +2002-12-21 20:32:13 Thomas Roessler (roessler) + + * curs_main.c: OK, Michael is right: Gotos suck. ;-) + +2002-12-21 13:25:11 Vsevolod Volkov (roessler) + + * po/ru.po: update + +2002-12-20 09:37:59 David Shaw (roessler) + + * pgpkey.c: Minor tweak to an error message. + +2002-12-20 09:29:12 Pawel Dziekonski (roessler) + + * po/pl.po: update + +2002-12-19 11:48:58 Thomas Roessler (roessler) + + * doc/manual.sgml.head, doc/muttrc.man.head: Improve the + documentation of pgp-hook/crypt-hook. + + * pgpkey.c: Don't bother the user with weak keys when there's + a strong one. Experimental, based on discussions on mutt-dev. + + * cvslog2changelog.pl: Identify both the author of a change and + the one who committed it to the CVS in the changelog. + +2002-12-19 07:42:36 Vincent Lefevre (roessler) + + * po/fr.po: update + +2002-12-19 07:37:01 Thomas Roessler (roessler) + + * Makefile.am: Michael doesn't have $VISUAL set. + +2002-12-18 17:29:56 Sahil Tandon + + * init.h: I found a small typo in the manual, specifically + at this[1] URL. The description of the smart_wrap variable reads: + "Controls the display of lines longer then the screen width in the + internal pager." The word _then_ should be _than_ if I'm not + mistaken. + +2002-12-18 10:26:35 Thomas Roessler + + * po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, + po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, + po/zh_TW.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, + po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, + po/id.po, po/it.po: make update-po + + * mkchangelog.sh: Turn on compression when getting log messages + from the CVS server. (Now that I don't have the server locally, + bandwidth is expensive... ;-) + + * keymap.c: Make the messages from the what-key function + internationalizable. + + * crypt.c, crypt.h, mutt_crypt.h, pgp.c, pgp.h, smime.c, + smime.h: Rename crypt.h to mutt_crypt.h. + + * Makefile.am: cvs update ChangeLog before trying to update + it locally. + +2002-12-18 07:37:56 Roland Rosenfeld + + * po/de.po: update + +2002-12-17 13:45:16 Vincent Lefevre + + * po/fr.po: update fr.po + +2002-12-17 13:04:29 Thomas Roessler + + * .cvsignore: Ignore some more files. + + * Makefile.am, mkjtags.c: Remve that jed tags generator. I don't + use it anyway. + + * cvslog2changelog.pl: Adding Michael's address to the changelog + generator. + + * build-release: Adopting the release-building script to the + new changelog process. + + * po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, + po/zh_TW.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, + po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/es.po, po/et.po, + po/fr.po, po/gl.po, VERSION, build-release, po/ca.po, po/cs.po, + po/da.po, po/de.po, po/el.po, po/eo.po, reldate.h: automatic + post-release commit for mutt-1.5.3 + + * OPS, curs_main.c, functions.h: Experimental: Introduce + {next,previous}-new-then-unread. These functions behave + like {next,previous}-new as long as new messages are + visible. When no new messages are visible any more, there's + a fall-back to {next,prev}-unread. + + Memo to self: Impose a weekly quota on the use of goto + statements. + +2002-12-16 20:28:46 Edmund GRIMLEY EVANS + + * handler.c, rfc2047.c, url.c: Fix #1424. + +2002-12-16 17:59:51 Thomas Roessler + + * pgp.c: Experimental short-cut code if the "image" of an address + under a pgp-hook looks like a hexadecimal key id. + +2002-12-13 15:53:36 David Shaw + + * lib.c: Fixing Thomas' screw-up in mutt_concat_path. + +2002-12-13 11:00:44 René Clerc + + * po/nl.po: update. + +2002-12-11 22:47:57 Thomas Roessler + + * muttlib.c, pgp.c, protos.h, send.c: Fix #1417; thanks to + Derek D. Martin for the excellent observation. + (In addition to the fix proper, some tracking of temporary files + is added to mutt's debugging output.) + +2002-12-11 22:23:42 Thomas Roessler + + * crypt.c: Call endwin() before calling PGP for traditional + encryption. + +2002-12-11 15:51:57 Vincent Lefevre + + * po/fr.po: update. + +2002-12-11 15:20:21 Thomas Roessler + + * browser.c, complete.c, hook.c, init.c, lib.c, lib.h: Herbert + Martin Dietze notes that + mutt may currently build IMAP URLs like imap://exchange//herbert + for FCCs. The fix in this patch is to include a function named + mutt_concat_path which concatenates path elements, but avoids + the creation of double slashes. (These don't create problems + when you're just accessing the file system, but apparently they + do cause problems with IMAP.) + + * imap/auth.c, imap/command.c, imap/imap.c, imap/imap.h, + imap/util.c, date.c, dotlock.c, dotlock.h, edit.c, editmsg.c, + enter.c, extlib.c, flags.c, from.c, functions.h, gnupgparse.c, + handler.c, hash.c, hash.h, headers.c, help.c, history.c, + history.h, keymap.c, keymap.h, lib.c, lib.h, main.c, makedoc.c, + mapping.h, menu.c, mh.c, mime.h, mkjtags.c, mutt_curses.h, + mutt_menu.h, mutt_regex.h, mutt_socket.c, muttlib.c, mx.c, mx.h, + pager.h, parse.c, pattern.c, pgp.c, pgp.h, pgpinvoke.c, pgpkey.c, + pgplib.c, pgplib.h, postpone.c, protos.h, query.c, recvattach.c, + recvcmd.c, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, + rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, + score.c, signal.c, snprintf.c, sort.c, sort.h, status.c, + system.c, thread.c, url.c, addrbook.c, alias.c, attach.c, + attach.h, browser.c, browser.h, buffy.c, buffy.h, charset.c, + charset.h, commands.c, complete.c, compose.c, copy.h, crypt.c, + crypt.h, curs_main.c: Fix Mike's and my e-mail addresses in + copyright lines. + + * muttbug.sh.in: Ask for the user's e-mail address. + + * pager.c: Try to make search-next behave more closely to what + people are used to, again. The behaviour introduced by this + patch will give you the previous search string as the default, + but will search-next when you just press enter without changing + the search string. + +2002-12-10 20:56:52 Thomas Roessler + + * imap/command.c, imap/imap.c, imap/message.c, imap/utf7.c, + imap/util.c, score.c, send.c, sendlib.c, smime.c, thread.c, url.c, + addrbook.c, alias.c, attach.c, browser.c, buffy.c, charset.c, + color.c, compose.c, copy.c, crypt.c, curs_main.c, enter.c, + gnupgparse.c, hash.c, history.c, hook.c, init.c, lib.c, main.c, + mbox.c, menu.c, mh.c, mutt_ssl.c, mutt_ssl_nss.c, muttlib.c, + mx.c, pager.c, parse.c, pattern.c, pgp.c, pgpkey.c, pgplib.c, + pgppacket.c, pgppubring.c, pop.c, pop_auth.c, postpone.c, + query.c, recvattach.c, remailer.c, rfc1524.c, rfc2047.c, + rfc2231.c, rfc822.c: Replace safe_free calls by the FREE macro. + +2002-12-09 19:06:40 Thomas Roessler + + * Makefile.am: Minor formatting fix. + + * cvslog2changelog.pl: Change the ChangeLog format as + suggested by Martin Michlmayer. + + * send.c: Try to fix another obscure error in S/MIME + auto-signing upon reply. + + * rfc822.c: Experimental patch to fix #1318. + +2002/12/09 18:09:49 David Jardine + + * init.h: Documentation fix concerning %L in index_format. + #1313. + +2002/12/09 18:05:54 David Shaw + + * mh.c, parse.c: Reduce the meaning of the mark_old option + so it only controls whether new messages are marked as old + when leaving the mailbox. + +2002/12/09 17:54:25 Jesus Climent + + * po/es.po: Fix a typo. (#1392) + +2002/12/09 17:52:50 Anders Helmersson + + * addrbook.c, curs_lib.c, protos.h, query.c: Fix #1390. + Based on a patch submitted earlier by Edmund Grimley Evans. + +2002/12/09 17:44:54 Thomas Roessler + + * PATCHES: Ups. + +2002/12/09 17:44:28 Michael Elkins + + * OPS, PATCHES, curs_main.c, functions.h, keymap.c, keymap.h, + menu.c: This patch adds two features to mutt: + + - you can now specify the octal code of a key in a bind or + macro function, using the syntax . Eg, bind index + <541> show-version This allows you to bind to a function + key for which Mutt doesn't have a friendly name associated + with it. + + - adds a what-key function which allows you to press a key + and have mutt show you the decimal/octal value. (not + bound to anything by default) + +2002/12/09 16:07:24 Toomas Soome + + * po/et.po: update. + +2002/12/09 13:30:02 Thomas Roessler + + * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, + po/uk.po, po/zh_CN.po, po/zh_TW.po, po/gl.po, po/hu.po, + po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, + po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/ca.po, + po/cs.po, po/da.po, po/de.po, po/el.po, compose.c: Try to + fix a localization issue identified by Pawel Dzienkonski + (#1410). Side effect: All translations will need an update + of the S/MIME key translations. + +2002/12/09 11:20:14 Pawel Dziekonski + + * po/pl.po: update. + +2002/12/08 23:14:43 ph04169@cc.uoi.gr + + * po/el.po: update. + +2002/12/08 16:11:35 TAKAHASHI Tamotsu + + * po/ja.po: update. + +2002/12/08 15:10:59 Roland Rosenfeld + + * po/de.po: Update. + +2002/12/07 19:19:34 Thomas Roessler + + * Makefile.am: yet another one. + + * Makefile.am: Another changelog-related change. + + * ChangeLog, Makefile.am, cvslog2changelog.pl: Automatically + update ChangeLog as part of the commit process. + + * doc/Makefile.in, ChangeLog, ChangeLog.old, Makefile.am, + cvslog2changelog.pl, mkchangelog.sh: Change the style of + ChangeLog: Now, the actual patch submitter's name is + extracted from the commit message and used for the change + log. For the moment, the date format doesn't match the one + in the old changelog. If you want to fix this, submit a + patch to cvslog2changelog.pl. ;-) + +2002/12/07 08:55:59 Vincent Lefevre + + * po/fr.po: update + +2002/12/07 08:55:23 Paul Walker + + * pgppubring.c: Fix a compilation warning. + +2002/12/07 08:53:21 Thomas Roessler + + * mh.c, mutt.h, muttlib.c: Gracefully handle unknown maildir flags. + +2002/12/06 11:30:08 Thomas Roessler + + * Makefile.am: Run check_sec.sh before committing. + +2002/12/06 11:28:30 Brendan Cully + + * m4/gettext.m4, m4/iconv.m4, build-release, configure.in: autoconf cleanup. + +2002/12/06 11:14:13 Thomas Roessler + + * po/zh_CN.po, po/zh_TW.po, po/uk.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/da.po, po/de.po, VERSION, po/ca.po, po/cs.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.5.2 + + * curs_lib.c, pgppubring.c: Fixing a number of traditional malloc calls which have made their + way into the code. + + * build-release: Don't post announcements automatically for the moment. + +2002/12/05 22:30:02 Michael Elkins + + * doc/manual.sgml.head: Fix #1398. + +2002/11/25 14:16:47 Lars Hecking + + * sendlib.c, ChangeLog, INSTALL, charset.h, configure.in: The noiconv patch. + +2002/11/14 08:12:30 Michael Elkins + + * curs_lib.c: Fix #1388. + +2002/11/13 10:10:52 Thomas Roessler + + * main.c: A description of -A was lacking from the help string. + + * doc/manual.sgml.head, doc/mutt.man, main.c, protos.h: Add a new command line option -A which is used to expand aliases. + + * keymap.c: Add a safeguard #ifdef for the KEY_BTAB entry. Suggested by Thomas + Dickey. + +2002/11/12 09:20:30 Michael Elkins + + * keymap.c: Tell mutt about the back-tab key (shift tab). + +2002/11/12 09:20:09 Thomas Roessler + + * Makefile.am: ups. + + * Makefile.am: Add "make pclean" in order to clean up PATCHES. + +2002/11/12 08:55:57 TAKAHASHI Tamotsu + + * po/ja.po: update + +2002/11/12 08:41:18 Thomas Roessler + + * README: Add an explicit note that CVS doesn't work from ftp.mutt.org any more. + +2002/11/12 08:35:34 "Yasuhiro Matsumoto" + + * mbyte.c: cp932 should be treated like shift_jis. + +2002/11/12 08:20:11 Nathan Dushman + + * imap/auth_gss.c, imap/auth_sasl.c, configure.in, main.c, mutt_sasl.c, mutt_sasl.h: Hi - this is a patch against mutt-1.4 to use version 2 of the Cyrus + SASL library; all changes are ifdef'd so as not to break SASLv1 + support. This includes a patch to configure.in to allow the choice + between v1 and v2, but someone with a better understanding of + autoconf should double-check it. + +2002/11/12 08:00:51 Michael Elkins + + * handler.c: Actually commit patch-1.5.1.me.long_qp.2. + + * mailbox.h, mh.c, mx.c: The maildir_time patch. + +2002/11/11 21:17:25 Thomas Roessler + + * muttbug.sh.in: You shall not use CVS to distribute test versions. + + * muttbug.sh.in: more fixes. + + * muttbug.sh.in: Add some rpm-related intelligence to flea. + + * muttbug.sh.in: Fix flea's interaction with bug(1) on Debian systems. + + * PATCHES: Clean up the patch list. + +2002/11/11 20:32:30 Michael Elkins + + * PATCHES, hdrline.c: Fix #485: Make %z work like %Z inside of %{} in $index_format. + + * PATCHES, copy.c: Fix #1379 - update the total mailbox size when an attachment is + deleted. + + * PATCHES, curs_main.c, menu.c, pager.c: Fix #1310; redraw problems. + + * doc/manual.sgml.head, init.h: Fix #1306. + + * send.c: Fix #1364. + +2002/11/11 19:50:23 Steve Kennedy + + * pgp.c: Fix memory leak in the PGP code. + +2002/11/11 19:46:29 Paul Walker + + * commands.c, protos.h, sendlib.c: Fix #718. + +2002/11/11 19:38:30 Thomas Roessler + + * sendlib.c: Fix #1366. + +2002/11/11 19:24:24 Martin Siegert + + * mx.c: Fix IMAP moving; #1367. + +2002/11/11 19:22:17 rene@clerc.nl + + * send.c: Another S/MIME ifdef misses and causes compilation problems. + +2002/11/11 19:21:24 Michael Elkins + + * init.h: patch-1.5.1-me.status_doc.2 + +2002/11/11 19:16:11 Thomas Roessler + + * alias.c, init.c, protos.h: patch-1.5-tlr.alias-parse.1 - extension of patch-1.5.1-me.aliascheck.1 + + This patch catches the same kind of bad alias names caught by + Michael's patch. There are some extensions: + + 1. Mutt makes sure that it doesn't _suggest_ bad names to the user. + 2. If a name is bad, the user is informed, and may elect to fix the + name. In this case, mutt will automatically suggest a fixed + version. + 3. If the user insists in the bad name, it's written into the + aliases file with proper quoting. + 4. When mutt parses the aliases file, it now uses the normal + tokenizer routines in order to properly handle quoted alias names. + +2002/11/11 18:36:25 Michael Elkins + + * handler.c: patch-1.5-me.long_qp.2 (#1371) - fix truncation with overly long Q-P + encoded lines. + +2002/10/22 21:24:07 René Clerc + + * commands.c: Add some missing #ifdefs. + +2002/10/22 21:23:20 Michael Elkins + + * init.h, recvattach.c: Documentation fix; #1326 + +2002/10/22 21:22:45 René Clerc + + * send.c: Another crypt_reply fix. + +2002/10/22 21:20:07 Michael Elkins + + * contrib/sample.muttrc: #1357 + +2002/10/10 09:50:03 René Clerc + + * send.c: Make sure that crypt_reply replies with the same type, despite a + possible S/MIME default. + +2002/10/10 09:43:29 Michael Elkins + + * doc/manual.sgml.head, doc/manual.sgml.head: Document escaping rules for regular expressions (#1351). + + * pager.c: Fix header coloring, so there is no difference between ncurses and + slang. + + * init.h: PGP documentation glitch. + +2002/10/10 09:33:33 Paul Walker + + * doc/manual.sgml.head: Fix #1340 (documentation) + +2002/10/10 09:33:05 Michael Elkins + + * pager.c: Jeremy Lin wrote: + > When I search with / and get a match, doing '/\r' doesn't move to the next + > match. This behavior is unlike the less pager, and is rather useless, IMHO. + + Try the attached patch. + +2002/09/23 12:08:43 Thomas Roessler + + * buffy.c: A variant of buffy notification. Note: If you folks don't like + this, we can return to the old version. + +2002/09/09 21:48:19 Rudi Chiarito + + * OPS, browser.c, buffy.c, curs_main.c, functions.h, pager.c, protos.h: Add a buffy-list function, and display more information when new + mail arrives. With some modifications from tlr. + +2002/09/09 21:19:08 Michael Elkins + + * mh.c: Fix #1321. + + * mh.c: [STABLE] Fix #1321. + +2002/09/09 21:04:03 Tony Leneis + + * signal.c: Tru64 Unix portability patch. + + * signal.c: [STABLE] Tru64 Unix portability patch. + +2002/09/09 21:02:05 Vincent Lefevre + + * doc/manual.sgml.head: Fixing a typo. + +2002/09/09 20:53:46 Thomas Roessler + + * postpone.c: Fixing #1300. Noted by David Shaw . + + * postpone.c: Fix #1299; noted by David Shaw . + +2002/09/09 20:20:20 Michael Elkins + + * init.h, mutt.h, send.c: Introducing $forward_edit. + + * send.c: #265: + + > Suppose a user wants to fcc to a file (e.g., /a/b/c) but accidentally + > typed a = before the path name. Mutt will fail to find the =/a/b/c + > folder, display the error message and beep, but immediately erase the + > error message; the mail will be sent even though the fcc failed. (The + > same can be accomplished by accidentally mistyping other parts of the + > path name.) On local systems where screen update is quick, the user + > might not notice the error message at all. + > + > The problem with this behaviour is that the user might have no chance + > to read the error message if the screen update is quick enough; as a + > result (s)he might not notice that the fcc failed. + > + > A related thing (probably can't be classified as a problem) is that if + > fcc fails, the user probably don't want to send the mail out because + > if fcc is requested (s)he probably very much want to keep a copy of + > the sent mail. + + Try the following patch. We keep track of whether or not the fcc + failed with a local var `fcc_error' and perform the same behavior as + if the actual send of the message failed (without really sending) + when the FCC fails, thus giving the user a chance to correct the + error. + + * globals.h, init.h, send.c: Introduce $content_type. There's one change against Michael's + patch, in how the "format=flowed" parameter is used. + +2002/09/09 20:04:45 Vincent Lefevre + + * history.c: [STABLE] Fixing history classes. + + * history.c: Fixing history classes. + +2002/09/09 19:56:25 Armin Wolfermann + + * mh.c: when doing the second parsing pass on a maildir, mutt doesn't delete + the fake HEADER struct if the file is unreadable. With this fix + unreadable files get silently ignored (like in the MH case). + +2002/09/09 19:55:01 "TAKAHASHI, Tamotsu" + + * po/ja.po: Update. + +2002/09/09 19:53:24 Michael Elkins + + * editmsg.c: Fixing #1149: Truncate files used for editing messages. + +2002/09/09 19:29:26 Nicolas Rachinsky + + * doc/manual.sgml.head, doc/muttrc.man.head, buffy.c, buffy.h, init.h: An unmailboxes command. #1311. + +2002/09/09 19:24:54 Michael Elkins + + * attach.c: Fixing #1330. + + * attach.c: [STABLE] Fixing #1330. + +2002/08/09 07:01:11 Thomas Roessler + + * doc/muttrc.man.head: Document unalternative_order in the manual page. + +2002/08/09 06:58:37 Michael Elkins + + * doc/manual.sgml.head, init.c, init.h: The following patch adds the `unalternative_order' command. It also + allows using "*" more generically in un-commands which use + parse_unlists(). + +2002/08/05 17:25:05 Michael Elkins + + * pgpewrap.c, pgppubring.c, pgpewrap.c, pgppubring.c: Error handling fixes. + +2002/07/26 08:24:01 Michael Elkins + + * doc/manual.sgml.head: Documentation for reply-hook. Another patch (for the manual page) + would be most welcome. ;-)) + + * curs_lib.c: The attached patch fixes mutt_yesorno() so that the question will be + truncated enough to always fit in the default answer string. The + size is calculated on the fly so that there is no artificial + truncation. + +2002/07/24 09:46:58 TAKIZAWA Takashi + + * mutt.h, mutt.h: The attached patch sets MB_LEN_MAX to 16, which is MB_LEN_MAX value + on glibc-2.2. It works only with --without-wc-funcs switch. It may + be applied to mutt-1.4 and mutt-1.5.1. + +2002/07/24 09:37:41 Lars Hecking + + * configure.in, configure.in: Fix a quoting sloppiness. Noted by Vincent Lefevre. + +2002/07/24 09:33:59 Thomas Roessler + + * browser.c, browser.c: Fixing #1282. An off-by-one error. :-/ + +2002/07/24 09:20:22 Michael Elkins + + * mutt.h, send.c, hook.c, init.h: reply-hook. Documentation still needed. + +2002/07/24 09:06:06 Vincent Lefevre + + * po/fr.po: update. + +2002/07/24 08:41:31 Michael Elkins + + * doc/mutt.man, compose.c, editmsg.c, init.c, init.h, attach.c, doc/mutt.man, compose.c, editmsg.c, init.c, init.h, attach.c: Fix $editor and $visual. Based on an earlier patch from Edmund + Grimley Evans. + +2002/07/19 19:23:21 Michael Elkins + + * doc/manual.sgml.head: Another documentation patch. + +2002/07/17 12:48:38 Rocco Rutte + + * sendlib.c: * Thomas Roessler [02-07-08 10:14:53 +0200] wrote: + > * sendlib.c, 3.12 -> 3.13 + > From: Rocco Rutte + + > Make encode_from a bit more aggressive, by also catching a 'f' in + > the beginning of a line. + + 'Catch' is good but also to encode it is better. It may have + been too late (sorry for that) so I fixed it. I don't know + why the current source only escapes lines that actually + begin with 'from' or 'From' followed by some text. I think + that escaping 'from' or 'From' on a single line should be + done, too. + + Not a big deal, anyways. + +2002/07/16 07:28:11 Michael Elkins + + * main.c, main.c: Update copyright notices. + +2002/07/07 19:33:50 Cedric Duval + + * doc/manual.sgml.head, doc/mutt.man, init.h: Documentation fixes. + +2002/07/07 19:29:05 "TAKAHASHI, Tamotsu" + + * doc/manual.sgml.head: Dcumentation fixes. + +2002/07/07 19:23:22 Cedric Duval + + * doc/manual.sgml.head, doc/mutt.man, init.h: Documentation fixes. + +2002/07/07 19:22:19 Rocco Rutte + + * sendlib.c: Make encode_from a bit more aggressive, by also catching a 'f' in + the beginning of a line. + +2002/07/07 19:13:03 Velko Hristov + + * po/bg.po: Update. + +2002/07/07 19:11:15 Jeremy Blosser + + * init.h: Add unauto_view to the stable branch. A one-liner. + +2002/06/28 19:52:31 Michael Elkins + + * doc/manual.sgml.head, doc/manual.sgml.head: Documentation fix (#271). + +2002/06/18 10:03:52 (automatic) + + * po/zh_TW.po, po/tr.po, po/uk.po, po/zh_CN.po, po/sv.po, po/sk.po, po/ru.po, po/pt_BR.po, po/nl.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/it.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/el.po, po/da.po, po/de.po, po/ca.po, po/cs.po: "make update-po" + +2002/06/18 10:02:44 several submitters + + * po/ca.po: Adding a BG translation. Update for CA. + +2002/06/18 10:02:43 Thomas Roessler + + * po/bg.po: branches: 1.1.2; + file bg.po was initially added on branch mutt-1-4-stable. + +2002/06/18 10:02:43 several submitters + + * po/bg.po: Adding a BG translation. Update for CA. + + * configure.in: Adding a BG translation. + +2002/06/18 09:53:12 Michael Elkins + + * init.c, init.c: The string used to store the commmand for a backtic expansion in the + muttrc was not free'd if the command failed for some reason. + +2002/06/18 09:52:13 David Champion + + * m4/gssapi.m4: Okay, two bugs here. One's an oversight of mine in my previous patch, + where I tried to use "[hH]" as Bourne code while m4 had quoting set to + ([, ]) -- this probably makes mutt mis-detect Heimdal after all. + + The other is not mine (i.e., it's in cvs now) and it makes mutt + overstrike $LIBS if Heimdal or MIT Kerberos is detected. This is a + problem for anyone who needs -lnsl -lsocket, in particular. I was + fixing + this by hand during late 1.3.x releases, as I didn't have time to + track + it down.... + + Here's a patch against the current (unpatched) 1.5 cvs copy of + m4/gssapi.m4. It probably should go into both branches. Sorry for the + repeats. + +2002/06/06 23:13:54 Michael Elkins + + * color.c: Fix #1230. + +2002/06/06 12:22:05 Will Fiveash + + * init.h, init.h: Fix a couple of compile-time warnings. + +2002/05/31 16:59:39 Edmund GRIMLEY EVANS + + * charset.c, charset.h, sendlib.c, charset.c, charset.h, sendlib.c: Fix charset-hook. + +2002/05/31 16:45:49 Lars Hecking + + * m4/iconv.m4, INSTALL, charset.h, configure.in: The noiconv patch. Should probably have been in 1.4. + +2002/05/30 12:15:02 Thomas Roessler + + * rfc822.c: Properly handle empty addresses (<>) when they show up in mail + headers. The approach taken is to store this address as <@>, and to + check this special case when printing an address. + +2002/05/29 09:31:51 Thomas Roessler + + * po/zh_CN.po, po/zh_TW.po, po/uk.po, po/tr.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ko.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/da.po, po/de.po, po/el.po, VERSION, po/ca.po, po/cs.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.4 + +2002/05/29 09:28:33 Roland Rosenfeld + + * po/de.po: update. + +2002/05/29 09:27:46 Ronny Haryanto + + * po/id.po: update + +2002/05/28 09:07:29 Michael Elkins + + * mx.h, postpone.c: Fix some warnings noted by Vincent Lefevre. + +2002/05/21 07:28:28 Edmund GRIMLEY EVANS + + * po/eo.po: update + +2002/05/18 05:39:55 Thomas Roessler + + * pattern.c: Fix #1175. + + * pattern.c: Fix #1175. Noticed by Alain Bench. + +2002/05/18 05:34:50 Vsevolod Volkov + + * pop_lib.c, pop_lib.c: Attached patch for mutt 1.3.X/1.4 and 1.5.X removes gcc warning in + pop_lib.c. + +2002/05/16 17:33:19 Pawel Dziekonski + + * po/pl.po: update + +2002/05/16 13:05:14 Im Eunjea + + * po/ko.po: update. + + * po/ko.po: update + +2002/05/16 13:04:23 Ronny Haryanto + + * po/id.po: update. + + * compose.c: Triple-DES, not Tripple-DES. + +2002/05/14 18:56:01 "Andrej N. Gritsenko" + + * po/uk.po: update + +2002/05/13 20:18:57 Toomas Soome + + * po/et.po, po/et.po: update + +2002/05/13 20:18:17 Vsevolod Volkov + + * po/ru.po, po/uk.po, po/ru.po: update + +2002/05/13 20:16:08 Byrial Jensen + + * po/da.po: update + +2002/05/13 20:15:40 Vsevolod Volkov + + * po/ru.po: update + +2002/05/13 20:15:07 Jörgen Tegnér + + * po/sv.po, po/sv.po: update + +2002/05/13 20:13:56 Vincent Lefevre + + * po/fr.po: update + +2002/05/09 09:52:09 Thomas Roessler + + * doc/muttrc.man.head, doc/muttrc.man.head: #1190, from Tim Alexeevsky + +2002/05/06 11:27:20 Thomas Roessler + + * doc/manual.sgml.head: Remove -Q which is only present in unstable from the stable + documentation. Thanks to Andreas Kneib + for noting. + +2002/05/02 01:05:27 Thomas Roessler + + * Makefile.am: Include smime.h with EXRA_DIST. + +2002/05/01 23:24:17 Thomas Roessler + + * po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, VERSION, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.5.1 + + * smime.c: Shut up check_sec.sh. No security holes, but some ugly code. + + * check_sec.sh: Give all the warnings at once. + + * build-release: - This is a development branch. + - Add a -nodiff option to suppress generating a patch. + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, ChangeLog, VERSION, po/ca.po, po/cs.po, reldate.h: automatic post-release commit for mutt-1.3.99 + + * build-release: s/scp1/scp/ + +2002/04/29 17:12:18 Thomas Roessler + + * lib.c, lib.h, protos.h, lib.c, lib.h, protos.h: Fix #1171. + +2002/04/29 12:26:23 Vincent Lefevre + + * po/fr.po: update. + +2002/04/29 12:25:38 oota toshiya + + * po/ja.po, po/ja.po: update. + +2002/04/29 12:09:21 Byrial Jensen + + * imap/util.c: There is a possible buffer overflow due an off-by-one error in + imap/util.c, line 125. The error is in the maximum field width + indication in the sscanf() call. You must have room in the receiving + buffer for this number of characters /plus a terminating NULL + character/. + + * imap/util.c: There is a possible buffer overflow due an off-by-one error in + imap/util.c, line 125. The error is in the maximum field width + indication in the sscanf() call. You must have room in the + receiving buffer for this number of characters /plus a + terminating NULL character/. + +2002/04/25 13:30:49 Vsevolod Volkov + + * pop.c, pop_lib.c, pop.c, pop_lib.c: Attached patch fixes the problem described below. It should be + applied to both mutt 1.3/1.4 and 1.5 branches. + + > Date: Thu, 11 Apr 2002 16:24:00 -0500 + > Subject: mutt 1.3.x / pop + > From: "Ryan O'Hara" + > To: bcully@users.sourceforge.net + > User-Agent: Mutt/1.3.27i + + > Hi. My apologies if this has nothing to do with you. If it does not, + > maybe you could forward it on to someone. + + > In mutt 1.3.x I have noticed that if I uses POP to retrieve mail, and + > I enter an incorrect password whem prompted, it will *save* that + > password and keep trying to use it. However, in the 1.2.x versions it + > worked like this: type in wrong POP password, try to connect to POP + > server again and it will ask you (again) for the password. mutt 1.3.x + > does not, it just tries to connect with the wrongs password (which + > just failed). + + > This is kinda annoying. Just thought I'd point out this regression. + + > Thanks. + > R + +2002/04/25 13:28:31 Wouter Verheijen + + * doc/manual.sgml.head, doc/manual.sgml.head: Someone in news:comp.mail.mutt noted that the list of command-line + options in the manual is not up-to-date. + + Included a small patch that includes all options that 'mutt -h' shows. + +2002/04/25 13:26:58 Cedric Duval + + * doc/manual.sgml.tail, OPS, init.h, pattern.c: attached are fixes for some little mistakes : + + * history-down -> scroll _down_, not up + * functions decode-(save|copy) do not exist in the attach menu. + * gettext oversight in pattern.c + * inconsistency between "printf-like sequences" used all over the place + and "escape sequences" for the description of $attribution. + + * doc/manual.sgml.tail, pattern.c, OPS, init.h: attached are fixes for some little mistakes : + + * history-down -> scroll _down_, not up + * functions decode-(save|copy) do not exist in the attach menu. + * gettext oversight in pattern.c + * inconsistency between "printf-like sequences" used all over the + place and "escape sequences" for the description of $attribution. + +2002/04/25 13:24:33 Thomas Roessler + + * recvattach.c: Also fix this for the S/MIME case. + + * recvattach.c: Fiy handling of multiparts which have encrypted sub-parts, at least + for PGP. + + * sendlib.c: Force 7bit encoding for application/pgp-keys. + +2002/04/20 21:38:47 Thomas Roessler + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/config.charset, intl/dcigettext.c, intl/eval-plural.h, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/localename.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, intl/plural-exp.c, intl/plural-exp.h, intl/plural.c, intl/plural.y, ABOUT-NLS, INSTALL, config.rpath, configure.in: Backing out the latest iconv-related changes from the + mutt-1-4-stable branch. + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4: same as above. + + * intl/eval-plural.h, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/localename.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, intl/plural-exp.c, intl/plural-exp.h, intl/plural.c, intl/plural.y, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/config.charset, intl/dcigettext.c: Committing the new iconv patches into a separate branch. + + * ABOUT-NLS, INSTALL, config.rpath, configure.in: Committing the new noiconv patches into a separate branch. + + * sendlib.c: Generate the resent-message-id ourselves, and add it in the top of + the header. + +2002/04/20 08:11:13 Wouter Verheijen + + * copy.c, mutt.h, sendlib.c: Bug #571 "mutt should not replicate ">From " headers while bounding", + has a patch attached. + Will that patch get in? + + Although these lines are not generated by mutt, I would strongly + suggest + to prevent it, because by boucing a mail the MUA should ensure + that the message header is according to the specification. + A ">From " line is not, because of the spaces before a colon. + + Because this has such serious consequences (totally unreadable mail) + when a MTA interpretes this line as the beginning of the body (not + unreasonable), I think Mutt should prevent sending this invalid + headerline. + + Because the other patch to the bugreport is not really correct IMHO + (because the fieldnames are not limited to alphanumeric chars, RFC2822 + 3.6.8), I propose another one. + + This patch also appends Resent-* to the header, instead of + prepending it. The Resent-Message-Id is however still appended, + because I could not find it; is it added by the MTA instead of by + Mutt? + +2002/04/20 07:55:20 Thomas Roessler + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4: Try to get the noiconv patch to work. + + * configure.in: Try to get the noiconv patch to work with my development environment. + + * INSTALL: Fix a typo. + +2002/04/20 07:26:10 Lars Hecking + + * init.h, rfc2047.c, sendlib.c, INSTALL, charset.c, charset.h, configure.in, gnupgparse.c: patch.1.3.28.lh.noiconv + ======================= + + This is the new version of my noiconv patch. It _requires_ the previous + patch! If applied without, you'll have to resolve a couple of conflicts + manually. + + Notes: + - it's a lot cleaner than the old noiconv patch because no m4 files are + modified + - new configure option --disable-iconv; INSTALL updated accordingly + [I am guessing here, but the background for the --without-iconv option + mentioned in INSTALL was that mutt had a without-iconv option before + gettext included iconv support. When mutt's intl/* files were updated + to a newer gettext, there suddenly were two iconv options, which then + got merged, that is, mutt's was removed. That was probably when + --without-iconv stopped working, but I'm not sure, it may well be that + it never worked since iconv support was introduced.] + - all changes in *.[ch] files should be identical to the old patch + + * intl/localename.c: This one seems to have been missing, too. + +2002/04/20 07:25:40 Thomas Roessler + + * intl/localename.c: branches: 1.1.2; 1.1.4; + file localename.c was initially added on branch mutt-1-4-stable. + +2002/04/20 07:25:15 Lars Hecking + + * config.rpath: Another file from the gettext patch. + +2002/04/20 07:25:15 Thomas Roessler + + * config.rpath: branches: 1.1.2; 1.1.4; + file config.rpath was initially added on branch mutt-1-4-stable. + +2002/04/20 07:24:54 Lars Hecking + + * m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4: Add new m4 files from patch.1.3.28.lh.gettext-0.11.1. + +2002/04/20 07:24:54 Thomas Roessler + + * m4/lib-ld.m4: branches: 1.1.2; 1.1.4; + file lib-ld.m4 was initially added on branch mutt-1-4-stable. + + * m4/lib-link.m4: branches: 1.1.2; 1.1.4; + file lib-link.m4 was initially added on branch mutt-1-4-stable. + + * m4/lib-prefix.m4: branches: 1.1.2; 1.1.4; + file lib-prefix.m4 was initially added on branch mutt-1-4-stable. + +2002/04/20 07:24:22 Lars Hecking + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/config.charset, intl/dcigettext.c, intl/eval-plural.h, intl/gettextP.h, intl/gmo.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c, intl/plural-exp.c, intl/plural-exp.h, intl/plural.c, intl/plural.y: patch.1.3.28.lh.gettext-0.11.1 + ============================== + + This one updates the gettext stuff in mutt to gettext-0.11.1. I started + doing this in the hope that the new gettext version would simplify the + noiconv patch, but unfortunately, this turned out not to be the case + (the new iconv m4 macros still don't allow for switching iconv support off). + + However, as a few hours of merging and testing were spent, I'd suggest to + adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code + reorganisation. Ok, a bit more, I'm no gettext expert :) + + Notes: + - after applying the patch, you need to chmod 755 config.rpath + - a couple of new files for m4/*, too + - I have broken with the tradition of renaming gettext's AM_* macros + to MUTT_AM_*! I don't think it's necessary anymore to customise these + macros, but you (I really mean "you, tlr" :) want to have a look at + the new gettext.m4. The others should be ok as they are. + - previous gettext updates were also updating po/Makefile.in.in, which + I didn't; someone who has a clue about gettext should check whether + this might be necessary, and also whether any other files in po/ need + updating + + I will provide the same patch for the 1.5 branch at some stage, ideally + after getting some F E E D B A C K for this one. + +2002/04/20 07:23:49 Thomas Roessler + + * intl/eval-plural.h: branches: 1.1.2; 1.1.4; + file eval-plural.h was initially added on branch mutt-1-4-stable. + + * intl/gmo.h: branches: 1.1.2; 1.1.4; + file gmo.h was initially added on branch mutt-1-4-stable. + + * intl/os2compat.c: branches: 1.1.2; 1.1.4; + file os2compat.c was initially added on branch mutt-1-4-stable. + + * intl/os2compat.h: branches: 1.1.2; 1.1.4; + file os2compat.h was initially added on branch mutt-1-4-stable. + + * intl/osdep.c: branches: 1.1.2; 1.1.4; + file osdep.c was initially added on branch mutt-1-4-stable. + + * intl/plural-exp.c: branches: 1.1.2; 1.1.4; + file plural-exp.c was initially added on branch mutt-1-4-stable. + + * intl/plural-exp.h: branches: 1.1.2; 1.1.4; + file plural-exp.h was initially added on branch mutt-1-4-stable. + +2002/04/20 07:23:39 Lars Hecking + + * ABOUT-NLS, charset.c, charset.h, configure.in, gnupgparse.c, init.h, rfc2047.c, sendlib.c: patch.1.3.28.lh.gettext-0.11.1 + ============================== + + This one updates the gettext stuff in mutt to gettext-0.11.1. I started + doing this in the hope that the new gettext version would simplify the + noiconv patch, but unfortunately, this turned out not to be the case + (the new iconv m4 macros still don't allow for switching iconv support off). + + However, as a few hours of merging and testing were spent, I'd suggest to + adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code + reorganisation. Ok, a bit more, I'm no gettext expert :) + + Notes: + - after applying the patch, you need to chmod 755 config.rpath + - a couple of new files for m4/*, too + - I have broken with the tradition of renaming gettext's AM_* macros + to MUTT_AM_*! I don't think it's necessary anymore to customise these + macros, but you (I really mean "you, tlr" :) want to have a look at + the new gettext.m4. The others should be ok as they are. + - previous gettext updates were also updating po/Makefile.in.in, which + I didn't; someone who has a clue about gettext should check whether + this might be necessary, and also whether any other files in po/ need + updating + + I will provide the same patch for the 1.5 branch at some stage, ideally + after getting some F E E D B A C K for this one. + +2002/04/17 17:05:54 Vincent Lefevre + + * po/fr.po: Update. + +2002/04/17 17:05:04 David Champion + + * m4/gssapi.m4: MIT krb5 1.2.4 has krb5-config, so it's no longer sufficient to say + that possession of krb5-config indicates Heimdal. Patch attached. This + assumes that Heimdal's "kreb5-config --vendor" begins with "Heimdal". + I cannot verify that this is correct, so patch might be wrong on this + point. + +2002/04/07 21:19:57 Brendan Cully + + * imap/command.c, imap/imap.c, imap/message.c, imap/command.c, imap/imap.c, imap/message.c: The attached patch cleans up some bugs in switching IMAP mailboxes: + * free current flags on mailbox close + * reset reopen state + * don't parse the same untagged SELECT response for multiple options + * call mx_update_context after reading the whole mailbox, not after + each message + * reset new mail flag if mail arrives in the middle of opening the + mailbox. This should close 1139 + + 939 is most likely unaffected. I discovered these problems while + investigating 939. + +2002/04/05 10:42:54 "TAKAHASHI, Tamotsu" + + * po/ja.po: update. + +2002/04/04 20:49:46 Im Eunjea + + * po/ko.po: Update. + +2002/04/04 06:50:52 "TAKAHASHI, Tamotsu" + + * po/ja.po: Update. + +2002/04/04 06:50:12 Thomas Roessler + + * pgp.c: Fix a typo noted by Tamotsu Takahashi. + +2002/04/03 15:22:27 Thomas Roessler + + * handler.c: Fix printing of format=flowed text parts. + + * commands.c: Fix #1144 in stable. + + * commands.c: Fix a file descriptor leak in the display filter code. Noted by + Chr. v. Stuckrad. + + fixes: #1144 + +2002/04/02 18:49:37 Lars Hecking + + * m4/iconv.m4: branches: 1.3.2.1.2; + The noiconv patch. + + * charset.c, charset.h: The noiconv patch. + + * configure.in: branches: 2.129.2.3.2; + The noiconv patch. + + * gnupgparse.c, init.h, rfc2047.c, sendlib.c: The noiconv patch. + +2002/03/30 08:26:31 Thomas Roessler + + * po/pl.po: update. From Pawel Dzienkonski. + + * po/fr.po: Update; From Vincent Lefevre. + + * postpone.c, sendlib.c: The attached patch allows the user to override the user-agent field + with my_hdr. It also removes the stripping of the x-mailer field + when recalling a postponed message. + +2002/03/28 13:25:23 Thomas Roessler + + * mx.c, mx.h, mailbox.h, main.c, mbox.c, mh.c: patch-1.3.28-me.emptycheck.1 + +2002/03/27 08:50:42 Thomas Roessler + + * pgp.c: There was some output missing. + + * po/POTFILES.in: update. + + * pgp.c: More fixes. Note to self: The code which controls character set + selection for attachments is far too complicated. + + * pgp.c: Don't include temporary file names in the Content-Disposition header. + + * pgp.c: Use text/plain; format=... when we are asked to detect inline PGP + material in in text/plain body parts. + + * pgp.c, sendlib.c: Fix encoder mode for text/plain; action=pgp-*. + + * pgp.c: Fix "noconv" handling for the message body when we generate inline + PGP. + + * charset.c, charset.h, handler.c, muttlib.c, pgp.c: Some hackisch charset handling for text/plain; x-action=pgp-*. I + don't like this stuff, but it's better than nothing. + +2002/03/26 22:25:48 Thomas Roessler + + * pgp.c: Change x-action values to "pgp-encrypted", "pgp-signed". + + * contrib/gpg.rc, commands.c, compose.c, crypt.c, handler.c, muttlib.c, pgp.c, protos.h, recvattach.c, sendlib.c: More inline PGP changes. + + * pgp.c: Also permit for "action" and "x-action" on the receiving end, just + in case we can settle on a joint standard with other MUA developers. + + * commands.c, crypt.c, handler.c, pgp.c, pgpinvoke.c, sendlib.c: OK, I'm giving up: pgp_create_traditional now creates text/plain; + x-mutt-action={pgp-encrypt,pgp-sign}. + + * pgpinvoke.c: Fix application/pgp signatures. + + * charset.c, charset.h, gnupgparse.c, handler.c, mbyte.c, rfc2047.c, sendlib.c, charset.c, charset.h, gnupgparse.c, handler.c, mbyte.c, rfc2047.c, sendlib.c: Fix iconv warnings; from Edmund Grimley Evans. + + * smime.c: Please use ascii_strcasecmp() if you want to compare ASCII parameter + strings. mutt_strcasecmp() depends on the locale, and detects "i" + and "I" as _different_ in Turkish locales. + +2002/03/25 11:34:40 Thomas Roessler + + * crypt.c: Fix S/MIME signature type. Noted by Dan Ohnesorg . + + * buffy.c, buffy.c: close 1103; from Brendan Cully + + * doc/manual.sgml.tail, doc/manual.sgml.tail: close 1122; from Brendan Cully + + * hdrline.c, muttlib.c: Fix #87s; from Brendan Cully. + + * hdrline.c, muttlib.c: Fix #872, from Brendan Cully. + + * contrib/smime_keys_test.pl, contrib/Makefile.in: Include a test script by Mike Schiraldi. It's perl > the one I have + installed, so I'm just putting it into contrib for now. + +2002/03/20 09:53:42 Thomas Roessler + + * editmsg.c, mailbox.h, mx.c: Rename M_NEW to M_NEWFOLDER. + + * editmsg.c, mailbox.h, mx.c: Rename the new M_NEW by M_NEWFOLDER. There was another constant of + the same name. Problem noted by Will Yardley's compiler. + +2002/03/19 09:54:05 Thomas Roessler + + * browser.c: Fix #1115. + + * editmsg.c, mailbox.h, mx.c: Fix a temporary file race problem when using the edit-message + function. Backported from unstable. + + * po/pl.po, po/pl.po: update + +2002/03/18 18:54:56 Thomas Roessler + + * browser.c: Should fix #1115. BACKPORT! + +2002/03/15 09:11:05 Thomas Roessler + + * po/ja.po: update from oota toshiya. + + * po/ja.po: update, from oota toshiya. + +2002/03/13 23:43:41 Thomas Roessler + + * attach.c: Undoing the previous patch. It was junk, and may ruin files. + + * attach.c, editmsg.c, mailbox.h, mx.c: Don't fopen mail folders in append mode where we should safe_fopen() + them in write mode. Debian bug #138200, noted by Colin Philipps + . + + NEEDS BACKPORTING. + + * po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/da.po, po/de.po, po/el.po, po/ChangeLog: automatic post-release commit for mutt-1.3.28 + + * po/ChangeLog: branches: 1.1.2; + file ChangeLog was initially added on branch mutt-1-4-stable. + + * po/ca.po, po/cs.po, ChangeLog, VERSION, reldate.h: automatic post-release commit for mutt-1.3.28 + + * doc/smime-notes.txt, smime.c: Assorted patches from Mike Schiraldi. + +2002/03/02 12:11:35 Thomas Roessler + + * contrib/smime.rc, compose.c, init.h, mutt.h, sendlib.c, smime.c, smime.h: Introduce smime_default_key. From Oliver Ehli. + + * contrib/smime.rc, smime.c, smime.h, smime_keys.pl, init.h, mutt.h: smime.c: + - the getkeys() function was broken and deleted the last char + of the certfilename + - it now lets me use more than one key for the same mailbox + ie select these. + - some display output was garbled when the email didn't match. + i posted some fix to mutt-users, but i don't like that sleep() + so i dropped the first error message, which basically repeated + the from/sender field only. so now there's just the message: they + don't match. + + smime_keys: + - i modified the add_chain to continue even if no roo-cert + is present (david collantes received som chain that got + exported from outlook. obiously they don't (always ?) + include the root cert) it will now abort if neither root + nor intermediate certs are present. + - add_cert created index entries with '-' as issuer cert, when + it should have been '?'. thus verify would fail. (obviously + nobody ever used that command (add_cert, that is) :) + + the feature above obsoletes the hash_cert and fingerprint_cert commands, + adds import_cert command and ask_cert_label bool. i modified the output + of smime_keys (a little) so it doesn't look too garbled when supplying + the label (it is actually interactive :) furthermore, i do a verify + after the cert was added and modified the verify routine to make the + cerificate trusted in case of success. (we discussed this in another + message) that is ok so far, but perhaps this requires some better root + certificate handling, ie the trust should be somehow connected to the + root certificate, that maybe added (if the user trusts it and its not + present already) to the ca-file. i'll think about that some more ... but + then, there already is the add_root command. hmmm... (btw, you'll now + never get asked to trust a certificate) + + i have not yet deleted the email handling from the import key stuff (in + smime.c/crypt.c), for i'm thinking about smime_keys using it as an + additional arg. otoh i don't think users would press ^k if verification + failed...hmmm... but still, smime_keys does extract the email from the + certificate either way and does verify it by itself, so the only thing + that would happen is to have some invalid certificates, that mutt'll + refuse to use anyways, left in the database.... + + (From Oliver Ehli.) + +2002/02/28 23:28:51 Thomas Roessler + + * sort.c: Turn on incremental threading again. + + * smime_keys.pl: The script will try to pick out the end-user cert and pass that to + openssl. The code which tells the difference may not be perfect. It + works with all the certs in my collection, though. I won't be at all + surprised if someone comes across a cert chain which confuses it, + but it should print out an error in that case. Hopefully they will + send us the chain so we can adjust our code. + + (From Mike Schiraldi.) + + * init.h, mutt.h, thread.c: Threading enhancements from Daniel Eisenbud. + + * curs_main.c, init.c, init.h, mutt.h, thread.c: $narrow_tree; fater redrawing when changing tree options. From + Daniel Eisenbud. + + * imap/message.c, mbox.c, mx.c, thread.c: A possible work-around for #939. From Daniel Eisenbud. + + * init.h, mutt.h, thread.c: Threading enhancements from Daniel Eisenbud. + +2002/02/26 10:58:56 Thomas Roessler + + * po/ru.po: update + + * init.h: Fix a typo. + + * init.h: Fix a typo. #1069. + + * imap/browse.c, imap/message.c, configure.in, mutt_sasl.c, imap/browse.c, imap/message.c, configure.in, mutt_sasl.c: Brendan Cully sent a patch. + + * install-sh, install-sh: Fix a typo. From Edmund Grimley Evans. + + * po/ru.po: ru.po update. + + * pop_lib.c, pop_lib.c: CAPA response tags are case-insensitive. Noted by Michael Vore, + patch from Vsevolod Volkov. + +2002/02/18 14:55:31 Thomas Roessler + + * alias.c, send.c: Fix for #1047. From Michael Elkins. + +2002/02/14 11:22:51 Thomas Roessler + + * charset.c, gnupgparse.c, init.h, rfc2047.c: Iconv patch from Lars Hecking. MAY NEED TO BE BACKPORTED. + +2002/02/13 12:04:52 Thomas Roessler + + * smime.c: mutt_any_key() shouldn't be used in curses mode. + + * hdrline.c, init.h, parse.c: Change the default format to be more friendly to "0-line messages", + and fix optional expansion for %l - it was the wrong way around. + Also, add a hack to parse.c so we ignore negative values in Lines + headers. + + * hdrline.c, muttlib.c, protos.h: Undo the %l fix. It broke things. + + * menu.c: Fix mutt_pad_string; from Edmund Grimley Evans. (MAY NEED TO BE + BACKPORTED.) + + * main.c: Report libiconv version. + +2002/02/12 21:54:41 Thomas Roessler + + * hdrline.c, muttlib.c, protos.h: Improve %l's behaviour. + + * extlib.c, main.c, pattern.c, smime_keys.pl: Mike Schiraldi's daily S/MIME patch. + +2002/02/11 17:31:53 Thomas Roessler + + * smime.c: This patch gets rid of an ugly static variable in smime.c. (From + Mike Schiraldi.) + + * smime_keys.pl: This patch lets smime_keys.pl automagically handle both formats of + x509 certificate -- PEM (text) and DER (binary). This lets Outlook + users (and probably others) directly import the certs without first + converting them manually. (From Mike Schiraldi.) + + * configure.in: Honor current values of $LIBS and $CPPFLAGS. From Thomas Dickey. + + * configure.in: Honor $LIBS and $CPPFLAGS. From Thomas Dickey. + + * init.c, init.c: patch-1.3.27.me.initsort.1 + +2002/02/07 21:48:42 Thomas Roessler + + * smime_keys.pl: Another S/MIME patch from Mike Schiraldi. + + * smime_keys.pl: Fix smime_keys. + + * smime.c: S/MIME fixes from Mike Schiraldi. + + * po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/POTFILES.in, po/ca.po, po/cs.po, po/da.po, po/de.po, Makefile.am: Make S/MIME messages translatable. + +2002/02/06 19:14:47 Thomas Roessler + + * lib.h: Avoid a warning on some machines. + + * lib.h, smime.c: Make some scanf formats safe. + +2002/02/05 22:01:06 Thomas Roessler + + * ascii.c: The previous fix was complete nonsense. What a day. :-( + + * ascii.c: The previous fix was complete nonsense. + + * browser.c, lib.c, lib.h: Use strcoll for the file browser. From David Champion. + + * hook.c: Fix crypt-hook. From Dale Woolridge + . + + * smime_keys.pl: Clean-up from Mike Schiraldi. + + * imap/browse.c: Fix. + + * imap/browse.c: Fix another IMAP browsing bug. + + * po/ru.po, po/fr.po, po/ko.po: update + + * smime.c: Don't put garbage onto the screen when trying to decrypt messages. + + * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl: S/MIME fixes from Oliver Ehli: + + - smime_keys.pl: + + support for multiple email adrresses in cert: will add one entry + to {keys, cetrificates}/.index now (for each mailbox) + + support for certificates without intermediate certs (e.g. for + people who are their own CA: use root as intermediate, for it + probably wouldn't be known to anyone...) + + bugfix in handle_pem: the checks if some type of cert is present; + die() could never be reached, as the variables checked wouldn't + have been set in that case, so it would break because of undefined + value or some such thing.... (so it has to check $iter instead) + + - smime.c (init.h, ....) + + support for importing certificates issued for multiple addresses. + + introduced smime_fingerprint_cert_command, so finally certs can + get compared ... (so the above works..) + + cleaned up some error messages, that would mess up the terminal. + + fixed typos (init.h) + + * ascii.c: Fix. + + * ascii.c: Fix ascii_*cmp functions. Problem noted by Brad Thompson. + +2002/02/04 09:59:02 Thomas Roessler + + * smime.c, crypt.c: Some S/MIME fixes from Oliver Ehli . + +2002/02/03 09:58:45 Thomas Roessler + + * doc/manual.sgml.head, doc/muttrc.man.head, init.h: Add unauto_view. From Jeremy Blosser. + + * Makefile.am, pgplib.h, pgppubring.c: Add a "-f" flag which helps to dump fingerprints. Contributed by + Jason Harris , and not strictly needed for + mutt. + + * pgppubring.c: Correctly calculate fingerprints for type 20 ElGamal keys. Noted by + Jason Harris . + + * pgppubring.c: Fix calculation of fingerprints (and key IDs) for type 20 ElGamal + keys. Noted by Jason Harris . + +2002/02/02 16:52:27 Thomas Roessler + + * po/ca.po: update + + * po/ca.po: update. + + * mh.c: Don't forget deletions when a folder is changed. Ups. + +2002/02/01 17:23:20 Thomas Roessler + + * smime_keys.pl: Fix some possible leaks of the private key (encrypted, but + still...). (yow_security_holes.patch from Mike Schiraldi.) + +2002/01/31 22:05:58 Thomas Roessler + + * doc/smime-notes.txt: Document %C, and other updates. From Mike Schiraldi. + + * smime.c: Remove some unnecessary quotation marks. + + * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl: Use mutt -Q from smime_keys. + + * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/ca.po, po/cs.po: update-po + + * main.c: fix a string. + + * doc/mutt.man: Document -Q. + + * init.c, main.c, protos.h: Add a -Q option to query configuration variables. This is needed to + avoid a separate mutt configuration parser in smime_keys.pl. + +2002/01/30 22:51:12 Thomas Roessler + + * send.c, send.c: patch-1.3.27.me.postpone_date.2 + + * smime.c: Mike Schiraldi's daily S/MIME patch, as he puts it. + +2002/01/29 21:08:10 Thomas Roessler + + * smime.c: Improved certificate handling. Suggested by Oliver Ehli, + implemented by Mike Schiraldi. + + * smime.c: Properly handle certain signatures generated by Outlook. From Mike + Schiraldi. + + * parse.c, parse.c: Fix a segmentation fault in debugging code. From Daniel Eisenbud. + +2002/01/28 23:29:05 Thomas Roessler + + * crypt.c, init.h, mutt.h: Add a new crypt_timestamp option. The timestamps aren't really + needed any more. + + * commands.c, menu.c, mutt.h, mutt_curses.h, pattern.c: Add ~V to match successfully verified messages. + + * contrib/smime.rc: Add a comment. From Mike Schiraldi. + + * init.h, init.h: Fix list-from documentation. From Michael Elkins. + + * doc/smime-notes.txt: Add more information on S/MIME. Adapted from Oliver Ehli's notes by + Mike Schiraldi. + + * send.c: Avoid C99 comments. Noted by Vincent Lefevre. + + * po/ja.po, po/sv.po: updates + + * menu.c, menu.c: Wide character fix from TAKIZAWA Takashi. + + * Makefile.am, hook.c: S/MIME-related bug fixes from Brendan Cully. + +2002/01/25 00:08:30 Thomas Roessler + + * smime.c: ups + + * commands.c, recvattach.c, smime.c, smime.h: More decryption key detection fixes. + + * commands.c, smime.c: Make some prompts look nicer, and add sensible selection of the + decryption key. + +2002/01/24 23:53:19 Thomas Roessler + + * commands.c, crypt.c, smime.c, smime.h: More S/MIME nit-picking. + + * mh.c: Fix. + + * mh.c: Still more code clean-up. + + * doc/smime-notes.txt: Update. + + * mx.c: little fix. + + * mh.c: Ups, don't use the wrong check function... + + * mh.c: Clean up the mh code, too. + + * mh.c: indentation + + * mh.c, mx.c, mx.h: Maildir efficiency improvements, from Michael Elkins and Thomas + Roessler. + + * crypt.c, curs_lib.c, smime.c: S/MIME nits. + + * reap.pl: We don't need this any more. + + * imap/message.c, doc/Makefile.in, doc/smime-notes.txt, contrib/Makefile.in, contrib/ca-bundle.crt, contrib/smime.rc, Makefile.am, OPS.CRYPT, OPS.PGP, OPS.SMIME, attach.c, commands.c, compose.c, configure.in, copy.c, copy.h, crypt.c, crypt.h, curs_main.c, functions.h, globals.h, handler.c, hdrline.c, headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, main.c, mutt.h, muttlib.c, mx.c, pager.c, parse.c, pattern.c, pgp.c, pgp.h, pgplib.h, pop.c, postpone.c, protos.h, recvattach.c, send.c, sendlib.c, smime.c, smime.h, smime_keys.pl: S/MIME support. From Oliver Ehli and Mike Schiraldi + . + + * po/pt_BR.po, po/pt_BR.po: update + + * doc/manual.sgml.head, doc/muttrc.man.head, attach.c, globals.h, init.h, protos.h, rfc1524.c, sendlib.c: Introduce mime_lookup. From Brian Foley and Ulf Erikson. + + * po/ru.po, po/ru.po: update + + * mh.c: Make reading maildirs more efficient. + + * VERSION: Pseudo-revision for mutt-1.5. + + * m4/glibc21.m4, m4/gssapi.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, m4/funcdecl.m4, m4/gettext.m4, m4/codeset.m4, m4/curslib.m4, m4/README, m4/.cvsignore, m4/Makefile.am.in: version bump + + * po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/fr.po, po/gl.po, po/hu.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/.cvsignore, po/Makefile.in.in, po/POTFILES.in, po/ca.po, po/cs.po, po/da.po, po/de.po, imap/.cvsignore, imap/BUGS, imap/Makefile.am, imap/README, imap/TODO, imap/auth.c, imap/auth.h, imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/message.h, imap/utf7.c, imap/util.c: more version bumps. + + * intl/.cvsignore, intl/COPYING.LIB-2, intl/COPYING.LIB-2.1, intl/ChangeLog, intl/Makefile.in, intl/VERSION, intl/bindtextdom.c, intl/cat-compat.c, intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, intl/xopen-msg.sed: more version number updates. + + * doc/.cvsignore, doc/Makefile.in, doc/PGP-Notes.txt, doc/applying-patches.txt, doc/devel-notes.txt, doc/dotlock.man, doc/instdoc.sh.in, doc/manual.sgml.head, doc/manual.sgml.tail, doc/mbox.man, doc/mutt.man, doc/muttbug.man, doc/muttrc.man.head, doc/muttrc.man.tail, doc/patch-notes.txt: more version number updates + + * contrib/iconv/README, contrib/iconv/iconv.aix-3.2.5.rc, contrib/iconv/iconv.aix-4.1.5.rc, contrib/iconv/iconv.aix-4.2.0.rc, contrib/iconv/iconv.aix-4.3.2.rc, contrib/iconv/iconv.freebsd-3.3.rc, contrib/iconv/iconv.glibc-2.1.3.rc, contrib/iconv/iconv.glibc-2.1.90.rc, contrib/iconv/iconv.hpux-10.01.rc, contrib/iconv/iconv.hpux-10.20.rc, contrib/iconv/iconv.hpux-11.00.rc, contrib/iconv/iconv.irix-6.5.rc, contrib/iconv/iconv.osf1-4.0a.rc, contrib/iconv/iconv.osf1-4.0d.rc, contrib/iconv/iconv.solaris-2.4.rc, contrib/iconv/iconv.solaris-2.5.1.rc, contrib/iconv/iconv.solaris-2.6-cjk.rc, contrib/iconv/iconv.solaris-2.6.rc, contrib/iconv/iconv.solaris-2.7.rc, contrib/iconv/make.sh, contrib/.cvsignore, contrib/Makefile.in, contrib/Mush.rc, contrib/Pine.rc, contrib/Tin.rc, contrib/gpg.rc, contrib/language.txt, contrib/language50.txt, contrib/patch.slang-1.2.2.keypad.1, contrib/pgp2.rc, contrib/pgp5.rc, contrib/pgp6.rc, contrib/sample.mailcap, contrib/sample.muttrc, contrib/sample.muttrc-tlr: Bumping more version numbers. + + * snprintf.c, sort.c, sort.h, stamp-h.in, status.c, strcasecmp.c, strdup.c, system.c, thread.c, url.c, url.h, utf8.c, wcwidth.c, pgpkey.c, pgplib.c, pgplib.h, pgpmicalg.c, pgppacket.c, pgppacket.h, pgppubring.c, pop.c, pop.h, pop_auth.c, pop_lib.c, postpone.c, prepare, protos.h, query.c, reap.pl, recvattach.c, recvcmd.c, regex.c, reldate.h, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, score.c, send.c, sendlib.c, sha1.c, sha1.h, signal.c, md5.h, md5c.c, menu.c, mh.c, mime.h, mime.types, missing, mkinstalldirs, mkjtags.c, mutt.h, mutt_curses.h, mutt_menu.h, mutt_regex.h, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h, mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, mutt_tunnel.c, mutt_tunnel.h, muttbug, muttbug.sh.in, muttlib.c, mx.c, mx.h, pager.c, pager.h, parse.c, patchlist.sh, pattern.c, pgp.c, pgp.h, pgpewrap.c, pgpinvoke.c, editmsg.c, enter.c, extlib.c, filter.c, flags.c, from.c, functions.h, gen_defs, getdomain.c, gettext.c, globals.h, gnupgparse.c, handler.c, hash.c, hash.h, hdrline.c, headers.c, help.c, history.c, history.h, hook.c, init.c, init.h, install-sh, keymap.c, keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, mapping.h, mbox.c, mbyte.c, mbyte.h, attach.c, attach.h, base64.c, browser.c, browser.h, buffy.c, buffy.h, build-release, charset.c, charset.h, check_sec.sh, color.c, commands.c, complete.c, compose.c, config.guess, config.sub, configure.in, copy.c, copy.h, curs_lib.c, curs_main.c, date.c, depcomp, dotlock.c, dotlock.h, edit.c, GPL, INSTALL, Makefile.am, Muttrc.head.in, NEWS, OPS, OPS.MIX, OPS.PGP, PATCHES, README, README.SECURITY, README.SSL, TODO, VERSION, _regex.h, acconfig.h, account.c, account.h, addrbook.c, alias.c, ascii.c, ascii.h, .cvsignore, ABOUT-NLS, BEWARE, COPYRIGHT, ChangeLog: Bumping version numbers to 3.0, for the new unstable branch. + + * send.c: branches: 2.77.2; + Set default Fcc when resending a message. + + * po/ja.po: branches: 1.33.2; + update + +2002/01/23 22:37:12 Thomas Roessler + + * po/da.po: branches: 1.67.2; + updates + + * po/el.po: branches: 1.77.2; + updates + + * po/et.po: branches: 1.21.2; + updates + + * po/ko.po: branches: 1.72.2; + updates + + * po/pl.po: branches: 1.94.2; + updates + + * po/uk.po, po/id.po: branches: 1.84.2; + update + + * charset.c: branches: 2.50.2; + Fix #999. A single missing comma. + +2002/01/22 12:12:45 Thomas Roessler + + * po/pt_BR.po: branches: 1.58.2; + automatic post-release commit for mutt-1.3.27 + + * po/ru.po: branches: 1.129.2; + automatic post-release commit for mutt-1.3.27 + + * po/sk.po: branches: 1.66.2; + automatic post-release commit for mutt-1.3.27 + + * po/sv.po: branches: 1.80.2; + automatic post-release commit for mutt-1.3.27 + + * po/tr.po: branches: 1.25.2; + automatic post-release commit for mutt-1.3.27 + + * po/uk.po: automatic post-release commit for mutt-1.3.27 + + * po/zh_CN.po: branches: 1.14.2; + automatic post-release commit for mutt-1.3.27 + + * po/zh_TW.po: branches: 1.11.2; + automatic post-release commit for mutt-1.3.27 + + * po/hu.po: branches: 1.17.2; + automatic post-release commit for mutt-1.3.27 + + * po/id.po: automatic post-release commit for mutt-1.3.27 + + * po/it.po: branches: 1.103.2; + automatic post-release commit for mutt-1.3.27 + + * po/ja.po, po/ko.po: automatic post-release commit for mutt-1.3.27 + + * po/lt.po: branches: 1.25.2; + automatic post-release commit for mutt-1.3.27 + + * po/nl.po: branches: 1.74.2; + automatic post-release commit for mutt-1.3.27 + + * po/pl.po: automatic post-release commit for mutt-1.3.27 + + * po/ca.po: branches: 1.6.2; + automatic post-release commit for mutt-1.3.27 + + * po/cs.po: branches: 1.75.2; + automatic post-release commit for mutt-1.3.27 + + * po/da.po: automatic post-release commit for mutt-1.3.27 + + * po/de.po: branches: 1.160.2; + automatic post-release commit for mutt-1.3.27 + + * po/el.po: automatic post-release commit for mutt-1.3.27 + + * po/eo.po: branches: 1.80.2; + automatic post-release commit for mutt-1.3.27 + + * po/es.po: branches: 1.89.2; + automatic post-release commit for mutt-1.3.27 + + * po/et.po: automatic post-release commit for mutt-1.3.27 + + * po/fr.po: branches: 1.108.2; + automatic post-release commit for mutt-1.3.27 + + * po/gl.po: branches: 1.61.2; + automatic post-release commit for mutt-1.3.27 + + * ChangeLog: branches: 2.73.2; + automatic post-release commit for mutt-1.3.27 + + * VERSION: branches: 2.63.2; + automatic post-release commit for mutt-1.3.27 + + * reldate.h: branches: 2.55.2; + automatic post-release commit for mutt-1.3.27 + +2002/01/21 17:43:19 Thomas Roessler + + * po/it.po: update + + * po/sv.po, po/de.po, po/eo.po: updates + + * mutt_ssl.c: A fix from Ulf Erikson, which he says to fix bug #989. + +2002/01/18 11:44:54 Thomas Roessler + + * po/zh_CN.po, po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, VERSION, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog: automatic post-release commit for mutt-1.3.26 + +2002/01/17 22:41:45 Thomas Roessler + + * configure.in: branches: 2.129.2; + Use ncurses.h for configure tests, if present. + +2002/01/16 20:44:49 Thomas Roessler + + * config.guess, config.sub, missing, mkinstalldirs: Updated auto* files. From Lars Hecking. + + * curs_main.c: patch-1.3.25-de-new_threads.1 + + * protos.h: branches: 2.86.2; + patch-1.3.25-de-new_threads.1 + + * thread.c: branches: 2.27.2; + patch-1.3.25-de-new_threads.1 + +2002/01/15 22:08:12 Thomas Roessler + + * acconfig.h, configure.in: Configure and config.h cleanup. From Lars Hecking. + + * handler.c: branches: 2.52.2; + Don't hallucinate a '\n' in the end of quoted-printable encoded + attachments. + + * po/fr.po: update. + + * flags.c: patch-1.3.25.tlr.maildir_trash.1 + + * mh.c: branches: 2.42.2; + patch-1.3.25.tlr.maildir_trash.1 + + * mutt.h: branches: 2.111.2; + patch-1.3.25.tlr.maildir_trash.1 + + * mx.c: branches: 2.63.2; + patch-1.3.25.tlr.maildir_trash.1 + + * po/ko.po: update + + * init.c: branches: 2.60.2; + Avoid reading past the end of ta string when handling \ or ^ + sequences. From Michael Elkins. + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/ca.po, po/cs.po, po/da.po, pgpkey.c: Shorten some messages. Noted by Jeremy Blosser. #978. + + * pattern.c: branches: 2.23.2; + Fix an off-by-one error. + +2002/01/14 09:03:31 Thomas Roessler + + * imap/imap.c: branches: 1.90.2; + fix another case-sensitive comparison. + +2002/01/13 21:19:25 Thomas Roessler + + * ascii.h: Fix the ascii_strncmp() macro. + + * imap/auth_sasl.c: Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * imap/browse.c: branches: 1.34.2; + Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * imap/command.c: branches: 1.35.2; + Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * imap/imap.c: Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * imap/message.c: branches: 1.60.2; + Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * imap/util.c: branches: 1.51.2; + Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * muttlib.c: branches: 2.52.2; + A different fix for the '\012' issue. Bug tracked down by Johannes + Geiger . + + * pager.c: A different fix for the '\012' issue. Bug tracked down by Johannes + Geiger . + +2002/01/12 11:42:18 Thomas Roessler + + * NEWS: More on ~=. + + * doc/manual.sgml.head: branches: 1.73.2; + Add a ~= pattern. From Frederic Duval. + + * doc/muttrc.man.head: branches: 1.16.2; + Add a ~= pattern. From Frederic Duval. + + * mutt.h, pattern.c: Add a ~= pattern. From Frederic Duval. + + * doc/manual.sgml.head: Fix a typo, #971. + +2002/01/09 15:39:28 Thomas Roessler + + * pgp.c: Fix #960. + +2002/01/08 13:06:21 Thomas Roessler + + * mx.c: Try to fix #943. + + * INSTALL: branches: 2.15.2; 2.15.4; + fix libiconv URL. #959. + + * NEWS: fix libiconv URL. #959. + +2002/01/07 19:10:51 Thomas Roessler + + * po/ko.po: update + + * attach.c: branches: 2.29.2; + Fix #951. + +2002/01/04 14:30:29 Thomas Roessler + + * rfc822.c: Terminate the correct buffer. Noted by Durval Menezes + . (This bug shouldn't have any security + implications. ;-) + + * po/et.po, po/fr.po, po/pl.po, po/sv.po: updates. + +2002/01/03 20:57:20 Thomas Roessler + + * mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, globals.h: Move some globals where they belong. From Brendan Cully. + +2002/01/02 16:28:46 Thomas Roessler + + * acconfig.h: Cleanup; from Lars Hecking. + + * mutt_ssl.c: Replace a few strncpy() calls by strfcpy(). + + * recvcmd.c: Bug fix. Problem noted by Vincent Lefevre's compiler. + + * muttlib.c: Fix the \012 bug. + +2002/01/01 20:18:41 Thomas Roessler + + * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/Makefile.in.in, po/ca.po, po/cs.po, reldate.h, ChangeLog, VERSION: automatic post-release commit for mutt-1.3.25 + + * intl/COPYING.LIB-2, intl/COPYING.LIB-2.1: ups, these were missing from the CVS. + + * po/ca.po: update. + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, VERSION, rfc822.c: post-release commit for mutt-1.2.5.1. + + * rfc822.c: Fix a security problem. + diff --git a/ChangeLog.nntp b/ChangeLog.nntp new file mode 100644 index 0000000..271e8fb --- /dev/null +++ b/ChangeLog.nntp @@ -0,0 +1,301 @@ +* Tue Feb 3 2004 Vsevolod Volkov +- update to 1.5.6 + +* Thu Dec 18 2003 Vsevolod Volkov +- fixed compose menu + +* Thu Nov 6 2003 Vsevolod Volkov +- update to 1.5.5.1 + +* Wed Nov 5 2003 Vsevolod Volkov +- update to 1.5.5 +- added space after newsgroup name in .newsrc file + +* Sun May 18 2003 Vsevolod Volkov +- nntp patch: fixed SIGSEGV when posting article + +* Sat Mar 22 2003 Vsevolod Volkov +- update to 1.5.4 + +* Sat Dec 21 2002 Vsevolod Volkov +- update to 1.5.3 +- replace safe_free calls by the FREE macro + +* Fri Dec 6 2002 Vsevolod Volkov +- update to 1.5.2 +- nntp authentication can be passed after any command + +* Sat May 4 2002 Vsevolod Volkov +- update to 1.5.1 + +* Thu May 2 2002 Vsevolod Volkov +- update to 1.3.99 + +* Wed Mar 13 2002 Vsevolod Volkov +- update to 1.3.28 +- fixed SIGSEGV in , , , + functions +- fixed message about nntp reconnect +- fixed function using browser +- added support of Followup-To: poster +- added %n (new articles) in group_index_format +- posting articles without inews by default + +* Wed Jan 23 2002 Vsevolod Volkov +- update to 1.3.27 + +* Fri Jan 18 2002 Vsevolod Volkov +- update to 1.3.26 + +* Thu Jan 3 2002 Vsevolod Volkov +- update to 1.3.25 +- accelerated speed of access to news->newsgroups hash (by ) +- added default content disposition + +* Mon Dec 3 2001 Vsevolod Volkov +- update to 1.3.24 + +* Fri Nov 9 2001 Vsevolod Volkov +- update to 1.3.23.2 +- fixed segfault if mutt_conn_find() returns null + +* Wed Oct 31 2001 Vsevolod Volkov +- update to 1.3.23.1 +- added support of LISTGROUP command +- added support for servers with broken overview +- disabled function on news server +- fixed error storing bad authentication information + +* Wed Oct 10 2001 Vsevolod Volkov +- update to 1.3.23 +- fixed typo in buffy.c +- added substitution of %s parameter in $inews variable + +* Fri Aug 31 2001 Vsevolod Volkov +- update to 1.3.22.1 +- update to 1.3.22 + +* Thu Aug 23 2001 Vsevolod Volkov +- update to 1.3.21 + +* Wed Jul 25 2001 Vsevolod Volkov +- update to 1.3.20 +- removed 'server-hook', use 'account-hook' instead +- fixed error opening NNTP server without newsgroup using -f option + +* Fri Jun 8 2001 Vsevolod Volkov +- update to 1.3.19 + +* Sat May 5 2001 Vsevolod Volkov +- update to 1.3.18 +- fixed typo in nntp_attempt_features() +- changed algorithm of XGTITLE command testing +- disabled writing of NNTP password in debug file +- fixed reading and writing of long newsrc lines +- changed checking of last line while reading lines from server +- fixed possible buffer overrun in nntp_parse_newsrc_line() +- removed checking of XHDR command +- compare NNTP return codes without trailing space + +* Thu Mar 29 2001 Vsevolod Volkov +- update to 1.3.17 +- support for 'LIST NEWSGROUPS' command to read descriptions + +* Fri Mar 2 2001 Vsevolod Volkov +- update to 1.3.16 + +* Wed Feb 14 2001 Vsevolod Volkov +- update to 1.3.15 + +* Sun Jan 28 2001 Vsevolod Volkov +- update to 1.3.14 +- show number of tagged messages patch from Felix von Leitner + +* Sun Dec 31 2000 Vsevolod Volkov +- update to 1.3.13 + +* Sat Dec 30 2000 Vsevolod Volkov +- Fixed problem if last article in group is deleted + +* Fri Dec 22 2000 Vsevolod Volkov +- Fixed checking of XGTITLE command on some servers + +* Mon Dec 18 2000 Vsevolod Volkov +- Added \r in AUTHINFO commands + +* Mon Nov 27 2000 Vsevolod Volkov +- update to 1.3.12 + +* Wed Nov 1 2000 Vsevolod Volkov +- update to 1.3.11 +- fixed error opening newsgroup from mutt started with -g or -G + +* Thu Oct 12 2000 Vsevolod Volkov +- update to 1.3.10 +- hotkey 'G' (get-message) replaced with '^G' + +* Thu Sep 21 2000 Vsevolod Volkov +- update to 1.3.9 +- changed delay displaying error messages from 1 to 2 seconds +- fixed error compiling with nntp and without imap + +* Wed Sep 6 2000 Vsevolod Volkov +- fixed catchup in index +- fixed nntp_open_mailbox() + +* Sat Sep 2 2000 Vsevolod Volkov +- functions and disabled +- format of news mailbox names changed to url form +- option nntp_attempts removed +- option reconnect_news renamed to nntp_reconnect +- default value of nntp_poll changed from 30 to 60 +- error handling improved + +* Wed Aug 30 2000 Vsevolod Volkov +- update to 1.3.8 +- new option show_only_unread +- add newsgroup completion + +* Fri Aug 4 2000 Vsevolod Volkov +- update to 1.3.7 + +* Sat Jul 29 2000 Vsevolod Volkov +- update to 1.3.6 + +* Sun Jul 9 2000 Vsevolod Volkov +- update to 1.3.5 +- authentication code update +- fix for changing to newsgroup from mailbox with read messages +- socket code optimization + +* Wed Jun 21 2000 Vsevolod Volkov +- update to 1.3.4 + +* Wed Jun 14 2000 Vsevolod Volkov +- don't substitute current newsgroup with deleted new messages + +* Mon Jun 12 2000 Vsevolod Volkov +- update to 1.3.3 +- fix for substitution of newsgroup after reconnection +- fix for loading newsgroups with very long names +- fix for loading more than 32768 newsgroups + +* Wed May 24 2000 Vsevolod Volkov +- update to 1.3.2 + +* Sat May 20 2000 Vsevolod Volkov +- update to 1.3.1 + +* Fri May 12 2000 Vsevolod Volkov +- update to 1.3 + +* Thu May 11 2000 Vsevolod Volkov +- update to 1.2 + +* Thu May 4 2000 Vsevolod Volkov +- update to 1.1.14 + +* Sun Apr 23 2000 Vsevolod Volkov +- update to 1.1.12 + +* Fri Apr 7 2000 Vsevolod Volkov +- add substitution of newsgroup with new messages by default + +* Wed Apr 5 2000 Vsevolod Volkov +- add attach message from newsgroup +- add one-line help in newsreader mode +- disable 'change-dir' command in newsgroups browser +- add -G option + +* Tue Apr 4 2000 Vsevolod Volkov +- get default newsserver name from file /etc/nntpserver +- use case insensitive server names +- add print-style sequence %s to $newsrc +- add -g option + +* Sat Apr 1 2000 Vsevolod Volkov +- remove 'X-FTN-Origin' header processing + +* Thu Mar 30 2000 Vsevolod Volkov +- update to 1.1.11 +- update to 1.1.10 + +* Thu Mar 23 2000 Vsevolod Volkov +- fix mutt_select_newsserver() +- remove 'toggle-mode' function +- add 'change-newsgroup' function + +* Wed Mar 22 2000 Vsevolod Volkov +- fix server-hook + +* Tue Mar 21 2000 Vsevolod Volkov +- fix error 'bounce' function after 'post' +- add 'forward to newsgroup' function + +* Mon Mar 20 2000 Vsevolod Volkov +- 'forward' function works in newsreader mode +- add 'post' and 'followup' functions to pager and attachment menu +- fix active descriptions and allowed flag reload + +* Tue Mar 14 2000 Vsevolod Volkov +- update to 1.1.9 +- remove deleted newsgroups from list + +* Mon Mar 13 2000 Vsevolod Volkov +- update .newsrc in browser + +* Sun Mar 12 2000 Vsevolod Volkov +- reload .newsrc if externally modified +- fix active cache update + +* Sun Mar 5 2000 Vsevolod Volkov +- update to 1.1.8 + +* Sat Mar 4 2000 Vsevolod Volkov +- patch *.update_list_file is not required +- count lines when loading descriptions +- remove cache of unsubscribed newsgroups + +* Thu Mar 2 2000 Vsevolod Volkov +- load list of newsgroups from cache faster + +* Wed Mar 1 2000 Vsevolod Volkov +- update to 1.1.7 + +* Tue Feb 29 2000 Vsevolod Volkov +- fix unread messages in browser +- fix newsrc_gen_entries() + +* Mon Feb 28 2000 Vsevolod Volkov +- fix mutt_newsgroup_stat() +- fix nntp_delete_cache() +- fix nntp_get_status() +- fix check_children() +- fix nntp_fetch_headers() + +* Fri Feb 25 2000 Vsevolod Volkov +- update to 1.1.5 + +* Thu Feb 24 2000 Vsevolod Volkov +- fix updating new messages in cache + +* Mon Feb 21 2000 Vsevolod Volkov +- change default cache filenames +- fix updating new messages in cache + +* Fri Feb 18 2000 Vsevolod Volkov +- fix segmentation fault in news groups browser + +* Tue Feb 15 2000 Vsevolod Volkov +- update to 1.1.4 + +* Thu Feb 10 2000 Vsevolod Volkov +- update to 1.1.3 + +* Sun Jan 30 2000 Vsevolod Volkov +- add X-Comment-To editing +- add my_hdr support for Newsgroups:, Followup-To: and X-Comment-To: headers +- add variables $ask_followup_to and $ask_x_comment_to + +* Fri Jan 28 2000 Vsevolod Volkov +- update to 1.1.2 diff --git a/ChangeLog.old b/ChangeLog.old new file mode 100644 index 0000000..75f415b --- /dev/null +++ b/ChangeLog.old @@ -0,0 +1,12219 @@ +Fri Dec 6 10:56:30 2002 Thomas Roessler + + * curs_lib.c, pgppubring.c: + From: Thomas Roessler + + Fixing a number of traditional malloc calls which have made their + way into the code. + + * build-release: From: Thomas Roessler + + Don't post announcements automatically for the moment. + +Thu Dec 5 22:30:02 2002 Thomas Roessler + + * doc/manual.sgml.head: From: Michael Elkins + + Fix #1398. + +Mon Nov 25 14:16:47 2002 Thomas Roessler + + * sendlib.c, ChangeLog, charset.h, configure.in, INSTALL: + From: Lars Hecking + + The noiconv patch. + +Thu Nov 14 08:12:30 2002 Thomas Roessler + + * curs_lib.c: From: Michael Elkins + + Fix #1388. + +Wed Nov 13 10:10:52 2002 Thomas Roessler + + * main.c: From: Thomas Roessler + + A description of -A was lacking from the help string. + + * doc/manual.sgml.head, doc/mutt.man, main.c, protos.h: + From: Thomas Roessler + + Add a new command line option -A which is used to expand aliases. + + * keymap.c: From: Thomas Roessler + + Add a safeguard #ifdef for the KEY_BTAB entry. Suggested by Thomas + Dickey. + +Tue Nov 12 09:20:30 2002 Thomas Roessler + + * keymap.c: From: Michael Elkins + + Tell mutt about the back-tab key (shift tab). + + * Makefile.am: From: Thomas Roessler + + ups. + + * Makefile.am: From: Thomas Roessler + + Add "make pclean" in order to clean up PATCHES. + + * po/ja.po: From: TAKAHASHI Tamotsu + + update + + * README: From: Thomas Roessler + + Add an explicit note that CVS doesn't work from ftp.mutt.org any more. + + * mbyte.c: From: "Yasuhiro Matsumoto" + + cp932 should be treated like shift_jis. + + * imap/auth_gss.c, imap/auth_sasl.c, configure.in, main.c, mutt_sasl.c, mutt_sasl.h: + From: Nathan Dushman + + Hi - this is a patch against mutt-1.4 to use version 2 of the Cyrus + SASL library; all changes are ifdef'd so as not to break SASLv1 + support. This includes a patch to configure.in to allow the choice + between v1 and v2, but someone with a better understanding of + autoconf should double-check it. + + * handler.c: From: Michael Elkins + + Actually commit patch-1.5.1.me.long_qp.2. + + * mailbox.h, mh.c, mx.c: From: Michael Elkins + + The maildir_time patch. + +Mon Nov 11 21:17:25 2002 Thomas Roessler + + * muttbug.sh.in: From: Thomas Roessler + + You shall not use CVS to distribute test versions. + + * muttbug.sh.in: From: Thomas Roessler + + more fixes. + + * muttbug.sh.in: From: Thomas Roessler + + Add some rpm-related intelligence to flea. + + * muttbug.sh.in: From: Thomas Roessler + + Fix flea's interaction with bug(1) on Debian systems. + + * PATCHES: From: Thomas Roessler + + Clean up the patch list. + + * hdrline.c, PATCHES: From: Michael Elkins + + Fix #485: Make %z work like %Z inside of %{} in $index_format. + + * copy.c, PATCHES: From: Michael Elkins + + Fix #1379 - update the total mailbox size when an attachment is + deleted. + + * curs_main.c, menu.c, pager.c, PATCHES: + From: Michael Elkins + + Fix #1310; redraw problems. + + * doc/manual.sgml.head, init.h: From: Michael Elkins + + Fix #1306. + + * send.c: From: Michael Elkins + + Fix #1364. + + * pgp.c: From: Steve Kennedy + + Fix memory leak in the PGP code. + + * commands.c, protos.h, sendlib.c: + From: Paul Walker + + Fix #718. + + * sendlib.c: From: Thomas Roessler + + Fix #1366. + + * mx.c: From: Martin Siegert + + Fix IMAP moving; #1367. + + * send.c: From: rene@clerc.nl + + Another S/MIME ifdef misses and causes compilation problems. + + * init.h: From: Michael Elkins + + patch-1.5.1-me.status_doc.2 + + * alias.c, init.c, protos.h: + From: Thomas Roessler + + patch-1.5-tlr.alias-parse.1 - extension of patch-1.5.1-me.aliascheck.1 + + This patch catches the same kind of bad alias names caught by + Michael's patch. There are some extensions: + + 1. Mutt makes sure that it doesn't _suggest_ bad names to the user. + 2. If a name is bad, the user is informed, and may elect to fix the + name. In this case, mutt will automatically suggest a fixed + version. + 3. If the user insists in the bad name, it's written into the + aliases file with proper quoting. + 4. When mutt parses the aliases file, it now uses the normal + tokenizer routines in order to properly handle quoted alias names. + + * handler.c: From: Michael Elkins + + patch-1.5-me.long_qp.2 (#1371) - fix truncation with overly long Q-P + encoded lines. + +Tue Oct 22 21:24:07 2002 Thomas Roessler + + * commands.c: From: René Clerc + + Add some missing #ifdefs. + + * init.h, recvattach.c: From: Michael Elkins + + Documentation fix; #1326 + + * send.c: From: René Clerc + + Another crypt_reply fix. + + * contrib/sample.muttrc: From: Michael Elkins + + #1357 + +Thu Oct 10 09:50:03 2002 Thomas Roessler + + * send.c: From: René Clerc + + Make sure that crypt_reply replies with the same type, despite a + possible S/MIME default. + + * doc/manual.sgml.head: From: Michael Elkins + + Document escaping rules for regular expressions (#1351). + + * pager.c: From: Michael Elkins + + Fix header coloring, so there is no difference between ncurses and + slang. + + * init.h: From: Michael Elkins + + PGP documentation glitch. + + * doc/manual.sgml.head: From: Paul Walker + + Fix #1340 (documentation) + + * pager.c: From: Michael Elkins + + Jeremy Lin wrote: + > When I search with / and get a match, doing '/\r' doesn't move to the next + > match. This behavior is unlike the less pager, and is rather useless, IMHO. + + Try the attached patch. + +Mon Sep 23 12:08:43 2002 Thomas Roessler + + * buffy.c: From: Thomas Roessler + + A variant of buffy notification. Note: If you folks don't like + this, we can return to the old version. + +Mon Sep 9 21:48:19 2002 Thomas Roessler + + * browser.c, buffy.c, curs_main.c, functions.h, OPS, pager.c, protos.h: + From: Rudi Chiarito + + Add a buffy-list function, and display more information when new + mail arrives. With some modifications from tlr. + + * mh.c: From: Michael Elkins + + Fix #1321. + + * mh.c: From: Michael Elkins + + [STABLE] Fix #1321. + + * signal.c: From: Tony Leneis + + Tru64 Unix portability patch. + + * signal.c: From: Tony Leneis + + [STABLE] Tru64 Unix portability patch. + + * doc/manual.sgml.head: From: Vincent Lefevre + + Fixing a typo. + + * postpone.c: From: Thomas Roessler + + Fixing #1300. Noted by David Shaw . + + * postpone.c: From: Thomas Roessler + + Fix #1299; noted by David Shaw . + + * init.h, mutt.h, send.c: From: Michael Elkins + + Introducing $forward_edit. + + * send.c: From: Michael Elkins + + #265: + + > Suppose a user wants to fcc to a file (e.g., /a/b/c) but accidentally + > typed a = before the path name. Mutt will fail to find the =/a/b/c + > folder, display the error message and beep, but immediately erase the + > error message; the mail will be sent even though the fcc failed. (The + > same can be accomplished by accidentally mistyping other parts of the + > path name.) On local systems where screen update is quick, the user + > might not notice the error message at all. + > + > The problem with this behaviour is that the user might have no chance + > to read the error message if the screen update is quick enough; as a + > result (s)he might not notice that the fcc failed. + > + > A related thing (probably can't be classified as a problem) is that if + > fcc fails, the user probably don't want to send the mail out because + > if fcc is requested (s)he probably very much want to keep a copy of + > the sent mail. + + Try the following patch. We keep track of whether or not the fcc + failed with a local var `fcc_error' and perform the same behavior as + if the actual send of the message failed (without really sending) + when the FCC fails, thus giving the user a chance to correct the + error. + + * globals.h, init.h, send.c: From: Michael Elkins + + Introduce $content_type. There's one change against Michael's + patch, in how the "format=flowed" parameter is used. + + * history.c: From: Vincent Lefevre + + [STABLE] Fixing history classes. + + * history.c: From: Vincent Lefevre + + Fixing history classes. + + * mh.c: From: Armin Wolfermann + + when doing the second parsing pass on a maildir, mutt doesn't delete + the fake HEADER struct if the file is unreadable. With this fix + unreadable files get silently ignored (like in the MH case). + + * po/ja.po: From: "TAKAHASHI, Tamotsu" + + Update. + + * editmsg.c: From: Michael Elkins + + Fixing #1149: Truncate files used for editing messages. + + * doc/manual.sgml.head, doc/muttrc.man.head, buffy.c, buffy.h, init.h: + From: Nicolas Rachinsky + + An unmailboxes command. #1311. + + * attach.c: From: Michael Elkins + + Fixing #1330. + + * attach.c: From: Michael Elkins + + [STABLE] Fixing #1330. + +Fri Aug 9 07:01:11 2002 Thomas Roessler + + * doc/muttrc.man.head: + From: Thomas Roessler + + Document unalternative_order in the manual page. + + * doc/manual.sgml.head, init.c, init.h: + From: Michael Elkins + + The following patch adds the `unalternative_order' command. It also + allows using "*" more generically in un-commands which use + parse_unlists(). + +Mon Aug 5 17:25:05 2002 Thomas Roessler + + * pgpewrap.c, pgppubring.c: From: Michael Elkins + + Error handling fixes. + +Fri Jul 26 08:24:01 2002 Thomas Roessler + + * doc/manual.sgml.head: From: Michael Elkins + + Documentation for reply-hook. Another patch (for the manual page) + would be most welcome. ;-)) + + * curs_lib.c: From: Michael Elkins + + The attached patch fixes mutt_yesorno() so that the question will be + truncated enough to always fit in the default answer string. The + size is calculated on the fly so that there is no artificial + truncation. + +Wed Jul 24 09:46:58 2002 Thomas Roessler + + * mutt.h: From: TAKIZAWA Takashi + + The attached patch sets MB_LEN_MAX to 16, which is MB_LEN_MAX value + on glibc-2.2. It works only with --without-wc-funcs switch. It may + be applied to mutt-1.4 and mutt-1.5.1. + + * configure.in: From: Lars Hecking + + Fix a quoting sloppiness. Noted by Vincent Lefevre. + + * browser.c: From: Thomas Roessler + + Fixing #1282. An off-by-one error. :-/ + + * mutt.h, send.c, hook.c, init.h: From: Michael Elkins + + reply-hook. Documentation still needed. + + * po/fr.po: From: Vincent Lefevre + + update. + + * doc/mutt.man, compose.c, editmsg.c, init.c, init.h, attach.c: + From: Michael Elkins + + Fix $editor and $visual. Based on an earlier patch from Edmund + Grimley Evans. + +Fri Jul 19 19:23:21 2002 Thomas Roessler + + * doc/manual.sgml.head: From: Michael Elkins + + Another documentation patch. + +Wed Jul 17 12:48:38 2002 Thomas Roessler + + * sendlib.c: From: Rocco Rutte + + * Thomas Roessler [02-07-08 10:14:53 +0200] wrote: + > * sendlib.c, 3.12 -> 3.13 + > From: Rocco Rutte + + > Make encode_from a bit more aggressive, by also catching a 'f' in + > the beginning of a line. + + 'Catch' is good but also to encode it is better. It may have + been too late (sorry for that) so I fixed it. I don't know + why the current source only escapes lines that actually + begin with 'from' or 'From' followed by some text. I think + that escaping 'from' or 'From' on a single line should be + done, too. + + Not a big deal, anyways. + +Tue Jul 16 07:28:11 2002 Thomas Roessler + + * main.c: From: Michael Elkins + + Update copyright notices. + +Sun Jul 7 19:33:50 2002 Thomas Roessler + + * doc/manual.sgml.head, doc/mutt.man, init.h: + From: Cedric Duval + + Documentation fixes. + + * doc/manual.sgml.head: + From: "TAKAHASHI, Tamotsu" + + Dcumentation fixes. + + * doc/manual.sgml.head, doc/mutt.man, init.h: + From: Cedric Duval + + Documentation fixes. + + * sendlib.c: From: Rocco Rutte + + Make encode_from a bit more aggressive, by also catching a 'f' in + the beginning of a line. + + * po/Attic/bg.po: From: Velko Hristov + + Update. + + * init.h: From: Jeremy Blosser + + Add unauto_view to the stable branch. A one-liner. + +Fri Jun 28 19:52:31 2002 Thomas Roessler + + * doc/manual.sgml.head: From: Michael Elkins + + Documentation fix (#271). + +Tue Jun 18 10:03:52 2002 Thomas Roessler + + * po/zh_TW.po, po/tr.po, po/uk.po, po/zh_CN.po, po/sv.po, po/sk.po, po/ru.po, po/pt_BR.po, po/nl.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/it.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/el.po, po/da.po, po/de.po, po/ca.po, po/cs.po: + From: (automatic) + + "make update-po" + + * po/ca.po: From: several submitters + + Adding a BG translation. Update for CA. + + * po/Attic/bg.po: + file bg.po was initially added on branch mutt-1-4-stable. + + * po/Attic/bg.po: From: several submitters + + Adding a BG translation. Update for CA. + + * configure.in: From: several submitters + + Adding a BG translation. + + * init.c: From: Michael Elkins + + The string used to store the commmand for a backtic expansion in the + muttrc was not free'd if the command failed for some reason. + + * m4/gssapi.m4: From: David Champion + + Okay, two bugs here. One's an oversight of mine in my previous patch, + where I tried to use "[hH]" as Bourne code while m4 had quoting set to + ([, ]) -- this probably makes mutt mis-detect Heimdal after all. + + The other is not mine (i.e., it's in cvs now) and it makes mutt + overstrike $LIBS if Heimdal or MIT Kerberos is detected. This is a + problem for anyone who needs -lnsl -lsocket, in particular. I was + fixing + this by hand during late 1.3.x releases, as I didn't have time to + track + it down.... + + Here's a patch against the current (unpatched) 1.5 cvs copy of + m4/gssapi.m4. It probably should go into both branches. Sorry for the + repeats. + +Thu Jun 6 23:13:54 2002 Thomas Roessler + + * color.c: From: Michael Elkins + + Fix #1230. + + * init.h: From: Will Fiveash + + Fix a couple of compile-time warnings. + +Fri May 31 16:59:39 2002 Thomas Roessler + + * charset.c, charset.h, sendlib.c: + From: Edmund GRIMLEY EVANS + + Fix charset-hook. + + * m4/iconv.m4, charset.h, configure.in, INSTALL: + From: Lars Hecking + + The noiconv patch. Should probably have been in 1.4. + +Thu May 30 12:15:02 2002 Thomas Roessler + + * rfc822.c: From: Thomas Roessler + + Properly handle empty addresses (<>) when they show up in mail + headers. The approach taken is to store this address as <@>, and to + check this special case when printing an address. + +Wed May 29 09:31:51 2002 Thomas Roessler + + * po/zh_CN.po, po/zh_TW.po, po/uk.po, po/tr.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ko.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/eo.po, po/es.po, po/et.po, po/da.po, po/de.po, po/el.po, po/ca.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.4 + + * po/de.po: From: Roland Rosenfeld + + update. + + * po/id.po: From: Ronny Haryanto + + update + +Tue May 28 09:07:29 2002 Thomas Roessler + + * mx.h, postpone.c: From: Michael Elkins + + Fix some warnings noted by Vincent Lefevre. + +Tue May 21 07:28:28 2002 Thomas Roessler + + * po/eo.po: From: Edmund GRIMLEY EVANS + + update + +Sat May 18 05:39:55 2002 Thomas Roessler + + * pattern.c: From: Thomas Roessler + + Fix #1175. + + * pattern.c: From: Thomas Roessler + + Fix #1175. Noticed by Alain Bench. + + * pop_lib.c: From: Vsevolod Volkov + + Attached patch for mutt 1.3.X/1.4 and 1.5.X removes gcc warning in + pop_lib.c. + +Thu May 16 17:33:19 2002 Thomas Roessler + + * po/pl.po: From: Pawel Dziekonski + + update + + * po/ko.po: From: Im Eunjea + + update. + + * po/ko.po: From: Im Eunjea + + update + + * po/id.po: From: Ronny Haryanto + + update. + + * compose.c: From: Ronny Haryanto + + Triple-DES, not Tripple-DES. + +Tue May 14 18:56:01 2002 Thomas Roessler + + * po/uk.po: From: "Andrej N. Gritsenko" + + update + +Mon May 13 20:18:57 2002 Thomas Roessler + + * po/et.po: From: Toomas Soome + + update + + * po/ru.po, po/uk.po: From: Vsevolod Volkov + + update + + * po/da.po: From: Byrial Jensen + + update + + * po/ru.po: From: Vsevolod Volkov + + update + + * po/sv.po: From: Jörgen Tegnér + + update + + * po/fr.po: From: Vincent Lefevre + + update + +Thu May 9 09:52:09 2002 Thomas Roessler + + * doc/muttrc.man.head: + From: Thomas Roessler + + #1190, from Tim Alexeevsky + +Mon May 6 11:27:20 2002 Thomas Roessler + + * doc/manual.sgml.head: + From: Thomas Roessler + + Remove -Q which is only present in unstable from the stable + documentation. Thanks to Andreas Kneib + for noting. + +Thu May 2 01:05:27 2002 Thomas Roessler + + * Makefile.am: From: Thomas Roessler + + Include smime.h with EXRA_DIST. + +Wed May 1 23:24:17 2002 Thomas Roessler + + * po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.5.1 + + * smime.c: From: Thomas Roessler + + Shut up check_sec.sh. No security holes, but some ugly code. + + * check_sec.sh: From: Thomas Roessler + + Give all the warnings at once. + + * build-release: From: Thomas Roessler + + - This is a development branch. + - Add a -nodiff option to suppress generating a patch. + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, ChangeLog, po/ca.po, po/cs.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.99 + + * build-release: From: Thomas Roessler + + s/scp1/scp/ + +Tue May 7 15:42:37 IST 2002 Lars Hecking + + * INSTALL: Document new --disable-iconv configure option. + + * charset.h: Conditionalise inclusion of iconv.h. Define iconv_t + if not found by configure. Define ICONV_CONST and declare iconv + functions if not found by configure. + + * configure.in: New --disable-iconv configure option. Warn instead + error if iconv not found. New tests for iconv.h and iconv_t. + + * sendlib.c(convert_file_to): Allow compilation without system + iconv and return -1 if no iconv available. + +Wed May 1 23:21:10 2002 Thomas Roessler + + * smime.c: From: Thomas Roessler + + Shut up check_sec.sh. No security holes, but some ugly code. + + * check_sec.sh: From: Thomas Roessler + + Give all the warnings at once. + + * build-release: From: Thomas Roessler + + - This is a development branch. + - Add a -nodiff option to suppress generating a patch. + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, ChangeLog, po/ca.po, po/cs.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.99 + + * build-release: From: Thomas Roessler + + s/scp1/scp/ + +Mon Apr 29 17:12:18 2002 Thomas Roessler + + * lib.c, lib.h, protos.h: + From: Thomas Roessler + + Fix #1171. + + * po/fr.po: From: Vincent Lefevre + + update. + + * po/ja.po: From: oota toshiya + + update. + + * imap/util.c: From: Byrial Jensen + + There is a possible buffer overflow due an off-by-one error in + imap/util.c, line 125. The error is in the maximum field width + indication in the sscanf() call. You must have room in the receiving + buffer for this number of characters /plus a terminating NULL + character/. + + * imap/util.c: From: Byrial Jensen + + There is a possible buffer overflow due an off-by-one error in + imap/util.c, line 125. The error is in the maximum field width + indication in the sscanf() call. You must have room in the + receiving buffer for this number of characters /plus a + terminating NULL character/. + +Thu Apr 25 13:30:49 2002 Thomas Roessler + + * pop.c, pop_lib.c: From: Vsevolod Volkov + + Attached patch fixes the problem described below. It should be + applied to both mutt 1.3/1.4 and 1.5 branches. + + > Date: Thu, 11 Apr 2002 16:24:00 -0500 + > Subject: mutt 1.3.x / pop + > From: "Ryan O'Hara" + > To: bcully@users.sourceforge.net + > User-Agent: Mutt/1.3.27i + + > Hi. My apologies if this has nothing to do with you. If it does not, + > maybe you could forward it on to someone. + + > In mutt 1.3.x I have noticed that if I uses POP to retrieve mail, and + > I enter an incorrect password whem prompted, it will *save* that + > password and keep trying to use it. However, in the 1.2.x versions it + > worked like this: type in wrong POP password, try to connect to POP + > server again and it will ask you (again) for the password. mutt 1.3.x + > does not, it just tries to connect with the wrongs password (which + > just failed). + + > This is kinda annoying. Just thought I'd point out this regression. + + > Thanks. + > R + + * doc/manual.sgml.head: From: Wouter Verheijen + + Someone in news:comp.mail.mutt noted that the list of command-line + options in the manual is not up-to-date. + + Included a small patch that includes all options that 'mutt -h' shows. + + * doc/manual.sgml.tail, init.h, OPS, pattern.c: + From: Cedric Duval + + attached are fixes for some little mistakes : + + * history-down -> scroll _down_, not up + * functions decode-(save|copy) do not exist in the attach menu. + * gettext oversight in pattern.c + * inconsistency between "printf-like sequences" used all over the place + and "escape sequences" for the description of $attribution. + + * doc/manual.sgml.tail, pattern.c, init.h, OPS: + From: Cedric Duval + + attached are fixes for some little mistakes : + + * history-down -> scroll _down_, not up + * functions decode-(save|copy) do not exist in the attach menu. + * gettext oversight in pattern.c + * inconsistency between "printf-like sequences" used all over the + place and "escape sequences" for the description of $attribution. + + * recvattach.c: From: Thomas Roessler + + Also fix this for the S/MIME case. + + * recvattach.c: From: Thomas Roessler + + Fiy handling of multiparts which have encrypted sub-parts, at least + for PGP. + + * sendlib.c: From: Thomas Roessler + + Force 7bit encoding for application/pgp-keys. + +Sat Apr 20 21:38:47 2002 Thomas Roessler + + * m4/Attic/lib-ld.m4, m4/Attic/lib-link.m4, m4/Attic/lib-prefix.m4, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, intl/Attic/eval-plural.h, intl/Attic/gmo.h, intl/Attic/localename.c, intl/Attic/os2compat.c, intl/Attic/os2compat.h, intl/Attic/osdep.c, intl/Attic/plural-exp.c, intl/Attic/plural-exp.h, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcigettext.c, intl/gettextP.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/Makefile.in, intl/plural.c, intl/plural.y, ABOUT-NLS, Attic/config.rpath, configure.in, INSTALL: + From: Thomas Roessler + + Backing out the latest iconv-related changes from the + mutt-1-4-stable branch. + + * m4/Attic/lib-ld.m4, m4/Attic/lib-link.m4, m4/Attic/lib-prefix.m4, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4: + same as above. + + * intl/Attic/eval-plural.h, intl/Attic/gmo.h, intl/Attic/localename.c, intl/Attic/os2compat.c, intl/Attic/os2compat.h, intl/Attic/osdep.c, intl/Attic/plural-exp.c, intl/Attic/plural-exp.h, intl/gettextP.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/plural.c, intl/plural.y, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcigettext.c, intl/Makefile.in: + From: Thomas Roessler + + Committing the new iconv patches into a separate branch. + + * ABOUT-NLS, Attic/config.rpath, configure.in, INSTALL: + From: Thomas Roessler + + Committing the new noiconv patches into a separate branch. + + * sendlib.c: From: Thomas Roessler + + Generate the resent-message-id ourselves, and add it in the top of + the header. + + * copy.c, mutt.h, sendlib.c: From: Wouter Verheijen + + Bug #571 "mutt should not replicate ">From " headers while bounding", + has a patch attached. + Will that patch get in? + + Although these lines are not generated by mutt, I would strongly + suggest + to prevent it, because by boucing a mail the MUA should ensure + that the message header is according to the specification. + A ">From " line is not, because of the spaces before a colon. + + Because this has such serious consequences (totally unreadable mail) + when a MTA interpretes this line as the beginning of the body (not + unreasonable), I think Mutt should prevent sending this invalid + headerline. + + Because the other patch to the bugreport is not really correct IMHO + (because the fieldnames are not limited to alphanumeric chars, RFC2822 + 3.6.8), I propose another one. + + This patch also appends Resent-* to the header, instead of + prepending it. The Resent-Message-Id is however still appended, + because I could not find it; is it added by the MTA instead of by + Mutt? + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4: + Try to get the noiconv patch to work. + + * configure.in: From: Thomas Roessler + + Try to get the noiconv patch to work with my development environment. + + * INSTALL: From: Thomas Roessler + + Fix a typo. + + * init.h, rfc2047.c, sendlib.c, charset.c, charset.h, configure.in, gnupgparse.c, INSTALL: + From: Lars Hecking + + patch.1.3.28.lh.noiconv + ======================= + + This is the new version of my noiconv patch. It _requires_ the previous + patch! If applied without, you'll have to resolve a couple of conflicts + manually. + + Notes: + - it's a lot cleaner than the old noiconv patch because no m4 files are + modified + - new configure option --disable-iconv; INSTALL updated accordingly + [I am guessing here, but the background for the --without-iconv option + mentioned in INSTALL was that mutt had a without-iconv option before + gettext included iconv support. When mutt's intl/* files were updated + to a newer gettext, there suddenly were two iconv options, which then + got merged, that is, mutt's was removed. That was probably when + --without-iconv stopped working, but I'm not sure, it may well be that + it never worked since iconv support was introduced.] + - all changes in *.[ch] files should be identical to the old patch + + * intl/Attic/localename.c: + file localename.c was initially added on branch mutt-1-4-stable. + + * intl/Attic/localename.c: From: Lars Hecking + + This one seems to have been missing, too. + + * Attic/config.rpath: + file config.rpath was initially added on branch mutt-1-4-stable. + + * Attic/config.rpath: From: Lars Hecking + + Another file from the gettext patch. + + * m4/Attic/lib-ld.m4: + file lib-ld.m4 was initially added on branch mutt-1-4-stable. + + * m4/Attic/lib-link.m4: + file lib-link.m4 was initially added on branch mutt-1-4-stable. + + * m4/Attic/lib-prefix.m4: + file lib-prefix.m4 was initially added on branch mutt-1-4-stable. + + * m4/Attic/lib-ld.m4, m4/Attic/lib-link.m4, m4/Attic/lib-prefix.m4: + From: Lars Hecking + + Add new m4 files from patch.1.3.28.lh.gettext-0.11.1. + + * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4: + From: Lars Hecking + + patch.1.3.28.lh.gettext-0.11.1 + ============================== + + This one updates the gettext stuff in mutt to gettext-0.11.1. I started + doing this in the hope that the new gettext version would simplify the + noiconv patch, but unfortunately, this turned out not to be the case + (the new iconv m4 macros still don't allow for switching iconv support off). + + However, as a few hours of merging and testing were spent, I'd suggest to + adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code + reorganisation. Ok, a bit more, I'm no gettext expert :) + + Notes: + - after applying the patch, you need to chmod 755 config.rpath + - a couple of new files for m4/*, too + - I have broken with the tradition of renaming gettext's AM_* macros + to MUTT_AM_*! I don't think it's necessary anymore to customise these + macros, but you (I really mean "you, tlr" :) want to have a look at + the new gettext.m4. The others should be ok as they are. + - previous gettext updates were also updating po/Makefile.in.in, which + I didn't; someone who has a clue about gettext should check whether + this might be necessary, and also whether any other files in po/ need + updating + + I will provide the same patch for the 1.5 branch at some stage, ideally + after getting some F E E D B A C K for this one. + + * intl/Attic/eval-plural.h: + file eval-plural.h was initially added on branch mutt-1-4-stable. + + * intl/Attic/gmo.h: + file gmo.h was initially added on branch mutt-1-4-stable. + + * intl/Attic/os2compat.c: + file os2compat.c was initially added on branch mutt-1-4-stable. + + * intl/Attic/os2compat.h: + file os2compat.h was initially added on branch mutt-1-4-stable. + + * intl/Attic/osdep.c: + file osdep.c was initially added on branch mutt-1-4-stable. + + * intl/Attic/plural-exp.c: + file plural-exp.c was initially added on branch mutt-1-4-stable. + + * intl/Attic/plural-exp.h: + file plural-exp.h was initially added on branch mutt-1-4-stable. + + * intl/Attic/eval-plural.h, intl/Attic/gmo.h, intl/Attic/os2compat.c, intl/Attic/os2compat.h, intl/Attic/osdep.c, intl/Attic/plural-exp.c, intl/Attic/plural-exp.h, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcigettext.c, intl/gettextP.h, intl/hash-string.h, intl/l10nflist.c, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/localealias.c, intl/Makefile.in, intl/plural.c, intl/plural.y, ABOUT-NLS, charset.c, charset.h, configure.in, gnupgparse.c, init.h, rfc2047.c, sendlib.c: + From: Lars Hecking + + patch.1.3.28.lh.gettext-0.11.1 + ============================== + + This one updates the gettext stuff in mutt to gettext-0.11.1. I started + doing this in the hope that the new gettext version would simplify the + noiconv patch, but unfortunately, this turned out not to be the case + (the new iconv m4 macros still don't allow for switching iconv support off). + + However, as a few hours of merging and testing were spent, I'd suggest to + adopt it for 1.4. The actual changes to intl/* are part cosmetic, part code + reorganisation. Ok, a bit more, I'm no gettext expert :) + + Notes: + - after applying the patch, you need to chmod 755 config.rpath + - a couple of new files for m4/*, too + - I have broken with the tradition of renaming gettext's AM_* macros + to MUTT_AM_*! I don't think it's necessary anymore to customise these + macros, but you (I really mean "you, tlr" :) want to have a look at + the new gettext.m4. The others should be ok as they are. + - previous gettext updates were also updating po/Makefile.in.in, which + I didn't; someone who has a clue about gettext should check whether + this might be necessary, and also whether any other files in po/ need + updating + + I will provide the same patch for the 1.5 branch at some stage, ideally + after getting some F E E D B A C K for this one. + +Wed Apr 17 17:05:54 2002 Thomas Roessler + + * po/fr.po: From: Vincent Lefevre + + Update. + + * m4/gssapi.m4: From: David Champion + + MIT krb5 1.2.4 has krb5-config, so it's no longer sufficient to say + that possession of krb5-config indicates Heimdal. Patch attached. This + assumes that Heimdal's "kreb5-config --vendor" begins with "Heimdal". + I cannot verify that this is correct, so patch might be wrong on this + point. + +Sun Apr 7 21:19:57 2002 Thomas Roessler + + * imap/command.c, imap/imap.c, imap/message.c: + From: Brendan Cully + + The attached patch cleans up some bugs in switching IMAP mailboxes: + * free current flags on mailbox close + * reset reopen state + * don't parse the same untagged SELECT response for multiple options + * call mx_update_context after reading the whole mailbox, not after + each message + * reset new mail flag if mail arrives in the middle of opening the + mailbox. This should close 1139 + + 939 is most likely unaffected. I discovered these problems while + investigating 939. + +Fri Apr 5 10:42:54 2002 Thomas Roessler + + * po/ja.po: From: "TAKAHASHI, Tamotsu" + + update. + +Thu Apr 4 20:49:46 2002 Thomas Roessler + + * po/ko.po: From: Im Eunjea + + Update. + + * po/ja.po: From: "TAKAHASHI, Tamotsu" + + Update. + + * pgp.c: From: Thomas Roessler + + Fix a typo noted by Tamotsu Takahashi. + +Wed Apr 3 15:22:27 2002 Thomas Roessler + + * handler.c: From: Thomas Roessler + + Fix printing of format=flowed text parts. + + * commands.c: From: Thomas Roessler + + Fix #1144 in stable. + + * commands.c: From: Thomas Roessler + + Fix a file descriptor leak in the display filter code. Noted by + Chr. v. Stuckrad. + + fixes: #1144 + +Tue Apr 2 18:49:37 2002 Thomas Roessler + + * m4/iconv.m4: From: Lars Hecking + The noiconv patch. + + * charset.c, charset.h, configure.in, gnupgparse.c, init.h, rfc2047.c, sendlib.c: + The noiconv patch. + + From: Lars Hecking + +Sat Mar 30 08:26:31 2002 Thomas Roessler + + * po/pl.po: update. From Pawel Dzienkonski. + + * po/fr.po: Update; From Vincent Lefevre. + + * postpone.c, sendlib.c: + The attached patch allows the user to override the user-agent field + with my_hdr. It also removes the stripping of the x-mailer field + when recalling a postponed message. + +Thu Mar 28 13:25:23 2002 Thomas Roessler + + * mx.c, mx.h, mailbox.h, main.c, mbox.c, mh.c: + patch-1.3.28-me.emptycheck.1 + +Wed Mar 27 08:50:42 2002 Thomas Roessler + + * pgp.c: There was some output missing. + + * po/POTFILES.in: update. + + * pgp.c: + More fixes. Note to self: The code which controls character set + selection for attachments is far too complicated. + + * pgp.c: + Don't include temporary file names in the Content-Disposition header. + + * pgp.c: + Use text/plain; format=... when we are asked to detect inline PGP + material in in text/plain body parts. + + * pgp.c, sendlib.c: Fix encoder mode for text/plain; action=pgp-*. + + * pgp.c: + Fix "noconv" handling for the message body when we generate inline + PGP. + + * charset.c, charset.h, handler.c, muttlib.c, pgp.c: + Some hackisch charset handling for text/plain; x-action=pgp-*. I + don't like this stuff, but it's better than nothing. + +Tue Mar 26 22:25:48 2002 Thomas Roessler + + * pgp.c: Change x-action values to "pgp-encrypted", "pgp-signed". + + * contrib/gpg.rc, commands.c, compose.c, crypt.c, handler.c, muttlib.c, pgp.c, protos.h, recvattach.c, sendlib.c: + More inline PGP changes. + + * pgp.c: + Also permit for "action" and "x-action" on the receiving end, just + in case we can settle on a joint standard with other MUA developers. + + * commands.c, crypt.c, handler.c, pgp.c, pgpinvoke.c, sendlib.c: + OK, I'm giving up: pgp_create_traditional now creates text/plain; + x-mutt-action={pgp-encrypt,pgp-sign}. + + * pgpinvoke.c: Fix application/pgp signatures. + + * charset.c, charset.h, gnupgparse.c, handler.c, mbyte.c, rfc2047.c, sendlib.c: + Fix iconv warnings; from Edmund Grimley Evans. + + * smime.c: + Please use ascii_strcasecmp() if you want to compare ASCII parameter + strings. mutt_strcasecmp() depends on the locale, and detects "i" + and "I" as _different_ in Turkish locales. + +Mon Mar 25 11:34:40 2002 Thomas Roessler + + * crypt.c: + Fix S/MIME signature type. Noted by Dan Ohnesorg . + + * buffy.c: close 1103; from Brendan Cully + + * doc/manual.sgml.tail: close 1122; from Brendan Cully + + * hdrline.c, muttlib.c: Fix #87s; from Brendan Cully. + + * hdrline.c, muttlib.c: Fix #872, from Brendan Cully. + + * contrib/smime_keys_test.pl, contrib/Makefile.in: + Include a test script by Mike Schiraldi. It's perl > the one I have + installed, so I'm just putting it into contrib for now. + +Wed Mar 20 09:53:42 2002 Thomas Roessler + + * editmsg.c, mailbox.h, mx.c: Rename M_NEW to M_NEWFOLDER. + + * editmsg.c, mailbox.h, mx.c: + Rename the new M_NEW by M_NEWFOLDER. There was another constant of + the same name. Problem noted by Will Yardley's compiler. + +Tue Mar 19 09:54:05 2002 Thomas Roessler + + * browser.c: Fix #1115. + + * editmsg.c, mailbox.h, mx.c: + Fix a temporary file race problem when using the edit-message + function. Backported from unstable. + + * po/pl.po: update + +Mon Mar 18 18:54:56 2002 Thomas Roessler + + * browser.c: Should fix #1115. BACKPORT! + +Fri Mar 15 09:11:05 2002 Thomas Roessler + + * po/ja.po: update from oota toshiya. + + * po/ja.po: update, from oota toshiya. + +Wed Mar 13 23:43:41 2002 Thomas Roessler + + * attach.c: + Undoing the previous patch. It was junk, and may ruin files. + + * attach.c, editmsg.c, mailbox.h, mx.c: + Don't fopen mail folders in append mode where we should safe_fopen() + them in write mode. Debian bug #138200, noted by Colin Philipps + . + + NEEDS BACKPORTING. + + * po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/da.po, po/de.po, po/el.po, po/Attic/ChangeLog, po/ca.po, po/cs.po: + automatic post-release commit for mutt-1.3.28 + + * po/Attic/ChangeLog: + file ChangeLog was initially added on branch mutt-1-4-stable. + + * ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.28 + + * doc/smime-notes.txt, smime.c: Assorted patches from Mike Schiraldi. + +Sat Mar 2 12:11:35 2002 Thomas Roessler + + * contrib/smime.rc, compose.c, init.h, mutt.h, sendlib.c, smime.c, smime.h: + Introduce smime_default_key. From Oliver Ehli. + + * contrib/smime.rc, smime.c, smime.h, smime_keys.pl, init.h, mutt.h: + smime.c: + - the getkeys() function was broken and deleted the last char + of the certfilename + - it now lets me use more than one key for the same mailbox + ie select these. + - some display output was garbled when the email didn't match. + i posted some fix to mutt-users, but i don't like that sleep() + so i dropped the first error message, which basically repeated + the from/sender field only. so now there's just the message: they + don't match. + + smime_keys: + - i modified the add_chain to continue even if no roo-cert + is present (david collantes received som chain that got + exported from outlook. obiously they don't (always ?) + include the root cert) it will now abort if neither root + nor intermediate certs are present. + - add_cert created index entries with '-' as issuer cert, when + it should have been '?'. thus verify would fail. (obviously + nobody ever used that command (add_cert, that is) :) + + the feature above obsoletes the hash_cert and fingerprint_cert commands, + adds import_cert command and ask_cert_label bool. i modified the output + of smime_keys (a little) so it doesn't look too garbled when supplying + the label (it is actually interactive :) furthermore, i do a verify + after the cert was added and modified the verify routine to make the + cerificate trusted in case of success. (we discussed this in another + message) that is ok so far, but perhaps this requires some better root + certificate handling, ie the trust should be somehow connected to the + root certificate, that maybe added (if the user trusts it and its not + present already) to the ca-file. i'll think about that some more ... but + then, there already is the add_root command. hmmm... (btw, you'll now + never get asked to trust a certificate) + + i have not yet deleted the email handling from the import key stuff (in + smime.c/crypt.c), for i'm thinking about smime_keys using it as an + additional arg. otoh i don't think users would press ^k if verification + failed...hmmm... but still, smime_keys does extract the email from the + certificate either way and does verify it by itself, so the only thing + that would happen is to have some invalid certificates, that mutt'll + refuse to use anyways, left in the database.... + + (From Oliver Ehli.) + +Thu Feb 28 23:28:51 2002 Thomas Roessler + + * sort.c: Turn on incremental threading again. + + * smime_keys.pl: + The script will try to pick out the end-user cert and pass that to + openssl. The code which tells the difference may not be perfect. It + works with all the certs in my collection, though. I won't be at all + surprised if someone comes across a cert chain which confuses it, + but it should print out an error in that case. Hopefully they will + send us the chain so we can adjust our code. + + (From Mike Schiraldi.) + + * init.h, mutt.h, thread.c: + Threading enhancements from Daniel Eisenbud. + + * curs_main.c, init.c, init.h, mutt.h, thread.c: + $narrow_tree; fater redrawing when changing tree options. From + Daniel Eisenbud. + + * imap/message.c, mbox.c, mx.c, thread.c: + A possible work-around for #939. From Daniel Eisenbud. + + * init.h, mutt.h, thread.c: + Threading enhancements from Daniel Eisenbud. + +Tue Feb 26 10:58:56 2002 Thomas Roessler + + * po/ru.po: update + + * init.h: Fix a typo. + + * init.h: Fix a typo. #1069. + + * imap/browse.c, imap/message.c, configure.in, mutt_sasl.c: + Brendan Cully sent a patch. + + * install-sh: Fix a typo. From Edmund Grimley Evans. + + * po/ru.po: ru.po update. + + * pop_lib.c: + CAPA response tags are case-insensitive. Noted by Michael Vore, + patch from Vsevolod Volkov. + +Mon Feb 18 14:55:31 2002 Thomas Roessler + + * alias.c, send.c: Fix for #1047. From Michael Elkins. + +Thu Feb 14 11:22:51 2002 Thomas Roessler + + * charset.c, gnupgparse.c, init.h, rfc2047.c: + Iconv patch from Lars Hecking. MAY NEED TO BE BACKPORTED. + +Wed Feb 13 12:04:52 2002 Thomas Roessler + + * smime.c: mutt_any_key() shouldn't be used in curses mode. + + * hdrline.c, init.h, parse.c: + Change the default format to be more friendly to "0-line messages", + and fix optional expansion for %l - it was the wrong way around. + Also, add a hack to parse.c so we ignore negative values in Lines + headers. + + * hdrline.c, muttlib.c, protos.h: Undo the %l fix. It broke things. + + * menu.c: + Fix mutt_pad_string; from Edmund Grimley Evans. (MAY NEED TO BE + BACKPORTED.) + + * main.c: Report libiconv version. + +Tue Feb 12 21:54:41 2002 Thomas Roessler + + * hdrline.c, muttlib.c, protos.h: Improve %l's behaviour. + + * extlib.c, main.c, pattern.c, smime_keys.pl: + Mike Schiraldi's daily S/MIME patch. + +Mon Feb 11 17:31:53 2002 Thomas Roessler + + * smime.c: + This patch gets rid of an ugly static variable in smime.c. (From + Mike Schiraldi.) + + * smime_keys.pl: + This patch lets smime_keys.pl automagically handle both formats of + x509 certificate -- PEM (text) and DER (binary). This lets Outlook + users (and probably others) directly import the certs without first + converting them manually. (From Mike Schiraldi.) + + * configure.in: + Honor current values of $LIBS and $CPPFLAGS. From Thomas Dickey. + + * configure.in: Honor $LIBS and $CPPFLAGS. From Thomas Dickey. + + * init.c: patch-1.3.27.me.initsort.1 + +Thu Feb 7 21:48:42 2002 Thomas Roessler + + * smime_keys.pl: Another S/MIME patch from Mike Schiraldi. + + * smime_keys.pl: Fix smime_keys. + + * smime.c: S/MIME fixes from Mike Schiraldi. + + * po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/POTFILES.in, Makefile.am: + Make S/MIME messages translatable. + +Wed Feb 6 19:14:47 2002 Thomas Roessler + + * lib.h: Avoid a warning on some machines. + + * lib.h, smime.c: Make some scanf formats safe. + +Tue Feb 5 22:01:06 2002 Thomas Roessler + + * ascii.c: The previous fix was complete nonsense. What a day. :-( + + * ascii.c: The previous fix was complete nonsense. + + * browser.c, lib.c, lib.h: + Use strcoll for the file browser. From David Champion. + + * hook.c: Fix crypt-hook. From Dale Woolridge + . + + * smime_keys.pl: Clean-up from Mike Schiraldi. + + * imap/browse.c: Fix. + + * imap/browse.c: Fix another IMAP browsing bug. + + * po/ru.po, po/fr.po, po/ko.po: update + + * smime.c: + Don't put garbage onto the screen when trying to decrypt messages. + + * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl: + S/MIME fixes from Oliver Ehli: + + - smime_keys.pl: + + support for multiple email adrresses in cert: will add one entry + to {keys, cetrificates}/.index now (for each mailbox) + + support for certificates without intermediate certs (e.g. for + people who are their own CA: use root as intermediate, for it + probably wouldn't be known to anyone...) + + bugfix in handle_pem: the checks if some type of cert is present; + die() could never be reached, as the variables checked wouldn't + have been set in that case, so it would break because of undefined + value or some such thing.... (so it has to check $iter instead) + + - smime.c (init.h, ....) + + support for importing certificates issued for multiple addresses. + + introduced smime_fingerprint_cert_command, so finally certs can + get compared ... (so the above works..) + + cleaned up some error messages, that would mess up the terminal. + + fixed typos (init.h) + + * ascii.c: Fix. + + * ascii.c: Fix ascii_*cmp functions. Problem noted by Brad Thompson. + +Mon Feb 4 09:59:02 2002 Thomas Roessler + + * smime.c, crypt.c: Some S/MIME fixes from Oliver Ehli . + +Sun Feb 3 09:58:45 2002 Thomas Roessler + + * doc/manual.sgml.head, doc/muttrc.man.head, init.h: + Add unauto_view. From Jeremy Blosser. + + * Makefile.am, pgplib.h, pgppubring.c: + Add a "-f" flag which helps to dump fingerprints. Contributed by + Jason Harris , and not strictly needed for + mutt. + + * pgppubring.c: + Correctly calculate fingerprints for type 20 ElGamal keys. Noted by + Jason Harris . + + * pgppubring.c: + Fix calculation of fingerprints (and key IDs) for type 20 ElGamal + keys. Noted by Jason Harris . + +Sat Feb 2 16:52:27 2002 Thomas Roessler + + * po/ca.po: update + + * po/ca.po: update. + + * mh.c: Don't forget deletions when a folder is changed. Ups. + +Fri Feb 1 17:23:20 2002 Thomas Roessler + + * smime_keys.pl: + Fix some possible leaks of the private key (encrypted, but + still...). (yow_security_holes.patch from Mike Schiraldi.) + +Thu Jan 31 22:05:58 2002 Thomas Roessler + + * doc/smime-notes.txt: + Document %C, and other updates. From Mike Schiraldi. + + * smime.c: Remove some unnecessary quotation marks. + + * contrib/smime.rc, init.h, smime.c, smime.h, smime_keys.pl: + Use mutt -Q from smime_keys. + + * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/ca.po, po/cs.po: + update-po + + * main.c: fix a string. + + * doc/mutt.man: Document -Q. + + * init.c, main.c, protos.h: + Add a -Q option to query configuration variables. This is needed to + avoid a separate mutt configuration parser in smime_keys.pl. + +Wed Jan 30 22:51:12 2002 Thomas Roessler + + * send.c: patch-1.3.27.me.postpone_date.2 + + * smime.c: Mike Schiraldi's daily S/MIME patch, as he puts it. + +Tue Jan 29 21:08:10 2002 Thomas Roessler + + * smime.c: Improved certificate handling. Suggested by Oliver Ehli, + implemented by Mike Schiraldi. + + * smime.c: + Properly handle certain signatures generated by Outlook. From Mike + Schiraldi. + + * parse.c: + Fix a segmentation fault in debugging code. From Daniel Eisenbud. + +Mon Jan 28 23:29:05 2002 Thomas Roessler + + * crypt.c, init.h, mutt.h: + Add a new crypt_timestamp option. The timestamps aren't really + needed any more. + + * commands.c, menu.c, mutt_curses.h, mutt.h, pattern.c: + Add ~V to match successfully verified messages. + + * contrib/smime.rc: Add a comment. From Mike Schiraldi. + + * init.h: Fix list-from documentation. From Michael Elkins. + + * doc/smime-notes.txt: + Add more information on S/MIME. Adapted from Oliver Ehli's notes by + Mike Schiraldi. + + * send.c: Avoid C99 comments. Noted by Vincent Lefevre. + + * po/ja.po, po/sv.po: updates + + * menu.c: Wide character fix from TAKIZAWA Takashi. + + * hook.c, Makefile.am: S/MIME-related bug fixes from Brendan Cully. + +Fri Jan 25 00:08:30 2002 Thomas Roessler + + * smime.c: ups + + * commands.c, recvattach.c, smime.c, smime.h: + More decryption key detection fixes. + + * commands.c, smime.c: + Make some prompts look nicer, and add sensible selection of the + decryption key. + +Thu Jan 24 23:53:19 2002 Thomas Roessler + + * commands.c, crypt.c, smime.c, smime.h: More S/MIME nit-picking. + + * mh.c: Fix. + + * mh.c: Still more code clean-up. + + * doc/smime-notes.txt: Update. + + * mx.c: little fix. + + * mh.c: Ups, don't use the wrong check function... + + * mh.c: Clean up the mh code, too. + + * mh.c: indentation + + * mh.c, mx.c, mx.h: + Maildir efficiency improvements, from Michael Elkins and Thomas + Roessler. + + * crypt.c, curs_lib.c, smime.c: S/MIME nits. + + * Attic/reap.pl: We don't need this any more. + + * imap/message.c, doc/Makefile.in, doc/smime-notes.txt, contrib/ca-bundle.crt, contrib/Makefile.in, contrib/smime.rc, attach.c, commands.c, compose.c, configure.in, copy.c, copy.h, crypt.c, crypt.h, curs_main.c, functions.h, globals.h, handler.c, hdrline.c, headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, main.c, Makefile.am, mutt.h, muttlib.c, mx.c, OPS.CRYPT, OPS.PGP, OPS.SMIME, pager.c, parse.c, pattern.c, pgp.c, pgp.h, pgplib.h, pop.c, postpone.c, protos.h, recvattach.c, send.c, sendlib.c, smime.c, smime.h, smime_keys.pl: + S/MIME support. From Oliver Ehli and Mike Schiraldi + . + + * po/pt_BR.po: update + + * doc/manual.sgml.head, doc/muttrc.man.head, attach.c, globals.h, init.h, protos.h, rfc1524.c, sendlib.c: + Introduce mime_lookup. From Brian Foley and Ulf Erikson. + + * po/ru.po: update + + * mh.c: Make reading maildirs more efficient. + + * VERSION: Pseudo-revision for mutt-1.5. + + * m4/glibc21.m4, m4/gssapi.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, m4/funcdecl.m4, m4/gettext.m4, m4/codeset.m4, m4/curslib.m4, m4/README, m4/.cvsignore, m4/Makefile.am.in: + version bump + + * po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/pl.po, po/pt_BR.po, po/ru.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/fr.po, po/gl.po, po/hu.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/ca.po, po/cs.po, po/.cvsignore, po/da.po, po/de.po, po/Makefile.in.in, po/POTFILES.in, imap/auth_anon.c, imap/auth.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth.h, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/BUGS, imap/command.c, imap/.cvsignore, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/Makefile.am, imap/message.c, imap/message.h, imap/README, imap/TODO, imap/utf7.c, imap/util.c: + more version bumps. + + * intl/bindtextdom.c, intl/cat-compat.c, intl/ChangeLog, intl/config.charset, intl/COPYING.LIB-2.1, intl/COPYING.LIB-2, intl/.cvsignore, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/Makefile.in, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, intl/VERSION, intl/xopen-msg.sed: + more version number updates. + + * doc/applying-patches.txt, doc/.cvsignore, doc/devel-notes.txt, doc/dotlock.man, doc/instdoc.sh.in, doc/Makefile.in, doc/manual.sgml.head, doc/manual.sgml.tail, doc/mbox.man, doc/muttbug.man, doc/mutt.man, doc/muttrc.man.head, doc/muttrc.man.tail, doc/patch-notes.txt, doc/PGP-Notes.txt: + more version number updates + + * contrib/iconv/iconv.aix-3.2.5.rc, contrib/iconv/iconv.aix-4.1.5.rc, contrib/iconv/iconv.aix-4.2.0.rc, contrib/iconv/iconv.aix-4.3.2.rc, contrib/iconv/iconv.freebsd-3.3.rc, contrib/iconv/iconv.glibc-2.1.3.rc, contrib/iconv/iconv.glibc-2.1.90.rc, contrib/iconv/iconv.hpux-10.01.rc, contrib/iconv/iconv.hpux-10.20.rc, contrib/iconv/iconv.hpux-11.00.rc, contrib/iconv/iconv.irix-6.5.rc, contrib/iconv/iconv.osf1-4.0a.rc, contrib/iconv/iconv.osf1-4.0d.rc, contrib/iconv/iconv.solaris-2.4.rc, contrib/iconv/iconv.solaris-2.5.1.rc, contrib/iconv/iconv.solaris-2.6-cjk.rc, contrib/iconv/iconv.solaris-2.6.rc, contrib/iconv/iconv.solaris-2.7.rc, contrib/iconv/make.sh, contrib/iconv/README, contrib/.cvsignore, contrib/gpg.rc, contrib/language50.txt, contrib/language.txt, contrib/Makefile.in, contrib/Mush.rc, contrib/patch.slang-1.2.2.keypad.1, contrib/pgp2.rc, contrib/pgp5.rc, contrib/pgp6.rc, contrib/Pine.rc, contrib/sample.mailcap, contrib/sample.muttrc, contrib/sample.muttrc-tlr, contrib/Tin.rc: + Bumping more version numbers. + + * snprintf.c, sort.c, sort.h, stamp-h.in, status.c, strcasecmp.c, strdup.c, system.c, thread.c, url.c, url.h, utf8.c, wcwidth.c, Attic/reap.pl, pgpkey.c, pgplib.c, pgplib.h, pgpmicalg.c, pgppacket.c, pgppacket.h, pgppubring.c, pop_auth.c, pop.c, pop.h, pop_lib.c, postpone.c, prepare, protos.h, query.c, recvattach.c, recvcmd.c, regex.c, reldate.h, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, score.c, send.c, sendlib.c, sha1.c, sha1.h, signal.c, md5c.c, md5.h, menu.c, mh.c, mime.h, mime.types, missing, mkinstalldirs, mkjtags.c, muttbug, muttbug.sh.in, mutt_curses.h, mutt.h, muttlib.c, mutt_menu.h, mutt_regex.h, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h, mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, mutt_tunnel.c, mutt_tunnel.h, mx.c, mx.h, pager.c, pager.h, parse.c, patchlist.sh, pattern.c, pgp.c, pgpewrap.c, pgp.h, pgpinvoke.c, editmsg.c, enter.c, extlib.c, filter.c, flags.c, from.c, functions.h, gen_defs, getdomain.c, gettext.c, globals.h, gnupgparse.c, handler.c, hash.c, hash.h, hdrline.c, headers.c, help.c, history.c, history.h, hook.c, init.c, init.h, install-sh, keymap.c, keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, mapping.h, mbox.c, mbyte.c, mbyte.h, attach.c, attach.h, base64.c, browser.c, browser.h, buffy.c, buffy.h, build-release, charset.c, charset.h, check_sec.sh, color.c, commands.c, complete.c, compose.c, config.guess, config.sub, configure.in, copy.c, copy.h, curs_lib.c, curs_main.c, date.c, depcomp, dotlock.c, dotlock.h, edit.c, acconfig.h, account.c, account.h, addrbook.c, alias.c, ascii.c, ascii.h, GPL, INSTALL, Makefile.am, Muttrc.head.in, NEWS, OPS, OPS.MIX, OPS.PGP, PATCHES, README, README.SECURITY, README.SSL, _regex.h, TODO, VERSION, ABOUT-NLS, BEWARE, ChangeLog, COPYRIGHT, .cvsignore: + Bumping version numbers to 3.0, for the new unstable branch. + + * send.c: Set default Fcc when resending a message. + + * po/ja.po: update + +Wed Jan 23 22:37:12 2002 Thomas Roessler + + * po/da.po, po/el.po, po/et.po, po/ko.po, po/pl.po: updates + + * po/uk.po, po/id.po: update + + * charset.c: Fix #999. A single missing comma. + +Tue Jan 22 12:12:45 2002 Thomas Roessler + + * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.27 + +Mon Jan 21 17:43:19 2002 Thomas Roessler + + * po/it.po: update + + * po/sv.po, po/de.po, po/eo.po: updates + +Mon Jan 21 17:43:19 2002 Thomas Roessler + + * po/it.po: update + + * po/sv.po, po/de.po, po/eo.po: updates + + * mutt_ssl.c: A fix from Ulf Erikson, which he says to fix bug #989. + +Fri Jan 18 11:44:54 2002 Thomas Roessler + + * po/zh_CN.po, po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.26 + +Thu Jan 17 22:41:45 2002 Thomas Roessler + + * configure.in: Use ncurses.h for configure tests, if present. + +Thu Jan 17 22:41:45 2002 Thomas Roessler + + * configure.in: Use ncurses.h for configure tests, if present. + +Wed Jan 16 20:44:49 2002 Thomas Roessler + + * config.guess, config.sub, missing, mkinstalldirs: + Updated auto* files. From Lars Hecking. + + * curs_main.c, protos.h, thread.c: patch-1.3.25-de-new_threads.1 + +Tue Jan 15 22:08:12 2002 Thomas Roessler + + * acconfig.h, configure.in: + Configure and config.h cleanup. From Lars Hecking. + + * handler.c: + Don't hallucinate a '\n' in the end of quoted-printable encoded + attachments. + + * po/fr.po: update. + + * flags.c, mh.c, mutt.h, mx.c: patch-1.3.25.tlr.maildir_trash.1 + + * po/ko.po: update + + * init.c: Avoid reading past the end of ta string when handling \ or ^ + sequences. From Michael Elkins. + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/ca.po, po/cs.po, po/da.po, pgpkey.c: + Shorten some messages. Noted by Jeremy Blosser. #978. + + * pattern.c: Fix an off-by-one error. + +Mon Jan 14 09:03:31 2002 Thomas Roessler + + * imap/imap.c: fix another case-sensitive comparison. + +Sun Jan 13 21:19:25 2002 Thomas Roessler + + * ascii.h: Fix the ascii_strncmp() macro. + + * imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/message.c, imap/util.c: + Parse IMAP responses locale- and case- insensitive. From Brendan + Cully. + + * muttlib.c, pager.c: + A different fix for the '\012' issue. Bug tracked down by Johannes + Geiger . + +Sat Jan 12 11:42:18 2002 Thomas Roessler + + * NEWS: More on ~=. + + * doc/manual.sgml.head, doc/muttrc.man.head, mutt.h, pattern.c: + Add a ~= pattern. From Frederic Duval. + + * doc/manual.sgml.head: Fix a typo, #971. + +Wed Jan 9 15:39:28 2002 Thomas Roessler + + * pgp.c: Fix #960. + +Tue Jan 8 13:06:21 2002 Thomas Roessler + + * mx.c: Try to fix #943. + + * INSTALL, NEWS: fix libiconv URL. #959. + +Mon Jan 7 19:10:51 2002 Thomas Roessler + + * po/ko.po: update + + * attach.c: Fix #951. + +Fri Jan 4 14:30:29 2002 Thomas Roessler + + * rfc822.c: Terminate the correct buffer. Noted by Durval Menezes + . (This bug shouldn't have any security + implications. ;-) + + * po/et.po, po/fr.po, po/pl.po, po/sv.po: updates. + +Thu Jan 3 20:57:20 2002 Thomas Roessler + + * mutt_ssl.c, mutt_ssl.h, mutt_ssl_nss.c, globals.h: + Move some globals where they belong. From Brendan Cully. + +Wed Jan 2 16:28:46 2002 Thomas Roessler + + * acconfig.h: Cleanup; from Lars Hecking. + + * mutt_ssl.c: Replace a few strncpy() calls by strfcpy(). + + * recvcmd.c: Bug fix. Problem noted by Vincent Lefevre's compiler. + + * muttlib.c: Fix the \012 bug. + +Tue Jan 1 20:18:41 2002 Thomas Roessler + + * po/zh_TW.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/ca.po, po/cs.po, po/Makefile.in.in, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.3.25 + + * intl/COPYING.LIB-2.1, intl/COPYING.LIB-2: + ups, these were missing from the CVS. + + * po/ca.po: update. + + * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION: + post-release commit for mutt-1.2.5.1. + + * rfc822.c: Fix a security problem. + +Tue Jan 1 20:07:35 2002 Thomas Roessler + + * intl/COPYING.LIB-2.1, intl/COPYING.LIB-2: + ups, these were missing from the CVS. + + * po/ca.po: update. + + * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION: + post-release commit for mutt-1.2.5.1. + + * rfc822.c: Fix a security problem. + +Tue Jan 1 20:05:05 2002 Thomas Roessler + + * po/ca.po: update. + + * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION: + post-release commit for mutt-1.2.5.1. + + * rfc822.c: Fix a security problem. + +Tue Jan 1 20:02:10 2002 Thomas Roessler + + * po/Attic/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/it.po, po/gl.po, po/id.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/de.po, po/cs.po, po/da.po, ChangeLog, rfc822.c, VERSION: + post-release commit for mutt-1.2.5.1. + + * rfc822.c: Fix a security problem. + +Fri Dec 28 17:19:00 2001 Thomas Roessler + + * protos.h, recvcmd.c, send.c: + Make sure References and In-Reply-To headers are generated properly + when the user replies to one or more message-type attachments. + +Wed Dec 26 19:24:46 2001 Thomas Roessler + + * imap/imap.c: Possible fix for #905. From Daniel Eisenbud. + +Fri Dec 21 00:22:12 2001 Thomas Roessler + + * pager.c: Fix #929. + +Tue Dec 18 15:13:18 2001 Thomas Roessler + + * imap/imap.c, imap/imap.h, browser.c: + Fix from #918. From . + + * po/Makefile.in.in, m4/gettext.m4, m4/iconv.m4, m4/lcmessage.m4, m4/progtest.m4, ABOUT-NLS, intl/bindtextdom.c, intl/ChangeLog, intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/Makefile.in, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/textdomain.c, intl/VERSION: + Updating to gettext-0.10.40. + +Mon Dec 17 10:08:18 2001 Thomas Roessler + + * edit.c: Fix a memory allocation bug. #917. + + * thread.c, hdrline.c: Another threading update. + +Thu Dec 13 12:10:59 2001 Thomas Roessler + + * menu.c, mutt.h, sort.c, thread.c: + Threading updates, from Daniel Eisenbud. + + * pager.c: compile fix. + +Tue Dec 11 23:30:59 2001 Thomas Roessler + + * doc/muttrc.man.head: Typo, #911. + + * po/it.po: update + + * contrib/gpg.rc: Remove an unnecessary \-quoting. + + * init.c, pager.c: Add a missing else. + + * contrib/gpg.rc: Use gettext to determine the good signature pattern. + + * init.c: Make "`...`" work as expected. + + * po/it.po: update. + +Mon Dec 10 13:12:41 2001 Thomas Roessler + + * query.c: Fix #910. + + * init.h: Change the default for $pgp_replyencrypt to "yes". + + * po/ja.po, po/pl.po: updates. + +Sun Dec 9 09:12:08 2001 Thomas Roessler + + * po/ca.po, configure.in: + Add a Catalan translation. From Ivan Vilata i Balaguer + . + +Tue Dec 4 10:28:22 2001 Thomas Roessler + + * po/ru.po: update + +Mon Dec 3 18:36:09 2001 Thomas Roessler + + * po/da.po, po/de.po: update. + + * mx.c: + Try to detect write() errors by calling fsync() after fflush(). May + fix #895. + +Thu Nov 29 09:43:41 2001 Thomas Roessler + + * po/zh_TW.po, po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.24 + +Wed Nov 28 10:30:36 2001 Thomas Roessler + + * po/id.po: update + +Wed Nov 28 10:30:36 2001 Thomas Roessler + + * po/id.po: update + +Mon Nov 26 19:16:52 2001 Thomas Roessler + + * PATCHES: PATCHES should be _empty_ in the CVS version. Ups. + + * mbyte.c, PATCHES: + patch-1.3.23.2.tt.wcwidth_ja.1. Fix wcwidth_ja(), from Takizawa + Takashi . + + * handler.c, muttlib.c: + patch-1.3.23.2.bj.state_attach_puts.1, from Byrial Jensen. This + patch is supposed to make one message more friendly to translators. + + * po/et.po, po/ja.po, po/pl.po, po/ru.po, po/da.po, po/de.po: updates. + +Wed Nov 21 13:58:42 2001 Thomas Roessler + + * handler.c: Use $wrapmargin in the format=flowed handler, too. + + * pager.c, globals.h, init.h: + Add a $wrapmargin configuration variable to fine-tune + +Mon Nov 19 10:41:32 2001 Thomas Roessler + + * hash.c: Fix #868, #876. Work-around from Len Lattanzi + . + + * hdrline.c, protos.h, thread.c: + Fix mutt_messages_in_thread(). From Daniel Eisenbud. + (patch-1.3.23.2-de-new_threads.2-3.gz). + +Thu Nov 15 18:53:23 2001 Thomas Roessler + + * remailer.c: + Should be slightly better than a mixmaster patch suggested by Stefan + Karrmann . (UNTESTED!) + +Mon Nov 12 09:53:54 2001 Thomas Roessler + + * sort.c, thread.c: patch-1.3.23.2-de-new_threads.2 + +Sat Nov 10 08:14:52 2001 Thomas Roessler + + * po/eo.po, po/fr.po: update + +Fri Nov 9 09:28:55 2001 Thomas Roessler + + * mh.c: Add some NONULL's (#863) + + * Makefile.am: Distribute patchlist.sh. Ups. + +Thu Nov 8 22:42:45 2001 Thomas Roessler + + * po/uk.po, po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/gl.po, po/hu.po, po/et.po, po/fr.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.23.2 + + * pager.c, init.h, mutt.h: + Add an $allow_ansi option. Suggested and (mostly) implemented by + Mike Schiraldi. + +Thu Nov 8 17:35:14 2001 Thomas Roessler + + * pager.c, init.h, mutt.h: + Add an $allow_ansi option. Suggested and (mostly) implemented by + Mike Schiraldi. + + * Makefile.am: Don't depend on GNU make. Noted by Bob Bell. + + * pgp.c: + Fix some messages, so the color marker is actually in the beginning + of a new line. + + * globals.h, handler.c, init.c, mutt.h, muttlib.c, pager.c, pgp.c: + somewhat cleaner in-band-signalling between the handlers and the + pager. In particular, it's more difficult now to get fake PGP and + other mutt-generated "[-- " messages colored. + + * commands.c, curs_main.c, init.c, init.h, mutt.h, sort.c, thread.c: + patch-1.3.23.1-de-new_threads.3-4 + + * handler.c: 2.47 introduced another bug. I should go to bed now. + + * handler.c: + Replace a ridiculous for loop by a proper calculation. Ahem. + + * handler.c, pager.c: + Use a slightly different reset sequence for the format=flowed hack, + and don't send any such sequence when we aren't in the internal pager. + + * pager.c: Trying to fix #738. + +Wed Nov 7 22:25:09 2001 Thomas Roessler + + * handler.c: + Fix #860. Noted: The format=flowed code is not yet utf-8 aware. + + * addrbook.c: Fix #858. + + * doc/patch-notes.txt, main.c, Makefile.am, muttlib.c, patchlist.sh, protos.h, sendlib.c: + Implement the patchlist scheme instead of version number munging. + + * complete.c: Fix 706, 853. + + * commands.c, init.h, mutt.h, thread.c: + patch-1.3.23.1-de-new_threads.2-3 + +Tue Nov 6 20:38:17 2001 Thomas Roessler + + * mutt.h, sort.c, sort.h, thread.c, menu.c: + [patch.1.3.23.1.de.new_threads.2] Daniel Eisenbud's redone + threading code, version two. + + * doc/patch-notes.txt: fix a typo. + + * PATCHES: uuups, there was a "test" left over. + + * doc/PGP-Notes.txt: + Some part of this documentation was severely outdated. + + * doc/Makefile.in, doc/patch-notes.txt, configure.in, main.c, Makefile.am, muttlib.c, PATCHES, protos.h, sendlib.c: + Add and document a new mechanism for displaying patches in running + mutts' output. + + * send.c: + Indentation fixing while staring at the code affected by #857. No + fix for the crash, though. + + * doc/manual.sgml.head, doc/muttrc.man.head, alias.c, init.c: + Fix an addressbook bug, and introduce "unalias *". From "g.c.w. de + bruijn" . + +Mon Nov 5 21:38:18 2001 Thomas Roessler + + * imap/browse.c, imap/imap.c, imap/util.c, mutt_ssl.c, mutt_ssl_nss.c, pop.c, thread.c: + Missing gettext calls, noted by Byrial Jensen. + + * commands.c: + Make the save-copy prompt more translator-friendly. from Byrial + Jensen. + + * po/da.po, po/de.po, po/eo.po, po/fr.po, po/ja.po, po/pl.po: updates + + * mh.c: + Fix a segmentation fault which occurs when mutt's get-mail POP mode + is used with a maildir spool folder. Noted by Frédéric L. W. + Meunier <0@pervalidus.net>. + + * mutt_socket.c, pop.c: + Vsevolod Volkov's fix for #851, and a related bug. + + * headers.c, muttlib.c, protos.h, send.c: + Byrial Jensen's mtime hack is needed at more than one place. Noted + by Manoj Kasichainula. + +Wed Oct 31 09:38:07 2001 Thomas Roessler + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.23.1 + + * imap/message.c, commands.c, curs_main.c, flags.c, hdrline.c, init.h, mbox.c, menu.c, mh.c, mutt.h, mx.c, mx.h, parse.c, pop.c, postpone.c, protos.h, sort.c, sort.h, thread.c: + Advanced threading, v 5.1. From Daniel Eisenbud + . + + * pgpewrap.c: + Add magic comment so we can use traditional malloc() in this program. + +Wed Oct 31 09:20:40 2001 Thomas Roessler + + * imap/message.c, commands.c, curs_main.c, flags.c, hdrline.c, init.h, mbox.c, menu.c, mh.c, mutt.h, mx.c, mx.h, parse.c, pop.c, postpone.c, protos.h, sort.c, sort.h, thread.c: + Advanced threading, v 5.1. From Daniel Eisenbud + . + + * pgpewrap.c: + Add magic comment so we can use traditional malloc() in this program. + +Tue Oct 30 22:43:23 2001 Thomas Roessler + + * init.h: .mh_sequences fix, from lorenzo@cisco.com. + + * mutt_socket.c, mutt_ssl.c: TLS connection reuse. From Brendan Cully. + +Mon Oct 29 23:21:48 2001 Thomas Roessler + + * pager.c: + Fix two places which _may_ look like buffer overflows, but aren't. + + * url.c: Fix #843. + + * doc/manual.sgml.head: + Make the documentation of toggle-unlink more precise - someone on + comp.mail.mutt got confused by this. + +Sun Oct 28 19:46:43 2001 Thomas Roessler + + * imap/browse.c, imap/imap.c: Fix 839 + + * po/fr.po: update + + * sendlib.c: Another aesthetic message-id change. + + * sendlib.c: GMT's too clumsy. Just take G. + + * sendlib.c: + Use GMT for message-IDs. Note: The addition of the constant string + "GMT" is so intended to avoid the production of duplicate + message-IDs when mutts running in time zones ahead GMT are updated. + + * po/ru.po: update. + + * url.c: Another bug related to #837. + + * imap/util.c: + Fix a problem related to #837 (the bug isn't entirely close, though). + +Fri Oct 26 23:53:29 2001 Thomas Roessler + + * doc/manual.sgml.head: + Point to the openProjects.net IRC channel instead of dal.net. + +Thu Oct 25 07:54:35 2001 Thomas Roessler + + * pgp.c: + Handle clearsigned messages gracefully even when pgp_verify_sig is + set and pgp_decode_command is unset. + +Wed Oct 24 11:08:22 2001 Thomas Roessler + + * complete.c: Suspected fix for #837. + +Mon Oct 22 09:28:26 2001 Thomas Roessler + + * imap/util.c, globals.h, init.h: + Make IMAP keepalive configurable. From Brendan Cully. + +Wed Oct 17 17:03:19 2001 Thomas Roessler + + * curs_main.c: Fix #829. + + * sendlib.c: + Fix #828: Sendmail is now invoked with stdout and stderr redirected + to /dev/null. Apparently, sendmail 8.12.1 doesn't like to be + invoked with stderr and stdout closed. + + * curs_main.c: + Fix CURHDR confusion. Mutt should compile now. (Sorry for not + committing this earlier.) + +Tue Oct 16 14:29:27 2001 Thomas Roessler + + * addrbook.c, keymap.c: + Address book nit fix from geerd.debruijn@nl.thalesgroup.com. + + * po/ja.po, po/it.po: update + +Mon Oct 15 20:18:32 2001 Thomas Roessler + + * rfc2047.c: Close #821. Fix provided by Edmund. + + * curs_main.c: AIX portability patch. Suggested by Jan Chrillesen + . + + * doc/manual.sgml.tail: Fixing a nit, From David Ellement. + +Fri Oct 12 09:03:26 2001 Thomas Roessler + + * po/fr.po: update + +Thu Oct 11 20:08:44 2001 Thomas Roessler + + * imap/message.c: + Small fix from Edmund GRIMLEY EVANS . + + * compose.c: Little fix from sroberts@certicom.com. + + * po/eo.po: update + + * pgpewrap.c: Add public domain notice. + + * Attic/pgpewrap, configure.in, Makefile.am, pgpewrap.c: + Include C version of pgpewrap, by Wessel Dankers . + + * po/da.po: update + + * compose.c, editmsg.c, sendlib.c: + Unify "Can't stat" messages. Suggested by Byrial. + +Wed Oct 10 23:37:06 2001 Thomas Roessler + + * mh.c: Fix #560. + + * pager.c: + Fix minor snafu in Vsevolod's patch about important flags for POP + folders. + + * main.c: + Mess around with signal handlers. Allegedly, this helps to get + things working with Solaris 8. See #455. + + * imap/message.c: Try to fix #302. + + * curs_main.c, pager.c: + Don't allow setting the "important" flag when message resides on a + POP server. + + * curs_lib.c: + Rename pad_char to m_pad_char - AIX curses have a macro called + pad_char. Noted by Jan Chrillesen . + + * pager.c: Patch from #272 (from acli@mingpaoxpress.com). + + * browser.c: Fix #813. + + * mx.c: Another consistency fix for maildir_trash. + + * mh.c, mx.c: + Experimental patch to make maildir_trash handling more consistent. + + * buffy.c: + maildir buffy: Don't consider "trashed" new messages new. Fixes #412. + + * main.c: Include platform information with mutt -v output. + + * muttbug.sh.in: + Include some information about the compiler and compiler flags used + with bug reports. + + * po/pl.po: update + + * po/fr.po, po/de.po: updates. + +Tue Oct 9 09:29:55 2001 Thomas Roessler + + * getdomain.c: A different fix for #767. + + * po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/ru.po, po/sk.po, po/sv.po, po/pt_BR.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.3.23 + +Sun Oct 7 06:43:52 2001 Thomas Roessler + + * doc/manual.sgml.head: We do update .mh_sequences files now. + +Sun Oct 7 06:43:52 2001 Thomas Roessler + + * doc/manual.sgml.head: We do update .mh_sequences files now. + +Sat Oct 6 09:31:44 2001 Thomas Roessler + + * doc/manual.sgml.head: + Documentation for check-traditional-pgp and for edit-type when used + in read mode. + +Tue Oct 2 22:20:03 2001 Thomas Roessler + + * enter.c: Fix #801. + +Mon Oct 1 09:58:49 2001 Thomas Roessler + + * mh.c: Create mh_sequences files when they don't exist. Suggested by + TAKIZAWA Takashi . + +Fri Sep 28 08:38:44 2001 Thomas Roessler + + * charset.c: More character set aliases, from Ionel Mugurel Ciobica + . + + * pager.c: Color fix from Brandon Long. Welcome back! + +Wed Sep 26 10:56:52 2001 Thomas Roessler + + * mh.c: OK, I couldn't resist. ;-) + + Depending on the user's usage patterns and configuration, there may + be a strong bias in maildir files moving either within the new or to + the cur subfolder. This patch adds hit counters for each of these + directories. Mutt will then look first into the directory + encountered more frequently in the past. This should help to reduce + the cost of chasing messages a bit, and isn't too costly itself. + + (Another possibility for optimization may be to actually base the + prediction on the configuration and on the message flags as we know + them - in particular, the mark_old and move options could have some + effect here. Thinking about message flags, one could even replace + the simple heuristic currently implemented by a matrix recording hit + counters depending on flags. But then again, it's all just playing + around, since this function will be invoked only rarely. ;-) + + * attach.c, commands.c, copy.c, copy.h, handler.c, mutt.h, recvattach.c: + Fix inconsistencies between printing and displaying of + message/rfc822 body parts. + + * attach.c: Fix attachment printing. + + * mh.c, mx.c, mx.h: + Search for messages which may have been moving under our feet in + maildir folders. Suggested by Bjoern Jacke. + + * contrib/gpg.rc: + Remove --comment '' - it breaks pgpewrap and isn't necessary with + more recent gpg versions. + +Fri Sep 21 09:35:18 2001 Thomas Roessler + + * po/pl.po: update + +Mon Sep 17 10:19:10 2001 Thomas Roessler + + * send.c: fix #737. + +Fri Sep 14 08:19:30 2001 Thomas Roessler + + * po/id.po: update + +Tue Sep 11 12:24:32 2001 Thomas Roessler + + * addrbook.c, alias.c, init.c, menu.c, mutt.h, query.c: + More addressbook fixes. + + * addrbook.c, attach.h, browser.c, functions.h, init.c, init.h, keymap.c, keymap.h, menu.c, mutt.h, mutt_menu.h, recvattach.c: + The addressbook used to crash when someone issued the alias and + unalias commands while on that menu. This patch has a basic fix for + this behaviour, and adds delete and undelete functions to this menu. + While I'm on it, I've also made sure that "apply-tag" untags + everything on all menus. + + The original crash was noted by Oliver Kauss . + +Sat Sep 8 14:23:05 2001 Thomas Roessler + + * init.c: + Thomas Guettler reports a segfault when + you search for "~b \\${". + + * po/zh_TW.po: update + +Thu Sep 6 12:10:10 2001 Thomas Roessler + + * po/pl.po: update + + * curs_main.c: + Try to fix a boundary condition: Assume that you are in a limited + view which includes the folder's last message. Display that + message. Wait until a new message is added to the current folder + which does NOT match the limit pattern. Press tab. Mutt would get + confused. I think that this patch fixes the problem (but I'm not + entirely sure). + +Wed Sep 5 12:09:44 2001 Thomas Roessler + + * sendlib.c: BSD/OS portability fix from Edmund Grimley Evans. #758. + + * imap/imap.c, init.h: + patch-1.3.22.1.remove_warnings.awn.1, from Andrew W. Nosenko. + +Tue Sep 4 19:12:23 2001 Thomas Roessler + + * po/da.po: update + + * imap/util.c, muttlib.c, mutt_socket.c, pop.c, url.c, url.h: + patch-bac.canonifypath-4. + + The attached patch reverts the IMAP canonification patch I reverted + a version ago (sorry for being so wishy-washy). This time I put in + some code to preserve IMAP URL passwords in the initial pass, so + people who like to use those sorts of URLs still can. That was the + only reason I had reverted the patch before. + + (From Brendan Cully.) + + * po/ja.po, po/ru.po, po/uk.po: updates + + * mutt_tunnel.c: patch-bac.tunnelreopen-1 from Brendan Cully. + +Mon Sep 3 13:59:37 2001 Thomas Roessler + + * curs_main.c, thread.c: + Don't lose track of the current message when collapsing and changing + sort modes wildly. Noted by David T-G. + + * globals.h, init.h, mh.c, NEWS: Make MH sequences variable. + + * po/de.po: update + + * sendlib.c: Don't try to attach non-regular files. #754. + +Fri Aug 31 09:21:55 2001 Thomas Roessler + + * NEWS: Mention mailto URL support. + + * imap/imap.c, imap/util.c, imap/command.c: + Fix some memory leaks. From Pawel Salek, by way of Brendan Cully. + +Thu Aug 30 21:30:39 2001 Thomas Roessler + + * po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/pt_BR.po, po/ru.po, po/sk.po, po/lt.po, po/nl.po, po/pl.po, po/it.po, po/ja.po, po/ko.po, po/gl.po, po/hu.po, po/id.po, po/et.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/da.po, po/de.po, ChangeLog, doc/Makefile.in, po/cs.po, VERSION: + automatic post-release commit for mutt-1.3.22.1 + + * po/uk.po, po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/pt_BR.po, po/ru.po, po/pl.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/hu.po, po/id.po, po/gl.po, po/et.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/da.po, ChangeLog, po/cs.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.22 + + * contrib/sample.muttrc-tlr: update + + * build-release: more preparations for stabilizing 1.3. + + * Attic/README.UPGRADE, Makefile.am: README.UPGRADE is quite outdated. + + * doc/muttrc.man.head, NEWS: documentation updates. + +Thu Aug 30 21:04:34 2001 Thomas Roessler + + * po/uk.po, po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/pt_BR.po, po/ru.po, po/pl.po, po/lt.po, po/nl.po, po/it.po, po/ja.po, po/ko.po, po/hu.po, po/id.po, po/gl.po, po/et.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/da.po, ChangeLog, po/cs.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.22 + +Thu Aug 30 21:00:51 2001 Thomas Roessler + + * contrib/sample.muttrc-tlr: update + + * build-release: more preparations for stabilizing 1.3. + + * Attic/README.UPGRADE, Makefile.am: README.UPGRADE is quite outdated. + + * doc/muttrc.man.head, NEWS: documentation updates. + + * doc/mutt.man: mention ~/.mutt/muttrc + + * curs_main.c: Fix #750 / deb#108628. + + * pop_auth.c: patch-20010829.vvv.pop_auth + +Tue Aug 28 20:39:04 2001 Thomas Roessler + + * handler.c: + Don't do character conversion when we call an external handler for a + text type. Assume that the conversion is done there. + + * po/da.po: update + +Fri Aug 24 08:07:42 2001 Thomas Roessler + + * sendlib.c: + Don't use the 7bit encoding for non-text MIME types. This may + produce slightly longer messages, but it helps to avoid corruption + with binary attachments which look like text, but aren't. + + * po/de.po: update + + * sendlib.c: + More liberally apply MIME encodings to non-text body parts when + there's a ^From_ line. + +Thu Aug 23 19:10:04 2001 Thomas Roessler + + * po/eo.po, po/sv.po: update + +Wed Aug 22 14:41:32 2001 Thomas Roessler + + * po/et.po, po/fr.po: update + + * pop_auth.c: + This should fix the warnings which A. Nosenko found. (And may + introduce new ones about unused variables.) + +Tue Aug 21 21:54:33 2001 Thomas Roessler + + * po/zh_CN.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/hu.po, po/id.po, po/it.po, po/fr.po, po/gl.po, po/et.po, po/el.po, po/eo.po, po/es.po, po/da.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.21 + +Mon Aug 20 12:11:28 2001 Thomas Roessler + + * mx.c: Check for .mew-cache in MH folders. + +Mon Aug 20 12:11:28 2001 Thomas Roessler + + * mx.c: Check for .mew-cache in MH folders. + +Thu Aug 16 12:42:30 2001 Thomas Roessler + + * sendlib.c: + Mutt's detection of overly long lines would fail with text files + when the long line is the last one, and is not finished by a newline + character. This can, for instance, happen when you send out + macintosh-generated HTML files. + + (And, apparently, we hit some boundary somewhere in the PGP code + with that - I had some truncated attachments today.) + +Mon Aug 13 16:12:08 2001 Thomas Roessler + + * pop.c: fix content-length headers. + + * mh.c: + Fix treatment of maildir folders. We partially used mh routines for + these, introducing absurdities such as .mh_sequences files. + +Sun Aug 12 10:15:15 2001 Thomas Roessler + + * init.c, init.h: + Fix the "strange e-mail header" bug. It was an uninitialized + buffer. Thanks to Brendan Cully for figuring it out. + +Sat Aug 11 17:39:13 2001 Thomas Roessler + + * muttlib.c: + Undo an earlier change to _mutt_expand_path, which seems to have + caused problems. From Brendan Cully. + + * config.guess, config.sub: Update. Thanks, Brendan! + +Thu Aug 9 11:28:09 2001 Thomas Roessler + + * po/uk.po, po/ja.po: update + +Wed Aug 8 19:27:50 2001 Thomas Roessler + + * doc/manual.sgml.tail: Adding someone I forgot. + +Tue Aug 7 12:45:51 2001 Thomas Roessler + + * doc/manual.sgml.tail: + Update credits. I'm sure I forgot some people. If you feel you're + one of them, please drop me a line! + +Mon Aug 6 17:49:06 2001 Thomas Roessler + + * curs_lib.c: + Here's a fix to allow (n)curses versions to work with some terminfo + entries where (for whatever reason), someone specified cvvis but not + cnorm. From a report/discussion with Mario Vanoni + . (From Thomas Dickey.) + + * buffy.c: Another little MH buffy bug. From Len Lattanzi + . + +Fri Aug 3 16:55:41 2001 Thomas Roessler + + * mh.c: fix an mh_buffy segfault. + + * configure.in: + Don't default to "no" when we can't find sendmail. #713; Brendan + Cully. + + * buffy.c, mh.c, mx.h: MH buffy. + +Thu Aug 2 22:59:16 2001 Thomas Roessler + + * contrib/gpg.rc: Don't emit a comment armor header at all. + + * mh.c: + Update mh_sequences when messages are deleted. Note: Currently, we + only clean up our own sequences, and leave others' sequences alone. + Should possibly be fixed. + + * mh.c: Fix #720. + + * imap/browse.c: + Namespace fix. From Pawel Slawek (or Peter Bloomfield?); forwarded + by Brendan Cully. + +Wed Aug 1 22:40:29 2001 Thomas Roessler + + * po/eo.po: update + + * po/fr.po, po/ru.po, po/de.po: updates. + + * gnupgparse.c, pgpkey.c: + Signed fixes. Noted by Vincent Lefevre's compiler. + +Tue Jul 31 12:28:19 2001 Thomas Roessler + + * mh.c: More MH fixes. + + * mh.c: fix a small typo + + * mailbox.h, mh.c, mx.c: Add mh_sequences support. I hope this works. + +Sun Jul 29 09:48:04 2001 Thomas Roessler + + * contrib/gpg.rc: + Fix the comment header, and generally be less verbose. + +Thu Jul 26 17:42:48 2001 Thomas Roessler + + * imap/util.c: patch-bac.imapnextword-1. From Brendan Cully. + + * pgpkey.c: Don't confuse validity and trust when it comes to PGP keys. + + * thread.c: O(n log (n)) sorting from Jan Kratochvil . + +Wed Jul 25 19:51:58 2001 Thomas Roessler + + * po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/cs.po: + update-po after gettext update. + +Tue Jul 24 21:29:47 2001 Thomas Roessler + + * po/zh_CN.po, po/zh_TW.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ru.po, po/pl.po, po/pt_BR.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/gl.po, po/hu.po, po/id.po, po/it.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/et.po, po/fr.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.20 + + * imap/imap.c: Avoid mail loss with IMAP. From Brendan Cully. + +Tue Jul 24 21:26:03 2001 Thomas Roessler + + * imap/imap.c: Avoid mail loss with IMAP. From Brendan Cully. + + * imap/command.c: patch-bac.capability-20010724.1. From Brendan Cully. + + * mbox.c: + Add a status message, so "Writing messages" doesn't stay on screen + forever. + + * imap/imap.c: + The attached patch fixes a couple bugs I introduced recently when + working around the buggy but firmly entrenched UW-IMAP 4.7 server. + These resulted in additional overhead when synchronising mailboxes + and occasional problems opening empty mailboxes. + + From: Brendan Cully + +Thu Jul 19 14:51:14 2001 Thomas Roessler + + * curs_main.c: + Redraw when an alias is created - the user may have assigned a + different realname. + + * COPYRIGHT: update + +Wed Jul 11 07:19:45 2001 Thomas Roessler + + * INSTALL: + Replace mutt-dev@cs.hmc.edu by mutt-dev@mutt.org. Noted by "Mark E. + Mallett" . + +Mon Jul 9 20:54:34 2001 Thomas Roessler + + * acconfig.h, configure.in, Makefile.am: + locale-related fix from Lars Hecking. + +Wed Jul 4 07:35:20 2001 Thomas Roessler + + * imap/util.c: Fix a nit. From "Andrew W. Nosenko" + +Tue Jul 3 19:32:12 2001 Thomas Roessler + + * m4/iconv.m4, configure.in: + Iconv-related cleanup. From Brendan Cully. + + * init.c, muttlib.c, protos.h: + Unified buffer handling, from Brendan Cully. + + * pgppubring.c: Don't sign-extend chars. + + * pgp.c: Fixing a PGP signature reporting bug; adding debugging output. + + * mutt_socket.c: Don't fcntl -1. From Brendan. + + * imap/imap.c, imap/imap_private.h, imap/message.c, muttlib.c, protos.h: + Fix #677. From Brendan Cully. + +Mon Jul 2 20:28:32 2001 Thomas Roessler + + * query.c: Fix a minor nit with the external query interface. + + * doc/manual.sgml.head: documentation from Brendan Cully. + +Fri Jun 29 10:06:16 2001 Thomas Roessler + + * imap/imap.c, hook.c, init.h, mutt.h, mutt_socket.c, protos.h: + patch-bac-vvvacounthook-20010628.1 + +Thu Jun 28 20:34:05 2001 Thomas Roessler + + * query.c: Query patch from Olivier Chapuis . + +Wed Jun 27 16:08:06 2001 Thomas Roessler + + * po/ru.po: update. + + * init.h, mutt.h, mx.c: patch-1.3.19i.rs.keep_flagged + +Tue Jun 26 10:26:54 2001 Thomas Roessler + + * pgppubring.c: fixes. + + * pgplib.h, pgppubring.c: Fix handling of revocation certificates. + + * pgppubring.c: Also dump revocations. + + * pgplib.c, pgplib.h, pgppubring.c: + Add a very simple signature-dumping mode to pgpring. (Not needed + for mutt.) + +Tue Jun 19 08:39:17 2001 Thomas Roessler + + * po/ja.po: update + + * imap/imap.c, imap/message.c: + IMAP error checking for bug #662. From Brendan Cully. + +Mon Jun 18 17:29:55 2001 Thomas Roessler + + * po/Attic/zh_CN.GB2312.po, po/Attic/zh_TW.Big5.po, po/zh_CN.po, po/zh_TW.po, configure.in: + Renaming the Chinese translations. + + * po/eo.po: update + + * globals.h, init.h, mutt.h, pop_auth.c, pop.h: + The attached patch adds two variables: $pop_authenticators and + $pop_auth_try_all. + + From Vsevolod Volkov. + +Thu Jun 14 13:29:06 2001 Thomas Roessler + + * po/pl.po: update + +Wed Jun 13 08:29:16 2001 Thomas Roessler + + * m4/gettext.m4, m4/glibc21.m4: Avoid more m4 macro collisions. + + * imap/auth_sasl.c, mutt_sasl.c, mutt_sasl.h, pop_auth.c: + An updated version of the previous patch. From Brendan. + + * pop_auth.c: + This patch closes a ridiculous bug where the SASL library could be + used without being initialised. I don't understand why lots of people + weren't having problems, unless no one who uses SASL uses POP :) + + closes 549 + + From Brendan Cully. + + * po/cs.po: update + +Tue Jun 12 12:45:29 2001 Thomas Roessler + + * m4/gettext.m4, m4/progtest.m4, configure.in: + gettext-related fixes. Most of this may just be temporary if we + decide to get rid of our own gettext.m4. + + * m4/gettext.m4: Fix comments. + + * po/tr.po: update + +Mon Jun 11 18:32:05 2001 Thomas Roessler + + * imap/auth.c, imap/imap.c, doc/manual.sgml.head: + patch-bac.flags-20010611.1 + + * po/es.po, po/da.po: update. + + * doc/manual.sgml.head: Updates from Byrial Jensen. + + * keymap.c: command/function cosmetics from Byrial Jensen. + + * po/de.po, po/et.po, po/sv.po: update. + + * doc/muttbug.man, doc/mutt.man, init.c, init.h: + Use the EMAIL environment variable as the default for $from. + + * po/eo.po, po/el.po: update. + +Thu Jun 7 23:15:53 2001 Thomas Roessler + + * po/fr.po, po/id.po: updates for 1.3.19. + + * po/Attic/zh_TW.Big5.po: A fixed version from EGE. + + * build-release: Don't try to upload to sigtrap.guug.de any more. + + * po/Attic/zh_CN.GB2312.po, po/Attic/zh_TW.Big5.po, po/tr.po, po/uk.po, po/ru.po, po/sk.po, po/sv.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/hu.po, po/id.po, po/it.po, po/fr.po, po/gl.po, po/es.po, po/et.po, po/el.po, po/eo.po, po/cs.po, po/da.po, po/de.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.19 + + * check_sec.sh: Don't check in intl/ + + * m4/codeset.m4, m4/glibc21.m4, m4/iconv.m4: + More from the gettext munster patch from E.G.E. + + * po/Attic/zh_TW.Big5.po, m4/gettext.m4, m4/lcmessage.m4, m4/progtest.m4: + Gettext update. (From E.G.E., of course.) + + * intl/bindtextdom.c, intl/cat-compat.c, intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, intl/locale.alias, intl/localealias.c, intl/Makefile.in, intl/ngettext.c, intl/plural.c, intl/plural.y, intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, intl/textdomain.c, intl/VERSION, intl/xopen-msg.sed, intl/ChangeLog, intl/.cvsignore, acconfig.h, configure.in, gettext.c, lib.h, Makefile.am, mbyte.c: + Gettext update. + + * po/ru.po: update. + + * configure.in: ALL_LINGUAS. I forgot to do this earlier today. + + * NEWS: Documentation update from Brendan Cully. + +Thu Jun 7 20:09:54 2001 Thomas Roessler + + * check_sec.sh: Don't check in intl/ + + * m4/codeset.m4, m4/glibc21.m4, m4/iconv.m4: + More from the gettext munster patch from E.G.E. + + * po/zh_TW.Big5.po, m4/gettext.m4, m4/lcmessage.m4, + m4/progtest.m4: Gettext update. (From E.G.E., of course.) + + * intl/bindtextdom.c, intl/cat-compat.c, + intl/config.charset, intl/dcgettext.c, intl/dcigettext.c, + intl/dcngettext.c, intl/dgettext.c, intl/dngettext.c, + intl/explodename.c, intl/finddomain.c, intl/gettext.c, + intl/gettext.h, intl/gettextP.h, intl/hash-string.h, + intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, + intl/libgnuintl.h, intl/libintl.glibc, intl/linux-msg.sed, + intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c, + intl/locale.alias, intl/localealias.c, intl/Makefile.in, + intl/ngettext.c, intl/plural.c, intl/plural.y, + intl/po2tbl.sed.in, intl/ref-add.sin, intl/ref-del.sin, + intl/textdomain.c, intl/VERSION, intl/xopen-msg.sed, + intl/ChangeLog, intl/.cvsignore, acconfig.h, configure.in, + gettext.c, lib.h, Makefile.am, mbyte.c: Gettext update. + + * po/ru.po: update. + + * configure.in: ALL_LINGUAS. I forgot to do this earlier today. + + * NEWS: Documentation update from Brendan Cully. + + * po/sv.po, po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po: + Updating the gl translation, another update-po run. + + * po/zh_TW.Big5.po: + Changed to utf-8 in order to avoid problems with recent gettext + versions. Thanks to EGE! + + (BTW, the file name is lying now. Is this a problem?) + + * po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/pt_BR.po, po/pl.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/eo.po, po/es.po, po/et.po, po/fr.po, po/gl.po, po/hu.po, po/id.po, po/it.po, po/cs.po, po/da.po, po/de.po, po/el.po: + update-po; adding an Estonian translation. + + * po/it.po: Fix a small bug. + + * imap/message.c: + This patch ensures IMAP FLAGS aren't parsed twice when fetching the + full message body. It really only amounts to a cosmetic error, but + may cause spurious "Mailbox externally modified" messages. + + From Brendan Cully. + + * INSTALL, README.SSL, rfc2047.c: + Documentation updates and a little bug fix. From Brendan Cully. + + * init.c: Don't add empty strings to lists. From Thomas Parmelan + . + +Tue Jun 5 15:43:41 2001 Thomas Roessler + + * handler.c: Leave slightly more margin with format=flowed. + + * imap/command.c, mutt_socket.c, mutt_ssl.c, mutt_tunnel.c: + patch-bac.sockets-20010605.1 + + * imap/auth.c, init.h: + Change the delimiter for imap_authenticators to a colon. + + * imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/imap.c, imap/auth_anon.c, imap/auth.c, imap/auth_cram.c, imap/auth.h: + The attached patch should be the last feature I want to get in + before 1.4. It creates a new config variable $imap_authenticators, + which is a comma-separated list of authentication methods for mutt + to try to use to authenticate to an IMAP server. If it is + unspecified you get the old behaviour - any method is tried, the + first to succeed or fail ends the auth loop. + + (From Brendan Cully.) + + * globals.h, init.h: + The attached patch should be the last feature I want to get in + before 1.4. It creates a new config variable $imap_authenticators, + which is a comma-separated list of authentication methods for mutt + to try to use to authenticate to an IMAP server. If it is + unspecified you get the old behaviour - any method is tried, the + first to succeed or fail ends the auth loop. + + * attach.c, commands.c, handler.c: + Check mutt_create_filter*'s return value for errors. This should + avoid a bunch of possible crashes. + +Mon Jun 4 18:29:33 2001 Thomas Roessler + + * doc/manual.sgml.head: Score documentation fix. + + * po/pl.po: Update. + + * doc/.cvsignore, .cvsignore: + Ignore some more generated files. From Andrew Nosenko. + + * Makefile.am: + -I$(includedir) is moved from INCLUDES variable to the end of + CPPFLAGS. This allow build Mutt with Bruno's libiconv and + --prefix=/usr on glibc-2.1.2 systems. + + From "Andrew W. Nosenko" . + + * doc/instdoc.sh.in, doc/Makefile.in, contrib/Makefile.in, configure.in, init.c, INSTALL, main.c, Makefile.am, muttbug.sh.in, sendlib.c: + Clean up the sharedir mess. From Lars Hecking. + +Fri Jun 1 08:53:23 2001 Thomas Roessler + + * imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c, curs_main.c, mailbox.h: + More concurrent IMAP modification handling from Brendan Cully. + + * po/fr.po: Update. + +Thu May 31 18:04:24 2001 Thomas Roessler + + * mutt_tunnel.c: Tunnel fixes. + + * configure.in: Fix some typos. + + * mutt_curses.h, configure.in: + Utf-8 support with ncurses, by Sven Verdoolaege. Thomas E. Dickey + says it looks reasonable, so I include it. + +Wed May 30 23:00:51 2001 Thomas Roessler + + * imap/command.c, imap/imap.c, enter.c, Makefile.am, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h, mutt_ssl.c, mutt_ssl_nss.c, mutt_tunnel.c: + Socket API clean-up from Brendan Cully. + + * send.c: If messages have no References header, fall back to using + In-Reply-To when constructing a reply's references header. This may + not be strictly according to the book, but looks like a reasonable + suggestion (which came from Vincent Lefebvre). + + * curs_main.c: Check whether any messages are visible. + +Tue May 29 20:26:23 2001 Thomas Roessler + + * m4/gssapi.m4, imap/auth.c, imap/auth_gss.c, imap/auth_sasl.c, imap/imap.c, configure.in, globals.h, init.h, Makefile.am, mutt_socket.c, mutt_socket.h, mutt_tunnel.c, mutt_tunnel.h, README: + GSSAPI fixes, tunnel driver. From Brendan Cully. + + * configure.in, md5.h, sha1.h: + More type-determination fixes from Lars Hecking. + +Mon May 28 19:14:47 2001 Thomas Roessler + + * imap/util.c: + Consult /etc/services for imaps port. From Brendan Cully. + + * imap/Makefile.am, Attic/checktypes.c, configure.in, Makefile.am, md5c.c, md5.h, sha1.c, sha1.h: + Improve checking for 32bit integers. From Brendan Cully and Lars + Hecking. + + * muttbug.sh.in: Cosmetics. From Brendan Cully. + + * imap/command.c, imap/imap.c, imap/imap_private.h: + Detect external modifications of IMAP folders. From Brendan Cully. + + * curs_main.c: Fix attaching messages via IMAP. From Brendan Cully. + +Thu May 24 10:18:30 2001 Thomas Roessler + + * po/ja.po: update. + + * browser.c: patch-bac.chdir-20010523.2 + +Wed May 23 14:19:16 2001 Thomas Roessler + + * browser.c: patch-bac.chdir-20010523.1 + + * imap/browse.c: patch-bac.createnull-20010522.1 + +Tue May 22 21:45:52 2001 Thomas Roessler + + * doc/manual.sgml.head: Documentation nit from Björn Jacke. + + * configure.in: + Let configure --help look prettier. From Brendan Cully. + + * doc/manual.sgml.head, doc/manual.sgml.tail: + Documentation fixes from Brendan Cully. + + * imap/imap.c: Attachment deletion on IMAP servers, take two. + +Mon May 21 08:42:07 2001 Thomas Roessler + + * imap/imap.c, imap/message.c, commands.c, mx.c, protos.h: + Attachment deletion for IMAP folders. By Brendan Cully. + +Sun May 20 22:35:29 2001 Thomas Roessler + + * handler.c: + Fix character set conversion for non-plain text types with 8bit + content-transfer-encodings. Noted by Björn Jacke. + + * imap/message.c: \Seen for FCCs. From Brendan Cully. + +Thu May 17 18:37:21 2001 Thomas Roessler + + * pager.c: patch-1.3.18.bj.segfault.1. + + * handler.c: Fix multibyte encodings with quoted-printable. + (patch-1.3.18.tt.decode_quoted.1) + From TAKIZAWA Takashi . + +Tue May 15 20:41:55 2001 Thomas Roessler + + * imap/browse.c, imap/util.c, mutt_socket.c: patch-bac.notes-20010515.1 + + * rfc1524.c: + Make tests on an attachment's file name possible. Patch from Bob + Bell . + +Sun May 13 15:43:48 2001 Thomas Roessler + + * po/de.po: Update. + +Sat May 12 05:49:31 2001 Thomas Roessler + + * handler.c: Undo one of yesterday's aesthetical changes. + + * muttlib.c: IMAP path canonification hack from Brendan Cully. + + * handler.c: + Adding a hack to use format=flowed's quoting information in the + pager, using ANSI color sequences to turn off quote coloring. + +Fri May 11 22:16:17 2001 Thomas Roessler + + * handler.c: + Don't cut off the final part of ttachments with overlong lines. + + * handler.c: Correctly handle extremely long lines. + + * handler.c: + Improve handling of indented text when wrapping text/plain; + format=flowed. This is, in particular, important when replying to + messages with indented text. I hope this code does The Right Thing + most of the time now. + + (Further note that we still try to avoid wrapping at places where + the user didn't do so.) + + * handler.c: Some more esthetical nits. + + * handler.c: More fixes. + + * recvcmd.c: Fix some nits with respect to text/plain; format=flowed. + + * copy.c, handler.c, init.h, mutt.h, send.c: + Add experimental support for text/plain; format=flowed. + + * send.c: Fix #590. + + * headers.c: Some code simplifications. + + * headers.c, muttlib.c: + Fix a memory leak in mutt_free_envelope(); avoid dangling pointers + in header editing. + +Thu May 10 13:15:45 2001 Thomas Roessler + + * po/ja.po: update. + + * hdrline.c: Fix %D. From Len Lattanzi . + + * headers.c: Fix header editing and references headers. + + * imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/message.c, imap/util.c, sort.c, copy.c, curs_main.c, globals.h, hook.c, init.h, mbox.c, menu.c, muttlib.c, mutt_socket.c, mutt_ssl.c, mx.c, pgpkey.c, pop_auth.c, pop.c, pop_lib.c, protos.h: + A slightly extended version of Dave Ewart's sleeptime patch. + + * po/fr.po, po/id.po, po/sv.po, po/da.po: update. + + * po/hu.po, configure.in: + Adding the Hungarian translation from Szabolcs Horvath + . + +Mon May 7 19:21:41 2001 Thomas Roessler + + * imap/imap.h, imap/README, imap/util.c, muttlib.c: + IMAP path canonicalization. From Brendan Cully. + +Wed May 2 20:49:46 2001 Thomas Roessler + + * doc/manual.sgml.tail: Document some missing functions. + + * po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/cs.po, po/da.po: + make update-po. + +Tue May 1 21:32:50 2001 Thomas Roessler + + * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/pl.po, po/pt_BR.po, po/lt.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.18 + + * pgp.c: #568: Out-of-band reporting for traditional signed+encrypted + messages. + +Tue May 1 21:24:41 2001 Thomas Roessler + + * pgp.c: #568: Out-of-band reporting for traditional signed+encrypted + messages. + +Thu Apr 26 15:52:34 2001 Thomas Roessler + + * configure.in: Replace tabs by spaces. + + * BEWARE, Makefile.am: + Add a word of warning concerning the case problems. + + * imap/command.c, imap/imap.c, imap/message.c, imap/util.c, imap/browse.c, parse.c, pattern.c, pgp.c, pgpkey.c, postpone.c, recvattach.c, remailer.c, rfc1524.c, rfc2047.c, send.c, sendlib.c, url.c, account.c, addrbook.c, alias.c, ascii.c, ascii.h, attach.c, charset.c, color.c, commands.c, copy.c, edit.c, handler.c, headers.c, init.c, keymap.c, Makefile.am, mutt.h, muttlib.c, mutt_ssl_nss.c, mx.c: + Add ascii_strcasecmp() and ascii_strncasecmp() functions which do + locale-independent and case-insensitive string comparisons. Needed + for mutt to work in iso-8859-9 environments, where tolower('I') != + 'i'. + +Wed Apr 25 22:08:41 2001 Thomas Roessler + + * globals.h, init.h, mutt.h, parse.c, protos.h, send.c, sendlib.c, thread.c, url.c: + Implement RFC 2822's idea of the In-Reply-To header. In particular, + we have to drop the $in_reply_to configuration variable. Also, the + change in the specification makes some changes to the threading code + reasonable. + + * parse.c: Use RFC 2822's interpretation of two-digit years. + + * charset.c: Kluge around some problems with iso-8859-9 locales. + +Tue Apr 24 11:21:22 2001 Thomas Roessler + + * commands.c: + When the character set is changed, ask whether or not mutt should + convert. + +Thu Apr 19 09:39:49 2001 Thomas Roessler + + * compose.c: + Don't try to select the secret key from the public key ring. + +Wed Apr 18 15:12:50 2001 Thomas Roessler + + * sendlib.c: + Fix a segmentation fault. Bug reported by Björn Jacke and analyzed + by Lars Hecking. + +Fri Apr 13 23:20:15 2001 Thomas Roessler + + * enter.c: Fix KEY_ENTER. From EGE. + + * build-release, README: Introducing trithemius.gnupg.org. + +Wed Apr 11 23:42:59 2001 Thomas Roessler + + * hook.c: + Avoid excessive unhooking from within hooks. Problem noted by + Eugene Lee on mutt-users. + + * doc/Makefile.in: + Don't rely on GNU make's implicit rules for shell scripts. Noted by + EGE. + +Mon Apr 9 16:10:59 2001 Thomas Roessler + + * INSTALL: Fix the documentation of --enable-locale-fix. From EGE. + + * enter.c, keymap.c: + Entering multibyte characters. From Edmund Grimley Evans. + + * send.c: Avoid a crash. patch-1.3.17.tlr.pgpflags_fault.1. + +Thu Apr 5 23:23:37 2001 Thomas Roessler + + * po/it.po: update + + * po/tr.po: update. + + * init.h: Fix a minor typo in the documentation. + +Wed Apr 4 23:29:29 2001 Thomas Roessler + + * send.c: + Fix pgp_replyencrypt and friends for group-replies to several tagged + messages. Noted by Werner Koch. + +Tue Apr 3 19:26:55 2001 Thomas Roessler + + * pgpkey.c: More PGP key selection changes: Clean up the key selection + mechanism. I'd appreciate if some of you could review the logic. + + * pgpkey.c: Fixes for the previous patch. + + * pgpkey.c: + Add an error message in case keys can be found, but none are valid. + + * init.h: Write "mail folder" instead of "folder" in the description of + $postponed. If people believe they understand it better that way, + fine with me. (Debian #89195.) + + * doc/manual.sgml.head: Fix a typo. Debian #90400. + + * po/sv.po: update. + + * url.c: + Permit for passwords which contain '@'. From Felix von Leitner + . + + * mutt_socket.c: + Set the close on exec bit for IMAP sockets. From Jason Gunthorpe + . #536, Debian #92651. + +Mon Apr 2 13:02:56 2001 Thomas Roessler + + * pop.c: + Fix a buffer overrun. Noted by Gordon Sadler ; + #530. + + * imap/Makefile.am: Fix dependencies. From Lars Hecking. + +Fri Mar 30 08:53:12 2001 Thomas Roessler + + * imap/Makefile.am: Add a rule for ../types.h. + +Thu Mar 29 11:23:05 2001 Thomas Roessler + + * pgp.c: Adding a dprint statement. + +Wed Mar 28 14:59:52 2001 Thomas Roessler + + * pgp.c, pgp.h: + Add some more PGP good signature checks, so we can detect whether or + not an encrypted+signed message is OK. + + * main.c: fix some of the copyright messages. + + * gnupgparse.c, pgpkey.c, pgplib.c, pgplib.h, pgppacket.c: + Make mutt compatible with GnuPG's latest features. As requested by + Werner Koch. + + * po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/it.po, po/ja.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/el.po, po/de.po, po/da.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.17 + + * po/pl.po: update. + +Wed Mar 28 12:00:38 2001 Thomas Roessler + + * po/pl.po: update. + +Fri Mar 23 12:30:17 2001 Thomas Roessler + + * send.c: handle my_hdr message-id: correctly. + +Tue Mar 20 17:28:55 2001 Thomas Roessler + + * pgp.c: Fix Content-Disposition of PGP/MIME messages. The second part + should get a file name for convenience, not the first one. + + * po/ja.po: Update from Oota Toshiya . + + * mbyte.c: Fix a bug in mbrtowc_iconv(). From TAKIZAWA Takashi + . + +Mon Mar 12 11:54:38 2001 Thomas Roessler + + * po/ru.po: update from Vsevolod. + +Thu Mar 8 16:48:50 2001 Thomas Roessler + + * pager.c: + Cosmetic change for OP_PAGER_TOP, suggested by Mike Schiraldi + . + +Mon Mar 5 20:52:04 2001 Thomas Roessler + + * init.h: Fix use_ipv6. + + * po/ja.po: update. + +Sun Mar 4 14:25:07 2001 Thomas Roessler + + * po/eo.po: update. + + * pgppacket.c: + Fix the interpretation of new-style packet lengths. This is a + really bad bug. + + * init.h, mutt.h, mutt_socket.c: + Make it possible to enable ipv6 at run time. + +Sat Mar 3 18:17:23 2001 Thomas Roessler + + * mutt_ssl.c: Fix a typo concerning OpenSSL version numbers. + +Thu Mar 1 10:18:04 2001 Thomas Roessler + + * po/fr.po: update. + + * po/de.po, po/id.po: updates. + + * imap/imap.c: Don't engage STARTTLS when already in SSL mode. + +Tue Feb 27 16:59:45 2001 Thomas Roessler + + * depcomp, Makefile.am, missing: + Adding files for users of automake-cvs. From Lars Hecking. + + * configure.in: Simplifications from Lars Hecking. + + * doc/Makefile.in: Distribute instdoc.sh.in. + + * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/ko.po, po/lt.po, po/nl.po, po/pl.po, po/pt_BR.po, po/id.po, po/it.po, po/ja.po, po/es.po, po/fr.po, po/gl.po, po/el.po, po/eo.po, po/da.po, po/de.po, contrib/Makefile.in, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.16 + +Mon Feb 26 16:35:39 2001 Thomas Roessler + + * pgp.c: + Fix behaviour with multiple signed blocks inside one application/pgp. + + * pgp.c: + Add out-of-band signature status signalling for application/pgp with + clearsig. + +Mon Feb 26 16:35:39 2001 Thomas Roessler + + * pgp.c: + Fix behaviour with multiple signed blocks inside one application/pgp. + + * pgp.c: + Add out-of-band signature status signalling for application/pgp with + clearsig. + +Fri Feb 23 09:13:55 2001 Thomas Roessler + + * imap/imap.c, mutt_ssl.c, po/ru.po: update. + + * url.h: Ports are unsigned short, not short. + + * po/de.po: Update. + +Wed Feb 21 17:02:18 2001 Thomas Roessler + + * po/fr.po: update. + + * po/pl.po, po/sv.po: updates. + +Tue Feb 20 19:05:17 2001 Thomas Roessler + + * imap/auth_gss.c, imap/message.c: More IMAP patches from Brendan. + + * sendlib.c: + lookup_mime_type() could overflow. This is, however, harmless, + because it only works on data from local configuration files which + are either under the control of the user or under the control of + root. + +Mon Feb 19 18:21:53 2001 Thomas Roessler + + * imap/command.c: Improved error handling. + + * po/de.po: There is no such thing as a "Text Anhang" in German. + + * imap/imap.c, imap/imap.h, hook.c, mailbox.h, mx.c: + Brendan Cully's generic access() wrapper which know about IMAP. + + * po/el.po: Update. + +Fri Feb 16 00:42:57 2001 Thomas Roessler + + * imap/BUGS, imap/message.c: Bugfix. From B.C. + + * imap/message.c: Fix #378. From Brendan Cully. + + * imap/imap.c: Support for \HasNoChildren. From Brendan Cully. + +Thu Feb 15 16:37:27 2001 Thomas Roessler + + * imap/browse.c, imap/imap.c, imap/imap.h, imap/util.c, acconfig.h, configure.in, globals.h, init.h, mutt.h, muttlib.c, mutt_sasl.c, pop_auth.c, url.c: + Brendan Cully's latest STARTTLS patch. + + * po/ja.po, configure.in: Adding ja.po. + + * charset.c: + Fix iconv-hook. It would segfault with x-unknown and other + problematic cases. + + * init.h: + Fix the documentation of pgp_verify_sig. It's ask-yes, not ask. + +Wed Feb 14 23:58:28 2001 Thomas Roessler + + * INSTALL: Add a comment about the sample iconv-hook files. + + * doc/instdoc.sh.in, doc/Makefile.in, doc/manual.sgml.head, doc/muttrc.man.head, doc/muttrc.man.tail, contrib/iconv/iconv.aix-3.2.5.rc, contrib/iconv/iconv.aix-4.1.5.rc, contrib/iconv/iconv.aix-4.2.0.rc, contrib/iconv/iconv.aix-4.3.2.rc, contrib/iconv/iconv.freebsd-3.3.rc, contrib/iconv/iconv.glibc-2.1.3.rc, contrib/iconv/iconv.glibc-2.1.90.rc, contrib/iconv/iconv.hpux-10.01.rc, contrib/iconv/iconv.hpux-10.20.rc, contrib/iconv/iconv.hpux-11.00.rc, contrib/iconv/iconv.irix-6.5.rc, contrib/iconv/iconv.osf1-4.0a.rc, contrib/iconv/iconv.osf1-4.0d.rc, contrib/iconv/iconv.solaris-2.4.rc, contrib/iconv/iconv.solaris-2.5.1.rc, contrib/iconv/iconv.solaris-2.6-cjk.rc, contrib/iconv/iconv.solaris-2.6.rc, contrib/iconv/iconv.solaris-2.7.rc, contrib/iconv/make.sh, contrib/iconv/README, contrib/Makefile.in, mutt.h, protos.h, charset.c, configure.in, hook.c, init.h: + iconv-hook. + + * imap/auth.c, imap/imap.c, imap/message.c, acconfig.h, configure.in, mutt_sasl.c, mutt_socket.h, mutt_ssl.c, mutt_ssl.h: + STARTTLS patch from Brendan Cully. + + * rfc2047.c, sendlib.c: + Minor charset fixes. Users can now give any character set names in + +Tue Feb 13 23:42:29 2001 Thomas Roessler + + * charset.c: Some more strange character set aliaes. + + * charset.c: Add more possibly-interesting character set names. + + * charset.c: + While I'm on it, fix a warning and remove some weired code by proper + use of ctype functions. + + * imap/utf7.c, charset.c, charset.h, gettext.c, gnupgparse.c, handler.c, rfc2047.c, rfc2231.c, sendlib.c: + Change charset-hook's behaviour. + + * po/id.po: update. + + * po/de.po: Fix some typos. From Björn Jacke. + + * recvattach.c: + A little fix for those who don't have PGP installed. ;-) + + * commands.c, curs_main.c, functions.h, OPS.PGP, pgp.c, pgp.h, protos.h, recvattach.c: + Add a function check-traditional-pgp which can be used to handle + old-style PGP messages and/or parts more easily. + + * query.c: Match all fields when searching on the query menu. + + * attach.c: + Fix #470: multipart- and message-type attachments weren't handled + correctly. + +Mon Feb 12 20:42:40 2001 Thomas Roessler + + * curs_lib.c: Fix '?' in the file name dialogue. Fixes #468, #465. + + * po/sv.po, po/tr.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/lt.po, po/nl.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.15 + + * NEWS: Tell users about some of the new features. + + * pgppacket.c: Don't free(NULL). + + * mutt.h, pgp.c, pgp.h, pgplib.c, pgplib.h, pgpmicalg.c, pgppacket.c, pgppacket.h, pgppubring.c, postpone.c, protos.h, send.c, sendlib.c, compose.c, configure.in, gnupgparse.c, init.h, Makefile.am: + Auto-detect the micalg used with PGP/MIME signatures. + +Mon Feb 12 17:48:25 2001 Thomas Roessler + + * NEWS: Tell users about some of the new features. + + * pgppacket.c: Don't free(NULL). + + * mutt.h, pgp.c, pgp.h, pgplib.c, pgplib.h, pgpmicalg.c, + pgppacket.c, pgppacket.h, pgppubring.c, postpone.c, + protos.h, send.c, sendlib.c, compose.c, configure.in, + gnupgparse.c, init.h, Makefile.am: Auto-detect the micalg + used with PGP/MIME signatures. + + * handler.c: + Make mutt_decode_* usable without passing a BODY structure. + + * imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c: + Fixes so mutt at least compiles with Brendan's new SASL patch. + + * lib.c: Fix mutt_read_line's behaviour when encountering an + EOF. From Aaron Lehmann . + + * pager.c: Avoid an infinite loop in the pager. From Edmund + Grimley Evans. + + * imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, + imap/command.c, imap/imap.c, imap/imap_private.h, + imap/message.c, imap/util.c, mutt_sasl.c, mutt_sasl.h, + mutt_ssl.c, mutt_ssl.h: Brendan Cully's SASL patch. + +Thu Feb 8 15:50:51 2001 Thomas Roessler + + * attach.c, commands.c, curs_lib.c, muttlib.c, pgp.c, + recvattach.c, remailer.c: Replace various instances of + endwin() by mutt_endwin(). This should help to avoid + chaotic screen output on the "second" screen. + + * po/da.po: update. + + * doc/manual.sgml.head: Fix a typo. + +Tue Feb 6 22:14:01 2001 Thomas Roessler + + * doc/manual.sgml.head, doc/muttrc.man.head: Document fuzzy + dates. + + * date.c, pattern.c: Fuzzy date matching. From Eike Rathke + . + +Fri Feb 2 12:36:19 2001 Thomas Roessler + + * pgpinvoke.c: Apply more conservative quoting to some PGP + invocation. + + * po/sv.po: Update from Jörgen Tegnér. + +Thu Feb 1 17:03:44 2001 Thomas Roessler + + * po/tr.po: update + +Wed Jan 31 18:31:27 2001 Thomas Roessler + + * send.c: + Don't use group mailboxes with list-reply. E.g., when you have + "ietf" as a list pattern, and a message goes to + + IETF-Announce:;, ietf-openpgp@somewhere.org, + + list-reply will now yield ietf-openpgp and _not_: + + IETF-Announce: ietf-openpgp@... + + * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, + po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/fr.po, + po/gl.po, po/id.po, po/it.po, po/ko.po, po/lt.po, po/nl.po, + po/pl.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, + po/es.po: Including the turkish translation from Fatih Demir + ; make update-po. + + * configure.in: Including the turkish translation from Fatih + Demir . + +Tue Jan 30 10:24:36 2001 Thomas Roessler + + * doc/manual.sgml.head: + Stan Ryckman noted that we are abusing + "envelope" where it should be "header". + + * thread.c: Fix sort_aux=received. From . + + * pager.c: + Eric Fischer sent us this patch as part of bug#441. + I'm not entirely sure that it works, but let's try it. + + * po/de.po, po/id.po: update + + * po/fr.po: update. + + * pop_auth.c: + Fixing a stupid typo. bug#445, from Larry Rosenman . + +Sat Jan 27 13:50:26 2001 Thomas Roessler + + * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/ko.po, po/lt.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/es.po, po/fr.po, po/eo.po, po/el.po, po/de.po, po/da.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.14 + + * recvattach.c: More improvements to the recvattach collapsing. + + * mutt.h, pager.c, pager.h, protos.h, recvattach.c, attach.c, attach.h, compose.c, functions.h, init.h, OPS: + Add collapsing to the receive-attach menu, and improve digest + handling that way. + +Sat Jan 27 13:41:11 2001 Thomas Roessler + + * recvattach.c: More improvements to the recvattach collapsing. + + * mutt.h, pager.c, pager.h, protos.h, recvattach.c, attach.c, attach.h, compose.c, functions.h, init.h, OPS: + Add collapsing to the receive-attach menu, and improve digest + handling that way. + +Thu Jan 25 12:04:46 2001 Thomas Roessler + + * po/cs.po: Fixes from Björn Jacke . + + * contrib/pgp6.rc: A nit from Björn Jacke . + +Mon Jan 22 11:04:56 2001 Thomas Roessler + + * mutt_ssl.c: patch-1.3.13.tk.ssl.connect.1 + +Thu Jan 18 11:27:56 2001 Thomas Roessler + + * complete.c: + Completion fix. From Aaron Schrab . + +Wed Jan 17 08:53:12 2001 Thomas Roessler + + * rfc822.c: + This one-line diff should fix the behaviour of the address parser + when encountering loose dots in addresses. + + * imap/auth_sasl.c: + Try to catch mysterious failures of the SASL library instead of + hanging. From Brendan Cully. + +Mon Jan 15 10:40:50 2001 Thomas Roessler + + * copy.c: Some debugging helpers. + + * send.c: + Use safe_fclose() where a NULL pointer may be passed to fclose(). + + * pattern.c: + Make ~m usable in $simple_search. From . + +Wed Jan 10 19:36:43 2001 Thomas Roessler + + * recvcmd.c, send.c: + Make some messages about mime-forwarding more comprehensible to + normal users. + +Mon Jan 8 23:09:32 2001 Thomas Roessler + + * imap/auth_sasl.c, imap/utf7.c, imap/util.c, charset.c, charset.h, check_sec.sh, dotlock.c, enter.c, gnupgparse.c, keymap.c, lib.c, mutt_sasl.c, parse.c, pgp.c, pgppubring.c, pop_auth.c, regex.c, rfc2047.c, rfc2231.c, rfc822.c, sendlib.c, strdup.c: + Let check_sec.sh check for use of the unsafe malloc, realloc, free, + and strdup routines. While we are on it, plug some memory leaks and + make some code understandable. + + * intl/cat-compat.c, imap/auth_cram.c, imap/auth_gss.c, imap/imap.c, imap/imap_private.h, imap/message.c, base64.c, browser.c, check_sec.sh, commands.c, complete.c, copy.c, curs_lib.c, edit.c, handler.c, init.c, lib.c, pager.c, pgp.c, pgpkey.c, pop_lib.c, protos.h, query.c, rfc2231.c, rfc822.c, send.c, sendlib.c, snprintf.c: + Fix and/or check more fishy code. + + * intl/cat-compat.c, imap/auth_cram.c, imap/auth_gss.c, browser.c, buffy.c, check_sec.sh, curs_main.c, enter.c, init.c, main.c, makedoc.c, mkjtags.c, mutt_sasl.c, pgp.c, pgpinvoke.c, pgpkey.c, pop.c, protos.h, regex.c, rfc2231.c, sendlib.c: + Going through possible security problems with a fine comb. If you + want to help, check out the current source, and run check_sec.sh. + + * attach.c, build-release, check_sec.sh, edit.c, pgpkey.c: + Some automated security checks concerning fopen() calls. + +Thu Jan 4 05:39:31 2001 Thomas Roessler + + * gettext.c: Don't use debugfile unless DEBUG is #defined. + +Wed Jan 3 13:39:48 2001 Thomas Roessler + + * enter.c, mbyte.c: More wide-char patches from EGE. + + * enter.c: Don't accept '\0' as keyboard input. + + * imap/auth_sasl.c: + Set SASL_IP_{LOCAL,REMOTE} properties - needed for krb4 support; + from yak@MIT.EDU. + + * enter.c: Try to fix nonprintable character input. + + * enter.c: Extend the editor so it supports unprintable characters. + +Tue Jan 2 16:34:26 2001 Thomas Roessler + + * enter.c: Make my_wcstombs more robust. From EGE. + + * main.c: Only show mailboxes with -y. From devenish@arcme.uwa.edu.au. + + * account.h: Fix password input. From Vsevolod Volkov. + +Sun Dec 31 15:30:52 2000 Thomas Roessler + + * po/ru.po, pop_lib.c: Missing patches from VVV. + + * imap/imap.c, curs_main.c, functions.h, globals.h, OPS: + Experimental patch to add an imap-fetch-mail function. + + * mutt.h, protos.h, browser.c, curs_lib.c, enter.c, main.c: + Make browser behaviour more consistent with expectations. + + * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pt_BR.po, po/ru.po, po/lt.po, po/nl.po, po/pl.po, po/it.po, po/ko.po, po/id.po, po/es.po, po/fr.po, po/gl.po, po/eo.po, po/da.po, po/de.po, po/el.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.13 + +Sat Dec 30 10:28:16 2000 Thomas Roessler + + * po/pl.po: update. + +Sat Dec 30 10:28:16 2000 Thomas Roessler + + * po/pl.po: update. + +Fri Dec 22 18:03:34 2000 Thomas Roessler + + * configure.in: autoconf consmetics. From L.H. + + * enter.c, mutt.h: Some more changes to the enter code. + + * enter.c: Fix some ugly bugs in the completion code. In particular, + replace_part() could lead to heap corruption. + + * po/lt.po, configure.in: + Lithuanian translation. From Gediminas Paulauskas . + +Thu Dec 21 09:19:41 2000 Thomas Roessler + + * flags.c, init.h, mh.c, mutt.h: patch.me.maildir_trash.1 + +Sun Dec 17 19:54:58 2000 Thomas Roessler + + * po/sv.po: update. + +Thu Dec 14 15:40:30 2000 Thomas Roessler + + * doc/manual.sgml.head: Improve hook documentation. From Lars Hecking. + + * enter.c: More file name completion fixes. + + * enter.c: Fix "tab-tab" at the change-folder prompt. + +Sun Dec 10 21:01:35 2000 Thomas Roessler + + * imap/message.c, init.h, mutt.h: + Avoid implicit flag updates with IMAP. From Brendan Cully. + + * configure.in, enter.c, mbyte.c, mbyte.h, mutt.h: + More enter.c updates. From E.G.E.. + + * mbyte.h, mutt.h, configure.in, enter.c: + More changes to the utf-8 friendly line editor: Implement some + missing functions, include some more header files. + +Fri Dec 8 10:38:30 2000 Thomas Roessler + + * curs_lib.c: Remove an unnecessary ENTER_STATE allocation. + + * curs_lib.c, enter.c, mutt.h, protos.h: + Make _mutt_enter_string() re-entrant. + + * curs_lib.c, edit.c, enter.c, protos.h: + Make the line editor utf-8 friendly. First take from Edmund Grimley + Evans. + +Wed Dec 6 20:31:46 2000 Thomas Roessler + + * gnupgparse.c: Fix pgp_ignore_subkeys. + + * mutt_curses.h: Make the BEEP macro a bit safer. From EGE. + + * imap/imap.c: Fix a memory leak in imap_logout_all. + +Mon Dec 4 09:00:08 2000 Thomas Roessler + + * mbyte.c: + A little fix for the -HAVE_WC_FUNCS +LOCALES_HACK case. From EGE. + +Sun Dec 3 09:34:41 2000 Thomas Roessler + + * doc/PGP-Notes.txt: + Document the fact that Courier MTA corrupts PGP/MIME signatures. + +Sat Dec 2 09:16:47 2000 Thomas Roessler + + * po/el.po, po/uk.po: update. + +Tue Nov 28 11:19:57 2000 Thomas Roessler + + * po/da.po, po/de.po, po/fr.po, po/id.po: updates + +Mon Nov 27 13:14:28 2000 Thomas Roessler + + * attach.h, commands.c, compose.c, curs_main.c, protos.h, recvattach.c: + Make sure edit-type works without a segmentation fault from the + receive-attach menu. + + * po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/nl.po, po/it.po, po/ko.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/es.po, po/el.po, po/cs.po, po/da.po, po/de.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.12 + +Thu Nov 23 10:30:49 2000 Thomas Roessler + + * contrib/sample.muttrc-tlr: + Use display_filter to fix some ugliness people are sending me. + + * commands.c: Don't endwin() before invoking the display_filter. + +Thu Nov 23 10:30:49 2000 Thomas Roessler + + * contrib/sample.muttrc-tlr: + Use display_filter to fix some ugliness people are sending me. + + * commands.c: Don't endwin() before invoking the display_filter. + +Tue Nov 21 10:32:34 2000 Thomas Roessler + + * protos.h, main.c, curs_lib.c, globals.h: + [stable] Introduce mutt_curses_message and mutt_nocurses_message. + From Olaf Kirch. + + * globals.h, main.c, protos.h, curs_lib.c: + Introduce mutt_curses_message/mutt_nocurses_message. From Olaf Kirch. + +Mon Nov 20 13:20:28 2000 Thomas Roessler + + * contrib/gpg.rc: Add a missing --textmode switch. + +Sun Nov 19 20:39:49 2000 Thomas Roessler + + * NEWS: Mention $print_split. + + * contrib/sample.muttrc-tlr: update + + * mutt.h, pgp.c, protos.h, commands.c, init.h: + Introduce a new option named $print_split. While we are on it, + unify the pipe-message and print-message code, and fix the PGP + key-extraction code so it doesn't interact with OPTPIPEDECODE in + strange manners any more. + +Sat Nov 18 19:50:48 2000 Thomas Roessler + + * curs_lib.c: Remove an unnecessary include statement. + +Fri Nov 17 09:19:41 2000 Thomas Roessler + + * po/sv.po: Small fix from Jörgen Tegnér . + + * imap/auth_gss.c: + [stable] GSSAPI patch from Bill Nottingham . + + * doc/manual.sgml.tail, curs_main.c, functions.h: + Make folder synchronization possible from within the pager. From + Chris Cutler . + +Wed Nov 15 20:29:58 2000 Thomas Roessler + + * charset.c: + Fix langinfo-based character set detection. From Martin Norbäck + . + +Tue Nov 14 16:57:19 2000 Thomas Roessler + + * curs_main.c: another possibly problematic case. + + * curs_main.c: + Try fixing a possible segmentation fault. I'm not entirely sure how + I produced it, but it's at least obvious where it happened. + +Mon Nov 13 22:19:57 2000 Thomas Roessler + + * gnupgparse.c, init.h, mutt.h: + Add the pgp_ignore_subkeys option. Unset it to get the traditional + listing with all the subkeys. (Experimental, may introduce new bugs.) + + * po/ru.po, po/sv.po: update + + * remailer.c: Qualify some more header fields. + +Tue Nov 7 10:31:51 2000 Thomas Roessler + + * init.h, mutt.h, send.c: Add a sig_on_top option. + + * po/el.po: update + +Mon Nov 6 11:27:07 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/da.po: update + + * configure.in: + Make building mutt without iconv support possible. From EGE. + +Fri Nov 3 10:16:32 2000 Thomas Roessler + + * init.h: + Change pgp_good_sign's default to 0 instead of UL "". This should + fix the annoying error messages when starting up mutt on some systems. + + * init.c: Make error reporting more verbose. + + * po/de.po, po/fr.po, po/id.po: updates + +Wed Nov 1 13:14:18 2000 Thomas Roessler + + * po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.11 + +Fri Oct 27 10:51:01 2000 Thomas Roessler + + * enter.c: A nicer version of {capitalize,...}-word functions. + + * doc/manual.sgml.head: + Document the recent additions to the line editor. + + * enter.c, functions.h, OPS: + Add capitalize-word, upcase-word, downcase-word functions to the + editor. Bindings follow the Emacs conventions (i.e., M-c, M-u, M-d). + +Fri Oct 27 10:51:01 2000 Thomas Roessler + + * enter.c: A nicer version of {capitalize,...}-word functions. + + * doc/manual.sgml.head: + Document the recent additions to the line editor. + + * enter.c, functions.h, OPS: + Add capitalize-word, upcase-word, downcase-word functions to the + editor. Bindings follow the Emacs conventions (i.e., M-c, M-u, M-d). + +Wed Oct 25 18:56:20 2000 Thomas Roessler + + * rfc822.c: Fix parsing of route-addrs. + +Tue Oct 24 08:59:21 2000 Thomas Roessler + + * doc/manual.sgml.tail: Document edit-type. From Mikko Hänninen. + + * po/el.po: update + +Mon Oct 23 16:39:10 2000 Thomas Roessler + + * doc/manual.sgml.head: Typo. From Daniel Roesen . + + * doc/manual.sgml.head: + Fix documentation of uznknown MIME type handling. From Brian + Salter-Duke + +Wed Oct 18 09:01:56 2000 Thomas Roessler + + * recvattach.c: Fix tree formatting in the recvattach menu. + +Tue Oct 17 15:10:51 2000 Thomas Roessler + + * commands.c, curs_lib.c, hdrline.c, menu.c, protos.h: + Fix pager and index display when non-printable space characters are + encountered. From EGE. + + * sendlib.c: Teach mutt to attach files of arbitrary type. + +Mon Oct 16 17:29:55 2000 Thomas Roessler + + * curs_lib.c: + nl_langinfo({YES,NO}EXPR) may return an _extended_ regular + expression. Close #312. + + * po/zh_TW.Big5.po, po/id.po, po/sv.po: update + + * mutt_socket.c: + Fix the strange "Can't connect" error messages. From Brendan Cully. + +Thu Oct 12 14:49:58 2000 Thomas Roessler + + * po/da.po: update + +Wed Oct 11 14:17:17 2000 Thomas Roessler + + * po/de.po: update. + + * po/fr.po: update + + * po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/nl.po, po/pl.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, ChangeLog, Makefile.am, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.10 + + * buffy.c: Compilation fix from Emil Sit . + +Wed Oct 11 10:21:57 2000 Thomas Roessler + + * buffy.c: Compilation fix from Emil Sit . + +Tue Oct 10 19:22:48 2000 Thomas Roessler + + * po/POTFILES.in, doc/manual.sgml.head, globals.h, init.c, init.h, mailbox.h, mutt.h, muttlib.c, mx.c, mx.h, pop_auth.c, pop.c, pop.h, pop_lib.c, protos.h, recvattach.c, browser.c, buffy.c, commands.c, compose.c, configure.in, curs_main.c, Makefile.am: + Vsevolod Volkov's POP mailbox patch. + + * doc/manual.sgml.head: + Mixmaster documentation patch from Brian Salter-Duke. + +Mon Oct 9 08:30:35 2000 Thomas Roessler + + * main.c: Add an #ifdef for HAVE_GETADDRINFO. + + * mutt_socket.c: Use AF_INET6 only when necessary. + +Sat Oct 7 18:06:24 2000 Thomas Roessler + + * curs_lib.c, help.c: Display fixes from EGE. + +Thu Oct 5 19:12:28 2000 Thomas Roessler + + * query.c: Catch some possible NULL pointer deferences. From + chris+usenet@chiappa.net (Chris Chiappa), posted to comp.mail.mutt. + +Wed Oct 4 18:50:35 2000 Thomas Roessler + + * mutt_ssl_nss.c: + Downgrade Michael Elkins' indentation style to the version used + throughout mutt. ;-) + + * acconfig.h, configure.in, init.c, init.h, Makefile.am, mutt.h, mutt_socket.c, mutt_ssl_nss.c, pop.c: + Adding support for Netscape's (pardon, Mozilla's) SSL + implementation. From Michael Elkins. + + * globals.h, init.h, mutt_socket.c, protos.h, signal.c: + patch.me.connect_timeout.1 + +Tue Oct 3 10:47:20 2000 Thomas Roessler + + * NEWS: Document some of the recent user-visible changes. + + * doc/manual.sgml.head: + More documentation for the "L" to_char. Thanks, Byrial! + + * hdrline.c, init.h: + Adding a list flag to to_chars, From Andreas Plesner Jacobsen + . Note: If you don't like the new behaviour, just set + $to_chars to the old " +TCF" value. + + * po/ru.po: update + +Mon Oct 2 09:11:52 2000 Thomas Roessler + + * configure.in, mutt_socket.c: patch-bac.ipv6-1 + + * curs_lib.c: patch-1.3.9.bj.yesno.1 + +Thu Sep 28 06:53:36 2000 Thomas Roessler + + * init.h: Fix a minor typo. From Byrial. + + * charset.c, charset.h, init.c, INSTALL: + Document the --without-wc-funcs switch to configure, and clean up + the code to set the character set from nl_langinfo from EGE. + +Wed Sep 27 14:28:35 2000 Thomas Roessler + + * charset.c: + Catch another error condition which may be caused by a broken + nl_langinfo() function. + + * COPYRIGHT: We don't need to mention EAY's copyright any more. + + * charset.c: Fix #287. + +Tue Sep 26 23:05:46 2000 Thomas Roessler + + * po/eo.po: update + + * Attic/sha1dgst.c, Attic/sha.h, Attic/sha_locl.h, checktypes.c, main.c, Makefile.am, pgppubring.c, sha1.c, sha1.h: + Replace the BSD-licensed sha-1 from SSLeay with a public domain + version in order to satisfy GPL license zelots. + +Mon Sep 25 13:03:09 2000 Thomas Roessler + + * po/sv.po: update + + * send.c: patch-1.3.9.bj.f-up-prompt.1 + +Thu Sep 21 09:37:14 2000 Thomas Roessler + + * po/sk.po, po/sv.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/pt_BR.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/el.po, po/eo.po, po/da.po, po/de.po, po/cs.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.9 + + * rfc2047.c: Make some of the code more readable. From EGE. + +Thu Sep 21 07:56:40 2000 Thomas Roessler + + * rfc2047.c: Make some of the code more readable. From EGE. + +Fri Sep 15 09:19:29 2000 Thomas Roessler + + * rfc2047.c, rfc2047.h, sendlib.c: Fix some RFC2047 encoding bugs. + +Wed Sep 13 21:01:31 2000 Thomas Roessler + + * rfc2047.c: + Undo part of the character set canonicalization. EGE pointed out it + isn't needed. + + * rfc2231.c: Replace "unknown" by "unknown-8bit". + + * sendlib.c: s/iconv_open/mutt_iconv_open/. Suggested by EGE. + + * charset.c: + Add "646" as an alias for us-ascii. SunOS 5.8 seems to need it. + + * browser.c: + Let the browser handle non-existent directories more gracefully. + From Byrial Jensen. + +Tue Sep 12 23:18:47 2000 Thomas Roessler + + * configure.in: Remove some caching. From EGE. + +Mon Sep 11 10:50:37 2000 Thomas Roessler + + * charset.c, copy.c, mbyte.c, rfc2047.c, sendlib.c: + Fix some more character set glitches. + +Sat Sep 9 07:30:29 2000 Thomas Roessler + + * charset.c: + sizeof (dest) == 4. I should have written dlen instead. Noted by + EGE. + +Fri Sep 8 21:52:04 2000 Thomas Roessler + + * imap/imap.c: + Brendan's version of the last fix. I put it in since he's most + likely the next one to look at or change this. ,-) + + * imap/imap.c: + Fix a silly little IMAP bug. From Daniel Jacobowitz . + + * charset.c, protos.h, rfc2231.c, sendlib.c: + Add a character set comparison function. + +Thu Sep 7 21:56:00 2000 Thomas Roessler + + * charset.c: + Add a table of official character set names. Data taken from + www.iana.org. + + * rfc2231.c: + Detect pure 7bit data and don't encode them. This helps a bit in + situations where mutt believes it has some really strange us-ascii + alias as the character set. + + * po/es.po, po/el.po: update + + * curs_lib.c: + Make the use of nl_langinfo(YESEXPR/NOEXPR) more robust. Problem + noted by Wolfgang Baumann . + +Wed Sep 6 08:47:13 2000 Thomas Roessler + + * snprintf.c: Fix the MAX fix. from Byrial Jensen. + +Tue Sep 5 22:14:36 2000 Thomas Roessler + + * init.c, muttlib.c, pgppubring.c, protos.h, snprintf.c: + Clean up some warning messages. From Bob Bell. + + * hook.c: Fix a segmentation fault in hook parsing. From Bob Bell. + +Mon Sep 4 10:49:48 2000 Thomas Roessler + + * imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/util.c, account.c, account.h, browser.c, curs_main.c, url.c, url.h: + patch-bac.imapurl-4 + + * po/ru.po, po/da.po: update + + * po/id.po: update. + + * recvcmd.c: Fix a segmentation fault when replying to multiple + message/rfc822-type attachments. Noted by David Champion. + +Fri Sep 1 08:58:39 2000 Thomas Roessler + + * init.c: + Don't mutt_pretty_mailbox when setting variables, since this may + badly interact with non-default settings. Suggested by Byrial Jensen. + +Thu Aug 31 15:14:25 2000 Thomas Roessler + + * muttlib.c: patch-1.3.8.bj.pretty_mailbox.1 + + * doc/manual.sgml.head: patch-1.3.8.bj.manquote.1 + + * imap/command.c, imap/imap.c: patch-bac.command-3 + +Wed Aug 30 21:34:42 2000 Thomas Roessler + + * pager.c: Fix display of backspace sequences. From EGE. + + * po/fr.po, po/de.po: update + + * po/sk.po, po/sv.po, po/uk.po, po/zh_CN.GB2312.po, po/zh_TW.Big5.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, ChangeLog, VERSION: + automatic post-release commit for mutt-1.3.8 + + * VERSION: ups + + * po/POTFILES.in, imap/Attic/imap_ssl.c, imap/Attic/imap_ssl.h, imap/Attic/md5c.c, imap/Attic/md5.h, imap/Makefile.am, imap/util.c, ChangeLog, configure.in, curs_main.c, init.c, Makefile.am, md5c.c, md5.h, mutt_socket.c, mutt_ssl.c, mutt_ssl.h, reldate.h, VERSION: + SSL unification patch from Vsevolod. + + * imap/command.c, imap/imap.c, imap/message.c, imap/message.h: + patch-bac.expunge-2 + + * muttlib.c: Fix mutt_prety_mailbox. From Vsevolod. + +Wed Aug 30 10:08:15 2000 Thomas Roessler + + * VERSION: ups + + * po/POTFILES.in, imap/Attic/imap_ssl.c, imap/Attic/imap_ssl.h, imap/Attic/md5c.c, imap/Attic/md5.h, imap/Makefile.am, imap/util.c, ChangeLog, configure.in, curs_main.c, init.c, Makefile.am, md5c.c, md5.h, mutt_socket.c, mutt_ssl.c, mutt_ssl.h, reldate.h, VERSION: + SSL unification patch from Vsevolod. + + * imap/command.c, imap/imap.c, imap/message.c, imap/message.h: + patch-bac.expunge-2 + + * muttlib.c: Fix mutt_prety_mailbox. From Vsevolod. + +Wed Aug 30 08:43:12 2000 Thomas Roessler + + * imap/command.c, imap/imap.c, imap/message.c, imap/message.h: + patch-bac.expunge-2 + + * muttlib.c: Fix mutt_prety_mailbox. From Vsevolod. + +Tue Aug 29 11:36:25 2000 Thomas Roessler + + * curs_lib.c: + The next version of Byrial Jensen's yesorno patch, this time without + a memory leak. + + * acconfig.h, configure.in, curs_lib.c, main.c: + Use locale for yes/no expressions. + +Mon Aug 28 13:14:55 2000 Thomas Roessler + + * rfc2231.c: Little fix from EGE. + + * po/ru.po: Update from Vsevolod. + + * complete.c: From: EGE + + Fix a buffer overrun in complete.c. + + * imap/auth_sasl.c, imap/command.c, imap/imap_private.h, muttlib.c: + From: Brendan Cully + + The attached small patch adjusts mutt_pretty_mailbox to handle + URLs. + + * browser.c, curs_lib.c, hdrline.c, protos.h, recvattach.c: + From: Edmund GRIMLEY EVANS + + This patch moves hdr_format_s from hdrline.c to curs_lib.c and renames + it to mutt_format_s. The function is then used in various places in + browser.c and recvattach.c where previously there was "%%%ss". + + * rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, sendlib.c: + Do character set selection for RFC2231 encodings. From EGE, but + with choose_charset renamed to mutt_choose_charset. + + * mbyte.c, protos.h, utf8.c, wcwidth.c: From: edmundo@rano.org (EGE) + + This is the patch TAKIZAWA Takashi and I came up with in the end. + + When the Charset is euc-jp or shift_jis, iconv is used for mbrtowc + and wcrtomb. The worst part is mbrtowc_iconv(), where I attempted to + make mbrtowc both restartable (it can process part of multibyte + character) and fast in the case where there is nothing left over + from a previous character. Also I try to make no assumptions about + how those character sets work, which is easy, because I know very + little about them ... + + People who don't use one of those two stateless Japanese display + charsets shouldn't be affected. People whose systems provide the + wchar_t functions should be even less affected, because they don't + even get this code in their binary. + +Fri Aug 25 06:28:24 2000 Thomas Roessler + + * imap/imap.c, imap/imap_ssl.c, imap/imap_ssl.h, imap/util.c, account.c, account.h, browser.c, mutt_socket.c, mx.c, url.c, url.h: + patch-bac.imapurl-2, with small modifications. + +Tue Aug 22 22:23:10 2000 Thomas Roessler + + * muttlib.c: Fix #251, from Brendan. + + * main.c, Makefile.am, parse.c, protos.h, url.c, url.h: + Add an URL parser, and support for mailto URLs. + + * doc/manual.sgml.head: Minor fixes from Will Fiveash. + + * po/ru.po: update + + * hdrline.c: Fix %B in index_format. + +Mon Aug 21 19:25:26 2000 Thomas Roessler + + * imap/browse.c, imap/imap.c, muttlib.c, mutt_socket.c: + patch-bac.parsepath-2 + + * doc/manual.sgml.head, doc/manual.sgml.tail: + Documentation patch from Lars Hecking. + + * imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, imap/browse.c, imap/command.c, imap/imap.c, doc/manual.sgml.head, browser.c, browser.h, buffy.c, functions.h, globals.h, init.h, OPS: + patch-bac.createplus-1 + + * imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c: + patch-bac.command-2 + +Thu Aug 17 06:06:02 2000 Thomas Roessler + + * po/zh_CN.GB2312.po, configure.in: Adding zh_CN.GB2312 translation. + + * imap/Makefile.am, doc/Makefile.in, mutt_socket.c, mx.c: + Random cleanup from Brendan Cully. + + * hdrline.c: Fix justification of number formats. (EGE) + +Tue Aug 15 17:21:19 2000 Thomas Roessler + + * po/ru.po: update + + * mbyte.c, pager.c, protos.h: Another charset fix from EGE. + +Thu Aug 10 15:48:13 2000 Thomas Roessler + + * imap/Makefile.am: Fix from Brendan Cully. + + * doc/mutt.man, doc/muttrc.man.tail: More minor fixes. + + * doc/mutt.man: Document $MAILDIR. + + * init.c: + Tell mutt about the MAILDIR environment variable DJB talks about in + maildir (5). + + * doc/muttbug.man: Fix a typo. + + * doc/mbox.man: fix some typos. + +Wed Aug 9 21:14:35 2000 Thomas Roessler + + * doc/Makefile.in, doc/mbox.man: Install mbox (5), and fix a typo. + + * doc/mbox.man: + Document the mbox format in a manual page. There may be some need + for this. + + * configure.in, init.c, main.c, Makefile.am: + Minor portability and compilation fixes. + +Tue Aug 8 18:17:54 2000 Thomas Roessler + + * po/POTFILES.in: Some files were missing. From Vsevolod Volkov. + + * imap/command.c, imap/imap.c, imap/imap_private.h, imap/Makefile.am, imap/message.c, init.c, mutt_socket.c, mx.c: + * handles expunged messages better. Previously mutt's state was only + updated when syncing the mailbox. This was the reason for Bob Bell's + segfault when manipulating mailboxes with multiple simultaneous + clients. + * makes a small adjustment for Sam's weird Courier server, which + returns an OK FETCH completed response even when FETCH fails. I + should probably report that behaviour to him as a bug, though. + * renames IMAP_REOPEN_PENDING to IMAP_EXPUNGE_PENDING + * gets rid of the _("Closing mailbox...") message, which was obscuring + the status updates. + * clears some spurious mutt_clear_error calls in imap_cmd_finish. + * makes socket reads and writes check that they have an open + connection. Shouldn't be necessary (and such calls are logged), but + can happen currently. + * Some SASL vs regular authenticator tweaks in the imap Makefile. + + (From Brendan Cully.) + +Mon Aug 7 08:31:36 2000 Thomas Roessler + + * po/Makefile.in.in, imap/Makefile.am, configure.in, Makefile.am, mapping.h, sort.h: + Cross compilation patches from Rüdiger Kuhlmann + . + +Sun Aug 6 14:35:15 2000 Thomas Roessler + + * curs_lib.c: + Return an exit value of 1 if mutt is left via ctrl-c. From Andre + Albsmeier . + +Sat Aug 5 17:50:03 2000 Thomas Roessler + + * imap/imap.c, imap/imap_private.h, imap/message.c, imap/auth_anon.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth_login.c, imap/auth_sasl.c, imap/browse.c, imap/command.c, imap/Makefile.am, mutt_socket.c: + Unified IMAP command code. + + * doc/manual.sgml.head: + Fix keyboard binding documentation. From Thomas Schultz + . + +Fri Aug 4 21:47:11 2000 Thomas Roessler + + * sendlib.c: Fix a character set encoding bug. From EGE. + + * imap/auth_sasl.c, imap/imap_ssl.c, doc/manual.sgml.head, account.c, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h: + SASL patch from Brendan Cully. + +Thu Aug 3 22:08:13 2000 Thomas Roessler + + * charset.c: fix a segmentation fault. + + * po/eo.po, po/sv.po: update. + + * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/fr.po, po/gl.po, po/id.po, po/it.po, imap/Makefile.am, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.3.7 + + * sendlib.c: + Use a correct Envelope from when bouncing with $envelope_from enabled. + + * imap/auth_sasl.c, imap/BUGS, imap/imap.c, imap/imap_ssl.c, mutt_sasl.c: + More IMAP fixes from Brendan. + +Thu Aug 3 08:24:55 2000 Thomas Roessler + + * sendlib.c: + Use a correct Envelope from when bouncing with $envelope_from enabled. + + * imap/auth_sasl.c, imap/BUGS, imap/imap.c, imap/imap_ssl.c, mutt_sasl.c: + More IMAP fixes from Brendan. + +Thu Aug 3 08:24:55 2000 Thomas Roessler + + * sendlib.c: + Use a correct Envelope from when bouncing with $envelope_from enabled. + + * imap/auth_sasl.c, imap/BUGS, imap/imap.c, imap/imap_ssl.c, mutt_sasl.c: + More IMAP fixes from Brendan. + +Wed Aug 2 18:03:21 2000 Thomas Roessler + + * po/it.po: update + +Tue Aug 1 18:04:42 2000 Thomas Roessler + + * mx.c: Fix from BC + + * imap/auth.c, imap/auth_gss.c, imap/auth_sasl.c, imap/message.c: + Brendan's latest patches. + +Mon Jul 31 10:49:00 2000 Thomas Roessler + + * po/fr.po: update. + + * m4/gettext.m4, imap/auth_anon.c, imap/auth.c, imap/auth_cram.c, imap/auth_gss.c, imap/auth.h, imap/auth_login.c, imap/auth_sasl.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/Makefile.am, acconfig.h, account.c, account.h, configure.in, globals.h, init.h, main.c, Makefile.am, mutt_sasl.c, mutt_sasl.h, mutt_socket.c, mutt_socket.h: + Brendan Cully's SASL patch. I hope I didn't miss any files. + +Sat Jul 29 16:33:53 2000 Thomas Roessler + + * po/id.po: update. + + * imap/README: updated readme file. + + * Makefile.am: + Make sure checktypes and makedoc don't depend on the intl library. + + * po/de.po: update. + +Fri Jul 28 19:00:31 2000 Thomas Roessler + + * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/cs.po, po/da.po, po/de.po, po/el.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.6 + + * Makefile.am: parse.h no longer exists, so don't try to distribute it. + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.2.5 + + * imap/imap.c, imap/imap_private.h, imap/message.c: + Use UIDs instead of sequence numbers in IMAP. (Brendan) + +Fri Jul 28 18:57:31 2000 Thomas Roessler + + * Makefile.am: parse.h no longer exists, so don't try to distribute it. + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.2.5 + + * imap/imap.c, imap/imap_private.h, imap/message.c: + Use UIDs instead of sequence numbers in IMAP. (Brendan) + +Fri Jul 28 18:51:38 2000 Thomas Roessler + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.2.5 + + * imap/imap.c, imap/imap_private.h, imap/message.c: + Use UIDs instead of sequence numbers in IMAP. (Brendan) + + * imap/imap.c, imap/imap_private.h, imap/message.c, imap/message.h, imap/command.c, mutt.h, muttlib.c, mx.c: + Handle expunged messages. From Brendan Cully. + +Wed Jul 26 09:30:01 2000 Thomas Roessler + + * doc/manual.sgml.head: Nits from Michael Sobolev. + +Tue Jul 25 16:35:48 2000 Thomas Roessler + + * Makefile.am: Include the muttbug wrapper with the distribution. + + * doc/Makefile.in: Install muttbug.man als flea.1. + + * doc/muttbug.man, doc/mutt.man, main.c, Makefile.am, muttbug: + Install muttbug(1) as flea(1), and adjust the documentation + accordingly. Note: Typing muttbug will still work. + + * doc/muttbug.man: More tiny fixes. + + * doc/muttbug.man: + Fix some typos. In particular, it's bug tracking system, not buck + tracking system. Oh well. + + * doc/Makefile.in, doc/muttbug.man, doc/mutt.man: + muttbug(1) has a manual page of it's own now. + + * muttbug.sh.in: Fix a little bug concerning version numbers. + + * Makefile.am: The warning about README.UPGRADE can go. + + * doc/mutt.man: Mention the bug tracking system. + + * INSTALL: + Mention that mutt needs an iconv implementation, and point users to + libiconv. + + * INSTALL: Mention OpenBSD + + * Makefile.am: Remove types.h at "make clean" time. + + * curs_main.c: Fix a segmentation fault in the index. + + * curs_main.c: Try to fix a segmentation fault in the index. + +Mon Jul 24 07:48:53 2000 Thomas Roessler + + * browser.h: + make bit types unsigned. From albert chin . + + * curs_lib.c, hdrline.c, help.c, mbyte.c, mbyte.h, menu.c: + Replace wctomb and mbtowc with wcrtomb and mbrtowc. From TAKIZAWA + Takashi , with small changes from Edmund + Grimley Evans. + +Sun Jul 23 21:47:01 2000 Thomas Roessler + + * menu.c: Fix #108, from Gero Treuner. + + * configure.in, resize.c: sys/ioctl.h vs. ioctl.h. From Sam Roberts. + + * rfc2231.c: + Fix an obvious bug which prevented rfc2231 _encoding_ support from + working. + +Sat Jul 22 09:01:43 2000 Thomas Roessler + + * configure.in, mutt.h: Some more QNX compiling aides. + +Fri Jul 21 07:32:12 2000 Thomas Roessler + + * imap/md5.h, checktypes.c, Makefile.am: + Try to be smart about integer types. + + * imap/imap.c: Fix imap_passive. From Brendan Cully. + + * contrib/Makefile.in: Fix #150. From Brendan Cully. + +Thu Jul 20 17:51:52 2000 Thomas Roessler + + * doc/devel-notes.txt: Typo. + + * imap/browse.c, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/util.c, mutt_socket.c, mutt_socket.h, mx.c, pop.c: + Another IMAP patch from Brendan. + + * imap/util.c: quick hack against mx->mbox being NULL. + + * imap/BUGS, imap/imap.c, imap/imap.h, imap/util.c, postpone.c: + patch-bac.postpone-2 + + * pop.c: Use shared socket code, from Vsevolod Volkov. + +Wed Jul 19 10:21:57 2000 Thomas Roessler + + * po/POTFILES.in, imap/Attic/imap_socket.h, imap/Attic/socket.c, imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_ssl.c, imap/imap_ssl.h, imap/Makefile.am, imap/message.c, imap/util.c, acconfig.h, account.c, account.h, browser.c, configure.in, gettext.c, globals.h, init.c, init.h, Makefile.am, mutt_socket.c, mutt_socket.h: + IMAP socket moves by Brendan Cully, with a fix from Tommi + Komulainen, and most likely based on input from Vsevolod Voykov + (sp?). + + * imap/util.c: + Fix more possible IMAP memory corruption. From Brendan Cully. + + * imap/util.c: + Fix possible memory corruption in stable. From Brendan Cully. + + * imap/Attic/socket.c, imap/imap_private.h, imap/message.c, imap/imap.c: + Backport various IMAP bug-fixes to stable. From Brendan Cully. + +Tue Jul 18 14:38:13 2000 Thomas Roessler + + * imap/Attic/socket.c, imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c: + More IMAP clean-up from Brendan Cully. + + * imap/Attic/socket.c, imap/imap.c, imap/imap_private.h, imap/message.c, imap/utf7.c: + IMAP fixes from Brendan Cully. + + * init.h: Documentation fix. + +Mon Jul 17 18:08:27 2000 Thomas Roessler + + * imap/message.c: Fix possible heap corruption. From Brendan Cully. + + * imap/utf7.c: Name changes left out by EGE's patch. + + * imap/util.c, imap/imap_private.h: imap/UTF7 related fixes from EGE. + + * curs_main.c: Fix #192. + +Sun Jul 16 15:35:14 2000 Thomas Roessler + + * imap/browse.c, imap/imap.c, imap/imap_private.h, imap/Makefile.am, imap/message.c, imap/utf7.c, imap/util.c: + Support modified UTF-7 in folder names. From Edmund Grimley Evans, + modified by Brendan Cully. + + * handler.c: Another qp fix. + + * handler.c: + More qp decoder modifications: We should handle multibyte characters + spanning soft line breaks. + + * handler.c: + Rewrite the quoted-printable decoder so it properly chops off + trailing white space. Problem noted by Byrial Jensen. + +Sat Jul 15 06:51:47 2000 Thomas Roessler + + * imap/Attic/socket.c: Add a message that we are looking up a host. + +Fri Jul 14 15:03:43 2000 Thomas Roessler + + * imap/message.c, imap/message.h: Brendan's latest IMAP changes. + + * README.SSL: + Tommi Komulainen's entropy gathering patch - documentation. + +Wed Jul 12 14:17:46 2000 Thomas Roessler + + * po/cs.po: update. + + * imap/imap_ssl.c: Entropy gathering fixes. + + * configure.in: Re-apply the iconv patch from vvv. + + * configure.in: undo the enable-external-dotlock patch. + + * handler.c: + Initialize a variable in order to avoid a segmentation fault. From + Aaron Schrab. + +Tue Jul 11 20:38:49 2000 Thomas Roessler + + * imap/Attic/socket.c, imap/imap.c, imap/imap_private.h: + Unify logout stuff in _one_ function. From Vsevolod Volkov. + + * imap/message.c: + Disable a bug work-around which actually breaks things. + + * configure.in: Typo, noted by Brad . + +Mon Jul 10 19:52:12 2000 Thomas Roessler + + * main.c: Typo. + + * po/id.po: update. + + * rfc2047.c: + Fix some possible NULL pointer deferences in the RFC2047 code. + + * imap/Attic/socket.c, imap/command.c, imap/imap.c, imap/message.c, browser.c, pgpkey.c, pop.c, query.c, remailer.c: + Fix a bunch of cases where format parameters were missing from calls + to mutt_message and mutt_error. + + * imap/command.c, imap/imap.c, imap/message.c, browser.c, pgpkey.c, pop.c, query.c, remailer.c: + [stable] Fix a bunch of cases where format parameters were missing + to calls of mutt_error and mutt_message. + + * po/ru.po, po/de.po, po/da.po: update. + + * po/da.po: Update. + + * acconfig.h, charset.c, configure.in, INSTALL, main.c: + Some changes from EGE. + +Fri Jul 7 15:12:37 2000 Thomas Roessler + + * po/fr.po: update + + * attach.c, Attic/parse.h, copy.c, editmsg.c, from.c, mbox.c, parse.c, pgp.c, protos.h: + Fix #185: is_from would return 0 (i.e., error) when parsing Jan 1 + 1970 12:00 - apparently, this point of time occurs on real mail + folders. + +Thu Jul 6 23:08:39 2000 Thomas Roessler + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/nl.po, po/pl.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/da.po, po/de.po, po/el.po, po/eo.po, ChangeLog, po/cs.po, VERSION: + automatic post-release commit for mutt-1.2.4 + + * muttlib.c: ups, this should be fixed in stable. + + * po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/cs.po, po/da.po, po/de.po, po/el.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.3.5 + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.2.3 + + * po/fr.po: update. + +Thu Jul 6 22:34:55 2000 Thomas Roessler + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/cs.po, po/da.po, po/de.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.2.3 + + * po/fr.po: update. + + * imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap_private.h, imap/imap_socket.h, imap/message.c, imap/socket.c: + More IMAP clean-up. + + * imap/imap_private.h, imap/imap_socket.h, imap/message.c, imap/socket.c, imap/util.c, imap/browse.c, imap/command.c, imap/imap.c: + More IMAP fixes from Brendan Cully. + +Wed Jul 5 14:39:14 2000 Thomas Roessler + + * imap/socket.c: Fix the Fix. From TK. + + * imap/imap_ssl.c, imap/socket.c: + From: Tommi Komulainen + + - imap_logout_all assumed every connection with descriptor value != + 0 to be ready for reading/writing. Unfortunately when the + descriptor was closed, conn->fd remained untouched. This is why + mutt segfaulted if IMAP login was aborted with ^G. + + - ssl_socket_close was called without calling ssl_socket_open first. + This caused a segfault because conn->sockdata was NULL. Apparently + there was also a memory leak, because conn->sockdata was never + free'd :-] + + * imap/auth.c, imap/BUGS, imap/imap.c, imap/socket.c, imap/TODO: + IMAP cosmetics from Brendan Cully. + +Tue Jul 4 17:59:10 2000 Thomas Roessler + + * doc/manual.sgml.head: + slight documentation imrpovement from Will Fiveash. + +Mon Jul 3 15:26:22 2000 Thomas Roessler + + * po/de.po: update + + * imap/BUGS, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_socket.h, imap/socket.c, imap/util.c, curs_main.c: + IMAP logout patch from Brendan Cully. + + * po/id.po: update + + * po/id.po: update. + + * rfc2047.c: "Where have all the headers gone" fix from EGE. + + * sendlib.c: utf8 -> utf8 fix (From EGE). + + * rfc2047.c: RFC 2047 patch from EGE. + +Fri Jun 30 08:28:56 2000 Thomas Roessler + + * po/pl.po: fix a format. + + * sendlib.c: Character set fix from EGE. + +Tue Jun 27 22:28:01 2000 Thomas Roessler + + * sendlib.c: minor change from EGE. + + * main.c, rfc2047.c: + Cosmetics. No, I didn't touch the word-wrap code. ;-) + +Mon Jun 26 23:10:26 2000 Thomas Roessler + + * muttlib.c: + Fix a possible segfault in mutt_expand_folder. Noted by AMK; [stable]. + + * muttlib.c: + Fix a possible segmentation fault in mutt_expand_path. Noted by + Andreas M. Kirchwitz. + + * doc/Makefile.in, contrib/Makefile.in: "make check" cosmetics. + + * contrib/sample.muttrc-tlr: update. + + * configure.in: Iconv detection patch. From Lars Hecking. + + * color.c: Fix #173. From Roland Rosenfeld. + +Thu Jun 22 23:18:36 2000 Thomas Roessler + + * muttlib.c: + Avoid crashing when forwarding message/rfc822-type attachments. + + * Makefile.am, prepare: Lars Hecking's build process patch for stable. + + * rfc822.c: Fix stack corruption in the RFC822 parser. Noted by Ari + Gordon-Schlosberg . + + * rfc822.c: + Fix stack corruption in the RFC822 parser. Problem noted by Ari + Gordon-Schlosberg . + + * recvattach.c: + Merge two almost-identical string constants. From Byrial. + +Wed Jun 21 19:23:23 2000 Thomas Roessler + + * imap/auth_gss.c: More debug code which needs #ifdefs. + + * imap/auth_gss.c: More debugging code which needs #ifdefs. + + * po/eo.po: update. + + * Makefile.am, prepare: + Work-around for keymap_defs and other dependency problems. From + Lars Hecking. + + * muttlib.c: Fix ~logname expansion for stable. + + * muttlib.c: Fix ~logname expansion. + + * README: Remove explicit list of mirrors, and refer to download.html. + + * mbox.c: Fix another mbox synch problem. + + * mbox.c: Fix another bug in mbox synching. + + * postpone.c: Some more character set cleanup,. + + * commands.c, compose.c, muttlib.c, pgpkey.c, postpone.c, protos.h, recvattach.c, send.c, sendlib.c: + More character set clean-up. + + * postpone.c: + Improve character set handling when postponing messages. This patch + may lead to information loss under very special circumstances. + + * muttlib.c, protos.h: Remove unused mutt_dup_body () function. + + * compose.c, pgpkey.c, protos.h, recvattach.c, send.c, sendlib.c: + Fix character set selection. Postponing and recalling messages + should work again, now. + + * postpone.c, sendlib.c: Fix a file descriptor leak in sendlib.c. + + * main.c: + patch-1.3.2.tbm.lastfolder, from Martin Michlmayr . + + * commands.c, hook.c, protos.h, recvattach.c, recvcmd.c, send.c: + Apply message-hook to more commands, and make it more useful by + permitting the "~h" and "~b" pattern specifiers. Bad enough, this + removes message-hook abilities from the receive-attachment menu. + +Tue Jun 20 22:23:37 2000 Thomas Roessler + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/it.po, po/ko.po, po/nl.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/el.po, po/eo.po, po/cs.po, po/da.po, po/de.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.2.2 + + * build-release: + Add a "make" call, so build-release will also work from a source + tree which hasn't been built recently. + + * commands.c: Do some comparisons case-insensitive. + + * po/ru.po: update. + + * doc/muttrc.man.head: s/display-hook/message-hook/ + + * po/de.po: + Fix a misleading fuzzy translation about PGP signature validity. + From Roland Rosenfeld. + + * imap/imap.c: Don't use debuglevel unless DEBUG is defined. Noted by + china@thewrittenword.com. + + * imap/imap.c: + Only use debuglevel if DEBUG is defined. Noted by Albert Chin + , + + * po/fr.po: update. + +Mon Jun 19 21:13:19 2000 Thomas Roessler + + * doc/devel-notes.txt, doc/manual.sgml.head, init.h, makedoc.c: + patch-1.3.3.bj.docref.1 + + * build-release: Make sure m4/Makefile is _really_ rebuilt. + + * po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/cs.po, ChangeLog, reldate.h, VERSION: + automatic post-release commit for mutt-1.2.1 + + * doc/manual.sgml.head: Fix some more mentions of display-hook. + + * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, ChangeLog, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h, VERSION: + automatic post-release commit for mutt-1.3.4 + + * compose.c: No need to include iconv.h. + + * po/da.po: update. + + * po/ru.po: update + +Mon Jun 19 08:56:57 2000 Thomas Roessler + + * compose.c: No need to include iconv.h. + + * po/da.po: update. + + * po/ru.po: update + +Sat Jun 17 08:07:36 2000 Thomas Roessler + + * imap/imap_ssl.c: Certificate verification fix from Tommi Komulainen. + + * imap/imap_ssl.c: SSL fix. + + * po/ru.po: upate + +Fri Jun 16 10:21:34 2000 Thomas Roessler + + * OPS, commands.c, compose.c, functions.h, mutt.h, sendlib.c: + patch-1.3.3.tlr.change_charset.1 + + * po/ru.po: nit. + +Thu Jun 15 21:37:07 2000 Thomas Roessler + + * doc/manual.sgml.head, doc/muttrc.man.head, commands.c, hook.c, init.h, mutt.h, recvcmd.c, send.c: + patch-1.3.3.tlr.message_hook.1 + + * mutt.h, sendlib.c: patch-1.3.3.tlr.content_info.1 + + * imap/imap.c: shut up the compiler. + + * po/ru.po, commands.c, init.h: nits. + + * commands.c, globals.h, init.h: patch-1.2.bbell.display_filter.2. + + * complete.c: + patch-1.3.2.bbell.complete.1 - autocomplete "!", which is helpful + in certain IMAP contexts. + + * copy.c, mbox.c, mh.c, mx.c: + [stable] Prevent data corruption when the temporary space runs full. + Backport from unstable. + + * po/el.po, po/fr.po: updates. + + * po/ru.po: update. + + * rfc2047.c, sendlib.c, copy.c, handler.c: + Avoid dumping core when Charset isn't set. + + * init.h: Little documentation fix from Aaron Schrab. + +Wed Jun 14 09:23:45 2000 Thomas Roessler + + * OPS, charset.c, charset.h, compose.c, functions.h, handler.c: + Remove recode-attachment, and the "decoder" API. (EGE) + + * gettext.c: Make sure --disable-nls works. (EGE) + +Tue Jun 13 20:36:33 2000 Thomas Roessler + + * init.h, mutt.h, sendlib.c: EGE's latest send-charset patch. + + * m4/curslib.m4: + New file, contains Tom Dickey's CF_CURSES_LIBS macro from lynx. + + * configure.in: + Use CF_CURSES_LIBS macro for better detection of platform-specific + curses libraries. From Lars Hecking. + + * main.c: Inform us about ICONV_NOTRANS. From EGE. + + * configure.in: iconv detection. From EGE. + + * commands.c: + Only display PGP signature verification status if verification was + tried. + +Mon Jun 12 07:02:42 2000 Thomas Roessler + + * configure.in: A new check for working wchar functions. + +Sun Jun 11 19:05:12 2000 Thomas Roessler + + * mh.c, mx.c: + Fix some issues with synching of maildir/mh folders. Problems noted + by Byrial Jensen. + +Fri Jun 9 17:42:14 2000 Thomas Roessler + + * pattern.c: + Force decimal parsing on dates, so 09 is parsed as 9, and not as + "invalid". + + * imap/imap_ssl.c: Fix a mix-up. + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, VERSION, po/cs.po, po/da.po, ChangeLog, reldate.h: + automatic post-release commit for mutt-1.3.3 + +Fri Jun 9 11:34:26 2000 Thomas Roessler + + * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, + po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, + po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, + po/pt_BR.po, po/cs.po, reldate.h, ChangeLog: automatic + post-release commit for mutt-1.3.3 + + * po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, + po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, + po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, + po/pt_BR.po, VERSION, po/cs.po, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.3.3 + + * charset.c, init.c: Fix some typos in the nl_langinfo stuff. + +Fri Jun 9 05:51:33 2000 Thomas Roessler + + * charset.c, init.c: Fix some typos in the nl_langinfo stuff. + + * rfc2047.c: Latest patch from EGE. + +Thu Jun 8 21:44:14 2000 Thomas Roessler + + * copy.c, mbox.c: + This patch should fix the mailbox corruption various people observed. + + * charset.c, charset.h, init.c: + Fix up the value returned by nl_langinfo(CODESET). + + * mbox.c: Improve error reporting with mbox folders a bit. + + * send.c: patch-1.2.bj.ed_mtime.1 + + * Makefile.am, acconfig.h, configure.in, main.c, mbyte.c: + Removing the built-in charset support. + + * doc/muttrc.man.head: one-character typo. + + * imap/imap_ssl.c: + Fix #157. From Enrik Berkhan . + + * imap/imap_ssl.c: + [stable] Fix #157. From Enrik Berkhan . + + * README.SSL, init.h, mutt.h, imap/imap_ssl.c: + [stable] patch-1.3.2.tl.sslcerts.1. + + * charset.c: + Don't return data on the stack. Noted by "Andrew W. Nosenko" + . + + * po/sv.po: update. + +Sun Jun 4 18:18:56 2000 Thomas Roessler + + * doc/manual.sgml.head: Nits from Mikko Hänninen. + +Fri Jun 2 10:05:41 2000 Thomas Roessler + + * imap/imap.h, pgp.c: Fix #152. + +Tue May 30 12:52:41 2000 Thomas Roessler + + * po/pl.po: update + +Mon May 29 22:34:12 2000 Thomas Roessler + + * rfc2047.c, rfc2047.h, send.c, sendlib.c: + Edmund's latest RFC2047 encoding update. + +Sun May 28 20:32:05 2000 Thomas Roessler + + * commands.c: + Don't bother the user with messages about PGP signature verification + when there is no PGP stuff about the message. + + * README.SSL, init.h, mutt.h: + SSL certificate verification fixes from Tommi Komulainen. + + * imap/imap_ssl.c: + SSL certificate verification fix from Tommi Komulainen. + + * imap/command.c: + [stable] Handle connection take-down by servers more graciously. + From Patrick Caulfield. + + * doc/manual.sgml.head, contrib/pgp2.rc, contrib/pgp5.rc, commands.c, init.h, pgp.c, pgp.h: + Modified version of Byrial Jensen's signature verification patch. + +Thu May 25 12:21:29 2000 Thomas Roessler + + * pgp.c: Use strftime for time indications with PGP verification. + + * curs_lib.c, mbyte.c: Somewhat different sigsegv fix suggested by EGE. + + * mbyte.c: wctomb(0,wc) is needed to work for bounds checking. + + * mutt.h: Include stdlib.h from mutt.h. + + * makedoc.c, init.h: Minor fixes from Byrial. + + * doc/manual.sgml.head: typo. + + * doc/devel-notes.txt, init.h, makedoc.c: + Documentation beautification patch from Byrial Jensen. Thanks! + +Wed May 24 19:20:07 2000 Thomas Roessler + + * po/ru.po: Fixes #143. + + * po/ru.po: Some fixes - #143. + + * charset.c, charset.h, compose.c, gnupgparse.c: + Make charset-hook work with an external iconv implementation. + + * imap/command.c: + Handle disconnects more gracefully. From Patrick Caulfield + . + + * config.guess, config.sub: + [stable] Latest versions from ftp.gnu.org/pub/gnu/config + + * config.guess, config.sub: + Latest versions from ftp.gnu.org/pub/gnu/config. + +Tue May 23 17:16:46 2000 Thomas Roessler + + * po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, ChangeLog, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, reldate.h: + automatic post-release commit for mutt-1.3.2 + + * contrib/gpg.rc: Make this work on QNX. + + * contrib/gpg.rc: + Change suggested by Sam Roberts to make this + work on QNX. + +Tue May 23 08:15:02 2000 Thomas Roessler + + * contrib/gpg.rc: Make this work on QNX. + + * contrib/gpg.rc: + Change suggested by Sam Roberts to make this + work on QNX. + +Mon May 22 16:15:35 2000 Thomas Roessler + + * po/pl.po: update + + * rfc2047.c: Fix a stupid segmentation fault. + + * lib.c: cosmetics. + + * rfc2047.c: Fix a memory leak. + + * charset.c, lib.c, lib.h, protos.h: Add mutt_str_adjust (). + + * parse.c: Fix a possible cause for heap corruption. + + * po/de.po: update. + + * charset.c, gettext.c: Make mutt_gettext () a bit more compact. + +Sun May 21 18:45:15 2000 Thomas Roessler + + * mbyte.h: Small fix from EGE. + + * sendlib.c: + Some fixes so ISO-2022-JP* works with mutt. Mostly from TAKIZAWA + Takashi . + + * muttlib.c: Comment a bit of code. + +Sat May 20 18:16:18 2000 Thomas Roessler + + * po/fr.po: update. + + * charset.c, charset.h, curs_lib.c, rfc2047.c, rfc2231.c: + String conversion patch from EGE. + + * doc/manual.sgml.head, hook.c: + Second version of Byrial's display-hook patch. + + * po/uk.po, po/zh_TW.Big5.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, ChangeLog, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, reldate.h: + automatic post-release commit for mutt-1.3.1 + + * doc/muttrc.man.head: Document display-hook in the manual page. + + * commands.c, hook.c, init.h, mutt.h, protos.h, send.c: + Add a display-hook command. From Byrial Jensen. + + * alias.c, browser.c, init.c, lib.c, mutt.h, muttlib.c, protos.h: + Add mutt_gecos_name function which centrally handles the GECOS + processing. + + * imap/imap.c: + Shut up some warnings. We may have to think about mutt_stristr again. + + * configure.in: + Verify that regmatch_t has offsets, and not only pointers. From Sam + Roberts . + + * configure.in: + Don't look for curses in /usr/5lib any more - this broke things for + some people. + + * configure.in: + Don't look for the curses library in /usr/5lib any more. This broke + things for some people. + + * sendlib.c: + Real fix for the pointer problem noted by Heiko Schlichting. + + * sendlib.c: + Fix a "string on stack returned" bug found by Heiko Schlichting. + +Sat May 20 07:53:50 2000 Thomas Roessler + + * doc/muttrc.man.head: Document display-hook in the manual page. + + * commands.c, hook.c, init.h, mutt.h, protos.h, send.c: + Add a display-hook command. From Byrial Jensen. + + * alias.c, browser.c, init.c, lib.c, mutt.h, muttlib.c, protos.h: + Add mutt_gecos_name function which centrally handles the GECOS + processing. + + * imap/imap.c: + Shut up some warnings. We may have to think about mutt_stristr again. + + * configure.in: + Verify that regmatch_t has offsets, and not only pointers. From Sam + Roberts . + + * configure.in: + Don't look for curses in /usr/5lib any more - this broke things for + some people. + + * configure.in: + Don't look for the curses library in /usr/5lib any more. This broke + things for some people. + + * sendlib.c: + Real fix for the pointer problem noted by Heiko Schlichting. + + * sendlib.c: + Fix a "string on stack returned" bug found by Heiko Schlichting. + +Fri May 19 07:36:42 2000 Thomas Roessler + + * hdrline.c: Fix %. formats. From EGE. + +Thu May 18 17:06:59 2000 Thomas Roessler + + * copy.c, parse.c, rfc2047.c, rfc2047.h, rfc2231.c, send.c, sendlib.c: + rfc2047_decode change from EGE. + + * charset.c: Catch a segmentation fault in mutt_convert_string (). + + * acconfig.h: Don't enable debugging by default in the stable branch. + + * configure.in, main.c: + More debugging output, and a warning in configure.in. + + * main.c: + Tell us something about internal iconv and CHARMAPS_DIR from mutt -v. + +Wed May 17 12:39:16 2000 Thomas Roessler + + * mkjtags.c: handle ^L lines correctly. + + * mkjtags.c: Some beautifications. + + * Makefile.am, mkjtags.c: + Add a little tool to help with building tags files my editor groks. + + * handler.c: + When displaying a deleted attachment's information, present the file + name if it is present. Suggested by Pete Wenzel . + + * imap/imap_ssl.c: SSL certificate check fix. From Tommi Komulainen. + + * imap/imap_ssl.c: Certificate check fix, from Tommi Komulainen. + + * OPS, enter.c, functions.h: + Add forward-word and backward-word functions to the editor. + + * OPS, enter.c, functions.h: + Add a kill-eow function to the line editor. + + * init.c: Small fix to mutt_set_default(). + +Tue May 16 19:01:50 2000 Thomas Roessler + + * Makefile.am: + We don't need to build in the charmaps/ directory unless we use the + included iconv. + + * compose.c, mutt.h, protos.h, sendlib.c: + Some fixes to the size calculation code. + + * compose.c, globals.h, init.h, sendlib.c: + A modified version of Will Fiveash's compose format patch. + + * acconfig.h, configure.in, init.c, init.h: + Use nl_langinfo's return value as the default for $charset. + + * init.c: + More default setting. This can easily be done much cleaner than the + last version of the patch. + + * init.c: Hack: mutt_restore_default() now stores the latest value of a + variable as it's default if there was no default before. The code + in question is executed precisely once: when mutt_restore_default() is + invoked from mutt_init(). + + * hook.c, lib.c, lib.h, muttlib.c, protos.h: + Let _mutt_expand_path escape regular expression special characters. + For stable. + + * hook.c, lib.c, lib.h, muttlib.c, protos.h: + mutt_expand_path is now able to escape special characters for use in + regular expressions. This is needed to make folder-hooks work like + intended. + + * muttlib.c: Sanitize file names passed to mutt_adv_mktemp. + + * muttlib.c: Sanitize file name suggestions passed to mutt_adv_mktemp. + + * doc/manual.sgml.tail, OPS, enter.c, functions.h: + Add a transpose-character function to the editor. From Aaron Schrab. + + * configure.in: + Improve the wchar_t checks. From "Andrew W. Nosenko" . + +Mon May 15 12:00:53 2000 Thomas Roessler + + * configure.in, mbyte.c, pager.c: More iconv-related patches from EGE. + +Sat May 13 17:39:03 2000 Thomas Roessler + + * configure.in: + HP/UX vs. ANSI C. From Lars Hecking and Albert Chin. [stable] + + * configure.in: + Configuration for ANSI C / HP/UX. From albert chin and Lars Hecking. + +Fri May 12 13:41:34 2000 Thomas Roessler + + * mbyte.c, wcwidth.c: Make things compile. ;-) + + * mbyte.c, mbyte.h, wcwidth.c: + Isprint-related changes. Suggested by Andrew Nosenko, adapted by EGE. + + * gettext.c: Replacing some more free() calls by safe_free(). + + * iconv/iconv.c, acconfig.h, configure.in, curs_lib.c, gettext.c, help.c, mbyte.c, mbyte.h, mutt.h, pager.c, wcwidth.c: + wide-character related patches. From Edmund Grimley Evans. + + * configure.in: HP/UX -Ae detection. From Albert Chin. [stable] + + * configure.in: + Improve the HP/UX check for the -Ae command line parameter. From + albert chin (china@thewrittenword.com). + + * gen_defs: Make sure gen_defs returns success. [stable] + + * gen_defs: + Sam Roberts reports that some shells do strange things with exit + states. + + * doc/manual.sgml.head: + Fix $spool vs. $spoolfile. From David Ellement. + + * iconv/.cvsignore: Ignore Makefile.in, Makefile, and .deps. + +Thu May 11 07:10:32 2000 Thomas Roessler + + * doc/mutt.man: Remove some unnecessary spaces. + + * doc/mutt.man, main.c: + Fix usage information. Noted by Mikko Hänninen. + + * acconfig.h, configure.in, globals.h: + Check volatility of sig_atomic_t. + +Wed May 10 18:02:31 2000 Thomas Roessler + + * configure.in: Support for old Kerberos versions. From David Champion + . + + * configure.in: Fix support for old Kerberos libraries. + + * hdrline.c, thread.c: + updated messages-in-thread (%e) patch from Markus Holmberg. + + * po/pl.po: update. + + * init.h, mutt.h, pop.c: + Fix a segmentation fault introduced by the change of pop_delete to a + quad option. + + * po/fr.po: Update the French translation. + +Tue May 9 20:19:28 2000 Thomas Roessler + + * parse.c: more mailtool brain-damage support. + + * acconfig.h, configure.in, parse.c: + Sun mailtool message support. The format is ugly, but the patch is + reasonably clean. + + * Makefile.am: include mbyte.h with the distribution. + + * doc/devel-notes.txt: Add a word about format flags. + + * imap/message.c: Make the X-Label patch work over IMAP. + + * po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.3 + + * hdrline.c, init.h, protos.h, thread.c: + Add a %e option for thread-relative message numbers. From Markus + Holmberg . + + * doc/manual.sgml.head, hdrline.c, init.h, mutt.h, parse.c, pattern.c: + X-Label header support from David Champion . + + * init.h, pop.c: Make pop_delete a quad-option. From Honza Pazdziora + . + + * VERSION: + Ups, we should leave the version file on 1.2, so the diff will get + built properly when I release 1.3. + + * iconv/Makefile.am, iconv/iconv.c, iconv/iconv.h, lib.h, mbyte.c, mbyte.h, menu.c, muttlib.c, pager.c, pgppubring.c, protos.h, rfc2047.c, rfc2231.c, sendlib.c, utf8.c, wcwidth.c, Makefile.am, VERSION, charset.c, charset.h, commands.c, compose.c, configure.in, curs_lib.c, curs_main.c, enter.c, gettext.c, gnupgparse.c, hdrline.c, help.c, init.c: + Edmund Grimley Evans' UTF-8 patch. + + * po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.2 + + * build-release: unstable branch. + + * build-release: start preparing 1.2. + +Tue May 9 15:51:54 2000 Thomas Roessler + + * hdrline.c, init.h, protos.h, thread.c: + Add a %e option for thread-relative message numbers. From Markus + Holmberg . + + * doc/manual.sgml.head, hdrline.c, init.h, mutt.h, parse.c, pattern.c: + X-Label header support from David Champion . + + * init.h, pop.c: Make pop_delete a quad-option. From Honza Pazdziora + . + + * VERSION: + Ups, we should leave the version file on 1.2, so the diff will get + built properly when I release 1.3. + + * iconv/Makefile.am, iconv/iconv.c, iconv/iconv.h, lib.h, mbyte.c, mbyte.h, menu.c, muttlib.c, pager.c, pgppubring.c, protos.h, rfc2047.c, rfc2231.c, sendlib.c, utf8.c, wcwidth.c, Makefile.am, VERSION, charset.c, charset.h, commands.c, compose.c, configure.in, curs_lib.c, curs_main.c, enter.c, gettext.c, gnupgparse.c, hdrline.c, help.c, init.c: + Edmund Grimley Evans' UTF-8 patch. + + * po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.2 + + * build-release: unstable branch. + + * build-release: start preparing 1.2. + +Wed May 3 07:48:46 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, ChangeLog, VERSION, po/cs.po: + automatic post-release commit for mutt-1.1.14 + + * po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, ChangeLog, VERSION, po/cs.po, reldate.h: + automatic post-release commit for mutt-1.1.13 + +Wed May 3 06:44:22 2000 Thomas Roessler + + * po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/da.po, + po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, + po/id.po, po/it.po, po/ko.po, po/nl.po, po/pl.po, + po/pt_BR.po, po/ru.po, ChangeLog, VERSION, po/cs.po, + reldate.h: automatic post-release commit for mutt-1.1.13 + +Sun Apr 30 06:58:21 2000 Thomas Roessler + + * imap/message.c: + Catch the case that an IMAP server sends "\n\n" after a mail header. + Diagnosed by Brendan. + +Sun Apr 30 06:58:21 2000 Thomas Roessler + + * imap/message.c: + Catch the case that an IMAP server sends "\n\n" after a mail header. + Diagnosed by Brendan. + +Sat Apr 29 13:38:05 2000 Thomas Roessler + + * query.c: + Fix a possible segmentation fault with the external query feature. + + * imap/imap.c: + Fix the "empty screen after sync" bug observed with certain versions + of the Courier IMAP server. From Brendan Cully. + +Wed Apr 26 17:43:00 2000 Thomas Roessler + + * imap/util.c: Fix the imap_force_ssl option. + + * po/da.po: update. + + * contrib/pgp6.rc: + Fix a little typo. Noted by Steve Brewer . + + * imap/imap_ssl.c, imap/imap_ssl.h, imap/util.c, init.h, mutt.h: + Add a new option named imap_force_ssl. + +Tue Apr 25 18:39:01 2000 Thomas Roessler + + * acconfig.h, configure.in: Revised version of Lars' patch. + + * m4/funcdecl.m4: + New macros CF_CHECK_FUNCDECL, CF_CHECK_FUNCDECLS, CF_UPPER. These + are slightly modified versions of T. E. Dickey's macros from the + lynx distribution. (From Lars Hecking.) + + * configure.in: + Use new CF_CHECK_FUNCDECLS macro for curses functions. This should + catch function declarations and macros alike. Due to a misfeature in + autoheader, we have to explicitly AC_DEFINE the curses functions. + (From Lars Hecking.) + + * acconfig.h: + acconfig.h: Remove duplicate VERSION and unused HAVE_GETOPT_DECL. + Remove DEBUGGER (it's AC_SUBST'ed, not AC_DEFINE'd). Add defines for + curses functions. (From Lars Hecking.) + + * po/it.po: update. + +Mon Apr 24 13:10:11 2000 Thomas Roessler + + * imap/util.c: + Fix a segmentation fault with folder completion. From Brendan. + + * imap/message.c: + Fall back to INTERNALDATE when Date header isn't present. From + Brendan. + +Sat Apr 22 18:34:29 2000 Thomas Roessler + + * po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, ChangeLog, VERSION, po/cs.po, po/da.po, po/de.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/it.po, reldate.h: + automatic post-release commit for mutt-1.1.12 + + * doc/manual.sgml.head: + Add a link to http://www.mutt.org/download.html. + + * init.c, init.h, thread.c: + Handle sort_aux="threads" somewhat different, and probably more + safely. Problem and principle of fix noted by Gero Treuner and + Michael Tatge . + + * lib.c: Coda compatibility. From Jan Harkes . + + * parse.c: + Fix message parsing. This fixes the "Reply-To in body" bug. From + Edmund GRIMLEY EVANS. + + * doc/manual.sgml.tail: Fix the sgmltools URL. From Martin Michlmayr. + + * charset.c, editmsg.c, extlib.c, gnupgparse.c, lib.c, lib.h, pgpinvoke.c, pgpkey.c, pgplib.c, pgppubring.c, recvcmd.c, remailer.c, rfc2231.c, rfc2231.h: + Comment cosmetics. From Martin Michlmayer. + + * doc/manual.sgml.head: + Document the elmish "!!" shortcut for the last folder. From Martin + Michlmayr . + + * curs_main.c, pager.c: + Fix various inconsistencies with respect to thread deletion. + +Sat Apr 22 09:33:46 2000 Thomas Roessler + + * doc/manual.sgml.head: + Add a link to http://www.mutt.org/download.html. + + * init.c, init.h, thread.c: + Handle sort_aux="threads" somewhat different, and probably more + safely. Problem and principle of fix noted by Gero Treuner and + Michael Tatge . + + * lib.c: Coda compatibility. From Jan Harkes . + + * parse.c: + Fix message parsing. This fixes the "Reply-To in body" bug. From + Edmund GRIMLEY EVANS. + + * doc/manual.sgml.tail: Fix the sgmltools URL. From Martin Michlmayr. + + * charset.c, editmsg.c, extlib.c, gnupgparse.c, lib.c, lib.h, pgpinvoke.c, pgpkey.c, pgplib.c, pgppubring.c, recvcmd.c, remailer.c, rfc2231.c, rfc2231.h: + Comment cosmetics. From Martin Michlmayer. + + * doc/manual.sgml.head: + Document the elmish "!!" shortcut for the last folder. From Martin + Michlmayr . + + * curs_main.c, pager.c: + Fix various inconsistencies with respect to thread deletion. + +Wed Apr 12 16:32:26 2000 Thomas Roessler + + * browser.c: Initialize some more memory. Noted by Vsevolod Volkov + . + + * headers.c: Catch some error conditions. + + * main.c: Tell us whether debugging is enabled or not. + +Sun Apr 9 13:32:36 2000 Thomas Roessler + + * po/sv.po: Update. + + * imap/imap_ssl.c: Another file mode change. + + * po/fr.po, po/es.po, po/el.po: update. + + * imap/imap_ssl.c: + Save more than one SSL certificate to the certificate file. + + * po/da.po, po/cs.po: update. + + * imap/socket.c: Make host name comparison case-insensitive. + + * doc/manual.sgml.head: + Minor typo in the documentation. Noted by Vsevolod Volkov + . + + * muttlib.c: + The "!!" shortcut had another flaw. Noted by Martin Michlmayr + . + + * imap/BUGS: Documentation patch from Brendan Cully. + + * pattern.c: Fix ^ and ! pattern modifiers. + +Fri Mar 31 12:37:21 2000 Thomas Roessler + + * po/pl.po, po/id.po: update. + +Thu Mar 30 15:33:14 2000 Thomas Roessler + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/ko.po, po/it.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/es.po, po/el.po, po/da.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.1.11 + + * po/uk.po, po/zh_TW.Big5.po, po/sv.po, po/sk.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/ko.po, po/id.po, po/it.po, po/gl.po, po/fr.po, po/es.po, po/eo.po, po/el.po, po/de.po, po/da.po, po/Makefile.in.in, po/POTFILES.in, po/cs.po: + make update-po, and undo most parts of Lars' and Tommi's patch - it + broke things here. + +Thu Mar 30 15:16:22 2000 Thomas Roessler + + * po/uk.po, po/zh_TW.Big5.po, po/sv.po, po/sk.po, + po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/ko.po, + po/id.po, po/it.po, po/gl.po, po/fr.po, po/es.po, po/eo.po, + po/el.po, po/de.po, po/da.po, po/Makefile.in.in, + po/POTFILES.in, po/cs.po: make update-po, and undo most + parts of Lars' and Tommi's patch - it broke things here. + + * imap/imap_ssl.c: Typo, noticed by Vsevolod Volkov . + + * po/de.po: update. + + * po/eo.po: fix. + + * contrib/Makefile.in: Distribute pgp6.rc. Ups. + + * po/uk.po: Updated Ukrainian translation. + + * curs_main.c: Cursor cosmetics. From Byrial. + + * contrib/Makefile.in: + Installation process patch from Bill Nottingham . + + * build-release: Explicitly use scp1. + +Wed Mar 29 20:16:36 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/sv.po, po/uk.po, po/sk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/ko.po, po/nl.po, po/id.po, po/it.po, po/gl.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/da.po, po/cs.po, VERSION, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.1.10 + + * imap/message.c: Fix access to read-only folders via IMAP. + +Wed Mar 29 20:03:32 2000 Thomas Roessler + + * imap/message.c: Fix access to read-only folders via IMAP. + + * po/de.po, doc/Makefile.in, doc/manual.sgml.head, init.c, thread.c: + Various little patches from Gero Treuner. + + * imap/Makefile.am, Makefile.am: Build diff from Brendan Cully. + +Tue Mar 28 10:09:19 2000 Thomas Roessler + + * po/Makefile.in.in, po/POTFILES.in, Makefile.am: + A patch from Tommi Komulainen (and Lars Hecking) for building + outside the source directory. + +Mon Mar 27 23:56:35 2000 Thomas Roessler + + * imap/auth_gss.c, imap/imap_ssl.c, acconfig.h, configure.in: + NetBSD portability patches from Brendan Cully. + +Sat Mar 25 18:22:09 2000 Thomas Roessler + + * keymap.c: + Timeout occasionally in menus, with the notable exception of the + editor. This is needed to avoid some more IMAP timeouts. + [patch-1.1.9.tlr.timeout.1] + +Thu Mar 23 12:21:10 2000 Thomas Roessler + + * remailer.c: Little fix for the remailer menu. + + * configure.in: + Fix Kerberos configuration. From David Champion . + +Wed Mar 22 08:24:45 2000 Thomas Roessler + + * mutt.h, sort.c, init.h: Sorting fix from Gero Treuner. + +Tue Mar 21 22:01:42 2000 Thomas Roessler + + * configure.in: + Fix charmap configuration. This was broken in configure.in,v 2.54. + +Mon Mar 20 10:32:18 2000 Thomas Roessler + + * muttlib.c: + Fix the "!!" shortcut for the last folder. Noted by Byrial Jensen. + + * po/da.po, po/eo.po: update + + * configure.in, Attic/Muttrc.head, Muttrc.head.in: + Put Muttrc.head under autoconf control - we need to substitute + @docdir@ for the macro to work. + +Sun Mar 19 09:19:30 2000 Thomas Roessler + + * po/nl.po: Fix some sloppiness errors. From Brendan Cully. + +Fri Mar 17 08:26:22 2000 Thomas Roessler + + * po/nl.po: update + + * rfc2047.c, sendlib.c: Don't override iso-2022-jp with us-ascii. + +Thu Mar 16 10:01:43 2000 Thomas Roessler + + * commands.c, init.h, mutt.h: Add the $print_decode option. + + * po/ru.po, po/sv.po: updates + + * po/it.po: update. + + * editmsg.c: + Use Editor with a fall-back to visual when editing messages. + + * muttlib.c: Localization nit from Byrial Jensen. + + * doc/manual.sgml.head, init.h: + Documentation fixes from Mikko Hänninen. + +Wed Mar 15 23:25:47 2000 Thomas Roessler + + * imap/imap_ssl.c, imap/imap_ssl.h, imap/socket.c, README.SSL, configure.in, init.h: + Fix entropy gathering in the IMAP SSL support. From Tommi Komulainen. + + * Makefile.am: Add a dependency for keymap_defs.h. Hope it works now. + + * po/da.po: update + +Tue Mar 14 21:05:00 2000 Thomas Roessler + + * po/pl.po, po/cs.po: updates. + + * configure.in: Fix a charmap configuration flaw. From Gero Treuner. + + * doc/Makefile.in: + Install all the documentation. Problem noted and fix supplied by + Gero Treuner. + + * po/es.po: Update from Boris Wesslowski. + + * base64.c: Add the original fetchmail copyright notice. + + * contrib/Makefile.in, contrib/pgp6.rc: + More nits: Include a sample configuration file for using mutt with + pgp6, and install and actually distribute Tin.rc. + +Mon Mar 13 22:36:56 2000 Thomas Roessler + + * makedoc.c, send.c, charset.h, init.h: + Various nits, noted by Gero Treuner. + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pt_BR.po, po/ru.po, po/pl.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/gl.po, po/es.po, po/fr.po, po/eo.po, po/el.po, po/da.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.1.9 + + * build-release: change code for going on-line. + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pl.po, po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/eo.po, po/es.po, po/fr.po, po/el.po, po/de.po, po/cs.po, po/da.po: + make update-po. + + * po/sv.po, po/fr.po: updates. + +Mon Mar 13 18:37:17 2000 Thomas Roessler + + * build-release: change code for going on-line. + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pl.po, + po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/gl.po, + po/id.po, po/it.po, po/eo.po, po/es.po, po/fr.po, po/el.po, + po/de.po, po/cs.po, po/da.po: make update-po. + + * po/sv.po, po/fr.po: updates. + +Fri Mar 10 11:38:32 2000 Thomas Roessler + + * handler.c: + Fix the handling of raw carriage return characters in the base64 + handler. + +Thu Mar 9 11:58:11 2000 Thomas Roessler + + * pgpinvoke.c: Bail on empty PGP formats. + + * po/ko.po: update. + +Wed Mar 8 18:08:03 2000 Thomas Roessler + + * imap/message.c: Another fix from Brendan Cully. + + * po/pl.po: update. + + * sendlib.c, parse.c: + Fix more RFC2047 encoding bugs. Once again from Gero Treuner + . + +Tue Mar 7 19:53:19 2000 Thomas Roessler + + * po/da.po, configure.in: + Adding a Danish translation. Thanks to Morten Bo Johansen + and the members of the sslug-locale mailing list, + see http://www.sslug.dk/emailarkiv/locale/. + + * color.c: + The uncolor/unmono commands weren't parsed correctly when not + applicable. This fixes bug#65. + + * makedoc.c: Make gcc happy. + + * TODO: Remove an old item from this list. From Brendan Cully. + + * sendlib.c, TODO, protos.h, send.c: + Correct header encodings when postponing messages. + + * po/de.po: update + + * po/pt_BR.po, po/el.po: updates. + + * curs_main.c: Fix NULL pointer deferences. + +Sat Mar 4 12:57:53 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/sv.po, + po/pt_BR.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, + po/it.po, po/id.po, po/gl.po, po/fr.po, po/eo.po, po/es.po, + po/el.po, po/de.po, po/cs.po, reldate.h, build-release, + VERSION, ChangeLog: automatic post-release commit for + mutt-1.1.8 + + * protos.h, send.c, alias.c, headers.c: Unify alias expansion. + +Sat Mar 4 08:40:53 2000 Thomas Roessler + + * protos.h, send.c, alias.c, headers.c: Unify alias expansion. + +Fri Mar 3 16:52:41 2000 Thomas Roessler + + * contrib/gpg.rc: + Don't use gpg-2comp by default, but leave the command lines using + this one there as comments. + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/pl.po, po/pt_BR.po, po/nl.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/id.po, po/el.po, po/eo.po, po/cs.po, po/de.po, imap/imap_ssl.c, imap/imap_ssl.h, imap/message.c, imap/message.h, imap/socket.c, imap/util.c, imap/auth.c, imap/auth_gss.c, imap/browse.c, imap/command.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_socket.h, doc/dotlock.man, doc/manual.sgml.head, doc/mutt.man, doc/muttrc.man.head, rfc822.h, score.c, send.c, sendlib.c, signal.c, sort.c, sort.h, status.c, system.c, thread.c, recvcmd.c, remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc2231.c, rfc2231.h, rfc822.c, pgpinvoke.c, pgpkey.c, pgplib.c, pgplib.h, pgppubring.c, pop.c, postpone.c, protos.h, query.c, recvattach.c, mx.h, pager.c, pager.h, parse.c, pattern.c, pgp.c, pgp.h, menu.c, mh.c, mime.h, mutt.h, mutt_curses.h, mutt_menu.h, mutt_regex.h, muttbug.sh.in, muttlib.c, mx.c, history.c, history.h, hook.c, init.c, init.h, keymap.c, keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, mapping.h, mbox.c, dotlock.h, edit.c, editmsg.c, enter.c, extlib.c, filter.c, flags.c, from.c, functions.h, globals.h, gnupgparse.c, handler.c, hash.c, hash.h, hdrline.c, headers.c, help.c, charset.c, charset.h, color.c, commands.c, complete.c, compose.c, copy.c, copy.h, curs_lib.c, curs_main.c, date.c, dotlock.c, COPYRIGHT, addrbook.c, alias.c, attach.c, attach.h, base64.c, browser.c, browser.h, buffy.c, buffy.h: + The FSF apparently has moved. + + * po/sv.po: Swedish translation. + + * imap/imap.h, imap/imap.c, commands.c, compose.c, curs_main.c, editmsg.c, mailbox.h, mbox.c, mh.c, mx.c, mx.h, pop.c, postpone.c, send.c, sendlib.c, attach.c: + Fix index updates when closing or synching mail folders fails. + There were some bug-fixes hidden in that code. + + * imap/message.c: More missing fclose (3) calls. + +Thu Mar 2 21:01:27 2000 Thomas Roessler + + * imap/imap_ssl.c, imap/message.c: + Fix a bunch of file descriptor leaks. + + * po/de.po: A one-character patch from Gero Treuner. + + * INSTALL, README.SSL: + Add some SSL documentation. From Tommi Komulainen. + + * mh.c, mx.c: + Fix incompatible return value checking. This should fix #29. + + * mutt.h, send.c, init.h: + Add $reverse_realname option. Essentially suggested by ws@rhein.de. + +Wed Mar 1 21:27:36 2000 Thomas Roessler + + * Muttrc.head: Fix #26: A little typo. + + * contrib/Makefile.in, contrib/sample.muttrc-tlr: + Add a commented version of my .muttrc as an example. + + * contrib/sample.muttrc: Fix some mail addresses. + + * README.UPGRADE: + Add some more documentation for users who are upgrading. This is + more precise than the NEWS file, but confined to the more notable + changes. + + * configure.in: Another fix from Tommi Komulainen. + + * po/eo.po, po/id.po, po/de.po: update. + + * imap/util.c: Don't crash with NULL Context pointers. + + * po/fr.po: Update. + + * doc/dotlock.man, doc/mutt.man: + dotlock is called mutt_dotlock for quite some time now. + + * po/sk.po, po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pt_BR.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/ko.po, po/el.po, po/eo.po, po/es.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.1.7 + + * imap/command.c, init.h, mutt.h, README.SECURITY, configure.in: + Add $imap_servernoise option to suppress IMAP server messages. From + Brendan Cully. + + * imap/Makefile.am: Include auth_gss.c with the distribution. + +Wed Mar 1 00:12:14 2000 Thomas Roessler + + * imap/command.c, init.h, mutt.h, README.SECURITY, configure.in: + Add $imap_servernoise option to suppress IMAP server messages. From + Brendan Cully. + + * imap/Makefile.am: Include auth_gss.c with the distribution. + +Tue Feb 29 22:40:46 2000 Thomas Roessler + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/pl.po, po/it.po, po/fr.po, po/gl.po, po/id.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.1.6 + + * po/zh_TW.Big5.po, po/sv.po, po/uk.po, po/sk.po, po/ru.po, po/pt_BR.po, po/nl.po, po/pl.po, po/ko.po, po/gl.po, po/id.po, po/it.po, po/es.po, po/fr.po, po/el.po, po/eo.po, po/cs.po, po/de.po: + Some updates; make update-po. + + * charset.c: + Add error checking to the recode-attachment code. From "Andrew W. + Nosenko" . + + * configure.in: + Replace --enable-ssl by --with-ssl. From Tommi Komulainen. + + * imap/imap.c, mx.c, curs_main.c: + More IMAP folder update hacks. Brendan says it works. + +Tue Feb 29 22:34:07 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/sv.po, po/uk.po, po/sk.po, po/ru.po, + po/pt_BR.po, po/nl.po, po/pl.po, po/ko.po, po/gl.po, + po/id.po, po/it.po, po/es.po, po/fr.po, po/el.po, po/eo.po, + po/cs.po, po/de.po: Some updates; make update-po. + + * charset.c: Add error checking to the recode-attachment + code. From "Andrew W. Nosenko" . + + * configure.in: + Replace --enable-ssl by --with-ssl. From Tommi Komulainen. + + * imap/imap.c, mx.c, curs_main.c: + More IMAP folder update hacks. Brendan says it works. + +Mon Feb 28 18:06:35 2000 Thomas Roessler + + * doc/manual.sgml.head: Martin Michlmayr told me about a typo. + + * imap/imap.h, imap/util.c, menu.c, pager.c: + New IMAP keep-alive code. This should work from all menus, and it + should always poll the current folder. + + * menu.c, pager.c: Do IMAP keep-alive polls from all menus. + + * curs_main.c, pager.c: + Don't do Context updates from the background, part 2. + + * imap/imap.h, imap/imap_private.h, imap/util.c, imap/command.c, imap/imap.c: + Don't do Context updates from the background. + +Sun Feb 27 08:49:34 2000 Thomas Roessler + + * po/POTFILES.in: + imap/auth_gss.c was missing. Noted by "Andrew W. Nosenko" + . + +Sat Feb 26 18:14:24 2000 Thomas Roessler + + * Makefile.am: + muttbug is a script, not a program. Tell automake about this. + + * mx.c: Don't use an uninitialized string for error reporting. + + * imap/browse.c: Fix a segmentation fault. Patch from Brendan Cully. + +Fri Feb 25 08:57:05 2000 Thomas Roessler + + * .cvsignore: ignore muttbug{,.sh} + + * Makefile.am: Tell users about README.UPGRADE. + +Thu Feb 24 21:34:10 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/ru.po, po/pt_BR.po, po/pl.po, po/ko.po, po/nl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/es.po, po/cs.po, po/de.po, po/el.po, po/eo.po, reldate.h, ChangeLog, VERSION: + automatic post-release commit for mutt-1.1.5 + + * main.c: Fix #52, from Mikko.Hanninen@iki.fi. + +Thu Feb 24 21:25:49 2000 Thomas Roessler + + * main.c: Fix #52, from Mikko.Hanninen@iki.fi. + +Wed Feb 23 13:26:03 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pl.po, + po/pt_BR.po, po/ru.po, po/nl.po, po/id.po, po/it.po, + po/ko.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, + po/cs.po, po/de.po: New German translation; make update-po. + + * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, + po/pt_BR.po, po/ru.po, po/ko.po, po/nl.po, po/pl.po, + po/fr.po, po/gl.po, po/id.po, po/it.po, po/eo.po, po/es.po, + po/Makefile.in.in, po/cs.po, po/de.po, po/el.po: Fix some + dependency, and do update-po again. Also, Edmund Evans + submitted a new Esperanto translation. + + * mx.c: safe_fclose() doesn't like FILE pointers. + + * mx.h, mx.c: Don't core dump when locking a folder fails. + +Tue Feb 22 19:22:29 2000 Thomas Roessler + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/ru.po, + po/pl.po, po/pt_BR.po, po/ko.po, po/nl.po, po/id.po, + po/it.po, po/fr.po, po/gl.po, po/el.po, po/eo.po, po/es.po, + po/de.po, po/cs.po: update-po. + + * po/ko.po: New Korean translation from . + + * muttbug.sh.in: Fix bug#42: A missing "'". + + * main.c: Cosmetic fix from Marco d'Itri. + + * imap/browse.c, browser.c, doc/manual.sgml.head: + Brendan Cully's latest IMAP browser fixes. + +Fri Feb 18 10:56:24 2000 Thomas Roessler + + * muttlib.c: + In mutt_copy_body(), we also need to strdup() the content-description. + + * imap/command.c: + Reasonably handle suerfluous EXIST messages from IMAP servers. From + Brendan Cully. + +Thu Feb 17 18:22:27 2000 Thomas Roessler + + * send.c: + Fix content-description encoding - it was done after signing, not + before signing. + + * sendlib.c, attach.c, mx.c, pop.c: + Do more error checking when writing messages to folders. + +Wed Feb 16 17:29:33 2000 Thomas Roessler + + * send.c: Fix mail-followup-to generation. + + * sendlib.c: + Don't output empty header fields. This is made necessary by the + addition of possibly empty my_hdr commands. + + * init.c: Permit empty my_hdrs. Suggested by Edmund Grimley Evans. + + * po/cs.po: update. + + * pattern.c, protos.h, send.c: + Generate mail-followup-to headers which contain the user's mail + address when sending messages to _known_ mailing lists. + + * po/de.po: update. + +Tue Feb 15 22:26:39 2000 Thomas Roessler + + * po/fr.po: update. + + * po/eo.po: New translation from Edmund Grimley. + + * OPS: Fix a typo. + + * globals.h: Increase the size of ErrorBuf. + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/pl.po, po/ru.po, po/sk.po, po/id.po, po/it.po, po/ko.po, po/nl.po, po/eo.po, po/es.po, po/fr.po, po/gl.po, po/cs.po, po/de.po, po/el.po, VERSION, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.1.4 + + * doc/manual.sgml.head: + Add improved documentation for the "push" command, and macros. From + Byrial Jensen, based on a patch by Mikko Hanninen. + + * functions.h: Fix the function on the pager. + + * doc/manual.sgml.head, doc/muttrc.man.head, hook.c, init.c, init.h, protos.h: + Byrial Jensen's unhook command patch. + + * doc/Makefile.in: + Remove superfluous empty lines from the text version of the manual. + + * OPS: + Change the documentation string for OP_MAIN_PREV_UNDELETED - it may + be confusing. + + * functions.h, keymap.c: More OP_EXIT fixes. + + * OPS, functions.h, keymap.c, pager.c: + Remove the OP_PAGER_EXIT opcode, and change it to OP_EXIT. + + * doc/manual.sgml.head: Add more documentation for subscribe and lists. + +Tue Feb 15 08:59:41 2000 Thomas Roessler + + * doc/manual.sgml.head: + Add improved documentation for the "push" command, and macros. From + Byrial Jensen, based on a patch by Mikko Hanninen. + + * functions.h: Fix the function on the pager. + + * doc/manual.sgml.head, doc/muttrc.man.head, hook.c, init.c, init.h, protos.h: + Byrial Jensen's unhook command patch. + + * doc/Makefile.in: + Remove superfluous empty lines from the text version of the manual. + + * OPS: + Change the documentation string for OP_MAIN_PREV_UNDELETED - it may + be confusing. + + * functions.h, keymap.c: More OP_EXIT fixes. + + * OPS, functions.h, keymap.c, pager.c: + Remove the OP_PAGER_EXIT opcode, and change it to OP_EXIT. + + * doc/manual.sgml.head: Add more documentation for subscribe and lists. + +Mon Feb 14 20:51:37 2000 Thomas Roessler + + * init.h: Fix documentation for $followup_to. + + * po/de.po: + Fix the fixes. Folks, when submitting changes to the .po files, + please try a "make" in the po subdirectory afterwards. + + * po/it.po: New Italian translation from Marco d'Itri. + + * imap/imap.c, imap/Makefile.am, imap/auth.c, imap/auth_gss.c, imap/browse.c, doc/manual.sgml.head, mx.c, .cvsignore, Makefile.am, browser.c, browser.h, configure.in: + Brendan Cully's patch from <20000212185021.A7365@xanadu.kublai.com>. + + * po/de.po: Fixes from Roland Rosenfeld. + + * attach.c, compose.c: + Fix a couple of random perror() calls and related problems. + + * sendlib.c: Fix encoding for text/* attachments with long lines. + +Fri Feb 11 09:04:22 2000 Thomas Roessler + + * contrib/Pine.rc: Fix bug #23. + + * init.h, makedoc.c: + Fix minor documentation problems noted by Marius Gedminas + . + +Thu Feb 10 19:46:13 2000 Thomas Roessler + + * imap/message.c, pager.c, parse.c, pattern.c, pgp.c, pgp.h, pgpkey.c, pgplib.h, postpone.c, protos.h, recvattach.c, send.c, sendlib.c, sort.h, functions.h, globals.h, handler.c, hdrline.c, headers.c, hook.c, init.c, init.h, keymap.c, keymap.h, main.c, mutt.h, muttlib.c, mx.c, Makefile.am, acconfig.h, attach.c, commands.c, compose.c, configure.in, copy.c, copy.h, curs_main.c: + PGP-cleanup patch from Roland Rosenfeld. Thanks! + + * muttbug.sh.in: + ${prefix} should be defined, as it may be used by autoconf. + +Wed Feb 9 18:28:45 2000 Thomas Roessler + + * doc/manual.sgml.head: Fix a minor typo. From Mikko Hänninen. + + * muttbug.sh.in: Mostly Debian-related fixes from Roland Rosenfeld. + + * main.c: Small translation-related fix from Roland. + + * po/fr.po: Update from Vincent Lefevre. + + * pgpewrap: + Portability patch to make pgpewrap work under HP/UX. From David + Ellement . + + * doc/Makefile.in, doc/manual.sgml.head, doc/manual.sgml.tail, init.h: + Documentation changes from Roland Rosenfeld. + +Tue Feb 8 20:55:33 2000 Thomas Roessler + + * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/ru.po, po/ko.po, po/nl.po, po/pl.po, po/fr.po, po/gl.po, po/id.po, po/it.po, po/de.po, po/el.po, po/eo.po, po/es.po, build-release, po/cs.po, reldate.h, Makefile.am, VERSION, ChangeLog: + automatic post-release commit for mutt-1.1.3 + + * build-release: + Don't build US releases. RedHat and Caldera don't object, Debian + uses the international version anyways, and SuSE (1) sits in Germany + and (2) doesn't react. + +Tue Feb 8 20:34:51 2000 Thomas Roessler + + * build-release: + Don't build US releases. RedHat and Caldera don't object, Debian + uses the international version anyways, and SuSE (1) sits in Germany + and (2) doesn't react. + +Tue Feb 8 20:34:51 2000 Thomas Roessler + + * build-release: + Don't build US releases. RedHat and Caldera don't object, Debian + uses the international version anyways, and SuSE (1) sits in Germany + and (2) doesn't react. + + * contrib/pgp2.rc: add a comment concerning +encrypttoself. + + * pager.c, keymap.c: Avoid IMAP timeouts when viewing messages. From + Tommi.Komulainen@iki.fi. + + * po/eo.po: Small fix from Edmund. + +Mon Feb 7 19:16:41 2000 Thomas Roessler + + * doc/manual.sgml.head: Add a note on my_hdr when used from send-hook. + + * muttbug.sh.in: + Remove another Debian reference from the severity level descriptions. + + * muttbug.sh.in: More fixes. + + * muttlib.c, protos.h, rfc2047.c, rfc2231.c: Fix bug#22. + + * muttbug.sh.in: Various fixes from Roland Rosenfeld. + + * buffy.c: Fix a NULL pointer deference. + +Thu Feb 3 13:41:38 2000 Thomas Roessler + + * acconfig.h, configure.in, muttbug.sh.in: + Add debugger support to muttbug. + + * init.c: Add a comment concerning muttbug.sh. + + * muttbug.sh.in: + More changes to the bug report script. Most of them were suggest by + Roland Rosenfeld. + + * po/de.po: Minor fixes from Roland Rosenfeld. + + * muttbug.sh.in: Add some Debian specifics. + + * muttbug.sh.in: Strip comments from included configuration files. + + * muttbug.sh.in: another minor fix. + + * muttbug.sh.in: Minor fixes. + + * Makefile.am, configure.in, main.c, muttbug.sh.in: + Add muttbug, the bug reporting utility. (Yes, we are about to get a + real bug-tracking system, see http://bugs.guug.de/.) + + * doc/manual.sgml.head: Documentation fix. + +Wed Feb 2 10:53:28 2000 Thomas Roessler + + * init.c: Make the parsing of integers more + + * lib.c: Use O_NOFOLLOW when it's there, and needed. + +Tue Feb 1 18:47:49 2000 Thomas Roessler + + * main.c: Cosmetics. + + * doc/mutt.man, doc/muttrc.man.head: + Cosmetics. Additionally, remove the y2k compliance notice from the + manual page. + + * makedoc.c: + Change the font used for typesetting "tables", so we get usable + output when roffing the muttrc (5) manual page for a postscript + printer. + + * po/zh_TW.Big5.po, po/sk.po, po/sv.po, po/uk.po, po/pl.po, po/ru.po, po/ko.po, po/nl.po, po/gl.po, po/id.po, po/it.po, po/el.po, po/eo.po, po/es.po, po/fr.po, po/cs.po, po/de.po: + Include various po-file updaes, and make update-po. + + * po/Makefile.in.in, po/POTFILES.in, Makefile.am: + Build fix for the po/ subdirectory, from Edmund G. Evans. + + * po/eo.po: New Esperanto translation. + + * init.h: Add a bit more documentation on $recall. + +Sun Jan 30 13:35:22 2000 Thomas Roessler + + * po/sv.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/nl.po, po/pl.po, po/id.po, po/it.po, po/ko.po, po/es.po, po/fr.po, po/gl.po, po/eo.po, po/POTFILES.in, po/cs.po, po/de.po, po/el.po, po/Makefile.in.in, configure.in: + Try to fix the build process in the po/ subdirectory. + + * configure.in: Add some languages to ALL_LINGUAS. + + * po/gl.po, po/sv.po: Adding translations from stable to unstable. + + * po/ru.po, po/zh_TW.Big5.po, po/fr.po, po/id.po, po/ko.po, po/pl.po, po/de.po, po/el.po, po/eo.po: + make update-po; including new revisions submitted so far. + +Sat Jan 29 08:03:48 2000 Thomas Roessler + + * init.h: Another change to attach_format. + + * pgp.c, recvattach.c, send.c, sendlib.c, OPS, compose.c, functions.h, init.h, mutt.h, parse.c: + Michael Elkins' content-disposition patch, with some small changes. + +Fri Jan 28 21:32:47 2000 Thomas Roessler + + * init.h: + Make the documentation for rfc2047_parameters comprehensible to the + end user. + + * init.h: Documentation fix. + + * rfc2231.c: RFC2231 support should understand utf-8. + +Thu Jan 27 09:57:09 2000 Thomas Roessler + + * imap/imap_ssl.c, README.SSL, init.h, mutt.h: + Add options to disallow individual SSL protocols. From Jeremy Katz + . + +Tue Jan 25 21:21:10 2000 Thomas Roessler + + * imap/BUGS, imap/README, imap/TODO, imap/command.c, imap/imap.c, imap/message.c: + Brendan Cully's latest changes: + + Here is a patch to add some support for read-only IMAP folders. + This is most useful if you have multiple copies of mutt open, but + it also allows you to open a folder read-only and not have to + worry about flags getting changed. Toggling read-only still + doesn't work correctly - you may lose your 'N' flags if you open + a folder normally and switch to read-only. + + I've also decided to try using UID FETCH, although I'm not sure if + older IMAP servers support it, but then again I'm not sure if + anyone's using any really old IMAP servers. The main advantage is + in the case of multiple clients, where one client is deleting + messages and the other isn't getting notification. I'm + experiencing that on my UW-IMAP 4.6 server. On the other hand, + this server seems to have all sorts of terrible problems with this + scenario, so I'm not sure how well the code functions. It's a + two-line change so far, it's experimental, and it's the only IMAP + code in an #if 0 block... + + * doc/Makefile.in: + Make the build process work when sgmltools aren't present. From + Lawrence Greenfield . + + * imap/auth.c: + Fix GSSAPI support. From Lawrence Greenfield . + +Mon Jan 24 13:17:17 2000 Thomas Roessler + + * dotlock.h, mx.c, dotlock.c: Locking fix. + + * enter.c: patch-1.1.2.mg.autocomplete.1 - from Marius Gedminas + . + + * Makefile.am: small build process fix. + + * m4/Makefile.am.in: + Patch from Lars Hecking in order to build mutt cleanly under Solaris + 2.6. + + * doc/manual.sgml.head: + More list-reply documentation from Mikko.Hanninen@iki.fi. + + * init.h, mutt.h, rfc822.c: + Removing rewrite_uucp. There were too many objections against it. + + * init.h, mutt.h, rfc822.c: Adding the $rewrite_uucp option. + + * po/ru.po: update. + + * po/eo.po, configure.in: + Adding the Esperanto translation to unstable. From Edmund GRIMLEY + EVANS . + +Fri Jan 21 09:28:56 2000 Thomas Roessler + + * po/el.po: New greek translation. + + * po/id.po: updated translation. + +Thu Jan 20 17:35:41 2000 Thomas Roessler + + * po/pl.po: Updated polish translation. + + * contrib/Makefile.in, Makefile.am: + "make distclean" fixes from Marco d'Itri. + + * compose.c: Typo noted by edmundo@rano.org. + + * po/ko.po: Update. + + * send.c: Honor mail-followup-to when doing a list-reply. From + Mikko.Hanninen@iki.fi. + +Wed Jan 19 14:59:01 2000 Thomas Roessler + + * commands.c: + Don't move the index cursor after a failed attempt to save a + message. From Joe Orton . + + * po/de.po: New German translation for unstable, from Roland Rosenfeld. + + * pgp.c: Fiksing a speling mysdeik nodet by Michael Sobolev. ;-) + + * NEWS: Add a notice on display-toggle-weed. + + * doc/manual.sgml.head, doc/manual.sgml.tail, OPS, functions.h: + Rename display-headers to display-toggle-weed. + +Tue Jan 18 22:46:18 2000 Thomas Roessler + + * mx.c: mx_open_mailbox_append: Add an error message and remove a file + descriptor leak when we can open, but can't lock an MMDF or MBOX + folder. + + * po/zh_TW.Big5.po, po/uk.po, po/sv.po, po/sk.po, po/ru.po, po/pt_BR.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/gl.po, po/id.po, po/fr.po, po/eo.po, po/es.po, po/el.po, po/de.po, po/cs.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.0.1 + + * contrib/Makefile.in: + Respect $DESTDIR in contrib/Makefile. From Hao Li + . + + * imap/imap.c, imap/message.c: + Fix use of confirmcreate with IMAP. A patch for this was suggested + by Brian R. Gaeke. + + * init.h, alias.c: + Documentation fix about gecos_mask. From Will Fiveash. + +Sun Jan 16 14:44:12 2000 Thomas Roessler + + * po/eo.po: new esperanto translation from edmundo@rano.org. + + * editmsg.c: + Use Visual, not Editor, for editing messages. Noted by Marius + Gedminas . + + * rfc822.c: + quote-related fix to the RFC822 parser. From Edmund Grimley Evans. + +Wed Jan 12 09:20:34 2000 Thomas Roessler + + * init.c: + It was impossible to unset a string. If you did "unset realname" it + would just print out the value of the string. Attached is the fix. + +Mon Jan 10 21:34:06 2000 Thomas Roessler + + * reap.pl: Handle #ifndef in reap.pl. + + * configure.in: + Recognize differently-named gccs as such, and enable warnings. From + "Andrew W. Nosenko" . + + * pgp.c: + To compile on SunOs 4.1.4, the order of two includes needs to be + switched ( contains a struct timeval.) + + From Mark Seiden . + + * doc/manual.sgml.head, pgplib.h, postpone.c, recvattach.c, recvcmd.c, remailer.c, remailer.h, rfc2231.c, rfc2231.h, attach.c, charset.c, charset.h, dotlock.h, editmsg.c, extlib.c, gnupgparse.c, lib.c, lib.h, makedoc.c, mh.c, muttlib.c, mx.c, mx.h, pgp.h: + More copyright cosmetics - noted by Martin Michlmayr . + + * lib.c: Use safe_free() instead of free() with mutt_str_replace - + equivalent, but nicer. + + * parse.c, pgpkey.c, postpone.c, protos.h, recvattach.c, rfc1524.c, rfc2047.c, send.c, sendlib.c, attach.c, browser.c, compose.c, curs_main.c, edit.c, history.c, init.c, lib.c, main.c, menu.c, mh.c, muttlib.c: + Add (and use) a function mutt_str_replace, which essentially + replaces the sequence: + + safe_free (&s); + s = safe_strdup (t); + + * build-release, gnupgparse.c: + Fix PGP uid parsing. Noted by Edmund GRIMLEY EVANS + . + +Sat Jan 8 10:31:28 2000 Thomas Roessler + + * VERSION, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.1.2 + + * keymap.c: + Fix a macro-related segmentation fault in stable. From Byrial + Jensen. + + * keymap.c: + Fix a macro-related segmentation fault. From Byrial Jensen. + + * OPS, commands.c, compose.c, curs_main.c, functions.h, protos.h, recvattach.c: + Unified edit-type function for the index, compose, and + receive-attachment menus. Mostly by Michael Elkins. + + * curs_lib.c: patch-1.1.1.me.endwin.1, from Michael Elkins. + + * mutt.h, parse.c, init.h: Undo Michaels "pgpsearchext" patch. + +Sat Jan 8 09:40:02 2000 Thomas Roessler + + * keymap.c: + Fix a macro-related segmentation fault in stable. From Byrial + Jensen. + + * keymap.c: + Fix a macro-related segmentation fault. From Byrial Jensen. + + * OPS, commands.c, compose.c, curs_main.c, functions.h, protos.h, recvattach.c: + Unified edit-type function for the index, compose, and + receive-attachment menus. Mostly by Michael Elkins. + + * curs_lib.c: patch-1.1.1.me.endwin.1, from Michael Elkins. + + * mutt.h, parse.c, init.h: Undo Michaels "pgpsearchext" patch. + +Thu Jan 6 12:00:50 2000 Thomas Roessler + + * rfc2231.c, rfc2231.h, rfc822.c, rfc822.h, score.c, send.c, + sendlib.c, signal.c, sort.c, sort.h, status.c, system.c, + thread.c, pgplib.c, pgplib.h, pgppubring.c, pop.c, + postpone.c, protos.h, query.c, recvattach.c, recvcmd.c, + remailer.c, remailer.h, resize.c, rfc1524.c, rfc1524.h, + rfc2047.c, rfc2047.h, mh.c, mime.h, mutt.h, mutt_curses.h, + mutt_menu.h, mutt_regex.h, muttlib.c, mx.c, mx.h, pager.c, + pager.h, parse.c, pattern.c, pgp.h, pgpinvoke.c, keymap.c, + keymap.h, lib.c, lib.h, mailbox.h, main.c, makedoc.c, + mapping.h, mbox.c, menu.c, init.h, hash.h, hdrline.c, + headers.c, help.c, history.c, history.h, hook.c, init.c, + copy.h, curs_lib.c, curs_main.c, date.c, dotlock.c, + dotlock.h, edit.c, editmsg.c, enter.c, extlib.c, filter.c, + flags.c, from.c, functions.h, globals.h, gnupgparse.c, + handler.c, hash.c, attach.c, attach.h, browser.c, browser.h, + buffy.c, buffy.h, charset.c, charset.h, color.c, commands.c, + complete.c, compose.c, copy.c, addrbook.c, alias.c: Update + copyright notices for unstable. + + * Attic/socket.c, signal.c, sort.c, sort.h, status.c, + system.c, thread.c, query.c, recvattach.c, resize.c, + rfc1524.c, rfc1524.h, rfc2047.c, rfc2047.h, rfc822.c, + rfc822.h, score.c, send.c, sendlib.c, pattern.c, pgp.c, + pgpinvoke.c, pgpkey.c, pgppubring.c, pop.c, postpone.c, + protos.h, pager.h, parse.c, Attic/mutt_socket.h, menu.c, + mh.c, mime.h, mutt.h, mutt_curses.h, mutt_menu.h, + mutt_regex.h, mx.c, mx.h, pager.c, Attic/imap.h, init.c, + init.h, keymap.c, keymap.h, lib.c, mailbox.h, main.c, + mapping.h, mbox.c, Attic/imap.c, hash.c, hash.h, hdrline.c, + headers.c, help.c, history.c, history.h, hook.c, + curs_main.c, date.c, dotlock.c, dotlock.h, edit.c, enter.c, + filter.c, flags.c, from.c, functions.h, globals.h, + gnupgparse.c, handler.c, buffy.c, buffy.h, charset.c, + charset.h, color.c, commands.c, complete.c, compose.c, + copy.c, copy.h, curs_lib.c, addrbook.c, alias.c, attach.c, + attach.h, browser.c: Updat copyright notices in stable. + +Wed Jan 5 09:40:52 2000 Thomas Roessler + + * init.h, mutt.h, parse.c: + patch-1.1.1.me.pgpsearchtext.1. From Michael Elkins. + +Mon Jan 3 10:15:54 2000 Thomas Roessler + + * strcasecmp.c: New str*casecmp replacements for stable. + + * strcasecmp.c: + Fix strncasecmp and strcasecmp replacement functions. Problem noted + by Stu Heiss . + +Sat Jan 1 17:59:51 2000 Thomas Roessler + + * parse.c: y2k fix for 1.0. + + * parse.c: A y2k fix for those who still use two-digit year numbers as + originally specified in RFC 822. + +Wed Dec 29 18:38:07 1999 Thomas Roessler + + * po/zh_TW.Big5.po: + New Chinese translation; from Anthnoy Wong ; Dec + 21 1999. + + * sort.c: Fix a minor threading bug. From Edmund GRIMLEY EVANS + , Dec 14 1999. + + * browser.c: + Fix the use of link_is_dir() in the file browser. This should fix + the bug reported by John Yates on Dec 07 1999. + (Details noted by Byrial Jensen on Dec 09 1999.) + + * send.c: + Don't use IMAP folders for FCCs when sending messages in batch mode. + This is _not_ Brendan's patch, which may be included later. + +Tue Dec 14 10:29:25 1999 Thomas Roessler + + * INSTALL: + Add a short note that EXACT_ADDRESS is broken. In order to fix it, + we'd need a RFC 2047 implementation which knows about RFC 822 + syntax. (This would also help with In-Reply-To headers, BTW, but + would be considerably more complex.) + +Mon Dec 13 11:36:01 1999 Thomas Roessler + + * init.h, mutt.h, protos.h, send.c, sendlib.c: + Adding the envelope_from option. + +Thu Dec 9 11:17:35 1999 Thomas Roessler + + * imap/README, imap/auth.c, imap/browse.c, imap/imap.c, + imap/imap.h, imap/imap_private.h, imap/imap_socket.h, + imap/imap_ssl.c, imap/message.c, imap/socket.c, imap/util.c, + doc/manual.sgml.head, init.c, browser.c: Tommi Komulainen's + multiple IMAP usernames patch. + +Mon Dec 6 09:59:28 1999 Thomas Roessler + + * mbox.c: + Cosmetic improvement for reading mmdf folders. From John Hawkinson + . + +Sat Dec 4 15:42:07 1999 Thomas Roessler + + * mx.c: Check for the presence of .overview files when testing whether + some directory is an MH folder. This way, you can at least read + Usenet news from the spool using Mutt. ;-) + + * alias.c, init.h, mutt_regex.h: William Feavish's GECOS regexp patch. + +Fri Dec 3 16:54:03 1999 Thomas Roessler + + * doc/manual.sgml.head: + Fix the documentation on how to join the mutt lists. Noted by + Marius Gedminas . + + * init.h: Fix a small bug in the documentation for $hidden_host. + + * configure.in: Fix the handling of --disable configure switches. + + * configure.in: + patch-1.0.rr.autoconf-disable.1: --disable-pop shouldn't enable pop. + + * rfc2047.c: + Properly tag quoted-printable encoded RFC 2047 strings with + $send_charset, not with $charset. + + * Makefile.am, README, README.UPGRADE: + Adding one more readme file. This one is intended to serve as some + kind of "howto" for the most notable incompatible configuration + changes. + +Thu Dec 2 16:29:26 1999 Thomas Roessler + + * pgpkey.c: Fix the PGP key selection menu's title. + + * imap/imap_ssl.c: SSL fixes from Tommi Kommulainen. + + * NEWS: Announce edit-message and resend-message, and the changes in + recvcmd.c. + + * doc/manual.sgml.head: + Clarify the documentation of lists/unlists/subscribe/unsubscribe a + bit. + +Wed Dec 1 12:06:31 1999 Thomas Roessler + + * imap/util.c: Now, I should have got the signal handling right. + + * imap/util.c: + another alarm (0) was missing. (However, this one didn't crash mutt.) + + * imap/util.c: + imap_keepalive: cancel pending alarms. Otherwise, mutt will die + frequently. + + * imap/util.c: + Re-set the list of blocked signals after the imap_keepalive stuff. + + * imap/imap.h, imap/util.c, curs_lib.c, mutt.h, system.c: + A modified version of Tommi Kommulainen's imap keepalive patch. + +Fri Nov 26 09:19:03 1999 Thomas Roessler + + * imap/message.c: Fix the lines header. + +Thu Nov 25 15:18:02 1999 Thomas Roessler + + * imap/imap.h, imap/util.c, curs_lib.c, mutt.h, system.c: + Undo the IMAP keepalive patch. It has just bitten me while mutt was + trying to dotlock a folder. Seems that there needs some more work + to be done. + + * imap/imap.h, imap/util.c, mutt.h, system.c, curs_lib.c: + A modified version of Tommi Komulainen's imap keepalive patch. + +Wed Nov 24 16:29:58 1999 Thomas Roessler + + * NEWS: + Change some headlines: Instead of "major changes since ", it's "major changes since 1.0" now. In addition, I + changed the note concerning the lists/subscribe change to be more + explicit than the old one. + + * imap/message.c: IMAP line count fix from Tommi.Komulainen@iki.fi. + +Tue Nov 23 23:43:51 1999 Thomas Roessler + + * postpone.c: + mutt_prepare_template() didn't work with PGP-encrypted messages due + to an - errm - interesting typo. + + * doc/manual.sgml.head: + Document the fact that users can enter a mail-followup-to header in + the editor. There seems to have been some confusion about this. + + * doc/PGP-Notes.txt, acconfig.h, configure.in, pgp.c: + Disable core dumps before we ask the user for a pass phrase. + Suggested by . + + * doc/PGP-Notes.txt: Include the maildrop recipe Mark Weinem + sent me some weeks ago. + + * muttlib.c: Permit !! for the last folder. Elm compatibility. + + * NEWS: Tell our users that fcc_clear exists. + + * init.h, mutt.h, send.c: + Adding an fcc_clear option for unencrypted and unsigned FCCs. + + * imap/Makefile.am: Include the SSL-related code with "make dist". + +Mon Nov 22 16:01:42 1999 Thomas Roessler + + * imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, imap/BUGS, imap/README, imap/TODO, OPS, browser.c, functions.h, pgppubring.c: + IMAP folder creation and deletion. From Brendan Cully. + + * po/de.po: + Der Versuch, "Diskussionsfaden" durch etwas Verständlicheres zu + ersetzen. ;-) + +Thu Nov 18 16:19:35 1999 Thomas Roessler + + * init.h: Include SSL documentation in the manual. + + * dotlock.c: indentation noise. + + * imap/socket.c: Small code clean-up. + + * mx.c: + Detect .mew_cache files in MH folders. Suggested by Kawaguti Ginga + . + + * doc/manual.sgml.head: Documentation nit from Byrial Jensen. + + * lib.c: + patch-1.0.bj.lastline.1: Handle last lines in configuration files + nicely, even when they are not terminated by a \n character. + + * parse.c, rfc2231.c: Some rather cosmetic changes. + +Wed Nov 17 22:47:59 1999 Thomas Roessler + + * menu.c: some reorganizations of the dialog menu code. + + * alias.c: + Fix the address sanitizer. You should now be able to auto-create an + alias for someone like "Jon K. Hellan" . + + * imap/Makefile.am, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_socket.h, imap/imap_ssl.c, imap/imap_ssl.h, imap/message.c, imap/socket.c, imap/util.c, doc/manual.sgml.head, Makefile.am, NEWS, README.SSL, acconfig.h, configure.in, init.c, init.h, main.c, mutt.h: + Tommi Komulainen's IMAP/SSL support patches. + + * menu.c, mutt_menu.h: Tommi Komulainen's menu/dialog patch. + +Mon Nov 15 17:44:15 1999 Thomas Roessler + + * pgp.c: Fix the pgp-hook logic. + + * color.c: Small color fix from T. E. Dickey. + + * color.c: A small patch from TE Dickey. + +Thu Nov 11 18:30:25 1999 Thomas Roessler + + * rfc822.c: ups, the previous patch included a small buffer overflow. + + * po/Attic/gl.po: + Roberto Suarez Soto sent us a new translation. + + * rfc822.c: Fix a header quoting bug. + + * doc/Makefile.in: Another build process patch from Brendan Cully. + +Wed Nov 10 21:35:33 1999 Thomas Roessler + + * rfc2231.c: Ignore empty MIME parameters. + +Tue Nov 9 12:40:14 1999 Thomas Roessler + + * mbox.c, parse.c: Add some more sanity checks about content-length. + + * curs_lib.c: + Fix an SLang-related compilation problem. Originally from Jon Kåre + Hellan. + + * postpone.c: + Simplify mutt_prepare_template (). Instead of copying around all + kinds of data, we re-parse the postponed message's structure. + + * postpone.c: + Make sure mutt doesn't forget MIME structure when the user resends a + message/rfc822 body from the recvattach menu. Note, however, that + this is more of a temporary solution - I think there is some more + space for improvements in mutt_prepare_template(). + + * imap/Makefile.am, doc/Makefile.in, contrib/Makefile.in, configure.in, Makefile.am: + Build process fixes from Brendan Cully. + + * pager.c: Add a missing redraw after resend-message. + +Mon Nov 8 22:10:49 1999 Thomas Roessler + + * VERSION: + Undo changes which are due to release-building tests. After all, we + want the _right_ diff next time. + + * build-release: Finalize the new build-release script. + + * ChangeLog, VERSION, build-release: + automatic post-release commit for mutt-1.1.1.2 + + * Attic/LAST_TAG, Attic/OVERSION, Makefile.am, VERSION, build-release, ChangeLog: + automatic post-release commit for mutt-1.1.1.1 + + * Attic/LAST_TAG, Attic/OVERSION, Makefile.am: + Preparing some improvements to the build process. + +Mon Nov 8 21:56:29 1999 Thomas Roessler + + * Attic/LAST_TAG, Attic/OVERSION, Makefile.am, VERSION, + build-release, ChangeLog: automatic post-release commit for + mutt-1.1.1.1 + + * Attic/LAST_TAG, Attic/OVERSION, Makefile.am: + Preparing some improvements to the build process. + + NOTICE: You'll find a version 1.1.1.1 in the logs, and in + the CVS tags. This version is identical to 1.1.1, and + exculsively serves the purpose to test some improvements to + the release build process. + + * LAST_TAG, Makefile.am, OVERSION: + Preparing some improvements to the build process. + + * po/de.po, reldate.h, VERSION, ChangeLog: + automatic post-release commit for mutt-1.1.1 + +Sun Nov 7 22:52:40 1999 Thomas Roessler + + * sendlib.c: + short-cut utf-7 as a 7bit character set. Currently, utf-7 may be + overridden by us-ascii. + + * protos.h, recvattach.c, recvcmd.c, rfc1524.c, rfc1524.h, send.c, sendlib.c, attach.c, attach.h, browser.c, commands.c, compose.c, curs_main.c, functions.h, init.h, mutt.h, muttlib.c, pager.c, pager.h, postpone.c, Makefile.am: + Rewriting lots of the recvattach code. + + * po/Attic/eo.po: Esperanto translation from Edmund GRIMLEY EVANS + . + + * po/Attic/eo.po: + file eo.po was initially added on branch mutt-1-0-stable. + + * configure.in: Esperanto translation from Edmund GRIMLEY EVANS + . + +Fri Nov 5 07:28:11 1999 Thomas Roessler + + * pgppubring.c: preprocess out some unused strings. + +Thu Nov 4 21:35:32 1999 Thomas Roessler + + * rfc2231.c: + Catch a segmenatation fault. Note that this is not the real fix for + the problem... + + * menu.c: Change a short to an int where it should have been one. + + * po/Attic/gl.po: New version. + + * protos.h, send.c, status.c, buffy.c, globals.h, postpone.c: + IMAP postpone changes from Byrial Jensen. + +Wed Nov 3 20:30:19 1999 Thomas Roessler + + * recvattach.c: + Adding a comment which describes some ideas on how the attachment + menu should work. + +Tue Nov 2 15:51:07 1999 Thomas Roessler + + * imap/BUGS, imap/command.c, imap/imap.c, imap/imap_private.h, imap/message.c, imap/util.c, buffy.c: + Various IMAP-related fixes from Brendan Cully. + +Sun Oct 31 17:12:55 1999 Thomas Roessler + + * po/it.po: [stable] Small fix from Marco d'Itri. + + * m4/.cvsignore, intl/.cvsignore, imap/BUGS, imap/message.c, contrib/.cvsignore, charmaps/.cvsignore: + From Brendan Cully: IMAP updates should work properly again. + +Fri Oct 29 05:43:40 1999 Thomas Roessler + + * po/.cvsignore: Cosmetics. + + * imap/BUGS: Update the documentation. + + * doc/.cvsignore: Cosmetics. + + * buffy.c, globals.h, postpone.c, send.c, status.c: + Don't check the number of postponed messages every time the status + line is updated - this gets quite slow when used with slow IMAP + connections. + +Thu Oct 28 17:42:07 1999 Thomas Roessler + + * README: Fix the version number in the README file. + + * pop.c: Cosmetic POP fixes from Evan DiBiase . + + * pop.c: Cosmetic fixes from Evan DiBiase . + + * imap/imap_socket.h, imap/socket.c, init.h, globals.h: + Adding imap_preconnect. This way, you can let mutt start an ssh + tunnel before it tries to connect to an IMAP server. + + From: + +Wed Oct 27 12:17:34 1999 Thomas Roessler + + * po/Attic/gl.po: Adding a Galician translation. + + * po/Attic/gl.po: + file gl.po was initially added on branch mutt-1-0-stable. + + * configure.in: Adding a Galician translation. + +Tue Oct 26 15:14:01 1999 Thomas Roessler + + * curs_lib.c, main.c: Some display-related fixes from Andrej Gritsenko. + + * editmsg.c: + Fix a small bug in the new edit-message feature. From Andrej + Gritsenko. + + * imap/imap.c, imap/imap_private.h, imap/util.c, imap/auth.c, imap/browse.c, imap/command.c: + * stops mutt from logging CRAM secrets in debug mode. + * should fix mutt segfaulting when trying to open {} + * helps with the problem of mutt detecting new mail in the wrong + folder. Now, IMAP commands from the SELECTED state should call + imap_cmd_finish after they've executed commands. I've only put + this is imap_buffy_check for now - in my opinion the command + execution path is still not stable, and rewrites may obviate the + need for this... + + (From: Brendan Cully ) + +Mon Oct 25 20:05:14 1999 Thomas Roessler + + * po/Attic/sv.po: Adding the Swedish translation to stable. + + * po/Attic/sv.po: + file sv.po was initially added on branch mutt-1-0-stable. + + * configure.in: Adding the Swedish translation to stable. + + * po/de.po: Updated German translation from Roland Rosenfeld. + + * imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, imap/.cvsignore, imap/BUGS, imap/Makefile.am, imap/browse.c, imap/command.c, imap/imap.c, init.h: + Brendan Cully's IMAP code movements patch. + +Fri Oct 22 08:49:30 1999 Thomas Roessler + + * Makefile.am, VERSION, reldate.h, ChangeLog: + automatic post-release commit for mutt-1.1 + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/pt_BR.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, NEWS, VERSION, reldate.h, ChangeLog: + post-release commit for one dot zero. (yes, really.) + +Fri Oct 22 07:52:22 1999 Thomas Roessler + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/pt_BR.po, + po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, + po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, NEWS, + VERSION, reldate.h, ChangeLog: post-release commit for one + dot zero. (yes, really.) + +Thu Oct 21 08:07:22 1999 Thomas Roessler + + * compose.c: Another sprintf-vs-null issue. + +Wed Oct 20 14:51:57 1999 Thomas Roessler + + * po/id.po: new indonesian translation. + + * imap/message.c: + Flags should only be modified using mutt_set_flag(). Everything + else leads to neglected side effects. In this case, index colors, + searches and possibly other side effects were ignored when a message + which resides on an IMAP folder was read. + + * imap/auth.c: Let the user skip CRAM-MD5 by entering an empty secret. + + * po/id.po, po/el.po: translation updates. + + * configure.in: Don't use GNU grep specific options. + +Tue Oct 19 15:34:04 1999 Thomas Roessler + + * imap/auth.c: Fix some sloppiness-induced, but harmless, nonsense. + + * imap/imap_private.h, imap/auth.c, imap/imap.c: + Add AUTHENTICATE=ANONYMOUS support to the IMAP authentication + methods. This is, for instance, needed to access the cyrus-related + mailing lists' archives at CMU. + + * po/el.po: New greek translation. + +Mon Oct 18 09:13:42 1999 Thomas Roessler + + * pgp.c: Handle Ctrl-G on the pgp-hook prompt correctly. + +Sat Oct 16 15:19:29 1999 Thomas Roessler + + * Makefile.am: doc/PGP-Notes.txt vs. doc/PGP-Notes. + + * Makefile.am: [stable] doc/PGP-Notes.txt has an extension. ups. + + * send.c: [stable] Fix Debian bug #47408. + + * send.c: + Fix Debian bug #47408: When the postponed folder is a maildir, + messages should only be written to the _new_ subdirectory. + + * po/nl.po: New nl translation from Johan van Selst . + + * po/cs.po: + New cs translation from Jiri Pavlovsky . + + * po/zh_TW.Big5.po: + [stable] chinese translation fixes from Anthony Wong + . + + * init.h: scoring documentation fix. + + * globals.h, init.h, mutt.h, mx.c, protos.h, score.c, sort.c: + Scoring improvements. + +Thu Oct 14 16:09:10 1999 Thomas Roessler + + * po/ru.po: New Russian tranlation for stable. + + * contrib/gpg.rc: New gpg.rc from Roland Rosenfeld. + + * po/fr.po: [stable] New french translation. + + * po/de.po: [stable] Fixes to the German translation. + + * pattern.c: + [stable] Fix a segmentation fault when attempting to search + pgp-encrypted messages. + + * pattern.c: + Fix a segmentation fault when search PGP-encrypted messages. + +Mon Oct 11 20:26:41 1999 Thomas Roessler + + * VERSION, po/es.po, reldate.h, ChangeLog: + automatic post-release commit for mutt-0.96.8 + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog: + post-release commit for 1.0pre4. + + * po/zh_TW.Big5.po: New Chinese Translation. + + * dotlock.c: [stable] Use dotlock.c from unstable. + +Mon Oct 11 19:16:13 1999 Thomas Roessler + + * po/zh_TW.Big5.po: New Chinese Translation. + + * dotlock.c: [stable] Use dotlock.c from unstable. + +Wed Oct 6 20:20:54 1999 Thomas Roessler + + * Makefile.am: Makefile.am fix for unstable. + + * Makefile.am: + [stable] Check for mutt_dotlock in $(DESTDIR)$(bindir), not in + $(bindir). This should fix some Debian build problems. + + * init.h: fix the $from documentation. Noted by David DeSimone. + +Tue Oct 5 06:50:34 1999 Thomas Roessler + + * compose.c, mutt.h, recvattach.c: small fixes from Gero Treuner. + + * mutt.h, recvattach.c, compose.c: + [stable] small fixes from Gero Treuner. + +Mon Oct 4 10:05:26 1999 Thomas Roessler + + * configure.in: [stable] add pt_BR to ALL_LINGUAS. + + * configure.in: add pt_BR to ALL_LINGUAS. + + * po/pt_BR.po: Brasilian translation. + + * po/pt_BR.po: + file pt_BR.po was initially added on branch mutt-1-0-stable. + + * imap/BUGS, imap/Makefile.am, imap/README, imap/auth.c, imap/imap.c, imap/util.c, .cvsignore, mx.c: + Some fixes from Brendan Cully. + + * pgpewrap: pgpewrap spits out ugly error messages when used with ash. + + * configure.in: + AM_C_PROTOTYPES seems to be too recent for the installed + automake/autoconf base. + + * postpone.c: Remove some nonsense from the resend-message patches. + + * postpone.c: Fix a memory leak. + +Thu Sep 30 22:05:28 1999 Thomas Roessler + + * imap/message.c, send.c, sendlib.c, OPS, buffy.c, curs_main.c, functions.h, headers.c, main.c, mbox.c, mh.c, mutt.h, parse.c, parse.h, postpone.c, protos.h, recvattach.c: + Add a resend-message function (similar to the _old_ edit-message), + and redo large parts of mutt_prepare_edit_message (now + mutt_prepare_template). + + * main.c: unstable cosmetics. + + * main.c: [stable] cosmetic change suggested by marco d'itri. + + * po/es.po: New spanish translation from Boris Wesslowsky. + + * imap/Makefile.am, makedoc.c: Build fixes from Lars Hecking. + + * doc/Attic/manual.sgml.in, Attic/Muttrc.in, NEWS, globals.h, init.h, send.c: + [stable] Re-add in_reply_to, this time with the right default value. + + * sendlib.c: [unstable] fix the duplicate x-mailer/uesr-agent problem. + + * send.c, globals.h, init.h: + [unstable] Re-add in-reply-to. This time with a suitable default. #-\ + +Wed Sep 29 17:47:33 1999 Thomas Roessler + + * configure.in: More fixes from Lars Hecking. + + * configure.in: Adding AC_PREREQ to configure.in. + + * configure.in: + make sure the right software is used for building mutt. Patch + suggested by Lars Hecking and Will Fiveash. + + * pgpinvoke.c: + don't leak /dev/null file descriptors. From Roland Rosenfeld. + + * curs_main.c: fix^2 for stable. + + * curs_main.c: Fixing the fix - missing brackets. + + * curs_main.c, parse.c: + [stable] Fix some memory leaks noted by purify running on behalf of + Daniel Eisenbud. + + * curs_main.c, parse.c: + Fix some memory leaks noted by purify running on behalf of Daniel + Eisenbud. + +Tue Sep 28 18:55:31 1999 Thomas Roessler + + * po/ru.po: + Here goes an update for version 1.0-pre3i. The main feature of this + translation is that one-letter answers to multiple choice questions are not + localized (Thomas, could you please add this as comment to the update in CVS?) + + (From: Michael Sobolev.) + + * sendlib.c: [stable] Include SPACE and HT with MIME specials. + + * sendlib.c: [unstable] Include SPACE and HT with MimeSpecials. + + * Makefile.am: Better solution for the makedoc build using automake. + + * Makefile.am: + Some makes apparently have to be told about how to build makedoc. + +Mon Sep 27 17:55:14 1999 Thomas Roessler + + * copy.c: + A back-port from unstable had missed some parts which could lead to + message corruption with mh mail folders. + + * po/it.po: new Italian translation from Marco d'Itri. + + * po/pl.po: New polish translation. + + * po/de.po: Translation fix from Roland Rosenfeld. + + * doc/Attic/manual.sgml.in: Documentation fix from Roland Rosenfeld. + +Sat Sep 25 07:37:51 1999 Thomas Roessler + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po: + post-release commit for 1.0pre3. + + * VERSION, reldate.h, ChangeLog: pre-release commit for 1.0pre3. + +Fri Sep 24 17:51:55 1999 Thomas Roessler + + * po/uk.po, po/zh_TW.Big5.po, po/sk.po, po/pl.po, po/ru.po, po/it.po, po/ko.po, po/nl.po, po/fr.po, po/id.po, po/el.po, po/es.po, po/cs.po, po/de.po, ChangeLog, VERSION, reldate.h: + automatic post-release commit for mutt-0.96.7 + +Thu Sep 23 21:13:55 1999 Thomas Roessler + + * po/el.po: New Greek tranlsation from Fanis . + + * browser.c: [stable] Solaris snprintf vs. NULL pointers. + + * browser.c: + Try not to pass NULL pointers to snprintf - the Solaris version + doesn't like them. (Noted by Thomas.Parmelan@efrei.fr.) + + * imap/imap_private.h, imap/socket.c, imap/util.c, imap/BUGS, imap/imap.c, buffy.c: + Brendan Cully's latest changes: + + * includes all of my last patch, since it hasn't been committed yet. + * catches a couple segfault problems if Context is NULL. + * works harder to avoid sending null STORE FLAGS commands. May not + be perfect yet, but also has extra debugging code. + * has the beginnings of a more interactive IMAP error handler. + Doesn't do anything yet, I'm just including it because I want to + get the rest of the patch out. + + * doc/Makefile.in, Makefile.am: + Use $(MAKE) instead of make. Noted by Ryan Murray + . + + * doc/Makefile.in, Makefile.am, configure.in, init.h: + A small portability fix related to makedoc. + + * po/es.po: [stable] new spanish translation from Boris Wesslowski + . + + * alias.c: increase this limit for stable as well. + + * handler.c: + [stable] Fix a buffer overflow and a bug helping with exploiting this + overflow in the text/enriched handler. + + * handler.c: + Fix a buffer overflow and a bug helping with exploiting this + overflow in the text/enriched handler. + + * imap/browse.c, doc/manual.sgml.head, curs_main.c: This small patch: + + * catches a possible null-pointer dereference in mx_close_mailbox when + logging out of the server. + * fixes IMAP tab-completion cosmetics (slightly broken with last + Cyrus-compatibility updates) + * adds a bit to the IMAP part of the manual. + + Brendan Cully + + * alias.c: + Increase a buffer to make larger group aliases possible. The + current STRING buffer was far too small. + +Thu Sep 23 21:13:55 1999 Thomas Roessler + + * po/el.po: New Greek tranlsation from Fanis . + + * browser.c: [stable] Solaris snprintf vs. NULL pointers. + + * browser.c: + Try not to pass NULL pointers to snprintf - the Solaris version + doesn't like them. (Noted by Thomas.Parmelan@efrei.fr.) + + * imap/imap_private.h, imap/socket.c, imap/util.c, imap/BUGS, imap/imap.c, buffy.c: + Brendan Cully's latest changes: + + * includes all of my last patch, since it hasn't been committed yet. + * catches a couple segfault problems if Context is NULL. + * works harder to avoid sending null STORE FLAGS commands. May not + be perfect yet, but also has extra debugging code. + * has the beginnings of a more interactive IMAP error handler. + Doesn't do anything yet, I'm just including it because I want to + get the rest of the patch out. + + * doc/Makefile.in, Makefile.am: + Use $(MAKE) instead of make. Noted by Ryan Murray + . + + * doc/Makefile.in, Makefile.am, configure.in, init.h: + A small portability fix related to makedoc. + + * po/es.po: [stable] new spanish translation from Boris Wesslowski + . + + * alias.c: increase this limit for stable as well. + + * handler.c: + [stable] Fix a buffer overflow and a bug helping with exploiting this + overflow in the text/enriched handler. + + * handler.c: + Fix a buffer overflow and a bug helping with exploiting this + overflow in the text/enriched handler. + + * imap/browse.c, doc/manual.sgml.head, curs_main.c: This small patch: + + * catches a possible null-pointer dereference in mx_close_mailbox when + logging out of the server. + * fixes IMAP tab-completion cosmetics (slightly broken with last + Cyrus-compatibility updates) + * adds a bit to the IMAP part of the manual. + + Brendan Cully + + * alias.c: + Increase a buffer to make larger group aliases possible. The + current STRING buffer was far too small. + +Sun Sep 12 19:39:10 1999 Thomas Roessler + + * po/es.po: [stable] Updated spanish translation from Boris Wesslowski. + + * po/es.po: + [stable] Fixes for the Spanish translation. From Nicolás Lichtmaier + . + + * imap/BUGS, imap/Makefile.am, imap/TODO, imap/auth.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/util.c, buffy.c, commands.c, globals.h, init.h: + The attached patch (imap-turbocharge.diff): + + * changes mutt_buffy_check to only poll the selected folder when it + is opened, not all mailboxes (unless the timeout has expired). + This is a noticeable win if you have a few IMAP mailboxes. + + * sets the default checkinterval to 60 seconds from 0. Things are + much much slower with 0. + + * makes some cosmetic renames + + * moves lots of generic imap stuff into a separate file, imap/util.c + + * abstracts the process of sending a command to an IMAP server a bit + better (lots more to do here, though). + + * moves the message-set creation code used by the new fastdelete + code into its own function, since it is generally useful. + + * implements server-side copy of messages. Tagged messages are + copied in one command, thanks to the message-set function. Speedy! + + (From: Brendan Cully; modifications by tlr.) + +Sat Sep 11 17:04:12 1999 Thomas Roessler + + * po/pl.po: [stable] new polish translation from Pawel Dienkonski. + + * po/es.po: [stable] New Spanish translation from Boris Wesslowski. + + * configure.in: [stable] Hurd portability patch from Marcus Brinkmann. + + * configure.in: Hurd portability patch from Marcus Brinkmann. + + * imap/browse.c, imap/imap.c: Fix IMAP fast deletion. From Brendan. + + * Attic/Muttrc.in: typos fixed by Telsa. + + * doc/Attic/manual.sgml.in: + Small manual fix for stable. Noted by Telsa + . + +Wed Sep 8 06:05:54 1999 Thomas Roessler + + * imap/imap.c, imap/imap.h, imap/imap_private.h, mx.c, curs_main.c: + The attached patch: + + * gets Mutt to properly log off the IMAP server when quitting. Clients + don't care, but it's polite and proper. + * further updates the flags changes from yesterday + * uses CLOSE instead of EXPUNGE when closing a mailbox and purging + messages, for some slight speed gain. + * purges all messages marked for deletion in one command (if purging), + making for very cool speed gains switching mailboxes if you're on, + say, a few high volume mailing lists. Yeah, baby! (I personally love + this one). + + (From Brendan Cully ) + +Tue Sep 7 17:01:28 1999 Thomas Roessler + + * Makefile.am: Bail out if the chmod of mutt_dotlock fails. + + * pgpkey.c: Fix a strtok NULL pointer problem. + + * doc/Attic/manual.sgml.in: notes on how to produce secure mailcaps. + + * gnupgparse.c, pgpinvoke.c: GPG-related fix from Gero Treuner. + + * imap/BUGS, imap/Makefile.am, imap/TODO, imap/imap.c, imap/imap_private.h, imap/message.c, imap/message.h, mutt.h, muttlib.c, mx.c, status.c, complete.c, flags.c: + * redoes the folder update optimisation I did yesterday. It's somewhat + cleaner and less invasive, and I'm not so worried about memory leaks + now. + + * Fixes the bug where mutt would append a '/' to $folder even if it + was only {mailhost}, causing mutt to browse the root directory + instead of the home directory. + + * includes a first stab at preserving the D flag on the IMAP server. + Now if you answer no to 'Purge deleted', the server still stores + the messages as deleted, but doesn't expunge them on exit. + + NOTE: this is a first attempt. Play around, but don't mark things + as deleted that you'd be sorry to see disappear. + + (From: Brendan Cully ) + + * doc/manual.sgml.head: Adding notes from README.SECURITY. + +Mon Sep 6 09:16:53 1999 Thomas Roessler + + * imap/Makefile.am, imap/TODO, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/message.c, imap/message.h, mutt.h, muttlib.c: + * Small imap/Makefile.am tweak for make dist + + * Hold on to mailbox flags, message flags, do update in one pass + instead of two, halving traffic on mailbox sync. + + * Update message flags at fetch as well as header download, if the + server thinks they've changed. Saves some unneeded updates on + sync. + + * Move some structures out of imap_private.h into message.h, since + they are local now. + + (From: Brendan Cully ) + +Sun Sep 5 08:42:23 1999 Thomas Roessler + + * contrib/Tin.rc: add a sample of tin/lynx-like key bindings. + + * imap/Makefile.am: include message.c with the IMAP library. + + * init.c: [stable] Fixing "unignore *". + + * init.c: Fix "unignore *": We must not add "*" to the unignore list. + + * init.h: Documentation nit, from Liviu. + +Sat Sep 4 04:55:58 1999 Thomas Roessler + + * imap/BUGS, imap/browse.c, imap/imap.c, imap/imap_private.h, imap/message.c: + Fix some more IMAP problems. From Brendan Cully. + +Fri Sep 3 21:42:16 1999 Thomas Roessler + + * contrib/sample.muttrc: + fix mailing list addresses. Noted by David Benfell + . + + * browser.c: + - If the name of the folder returned by an IMAP server is empty, Mutt + could segfault in the browser window attempting to display it. + - add_folder in browser.c looks like it got corrupted in some CVS + update. A small patch makes things work again for + examine_mailboxes. + (From: Brendan Cully ) + + * strdup.c, configure.in: strdup for unstable. + + * configure.in, strdup.c: + [stable] Some systems may not have strdup. Substitute it. + + * strdup.c: + file strdup.c was initially added on branch mutt-1-0-stable. + + * browser.c: [stable] cosmetic fix from Brendan Cully. + +Thu Sep 2 18:50:46 1999 Thomas Roessler + + * editmsg.c: + Don't copy the Status header to the user's edit buffer - we destroy + it later when copying the message back. + + * acconfig.h, configure.in, init.c, init.h, main.c: + [stable] Improved pgp 6.5.1 support. From Jochen Schmitt + . + + * doc/manual.sgml.head, Makefile.am, OPS, compose.c, curs_main.c, editmsg.c, mutt.h, protos.h, send.c, sendlib.c: + A new edit-message feature, giving the raw message in an editor. + + * imap/auth.c: Fix a tiny signedness warning. + + * dotlock.c: Remove a superfluous label. + + * dotlock.c: [stable] remove a superfluous label. + + * po/cs.po: + New czech translation. From Jiri Pavlovsky . + + * doc/Attic/manual.sgml.in: + [stable] It's www.sgmltools.org, not www.sgml-tools.org. Noted by + Heiko Schlichting. + +Wed Sep 1 21:41:19 1999 Thomas Roessler + + * doc/Makefile.in, Makefile.am: + A couple of build process and portability fixes concerning the + automatically generated documentation. + + * mutt.h, init.c: + [stable] Fix ignore/unignore. This is a back-port from the unstable + branch. + + * po/ko.po: New Korean translation. From Byeong-Chan Kim + . + + * curs_lib.c, edit.c, hdrline.c, sendlib.c: + Fix a couple of possible compilation warnings. (Noted by "John C. + Place" .) + + * hdrline.c, sendlib.c, curs_lib.c, edit.c: + [stable] Fix a couple of small warnings. Noted by "John C. Place" + . + + * ChangeLog: check-point commit. + + * mx.c: Don't clear the error line whenever dotlocking a file. + + * mx.h: adding a prototype. + + * curs_main.c, mailbox.h, mx.c: + When the user synchronizes a mail folder, do a thorough check. + +Wed Sep 1 07:47:40 1999 Thomas Roessler + + * mx.c: Don't clear the error line whenever dotlocking a file. + + * mx.h: adding a prototype. + + * curs_main.c, mailbox.h, mx.c: + When the user synchronizes a mail folder, do a thorough check. + +Tue Aug 31 20:26:33 1999 Thomas Roessler + + * po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/sk.po, po/ko.po, po/nl.po, po/pl.po, po/id.po, po/it.po, po/es.po, po/fr.po, VERSION, po/cs.po, po/de.po, po/el.po, reldate.h, Makefile.am, ChangeLog: + automatic post-release commit for mutt-0.96.6 + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog: + post-release commit for 1.0pre2. + + * doc/manual.sgml.tail, doc/manual.sgml.head, protos.h, thread.c, OPS, curs_main.c, functions.h: + Adding a function. From Roland Rosenfeld + . + +Tue Aug 31 19:51:34 1999 Thomas Roessler + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog: + post-release commit for 1.0pre2. + + * doc/manual.sgml.tail, doc/manual.sgml.head, protos.h, thread.c, OPS, curs_main.c, functions.h: + Adding a function. From Roland Rosenfeld + . + +Tue Aug 31 19:11:57 1999 Thomas Roessler + + * doc/manual.sgml.tail, doc/manual.sgml.head, protos.h, thread.c, OPS, curs_main.c, functions.h: + Adding a function. From Roland Rosenfeld + . + + * curs_lib.c: + Fix possible signedness problem with localized y/n responses. + + * po/ru.po: + New russian translation. From Michael Sobolev . + + * Attic/imap.c: [stable] fix IMAP caching. + +Mon Aug 30 16:10:45 1999 Thomas Roessler + + * configure.in, imap/imap.c, main.c: Properly handle IMAP cache files. + + * mh.c: cosmetics. + + * mh.c: [stable] Back-port various fixes from unstable. + + * mh.c: Avoid a memory and temporary file leak. + + * mx.c, Attic/imap.c, buffy.c, configure.in: + [stable] back-port of various IMAP-related fixes. From Brendan + Cully . + +Fri Aug 27 07:41:44 1999 Thomas Roessler + + * TODO: some notes on generic limiting. + +Thu Aug 26 20:26:56 1999 Thomas Roessler + + * keymap.c: + Change alias menu key bindings to something more reasonable. + + * imap/TODO: Adding a TODO list. + + * doc/manual.sgml.tail: + Fix the sgml-tools url. Noted by Heiko Schlichting. + + * doc/Attic/manual.sgml.in: + Fix the URL to the sgml-tools package. Noted by Heiko Schlichting. + + * mh.c: Fixing a somewhat hypothetical error condition. + + * curs_main.c, keymap.c, pager.c, recvattach.c: IRIX fixes. + + * keymap.c, main.c, pager.c, recvattach.c, curs_main.c, edit.c: + Various fixes to make mutt compile on IRIX. Additionally, we + introduce default bindings for the key which is used by xwsh + for "return". Suggested by Heiko Schlichting + . + +Wed Aug 25 06:33:37 1999 Thomas Roessler + + * configure.in: We need ranlib even when we don't use IMAP. + + * compose.c: + Trivial patch to make attach-message work for IMAP folders. + +Tue Aug 24 21:27:20 1999 Thomas Roessler + + * po/de.po: Updates from Roland Rosenfeld. + + * Makefile.am: Automake clean-up. From Lars Hecking. + + * po/id.po: Updates. + + * doc/Makefile.in: build muttrc.man before installing it. + + * reldate.h, Makefile.am, VERSION, ChangeLog: + automatic post-release commit for mutt-0.96.5 + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/el.po, po/de.po, po/cs.po, NEWS, VERSION, reldate.h, ChangeLog: + release-commit 1.0pre1. + + * Makefile.am: Still more bugs in the release-building process. + + * Makefile.am: *grrrr* typos. + + * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/id.po, po/it.po, po/ko.po, po/cs.po, po/de.po, po/el.po, po/es.po, ChangeLog: + translation update. + + * Makefile.am: Some of the targets were broken. + + * Makefile.am: Another tidbit. + + * Makefile.am: + Still more build-process stuff. Let's see whether this automatically + builds 0.96.5. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc: + Remove some auto-built files from the repository. + + * Makefile.am: Further distribution process fixes. + + * po/POTFILES.in: + Make translations fit together with actual source tree. + + * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am: + More fixes to the distribution-building process; check-point commit + for documentation and ChangeLog. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in: + Various experimental changes to automate the distribution-building + process; documentation update. + + * Makefile.am: + Various experimental changes to automate the distribution-building + process. + +Tue Aug 24 16:20:55 1999 Thomas Roessler + + * Makefile.am: Still more bugs in the release-building process. + + * Makefile.am: *grrrr* typos. + + * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/id.po, po/it.po, po/ko.po, po/cs.po, po/de.po, po/el.po, po/es.po, ChangeLog: + translation update. + + * Makefile.am: Some of the targets were broken. + + * Makefile.am: Another tidbit. + + * Makefile.am: + Still more build-process stuff. Let's see whether this automatically + builds 0.96.5. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc: + Remove some auto-built files from the repository. + + * Makefile.am: Further distribution process fixes. + + * po/POTFILES.in: + Make translations fit together with actual source tree. + + * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am: + More fixes to the distribution-building process; check-point commit + for documentation and ChangeLog. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in: + Various experimental changes to automate the distribution-building + process; documentation update. + + * Makefile.am: + Various experimental changes to automate the distribution-building + process. + +Tue Aug 24 16:12:23 1999 Thomas Roessler + + * Makefile.am: *grrrr* typos. + + * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ru.po, po/nl.po, po/pl.po, po/fr.po, po/id.po, po/it.po, po/ko.po, po/cs.po, po/de.po, po/el.po, po/es.po, ChangeLog: + translation update. + + * Makefile.am: Some of the targets were broken. + + * Makefile.am: Another tidbit. + + * Makefile.am: + Still more build-process stuff. Let's see whether this automatically + builds 0.96.5. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc: + Remove some auto-built files from the repository. + + * Makefile.am: Further distribution process fixes. + + * po/POTFILES.in: + Make translations fit together with actual source tree. + + * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am: + More fixes to the distribution-building process; check-point commit + for documentation and ChangeLog. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in: + Various experimental changes to automate the distribution-building + process; documentation update. + + * Makefile.am: + Various experimental changes to automate the distribution-building + process. + +Tue Aug 24 15:51:56 1999 Thomas Roessler + + * Makefile.am: Some of the targets were broken. + + * Makefile.am: Another tidbit. + + * Makefile.am: + Still more build-process stuff. Let's see whether this automatically + builds 0.96.5. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, Attic/Muttrc: + Remove some auto-built files from the repository. + + * Makefile.am: Further distribution process fixes. + + * po/POTFILES.in: + Make translations fit together with actual source tree. + + * doc/Makefile.in, Attic/Muttrc, ChangeLog, Makefile.am: + More fixes to the distribution-building process; check-point commit + for documentation and ChangeLog. + + * doc/Attic/manual.sgml, doc/Attic/muttrc.man, doc/Makefile.in: + Various experimental changes to automate the distribution-building + process; documentation update. + + * Makefile.am: + Various experimental changes to automate the distribution-building + process. + +Tue Aug 24 15:10:48 1999 Thomas Roessler + + * doc/Makefile.in, doc/manual.sgml, doc/muttrc.man: + Various experimental changes to automate the distribution-building + process; documentation update. + + * Makefile.am: + Various experimental changes to automate the distribution-building + process. + +Mon Aug 23 22:12:09 1999 Thomas Roessler + + * charmaps/Makefile.am, configure.in: + Fix charmaps part of the build process. + + * copy.c: Fix an off-by-one error which lead to a segmentation fault. + + * charset.c: + Don't delete symbol -> character code mappings. Character sets may + define multiple symbols. :-( + + * imap/auth.c, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, browser.c, configure.in, Makefile.am, acconfig.h: + Inclue GSS authentization for IMAP. + + * dotlock.c, mx.c: + Remove a couple of NFS-related hacks which seem to be unnecessary. + + * main.c: Fix a small typo affecting mutt -v's output. + +Fri Aug 20 08:24:13 1999 Thomas Roessler + + * po/fr.po: Fixed french translation. + + * imap/Makefile.am, imap/auth.c, imap/browse.c, imap/imap.c, imap/imap.h, imap/imap_private.h, imap/imap_socket.h, imap/md5.h, imap/md5c.c, imap/socket.c, Attic/socket.c, Attic/imap.c, Attic/imap.h, Attic/mutt_socket.h, globals.h, init.h, lib.h, mime.h, prepare, protos.h, rfc2047.c, sendlib.c, Makefile.am, base64.c, configure.in, copy.c: + Brendan Cully's latest IMAP clean-up. + + * doc/Attic/manual.sgml.in, NEWS, copy.c, init.h, mutt.h, sendlib.c: + Back-port $bounce_delivered from unstable. + + * po/fr.po: [stable] Small fixes. + +Thu Aug 19 10:04:28 1999 Thomas Roessler + + * sendlib.c: [stable] Fix a back-porting bug. + + * configure.in: + [stable] Albert Chin-A-Young suggests a + different check for -lnsl and -lsocket. + + * configure.in: + Albert Chin-A-Young suggests a slightly different check for + libsocket and libnsl. + + * doc/Attic/manual.sgml.in: [stable] fix the urlview url. + + * doc/manual.sgml.head: fix the urlview url. + + * main.c: copyright message cosmetics. + + * Makefile.am, configure.in, prepare: + Remove the $output.in hack, and create a fake charmaps directory + instead. + + * acconfig.h, configure.in: + [stable] check signal.h for sig_atomic_t. This should help to build + this version of mutt on systems such as SunOS 4.1. + + * sendlib.c: + [stable] Force quotes around the boundary parameter's value. + + * sendlib.c: + Force quotes around the boundary parameter. Another courtesy + towards Outlook. + + * pgp.c: + [stable] Make sure the boundary MIME parameter is the last one on + multipart/signed. Otherwise, Outlook will fail. Pointed out by Ian + Bell, Turnpike. + + * muttlib.c, pgp.c: + Ian Bell (turnpike) reports that Outlook Express expects the + boundary parameter to be the _last_ MIME parameter on a multipart/* + body part, and otherwise displays messages as empty. + +Wed Aug 18 06:54:13 1999 Thomas Roessler + + * doc/muttrc.man, doc/muttrc.man.head, doc/manual.sgml, NEWS: + documentation fixes. + + * commands.c: + Fetch senders' keys also when decrypting a message. There may be a + signature. + + * main.c: Don't try to create $maildir if it's an IMAP folder. + +Tue Aug 17 20:04:07 1999 Thomas Roessler + + * reldate.h: :-( + + * reldate.h: *grmbls* + + * po/de.po, ChangeLog, VERSION: post-release commit for 0.96.4. + + * po/de.po, VERSION, ChangeLog: post-release commit for 0.95.7. + + * doc/manual.sgml, doc/muttrc.man, Muttrc: ispell's default path. + +Tue Aug 17 17:53:40 1999 Thomas Roessler + + * doc/manual.sgml, doc/muttrc.man, Muttrc: ispell's default path. + + * postpone.c: Fixing a mutt -p segfault. + + * doc/mutt.man, main.c: + cosmetics; mention warranties in the manual page. + +Sun Aug 15 19:59:09 1999 Thomas Roessler + + * compose.c: Make attach-message work with IMAP folders. + + * po/cs.po: New CS translation. + + * doc/Makefile.in, doc/manual.sgml, doc/muttrc.man, mutt.h, mx.c, pgp.c, pgp.h, pgpinvoke.c, prepare, send.c, Makefile.am, Muttrc, NEWS, README.SECURITY, browser.c, browser.h, commands.c, copy.c, curs_main.c, globals.h, init.c, init.h, main.c: + Various changes added over the last week: + + - $delete_untag + - creation of "application/pgp" messages + - an attempt to fix prepare. + - Browser format changes + + * dotlock.h: cosmetics. + + * dotlock.c: [stable] take dotlock.c from unstable. + + * dotlock.c: Commit remaining changes. + + * copy.c, mh.c, mutt.h: Remove ugly mh-synching kludge. + + * dotlock.c, dotlock.h: + Really fix $save_empty, even when the dotlocking code is compiled + into mutt. + + * dotlock.c, dotlock.h: + [stable] Fix $save_empty even when the dotlocking code is linked + into mutt. + +Mon Aug 9 19:03:12 1999 Thomas Roessler + + * ChangeLog: check-point commit. + + * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/ru.po, po/de.po, po/el.po, po/es.po, po/fr.po, po/id.po, po/it.po, po/cs.po: + update-po. + + * po/zh_TW.Big5.po: + [stable] Fixing a small typo in the Chinese translation. + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/el.po, po/es.po, po/de.po, po/cs.po: + [stable] Adding the new polish translation; general "make update-po". + + * Muttrc, doc/muttrc.man, doc/muttrc.man.head, main.c, po/zh_TW.Big5.po: + Various fixes. Additionally, mutt will now create the $folder + directory when started in curses mode and if it doesn't exist. + +Mon Aug 9 19:01:42 1999 Thomas Roessler + + * po/sk.po, po/uk.po, po/zh_TW.Big5.po, po/ko.po, po/nl.po, po/pl.po, po/ru.po, po/de.po, po/el.po, po/es.po, po/fr.po, po/id.po, po/it.po, po/cs.po: + update-po. + + * po/zh_TW.Big5.po: + [stable] Fixing a small typo in the Chinese translation. + + * po/zh_TW.Big5.po, po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/el.po, po/es.po, po/de.po, po/cs.po: + [stable] Adding the new polish translation; general "make update-po". + + * Muttrc, doc/muttrc.man, doc/muttrc.man.head, main.c, po/zh_TW.Big5.po: + Various fixes. Additionally, mutt will now create the $folder + directory when started in curses mode and if it doesn't exist. + +Sun Aug 8 14:57:13 1999 Thomas Roessler + + * po/zh_TW.Big5.po: new chinese translation. + + * po/zh_TW.Big5.po: New chinese translation. + + * Makefile.am: Fix order of some dependencies. + + * Makefile.am: Fix keymap_defs.h dependency. + + * po/it.po: Fix a translation string in it.po. + + * po/it.po: Fixing a message. From Marco. + + * doc/muttrc.man, init.h: + Include complete documentation regardless of actual features. + + * doc/Attic/manual.sgml.in, doc/Attic/mutt.man.in, doc/manual.sgml.tail, doc/mutt.man, doc/muttrc.man, doc/muttrc.man.head, doc/muttrc.man.tail, contrib/Makefile.in, contrib/gpg.rc, doc/Attic/dotlock.man.in, doc/Makefile.in, doc/devel-notes.txt, doc/dotlock.man, doc/manual.sgml, doc/manual.sgml.head, Attic/Muttrc.in, Makefile.am, Muttrc.head, NEWS, configure.in, init.h, makedoc.c: + Documentation updates; autogeneration of documentation from init.h. + +Wed Aug 4 19:58:13 1999 Thomas Roessler + + * NEWS: documentation to prepare the next release. + + * doc/Attic/dotlock.man.in, dotlock.c, dotlock.h, mbox.c, mx.c, mx.h: + [stable] Fix $save_empty. + + * ChangeLog: ChangeLog. + + * NEWS, protos.h, send.c: Various fixes; documentation. + + * doc/Attic/dotlock.man.in: Document the -d option. + + * dotlock.h, mbox.c, mx.c, mx.h, dotlock.c: Fix $save_empty. + +Wed Aug 4 19:49:28 1999 Thomas Roessler + + * NEWS, protos.h, send.c: Various fixes; documentation. + + * doc/dotlock.man.in: Document the -d option. + + * dotlock.h, mbox.c, mx.c, mx.h, dotlock.c: Fix $save_empty. + +Thu Jul 29 09:17:29 1999 Thomas Roessler + + * doc/manual.sgml.in: + Remove references to the old PGP configuration interface. Noted by + Hanno Wagner . + + * browser.c, complete.c, enter.c, imap.c, imap.h, main.c, protos.h: + Brendan Cully's latest IMAP patches. + +Wed Jul 28 20:40:49 1999 Thomas Roessler + + * doc/manual.sgml.in: + Fix "lists" documentation. From Jeremy Blosser . + + * doc/manual.sgml.in: + Fix the description of the lists command. Patch provided by Jeremy + Blosser . + + * doc/PGP-Notes.txt, pgp.h, pgpinvoke.c, init.c, init.h, pgp.c: + PGP 6 support. + + * charsets/Attic/Makefile.in: + Portability patch for MiNT, from Guido Flohr + . + + * doc/manual.sgml.in, doc/mutt.man.in: + Documentation fixes from Jeremy Blosser. + + * mh.c: Replarse mh message' headers when updating them. + + * mh.c: + Re-parse mh messages when committing them to disk. The structure + may have changed. + + * rfc822.h, commands.c, init.h, pgp.c, pgp.h, pgpinvoke.c: + Add a hook which enables us to fetch PGP keys from servers on + demand. Look out for pkspxy. :-) + + * hdrline.c: Enable the use of %F in conditionals. From Aaron Schrab + . + +Mon Jul 26 21:04:53 1999 Thomas Roessler + + * dotlock.c: impose a hard limit on the number of locking attempts. + + * dotlock.c: Impose a hard limit on dotlock attempts. + + * recvattach.c, gnupgparse.c, pgpinvoke.c: + Fix an error message. Also, close Debian bug #37394 for stable. + + * acconfig.h, configure.in: Check for gpgm. + + * recvattach.c: + Make an error message ready for translation. From Gero Treuner. + + * Makefile.am: + Add missing dependencies for pgpring. Fix from David Ellement + + + * Makefile.am: + Create keymap_defs.h when it isn't present. Fix from Lars Hecking + . + + * Makefile.am: + Generate keymap_defs.h when it isn't present. Fix proposed by Lars + Hecking . + + * doc/manual.sgml.in, handler.c, init.h, mutt.h, parse.c: + Undo the content-disposition changes. They don't merge well with + operations such as printing, and need some more thought. + + * doc/manual.sgml.in, init.h, mutt.h, parse.c, handler.c: + When an attachment's content-disposition is different from "inline", + and if the user sets the use_cdisp option, don't auto_view this + part. + + * ChangeLog: checkpointing. + + * flags.c, protos.h, recvattach.c: + When replying to message/rfc822 type attachments, Context statistics + would go out of order. Problem noted by Johan van Selst + . + + * flags.c, protos.h, recvattach.c: + When replying to a message/rfc822 attachment, the Context statistics + would get out of order. Problem noted by Johan van Selst + . + + * curs_lib.c: + Dynamically allocate the unget buffer. Fixes Debian bug #41042. + From Gero Treuner. + + * curs_lib.c: + Dynamically allocate the unget buffer. Fixes Debian bug #41042. + From Gero Treuner . + + * curs_main.c: Fix read_only in folder-hooks. + + * curs_main.c, ChangeLog: The following: + + folder-hook !asdf unset read_only + folder-hook asdf set read_only + + wouldn't work. Fix from Gero Treuner . + + * browser.h, imap.c, imap.h, mx.c, postpone.c, browser.c: + Assorted IMAP fixes. From Brendan Cully , + message <19990725150346.A19750@xanadu.kublai.com>. + +Mon Jul 26 14:53:01 1999 Thomas Roessler + + * flags.c, protos.h, recvattach.c: + When replying to message/rfc822 type attachments, Context statistics + would go out of order. Problem noted by Johan van Selst + . + + * flags.c, protos.h, recvattach.c: + When replying to a message/rfc822 attachment, the Context statistics + would get out of order. Problem noted by Johan van Selst + . + + * curs_lib.c: + Dynamically allocate the unget buffer. Fixes Debian bug #41042. + From Gero Treuner. + + * curs_lib.c: + Dynamically allocate the unget buffer. Fixes Debian bug #41042. + From Gero Treuner . + + * curs_main.c: Fix read_only in folder-hooks. + + * curs_main.c, ChangeLog: The following: + + folder-hook !asdf unset read_only + folder-hook asdf set read_only + + wouldn't work. Fix from Gero Treuner . + + * browser.h, imap.c, imap.h, mx.c, postpone.c, browser.c: + Assorted IMAP fixes. From Brendan Cully , + message <19990725150346.A19750@xanadu.kublai.com>. + + * parse.c, rfc2047.c, rfc2231.c, rfc2231.h, sendlib.c, Makefile.am, TODO, copy.c, init.h, mutt.h: + Implement RFC 2231. + +Mon Jul 26 13:57:58 1999 Thomas Roessler + + * browser.h, imap.c, imap.h, mx.c, postpone.c, browser.c: + Assorted IMAP fixes. From Brendan Cully , + message <19990725150346.A19750@xanadu.kublai.com>. + + * parse.c, rfc2047.c, rfc2231.c, rfc2231.h, sendlib.c, Makefile.am, TODO, copy.c, init.h, mutt.h: + Implement RFC 2231. + + * ChangeLog: *** empty log message *** + + * commands.c: + Fix a missing #ifdef. From Matt Armstrong . + + * doc/devel-notes.txt: + Add some notes. From Matt Armstrong . + +Mon Jul 26 10:13:38 1999 Thomas Roessler + + * commands.c: + Fix a missing #ifdef. From Matt Armstrong . + + * doc/devel-notes.txt: + Add some notes. From Matt Armstrong . + +Sat Jul 24 14:55:45 1999 Thomas Roessler + + * rfc2047.c: Add some sanity checks to the RFC 2047 decoder. + From "Alexander V. Lukyanov" . + +Fri Jul 23 06:31:09 1999 Thomas Roessler + + * parse.c: There was some code missing about TYPEMODEL. + Noted by Brian Salter-Duke . + +Thu Jul 22 14:56:44 1999 Thomas Roessler + + * mutt.h: Fix content-type's widths. + +Wed Jul 21 13:02:12 1999 Thomas Roessler + + * recvattach.c: When forwarding or replying to attachments, + use the proper time stamp for From_ lines of Fccs. Note: + This code may need some clean-up, it's horribly slow. + + * buffy.c: Fix compilation problem for non-imap systems. + + * compose.c: *grr* avoid a warning about /* in a comment. + + * compose.c: call mutt_update_encoding() after changing an + attachment's content type. + +Tue Jul 20 20:09:13 1999 Thomas Roessler + + * send.c, sendlib.c, protos.h: + Use $from for resent-from headers when bouncing messages. + + * imap.c: Fix from Gero Treuner. + + * init.c: + Fix value completion for DT_ADDR variables. While we are on it, + proper quoting is added. + + * init.h, send.c, alias.c, globals.h, init.c: + As Aaron Schrab noted, patch-0.95.6.tlr.reverse_name.1 broke the use + of my_hdr from send-hooks. This patch introduces a new variable + $from which can be used to use a default sender address; to make + this possible, a new variable class DT_ADDR is defined. + + We now have the following algorithm for determining the from + address: + + - $from is used as the default from address, if defined. Otherwise, + the local user name and (if the user wishes so) the local domain + are used. + - This address can be overridden by $reverse_name, if set. + - Now, send-hooks are evaluated. + - Afterwards, user headers are evaluated. In this step, the from + header can be overridden using my_hdr From:. + - When there is no real name, $realname is used for it. Note that, + when the default from header is used and $from defines a real + name, it takes precedence over $realname. + + * buffy.c, complete.c, imap.c, imap.h: Bugs fixed + * Mutt sometimes forgets that IMAP folders with new mail have new + mail. + * On some common IMAP servers, Mutt erroneously insists that the + current folder has new mail. + * Mutt constantly polls the server for new messages, + disregarding the imap_checkinterval option. + + New features + * tab-completion of IMAP folders. Not yet namespace aware, though it + will work within an alternate namespace (eg won't complete #ft -> + #ftp, but will complete #ftp/pu -> #ftp/pub). Some tweaking of the + browser was necessary to get it to cooperate with completion. + Some remains to be done. + + (From: From: Brendan Cully ) + + * doc/manual.sgml.in, globals.h, init.h, send.c, Muttrc.in: + Remove the $in_reply_to configuration variable. + + * doc/manual.sgml.in, globals.h, init.h, send.c, Muttrc.in: + Remove the $in_reply_to configuration variable and always use the + message-ID for that header. + + * pgp.c: patch-0.95.6.pgperror.1 + + * po/de.po, curs_main.c, pager.c: + patch-0.95.6.gettext.1.gz, from Gero Treuner. + + * pager.c: patch-0.95.6.search_in_help.1, from Gero Treuner. + + * po/sk.po: New sk translation. + + * alias.c, enter.c: patch-0.95.6.alias_compl.1.gz, from Gero Treuner + +Mon Jul 19 19:18:05 1999 Thomas Roessler + + * configure.in, pgppubring.c: + Fix compilation problems with SunOS 4. From Lars Hecking. + + * po/sk.po: new sk translation. + + * buffy.c: + Consider empty folders to be non-existent for buffy's purposes. + +Tue Jul 6 22:57:08 1999 Thomas Roessler + + * send.c, sendlib.c, signal.c, system.c, curs_lib.c, curs_main.c, globals.h, menu.c, mutt.h, pager.c, pattern.c, protos.h, attach.c, commands.c, compose.c: + Applying Liviu Daia's signal handling patches. They work fine with + unstable for months now, so we may wish to use them with stable. + + * po/zh_TW.Big5.po, po/el.po, configure.in: + Greek and Chinese translations for unstable. + + * po/zh_TW.Big5.po: Chinese translation for stable. + + * po/zh_TW.Big5.po: + file zh_TW.Big5.po was initially added on branch mutt-1-0-stable. + + * configure.in: Adding chinese (big5) translation. + + * po/el.po: Adding greek translation from Fanis . + + * po/el.po: file el.po was initially added on branch mutt-1-0-stable. + + * configure.in: + Adding greek translation from Fanis . + + * mx.c, mx.h, parse.c, pop.c, postpone.c, protos.h, recvattach.c, sendlib.c, attach.c, buffy.c, copy.c, lib.c, mailbox.h, mh.c: + New mh and maildir folder writing code. Back-port from unstable. + + * color.c: Fix color problem noted by Todd Larson. From unstable. + + * color.c: Fixing a string buffer problem noted by Todd Larason + . + + * imap.c: Try creating an IMAP folder before writing to it. Hack from + "Neulinger, Nathan R." . + + * contrib/pgp5.rc, contrib/pgp2.rc: Fix various bugs. + +Thu Jul 1 11:22:22 1999 Thomas Roessler + + * contrib/gpg.rc: Fix gpg invocation. Noted by Werner Koch. + + * mx.c: Fix a small imap-related bug. + + * recvattach.c, sendlib.c, buffy.c, copy.c, curs_lib.c, globals.h, gnupgparse.c, hdrline.c, init.c, init.h, lib.c, lib.h, mailbox.h, mh.c, mutt.h, mx.c, mx.h, parse.c, pattern.c, pgpkey.c, pgppubring.c, pop.c, postpone.c, protos.h, attach.c: + Various patches from last week, including: + + - new mh/maildir access code. + - subscribe/unsubscribe + - various fixes. + +Mon Jun 14 21:20:42 1999 Thomas Roessler + + * mutt.h, parse.c, sendlib.c: + - Handle CRLF properly in non-text MIME parts. + - Correctly parse attachments with CRLF line endings, but without a + trailing CRLF. + + * alias.c, enter.c: + Completion fixes from Gero Treuner . + +Thu Jun 10 09:30:39 1999 Thomas Roessler + + * alias.c, commands.c, curs_main.c, pager.c, protos.h: + Use the same address with take-alias and display-address. + +Wed Jun 9 17:17:53 1999 Thomas Roessler + + * recvattach.c: Fix the fix. Most of it was wrong. + + * recvattach.c: There was bogus bug-fixing in the last fix. + + * recvattach.c: Fix attachment forwading. Same problem as in unstable. + + * recvattach.c: + Fix attachment forwarding. The leading newline for certain MIME + boundaries was missing. *grrrr* + + * send.c: Give reverse_name precedence over my_hdr From: + +Tue Jun 8 18:30:42 1999 Thomas Roessler + + * acconfig.h, configure.in, pgppubring.c, protos.h: + Portability patches for SunOS 4.1. From Lars Hecking. + + * curs_main.c: Fix "Tab" behaviour when returning from the pager. + + * mutt.h, pattern.c, send.c, sendlib.c, commands.c, copy.c, copy.h, handler.c, imap.c, attach.c: + Don't do charset conversions when they aren't necessary. + + Back-port from unstable. + + * pgp.c, pgpinvoke.c, pgpkey.c, pgplib.h, pgppubring.c, recvattach.c, Makefile.am, commands.c, compose.c, configure.in, hdrline.c, init.c, init.h, mutt.h: + - Add a $weed option. + - Add out-of-band reporting of signature status. + +Thu Jun 3 21:48:24 1999 Thomas Roessler + + * curs_main.c: Another header weeding change. Experimental. + + * commands.c, init.h, mutt.h, send.c: + Experimental: Use OPTWEED for _all_ header weeding throughout mutt. + + * contrib/Makefile.in, Makefile.am, NEWS, VERSION, reldate.h, ChangeLog: + post-release commit 0.96.3. + + * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po, gnupgparse.c, reldate.h, NEWS, VERSION, ChangeLog: + release commit 0.95.6. + + * po/pl.po, po/ko.po, po/fr.po, po/de.po, po/cs.po: Latest chagnes. + + * doc/PGP-Notes.txt, contrib/pgp2.rc, contrib/pgp5.rc, pgppubring.c: + Hardwire some mechanisms for finding secret and public key-rings. + This way, we need to hard-wire less stuff in the various + configuration files, making the use of PGP with mutt a bit simpler + again. + +Thu Jun 3 20:13:22 1999 Thomas Roessler + + * po/pl.po, po/ko.po, po/fr.po, po/de.po, po/cs.po: Latest chagnes. + + * doc/PGP-Notes.txt, contrib/pgp2.rc, contrib/pgp5.rc, pgppubring.c: + Hardwire some mechanisms for finding secret and public key-rings. + This way, we need to hard-wire less stuff in the various + configuration files, making the use of PGP with mutt a bit simpler + again. + + * contrib/pgp2.rc: Another little fix. + + * contrib/pgp2.rc: + ups, wrong order of arguments when verifying signatures. + + * doc/PGP-Notes.txt: Document the new PGP configuration interface. + + * contrib/gpg.rc, contrib/pgp2.rc, contrib/pgp5.rc, pgp.c, pgp.h, pgpewrap, pgpinvoke.c, pgpkey.c, pgplib.c, pgplib.h, pgppubring.c, Makefile.am, compose.c, configure.in, gnupgparse.c, init.c, init.h, mutt.h: + Experimental: New PGP invocation interface. The invocations are done + through formats, so all this should fit more cleanly into mutt now. + +Wed Jun 2 18:52:19 1999 Thomas Roessler + + * Makefile.am, extlib.c, init.c, lib.c, lib.h, mutt.h, muttlib.c, protos.h: + Major cutting & pasting: We now have a "real" library in lib.c which + can be linked against external programs without much effort. + + * po/ko.po, po/pl.po, po/es.po, po/it.po, po/de.po: various updates. + +Tue Jun 1 14:52:09 1999 Thomas Roessler + + * flags.c, mh.c, curs_main.c: + Back-porting the maildir fixes from 0.96.2. + +Mon May 31 16:11:32 1999 Thomas Roessler + + * VERSION: Preparing pre-release for 0.95.6. + + * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/ko.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po: + translation updates + + * hook.c, pattern.c, pgp.c, send.c: Backporting fixes from unstable. + + * pattern.c, pgp.c, send.c, hook.c: Minor bug-fixes. + +Fri May 21 15:55:27 1999 Thomas Roessler + + * po/ko.po: Adding the Korean translation. + + * configure.in, po/ko.po: Korean translation. + +Tue May 18 19:22:55 1999 Thomas Roessler + + * imap.c: Latest IMAP fixes from Brandon. + + * imap.c: + The current code wasn't asking for the capabilities of the server in + the case where the user is using PREAUTH. + + * imap.c: + The current IMAP code wasn't asking for the capabilities of the + server in the case where the user is using PREAUTH. + +Sun May 16 06:26:11 1999 Thomas Roessler + + * po/it.po: New IT translation. + + * pgpkey.c: + Add a couple of token delimiters when constructing hints. This way, + addresses like "Chr. xyz" will match key IDs like + xyz . + + * handler.c: Fix base64 decoding. + +Thu May 6 08:29:17 1999 Thomas Roessler + + * curs_main.c, flags.c, mh.c: Fixing more maildir cursor problems. + +Wed May 5 20:33:57 1999 Thomas Roessler + + * imap.c: The latest IMAP fixes. + + * imap.c: Fixing imap_check_mailbox(). From Brandon Long. + + * imap.c: Mutt would lose user-set "N" flags. + +Mon May 3 16:17:29 1999 Thomas Roessler + + * gnupgparse.c: gnupg gives reasonable trust values now. + + * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po, keymap.c, menu.c, send.c: + Various fixes from last week. + + * keymap.c, menu.c, pgpkey.c, send.c: Various fixes. + +Fri Apr 23 09:01:42 1999 Thomas Roessler + + * reldate.h: ups, this should also be updated for 0.95.5 final. + + * ChangeLog: preparing the final 0.95.5. + + * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/id.po, po/fr.po, po/es.po, po/de.po, po/cs.po: + New translations and typo fixes. + + * OPS: Fix a documentation typo. + + * po/de.po: translation fixes from Roland and Gero. + +Thu Apr 22 10:21:41 1999 Thomas Roessler + + * doc/manual.sgml.in: Document %_. + + * menu.c: Fix redraws. Back-port from unstable. + + * lib.c: Add "_" as an expando option. + + * imap.h, init.h, mutt.h, mutt_socket.h, socket.c, imap.c: + IMAP update from Brandon Long. + + * send.c: Fix FCC-related SNAFU in the ci_send_message() spaghetti. + +Tue Apr 20 19:26:28 1999 Thomas Roessler + + * sendlib.c: [stable] fix timezone snafu. + + * sendlib.c: Fix a time zone snafu. + + * po/ru.po, po/sk.po, po/uk.po, po/fr.po, po/id.po, po/it.po, po/nl.po, po/pl.po, po/cs.po, po/de.po, po/es.po, VERSION, reldate.h, ChangeLog: + Preparing 0.96.2. + + * po/uk.po, po/sk.po, po/ru.po, po/pl.po, po/nl.po, po/id.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, VERSION, reldate.h, ChangeLog: + preparing 0.95.5 + +Mon Apr 12 21:02:35 1999 Thomas Roessler + + * recvattach.c: more multipart/alternative handling. + + * recvattach.c: Change multipart handling when receiving messages. + + * compose.c: Clean-up, from Vikas. + +Mon Apr 12 21:02:35 1999 Thomas Roessler + + * recvattach.c: more multipart/alternative handling. + + * recvattach.c: Change multipart handling when receiving messages. + + * compose.c: Clean-up, from Vikas. + +Mon Apr 12 21:02:35 1999 Thomas Roessler + + * recvattach.c: more multipart/alternative handling. + + * recvattach.c: Change multipart handling when receiving messages. + + * compose.c: Clean-up, from Vikas. + + * parse.c: typo. + + * parse.c: + us-ascii is the default character set for text attachments we receive. + + * compose.c, sendlib.c: + Fix default character set setting when attaching text files. + + * imap.c: + Fix an IMAP quoting problem. Essentially from Randall Nortman + . + + * po/sk.po, po/id.po, configure.in: new languages: id, sk. + + * po/id.po, po/sk.po, configure.in: New translations: id, sk. + +Wed Mar 31 06:35:03 1999 Thomas Roessler + + * charset.c: Stupid error. + + * charset.c, charset.h: Another small charset optimization. + + * charset.h, handler.c, charset.c: + A couple of optimizations, most notably for the special case of a + non-prefix state. + +Tue Mar 30 23:50:33 1999 Thomas Roessler + + * charset.c, charset.h, handler.c: + This patch removes at least some of the horrible utf-8 kluges in + charset.c. The new DECODER framework is currently only used in + handler.c, and there in a horribly inefficient manner. We should + use greater blocks of data, which would be much more efficient than + what we are currently doing. + + Most of the other charset-related code still uses the old + mutt_display_char() &friends interface, which is actually ok as long + as you don't try to handle multibyte character sets. + + The most notable change should be the one to mutt_get_translation(): + It will delay the loading and parsing of character set information + files until it's really needed, catching a huge amount of standard + cases. As a side effect, this will make "iso tagged as ascii" + "work" again, as long as both sides use the same iso character set. + + * send.c: + resort headers when forward-decoding them with weed switched on. + + * pager.c: Fix a pager failure for long messages. From Liviu. + + * pager.c: + Fix pager failure for long messages, changing two shorts to ints. + From Liviu Daia. + + * recvattach.c: + Add some user feedback to attachment forwarding. From Vikas. + +Thu Mar 25 19:46:52 1999 Thomas Roessler + + * doc/manual.sgml.in, init.h, pgpkey.c, sort.h, Muttrc.in, init.c: + Roland's sort_keys patch. + +Wed Mar 24 20:35:38 1999 Thomas Roessler + + * doc/manual.sgml.in, Muttrc.in, recvattach.c: + Vikas' latest version of attachment forwarding. + + * recvattach.c: patch-0.96.1.vikas.forward_attachment.2 + + * main.c: + Only exit with "no recipients specified", when $auto_edit is set. + +Tue Mar 23 20:21:50 1999 Thomas Roessler + + * postpone.c, recvattach.c, init.h, mutt.h: + Vikas' forward_attachment patch. + +Mon Mar 22 16:00:39 1999 Thomas Roessler + + * doc/manual.sgml.in, pgppubring.c, gnupgparse.c, pgp.h, pgpkey.c: + PGP key creation time fix by Roland Rosenfeld. + +Wed Mar 17 14:45:10 1999 Thomas Roessler + + * recvattach.c: Vikas' attach_tag patch. + +Tue Mar 16 21:42:06 1999 Thomas Roessler + + * thread.c, configure.in: bug fixes. + + * thread.c: Detect thread loops. + +Mon Mar 15 15:32:19 1999 Thomas Roessler + + * doc/manual.sgml.in, copy.c, init.h, mutt.h, sendlib.c: + Add $bounce_delivered. + + * edit.c: another digital unix compile problem. + + * main.c: _Fix_ the compile problems, don't install new ones. + + * send.c: Cleanly handle fcc when the user unsets it and the message is + postponed. + + * main.c: Fix compilation problems under digital unix. + + * configure.in: Fix sendmail autodetection. + + * color.c: Fix colorN, N > 7 for Slang's curses emulation. From Vikas. + +Tue Mar 9 13:34:52 1999 Thomas Roessler + + * menu.c: another menu.c fix from Kim DeVaughn. + + * send.c, menu.c, handler.c: Fixes. + + * send.c, menu.c, handler.c: + handler.c: Properly handle message/external-body expiry. + menu.c: Small fix from Liviu. + send.c: Honor confirm_create for FCCs. + cvs: ---------------------------------------------------------------------- + +Thu Mar 4 08:00:38 1999 Thomas Roessler + + * Makefile.am: post-postrelease commit. + +Wed Mar 3 20:06:33 1999 Thomas Roessler + + * rfc2047.c: ups. + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, ChangeLog: + releasing 0.95.4. + + * sendlib.c, rfc2047.c, reldate.h, curs_main.c, VERSION, ChangeLog: + releasing 0.96.1. + + * reldate.h, regex.c, VERSION, Makefile.am, ChangeLog: + release preparations; back-port a couple of things from unstable. + + * curs_main.c: Vikas' resort_index.3. + + * sendlib.c, imap.c, from.c, curs_main.c: + from.c: Backport from unstable. + others: latest imap related patches. + +Wed Mar 3 19:44:24 1999 Thomas Roessler + + * reldate.h, regex.c, VERSION, Makefile.am, ChangeLog: + release preparations; back-port a couple of things from unstable. + + * curs_main.c: Vikas' resort_index.3. + + * sendlib.c, imap.c, from.c, curs_main.c: + from.c: Backport from unstable. + others: latest imap related patches. + +Tue Mar 2 22:13:30 1999 Thomas Roessler + + * curs_main.c, charset.c: Some small fixes from Vikas. + + * parse.c, init.h, imap.c, globals.h: + Brandon Long's latest IMAP fixes. + + * parse.c: Latest IMAP-related fix from Brandon Long. + + * thread.c: + Correctly handle messages which have themselves in their references + header. + + * thread.c: + Properly handle messages which have themselves in "References". + +Sun Feb 28 08:30:19 1999 Thomas Roessler + + * rfc822.c: Fix a memory leak. From Liviu. + + * rfc822.c: Fix a memory leak. From Liviu. + + * rfc1524.c, mutt.h, lib.c, attach.c: + Fix the $TMPDIR raace noted by Hamish Moffat. + + * rfc1524.c, mutt.h, lib.c, attach.c: Fix a $TMPDIR race condition. + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po: + post-snapshot commit. + +Fri Feb 26 15:42:07 1999 Thomas Roessler + + * doc/manual.sgml.in, send.c, regex.c, mutt.h, init.h: + Adding pgp_replyencrypt. + +Thu Feb 25 06:58:01 1999 Thomas Roessler + + * from.c: + parse some more from_ lines. Before, there were problems with cases + like this: + + >From <@x400host:"/G=Bob/S=Allinson/CN=Has embedded spaces/OU=X400HOST/ + >OU=xxxx/O=xxx/PRMD=xxxxx/ADMD=XXXXXX/C=GB/"@x400host> + >Tue Feb 23 09:44:52 1999 + + Problem noted by johnm@sirius3.demon.co.uk + +Tue Feb 23 20:38:49 1999 Thomas Roessler + + * imap.c: fix a segfault. From Brandon. + +Mon Feb 22 12:37:43 1999 Thomas Roessler + + * curs_main.c: Vikas' latest collapse fix. + + * curs_main.c: collapse fix from Vikas. + + * mbox.c, imap.c: + Avoid reading past actual headers when reopening mailboxes. From + Daniel Eisenbud. + + * mbox.c, imap.c: + Avoid reading past the end of actual headers when reopening folders. + From Daniel Eisenbud. + + * pgp.c: Don't override base64 by quoted-printable. + + * menu.c: replace clear() by clrtobot(). + + * pgp.c: + Currently, PGP signing messages will force quoted-printable encoding + even if we should use base64. + +Fri Feb 19 07:38:17 1999 Thomas Roessler + + * sendlib.c: Don't qp-encode multiparts. ugh. + + * sendlib.c: ... message and multipart, not just message. + + * sendlib.c, mutt.h, init.h: + Add $encode_from: This option causes mutt to trigger + quoted-printable encoding for any non-multipart attachments which + have ^From at the beginning of a line. Note that we don't trigger + on ^From_ since either procmail or sendmail is >-escaping on ^From, + and note that this won't help against sites where sendmail has the + '9' flag set on the local mailer, as these sites will inevitably + transform to 8bit (sic!). + +Thu Feb 18 23:14:36 1999 Thomas Roessler + + * pgp.c, mutt.h, init.h: + Add retainable signatures. This should work nicely with encrypted + mailing lists. + + * mx.c, init.h, globals.h, configure.in, acconfig.h, Makefile.am: + Introduce $dotlock_program: This makes the mutt_dotlock program's + location a run-time configuration variable. + + * send.c, mutt.h, init.h: + Introduce $honor_followup_to. The user will now be asked whether he + wants to honor mail-followup-to or not. + + * curs_main.c: + properly handle OP_FLAG_MESSAGE when applied to tagged messages. + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po: + Updated translations. + + * contrib/sample.mailcap: Fix the text/html entry. + + * regex.c, headers.c, copy.h, configure.in: + copy.h: Some flags were used with multiple meanings. bad. + configure.in, regex.c: Make regex autoconfiguration work. + headers.c: expand aliases on the from header. + + * headers.c: Expand aliases on the From header. + +Wed Feb 17 15:48:05 1999 Thomas Roessler + + * doc/mutt.man.in: Fix the URL. + + * sendlib.c, init.h: User-Agent, not X-Mailer. + + * po/fr.po: update. + + * copy.h: + Some of the M_CM flags erroneously had been defined to have the same + value. _Very_ bad. + + * contrib/sample.mailcap: Correct the netscape text/html entry. + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, po/Makefile.in.in, sendlib.c, send.c, regex.c, pager.c, mutt.h, init.h, configure.in, acconfig.h, Muttrc.in, Makefile.am: + - Makefile.am: Fix the dist target to include all necessary files. + - po/fr.po: New French translation. (-> stable!) + - Add the new options to Muttrc.in. + - regex.c, configure.in: include config.h from regex.c, and handle + alloca in a more intelligent way than before. (Currently, we just + mis-handle it.) + Port this to stable and test it! + - po/cs.po: update cs.po. + - po/de.po, po/nl.po: updated versions from Roland and Boris. + - pager.c: Vikas' grok_ansi fix. + - po/Makefile.in.in: keymap_defs is always in po/.. - from Lars + Hecking. + +Fri Feb 12 11:23:17 1999 Thomas Roessler + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, reldate.h, ChangeLog: + post-release commit for 0.95.3. + + * po/nl.po, reldate.h, ChangeLog: post-release commit for 0.96. + +Thu Feb 11 22:52:03 1999 Thomas Roessler + + * imap.c, VERSION: another imap-related fix. + + * pattern.c: another signal fix from liviu. + +Thu Feb 11 22:52:03 1999 Thomas Roessler + + * imap.c, VERSION: another imap-related fix. + + * pattern.c: another signal fix from liviu. + + * imap.c: Remove a superfluous if statement. + + * imap.c: ups, that one was bad. + + * imap.c: + The HEADER structure doesn't have a mailcap component any more. + + * imap.c: + The HEADER structure doesn't have a mailcap component any more. + Noted by Johan van Selst . + + * signal.c, sendlib.c, pattern.c, pager.c, mutt.h, menu.c, globals.h, curs_main.c, curs_lib.c: + patch.mutt-0.95.1i.ld.signals.1-2.gz + + * po/nl.po: new nl translation. + + * pattern.c, curs_main.c: pattern.c: Collapse patch from Vikas. + + * po/nl.po: New nl translation. + + * pattern.c, curs_main.c: + curs_main.c: Check whether the user pressed a number before putting + it back onto the stack. (OP_JUMP) + pattern.c: Vikas' latest fix. + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po: + Updating the po files. + + * doc/manual.sgml.in, doc/Makefile.in: + Install README.SECURITY in the doc directory, document + mailcap_sanitize. + + * reldate.h, prepare, configure.in, VERSION, Makefile.am, Attic/$output.in: + Preparing for 0.96: $output.in was real fun in the dist target. + *argh* + + * po/uk.po, po/ru.po, po/pl.po, po/nl.po, po/it.po, po/fr.po, po/es.po, po/de.po, po/cs.po, doc/manual.sgml.in, doc/Makefile.in, reldate.h, VERSION, NEWS, Makefile.am, ChangeLog: + [stable] post-release commit for 0.95.2. + + * README.SECURITY: Add a note on how to write mailcap files. + + * README.SECURITY: Add a note on how to write mailcaps. + +Wed Feb 10 23:12:27 1999 Thomas Roessler + + * browser.c: Ups, this one needed a #ifdef USE_IMAP. + + * imap.c, browser.c: + Some patches Brandon Long posted to comp.mail.mutt. + + * rfc1524.c, protos.h, lib.c, handler.c, attach.c: + Fix the security fix. + + * rfc1524.c, mutt.h, lib.c, init.h: [stable] $mailcap_sanitize + + * rfc1524.c, mutt.h, lib.c, init.h: [unstable] $mailcap_sanitize. + + * system.c, signal.c, sendlib.c, send.c, protos.h, mutt.h, globals.h, curs_lib.c, compose.c, commands.c, attach.c, TODO: + patch.mutt-0.95.1i.ld.signals.1: A major redesign of how child + processes are invoked. From Liviu. + +Tue Feb 9 23:54:03 1999 Thomas Roessler + + * sort.c, mx.c, mutt.h, mh.c, mbox.c, curs_main.c, ChangeLog: + Vikas' latest collapse fix. + + * prepare: Small prepare bug noted by vikas. + + * pgppubring.c, pgpkey.c, pgp.h, main.c, gnupgparse.c, browser.h: + browser.h: re-insert the "tagged" component. + pgp support: fix handling of PGP 5 subkeys, algorithm 20. + + * pgppubring.c: [stable] Alg. 16 is encrypt-only, el-gamal. + + * commands.c: + honor hdr_order when decode-piping a message. From Vikas. + + * po/cs.po: New czech translation. + + * commands.c: Reorder headers when decode-piping. + + * po/cs.po, doc/manual.sgml.in, socket.c, mx.c, mutt_socket.h, mutt.h, menu.c, init.h, imap.h, imap.c, functions.h, complete.c, browser.h, browser.c, OPS: + Brandon's IMAP clean-up; new czech translation. + +Thu Feb 4 12:00:10 1999 Thomas Roessler + + * rfc1524.c, protos.h, pgpinvoke.c, mx.c, lib.c: + [unstable] Change the way mutt_quote_filename() worked. It's not + too reasonable to allocate memory dynamically whenever we quote a + file name. (I guess I should add "vim" to pgpinvoke.c's copyright + notice. :-) + + * mx.c: + [unstable] Check for write errors when moving messages to $mbox. + + * mx.c: Check for write errors when moving messages to $mbox. + +Wed Feb 3 22:14:18 1999 Thomas Roessler + + * sendlib.c, recvattach.c, postpone.c, main.c, hash.c, functions.h, compose.c, charset.h, charset.c, OPS: + [unstable] Produce some reasonable character set support when + postponing messages. + + Additionally, this patch fixes a nasty pointer leak in + load_charset() [noted with electric fence], and a completely + mis-lead attempt to use bsearch(). Apparently, nobody ever tested + the utf8 decoder for quite some time. + +Tue Feb 2 21:57:44 1999 Thomas Roessler + + * pattern.c: merge ~v patch into unstable. + + * pattern.c: small nit-fix from vikas to the ~v pattern. + + * pgp.c: Thou shall not use dangling pointers. + + * attach.c: + [unstable] Fix mutt_decode_save_attachment's handling of character + set conversions. + + * sendlib.c, send.c, rfc2047.c, recvattach.c, protos.h, pgp.c, pattern.c, mutt.h, init.h, handler.c, globals.h, functions.h, copy.h, copy.c, compose.c, commands.c, charset.h, charset.c, attach.c, OPS: + Merging the external character set patch into unstable. + Additionally, this change introduces a M_CHARCONV state flag which + gives us some more control about when character set conversions are + actually done. Current versions of mutt would happily apply + character set conversions when, e.g., saving a text/plain attachment + to a file. (We had at least one corrupt russing translation file + due to this mis-feature.) + + Additionally, we clean up some of the character set related code in + handler.c. Most of that is now done by the decoder functions in + charset.c. + + * imap.c: Brandon's imap_create patch. + + * pgpkey.c: + [unstable] clear the message line before letting people select + public keys. + + * imap.c, copy.c: [unstable] merging Brandon's imap fixes. + + * copy.c, imap.c: A couple of IMAP fixes from Brandon Long. + +Sat Jan 30 17:07:30 1999 Thomas Roessler + + * pgpkey.c: + really fix the weak associations problem. it was worse than i + thought. + + * pgpkey.c: + Handle expired keys correclty, even when they are the only and exact + match when searching for keys by address. + +Fri Jan 29 11:15:15 1999 Thomas Roessler + + * init.h: [unstable] Change some default formats. + + * remailer.c, pgpkey.c, menu.c, addrbook.c: Add generic menu searching. + + * remailer.h, remailer.c, init.h, globals.h: + Use a user-definable format for the mixmaster menu. + + * pgpkey.c, pgp.h, init.h: [unstable] add $pgp_entry_format. + +Thu Jan 28 09:08:47 1999 Thomas Roessler + + * gnupgparse.c: + gnupg's trust model is currently unusable. As a work-around, we + don't present the user with _any_ trust information if he uses + gnupg. + +Wed Jan 27 19:53:46 1999 Thomas Roessler + + * doc/manual.sgml.in, pgpkey.c, mutt.h, init.h, gnupgparse.c: + Add $pgp_show_unusable. + +Tue Jan 26 21:24:56 1999 Thomas Roessler + + * doc/manual.sgml.in: [unstable] document ~v. + + * doc/manual.sgml.in: [stable] document ~v. + + * thread.c, pattern.c, mutt.h: + [unstable] Add the ~v pattern. From Vikas. + + * thread.c, pattern.c, mutt.h: [stable] Add the ~v pattern. + + * doc/manual.sgml.in, ChangeLog: + ChangeLog, documentation for implicit_autoview. + + * doc/manual.sgml.in: Document $implicit_autoview. + +Tue Jan 26 09:51:53 1999 Thomas Roessler + + * doc/manual.sgml.in: Document $implicit_autoview. + + * compose.c: + Fix a segfault when users change attachment content types, and let + toggle-unlink honor the $resolv variable. + + * compose.c: + $resolve should be honored when doing toggle-unlink on the compose + menu. + +Mon Jan 25 22:16:46 1999 Thomas Roessler + + * compose.c: + This may fix a core dump under certain circumstances. Can't check + this out since I don't get the segfault. + + * pgpkey.c: Fix a redraw problem when the key menu is invoked. + + * po/ru.po, po/cs.po, configure.in: Russian and czech translations. + + * po/cs.po: Adding a czech translation, and fixing the russian. + + * po/cs.po: file cs.po was initially added on branch mutt-1-0-stable. + + * configure.in: Adding a czech translation, and fixing the russian. + + * po/ru.po: ru.po was badly distorted. + +Sat Jan 23 17:00:43 1999 Thomas Roessler + + * prepare: + when f is .../Makefile.am, `basename $f .am` is Makefile. So I + should just write that. :-) + + * prepare: Add the default predicate. + + * from.c: A slightly optimized version of DE's y2k patch. + + * prepare: Apparently, automake doesn't like our AC_OUTPUT($output) + construction... + + * gnupgparse.c, from.c: + DE's patch to work around other software's possible y2k bugs. + + * from.c: Try to avoid other programs' possible y2k bugs. + + * enter.c: Fix the attach-multi patch. + +Fri Jan 22 22:12:10 1999 Thomas Roessler + + * lib.c: Fix a memory leak, noted by Roland Rosenfeld. + + * lib.c: Fix a memory leak. Noted by Roland Rosenfeld. + + * recvattach.c, query.c, protos.h, menu.c, enter.c, curs_lib.c, compose.c, browser.c, addrbook.c: + Enable tagging in the file browser. + + * protos.h, pgppubring.c, pgpkey.c, pgp.h, pgp.c, lib.c, handler.c, gnupgparse.c, compose.c: + Heavy hacking on mutt's pgp support. We no longer read the complete + key ring into memory. For gpg, performance is heavily improved due + to the fact that we are passing a couple of key hints to the key + ring parsing back-end. + +Thu Jan 21 05:19:42 1999 Thomas Roessler + + * hook.c: Fix _mutt_string_hook. + +Wed Jan 20 13:52:59 1999 Thomas Roessler + + * po/pl.po: New polish translation. + + * pgppubring.c, pgpkey.c, configure.in: + Add heavily improved debugging capabilities to the PGP code. + Anyway, the problem I observed wasn't a bug in mutt, but an expired + key. *sigh* + + * rfc1524.c: Don't segfault when MailcapPath is unset. + + * rfc1524.c: + Fix a segmentation fault when no MailcapPath has been defined. + +Tue Jan 19 23:38:26 1999 Thomas Roessler + + * protos.h, mutt.h, init.h, hook.c, charset.c, Makefile.am: + Add the charset-hook command. + + * configure.in, charset.c, acconfig.h, Makefile.am, $output.in, INSTALL: + Properly handle character set definition file installation. + + * mx.c: Remove a confusing error message. + + * mx.c: Remove confusing error message. + + * keymap.c, curs_lib.c: patch-0.95.1.vikas.macro_function.1 + + * m4/Makefile.am.in: HP/UX portability patch from Lars Hecking. + +Mon Jan 18 09:45:29 1999 Thomas Roessler + + * po/ru.po: + New Russian translation from Michael Sobolev . + + * po/ru.po: + New russian translation from Michael Sobolev . + +Thu Jan 14 13:08:46 1999 Thomas Roessler + + * compose.c: Mixmaster user interface beautification. + + * mx.c, curs_lib.c: + Fix a couple of segfaults related to using curses when it isn't there. + + * mx.c: dotlocking plus curses... + +Wed Jan 13 23:56:39 1999 Thomas Roessler + + * send.c, mutt.h, mbox.c, handler.c, copy.h, copy.c: + patch-0.95.1i.tlr.weed.1, patch-0.95.1i.tlr.dotlock.1 - These have + been tested with unstable so far, seem to work fine. + + * mx.c: Don't use curses when we don't have it. + + * mx.c: Don't try to do mutt_yesorno if we don't have curses. + + * remailer.h: + Mixmaster has 20 address slots, that makes _19_ remailers. + + * remailer.c: Fix the "append" function. + + * sendlib.c: Don't leak message dates when sending via mixmaster. + + * remailer.c: + Add search code to the remailer chain selecting menu. [This is + pretty generic - should we add that code to menu.c?] + + * postpone.c: Fix postponing of PGP messages. + + * send.c, remailer.c, compose.c: + Qualify addresses before passing them to mixmaster. + + * send.c, remailer.h, protos.h, mutt.h: + Clean up dependencies: remailer.h is no longer included by mutt.h, + and the mix_* prototypes can once again go to remailer.h. + + * sendlib.c, remailer.c, remailer.h, send.c, protos.h, postpone.c, mutt.h, lib.c, keymap.h, keymap.c, init.h, headers.c, globals.h, functions.h, configure.in, compose.c, OPS.MIX, acconfig.h, Makefile.am: + A first take at adding a mixmaster front-end to mutt. Don't worry, + it's optional. ;-) + +Tue Jan 12 22:01:11 1999 Thomas Roessler + + * mbox.c: Open folders in read-only mode if mutt can't lock them. + +Mon Jan 11 18:12:49 1999 Thomas Roessler + + * send.c, mutt.h, handler.c, copy.h, copy.c: + When decode-forwarding messages with message/Rfc822 attachments, + mutt should weed the attachments' headers according to the setting + of $forward_weed. + +Sun Jan 10 09:11:36 1999 Thomas Roessler + + * doc/manual.sgml.in, hdrline.c: Byrial's %D time format patch. + +Sat Jan 9 17:53:02 1999 Thomas Roessler + + * doc/manual.sgml.in, recvattach.c, protos.h, lib.c: + Byrial's latest changes to stable. + + * recvattach.c, protos.h, lib.c: + Ask the user whether to overwrite a file or append to it. From + Byrial Jensen. + + * doc/manual.sgml.in: Fix a documentation problem. + +Fri Jan 8 23:29:05 1999 Thomas Roessler + + * charset.c: + When doing a binary search, we may as well use bsearch (3). + + * parse.c: Optimized time-zone parsing. + + * parse.c: Optimize time zone parsing. By Byrial Jensen. + + * history.c: + Don't clear the history when the user issues a "set history=..." + command which doesn't change anything. + + * history.c: + Don't clear the history when "set history=..." doesn't change the + buffer size. + + * thread.c, curs_main.c: Threading fix from Daniel Eisenbud. + +Thu Jan 7 19:01:30 1999 Thomas Roessler + + * init.c: Vikas' set_boolean patch. + + * protos.h, handler.c, attach.c: + Updated implicit autoview handling from stable. + + * protos.h, handler.c, attach.c: + Only use "implicit" autoviews (implicit_autoview or MM_NOASK) when + mutt is unable to handle a content type internally. This saves us + parsing the mailcap files for every attachment we handle. + + * mx.c, mutt.h, init.h, hdrline.c, commands.c, attach.c: + Merge in the mailcap patch from stable. + + * thread.c, system.c, strcasecmp.c, status.c, sort.h, sort.c, socket.c, snprintf.c, signal.c, sha_locl.h, sha1dgst.c, sha.h, sendlib.c, send.c, score.c, rfc822.h, rfc822.c, rfc2047.h, rfc2047.c, rfc1524.h, rfc1524.c, resize.c, recvattach.c, query.c, protos.h, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.h, pgp.c, pattern.c, parse.h, parse.c, pager.h, pager.c, mx.h, mx.c, mutt_socket.h, mutt_regex.h, mutt_menu.h, mutt_curses.h, mutt.h, mime.h, mh.c, menu.c, mbox.c, mapping.h, main.c, mailbox.h, lib.c, keymap.h, keymap.c, init.h, init.c, imap.h, imap.c, hook.c, history.h, history.c, help.c, headers.c, hdrline.c, hash.h, hash.c, handler.c, gnupgparse.c, globals.h, getdomain.c, functions.h, from.c, flags.c, filter.c, enter.c, edit.c, dotlock.h, dotlock.c, date.c, curs_main.c, curs_lib.c, copy.h, copy.c, compose.c, complete.c, commands.c, color.c, charset.h, charset.c, buffy.h, buffy.c, browser.c, attach.h, attach.c, alias.c, addrbook.c, acconfig.h: + Get rid of RCS ids in source files. They are getting in our way + when merging changes. + + * mx.c, mutt.h, init.h, hdrline.c, commands.c, attach.c: + Remove the use_mailcap variable. Instead, we introduce + implicit_autoview which triggers autoview for every content type + it's applicable to. + + * thread.c, system.c, strcasecmp.c, status.c, sort.h, sort.c, socket.c, snprintf.c, signal.c, sha_locl.h, sha1dgst.c, sha.h, sendlib.c, send.c, score.c, rfc822.h, rfc822.c, rfc2047.h, rfc2047.c, rfc1524.h, rfc1524.c, resize.c, recvattach.c, query.c, protos.h, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.h, pgp.c, pattern.c, parse.h, parse.c, pager.h, pager.c, mx.h, mx.c, mutt_socket.h, mutt_regex.h, mutt_menu.h, mutt_curses.h, mutt.h, mime.h, mh.c, menu.c, mbox.c, mapping.h, main.c, mailbox.h, lib.c, keymap.h, keymap.c, init.h, init.c, imap.h, imap.c, hook.c, history.h, history.c, help.c, headers.c, hdrline.c, hash.h, hash.c, handler.c, gnupgparse.c, globals.h, getdomain.c, functions.h, from.c, flags.c, filter.c, enter.c, edit.c, dotlock.h, dotlock.c, date.c, curs_main.c, curs_lib.c, copy.h, copy.c, compose.c, complete.c, commands.c, color.c, charset.h, charset.c, buffy.h, buffy.c, browser.c, attach.h, attach.c, alias.c, addrbook.c, acconfig.h: + Get rid of the rcsid fields. They are getting in the way whenever I + merge changes into unstable. + + * po/nl.po, init.h, configure.in: Merging changes from stable. + + * configure.in: + Don't add regex.c, but regex.o to the LIBOBJS variable when needed. + + * init.h: Fix default settings for use_mailcap and mime_forward. + +Wed Jan 6 10:13:32 1999 Thomas Roessler + + * po/fr.po, po/de.po, sendlib.c, regex.c, protos.h, parse.c, mutt_regex.h, mbox.c, main.c, hdrline.c, from.c, date.c, configure.in, acconfig.h, _regex.h, Makefile.am, INSTALL: + [unstable] Merge changes from stable: rx -> regex, Byrial's timezone + patch, translation updates. + + * sendlib.c, protos.h, parse.c, mbox.c, from.c, date.c: + Byrial's timezone patch, without the absurd optimizations. + + * regex.c: + Use gnu regex instead of gnu rx. This library is said to behave + better. Additionally, it supports \<...\> patterns. The files + _regex.h and regex.c included with this distribution correspond to + posix/regex.[ch] from the glibc 2.0.7t source tree. + + * regex.c: file regex.c was initially added on branch mutt-1-0-stable. + + * mutt_regex.h, main.c, configure.in, acconfig.h, _regex.h: + Use gnu regex instead of gnu rx. This library is said to behave + better. Additionally, it supports \<...\> patterns. The files + _regex.h and regex.c included with this distribution correspond to + posix/regex.[ch] from the glibc 2.0.7t source tree. + + * _regex.h: + file _regex.h was initially added on branch mutt-1-0-stable. + + * Makefile.am, INSTALL: + Use gnu regex instead of gnu rx. This library is said to behave + better. Additionally, it supports \<...\> patterns. The files + _regex.h and regex.c included with this distribution correspond to + posix/regex.[ch] from the glibc 2.0.7t source tree. + + * po/nl.po, po/fr.po: + Various fixes to the NL translation; new French messages. + +Tue Jan 5 14:35:18 1999 Thomas Roessler + + * sendlib.c, mutt.h, main.c, configure.in, charset.h, charset.c, Makefile.am: + [unstable] Adding experimental new character set conversion code. + + * po/de.po: Merging from stable. + + * po/de.po: Fix a typo in de.po. + + * po/de.po: [unstable] Merging changes from stable. + + * po/nl.po, hdrline.c, curs_main.c, configure.in: + [unstable] merging changes from stable. + + * hdrline.c: Conditionally display score and number of lines. + + * po/nl.po: + [stable] Adding the NL translation; correcting some bugs in the DE + translation. + + * po/nl.po: file nl.po was initially added on branch mutt-1-0-stable. + + * po/de.po, configure.in: + [stable] Adding the NL translation; correcting some bugs in the DE + translation. + +Mon Jan 4 19:15:10 1999 Thomas Roessler + + * curs_main.c: [unstable] fix next-unread plus collapsing. + + * curs_main.c: [stable] Fix next-unread when collapsing threads. + + * curs_main.c: [unstable] merging changes from stable. + + * curs_main.c: [stable] fix a bogus type cast. + + * reldate.h, curs_main.c: [unstable] merging in changes from stable. + + * curs_main.c: + [stable] Don't use the index elements of header structures when + new messages arrived on the index. + + * reldate.h: 0.95.1 should have a proper release date. + + * send.c, pgp.c, handler.c, configure.in: + Make the experimental branch the main trunk. + + * po/uk.po, po/ru.po, po/pl.po, po/it.po, po/fr.po, po/es.po, po/de.po: + 0.95.1 post-release commit. + + * configure.in: [unstable] Create suitable version strings. + + * VERSION, ChangeLog: [stable] Preparing 0.95.1. + + * send.c: [unstable] commit changes from the stable tree. + + * send.c: + [stable] When sending a message in batch mode failed, mutt would + dump core. Patch from Byrial Jensen. + + * pgp.c, handler.c: [unstable] Add multiple signature support. + +Mon Jan 4 12:57:55 1999 Thomas Roessler + + * send.c: When sending a message in batch mode failed, mutt + would dump core. Patch from Byrial Jensen. + +Sat Jan 2 17:23:24 1999 Thomas Roessler + + * sendlib.c, ChangeLog: I shouldn't accept patches on New + Year's day. Not even new-year related patches. + + * po/it.po: Fixing a typo. + + * protos.h, parse.c, handler.c: mutt_parse_date () shouldn't + modify its argument. Problem noted by Byrial Jensen. + + * lib.c: Fix safe_symlink to correctly handle relative paths. + +Sat Jan 2 09:35:09 1999 Thomas Roessler + + * protos.h, parse.c, handler.c: mutt_parse_date () shouldn't + modify its argument. Problem noted by Byrial Jensen. + + * lib.c: Fix safe_symlink to correctly handle relative paths. + +Fri Jan 1 09:43:15 1999 Thomas Roessler + + * sendlib.c: New Year's time zone handling patch from Manish + Singh . + +Thu Dec 31 09:45:46 1998 Thomas Roessler + + * curs_main.c: The attached patch moves code for sorting the + index and restoring the current message from + mutt_index_menu() to a new function. It saves code + duplication. + +Wed Dec 30 07:58:40 1998 Thomas Roessler + + * pgp.c, main.c: Localize some more messages. From Michael Sobolev. + +Tue Dec 29 16:29:03 1998 Thomas Roessler + + * mbox.c, ChangeLog: Use sizeof instead of strlen for some + fixed strings. + + * mh.c: Take setting the index_hint out of the main loop of + mh_check_mailbox(). + +Mon Dec 28 14:59:04 1998 Thomas Roessler + + * attach.c: Fix a segmentation fault when viewing + message/rfc822 attachments from the compose screen. + +Wed Dec 23 15:57:00 1998 Thomas Roessler + + * pattern.c: A slightly modified version of Vikas' + pattern_match patch. This changes the semantics of the + pattern-something functions so they only apply to + _visible_ messages. (With the exception of limit: In this + case, the user can add another pattern if he wants to + limit further, or he can give an entirely new pattern.) + +Tue Dec 22 18:07:19 1998 Thomas Roessler + + * sendlib.c: Fix MIME forwarding. From Vikas. + +Mon Dec 21 12:38:57 1998 Thomas Roessler + + * mx.c, mh.c, mbox.c, imap.c, charset.c: Adjust some + hash-related parameters. + + * mx.c, mh.c, mbox.c: Mail folder synchronization-related fixes: + + - Another situation under which mutt would lose track of the current + message when maildir folders changed has been removed. + + - While synchronizing mbox-type folders, a write error when + constructing the draft version of the new mail folder would leave + behind a copy ofthe file containing the draft. This is most + annoying if the write error is due to lack of disk space. + + * po/pl.po: Small \n fixes. + + * parse.c, from.c, lib.c: mutt_strlen() optimizations from + Byrial Jensen. + + * po/pl.po: Add the polish translation. + + * configure.in: Register the polish translation. + + * doc/manual.sgml.in: Fixes to the forwarding chapter. From + O'Shaughnessy Evans . + + * m4/README, m4/Makefile.am.in: Here is a small patch to + simplify m4/Makefile.am.in. This came out of a suggestion + I made to Jim Meyering (maintainer of GNU fileutils, where + I snarfed the code from :). (From: Lars Hecking + ) + +Fri Dec 18 10:22:59 1998 Thomas Roessler + + * mh.c: Catch an error condition when synchronizing mh + messages. + + * po/de.po: Fix a format which had %s instead of %d. + +Thu Dec 17 18:39:48 1998 Thomas Roessler + + * INSTALL: I've been told that the FreeBSD shell has been + fixed meanwhile. Additionally, add the note from Vikas on + patching Solaris to get mutt work properly on that system. + + * mh.c: Fix attachment deletion for maildir/mh folders. This + may fix other mh-related problems, too. + + * charsets/Makefile.in: Some installs aren't able to cope + with multiple files at once. + + * curs_lib.c: Don't even try to clear the status line when + not in curses mode. + +Wed Dec 16 13:23:06 1998 Thomas Roessler + + * imap.c: Two lines were in reverse order. Noted by Daniel + Eisenbud. + + * thread.c: Give Daniel Eisenbud a "lock" on this file. + + * pager.c: Fix "$resolve" behaviour for OP_TAG and + OP_TOGGLE_NEW from the pager. + + * curs_lib.c: SLang-related fixes to mutt_endwin(). + + * compose.c: Permit the user to set the typical MIME + parameters used with application/pgp messages. + + * color.c: Fix a segfault noted by Stephan Hack. (Fix noted + by Vikas.) + + * configure.in: Make the sendmail check compatible with + newer autoconf versions. Noted by Lars Hecking. + +Sun Dec 13 08:10:13 1998 Thomas Roessler + + * mx.c, curs_main.c: Don't dump core when closing a NULL + context. Fixes the "exit from no-mailbox mode" bug. + +Sat Dec 12 10:14:43 1998 Thomas Roessler + + * po/uk.po, po/ru.po, po/it.po, po/fr.po, po/es.po, po/de.po: + Post-release commit. + + * hook.c, curs_main.c: More _PGPPATH and us dist related fixes. + + * mutt.h: Don't define M_PGPHOOK unless _PGPPATH has been defined. + + * pager.c: Another reap.pl-related fix. + + * Makefile.am: The us-dist target was screwed. + + * charsets/parse_i18n.c, charsets/gen_charsets, + charsets/Makefile.in, thread.c, system.c, strcasecmp.c, + status.c, stamp-h.in, sort.h, sort.c, socket.c, snprintf.c, + signal.c, sha_locl.h, sha1dgst.c, sha.h, sendlib.c, send.c, + score.c, rfc822.h, rfc822.c, rfc2047.h, rfc2047.c, + rfc1524.h, rfc1524.c, resize.c, reldate.h, recvattach.c, + reap.pl, query.c, protos.h, prepare, postpone.c, pop.c, + pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.h, pgp.c, + pattern.c, parse.h, parse.c, pager.h, pager.c, mx.h, mx.c, + mutt_socket.h, mutt_regex.h, mutt_menu.h, mutt_curses.h, + mutt.h, mkinstalldirs, missing, mime.types, mime.h, mh.c, + menu.c, mbox.c, mapping.h, main.c, mailbox.h, lib.c, + keymap.h, keymap.c, install-sh, init.h, init.c, imap.h, + imap.c, hook.c, history.h, history.c, help.c, headers.c, + hdrline.c, hash.h, hash.c, handler.c, gnupgparse.c, + globals.h, getdomain.c, gen_defs, functions.h, from.c, + flags.c, filter.c, enter.c, edit.c, dotlock.h, dotlock.c, + date.c, curs_main.c, curs_lib.c, copy.h, copy.c, + configure.in, config.sub, config.guess, compose.c, + complete.c, commands.c, color.c, charset.h, charset.c, + buffy.h, buffy.c, browser.c, attach.h, attach.c, alias.c, + addrbook.c, acconfig.h, VERSION, TODO, README, OPS.PGP, OPS, + NEWS, Muttrc.in, Makefile.am, INSTALL, GPL, ChangeLog, + COPYRIGHT, ABOUT-NLS: *** empty log message *** + + * po/uk.po, po/ru.po, po/it.po, po/fr.po, po/es.po, + po/de.po, reldate.h, VERSION, ChangeLog: Release-commit for + 0.95i. + + * hash.c: Use a better hash function. Contributed by Stefan Langerman + to mutt-users. + +Fri Dec 11 20:48:14 1998 Thomas Roessler + + * reldate.h, VERSION, ChangeLog: 0.94.999 pre-release commit. + + * Makefile.am: The distdir target creates hard links for the + source files. This has the consequence that the us-dist + hook will demolish files in the main source tree. We have + to un-link the various instances of the source code. + + * INSTALL: Warn about regexp-related problems under Solaris 2.6. + + * po/uk.po, po/ru.po, po/it.po, po/fr.po, po/es.po, po/de.po: + Various last-minute changes and automatic updates. + + * main.c: Go into no-mailbox mode if the initial folder was + given explicitly (-f) and can't be opened. + + * mh.c: Undoing the mh_speed patch. + + * po/it.po, po/fr.po: l10n fixes. + + * curs_main.c: Start a new reply and postpone it. Then type + m (mail), and recall and send the postponed reply. The + replied message is _not_ flagged replied. + + (From Byrial Jensen.) + + * po/fr.po: Bug-fixed french l10n. + + * parse.c: Multipart parser fixes from Byrial. Finally. + + * po/it.po: Small fix. + +Thu Dec 10 22:48:56 1998 Thomas Roessler + + * po/fr.po, configure.in: Add the french l10n. + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, reldate.h: + post-release commit 0.94.99. + + * VERSION, README, ChangeLog: Pre-release commit for 0.94.99. + + * menu.c: Fix tag-prefix. + +Thu Dec 10 11:06:25 1998 Thomas Roessler + + * menu.c: Fix tag-prefix. + + * compose.c: + Redraw fix after the content type was changed on the compose menu. + +Tue Dec 8 23:09:53 1998 Thomas Roessler + + * help.c: Help screen resizing nit. From Gero Treuner. + + * doc/manual.sgml.in: Typo. + + * sendlib.c: + Work around sendmail 8.9.1a invalidating PGP/MIME signatures by + re-ordering MIME headers in the way sendmail does. + + * mh.c: + Keep track of file name changes for files wandering around between + the subfolders of a maildir. + + * mh.c: + More fixes to the maildir resynchronization code. This should now + also smoothly handle the case of messages _vanishing_ from maildir's + new/ subdirectory. + + * init.c: Make the debug file access unbuffered. Important if we are + debugging crashes. + +Mon Dec 7 21:13:44 1998 Thomas Roessler + + * mx.c, mh.c: + Fix a couple of flag-related bugs in the maildir folder update code. + + * imap.c: Fix a completely ugly comment formatting. + + * mutt.h: Adjust '#' to the first column. + + * rfc2047.c: Don't tag us-ascii headers as $Charset or unknown-8bit. + +Thu Dec 3 23:29:37 1998 Thomas Roessler + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, + reldate.h, VERSION, ChangeLog: release-commit 0.94.18. + +Wed Dec 2 20:12:35 1998 Thomas Roessler + + * contrib/Pine.rc, contrib/Mush.rc: + Bring the sample rc files better in synch with the actual code. + +Wed Dec 2 20:12:35 1998 Thomas Roessler + + * contrib/Pine.rc, contrib/Mush.rc: Bring the sample rc + files better in synch with the actual code. + + * recvattach.c: Remove a warning which comes from code + actually belonging to the send_charset patch. + + * rfc2047.c: Encode- and decode the "val" field when using + mutt with EXACT_ADDRESS enabled. + + * charsets/Makefile.in, Makefile.am: Small fixes to the + build process. From Lars Hecking. + + * compose.c: The attached patch fixes yet another redraw + related bug. When I call OP_SAVE from the Compose menu and + use the file-browser and 'q' out of the file-browser, the + screen still shows the browser, but the control is really in + the Compose menu. A Ctrl-L verifies this. Basically, a + screen redraw is missing. (From Vikas.) + + * mutt_menu.h, menu.c, compose.c: From the Compose menu, + invoke attach-message. Tag a whole bunch of messages. Say, + for example, 100. When you exit the folder, the Compose + menu's status line has disappeared. (From Vikas.) + + * browser.c: patch-0.94.17.vikas.browser_redraw.1 + +Mon Nov 23 21:10:12 1998 Thomas Roessler + + * protos.h, lib.c: + Change safe_malloc's size parameter from (unsigned int) to size_t. + + * send.c, protos.h, pattern.c, alias.c: From Byrial: + + I don't think that the match-all pattern modifier works as can be + expected from a logical point of view. + + The attached patch will make it work as I expect it to work: + + - It works on all patterns which explicit or implicit use address + lists: ~c, ~C, ~e, ~f, ~l, ~L, ~p, ~P, and ~t. (It didn't work + with ~l before). + + - It works such that a modified pattern always match, unless there + is at least one address in at least one of the referenced lists + that it doesn't match. + + * doc/manual.sgml.in, send.c, mutt.h, mh.c, init.h, Muttrc.in: + Introduce a new option $reply_self. From Vikas. + +Fri Nov 20 00:27:03 1998 Thomas Roessler + + * po/it.po: New it.po from Mario. + + * doc/mutt.man.in: Fix a small typo. + +Thu Nov 19 23:57:03 1998 Thomas Roessler + + * contrib/Pine.rc: Fix some ancient syntax. + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, send.c: + Hack around problems with multi-valued Reply-To headers. From + Roland Rosenfeld. + + * rfc2047.c: + Properly encode '_' characters in words which are qp-encoded. + + * sendlib.c: + Use mutt_is_message_type() in the message transformation code. + + * po/Makefile.in.in, doc/Makefile.in, charsets/Makefile.in, Makefile.am: + Fix all Makefiles. make DESTDIR=/path/to/something install should + work now. + +Wed Nov 18 23:09:46 1998 Thomas Roessler + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, reldate.h, VERSION, ChangeLog: + Release-commit for 0.94.17. + + * sendlib.c, protos.h, pgp.c, parse.c, lib.c, compose.c: + This patch simplifies the generation of content type parameters + significantly by introducing a funciton mutt_set_parameter(). + Additionally, we re-use code from parse.c for parsing user-input + content type headers on the compose screen. + + * compose.c: Remove some uuencode-related debris. + + * recvattach.c: + Remove some code which crept in from the external character set patch. + + * recvattach.c: + Make optional formats work while processing $attach_format. + +Wed Nov 18 22:57:03 1998 Thomas Roessler + + * sendlib.c, protos.h, pgp.c, parse.c, lib.c, compose.c: + This patch simplifies the generation of content type parameters + significantly by introducing a funciton mutt_set_parameter(). + Additionally, we re-use code from parse.c for parsing user-input + content type headers on the compose screen. + + * compose.c: Remove some uuencode-related debris. + + * recvattach.c: + Remove some code which crept in from the external character set patch. + + * recvattach.c: + Make optional formats work while processing $attach_format. + + * mh.c: Remove bogus re-sorting code from the maildir check routine. + + * mutt.h: + Include , so SEEK_SET is defined on some systems which + don't do so in . + +Tue Nov 17 13:23:26 1998 Thomas Roessler + + * po/uk.po, po/ru.po, po/it.po, po/es.po: + Checkpoint commit, containing quite a few fuzzy translations. + + * po/de.po: Update some messages. + + * m4/Makefile.am.in, m4/README, m4/gettext.m4, m4/lcmessage.m4, m4/progtest.m4, prepare, configure.in, Makefile.am: + Configuration fixes from Lars Hecking, with some more fixes and + modifications from myself. With some luck, you don't need a gettext + installation any more. + + * sendlib.c: + Fix the base64 encoder. The current code would produce slightly + unpredictible output which leads to bad signatures. + + * postpone.c, pgp.c, parse.c, pager.c: + Fix a search coloring related bug. + +Mon Nov 16 11:44:42 1998 Thomas Roessler + + * protos.h: Drop ci_attach - it doesn't exist. Noted by Byrial Jensen. + +Sun Nov 15 09:53:23 1998 Thomas Roessler + + * parse.c: Stupid typo. + + * protos.h, parse.c, attach.c: My version of Byrial's parse_part patch. + + * recvattach.c, protos.h, mutt.h, copy.c, compose.c: + I can elaborate a little more on the last paragraph. It is deletion + of the top level part direct under a message/rfc822 part which + gives problems because the headers of the message/rfc822 part have + to be changed in this case. It is hard to tell exactly how many + bytes and lines will be removed and added in this case. + + If we can refrain from deletion of such parts and thus only allow + deletion of parts direct under a multipart part, then it is + relative easy always to make correct Content-Length: and Lines: + headers in the copy. (The correctness of the Lines count is + dependent of the correctness of the initial value, though). + + (From: Byrial Jensen) + + * doc/manual.sgml.in: + Correcting Vikas' E-Mail address in the credits section. + +Sat Nov 14 08:24:56 1998 Thomas Roessler + + * doc/manual.sgml.in: Update Byrial's e-mail address. + + * copy.c: + Simplify the new attachment deletion code not to require an extra + temporary file. (From: Byrial Jensen ) + + * help.c, handler.c: Type cast nit from Gero Treuner. + +Fri Nov 13 18:31:06 1998 Thomas Roessler + + * imap.c: + Currently, Mutt won't use a default folder if just the IMAP server is + specified. In fact, if the folder isn't specified, it will core-dump. + + The attached patch will use INBOX as the IMAP folder name if none is + specified, eliminating the core-dump. + + (From: Aaron Schrab ) + +Thu Nov 12 21:52:01 1998 Thomas Roessler + + * mutt.h, copy.c: Byrial's latest attachment deletion patch. + + * mutt.h, lib.c, handler.c: Introduce a state_printf() function. + +Wed Nov 11 21:18:08 1998 Thomas Roessler + + * po/it.po: New it.po from Marco. + + * snprintf.c: Don't use the mutt_str* functions in this module. + + * strcasecmp.c: + the s/str.*cmp/mutt_str.*cmp/ replacement should not have taken + place here. + +Tue Nov 10 22:21:51 1998 Thomas Roessler + + * dotlock.c: Don't use mutt_strsomething in the dotlocking code. + + * send.c: Fix the $metoo option's behaviour. + + * thread.c, strcasecmp.c, status.c, sort.c, socket.c, + snprintf.c, sendlib.c, send.c, score.c, rfc822.c, rfc2047.c, + rfc1524.c, recvattach.c, query.c, protos.h, postpone.c, + pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.c, + pattern.c, parse.c, pager.c, mx.c, mh.c, menu.c, mbox.c, + main.c, lib.c, keymap.c, init.c, imap.c, hook.c, history.c, + help.c, headers.c, hdrline.c, hash.c, handler.c, + gnupgparse.c, getdomain.c, from.c, enter.c, edit.c, + dotlock.c, curs_lib.c, copy.c, compose.c, complete.c, + commands.c, color.c, charset.c, buffy.c, browser.c, + attach.c, alias.c, addrbook.c: Introduce or rewrite + mutt_{str*cmp,strlen} and use them all over the place. If + there are still segmentation faults due to missing NONULLs + over, they are gone now. + + * main.c: Add a "pseudo-credit" to the extended copyright notice. + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po, reldate.h, VERSION, ChangeLog: + Releasing 0.94.16. + + * sendlib.c, mx.h, mx.c, mbox.c, init.c, copy.c, commands.c, buffy.c, attach.c: + Experimental support for the so-called "kendra" mail folder format. + This seems to be used on OS/2 and is, actually, a slibhtly modified + version of the MMDF format. + + * parse.c: + Do some sanity checking when reading attachment. This fix should + catch bad attachments. + + * edit.c: + Fix a possible buffer overflow. (This seems to be the one noticed + by Pavel Gulchouck .) + + * compose.c: Wrong fix from Vikas. Undo it. (Noted by Byrial.) + +Tue Nov 10 21:02:27 1998 Thomas Roessler + + * sendlib.c, mx.h, mx.c, mbox.c, init.c, copy.c, commands.c, buffy.c, attach.c: + Experimental support for the so-called "kendra" mail folder format. + This seems to be used on OS/2 and is, actually, a slibhtly modified + version of the MMDF format. + + * parse.c: + Do some sanity checking when reading attachment. This fix should + catch bad attachments. + + * edit.c: + Fix a possible buffer overflow. (This seems to be the one noticed + by Pavel Gulchouck .) + + * compose.c: Wrong fix from Vikas. Undo it. (Noted by Byrial.) + + * curs_lib.c, compose.c: Fix a multi_choice related bug. From Vikas. + + * buffy.c: + Skip empty mailbox parameters. This fixes a segmentation fault + noted by Marco d'Itri. + +Mon Nov 9 19:28:42 1998 Thomas Roessler + + * from.c: Catch possible bad memory access. + + * doc/manual.sgml.in, sendlib.c, protos.h, init.h, globals.h, copy.c, Muttrc.in: + Rewrite copy_delete_attach(). + + * sort.c, score.c, protos.h, curs_main.c, color.c: + Fix an efficiency problem with the color index features. + + * doc/mutt.man.in: Replace @sharedir@ by @sysconfdir@. + + * doc/manual.sgml.in: + Make the default_hook documentation match the code. + + * main.c, curs_main.c: + Avoid duplicate mx_close_mailbox() when OP_QUIT is called. + + * browser.c: + The attached patch fixes a potential problem in folder_format_str() + where a fixed buffer might not be null terminated. From Vikas. + + * init.c: + The attached patch fixes a bug in :set variable= where variables + of type DT_SORT were not getting expanded (only 4 of them, but a bug + nevertheless). From Vikas. + + * browser.c: patch-0.94.15.vikas.browser_sort.3 + + * doc/manual.sgml.in: + Add a forwarding chapter to the manual. From Gero Treuner. + + * po/de.po: Revert de.po to the traditional German spelling rules. + + * po/de.po, pop.c: L10 fixes from Gero Treuner. + + * parse.c, handler.c: + A message/external-body handler. From Byrial Jensen. + + * protos.h, parse.c: + - remove the static declaration from parse_date() in parse.c, + - rename it to mutt_parse_date() + - fix a minor bug: the timezone information in an expires-header + was used to set the timezone of the send time. + + (From Byrial Jensen .) + + * Muttrc.in: Fix some spelling errors noted by Boris Wesslowski + . + + * handler.c: + Byrial Jensen's alternative_handler patches. This may lead to + non-desirable effects with attachment deletion; these effects will + go when the new attachment deletion code is implemented. + + * parse.c: + SeokChan LEE says KST has a nine hour offset from GMT. + + * pager.c, help.c: Fix the display of DEL in the pager. + + * send.c: Fix a group reply problem. + +Fri Oct 30 13:00:10 1998 Thomas Roessler + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po: + Some recent changes. + +Thu Oct 29 09:46:45 1998 Thomas Roessler + + * mbox.c: + Mbox robustness patch from Johnny Tevessen . + + * po/de.po: Fixing a typo. + + * imap.c: + This patch should cause mutt to ask for your IMAP login/password + again if its wrong. From Brandon Long. + +Wed Oct 28 21:48:36 1998 Thomas Roessler + + * doc/manual.sgml.in, reldate.h, VERSION, NEWS, ChangeLog: + 0.94.15 release commit. + + * po/uk.po, po/ru.po, po/it.po, po/es.po, po/de.po: + pre-release commit, take 1. + + * curs_lib.c: + Add an IsPrint check to mutt_message() and mutt_curses_error(). This + will prevent _some_ advert effects from l10ns which don't fit + together with the terminal's abilities. There are still quite a few + raw printw() etc. - we may wish to introduce our own, locale-safe + versions of these. + + * po/POTFILES.in: reldate contais really _no_ i18n-related data. + + * send.c: + Don't try to recall a postponed message when we are given a template. + + * copy.c: + Fix a possible segmentation fault when deleting nested attachments. + +Wed Oct 28 21:43:27 1998 Thomas Roessler + + * curs_lib.c: + Add an IsPrint check to mutt_message() and mutt_curses_error(). This + will prevent _some_ advert effects from l10ns which don't fit + together with the terminal's abilities. There are still quite a few + raw printw() etc. - we may wish to introduce our own, locale-safe + versions of these. + + * po/POTFILES.in: reldate contais really _no_ i18n-related data. + + * send.c: + Don't try to recall a postponed message when we are given a template. + + * copy.c: + Fix a possible segmentation fault when deleting nested attachments. + + * doc/manual.sgml.in, send.c, mutt.h, init.h: + Add a $forward_weed option which controls header weeding when + decode-forwarding messages. + + * po/ru.po, po/it.po, po/es.po, po/de.po: + German translation fixes from Gero plus checkpoint commit. + + * doc/manual.sgml.in, pager.h, pager.c, mutt_menu.h, keymap.c, help.c, curs_main.c, commands.c, attach.c, OPS: + Gero Treuner's help-wrap patch. + + * po/ru.po, po/it.po, po/es.po, po/de.po: + Adding a current spanish translation. + + * send.c: + if reply-to points to the address on the from header, use the from + header's value for composing a reply's recipient list, not the + reply-to header. + + * configure.in: add the ukrainian l10n. + +Tue Oct 27 19:02:45 1998 Thomas Roessler + + * Attic/configure: + Configure is generated automatically and should thus _not_ be part + of the CVS repository. + + * configure.in, Attic/configure, README, INSTALL: + Try to detect Solaris 2.4's broken regcomp(). + + * send.c: Move some code around. + + * doc/manual.sgml.in: Some documentation nits. + + * dotlock.c: + include config.h _before_ checking for HAVE_GETOPT. Noted by Scott + Perlman . + + * Muttrc.in: Add a macro for viewing the manual. + + * pgp.c, configure.in, Attic/configure: i18n fixes. + + * po/ru.po, po/es.po, po/it.po, po/de.po: + A couple of i18n fixes, plus a partial spanish translation from + Boris Wesslowski . + + * configure.in, Attic/configure: + Handle systems which have neither pgp2 nor pgp5, but gpg correctly. + + * compose.c: - snd_entry() is marked static + - You will only get a full redraw of the screen after invoking + pgp_send_menu if you selected "sign as". + - draw_envelope() and edit_address_list() use the same array of + strings for titles/prompts. This saves both string data and code + in both functions which have been a lot smaller. + + * sendlib.c, send.c, protos.h, postpone.c, compose.c: + Preserve FCC headers when postponing. From Vikas. + + * mx.c, mutt.h, imap.c: + Prevent mutt from re-reading IMAP folders before quitting. + +Thu Oct 22 13:53:47 1998 Thomas Roessler + + * send.c: Undo some superfluous changes. Pointed out by V.A. + + * send.c, protos.h, postpone.c: + - Preserve certain headers' values when recallling a postponed + message. TBD: Fcc. + + - Rename mutt_edit_message() to mutt_prepare_edit_message() since + that's what that function actually does. + + * mx.h, mx.c, lib.c, flags.c: + Make _all_ IMAP-related code conditionally defined. From Byrial + Jensen. + +Wed Oct 21 22:46:16 1998 Thomas Roessler + + * protos.h, pattern.c, hdrline.c: + Fix match-all for the ~p, ~P modifiers. + + * compose.c: Vikas' write_fcc patch. + + * doc/manual.sgml.in: Documentation nits from Byrial. + + * curs_lib.c: + Also accept numbers as input in mutt_multi_choice(). From Byrial. + + * prepare: Fix the documentation reference in prepare. + + * doc/devel-notes.txt: + Add a gettext automake macro patch which is needed for proper + building of mutt. + + * prepare, Attic/config.h.in, Attic/aclocal.m4, README, INSTALL: + Remove some automatically generated files from the CVS repository, + and add a script which generates them. + + * Makefile.am: Don't overwrite $(sysconfdir)/Muttrc if present. + + * po/ru.po, po/it.po, po/de.po, protos.h, curs_lib.c, compose.c, commands.c, browser.c: + Byrial Jensen's mutt_multi_choice() patch plus some German + translations. + + * pgpinvoke.c, gnupgparse.c: + Make gpg's output look a little bit cleaner. + + * po/ru.po, po/it.po, po/de.po, reldate.h: Release commit. + + * VERSION, ChangeLog: Preparing 0.94.14. + +Tue Oct 20 22:02:58 1998 Thomas Roessler + + * po/ru.po, po/it.po, po/de.po: Checkpoint commit. + + * Attic/config.h.in, Makefile.am: + Include VERSION with the distribution. + + * configure.in, Attic/configure, Attic/config.h.in, VERSION: + Don't hard-wire the program's version in configure.in, but use the + VERSION file instead. Stolen from gnupg. + + * ChangeLog: Checkpoint commit. + + * doc/manual.sgml.in, keymap.c, functions.h, NEWS: + Another macro-function fix from Vikas. + +Tue Oct 20 22:02:58 1998 Thomas Roessler + + * po/ru.po, po/it.po, po/de.po: Checkpoint commit. + + * config.h.in, Makefile.am: Include VERSION with the distribution. + + * configure.in, configure, VERSION, config.h.in: + Don't hard-wire the program's version in configure.in, but use the + VERSION file instead. Stolen from gnupg. + + * ChangeLog: Checkpoint commit. + + * socket.c, mutt_socket.h: Fix the multiple connection code. + From Brandon Long. + +Mon Oct 19 20:08:10 1998 Thomas Roessler + + * postpone.c: fix a typo. + + * Makefile.am: Fix dotlock's installation when DOTLOCK_GROUP is empty. + + * po/it.po: Ups, this was missing from the repository. + + * po/ru.po, po/de.po: Adding some new and improved German + translations. + + * init.c: handle domain == "@" properly. + + * postpone.c: Fix the behaviour when recalling postponed + messages: Content types would not be restored. + +Fri Oct 16 12:09:37 1998 Thomas Roessler + + * lib.c: Harden mutt_free_header() against NULL pointers. + + * keymap.c, handler.c: Nits from Vikas. + + * send.c: Fix a segmentation fault when OPT_RECALL is ask-something. + + * commands.c: Don't write out bad content-length and lines headers when + decode-saving a message. + +Thu Oct 15 23:09:30 1998 Thomas Roessler + + * rx/rxunfa.c, rx/rxsuper.c, rx/rxstr.c, rx/rxspencer.c, rx/rxsimp.c, rx/rxposix.c, rx/rxnode.c, rx/rxnfa.c, rx/rxhash.c, rx/rxgnucomp.c, rx/rxcset.c, rx/rxbitset.c, rx/rxbasic.c, rx/rxanal.c, rx/rx.c, rx/hashrexp.c, intl/textdomain.c, intl/localealias.c, intl/loadmsgcat.c, intl/l10nflist.c, intl/intl-compat.c, intl/gettext.c, intl/finddomain.c, intl/explodename.c, intl/dgettext.c, intl/dcgettext.c, intl/cat-compat.c, intl/bindtextdom.c, charsets/parse_i18n.c, thread.c, system.c, strcasecmp.c, status.c, sort.c, socket.c, snprintf.c, signal.c, sha1dgst.c, sendlib.c, send.c, score.c, rfc822.c, rfc2047.c, rfc1524.c, resize.c, recvattach.c, query.c, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgpinvoke.c, pgp.c, pattern.c, parse.c, pager.c, mx.c, mh.c, menu.c, mbox.c, main.c, lib.c, keymap.c, init.c, imap.c, hook.c, history.c, help.c, headers.c, hdrline.c, hash.c, handler.c, gnupgparse.c, getdomain.c, from.c, flags.c, filter.c, enter.c, edit.c, dotlock.c, date.c, curs_main.c, curs_lib.c, copy.c, config.h.in, compose.c, complete.c, commands.c, color.c, charset.c, buffy.c, browser.c, attach.c, alias.c, addrbook.c, ChangeLog: + Change "static char rcsid[]" to "static const char rcsid[]" to make + gcc shut up about this. + + * rx/Makefile.in, po/Attic/stamp-cat-id, po/ru.po, po/Attic/mutt.pot, po/de.po, po/Attic/cat-id-tbl.c, reldate.h, configure.in, configure, config.h.in, Attic/Makefile.in, ChangeLog: + Random pre-release clean-up. + + * po/Attic/mutt.pot, doc/manual.sgml.in, pattern.c, mutt.h: + This patch introduces the ~k pattern for messages containing + pgp key material. + +Thu Oct 15 20:15:46 1998 Thomas Roessler + + * rx/Makefile.in, po/Attic/stamp-cat-id, po/ru.po, + po/Attic/mutt.pot, po/de.po, po/Attic/cat-id-tbl.c, + reldate.h, configure.in, configure, config.h.in, + Attic/Makefile.in, ChangeLog: Random pre-release clean-up. + + * po/mutt.pot, doc/manual.sgml.in, pattern.c, mutt.h: + This patch introduces the ~k pattern for messages containing pgp key + material. + + * doc/manual.sgml.in: Add some missing key definitions. + + * mutt_curses.h: + There seem to be systems which don't know about KEY_ENTER. + + * po/mutt.pot, po/cat-id-tbl.c: Check-point commit, again. + + * sendlib.c: + Put #ifdefs around a variable which is only used for generating + uuencoded messages. + + * ChangeLog: Update. + + * po/ru.po, po/mutt.pot, po/cat-id-tbl.c, sendlib.c, + compose.c: Don't ever permit the user to generate uuencoded + messages with mutt. + + * keymap.c: A slightly modified version of Vikas' + help_unbound patch. + + * po/mutt.pot, sendlib.c, protos.h, postpone.c, parse.h, + parse.c, mh.c, mbox.c, main.c, imap.c, headers.c, buffy.c: + Fixing a memory hog which was introduced by the edit-message + patch. + +Wed Oct 14 22:58:04 1998 Thomas Roessler + + * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c, compose.c: + Warn the user before sending out uuencoded attachments. + + * handler.c: Fix prefix and utf8 issues in the uudecoder. + + * sendlib.c, parse.c, mime.h, handler.c, globals.h, config.h.in: + Thinking about this once again, ok folks, here comes x-uuencode + support. + + * handler.c: typo. + + * handler.c: + When Charset is utf-8 (not recommended!), don't active utf8 + translation in the various handler routines. + + * Makefile.in, Makefile.am: + Add -I$(includedir) to the C preprocessor flags. Per request of + Clint Olsen. + + * po/ru.po, po/de.po, charsets/parse_i18n.c, charsets/Makefile.in, configure.in, configure, config.h.in, Makefile.in, Makefile.am: + More build process clean-up. + + * po/mutt.pot, po/Makefile.in.in, charsets/Makefile.in, config.h.in, Makefile.in: + Removing some instances of gnu-make specific command line parameters. + + * doc/manual.sgml.in: Document the match-all feature. + + * po/mutt.pot, main.c, dotlock.c, configure.in, configure, config.h.in, Makefile.in, Makefile.am: + Various build fixes. + + * color.c: Adding some necessary ifdefs to color.c, From + Irving_Wolfe@wolfe.net. + +Tue Oct 13 23:37:05 1998 Thomas Roessler + + * po/ru.po, po/de.po: Checkpoint commit. This gets boring. + + * NEWS: Merging Vikas' NEWS file into the distributed one. + + * po/mutt.pot, config.h.in, Makefile.in, ChangeLog: Preparing 0.94.12. + + * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c, + reldate.h, recvattach.c, configure.in, configure, + config.h.in, commands.c, README, NEWS, Makefile.in, + Makefile.am, INSTALL: random pre-release clean-up. + + * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c, + po/POTFILES.in, reap.pl, gen_defs, configure.in, configure, + config.h.in, NEWS, Makefile.in, Makefile.am: Introducing a + us-dist target to create a USG-friendly version of mutt. + Additionally, the NEWS file is prepared for 0.95. + + * doc/devel-notes.txt: Add a short note on compiler warnings. + + * po/ru.po, po/de.po, po/POTFILES.in, po/Makefile.in.in, + charsets/gen_charsets, charsets/Makefile.in, missing, + mime.types: More $Id: ChangeLog.old,v 3.1 2002/12/07 14:14:59 roessler Exp $ strings. + + * Add RCS $Id: ChangeLog.old,v 3.1 2002/12/07 14:14:59 roessler Exp $ strings to (hopefully) all source files. + + * enter.c: Type Ctrl-V Ctrl-G in any input field. + + * curs_main.c: + Bumping some dprint statements' debug levels. From Vikas. + + * po/ru.po, po/mutt.pot, po/de.po: + Including the new ru.po file from "Andrej N. Gritsenko" + ; check-point commit. + +Mon Oct 12 19:53:49 1998 Thomas Roessler + + * recvattach.c, query.c, postpone.c, pgpkey.c, curs_main.c, + compose.c, browser.c, addrbook.c: The attached patch removes + some redundant code related to the macro function stuff. + Since each menu calls km_dokey() to get the 'op' number to + execute, the 'menu' argument to km_dokey() _is_ the + CurrentMenu. Hence, there is no need to explicitly + save/restore the CurrentMenu all over the code. The only + places it is being captured now is just before + mutt_enter_comamnd() is called. This is to help the 'exec' + command completion code so that it knows which menu to try + and complete the function name from. (From: Vikas Agnihotri + ) + + * doc/manual.sgml.in, doc/Attic/manual.sgml, + doc/Makefile.in, sendlib.c, main.c, init.c, configure.in, + configure, config.h.in, acconfig.h, Makefile.in, + Makefile.am: Mutt now correctly uses the sysconfdir as + determined by configure. + + * po/ru.po, po/mutt.pot, po/de.po: Checkpoint commit. + + * po/ru.po, po/mutt.pot, po/de.po, reldate.h, configure.in, + configure, ChangeLog: Check-point commit before 0.94.11 is + released. + +Sun Oct 11 22:11:00 1998 Thomas Roessler + + * doc/Makefile.in, contrib/Makefile.in: + Makefile clean-up as suggested by Marco d'Itri. + + * doc/dotlock.man.in, doc/Makefile.in: + Install dotlock's manual page under the correct name. + +Sun Oct 11 22:11:00 1998 Thomas Roessler + + * doc/Makefile.in, contrib/Makefile.in: + Makefile clean-up as suggested by Marco d'Itri. + + * doc/dotlock.man.in, doc/Makefile.in: + Install dotlock's manual page under the correct name. + +Thu Oct 8 13:22:16 1998 Thomas Roessler + + * README: Reference some of the new doc files. + + * doc/Makefile.in: Some more changes to the installation process. + + * doc/Makefile.in: + Fix the uninstall target; add some magic to build and install the + HTML version of the manual if we can. + + * doc/applying-patches.txt, doc/devel-notes.txt, + doc/PGP-Notes.txt, doc/Makefile.in: Some more documentation; + install the html version of the manual if it's there. + + * doc/manual.sgml: + The manual was wrong on the default binding for extract-keys. + +Wed Oct 7 22:19:27 1998 Thomas Roessler + + * doc/manual.sgml, pop.c, mutt.h, init.h, Muttrc.in: + POP3 LAST support. From Jason Lavoie by way of + Michael Elkins. + + * po/mutt.pot, po/cat-id-tbl.c: Clean-up commit. + + * gnupgparse.c: + Redirect stdin and stderr to /dev/null when invoking gpgm for + listing key IDs. + + * socket.c, mutt_socket.h, imap.c: + First fix of the IMAP expunge handling. From Brandon Long. + + * keymap.c, curs_lib.c: Fix macro functions for the pager menu. + + * keymap.c: + The attached patch fixes a minor inconsistency between the display + of special key-names in the help screen and their actual usage. The + help screen now shows the special keys exactly as you + would/could/should use them in the muttrc/command-line. (From: Vikas + Agnihotri ) + + * keymap.c: Fix the error message for unbound keys. From Vikas. + + * charsets/Makefile.in: s/make/$(MAKE)/ + + * charsets/Makefile.in: + UnixWare needs our own version of strcasecmp/strncasecmp. + + * browser.c: + Clean up behind an aborted sort-by prompt on the file browser. From + Vikas. + + * hdrline.c: + The attached patch fixes a minor bug in $index_format's %B and %b + where they didnt respect the given prefix. In addition, the manual + says that %B is supposed to fall back to %b if the message is not + sent to a known mailing list. The code was not doing that. (From: + Vikas Agnihotri , noted on comp.mail.mutt by + unny@rz114s0.rz.uni-karlsruhe.de (Vladimir Klebanov)). + + * doc/PGP-Notes.txt: + pgp_language is obsolete. Noted by Heiko Schlichting. + +Tue Oct 6 15:10:53 1998 Thomas Roessler + + * keymap.c: Macro function fixes. + + * curs_lib.c: With slang, ERR != -1. + + * po/mutt.pot, po/de.po: Message fix. + + * attach.c: Fix another pipe-related hang in mutt_view_attachment(). + +Mon Oct 5 21:37:15 1998 Thomas Roessler + + * configure, aclocal.m4: Another fix to libintl detection. + + * keymap.c, curs_lib.c: macro_function.2-3, from Vikas. + + * handler.c: File descriptor leak alert. + + * handler.c: + Avoid a hang due to blocking pipe writes in the auto view code. + + * keymap.c, curs_main.c, curs_lib.c: + Make exec grok >= 1 parameters; fix double ops problem in + index_menu(). + + * po/ru.po, po/mutt.pot, po/de.po, po/cat-id-tbl.c: + L10n changes corresponding to the macro-function patch. + + * flags.c, compose.c: Some fixes to the macro-function patch. + + * po/ru.po: Adding the Russian Localization. + + * recvattach.c, query.c, protos.h, postpone.c, pgpkey.c, pager.c, mutt_curses.h, mutt.h, menu.c, keymap.c, init.h, init.c, globals.h, flags.c, enter.c, curs_main.c, curs_lib.c, configure.in, configure, compose.c, commands.c, browser.c, addrbook.c, aclocal.m4: + Vikas' macro_function patch. + + * charsets/gen_charsets: + I'm told that some systems don't like "#!/bin/sh" at the beginning + of a script, but need "#! /bin/sh". + +Sun Oct 4 15:02:32 1998 Thomas Roessler + + * charsets/gen_charsets, configure.in, configure: + Fixing some make-related problems noted by Petri Kaukasoina + . + + * po/mutt.pot, send.c: Fix group-reply's behaviour. + + * doc/Attic/style-guide, doc/devel-notes.txt: + Replace style-guide by some more general notes on mutt development. + + * Makefile.in: Propagate fixes from Makefile.am. + + * ChangeLog: Preparing 0.94.10. + + * rx/Makefile.in: subdir=rx was missing here. + + * po/mutt.pot, po/de.po: Noise. + + * configure.in, configure, Makefile.am: + More fixes to the build process. This version was tested to build + cleanly under SuSE Linux and IRIX. + +Sun Oct 4 09:26:36 1998 Thomas Roessler + + * rx/Makefile.in: subdir=rx was missing here. + + * po/mutt.pot, po/de.po: Noise. + + * configure.in, configure, Makefile.am: + More fixes to the build process. This version was tested to build + cleanly under SuSE Linux and IRIX. + +Sat Oct 3 22:08:09 1998 Thomas Roessler + + * doc/Attic/manual.txt: + manual.txt can be rebuilt when making the dist - no need to keep + this in the repository. + + * ChangeLog: Preparing ChangeLog for 0.94.10. + + * contrib/Makefile.in: Ups. + + * rx/Makefile.in, po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/Makefile.in.in, doc/Attic/language50.txt, doc/Attic/language.txt, contrib/patch.slang-1.2.2.keypad.1, contrib/sample.mailcap, contrib/sample.muttrc, doc/Makefile.in, contrib/Mush.rc, contrib/Pine.rc, contrib/language.txt, contrib/language50.txt, charsets/gen_charsets, charsets/Makefile.in, Attic/sample.muttrc, Attic/sample.mailcap, Attic/reap.pl, pop.c, Attic/patch.slang-1.2.2.keypad.1, Attic/depend.awk, configure.in, configure, Attic/Pine.rc, Attic/Mush.rc, Makefile.in, Makefile.am, ChangeLog: + Source tree and make process changes. make dist and make + maintainer-clean should now work as they are supposed to. + +Sat Oct 3 22:06:19 1998 Thomas Roessler + + * contrib/Makefile.in: Ups. This one was missing from the + last commit. + + * rx/Makefile.in, po/mutt.pot, po/de.po, po/cat-id-tbl.c, + po/Makefile.in.in, doc/Attic/language50.txt, + doc/Attic/language.txt, contrib/patch.slang-1.2.2.keypad.1, + contrib/sample.mailcap, contrib/sample.muttrc, + doc/Makefile.in, contrib/Mush.rc, contrib/Pine.rc, + contrib/language.txt, contrib/language50.txt, + charsets/gen_charsets, charsets/Makefile.in, + Attic/sample.muttrc, Attic/sample.mailcap, Attic/reap.pl, + pop.c, Attic/patch.slang-1.2.2.keypad.1, Attic/depend.awk, + configure.in, configure, Attic/Pine.rc, Attic/Mush.rc, + Makefile.in, Makefile.am, ChangeLog: Source tree and make + process changes. make dist and make maintainer-clean should + now work as they are supposed to. + + * help.c: Remove an unprotected gettext() call. + + * missing: *** empty log message *** + + * missing: Persuade CVS to get the file modes right. + + * INSTALL: + Adding a note on SparcLinux problems when gcc is called with the + -pedantic flag. + +Fri Oct 2 17:39:47 1998 Thomas Roessler + + * po/mutt.pot, po/de.po: + A small fix to get autoview messages properly colored. + + * pattern.c, mutt.h, Makefile.in: patch-0.92.8.sec.match_all.1 + + * rx/Attic/Makefile: + The Makefile here is supposed to be generated by autoconf. + + * rx/Makefile.in, rx/Attic/Makefile, po/mutt.pot, configure.in, configure, Makefile.in, Makefile.am: + Fixing some build-related problems, and preparing 0.94.9p1. + + * doc/manual.txt, doc/manual.sgml, hdrline.c: + Roland Rosenfeld's first name patch. + + * mutt.h, compose.c: More () fixes. + + * mutt.h, edit.c, curs_lib.c, browser.c: + With SLang, addstr() is a macro. This means we should put + additional braces around _()-style arguments. + +Thu Oct 1 20:16:56 1998 Thomas Roessler + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/POTFILES.in, doc/Makefile.in: + Translate help strings. + + * charsets/Makefile.in, postpone.c, pager.c, help.c, compose.c, Makefile.in: + Translate help strigns. + + * intl/VERSION, intl/Attic/libintl.h, intl/Attic/libintl.glibc, intl/Attic/intlh.inst.in, intl/Attic/COPYING, intl/Attic/BUGS, intl/Attic/AUTHORS: + *** empty log message *** + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/POTFILES.in, recvattach.c, query.c, pager.c, curs_main.c, compose.c, browser.c, addrbook.c: + Translate the various help lines. + + * mutt.h, lib.c, handler.c: Gero Treuner's reply_quote patch. + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c, po/POTFILES.in: + Add l10n for handler.c. + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c, curs_lib.c: + Make mutt_yesorno() language sensitive. + + * po/de.po: Various German-language related fixes. + + * reldate.h, configure.in, configure, TODO, Makefile.in, ChangeLog: + Preparing 0.94.9i. + + * po/de.po: German l10n, first take. + + * intl/Attic/AUTHORS, intl/Attic/BUGS, intl/Attic/COPYING: + Adding legalese. + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c, main.c: More i18n fixes. + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c: + Adapting the catalog files to 0.94.8. + + * charsets/Makefile.in, configure.in, configure, Makefile.in, Makefile.am: + Various automake and installation fixes. + + * po/Makefile.in.in, po/POTFILES.in, po/cat-id-tbl.c, po/de.po, po/mutt.pot, po/stamp-cat-id, intl/Attic/intlh.inst.in, intl/Attic/libintl.glibc, intl/Attic/libintl.h, intl/ChangeLog, intl/Makefile.in, intl/bindtextdom.c, intl/cat-compat.c, intl/dcgettext.c, intl/dgettext.c, intl/explodename.c, intl/finddomain.c, intl/gettext.c, intl/gettext.h, intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, intl/l10nflist.c, intl/libgettext.h, intl/linux-msg.sed, intl/loadinfo.h, intl/loadmsgcat.c, intl/localealias.c, intl/po2tbl.sed.in, intl/textdomain.c, intl/xopen-msg.sed, doc/Makefile.in, thread.c, stamp-h.in, status.c, sort.c, signal.c, sendlib.c, send.c, score.c, rfc1524.c, recvattach.c, query.c, postpone.c, pop.c, pgppubring.c, pgpkey.c, pgp.c, pattern.c, parse.c, pager.c, mx.c, missing, mutt.h, mh.c, menu.c, mbox.c, main.c, lib.c, keymap.c, init.c, imap.c, hook.c, help.c, headers.c, handler.c, gen_defs, flags.c, edit.c, date.c, curs_main.c, curs_lib.c, copy.c, configure.in, configure, config.h.in, compose.c, commands.c, color.c, buffy.c, browser.c, attach.c, alias.c, aclocal.m4, addrbook.c, acconfig.h, ABOUT-NLS, Makefile.am, Makefile.in: + Adding gettext support, based on the patch by Marco d'Itri. + + * TODO: add a note about the currently-missing mh_sequences support. + +Thu Oct 1 11:22:51 1998 Thomas Roessler + + * po/de.po: German l10n, first take. + + * intl/AUTHORS, intl/BUGS, intl/COPYING: Adding legalese. + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c, main.c: More i18n fixes. + + * po/mutt.pot, po/de.po, po/cat-id-tbl.c: + Adapting the catalog files to 0.94.8. + + * charsets/Makefile.in, configure.in, configure, Makefile.in, Makefile.am: + Various automake and installation fixes. + + * po/Makefile.in.in, po/POTFILES.in, po/cat-id-tbl.c, + po/de.po, po/mutt.pot, po/stamp-cat-id, intl/ChangeLog, + intl/Makefile.in, intl/bindtextdom.c, intl/cat-compat.c, + intl/dcgettext.c, intl/dgettext.c, intl/explodename.c, + intl/finddomain.c, intl/gettext.c, intl/gettext.h, + intl/gettextP.h, intl/hash-string.h, intl/intl-compat.c, + intl/intlh.inst.in, intl/l10nflist.c, intl/libgettext.h, + intl/libintl.glibc, intl/libintl.h, intl/linux-msg.sed, + intl/loadinfo.h, intl/loadmsgcat.c, intl/localealias.c, + intl/po2tbl.sed.in, intl/textdomain.c, intl/xopen-msg.sed, + doc/Makefile.in, thread.c, stamp-h.in, status.c, sort.c, + signal.c, sendlib.c, send.c, score.c, rfc1524.c, + recvattach.c, query.c, postpone.c, pop.c, pgppubring.c, + pgpkey.c, pgp.c, pattern.c, parse.c, pager.c, mx.c, missing, + mutt.h, mh.c, menu.c, mbox.c, main.c, lib.c, keymap.c, + init.c, imap.c, hook.c, help.c, headers.c, handler.c, + gen_defs, flags.c, edit.c, date.c, curs_main.c, curs_lib.c, + copy.c, configure.in, configure, config.h.in, compose.c, + commands.c, color.c, buffy.c, browser.c, attach.c, alias.c, + aclocal.m4, addrbook.c, acconfig.h, ABOUT-NLS, Makefile.am, + Makefile.in: Adding gettext support, based on the patch by + Marco d'Itri. + + * TODO: add a note about the currently-missing mh_sequences support. + + * send.c: + Fix the PgpSignMicalg vanishing when recalling postponed messages. + Bug squashed by Bjørn Fischer. + +Wed Sep 30 13:56:24 1998 Thomas Roessler + + * doc/manual.txt, doc/manual.sgml: SGML fix. + + * postpone.c, headers.c: + Don't generate a NULL micalg parameter when getting postponed + messages. + + * functions.h: + Removing some superfluous key bindings from functions.h. (From: + Gero Treuner ) + + * doc/manual.sgml, init.c: + Add some more support for version-dependant configuration files. + + * copy.c: + When forwarding a mail (nomime_forw) and you have forw_quote set, + mutt inserts a blank line between header and body of the forwarded + message. + + * compose.c: + Tell the user how to attach messages when using the attach-message + feature. + + * doc/manual.sgml, pattern.c, mutt.h: + Add ~g and ~G patterns for PGP signed and encrypted messages. + + * doc/manual.sgml: Documentation for Vikas' latest features. + +Tue Sep 29 15:40:01 1998 Thomas Roessler + + * status.c: + _Really_ fix an unset or too short StChars varialbe. (From Vikas.) + + * rfc822.c: Fix a segmentation fault occuring with certain badly-formed + RFC822-like addresses. + + * hdrline.c: Make status characters work again. + + * doc/manual.txt, doc/manual.sgml: Documenting some more variables. + + * Muttrc.in: Add newly added variables to the default system muttrc. + + * status.c: Catch short StChars values. + + * mutt.h, init.c, hdrline.c: Add caching for a message's flags. + + * charsets/parse_i18n.c, charsets/gen_charsets, charsets/Makefile.in, Makefile.in: + patch-0.94.7i.rr.charsets_fix.1, from Roland Rosenfeld. + + * doc/manual.txt, doc/manual.sgml, configure.in, configure: + Some nits from Gero Treuner. + +Mon Sep 28 17:40:47 1998 Thomas Roessler + + * pager.c, curs_main.c: Vikas' pipe-redraw fix. + + * doc/manual.txt, doc/manual.sgml, doc/Makefile.in, GPL, main.c, COPYRIGHT, Attic/COPYING: + A first take at bringing copyright notices and credits into synch + with reality. + + * reldate.h, configure.in, configure, TODO, Makefile.in, ChangeLog: + Preparing 0.94.8i. + +Sat Sep 26 10:13:39 1998 Thomas Roessler + + * mh.c: Changing the index_hint handling for mh folders once again. + + * mh.c: + Resort the incoming folder from mh_sync_mailbox() also when new mail + arrived. + +Sat Sep 26 10:13:39 1998 Thomas Roessler + + * mh.c: Changing the index_hint handling for mh folders once again. + + * mh.c: + Resort the incoming folder from mh_sync_mailbox() also when new mail + arrived. + +Fri Sep 25 06:56:35 1998 Thomas Roessler + + * pager.c: patch.mutt-0.94.5i.ld.quote_levels.3-4 + +Thu Sep 24 23:19:50 1998 Thomas Roessler + + * pager.c: A new quote_levels patch from liviu. + + * sendlib.c: + Rewrite the base64-encoder used for messages. This should be + unified with the encoder in rfc2047.c at some point. + + * pager.c: Undoing Livius quote-levels patch for now. + + * sendlib.c, mutt.h, charset.h, charset.c: + [patch-0.94.7i.gt.charset-send.1.gz] With the new charset support in + mutt there are better chances to say whether a mail to send consists + of characters of the ASCII set only (the charset should be + "us-ascii" then) or of other characters from the given charset (this + charset should be given then): ASCII characters have the unicode + values from 0 to 127. + + * init.c: Fix a segmentation fault with mismatched backticks. + + * init.c: Vikas' merged completion patch, level 3. + +Wed Sep 23 20:01:06 1998 Thomas Roessler + + * pager.c, mutt_regex.h, init.h: Liviu Daia's smiley patch. + + * status.c, sendlib.c, recvattach.c, protos.h, pager.h, pager.c, mutt.h, main.c, init.h, curs_main.c, curs_lib.c, compose.c, commands.c: + Disable recursive invocations of the attach-message function. + + * mh.c: Really fix the index hints. + + * mh.c: Correct the index_hint handling in mh_check_mailbox(). + + * sendlib.c: RFC2047-encode the mail-followup-to header. + + * TODO: Remove the maildir/mh resynch entry. + + * pager.c: + There is a long-standing problem in Mutt, related to coloring the + various levels of quoting: if the attributions are missing, like + this: + >>> blah blah from A + >> blah blah from B + > blah blah from C + + then the "quoted" color object is associated with ">>>", "quoted1" + with ">>" and "quoted2" with ">" --- which is not what most people + expect. The reason is Mutt doesn't count the quote characters (since + there is no way to distinguish between a single quote ">> " and a + ">" followed by a "> "), and it allocates colors as it finds new + types of quote prefixes. The attached patch fixes this problem still + without counting the quote characters. + +Tue Sep 22 22:54:52 1998 Thomas Roessler + + * mx.h, mx.c, mutt.h, mh.c, mbox.c, buffy.c: + A first take at corrected mh/maildir support. + + * mx.c, mh.c: Some fixes and code clean-ups. + + * mutt.h, mh.c, init.h: Introduce the $mh_purge option. + + * sendlib.c: Produce "undisclosed-recipients:;" instead of + ""undisclosed-recipients:;":;" when the user gives no To-Header. + + * mx.c: When generating new messages in MH folders, the initial number + should be "1", not "2". Fix from Gero Treuner. + + * init.c: patch-0.94.7i.vikas.jmy.misc_complete.2 + +Mon Sep 21 12:49:50 1998 Thomas Roessler + + * sendlib.c: Avoid a dangling pointer in mutt_message_to_7bit(). + +Sun Sep 20 12:05:39 1998 Thomas Roessler + + * pager.c: Byrial Jensen's bold-underline patch. + + * charsets/parse_i18n.c: parse_i18n.c doesn't really need snprintf. + +Fri Sep 18 05:45:56 1998 Thomas Roessler + + * reldate.h, configure.in, configure, ChangeLog: Preparing 0.94.7i. + + * protos.h, init.c, enter.c: + Applying the third generation of command completion patches. + +Fri Sep 18 05:40:24 1998 Thomas Roessler + + * protos.h, init.c, enter.c: + Applying the third generation of command completion patches. + +Wed Sep 16 20:08:25 1998 Thomas Roessler + + * curs_lib.c: + Attached is a minor fix to mutt_getch in curs_lib.c - as of 0.93.2i, + if +'metakey' and 'timeout' were both set, mutt_getch was returning + an ESC rather than -1, which resulted in 'key not bound' messages + every 'timeout' seconds. (From: Tim Walberg ) + + * copy.c: + [patch-0.94.6i.oe.dprint2.1] Fix a segmentation fault when running + in -d2 mode. + + * keymap.c: Use for function keys as well as for other special + keys. Additionally, this patch makes it possible to use + all special keys inside a key _sequence_. + + * sendlib.c, mutt.h, curs_main.c, compose.c: + Introduce the OPTUSEHEADERDATE pseudo-option to control + mutt_write_rfc822_header()'s behaviour for the purposes of + the edit_message feature. + + * init.c: When parsing aliases, don't consider ';' a token + delimiter. + +Tue Sep 15 21:41:51 1998 Thomas Roessler + + * init.c: Undoing Vikas' complete patch and applying + patch-0.94.6i.jmy.cycle_complete.1 instead. + + * handler.c: _Really_ fix CRLF handling. + + * charset.c: Fix the crlf handling. + + * pgppubring.c: UTF8-decode PGP user ID packets. + + * rfc2047.c, mutt.h, lib.c, handler.c, charset.h, charset.c: + Adding basic UTF-8 support. + + * copy.c: When using mutt_copy_header with CH_TXTPLAIN, generate a + content-type _with_ a character set parameter. + + * Makefile.in: Correcting a typo in the clean target. + + * charsets/parse_i18n.c, charsets/gen_charsets, charsets/Makefile.in, handler.c, charset.h, charset.c: + Add charset alias support and fix various errors in the + character set code. + + * charset.c: Fix mutt_display_char to map '\0' to itself regardless of + the translation table we use. + + * charsets/Makefile.in, charsets/gen_charsets, charsets/parse_i18n.c, Attic/gen-charset.c, configure.in, configure, charset.h, charset.c, Makefile.in: + Generate the character set tables from i18n files. + + * imap.c: Finally fix imap_quote_string(). + + * compose.c: [patch-0.94.6i.gt.arrow.1] Add M_ARROWCURSOR on the + compose menu. + +Mon Sep 14 21:33:34 1998 Thomas Roessler + + * imap.c: Fix IMAP quoting. + + * Muttrc.in: Speling corection for Muttrc.in. + + * init.c: [patch-0.94.6.vikas.complete.1] Fix a completion-related + buffer overflow. + +Sun Sep 13 15:29:54 1998 Thomas Roessler + + * reldate.h, configure.in, configure, ChangeLog: Preparing 0.94.6i. + + * sendlib.c, rfc2047.c, recvattach.c, hash.h, Attic/gen-charset.c, handler.c, configure.in, configure, commands.c, charset.h, charset.c, Makefile.in: + This patch adds on-demand loading of character set tables, + changes the default location of $SHAREDIR, and fixes some + compilation problems occuring on machines without PGP + installed. + +Sun Sep 13 15:27:03 1998 Thomas Roessler + + * sendlib.c, rfc2047.c, recvattach.c, hash.h, + gen-charset.c, handler.c, configure.in, configure, + commands.c, charset.h, charset.c, Makefile.in: + This patch adds on-demand loading of character set + tables, changes the default location of $SHAREDIR, + and fixes some compilation problems occuring on + machines without PGP installed. + +Sat Sep 12 19:58:56 1998 Thomas Roessler + + * sendlib.c: Fixing a silly typo in the edit-message code. + + * rfc2047.c, charset.c, charset.h, handler.c, Makefile.in: + [patch-0.93.2i.ru.mmultiple_charsets.gz] This patch adds + support for international character sets. Currently, mutt + knows about the following character sets and is able to + convert between them: + + iso-8859-1, ..., iso-8859-9, koi8-r, windows-1251, x-cp866. + + (From: Ruslan Ermilov ) + + * recvattach.c, protos.h, pattern.c, mutt.h, + init.c, history.h, enter.c, commands.c: When + entering a 'set' command on the command-line, + pressing TAB after string_var= will insert the + current value of that variable. Note that this + works only for variables of type 'string'. + + Also fixes the following buglets in command-completion: + + 1. doesnt work if you started the command-line with + whitespace + + 2. Seems to think that 'Set', 'ReSeT', etc are valid + commands (since it checks for 'strcasecmp' instead of + 'strcmp' when completing the variable names Also fixes + the following buglets in command-completion: + + (From: Vikas Agnihotri ) + + * enter.c: Use the proper history class when + entering mutt commands. + + * imap.c: [patch-0.94.5i.jmy.imap_quote.1] + + * sendlib.c, send.c, protos.h, postpone.c, + parse.c, mutt.h, lib.c, functions.h, curs_main.c, + compose.c, OPS: Adding the edit-message feature. + + * hdrline.c: [patch-0.94.5.vikas.collapse_format.2] - introduce %M for + the number of messages which is hidden in a thread. + +Tue Sep 8 19:32:57 1998 Thomas Roessler + + * TODO: Bogus bug. Actually, by setting use_mailcap=no, it _is_ + possible to view the header of a single-part message with + a non-autoview body type. + + * recvattach.c: This patch makes the view attachment menu show all + message/rfc822 parts as a new level, not only the + multipart messages. This makes it possible to display a + message/rfc822 part which includes only a image/jpeg part + or something else which cant be viewed in the pager. + (From: Jimmy Mäkelä ) + + * recvattach.c, pgp.c, copy.c: + Change the interface of pgp_decrypt_mime() to enable this + function to do some sanity checks. + +Mon Sep 7 20:47:25 1998 Thomas Roessler + + * recvattach.c: + Don't descend into multipart/encrypted on the recvattach + menu. + + * sendlib.c, recvattach.c, pgp.h, pgp.c, lib.c, handler.c, commands.c: + [patch-0.94.5i.tlr.pgp_fixes.1] This patch fixes various + pgp-related issues. In particular, mutt won't segfault + when trying to decrypt-save messages from the index, and + the presence of a PGP-encrypted body part on the + attachment menu will no longer confuse the MIME parser. + + * curs_lib.c: Clear the "Exit Mutt" prompt. + + * doc/manual.txt, doc/manual.sgml: SGML typo. + + * rfc822.c: Some testing. + + * enter.c: Yet another fix to the alias and query completion stuff: + Skip leading white space when constructing the addresses. + + * enter.c: Don't use as an address delimiter when using + query-complete and alias-complete. + + * rfc1524.c: Quote MIME parameters when doing %{MIME-parameter} + substitution. + + * sendlib.c, recvattach.c, protos.h, pgp.h, pgp.c, pager.c, mutt.h, init.h, handler.c, functions.h, curs_main.c, copy.h, copy.c, commands.c, OPS.PGP: + Introducing decrypt-save, decrypt-copy, and + $forw{ard,}-decrypt. Based on work by Emil Laurentiu. + + * mbox.c: [patch-0.94.4i.matthewf.writingmessages-fix.1] Fix the + display when synchronizing mbox mail folders. + + * query.c, protos.h, pattern.c, lib.c, curs_lib.c: Fix simple patterns. + + * protos.h, mx.c, browser.c: Put the S_ISLNK definition into protos.h. + + * pgp.c: Fixing convert_to_7bit(). From Liviu Daia. + +Sun Sep 6 11:35:34 1998 Thomas Roessler + + * lib.c: Fixing the quoting of shell specials in mutt_expand_fmt(). + + * query.c: Change snprintf to mutt_expand_fmt when expanding the + query command. + + * protos.h, lib.c, attach.c, TODO: + [patch-0.94.5i.tlr.safe_symlink.1] Introduce + safe_symlink() for /tmp-safe symlinking in the + nametemplate code. + + * reldate.h, configure.in, configure, TODO, ChangeLog: + Preparing 0.94.5i. + +Fri Sep 4 15:53:27 1998 Thomas Roessler + + * sendlib.c: Catch MIME parameters with p->value == NULL. + + * sendlib.c: Fixing a memory leak in mutt_prepare_envelope(). + +Fri Sep 4 15:53:27 1998 Thomas Roessler + + * sendlib.c: Catch MIME parameters with p->value + == NULL. + + * sendlib.c: Fixing a memory leak in + mutt_prepare_envelope(). + +Tue Sep 1 06:54:53 1998 Thomas Roessler + + * imap.c: IMAP fixes from Nathan Neulinger. + (<19980831170941.A7327@umr.edu> on mutt-dev.) + +Mon Aug 31 16:46:29 1998 Thomas Roessler + + * send.c: Fix a small problem with Liviu's + attach_fcc patch. + + * compose.c: Updating to + patch-0.94.4.vikas.attach_message.3. + + * thread.c, protos.h, mutt.h, init.h, hdrline.c, + curs_main.c: Updating to + patch-0.94.4.vikas.collapse.3. + +Sat Aug 29 08:27:02 1998 Thomas Roessler + + * doc/manual.txt, doc/manual.sgml: Correct an + editor key binding example. + +Fri Aug 28 19:09:24 1998 Thomas Roessler + + * send.c, pgp.h, pgp.c: Cleaning up the fcc_attach + hack. From Liviu. + + * functions.h, browser.c, OPS: + [patch-0.94.4i.tlr.display_filename.1] Introduce a + new function "display-filename" which displays the + currently selected file's name on the message + line. + + * attach.c: [patch-0.94.4i.tlr.get_attachment.1-2] + Get the attachment time stamping business right. + + * protos.h, functions.h, compose.c, attach.c, OPS: + [patch-0.94.4i.tlr.get_attachment.1] Create a new + "get-attachment" function on the compose menu + which will copy an attachment to a temporary file. + + * compose.c: [patch-0.94.4.vikas.attach_message.1] + Cleaning up some of the attach-message code. + + * thread.c: removing superfluous include + statements. + +Thu Aug 27 23:51:58 1998 Thomas Roessler + + * curs_main.c: code cosmetics. + + * thread.c, sort.c, protos.h, pattern.c, mx.c, + mutt.h, mbox.c, init.h, hdrline.c, functions.h, + curs_main.c, OPS: [patch-0.94.4.vikas.collapse.2] + Vikas' collapse-thread patch. + + * recvattach.c, postpone.c, mutt.h, lib.c, + curs_main.c, browser.c, addrbook.c: + [patch-0.94.4i.gt.arrowcursor.1] Padding to the + end of line/right jusitifying does not work in + menus when $arrow_cursor is set, because the extra + space needed for the arrow is not taken into + account. (From Gero Treuner + ) + + * Attic/testmsg, rfc1524.c: + [patch-0.94.4i.tlr.shell_quote.1-2] Fix a + brain-dead segmentation fault when freeing + non-allocated memory. + + * doc/Attic/mutt.sgml: Mh. This seems to have + shown up again while cleaning up the CVS branches. + + * sendlib.c, send.c, protos.h, pgp.h, pgp.c: Make + $fcc_attach work correctly when sending + PGP-encrypted messages. Hack by Liviu. + + * doc/manual.txt, doc/manual.sgml: Document + attach_format. (From: Gero Treuner + ) + + * rfc1524.c, protos.h, pgpinvoke.c, mx.c, lib.c, + curs_lib.c: [patch-0.94.4i.tlr.shell_quote.1] Try + to quote file name arguments and the like for + shell commands. + + * pgpkey.c: Minor nit: if you enter the wrong key + ID at Mutt's prompt, Mutt should erase the old + value --- otherwise people might think it has just + hung there. (From Liviu Daia.) + +Wed Aug 26 21:12:23 1998 Thomas Roessler + + * rfc822.c: Another possible memory leak in + rfc822_parse_adrlist. The problem and the patch + are pretty much the same as with the last fix + applied to this file - it's just ',' instaed of + ';' this time. + + * rfc822.c, TODO: + [patch-0.94.4i.tlr.rfc822_leak.1] Fixing a memory leak in + the rfc822_parse_adrlist(). + + Some explanations seem to be in order here. Let's look at + the code: + + 386 else if (*s == ';') + 387 { + 388 if (phraselen) + 389 { + 390 phrase[phraselen] = 0; + 391 add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1); + 392 } + 393 else if (commentlen && !last->personal) + 394 { + 395 comment[commentlen] = 0; + 396 last->personal = safe_strdup (comment); + 397 } + 398 #ifdef EXACT_ADDRESS + 399 if (last && !last->val) + + Line 399 contains the change; previously, it looked like + this: + + 399' if (last) + + 400 last->val = mutt_substrdup (begin, s); + 401 #endif + 402 + 403 /* add group terminator */ + 404 cur = rfc822_new_address (); + 405 if (last) + 406 { + 407 last->next = cur; + 408 last = cur; + 409 } + 410 + 411 phraselen = 0; + 412 commentlen = 0; + 413 s++; + 414 begin = s; + 415 SKIPWS (begin); + 416 } + + OK, what happens? There are essentially two situations here: + + -> We have already parsed a complete address specification + and know about this fact, but there was no new address + information. This is the case if we are parsing + through addresses like + + undisclosed-recipients:; + + or + + recipients: a, b, c,; + + (Note the extra ',' before the ';'!) + + In this case, some of the other code in rfc822.c has + already filled in last->val, and we really shouldn't + overwrite that with a NULL pointer. + + -> The ';' finishes an address spec, like in + + recipients: a; + + In this case, last is either set by add_addrspec(), or + it has already been set by some of the previous code + (comment handling, ...). Anyway, last->val is still + NULL, so it is correct to write the complete addr spec + to last->val. + + * imap.c: Error message cosmetics. + +Tue Aug 25 22:34:58 1998 Thomas Roessler + + * rfc1524.c, attach.c, TODO: + [patch-0.94.4i.tlr.nametemplate.1] Fix + nametemplate support: We should not move the + user's files around just to make them match + mailcap's idea of their file name. This patch uses + symbolic links instead. + + * curs_main.c: [patch-0.94.4i.tlr.synch_fault.1] + Start up two mutts. Delete the last message in + both of them. Synchronize the mailbox in both of + them. Segmentation fault. + + * TODO: adding a few notes. + + * commands.c: If you issue "decode-save" on an + encrypted message without reading it first, Mutt + won't prompt you for a passphrase, and it will + happily write an empty message, deleting the + original. (From an unnamed colleague of Liviu + Daia.) + + * imap.c: [patch-0.94.4i.tlr.imap_newline.2] Use + cr nl instead of single nl when uploading a + message to an imap server. + + * sendlib.c, protos.h, postpone.c, compose.c: + [patch-0.94.4i.tlr.encoding.1] Fix + content-transfer-encoding updates when renaming + files from the compose menu and when recalling + postponed messages. + + * imap.c: s/free/FREE/ + +Mon Aug 24 19:40:35 1998 Thomas Roessler + + * TODO, Attic/BUGS: Compile BUGS and TODO into a + comprehensive issue list. + + * Attic/BUGS: Clean up the bug list. + + * reldate.h, configure.in, configure, ChangeLog: + 0.94.4i. + + * doc/manual.txt, doc/manual.sgml: Documenting + $hidden_host. + + * thread.c, curs_main.c: Fix "previous-subthread" + in reverse-threads mode, allow next-(sub)thread + and previous-(sub)thread to work in limited mode. + (From: Liviu Daia) + + * doc/manual.txt, doc/manual.sgml: Documenting $hidden_host. + + * thread.c, curs_main.c: Fix "previous-subthread" + in reverse-threads mode, allow next-(sub)thread + and previous-(sub)thread to work in limited mode. + (From: Liviu Daia) + +Sun Aug 23 10:05:41 1998 Thomas Roessler + + * sendlib.c, send.c, protos.h, mutt.h, main.c, + init.h, init.c, configure.in, configure, + config.h.in, alias.c, acconfig.h, INSTALL: + [patch-0.94.3i.tlr.hidden_host.1] Replace the + --enable-hidden-host configure switch by a + configuration variable $hidden_host which can be + changed at run-time. This variable will _not_ + affect the generation of message-IDs since we'll + get into uniqueness problems if we just use the + domain here. + + Needs to be documented. + + * doc/manual.txt: Committing the latest manual + changes. + + * Attic/socket.c, imap.c: + [patch-0.94.3.bl.imap_buffy.1-2] Fixing the + buffered read stuff. + + * Attic/mutt_socket.h: Ups, this one was missing + from Brandon's IMAP patch. + +Sat Aug 22 14:24:18 1998 Thomas Roessler + + * help.c: [patch-0.94.3i.gt.beautify_help.1.gz] + General help beautification. From Gero Treuner. + + * doc/manual.sgml, keymap.h, keymap.c, help.c, + Muttrc.in: [patch-0.94.3i.gt.description.1] + Introduce macro descriptions. + + * doc/manual.sgml, init.h, init.c, browser.c: Add + a negation operator "!" to $mask's syntax (as in + the *-hooks). From Liviu. + + * recvattach.c: Make Vikas' attach_split and + Brandon's other_type patches fit together. + + * recvattach.c, mutt.h, init.h, globals.h, + compose.c: [patch-0.94.3.vikas.attach_split.3] + Re-introduce attach_split. + + * Attic/socket.c: [patch-0.94.3.bl.imap_buffy.1] + Adding Brandon's IMAP buffy support. + + * mx.c, mutt.h, mailbox.h, imap.h, imap.c, + curs_lib.c, configure.in, configure, buffy.c, + browser.c, Attic/BUGS: + [patch-0.94.3.bl.imap_buffy.1] Adding Brandon's + IMAP buffy support. + +Fri Aug 21 08:17:09 1998 Thomas Roessler + + * browser.c: Enter the file browser, type a mask + which doesn't match any file in the current + directory, clean the mask. Segfault. Fix from + Liviu Daia. + +Thu Aug 20 22:32:46 1998 Thomas Roessler + + * sendlib.c, recvattach.c, parse.c, mutt.h, + mime.h, lib.c, handler.c, globals.h, compose.c, + commands.c, attach.c, Attic/BUGS: + [patch-0.94.3.bl.other_types.1] This patch adds + support for the model MIME type. Additionally, + along the lines of "strict in what you generate, + accepting in what you receive", this patch will + keep the name of major mime types it doesn't + recognize (instead of using x-unknown). + + * compose.c, Attic/BUGS: + [patch-0.94.3i.jmy.attachmessage-fix.1] This patch + fixes a bug in the allocation of space for new + pointers to the attachments, it would make mutt + seg-fault when attaching 5 or more messages at the + same time. (From: Jimmy Mäkelä + ) + + * handler.c: [SECURITY] mutt_sanitize_filename() + should be called when creating temporary files for + autoview. (From: Liviu Daia.) + + * sendlib.c, send.c, attach.c: Try this: set + $mime_forward, forward a PGP-encrypted message, + then in the "compose" menu try to view the + forwarded message. If you didn't enter a + passphrase before, Mutt won't ask for it either. + (From: Liviu Daia) + + * sendlib.c, attach.c: When you forward a message + with $mime_forward set, or when you attach a + message with the "attach-message" command from the + "compose" menu, there is a memory leak. The real + reason for this leak is that multipart attachments + are not supported in the "compose" menu, so you + need to go through quite a few contortions in + order to handle message/rfc822 attachments. + Consequently, the patch below is just an ugly + hack. (From: Liviu Daia) + +Sun Aug 16 06:22:51 1998 Thomas Roessler + + * rfc822.c: Bringing 128-byte strings to "STRING". + + * sendlib.c: Use add_option, not add_arg, for + strings such as "--". + + * sendlib.c: Pass an "--" argument to sendmail + before the address arguments, so addresses with a + leading dash don't lead to problems. (From Liviu.) + + * sendlib.c, rfc822.c, rfc1524.c, parse.c, mx.c, + main.c, lib.c, keymap.c, hash.c, handler.c, + edit.c, curs_lib.c, alias.c: Replacing a bunch of + free() and malloc() calls by safe_free() and + safe_malloc(). (From Liviu.) + +Sat Aug 15 18:27:45 1998 Thomas Roessler + + * imap.c: read() can't read buffers larger than + SSIZE_MAX. + + * hook.c: [patch-0.94.3i.tlr.empty_hook.1] Ignore + empty hooks instead of segfaulting. + + * protos.h, init.c, Attic/history.h: + [patch-0.94.3i.tlr.history.1] Adding history class + support. + + * Attic/history.c: [patch-0.94.3i.tlr.history.1] + Adding history class support. + + * enter.c, TODO, Makefile.in: + [patch-0.94.3i.tlr.history.1] Adding history class + support. + + * sendlib.c: + [patch-0.94.3i.tlr.attach_msg_fmt.1-2] When + generating a message/rfc822 type attachment, parse + its header so that the attachment format routines + can properly display the default description. + + * init.h: Change attach_format's default to limit + the attachment description's length. + +Thu Aug 13 22:09:16 1998 Thomas Roessler + + * pgppubring.c: Fixing another memory leak in the + pubring parser. + + * recvattach.c, Attic/BUGS: + [patch-0.94.3i.tlr.attach_msg_fmt.1] When parsing + the "%d" format option in the attachment format, + use the message format as a fall-back if no + explicit description is provided. This fixes the + following bug: + + set mime_forward. Forward any mesage. The + compose menu will show the description as + "Forwarded message from ...." which is fine. + Pressing 'd' to edit the description brings up + the above string for editing. + + Now hit Enter on the message/rfc822 attachment + to view it. Quit out of the pager. + + The description field has now changed to the + Subject: of the forwarded message. Pressing 'd' + still brings up the 'Forwarded message from....' + string. + + (Noted by Vikas.) + + * doc/manual.txt, doc/manual.sgml, sendlib.c, + mutt.h, init.h: [patch-0.94.3i.tlr.write_bcc.1] + This patch adds an option $write_bcc which + controls whether the Bcc header is written out or + not. This can be used to work around broken MTA's + (Exim seems to leave Bcc headers in). + + The problem was noted independently by Peter + Radcliffe and by Dave Holland + (Debian Bug #25687). + + * pgppubring.c: [patch-0.94.3i.tlr.pubring_leak.1] + Fixing a memory leak. Bug noted by Liviu Daia. + + * reldate.h: 0.94.3i. + + * configure.in, configure, ChangeLog: Preparing + 0.94.3i. + + * compose.c: indentation cosmetics. + + * compose.c: Update menu->data when OP_COMPOSE_EDIT_HDRS is called. + From Vikas. + + * compose.c: Update the encoding after using ispell from the compose + menu. From Vikas. + + * sendlib.c, send.c, protos.h, pgppubring.c, + pattern.c, lib.c, curs_main.c, compose.c, + attach.c: Various nits from Liviu; encoding fixes. + + * rfc822.c: Fixing a buffer overflow in rfc822_cat(). tmplen could + underflow. + +Wed Aug 12 11:50:59 1998 Thomas Roessler + + * init.c: Yet another memory leak fix from Liviu. + + * rfc2047.c: Fixing a stupid buffer overflow plus some flawed logic. + + * functions.h, compose.c, OPS: + Adding an update-encoding function to the compose menu. + This is useful if the user has externally modified an + attachment and _wants_ to adjust the encoding afterwards. + Also, this patch fixes some redraw-related problems in the + compose menu. + + * sendlib.c, mutt.h, compose.c, Attic/BUGS: + When changing or deleting attachments, the compose menu + now notices this and complains or asks accordingly. + Partially from Vikas. + +Tue Aug 11 08:14:38 1998 Thomas Roessler + + * Attic/BUGS: Yet another outstanding bug. + + * doc/manual.txt: This now contains the latest changes to manual.sgml. + + * sendlib.c, rfc2047.c, rfc1524.c, pgppubring.c, pager.c, hdrline.c: + Fixing various nits noted by Liviu and his colleagues. + +Mon Aug 10 15:30:02 1998 Thomas Roessler + + * sendlib.c: This patches makes the message-id persistant when + postponing messages. (From: Janos Farkas) + + * doc/manual.sgml, sample.muttrc, lib.c, init.h: + This patch introduces "unhdr_order" to reset the hdr_order + command's effect. (From: Janos Farkas) + + * color.c: Drop the free_rx parameter from muitt_free_color_line(), + as it's always 1. + + * color.c: Adding mutt_free_color_line() and replacing varous + "manual" free()s of color lines by calls to this function. + + * bind.c: Removing bind.c. Pointed out by Gero Treuner + . + +Sun Aug 9 18:43:45 1998 Thomas Roessler + + * color.c: With SLang, init_pair is (void), so we must not check its + return value. + + * color.c: Restructuring color.c. This patch fixes the "default" + problem from 0.94.2i and makes the code more + comprehensible than that version and more consie than + 0.94.1i. + +Sat Aug 8 21:40:12 1998 Thomas Roessler + + * rfc2047.c: Fixing the "=?" detection in rfc2047_encode_string(). Bug + noted by David Jeske . + + * compose.c: If you press t to add a recipient in the compose menu, + then press tab, q, and aborts with ctrl-g, mutt won't + redraw the menu. Noted by Jimmy Mäkelä + . + + * alias.c: Entering an un-parsable address when creating an alias + would make mutt segfault. Noted by brian moore + . + + * browser.c: If you press tab in the file-browser to see the inboxes + and the current row is greater than the inbox-screens + max-rows then the screen gets garbled. + (From: Jimmy Mäkelä ) + + * doc/manual.txt, doc/manual.sgml: I made the manual more up to date: + + * new version + * new mailing list and home page addresses + * made the terminology a bit more consistent regarding + 'pattern' and 'regular expression' + * added a note about expanding UNIX environments + * added a note about <, >, in range patterns like ~m + * added a note about the urlview program + * changed tables to not use tabs, because it doesn't work + right in my favourite web browsers lynx and netscape + + (From: Gero Treuner ) + + * pattern.c: This patch makes pattern ranges more logical. Before '~m + <5' would show message 1-5, with this patch it shows 1-4. + Inclusive ranges is still avaible if you use '~m -5'. + (From: Jimmy Mäkelä ) + + * init.c: Various improvements to the mutt_command_complete + function. From Stephen Hack . + + * browser.c: If you specify 'mailboxes ""' mutt will seg-fault. (From: + Jimmy Mäkelä ) + + * color.c: Fixing a memory leak. Thanks, Liviu. + + * commands.c: When printing a message, headers are now sorted according + to hdr_order. From Liviu. + + * browser.c: Fixing an off-by-one buffer overflow in browser.c. Noted + by Liviu. + + * lib.c, attach.c: This patch adds some more "safe" characters to + mutt_sanitize_filename and fixes its usage in + mutt_view_attachment(). (From: Liviu Daia + ) + + * status.c, sort.h, sendlib.c, send.c, query.c, protos.h, postpone.c, pager.h, pager.c, mutt_menu.h, menu.c, main.c, init.c, headers.c, functions.h, curs_main.c, curs_lib.c, compose.c, commands.c, browser.c, addrbook.c, OPS: + Adding the attach message patch. From Vikas Agnihotri + . + + * Makefile.in: There is no "compile" rule for dotlock in the Makefile. + (From: Dan Nelson ) + + * imap.c: Thispatch to imap.c allows the user to specify a port + number in the folder name in the general form + {hostname:portnum}foldername. (From: Andy Sloane + ) + + * imap.c: imap_close_connection() was being called even though the + client was using mulitple mailboxes over the same + connection. (From: Brandon Long ) + + +Fri Jul 31 08:17:50 1998 Thomas Roessler + + * rfc1524.c: Changing an sprintf to an snprintf (which it was meant to + be.) + + * protos.h: mutt_sanitize_filename takes char *, not const char *. + + * protos.h, lib.c, attach.c: + Introducing mutt_sanitize_filename(). The code is similar + to patch-0.91.1i.tlr.rfc1524_sanitize.1 and to Peter + Holzer's patch against 0.91. + + * rfc1524.h, rfc1524.c, postpone.c, attach.c: + Avoid possible buffer overflows in mutt_adv_mktemp(). + + * sendlib.c: Interpret sysexits-style exit values from sendmail. + + * configure.in, configure, config.h.in, acconfig.h: + Check for sysexits.h. + +Thu Jul 30 09:30:38 1998 Thomas Roessler + + * edit.c: When reading in files, be_snarf_file() wouldn't recognize + '~' as the user's home directory. + +Wed Jul 29 10:54:09 1998 Thomas Roessler + + * README, Changes: Finalizing 0.93.2i. + + * configure.in, configure: Bumping to 0.93.2(i). + + * parse.c: Fixing a buffer overflow in parse.c which presented a + serious security thread. Noted by Paul Boehm + . + +Tue Jul 28 08:21:49 1998 Thomas Roessler + + * Attic/patch.slang-1.2.2.keypad.1: Adding a patch for a SLang bug. + + * INSTALL: Adding a patch for a SLang bug. + + * mx.c: Doing 'mutt -f NoSuchFile' just flickers the screen and + silently exits. Earlier (0.92.14 at least), it used to + spit out the error 'NoSuchFile: no such file or directory + (errno = 2)'. (Noted and tracked down by Vikas Agnihotri + ) + + * color.c: The index cache should be updated even without color + support. + +Mon Jul 27 13:39:39 1998 Thomas Roessler + + * Attic/BUGS: Adding a notice about some more nits. + + * main.c: Change the error reporting mail address from + to . + + * protos.h, init.h, color.c: + This patch fixes index "color" patterns when using a + non-color capable curses library. While working on color + support, I've thrown together the mutt_parse_color() and + mutt_parse_mono() functions as they are sharing most of + their code. Additionally, a new directive called "unmono" + is introduced. The implementation consists in adding a + flag and very few lines of code (plus ifdefs) to + mutt_parse_uncolor(). + + * snprintf.c, rfc1524.h, rfc1524.c, date.c: + Fixing some minor nits: missing #includes in date.c and + snprintf.c, and a not-so-nice declaration of + rfc1524_new_entry(). Noted by Digital cc and gcc. + +Fri Jul 24 08:12:46 1998 Thomas Roessler + + * copy.c, attach.c: + Fiddling around with message/rfc822 attachments once again. + +Thu Jul 23 20:57:50 1998 Thomas Roessler + + * status.c, sendlib.c, send.c, rfc2047.c, pop.c, pager.c, mx.c, mh.c, mbox.c, lib.c, init.c, imap.c, edit.c, curs_lib.c, compose.c, commands.c, color.c, browser.c, attach.c, alias.c: + Guard lots of global (char *) variable deferences against + NULL pointers. + + * copy.c, attach.c: + Yet another patch about saving message/rfc822 attachments. + + * main.c, send.c: Fixing potential NULL pointer deferences. + +Wed Jul 22 22:47:57 1998 Thomas Roessler + + * recvattach.c: Another fix from Liviu. + + * recvattach.c, from.c, attach.c: + Another patch from liviu to fix the message/rfc822 + behaviour. + + * recvattach.c, mx.c, attach.c: + This patch fixes the saving of message/rfc822 attachments + to mail folders. Additionally, it fixes an outstanding + bug with From_ lines being written to MH folders. + + (From: Liviu Daia ) + + * menu.c, functions.h, browser.c, OPS: + 1. When I hit 'c' (change dir) in browser, it gives me the + directory, but without the final '/', so I have to add + '/' to add a subdirectory name. This patch fixes it. + + 2. check-new now will recheck mailbox folders for new + mail. + + 3. added a function toggle-mailboxes which toggles in + browser between mailboxes view and directory view. + (bound to TAB by default). + + (From: "Michael S. Tsirkin" ) + + * send.c: Correct an error message in send.c. + (From: Byrial Jensen ) + + * sendlib.c, recvattach.c, protos.h, postpone.c, + pager.c, mx.c, mutt.h, lib.c, keymap.c, handler.c, + compose.c, commands.c, attach.h, attach.c: + + These changes fix some of the bugs which were + recently reported to mutt-dev. To be more specific, + message-type attachments are saved to mail folders + from the receive attachment menu, some of the + sending code has been made more robust against + disappearing attachments, and "tag" is rebound to + "T" on the compose menu. + + (Some part of this patch comes from Vikas Agnihotri + .) + + * send.c: Avoid a potential segmentation fault when + trying to postpone, but Postponed equals NULL. + + * Attic/BUGS: This file is intended to contain known + bugs which still have to be fixed. + + * doc/manual.txt: + Committing the changes previously made to manual.sgml. + + * imap.c: Include Message-ID and Reply-To headers + when fetching a message's headers from an IMAP + server. (From: Andy Sloane ) + +Tue Jul 21 07:54:03 1998 Thomas Roessler + + * recvattach.c: + The old behaviour of the %d (for description) specifier is + recreated by this patch. + (From: Byrial Jensen ) + + * protos.h, lib.c, attach.c: + You should never _ever_ do something like this: + + [process A] ---[piped write until EOF]---> [process B] + [process A] <---[piped read until EOF]--- [process B] + + Basically, what happens is something like this: A + feeds data to B; B processes the data, and feeds it + to the pipe until the pipe buffer is full; at this + point, A writes to its pipe until its buffer is full + too, and if it still has more data to write, that's + it, it never gets to the read part to flush B's + buffer --- both processes are blocked on write. + + This patch fixes such a situation in the compose menu. + + (From: Liviu Daia ) + +Mon Jul 20 21:01:05 1998 Thomas Roessler + + * reap.pl: Perl lies in /usr/bin on my machines. + + * pop.c: It seems that if you don't enter any + password at all when prompted for the POP password, + Mutt will die with a segmentation fault also. (Bug + reported by Steve Mayer via the + Debian bug tracking system, fix from Thomas + Roessler.) + + * postpone.c: When you send a message which have + been postponed before sending, then all its + attachments (if there are more than one) will have a + content-disposition header which includes a + filename, even if there isn't a real filename but + only random choosen temporary one. (From: Byrial + Jensen ) + +Sat Jul 18 09:18:31 1998 Thomas Roessler + + * recvattach.c: "Set mime_forward, and forward a + message --- Mutt will segfault." The obvious fix for + this is to check for aptr->content->hdr in + mutt_attach_fmt() before invoking + _mutt_make_string(). Anyway, I suspect that the + real fix may involve something like parsing the + rfc822 attachment in question. + + * sendlib.c: Postponing messages behaves funny when the $postponed + folder is in Maildir format; I traced this down to the + fact that postponed messages are saved in "cur" while + mutt_num_postponed() is looking at "new". + (From: Liviu Daia ) + +Fri Jul 17 08:37:02 1998 Thomas Roessler + + * compose.c: Removing the old snd_entry() code. + + * doc/manual.sgml, protos.h, pgp.c, mutt.h, init.h, hook.c: + When sending encrypted messages, it may arrive that Mutt + can't determine the PGP key of the recipient (presumably + because her address has changed, but she hasn't updated + her PGP key yet). In this situation it's convenient to be + able to associate a keyID with an address automatically. + The attached patch is an attempt to implement this idea + using a "pgp-hook". (From: Liviu Daia ). + + * recvattach.c: Removing the old attach_entry() code. + + * recvattach.c, protos.h, mutt.h, init.h, globals.h, compose.c: + This patch adds a string variable $attach_format which + controls the look of the compose and attach menus. + Unfortunately, I was not able to make things so that it + would look exactly the same as the hardcoded versions, so + the default format is a bit different, but I think it is + quite usable. (From Michael Elkins ). + + * functions.h, browser.c, OPS: + This patch allows you to view files from the browser + window, useful if you are searching for a file to attach + to your message. It uses the standard mailcap stuff (and + the lookup mime types) to use the correct "viewer" for the + file. (From Brandon Long ) + + * doc/Attic/dotlock.man.in, doc/Makefile.in, configure.in, configure, Makefile.in: + Dotlock-related changes: We call it mutt.dotlock to avoid + conflicts with certain NFS versions' dotlocking utilities + (pointed out by Liviu Daia). Additionally, we need to + compile it as an external utility on systems which don't + have an fchdir(2) system call. + +Thu Jul 16 16:39:53 1998 Thomas Roessler + + * mx.c: Fixing a small typographic error. + + * mx.c: Mutt doesn't retry locking if it doesn't succeed at once. + The code in mx_lock_file is supposed to retry but it + doesn't work because of a mistake in operator precedence. + (From: Petri Kaukasoina ) + + * Attic/dotlock.c: + The dotlock.c file tries to include if + _POSIX_PATH_MAX isn't defined but it doesn't include + , where this symbol should be defined. (From + Marc.Baudoin@solsoft.com) + + * send.c: When several messages are tagged and the user applies + reply, group-reply, or list-reply to these messages, the + reply's references and in-reply-to headers are constructed + from the tagged message which comes last in the current + index. This patch constructs the references header from + _all_ messages' message-id and references headers. (tlr) + + * reldate.h, configure.in, configure, Changes, ChangeLog: + Preparing mutt 0.94. + + * imap.c: "My two remaining issues are the speed at which it + downloads the headers, and support of PREAUTH. I'm + enclosing a patch (to stock mutt-0.92.13i) which addresses + these issues." (From Brian Marcotte + ) + + * color.c: This patch fixes two problems reported on mutt-users. + + (1) the error message about "default colors not supported" + when not using a color xterm should not be printed. The + existing code did not check the value of has_colors() in + conjunction with use_default_colors() + + (2) mutt would crash when sending mail in batch mode + because use_default_colors() could be used without doing + an initscr() + + (From Michael Elkins.) + +Wed Jul 15 17:15:46 1998 Thomas Roessler + + * mx.h, mx.c, main.c, Attic/dotlock.h, + Attic/dotlock.c, configure.in, configure, + Makefile.in: Finalizing the external dotlock + support: If group mail privileges are needed, the + dotlock is compiled as a separate program. If + there is no need for privileges, it remains a + module which is compiled into mutt. Also, there is + no more need for the SLang buffer overflow + work-around in main(). We drop it, but let mutt + bail out instead if it's installed setgid + something. + + * doc/Attic/dotlock.man.in, Attic/dotlock.c: + Fix the race condition in dotlock.c. + + * doc/Attic/mutt.man.in: + Putting the manual page under autoconf control. + + * doc/Attic/mutt.man.in: + file mutt.man.in was initially added on branch mutt-0-94. + + * doc/mutt.man: Putting the manual page under autoconf control. + + * doc/Attic/dotlock.man.in: + Adding external dotlocking. For bugs, see the manual page + and the comments in dotlock.c. + + * doc/Attic/dotlock.man.in: + file dotlock.man.in was initially added on branch mutt-0-94. + + * doc/Makefile.in, protos.h, mx.c, mbox.c, main.c, globals.h, Attic/dotlock.h: + Adding external dotlocking. For bugs, see the manual page + and the comments in dotlock.c. + + * Attic/dotlock.h: + file dotlock.h was initially added on branch mutt-0-94. + + * Attic/dotlock.c: + Adding external dotlocking. For bugs, see the manual page + and the comments in dotlock.c. + + * Attic/dotlock.c: + file dotlock.c was initially added on branch mutt-0-94. + + * configure.in, configure, Makefile.in: + Adding external dotlocking. For bugs, see the manual page + and the comments in dotlock.c. + + * doc/mutt.man: More roff fixes. + + * doc/mutt.man: More groff fixes. + +Tue Jul 14 16:01:07 1998 Thomas Roessler + + * reldate.h, configure.in, configure, Changes, ChangeLog: + Preparing mutt 0.93.1i. + + * rfc2047.c, mime.h, handler.c: More unsigned fixes. + + * pattern.c, parse.c: + Changing (int) casts in is* arguments to (unsigned char). + + * rfc2047.c: Removing a superfluous (unsigned char) cast in an IsPrint + argument. + +Mon Jul 13 10:50:39 1998 Thomas Roessler + + * doc/mutt.sgml, doc/mutt.man, doc/Makefile.in: + Since manual page generation seems to be broken in the + SGML-tools package, we remove the SGML version of mutt.man + and make the troff source the master copy. Suggested by + Roland Rosenfeld who also provided + the corrected mutt.man file. + +Sun Jul 12 13:15:31 1998 Thomas Roessler + + * protos.h: Replace calloc by safe_calloc in new_pattern. + +Sat Jul 11 05:10:29 1998 Thomas Roessler + + * doc/manual.txt, doc/manual.sgml: Key bindings documentation. + +Fri Jul 10 17:58:26 1998 Thomas Roessler + + * NEWS: s/fwd_decode/forward_decode/ (Noted by Lars Hecking) + + * pop.c: tmp[] wasn't initialized when asking for the POP password. + + * buffy.c: On SunOS 4.1, one must include unistd.h in order to + declare SEEK_END. (Fabrice Noilhan) + + * mutt.h: include if limits.h doesn't defile + _POSIX_PATH_MAX. + + * Changes, ChangeLog: *** empty log message *** + + * doc/PGP-Notes.txt: Adding a notice about core dumps. + + * reldate.h, README, INSTALL: Preparing 0.93i. + + * handler.c: Fix text/enriched decoding: if there's a tag mismatch in + the last paragraph in the attachment, the whole paragraph + wouldn't be displayed. + +Thu Jul 9 19:51:36 1998 Thomas Roessler + + * configure.in, configure, Attic/config.sub: + Use CC -Ae -D_HPUX_SOURCE on HP/UX. + + * Attic/config.sub: + file config.sub was initially added on branch mutt-0-93. + + * Attic/config.guess: Use CC -Ae -D_HPUX_SOURCE on HP/UX. + + * Attic/config.guess: + file config.guess was initially added on branch mutt-0-93. + + * INSTALL: Use CC -Ae -D_HPUX_SOURCE on HP/UX. + +Wed Jul 8 21:59:43 1998 Thomas Roessler + + * snprintf.c, pattern.c, parse.c, mx.c, mh.c, lib.c, keymap.c, init.c, from.c, edit.c, curs_main.c: + Changing (int) casts in is* arguments to (unsigned char) + casts to avoid mis-casting of signed chars. (From Michael + Elkins.) + +Tue Jul 7 09:22:40 1998 Thomas Roessler + + * rfc822.c: Change one int to size_t in rfc822.c. + + * rfc822.c: Fix the parsing of route addresses a la RFC 822. Patch + from Michael Elkins. + + * snprintf.c, sendlib.c, pattern.c, parse.c, mx.c, mh.c, lib.c, keymap.c, init.c, from.c, edit.c, curs_main.c: + Cast the arguments of the is* functions to int. Patch + from Michael Elkins. + +Thu Jul 2 21:15:18 1998 Thomas Roessler + + * hdrline.c: + Using the correct version of O'Shaughnessy Evans' %O patch. + + * configure.in, configure, Changes, ChangeLog: Preparig 0.92.14i + + * doc/manual.txt, doc/manual.sgml: s/∖/\/ + + * hdrline.c: Adding the %O expansion. + + * doc/manual.sgml: Applying the various manual_nits patches. + +Wed Jul 1 17:01:50 1998 Thomas Roessler + + * curs_main.c: Fixing a reverse-threading problem. + + * imap.c: Fixing an imap-related segmentation fault. + +Tue Jun 30 06:38:02 1998 Thomas Roessler + + * reldate.h, Changes, ChangeLog: + These are the last tiny bits of preparing 0.92.13i. + + * configure.in, configure, TODO, README, NEWS: + Updating some of the documentation for 0.93. + + * doc/Attic/NEWS: *** empty log message *** + + * doc/Attic/NEWS: file NEWS was initially added on branch mutt-0-93. + + * doc/manual.txt: Incorporate the recent changes to manual.sgml. + + * main.c: Work around a buffer overflow in SLang. (This is the same + bug which is fixed by 0.91.2i.) + +Fri Jun 26 10:31:28 1998 Thomas Roessler + + * doc/manual.sgml, send.c, init.h, globals.h, Muttrc.in: + Removing $empty_to. + +Thu Jun 25 22:31:46 1998 Thomas Roessler + + * hdrline.c: Moved a break statement where it belongs. + + * mx.c: Fix an imap-related typo. + + * handler.c: Don't generate non-terminated last lines when quoting + 8bit-"encoded" text-plain body parts. + + * Makefile.in: Don't use GNU make specific features. + +Sun Jun 21 07:13:03 1998 Thomas Roessler + + * doc/mutt.man, doc/Makefile.in, reldate.h, configure.in, configure, Changes, ChangeLog: + Bumping the release to 0.92.12i. + +Sat Jun 20 06:12:38 1998 Thomas Roessler + + * doc/manual.txt: *** empty log message *** + + * handler.c: Fixing the quoted-printable decoder. + + * handler.c, copy.c: Make mutt handle messages containing null bytes. + + * doc/manual.sgml: documenting alias-path + +Fri Jun 19 12:52:16 1998 Thomas Roessler + + * sendlib.c, send.c, protos.h, postpone.c, pattern.c, menu.c, main.c, headers.c, functions.h, curs_main.c, compose.c, OPS: + Removing the Attach-Menu feature for the next release + version. + +Thu Jun 18 20:37:59 1998 Thomas Roessler + + * protos.h, lib.c, alias.c: + Bradon long's alias_path patch, for the sake of Elm + compatibility. + +Tue Jun 16 20:59:20 1998 Thomas Roessler + + * mx.c: Avoid pointless error messages from mx_get_magic() when + called from an mx_open_mailbox_append() on a non-existing + mailbox. + + * doc/manual.txt, doc/Makefile.in, configure.in, configure, Makefile.in: + Have "make install" install manual.txt as well. + + * doc/Attic/makefile, doc/Makefile.in: + Putting Makefile under autoconf control. + + * main.c: Switch the error reporting address from mutt-users to + mutt-dev. + + * reldate.h, configure.in, configure, Changes, ChangeLog: + Bump the version to 0.92.11i. + + * imap.h: Check in a proper version of imap.h. + + * color.c: Fix the "unknown color" bug reported by Vikas. + + * mx.c: Remove a spurious #include "imap.h" from mx.c. + + * doc/style-guide: Add a note about the global Muttrc to style-guide. + + * configure.in, Muttrc.in, configure, Attic/Muttrc, Makefile.in: + The global Muttrc contains a list of default settings + which can be used as a starting-point for the user's own + configuration. + + * pgppubring.c, pgp.h, gnupgparse.c: + Removing some duplicate code from gnupgparse.c and + pgppubring.c. + + * pgpinvoke.c, gnupgparse.c: + Include part of Werner Koch's latest GPG patches. + + * Changes: *** empty log message *** + + * configure.in, configure, Changes, ChangeLog: Preparing 0.92.10i. + + * doc/PGP-Notes.txt: Including Roland's new procmail recipe. + + * protos.h, pattern.c, menu.c, curs_main.c, compose.c, addrbook.c: + Including Vikas' search code for the "attach message" menu. + +Mon Jun 15 15:19:49 1998 Thomas Roessler + + * mx.c, main.c, mailbox.h, imap.c, commands.c: Brandon's IMAP patch. + diff --git a/GPL b/GPL new file mode 100644 index 0000000..febb8a6 --- /dev/null +++ b/GPL @@ -0,0 +1,341 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. +$Id: GPL,v 3.0 2002/01/24 12:10:47 roessler Exp $ diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..6558cc3 --- /dev/null +++ b/INSTALL @@ -0,0 +1,300 @@ +Supported platforms +=================== + +Mutt has been reported to compile and run under the following Unix operating +systems: + + AIX + BSDI + Convex + Data General Unix (DG/UX) + Digital Unix (OSF/1) + DYNIX/ptx + FreeBSD + HP-UX + IRIX + Linux + Atari MiNT + MkLinux + NetBSD + OpenBSD + QNX + SCO Unix 3.2v4/5 + Solaris + SunOS + Ultrix + UnixWare + +- An ANSI C compiler (such as gcc) is required. + +- You must also have a SysV compatible curses library, or you must + install either + + GNU ncurses, ftp://prep.ai.mit.edu/pub/gnu/ + + or + + S-Lang, ftp://space.mit.edu/pub/davis/slang/ + +- Mutt needs an implementation of the iconv API for character set + conversions. A free one can be found under the following URL: + + http://www.gnu.org/software/libiconv/ + + + +Installation +============ + +Installing Mutt is rather painless through the use of the GNU +autoconf package. Simply untar the Mutt distribution, and run the +``configure'' script. If you have obtained the distribution from +the CVS repository, run the ``prepare'' script with the same command +line parameters you would pass to configure. It will set up mutt's +build environment and add the files which are present in the tar +balls, but not in the CVS repository. + +In most cases, configure will automatically determine everything it +needs to know in order to compile. However, there are a few options +to ``configure'' to help it out, or change the default behavior: + +--prefix=DIR + install Mutt in DIR instead of /usr/local + +--with-curses=DIR + use the curses lib in DIR/lib. If you have ncurses, ``configure'' + will automatically look in /usr/include/ncurses for the include + files. + +--with-slang[=DIR] + use the S-Lang library instead of ncurses. This library seems to + work better for some people because it is less picky about proper + termcap entries than ncurses. It is recommended that you use at + *least* version 0.99-38 with Mutt. + +--with-mailpath=DIR + specify where the spool mailboxes are located on your system + +--with-homespool[=FILE] + treat file in the user's home directory as the spool mailbox. Note + that this is *not* the full pathname, but relative to the user's + home directory. Defaults to "mailbox" if FILE is not specified. + +--enable-pop + enable POP3 support + +--enable-imap + enable IMAP support + +--with-gss[=PFX] + Enable GSSAPI authentication to IMAP servers. This should work with + both MIT and Heimdal GSSAPI implementations - others haven't been + tested. Note that the Cyrus SASL library also supports GSSAPI, + and may be able to encrypt your session with it - you should use + SASL instead if you can. + +--with-ssl[=PFX] + enable SSL support with IMAP and POP. SSL support requires you to + have OpenSSL headers and libraries properly installed before + compiling. If the OpenSSL headers and libraries are not in the + default system pats you can use the optional PFX argument to + define the root directory of your installation. The libraries + are then expected to be found in PFX/lib and headers in + PFX/include/openssl. + +--with-sasl[=PFX] + Use the Cyrus SASL library for IMAP or POP authentication. This + library provides generic support for several authentication methods, + and more may be added by the system administrator without recompiling + mutt. SASL may also be able to encrypt your mail session even if + SSL is not available. + +--disable-nls + This switch disables mutt's native language support. + +--with-included-gettext + Mutt will be built using the GNU gettext library included in + the intl/ sub-directory. You may need to use this switch if + your machine has something which looks like gettext to the + configure script, but isn't able to cope with mutt's catalog + files. + +--with-regex + use GNU regex instead of local regexp routines. Many systems + don't have the POSIX compliant regcomp/regexec/regfree + routines, so this provides a way to support them. + +--enable-flock + use flock() to lock files. + +--disable-fcntl + by default, Mutt uses fcntl() to lock files. Over NFS this can + result in poor performance on read/write. Note that using this + option could be dangerous if dotlocking is also disabled. + +--enable-nfs-fix + some implementations of NFS do not always write the + atime/mtime of small files. This means that Mutt's ``mailboxes'' + feature does not always work properly, as it uses these + attributes to work out whether the file has new mail. This + option enables a workaround to this bug. + +--enable-locales-fix + on some systems, the result of isprint() can't be used reliably + to decide which characters are printable, even if you set the + LANG environment variable. If you set this option, Mutt will + assume all characters in the ISO-8859-* range are printable. If + you leave it unset, Mutt will attempt to use isprint() if either + of the environment variables LANG, LC_ALL or LC_CTYPE is set, + and will revert to the ISO-8859-* range if they aren't. + If you need --enable-locales-fix then you will probably need + --without-wc-funcs too. However, on a correctly configured + modern system you shouldn't need either (try setting LANG, + LC_ALL or LC_CTYPE instead). + +--without-wc-funcs + by default Mutt uses the functions mbrtowc(), wctomb() and + wcwidth() provided by the system, when they are available. + With this option Mutt will use its own version of those + functions, which should work with 8-bit display charsets, UTF-8, + euc-jp or shift_jis, even if the system doesn't normally support + those multibyte charsets. + + If you find Mutt is displaying non-ascii characters as octal + escape sequences (e.g. \243), even though you have set LANG and + LC_CTYPE correctly, then you might find you can solve the problem + with either or both of --enable-locales-fix and --without-wc-funcs. + +--with-exec-shell=SHELL + on some versions of unix, /bin/sh has a bug that makes using emacs + with mutt very difficult. If you have the problem that whenever + you press control-G in emacs, mutt and emacs become very confused, + you may want to try using a Bourne-derived shell other than + /bin/sh here. Some shells that may work are bash, zsh, and ksh. + C shells such as csh and tcsh will amost certainly not work right. + Note that this option is unrelated to what shell mutt gives you + when you press '!'. Only use this option to solve the above problem, + and only specify one of the above shells as its argument. + + (If you encounter this problem with your platform's native + Bourne shell, please send a short report to mutt-dev@mutt.org, + so a short note on this topic can be added to the Platform notes + section below.) + +--enable-exact-address + By default, Mutt will rewrite all addresses in the form + Personal Name + regardless of the input. By enabling this option, Mutt will write + addresses in the same form they are parsed. NOTE: this requires + significantly more memory. + + WARNING: DO NOT USE THIS OPTION, IT IS BROKEN. + + +Once ``configure'' has completed, simply type ``make install.'' + +Mutt should compile cleanly (without errors) and you should end up with a +binary called ``mutt.'' If you get errors about undefined symbols like +A_NORMAL or KEY_MIN, then you probably don't have a SysV compliant curses +library. You should install either ncurses or S-Lang (see above), and then +run the ``configure'' script again. + +Please note that "VPATH" builds currently do _not_ work. + + + +Character set support +===================== + +Mutt no longer contains functions for doing character set conversion. +Instead, it expects the iconv functions (iconv_open, iconv, +iconv_close) to be provided. Most up-to-date systems provide these +functions, often as part of the C library. If you are installing Mutt +on a system which does not have them, it is recommended that you +install Bruno Haible's portable libiconv library, which you can obtain +from: + + ftp://ftp.ilog.fr/pub/Users/haible/gnu/ + +Even if your system does provide the iconv functions, you might want +to install libiconv, as some systems provide only a very limited +version of iconv. + + +If you decide to use your system's iconv implementation, you may +need to tell mutt about implementation-defined names for some +character sets. Sample configuration files for various systems can +be found in the directory contrib/iconv/ in this source +distribution, and will be installed in the samples/iconv directory +as part of mutt's documentation. + +In order to use these sample configuration files, just put a line +like + + source /usr/local/doc/mutt/samples/iconv/iconv.osf1-4.0d.rc + +into your system's global Muttrc, which normally resides in /etc or +/usr/local/etc. + + +If you really want to, you can configure Mutt --disable-iconv, but +there will then be no character set conversion. + + +Platform Notes +============== + +All platforms + + There is a bug in most (if not all) S-Lang versions which + prevents the Meta key from working with mutt. A patch can + be found in the file contrib/patch.slang-1.2.2.keypad.1 in + this mutt distribution. + + +Solaris 2.4 + + The system regcomp() and regexec() routines are very badly + broken. This should be automatically detected by the + configure script. If not, use the --with-regex switch when + configuring mutt. + + We are also hearing reports that Solaris 2.4's NLS libraries + dump core with mutt when using a locale different from "C". + Use the --with-included-gettext configuration switch if you + experience this problem. + + Color does not work right with Solaris curses. You will + have to compile with either ncurses or slang to get working + color support. + +Solaris 2.6 + + There are reports that mutt behaves strangely when linked with + the system regexp library. Please use the --with-regex switch + when configuring on this platform. + + For the real fix, applying Sun patches # 105490-05 (linker + patch) and # 105210-17 (libc and malloc patch) from + sunsolve.sun.com has been reported to stop these problems + from occuring. + +Linux + + On recent Linux systems, flock() and fcntl() locks don't mix. If + you use the --enable-flock switch on such systems, be sure to + give the --disable-fcntl argument as well. + +Sparc Linux + + Redhat 4.2 Sparc users reported problems with some system + include files when building mutt. Configuring mutt with the + --disable-warnings switch is said to help against this problem. + + +Digital Unix (OSF/1) + + The system curses library is said to be badly broken. Use GNU + ncurses or SLang instead. + +$Id: INSTALL,v 3.1 2002/11/25 14:16:46 roessler Exp $ diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..cc33370 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,198 @@ +## Process this file with automake to produce Makefile.in +## Use aclocal -I m4; automake --foreign + +AUTOMAKE_OPTIONS = foreign +EXTRA_PROGRAMS = mutt_dotlock pgpring makedoc + +if BUILD_IMAP +IMAP_SUBDIR = imap +IMAP_INCLUDES = -I$(top_srcdir)/imap +endif + +SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR) + +bin_SCRIPTS = muttbug flea + +BUILT_SOURCES = keymap_defs.h patchlist.c + +bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ @SMIMEAUX_TARGET@ +mutt_SOURCES = $(BUILT_SOURCES) \ + addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c \ + crypt.c cryptglue.c \ + commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c \ + edit.c enter.c flags.c init.c filter.c from.c getdomain.c \ + handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c \ + main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \ + postpone.c query.c recvattach.c recvcmd.c \ + rfc822.c rfc1524.c rfc2047.c rfc2231.c \ + score.c send.c sendlib.c signal.c sort.c \ + status.c system.c thread.c charset.c history.c lib.c \ + muttlib.c editmsg.c utf8.c mbyte.c wcwidth.c \ + url.c ascii.c mutt_idna.c + +mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ + $(INTLLIBS) $(LIBICONV) + +mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) \ + $(INTLDEPS) + +makedoc_SOURCES = makedoc.c +makedoc_LDADD = +makedoc_DEPENDENCIES = + +# $(makedoc_OBJECTS): $(makedoc_SOURCES) +# $(HOST_CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) -c $< + +# makedoc: $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES) +# @rm -rf makedoc +# $(HOST_CC) $(AM_CFLAGS) $(LDFLAGS) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) -o makedoc + +CPP=@CPP@ + +DEFS=-DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \ + -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" \ + -DHAVE_CONFIG_H=1 + +INCLUDES=-I. -I$(top_srcdir) $(IMAP_INCLUDES) -Iintl + +CPPFLAGS=@CPPFLAGS@ -I$(includedir) + + +EXTRA_mutt_SOURCES = account.c md5c.c mutt_sasl.c mutt_socket.c mutt_ssl.c \ + mutt_tunnel.c pop.c pop_auth.c pop_lib.c smime.c pgp.c pgpinvoke.c pgpkey.c \ + pgplib.c sha1.c pgpmicalg.c gnupgparse.c resize.c dotlock.c remailer.c \ + browser.h mbyte.h remailer.h url.h mutt_ssl_nss.c \ + pgppacket.c mutt_idna.h \ + nntp.c newsrc.c mutt_libesmtp.c + +EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO \ + configure acconfig.h account.h \ + attach.h buffy.h charset.h copy.h dotlock.h functions.h gen_defs \ + globals.h hash.h history.h init.h keymap.h mutt_crypt.h \ + mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \ + mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \ + mx.h pager.h pgp.h pop.h protos.h reldate.h rfc1524.h rfc2047.h \ + rfc2231.h rfc822.h sha1.h sort.h mime.types VERSION prepare \ + nntp.h ChangeLog.nntp \ + _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h \ + mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h Muttrc.head Muttrc \ + makedoc.c stamp-doc-rc README.SSL smime.h\ + muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ + ChangeLog.old mkchangelog.sh cvslog2changelog.pl mutt_idna.h \ + snprintf.c regex.c mutt_libesmtp.h + +mutt_dotlock_SOURCES = mutt_dotlock.c +mutt_dotlock_LDADD = @LIBOBJS@ +mutt_dotlock_DEPENDENCIES = @LIBOBJS@ + +pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5c.c pgppacket.c ascii.c +pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) +pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS) + +mutt_dotlock.c: dotlock.c + cp $(srcdir)/dotlock.c mutt_dotlock.c + +CLEANFILES = mutt_dotlock.c stamp-doc-rc makedoc \ + keymap_alldefs.h keymap_defs.h patchlist.c + +ACLOCAL_AMFLAGS = -I m4 + +LDADD = @LIBOBJS@ @INTLLIBS@ + +OPS=@OPS@ + +flea: muttbug.sh + cp muttbug.sh flea + chmod +x flea + +smime_keys: $(srcdir)/smime_keys.pl + cp $(srcdir)/smime_keys.pl smime_keys + chmod +x smime_keys + +Makefile: $(BUILT_SOURCES) + +keymap_defs.h: $(OPS) $(srcdir)/gen_defs + $(srcdir)/gen_defs $(OPS) > keymap_defs.h + +keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.PGP $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME $(srcdir)/gen_defs + $(srcdir)/gen_defs $(srcdir)/OPS $(srcdir)/OPS.PGP \ + $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \ + > keymap_alldefs.h + +reldate: + echo 'const char *ReleaseDate = "'`date +%Y-%m-%d`'";' > $(srcdir)/reldate.h + +patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh + $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c + +install-exec-local: + if test -f $(DESTDIR)$(bindir)/mutt.dotlock && test -f $(DESTDIR)$(bindir)/mutt_dotlock ; then \ + rm -f $(DESTDIR)$(bindir)/mutt.dotlock ; \ + ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \ + fi + if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x@DOTLOCK_GROUP@ != x ; then \ + chgrp @DOTLOCK_GROUP@ $(DESTDIR)$(bindir)/mutt_dotlock && \ + chmod @DOTLOCK_PERMISSION@ $(DESTDIR)$(bindir)/mutt_dotlock || \ + { echo "Can't fix mutt_dotlock's permissions!" >&2 ; exit 1 ; } \ + fi + +install-data-local: Muttrc + $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir) + -if [ -f $(DESTDIR)$(pkgdatadir)/Muttrc ] ; then \ + mv $(DESTDIR)$(pkgdatadir)/Muttrc* $(DESTDIR)$(sysconfdir) ; \ + elif [ -f $(DESTDIR)$(pkgdatadir)/../Muttrc ] ; then \ + mv $(DESTDIR)$(pkgdatadir)/../Muttrc* $(DESTDIR)$(sysconfdir) ; \ + elif [ ! -f $(DESTDIR)$(sysconfdir)/Muttrc ] ; then \ + $(INSTALL) -m 644 $(srcdir)/Muttrc $(DESTDIR)$(sysconfdir) ; \ + fi + -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \ + $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \ + fi + + +# Don't make this one ChangeLog - it's intended to be +# used manually. + +pclean: + cat /dev/null > PATCHES + +check-security: + ./check_sec.sh + +commit-real: + cvs commit + +commit-changelog: + cvs commit -m "# changelog commit" ChangeLog + +commit: pclean check-security commit-real changelog commit-changelog + +changelog: + cvs update ChangeLog + sh ./mkchangelog.sh | fmt -c | cat - ChangeLog > ChangeLog.$$$$ && mv ChangeLog.$$$$ ChangeLog + $${VISUAL:-vi} ChangeLog + +ChangeLog: changelog + +# kluge around automake problems. + +dist-hook: + -for file in $(BUILT_SOURCES) ; do rm -f $(distdir)/$$file ; done + +mutt-dist: + (cd $(srcdir) && ./build-release ) + +update-doc: stamp-doc-rc + (cd doc && $(MAKE) update-doc) + +Muttrc: stamp-doc-rc + +stamp-doc-rc: $(srcdir)/init.h makedoc Muttrc.head + -rm -f Muttrc stamp-doc-rc + $(CPP) $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C \ + $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - > Muttrc + touch stamp-doc-rc + + +.PHONY: commit pclean check-security commit-real commit-changelog +.PHONY: changelog ChangeLog diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..32880ab --- /dev/null +++ b/Makefile.in @@ -0,0 +1,687 @@ +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +DBX = @DBX@ +DEBUGGER = @DEBUGGER@ +DOTLOCK_GROUP = @DOTLOCK_GROUP@ +DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ +DOTLOCK_TARGET = @DOTLOCK_TARGET@ +GDB = @GDB@ +GENCAT = @GENCAT@ +GLIBC21 = @GLIBC21@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +HAVE_LIB = @HAVE_LIB@ +INSTOBJEXT = @INSTOBJEXT@ +INTLBISON = @INTLBISON@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +ISPELL = @ISPELL@ +KRB5CFGPATH = @KRB5CFGPATH@ +LIB = @LIB@ +LIBICONV = @LIBICONV@ +LIBIMAP = @LIBIMAP@ +LIBIMAPDEPS = @LIBIMAPDEPS@ +LTLIB = @LTLIB@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MUTTLIBS = @MUTTLIBS@ +MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ +PACKAGE = @PACKAGE@ +PGPAUX_TARGET = @PGPAUX_TARGET@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SDB = @SDB@ +SENDMAIL = @SENDMAIL@ +SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ +SUBVERSION = @SUBVERSION@ +U = @U@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +docdir = @docdir@ +mutt_libesmtp_config_path = @mutt_libesmtp_config_path@ + +AUTOMAKE_OPTIONS = foreign +EXTRA_PROGRAMS = mutt_dotlock pgpring makedoc + +@BUILD_IMAP_TRUE@IMAP_SUBDIR = imap +@BUILD_IMAP_TRUE@IMAP_INCLUDES = -I$(top_srcdir)/imap + +SUBDIRS = m4 po intl doc contrib $(IMAP_SUBDIR) + +bin_SCRIPTS = muttbug flea + +BUILT_SOURCES = keymap_defs.h patchlist.c + +bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ @SMIMEAUX_TARGET@ +mutt_SOURCES = $(BUILT_SOURCES) addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c crypt.c cryptglue.c commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c edit.c enter.c flags.c init.c filter.c from.c getdomain.c handler.c hash.c hdrline.c headers.c help.c hook.c keymap.c main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c postpone.c query.c recvattach.c recvcmd.c rfc822.c rfc1524.c rfc2047.c rfc2231.c score.c send.c sendlib.c signal.c sort.c status.c system.c thread.c charset.c history.c lib.c muttlib.c editmsg.c utf8.c mbyte.c wcwidth.c url.c ascii.c mutt_idna.c + + +mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) $(INTLLIBS) $(LIBICONV) + + +mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) $(INTLDEPS) + + +makedoc_SOURCES = makedoc.c +makedoc_LDADD = +makedoc_DEPENDENCIES = + +# $(makedoc_OBJECTS): $(makedoc_SOURCES) +# $(HOST_CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) -c $< + +# makedoc: $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES) +# @rm -rf makedoc +# $(HOST_CC) $(AM_CFLAGS) $(LDFLAGS) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) -o makedoc + +CPP = @CPP@ + +DEFS = -DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" -DHAVE_CONFIG_H=1 + + +INCLUDES = -I. -I$(top_srcdir) $(IMAP_INCLUDES) -Iintl + +CPPFLAGS = @CPPFLAGS@ -I$(includedir) + +EXTRA_mutt_SOURCES = account.c md5c.c mutt_sasl.c mutt_socket.c mutt_ssl.c mutt_tunnel.c pop.c pop_auth.c pop_lib.c smime.c pgp.c pgpinvoke.c pgpkey.c pgplib.c sha1.c pgpmicalg.c gnupgparse.c resize.c dotlock.c remailer.c browser.h mbyte.h remailer.h url.h mutt_ssl_nss.c pgppacket.c mutt_idna.h nntp.c newsrc.c mutt_libesmtp.c + + +EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO configure acconfig.h account.h attach.h buffy.h charset.h copy.h dotlock.h functions.h gen_defs globals.h hash.h history.h init.h keymap.h mutt_crypt.h mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h mx.h pager.h pgp.h pop.h protos.h reldate.h rfc1524.h rfc2047.h rfc2231.h rfc822.h sha1.h sort.h mime.types VERSION prepare nntp.h ChangeLog.nntp _regex.h OPS.MIX README.SECURITY remailer.c remailer.h browser.h mbyte.h lib.h extlib.c pgpewrap.c smime_keys.pl pgplib.h Muttrc.head Muttrc makedoc.c stamp-doc-rc README.SSL smime.h muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh ChangeLog.old mkchangelog.sh cvslog2changelog.pl mutt_idna.h snprintf.c regex.c mutt_libesmtp.h + + +mutt_dotlock_SOURCES = mutt_dotlock.c +mutt_dotlock_LDADD = @LIBOBJS@ +mutt_dotlock_DEPENDENCIES = @LIBOBJS@ + +pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5c.c pgppacket.c ascii.c +pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) +pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS) + +CLEANFILES = mutt_dotlock.c stamp-doc-rc makedoc keymap_alldefs.h keymap_defs.h patchlist.c + + +ACLOCAL_AMFLAGS = -I m4 + +LDADD = @LIBOBJS@ @INTLLIBS@ + +OPS = @OPS@ +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = muttbug.sh Muttrc.head +PROGRAMS = $(bin_PROGRAMS) + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +mutt_dotlock_OBJECTS = mutt_dotlock.o +mutt_dotlock_LDFLAGS = +pgpring_OBJECTS = pgppubring.o pgplib.o lib.o extlib.o sha1.o md5c.o \ +pgppacket.o ascii.o +pgpring_LDFLAGS = +makedoc_OBJECTS = makedoc.o +makedoc_LDFLAGS = +mutt_OBJECTS = patchlist.o addrbook.o alias.o attach.o base64.o \ +browser.o buffy.o color.o crypt.o cryptglue.o commands.o complete.o \ +compose.o copy.o curs_lib.o curs_main.o date.o edit.o enter.o flags.o \ +init.o filter.o from.o getdomain.o handler.o hash.o hdrline.o headers.o \ +help.o hook.o keymap.o main.o mbox.o menu.o mh.o mx.o pager.o parse.o \ +pattern.o postpone.o query.o recvattach.o recvcmd.o rfc822.o rfc1524.o \ +rfc2047.o rfc2231.o score.o send.o sendlib.o signal.o sort.o status.o \ +system.o thread.o charset.o history.o lib.o muttlib.o editmsg.o utf8.o \ +mbyte.o wcwidth.o url.o ascii.o mutt_idna.o +mutt_LDFLAGS = +SCRIPTS = $(bin_SCRIPTS) + +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = README ./stamp-h.in ABOUT-NLS ChangeLog INSTALL \ +Makefile.am Makefile.in Muttrc.head.in NEWS TODO acconfig.h aclocal.m4 \ +config.guess config.h.in config.sub configure configure.in install-sh \ +missing mkinstalldirs muttbug.sh.in strcasecmp.c strdup.c + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DIST_SUBDIRS = m4 po intl doc contrib imap +SOURCES = $(mutt_dotlock_SOURCES) $(pgpring_SOURCES) $(makedoc_SOURCES) $(mutt_SOURCES) $(EXTRA_mutt_SOURCES) +OBJECTS = $(mutt_dotlock_OBJECTS) $(pgpring_OBJECTS) $(makedoc_OBJECTS) $(mutt_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): configure.in m4/codeset.m4 m4/curslib.m4 m4/funcdecl.m4 \ + m4/gettext.m4 m4/glibc21.m4 m4/gssapi.m4 m4/iconv.m4 \ + m4/lcmessage.m4 m4/libesmtp.m4 m4/progtest.m4 + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +config.h: stamp-h + @if test ! -f $@; then \ + rm -f stamp-h; \ + $(MAKE) stamp-h; \ + else :; fi +stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=config.h \ + $(SHELL) ./config.status + @echo timestamp > stamp-h 2> /dev/null +$(srcdir)/config.h.in: $(srcdir)/stamp-h.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h.in; \ + $(MAKE) $(srcdir)/stamp-h.in; \ + else :; fi +$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h + +maintainer-clean-hdr: +muttbug.sh: $(top_builddir)/config.status muttbug.sh.in + cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status +Muttrc.head: $(top_builddir)/config.status Muttrc.head.in + cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +mutt_dotlock: $(mutt_dotlock_OBJECTS) $(mutt_dotlock_DEPENDENCIES) + @rm -f mutt_dotlock + $(LINK) $(mutt_dotlock_LDFLAGS) $(mutt_dotlock_OBJECTS) $(mutt_dotlock_LDADD) $(LIBS) + +pgpring: $(pgpring_OBJECTS) $(pgpring_DEPENDENCIES) + @rm -f pgpring + $(LINK) $(pgpring_LDFLAGS) $(pgpring_OBJECTS) $(pgpring_LDADD) $(LIBS) + +makedoc: $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES) + @rm -f makedoc + $(LINK) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) $(LIBS) + +mutt: $(mutt_OBJECTS) $(mutt_DEPENDENCIES) + @rm -f mutt + $(LINK) $(mutt_LDFLAGS) $(mutt_OBJECTS) $(mutt_LDADD) $(LIBS) + +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; fi; \ + done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + list='$(bin_SCRIPTS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --with-included-gettext --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(DIST_SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: install-binPROGRAMS install-binSCRIPTS \ + install-exec-local +install-exec: install-exec-recursive + +install-data-am: install-data-local +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS +uninstall: uninstall-recursive +all-am: Makefile $(PROGRAMS) $(SCRIPTS) config.h +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ + mostlyclean-compile mostlyclean-tags \ + mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ + clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ + distclean-tags distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile uninstall-binSCRIPTS install-binSCRIPTS \ +install-data-recursive uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ +install-exec-local install-exec-am install-exec install-data-local \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +mutt_dotlock.c: dotlock.c + cp $(srcdir)/dotlock.c mutt_dotlock.c + +flea: muttbug.sh + cp muttbug.sh flea + chmod +x flea + +smime_keys: $(srcdir)/smime_keys.pl + cp $(srcdir)/smime_keys.pl smime_keys + chmod +x smime_keys + +Makefile: $(BUILT_SOURCES) + +keymap_defs.h: $(OPS) $(srcdir)/gen_defs + $(srcdir)/gen_defs $(OPS) > keymap_defs.h + +keymap_alldefs.h: $(srcdir)/OPS $(srcdir)/OPS.PGP $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME $(srcdir)/gen_defs + $(srcdir)/gen_defs $(srcdir)/OPS $(srcdir)/OPS.PGP \ + $(srcdir)/OPS.MIX $(srcdir)/OPS.CRYPT $(srcdir)/OPS.SMIME \ + > keymap_alldefs.h + +reldate: + echo 'const char *ReleaseDate = "'`date +%Y-%m-%d`'";' > $(srcdir)/reldate.h + +patchlist.c: $(srcdir)/PATCHES $(srcdir)/patchlist.sh + $(srcdir)/patchlist.sh < $(srcdir)/PATCHES > patchlist.c + +install-exec-local: + if test -f $(DESTDIR)$(bindir)/mutt.dotlock && test -f $(DESTDIR)$(bindir)/mutt_dotlock ; then \ + rm -f $(DESTDIR)$(bindir)/mutt.dotlock ; \ + ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \ + fi + if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x@DOTLOCK_GROUP@ != x ; then \ + chgrp @DOTLOCK_GROUP@ $(DESTDIR)$(bindir)/mutt_dotlock && \ + chmod @DOTLOCK_PERMISSION@ $(DESTDIR)$(bindir)/mutt_dotlock || \ + { echo "Can't fix mutt_dotlock's permissions!" >&2 ; exit 1 ; } \ + fi + +install-data-local: Muttrc + $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir) + -if [ -f $(DESTDIR)$(pkgdatadir)/Muttrc ] ; then \ + mv $(DESTDIR)$(pkgdatadir)/Muttrc* $(DESTDIR)$(sysconfdir) ; \ + elif [ -f $(DESTDIR)$(pkgdatadir)/../Muttrc ] ; then \ + mv $(DESTDIR)$(pkgdatadir)/../Muttrc* $(DESTDIR)$(sysconfdir) ; \ + elif [ ! -f $(DESTDIR)$(sysconfdir)/Muttrc ] ; then \ + $(INSTALL) -m 644 $(srcdir)/Muttrc $(DESTDIR)$(sysconfdir) ; \ + fi + -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \ + $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \ + fi + +# Don't make this one ChangeLog - it's intended to be +# used manually. + +pclean: + cat /dev/null > PATCHES + +check-security: + ./check_sec.sh + +commit-real: + cvs commit + +commit-changelog: + cvs commit -m "# changelog commit" ChangeLog + +commit: pclean check-security commit-real changelog commit-changelog + +changelog: + cvs update ChangeLog + sh ./mkchangelog.sh | fmt -c | cat - ChangeLog > ChangeLog.$$$$ && mv ChangeLog.$$$$ ChangeLog + $${VISUAL:-vi} ChangeLog + +ChangeLog: changelog + +# kluge around automake problems. + +dist-hook: + -for file in $(BUILT_SOURCES) ; do rm -f $(distdir)/$$file ; done + +mutt-dist: + (cd $(srcdir) && ./build-release ) + +update-doc: stamp-doc-rc + (cd doc && $(MAKE) update-doc) + +Muttrc: stamp-doc-rc + +stamp-doc-rc: $(srcdir)/init.h makedoc Muttrc.head + -rm -f Muttrc stamp-doc-rc + $(CPP) $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C \ + $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - > Muttrc + touch stamp-doc-rc + +.PHONY: commit pclean check-security commit-real commit-changelog +.PHONY: changelog ChangeLog + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Muttrc b/Muttrc new file mode 100644 index 0000000..73ee36c --- /dev/null +++ b/Muttrc @@ -0,0 +1,4116 @@ +# +# System configuration file for Mutt +# + +# default list of header fields to weed when displaying +# +ignore "from " received content- mime-version status x-status message-id +ignore sender references return-path lines + +# imitate the old search-body function +macro index \eb '/~b ' 'search in message bodies' + +# simulate the old url menu +macro index \cb |urlview\n 'call urlview to extract URLs out of a message' +macro pager \cb |urlview\n 'call urlview to extract URLs out of a message' + +# Show documentation when pressing F1 +macro generic "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documentation" +macro index "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documentation" +macro pager "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documentation" + +# If Mutt is unable to determine your site's domain name correctly, you can +# set the default here. +# +# set hostname=cs.hmc.edu + +# If your sendmail supports the -B8BITMIME flag, enable the following +# +# set use_8bitmime + +## +## More settings +## + + +# set abort_nosubject=ask-yes +# +# Name: abort_nosubject +# Type: quadoption +# Default: ask-yes +# +# +# If set to yes, when composing messages and no subject is given +# at the subject prompt, composition will be aborted. If set to +# no, composing messages with no subject given at the subject +# prompt will never be aborted. +# +# +# set abort_unmodified=yes +# +# Name: abort_unmodified +# Type: quadoption +# Default: yes +# +# +# If set to yes, composition will automatically abort after +# editing the message body if no changes are made to the file (this +# check only happens after the first edit of the file). When set +# to no, composition will never be aborted. +# +# +# set alias_file="~/.muttrc" +# +# Name: alias_file +# Type: path +# Default: "~/.muttrc" +# +# +# The default file in which to save aliases created by the +# ``create-alias'' function. +# +# Note: Mutt will not automatically source this file; you must +# explicitly use the ``source'' command for it to be executed. +# +# +# set alias_format="%4n %2f %t %-10a %r" +# +# Name: alias_format +# Type: string +# Default: "%4n %2f %t %-10a %r" +# +# +# Specifies the format of the data displayed for the `alias' menu. The +# following printf(3)-style sequences are available: +# +# %a alias name +# %f flags - currently, a "d" for an alias marked for deletion +# %n index number +# %r address which alias expands to +# %t character which indicates if the alias is tagged for inclusion +# +# +# set allow_8bit=yes +# +# Name: allow_8bit +# Type: boolean +# Default: yes +# +# +# Controls whether 8-bit data is converted to 7-bit using either Quoted- +# Printable or Base64 encoding when sending mail. +# +# +# set allow_ansi=no +# +# Name: allow_ansi +# Type: boolean +# Default: no +# +# +# Controls whether ANSI color codes in messages (and color tags in +# rich text messages) are to be interpreted. +# Messages containing these codes are rare, but if this option is set, +# their text will be colored accordingly. Note that this may override +# your color choices, and even present a security problem, since a +# message could include a line like "[-- PGP output follows ..." and +# give it the same color as your attachment color. +# +# +# set arrow_cursor=no +# +# Name: arrow_cursor +# Type: boolean +# Default: no +# +# +# When set, an arrow (``->'') will be used to indicate the current entry +# in menus instead of highlighting the whole line. On slow network or modem +# links this will make response faster because there is less that has to +# be redrawn on the screen when moving to the next or previous entries +# in the menu. +# +# +# set ascii_chars=no +# +# Name: ascii_chars +# Type: boolean +# Default: no +# +# +# If set, Mutt will use plain ASCII characters when displaying thread +# and attachment trees, instead of the default ACS characters. +# +# +# set askbcc=no +# +# Name: askbcc +# Type: boolean +# Default: no +# +# +# If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients +# before editing an outgoing message. +# +# +# set askcc=no +# +# Name: askcc +# Type: boolean +# Default: no +# +# +# If set, Mutt will prompt you for carbon-copy (Cc) recipients before +# editing the body of an outgoing message. +# +# +# set ask_follow_up=no +# +# Name: ask_follow_up +# Type: boolean +# Default: no +# +# +# If set, Mutt will prompt you for follow-up groups before editing +# the body of an outgoing message. +# +# +# set ask_x_comment_to=no +# +# Name: ask_x_comment_to +# Type: boolean +# Default: no +# +# +# If set, Mutt will prompt you for x-comment-to field before editing +# the body of an outgoing message. +# +# +# set attach_format="%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] " +# +# Name: attach_format +# Type: string +# Default: "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] " +# +# +# This variable describes the format of the `attachment' menu. The +# following printf-style sequences are understood: +# +# %C charset +# %c reqiures charset conversion (n or c) +# %D deleted flag +# %d description +# %e MIME content-transfer-encoding +# %f filename +# %I disposition (I=inline, A=attachment) +# %m major MIME type +# %M MIME subtype +# %n attachment number +# %s size +# %t tagged flag +# %T graphic tree characters +# %u unlink (=to delete) flag +# %>X right justify the rest of the string and pad with character "X" +# %|X pad to the end of the line with character "X" +# +# +# set attach_sep="\n" +# +# Name: attach_sep +# Type: string +# Default: "\n" +# +# +# The separator to add between attachments when operating (saving, +# printing, piping, etc) on a list of tagged attachments. +# +# +# set attach_split=yes +# +# Name: attach_split +# Type: boolean +# Default: yes +# +# +# If this variable is unset, when operating (saving, printing, piping, +# etc) on a list of tagged attachments, Mutt will concatenate the +# attachments and will operate on them as a single attachment. The +# ``$attach_sep'' separator is added after each attachment. When set, +# Mutt will operate on the attachments one by one. +# +# +# set attribution="On %d, %n wrote:" +# +# Name: attribution +# Type: string +# Default: "On %d, %n wrote:" +# +# +# This is the string that will precede a message which has been included +# in a reply. For a full listing of defined printf()-like sequences see +# the section on ``$index_format''. +# +# +# set autoedit=no +# +# Name: autoedit +# Type: boolean +# Default: no +# +# +# When set along with ``$edit_headers'', Mutt will skip the initial +# send-menu and allow you to immediately begin editing the body of your +# message. The send-menu may still be accessed once you have finished +# editing the body of your message. +# +# Also see ``$fast_reply''. +# +# +# set auto_tag=no +# +# Name: auto_tag +# Type: boolean +# Default: no +# +# +# When set, functions in the index menu which affect a message +# will be applied to all tagged messages (if there are any). When +# unset, you must first use the tag-prefix function (default: ";") to +# make the next function apply to all tagged messages. +# +# +# set beep=yes +# +# Name: beep +# Type: boolean +# Default: yes +# +# +# When this variable is set, mutt will beep when an error occurs. +# +# +# set beep_new=no +# +# Name: beep_new +# Type: boolean +# Default: no +# +# +# When this variable is set, mutt will beep whenever it prints a message +# notifying you of new mail. This is independent of the setting of the +# ``$beep'' variable. +# +# +# set bounce=ask-yes +# +# Name: bounce +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether you will be asked to confirm bouncing messages. +# If set to yes you don't get asked if you want to bounce a +# message. Setting this variable to no is not generally useful, +# and thus not recommended, because you are unable to bounce messages. +# +# +# set bounce_delivered=yes +# +# Name: bounce_delivered +# Type: boolean +# Default: yes +# +# +# When this variable is set, mutt will include Delivered-To headers when +# bouncing messages. Postfix users may wish to unset this variable. +# +# +# set catchup_newsgroup=ask-yes +# +# Name: catchup_newsgroup +# Type: quadoption +# Default: ask-yes +# +# +# If this variable is set, Mutt will mark all articles in newsgroup +# as read when you quit the newsgroup (catchup newsgroup). +# +# +# set charset="" +# +# Name: charset +# Type: string +# Default: "" +# +# +# Character set your terminal uses to display and enter textual data. +# +# +# set check_new=yes +# +# Name: check_new +# Type: boolean +# Default: yes +# +# +# Note: this option only affects maildir and MH style +# mailboxes. +# +# When set, Mutt will check for new mail delivered while the +# mailbox is open. Especially with MH mailboxes, this operation can +# take quite some time since it involves scanning the directory and +# checking each file to see if it has already been looked at. If +# check_new is unset, no check for new mail is performed +# while the mailbox is open. +# +# +# set collapse_unread=yes +# +# Name: collapse_unread +# Type: boolean +# Default: yes +# +# +# When unset, Mutt will not collapse a thread if it contains any +# unread messages. +# +# +# set uncollapse_jump=no +# +# Name: uncollapse_jump +# Type: boolean +# Default: no +# +# +# When set, Mutt will jump to the next unread message, if any, +# when the current thread is uncollapsed. +# +# +# set compose_format="-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-" +# +# Name: compose_format +# Type: string +# Default: "-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-" +# +# +# Controls the format of the status line displayed in the \fCompose +# menu. This string is similar to ``$status_format'', but has its own +# set of printf()-like sequences: +# +# %a total number of attachments +# %h local hostname +# %l approximate size (in bytes) of the current message +# %v Mutt version string +# +# +# See the text describing the ``$status_format'' option for more +# information on how to set ``$compose_format''. +# +# +# set confirmappend=yes +# +# Name: confirmappend +# Type: boolean +# Default: yes +# +# +# When set, Mutt will prompt for confirmation when appending messages to +# an existing mailbox. +# +# +# set confirmcreate=yes +# +# Name: confirmcreate +# Type: boolean +# Default: yes +# +# +# When set, Mutt will prompt for confirmation when saving messages to a +# mailbox which does not yet exist before creating it. +# +# +# set connect_timeout=30 +# +# Name: connect_timeout +# Type: number +# Default: 30 +# +# +# Causes Mutt to timeout a network connection (for IMAP or POP) after this +# many seconds if the connection is not able to be established. A negative +# value causes Mutt to wait indefinitely for the connection to succeed. +# +# +# set content_type="text/plain" +# +# Name: content_type +# Type: string +# Default: "text/plain" +# +# +# Sets the default Content-Type for the body of newly composed messages. +# +# +# set copy=yes +# +# Name: copy +# Type: quadoption +# Default: yes +# +# +# This variable controls whether or not copies of your outgoing messages +# will be saved for later references. Also see ``$record'', +# ``$save_name'', ``$force_name'' and ``fcc-hook''. +# +# +# set crypt_autopgp=yes +# +# Name: crypt_autopgp +# Type: boolean +# Default: yes +# +# +# This variable controls whether or not mutt may automatically enable +# PGP encryption/signing for messages. See also ``$crypt_autoencrypt'', +# ``$crypt_replyencrypt'', +# ``$crypt_autosign'', ``$crypt_replysign'' and ``$smime_is_default''. +# +# +# set crypt_autosmime=yes +# +# Name: crypt_autosmime +# Type: boolean +# Default: yes +# +# +# This variable controls whether or not mutt may automatically enable +# S/MIME encryption/signing for messages. See also ``$crypt_autoencrypt'', +# ``$crypt_replyencrypt'', +# ``$crypt_autosign'', ``$crypt_replysign'' and ``$smime_is_default''. +# +# +# set date_format="!%a, %b %d, %Y at %I:%M:%S%p %Z" +# +# Name: date_format +# Type: string +# Default: "!%a, %b %d, %Y at %I:%M:%S%p %Z" +# +# +# This variable controls the format of the date printed by the ``%d'' +# sequence in ``$index_format''. This is passed to the strftime +# call to process the date. See the man page for strftime(3) for +# the proper syntax. +# +# Unless the first character in the string is a bang (``!''), the month +# and week day names are expanded according to the locale specified in +# the variable ``$locale''. If the first character in the string is a +# bang, the bang is discarded, and the month and week day names in the +# rest of the string are expanded in the C locale (that is in US +# English). +# +# +# set default_hook="~f %s !~P | (~P ~C %s)" +# +# Name: default_hook +# Type: string +# Default: "~f %s !~P | (~P ~C %s)" +# +# +# This variable controls how send-hooks, message-hooks, save-hooks, +# and fcc-hooks will +# be interpreted if they are specified with only a simple regexp, +# instead of a matching pattern. The hooks are expanded when they are +# declared, so a hook will be interpreted according to the value of this +# variable at the time the hook is declared. The default value matches +# if the message is either from a user matching the regular expression +# given, or if it is from you (if the from address matches +# ``alternates'') and is to or cc'ed to a user matching the given +# regular expression. +# +# +# set delete=ask-yes +# +# Name: delete +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether or not messages are really deleted when closing or +# synchronizing a mailbox. If set to yes, messages marked for +# deleting will automatically be purged without prompting. If set to +# no, messages marked for deletion will be kept in the mailbox. +# +# +# set delete_untag=yes +# +# Name: delete_untag +# Type: boolean +# Default: yes +# +# +# If this option is set, mutt will untag messages when marking them +# for deletion. This applies when you either explicitly delete a message, +# or when you save it to another folder. +# +# +# set digest_collapse=yes +# +# Name: digest_collapse +# Type: boolean +# Default: yes +# +# +# If this option is set, mutt's revattach menu will not show the subparts of +# individual messages in a digest. To see these subparts, press 'v' on that menu. +# +# +# set display_filter="" +# +# Name: display_filter +# Type: path +# Default: "" +# +# +# When set, specifies a command used to filter messages. When a message +# is viewed it is passed as standard input to $display_filter, and the +# filtered message is read from the standard output. +# +# +# set dotlock_program="/usr/local/bin/mutt_dotlock" +# +# Name: dotlock_program +# Type: path +# Default: "/usr/local/bin/mutt_dotlock" +# +# +# Contains the path of the mutt_dotlock (8) binary to be used by +# mutt. +# +# +# set dsn_notify="" +# +# Name: dsn_notify +# Type: string +# Default: "" +# +# +# Note: you should not enable this unless you are using Sendmail +# 8.8.x or greater. +# +# This variable sets the request for when notification is returned. The +# string consists of a comma separated list (no spaces!) of one or more +# of the following: never, to never request notification, +# failure, to request notification on transmission failure, +# delay, to be notified of message delays, success, to be +# notified of successful transmission. +# +# Example: set dsn_notify="failure,delay" +# +# +# set dsn_return="" +# +# Name: dsn_return +# Type: string +# Default: "" +# +# +# Note: you should not enable this unless you are using Sendmail +# 8.8.x or greater. +# +# This variable controls how much of your message is returned in DSN +# messages. It may be set to either hdrs to return just the +# message header, or full to return the full message. +# +# Example: set dsn_return=hdrs +# +# +# set duplicate_threads=yes +# +# Name: duplicate_threads +# Type: boolean +# Default: yes +# +# +# This variable controls whether mutt, when sorting by threads, threads +# messages with the same message-id together. If it is set, it will indicate +# that it thinks they are duplicates of each other with an equals sign +# in the thread diagram. +# +# +# set edit_headers=no +# +# Name: edit_headers +# Type: boolean +# Default: no +# +# +# This option allows you to edit the header of your outgoing messages +# along with the body of your message. +# +# +# set editor="" +# +# Name: editor +# Type: path +# Default: "" +# +# +# This variable specifies which editor is used by mutt. +# It defaults to the value of the VISUAL, or EDITOR, environment +# variable, or to the string "vi" if neither of those are set. +# +# +# set encode_from=no +# +# Name: encode_from +# Type: boolean +# Default: no +# +# +# When set, mutt will quoted-printable encode messages when +# they contain the string "From " in the beginning of a line. +# Useful to avoid the tampering certain mail delivery and transport +# agents tend to do with messages. +# +# +# set envelope_from=no +# +# Name: envelope_from +# Type: boolean +# Default: no +# +# +# When set, mutt will try to derive the message's envelope +# sender from the "From:" header. Note that this information is passed +# to sendmail command using the "-f" command line switch, so don't set this +# option if you are using that switch in $sendmail yourself, +# or if the sendmail on your machine doesn't support that command +# line switch. +# +# +# set escape="~" +# +# Name: escape +# Type: string +# Default: "~" +# +# +# Escape character to use for functions in the builtin editor. +# +# +# set fast_reply=no +# +# Name: fast_reply +# Type: boolean +# Default: no +# +# +# When set, the initial prompt for recipients and subject are skipped +# when replying to messages, and the initial prompt for subject is +# skipped when forwarding messages. +# +# Note: this variable has no effect when the ``$autoedit'' +# variable is set. +# +# +# set fcc_attach=yes +# +# Name: fcc_attach +# Type: boolean +# Default: yes +# +# +# This variable controls whether or not attachments on outgoing messages +# are saved along with the main body of your message. +# +# +# set fcc_clear=no +# +# Name: fcc_clear +# Type: boolean +# Default: no +# +# +# When this variable is set, FCCs will be stored unencrypted and +# unsigned, even when the actual message is encrypted and/or +# signed. +# (PGP only) +# +# +# set folder="~/Mail" +# +# Name: folder +# Type: path +# Default: "~/Mail" +# +# +# Specifies the default location of your mailboxes. A `+' or `=' at the +# beginning of a pathname will be expanded to the value of this +# variable. Note that if you change this variable from the default +# value you need to make sure that the assignment occurs before +# you use `+' or `=' for any other variables since expansion takes place +# during the `set' command. +# +# +# set folder_format="%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f" +# +# Name: folder_format +# Type: string +# Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f" +# +# +# This variable allows you to customize the file browser display to your +# personal taste. This string is similar to ``$index_format'', but has +# its own set of printf()-like sequences: +# +# %C current file number +# %d date/time folder was last modified +# %f filename +# %F file permissions +# %g group name (or numeric gid, if missing) +# %l number of hard links +# %N N if folder has new mail, blank otherwise +# %s size in bytes +# %t * if the file is tagged, blank otherwise +# %u owner name (or numeric uid, if missing) +# %>X right justify the rest of the string and pad with character "X" +# %|X pad to the end of the line with character "X" +# +# +# set followup_to=yes +# +# Name: followup_to +# Type: boolean +# Default: yes +# +# +# Controls whether or not the Mail-Followup-To header field is +# generated when sending mail. When set, Mutt will generate this +# field when you are replying to a known mailing list, specified with +# the ``subscribe'' or ``lists'' commands. +# +# This field has two purposes. First, preventing you from +# receiving duplicate copies of replies to messages which you send +# to mailing lists, and second, ensuring that you do get a reply +# separately for any messages sent to known lists to which you are +# not subscribed. The header will contain only the list's address +# for subscribed lists, and both the list address and your own +# email address for unsubscribed lists. Without this header, a +# group reply to your message sent to a subscribed list will be +# sent to both the list and your address, resulting in two copies +# of the same email for you. +# +# +# set followup_to_poster=ask-yes +# +# Name: followup_to_poster +# Type: quadoption +# Default: ask-yes +# +# +# If this variable is set and the keyword "poster" is present in +# Followup-To header, follow-up to newsgroup function is not +# permitted. The message will be mailed to the submitter of the +# message via mail. +# +# +# set force_name=no +# +# Name: force_name +# Type: boolean +# Default: no +# +# +# This variable is similar to ``$save_name'', except that Mutt will +# store a copy of your outgoing message by the username of the address +# you are sending to even if that mailbox does not exist. +# +# Also see the ``$record'' variable. +# +# +# set forward_decode=yes +# +# Name: forward_decode +# Type: boolean +# Default: yes +# +# +# Controls the decoding of complex MIME messages into text/plain when +# forwarding a message. The message header is also RFC2047 decoded. +# This variable is only used, if ``$mime_forward'' is unset, +# otherwise ``$mime_forward_decode'' is used instead. +# +# +# set forward_edit=yes +# +# Name: forward_edit +# Type: quadoption +# Default: yes +# +# +# This quadoption controls whether or not the user is automatically +# placed in the editor when forwarding messages. For those who always want +# to forward with no modification, use a setting of ``no''. +# +# +# set forward_format="[%a: %s]" +# +# Name: forward_format +# Type: string +# Default: "[%a: %s]" +# +# +# This variable controls the default subject when forwarding a message. +# It uses the same format sequences as the ``$index_format'' variable. +# +# +# set forward_quote=no +# +# Name: forward_quote +# Type: boolean +# Default: no +# +# +# When set forwarded messages included in the main body of the +# message (when ``$mime_forward'' is unset) will be quoted using +# ``$indent_string''. +# +# +# set from="" +# +# Name: from +# Type: e-mail address +# Default: "" +# +# +# When set, this variable contains a default from address. It +# can be overridden using my_hdr (including from send-hooks) and +# ``$reverse_name''. This variable is ignored if ``$use_from'' +# is unset. +# +# Defaults to the contents of the environment variable EMAIL. +# +# +# set gecos_mask="^[^,]*" +# +# Name: gecos_mask +# Type: regular expression +# Default: "^[^,]*" +# +# +# A regular expression used by mutt to parse the GECOS field of a password +# entry when expanding the alias. By default the regular expression is set +# to "^[^,]*" which will return the string up to the first "," encountered. +# If the GECOS field contains a string like "lastname, firstname" then you +# should set the gecos_mask=".*". +# +# This can be useful if you see the following behavior: you address a e-mail +# to user ID stevef whose full name is Steve Franklin. If mutt expands +# stevef to "Franklin" stevef@foo.bar then you should set the gecos_mask to +# a regular expression that will match the whole name so mutt will expand +# "Franklin" to "Franklin, Steve". +# +# +# set group_index_format="%4C %M%N %5s %-45.45f %d" +# +# Name: group_index_format +# Type: string +# Default: "%4C %M%N %5s %-45.45f %d" +# +# +# This variable allows you to customize the newsgroup browser display to +# your personal taste. This string is similar to ``index_format'', but +# has its own set of printf()-like sequences: +# +# %C current newsgroup number +# %d description of newsgroup (becomes from server) +# %f newsgroup name +# %M - if newsgroup not allowed for direct post (moderated for example) +# %N N if newsgroup is new, u if unsubscribed, blank otherwise +# %n number of new articles in newsgroup +# %s number of unread articles in newsgroup +# %>X right justify the rest of the string and pad with character "X" +# %|X pad to the end of the line with character "X" +# +# +# set hdrs=yes +# +# Name: hdrs +# Type: boolean +# Default: yes +# +# +# When unset, the header fields normally added by the ``my_hdr'' +# command are not created. This variable must be unset before +# composing a new message or replying in order to take effect. If set, +# the user defined header fields are added to every new message. +# +# +# set header=no +# +# Name: header +# Type: boolean +# Default: no +# +# +# When set, this variable causes Mutt to include the header +# of the message you are replying to into the edit buffer. +# The ``$weed'' setting applies. +# +# +# set help=yes +# +# Name: help +# Type: boolean +# Default: yes +# +# +# When set, help lines describing the bindings for the major functions +# provided by each menu are displayed on the first line of the screen. +# +# Note: The binding will not be displayed correctly if the +# function is bound to a sequence rather than a single keystroke. Also, +# the help line may not be updated if a binding is changed while Mutt is +# running. Since this variable is primarily aimed at new users, neither +# of these should present a major problem. +# +# +# set hidden_host=no +# +# Name: hidden_host +# Type: boolean +# Default: no +# +# +# When set, mutt will skip the host name part of ``$hostname'' variable +# when adding the domain part to addresses. This variable does not +# affect the generation of Message-IDs, and it will not lead to the +# cut-off of first-level domains. +# +# +# set hide_limited=no +# +# Name: hide_limited +# Type: boolean +# Default: no +# +# +# When set, mutt will not show the presence of messages that are hidden +# by limiting, in the thread tree. +# +# +# set hide_missing=yes +# +# Name: hide_missing +# Type: boolean +# Default: yes +# +# +# When set, mutt will not show the presence of missing messages in the +# thread tree. +# +# +# set hide_top_limited=no +# +# Name: hide_top_limited +# Type: boolean +# Default: no +# +# +# When set, mutt will not show the presence of messages that are hidden +# by limiting, at the top of threads in the thread tree. Note that when +# $hide_missing is set, this option will have no effect. +# +# +# set hide_top_missing=yes +# +# Name: hide_top_missing +# Type: boolean +# Default: yes +# +# +# When set, mutt will not show the presence of missing messages at the +# top of threads in the thread tree. Note that when $hide_limited is +# set, this option will have no effect. +# +# +# set history=10 +# +# Name: history +# Type: number +# Default: 10 +# +# +# This variable controls the size (in number of strings remembered) of +# the string history buffer. The buffer is cleared each time the +# variable is set. +# +# +# set honor_followup_to=yes +# +# Name: honor_followup_to +# Type: quadoption +# Default: yes +# +# +# This variable controls whether or not a Mail-Followup-To header is +# honored when group-replying to a message. +# +# +# set hostname="" +# +# Name: hostname +# Type: string +# Default: "" +# +# +# Specifies the hostname to use after the ``@'' in local e-mail +# addresses. This overrides the compile time definition obtained from +# /etc/resolv.conf. +# +# +# set ignore_list_reply_to=no +# +# Name: ignore_list_reply_to +# Type: boolean +# Default: no +# +# +# Affects the behaviour of the reply function when replying to +# messages from mailing lists. When set, if the ``Reply-To:'' field is +# set to the same value as the ``To:'' field, Mutt assumes that the +# ``Reply-To:'' field was set by the mailing list to automate responses +# to the list, and will ignore this field. To direct a response to the +# mailing list when this option is set, use the list-reply +# function; group-reply will reply to both the sender and the +# list. +# +# +# set imap_authenticators="" +# +# Name: imap_authenticators +# Type: string +# Default: "" +# +# +# This is a colon-delimited list of authentication methods mutt may +# attempt to use to log in to an IMAP server, in the order mutt should +# try them. Authentication methods are either 'login' or the right +# side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', +# 'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this +# parameter is unset (the default) mutt will try all available methods, +# in order from most-secure to least-secure. +# +# Example: set imap_authenticators="gssapi:cram-md5:login" +# +# Note: Mutt will only fall back to other authentication methods if +# the previous methods are unavailable. If a method is available but +# authentication fails, mutt will not connect to the IMAP server. +# +# +# set imap_delim_chars="/." +# +# Name: imap_delim_chars +# Type: string +# Default: "/." +# +# +# This contains the list of characters which you would like to treat +# as folder separators for displaying IMAP paths. In particular it +# helps in using the '=' shortcut for your folder variable. +# +# +# set imap_force_ssl=no +# +# Name: imap_force_ssl +# Type: boolean +# Default: no +# +# +# If this variable is set, Mutt will always use SSL when +# connecting to IMAP servers. +# +# +# set imap_home_namespace="" +# +# Name: imap_home_namespace +# Type: string +# Default: "" +# +# +# You normally want to see your personal folders alongside +# your INBOX in the IMAP browser. If you see something else, you may set +# this variable to the IMAP path to your folders. +# +# +# set imap_keepalive=900 +# +# Name: imap_keepalive +# Type: number +# Default: 900 +# +# +# This variable specifies the maximum amount of time in seconds that mutt +# will wait before polling open IMAP connections, to prevent the server +# from closing them before mutt has finished with them. The default is +# well within the RFC-specified minimum amount of time (30 minutes) before +# a server is allowed to do this, but in practice the RFC does get +# violated every now and then. Reduce this number if you find yourself +# getting disconnected from your IMAP server due to inactivity. +# +# +# set imap_list_subscribed=no +# +# Name: imap_list_subscribed +# Type: boolean +# Default: no +# +# +# This variable configures whether IMAP folder browsing will look for +# only subscribed folders or all folders. This can be toggled in the +# IMAP browser with the toggle-subscribed function. +# +# +# set imap_pass="" +# +# Name: imap_pass +# Type: string +# Default: "" +# +# +# Specifies the password for your IMAP account. If unset, Mutt will +# prompt you for your password when you invoke the fetch-mail function. +# Warning: you should only use this option when you are on a +# fairly secure machine, because the superuser can read your muttrc even +# if you are the only one who can read the file. +# +# +# set imap_passive=yes +# +# Name: imap_passive +# Type: boolean +# Default: yes +# +# +# When set, mutt will not open new IMAP connections to check for new +# mail. Mutt will only check for new mail over existing IMAP +# connections. This is useful if you don't want to be prompted to +# user/password pairs on mutt invocation, or if opening the connection +# is slow. +# +# +# set imap_peek=yes +# +# Name: imap_peek +# Type: boolean +# Default: yes +# +# +# If set, mutt will avoid implicitly marking your mail as read whenever +# you fetch a message from the server. This is generally a good thing, +# but can make closing an IMAP folder somewhat slower. This option +# exists to appease speed freaks. +# +# +# set imap_servernoise=yes +# +# Name: imap_servernoise +# Type: boolean +# Default: yes +# +# +# When set, mutt will display warning messages from the IMAP +# server as error messages. Since these messages are often +# harmless, or generated due to configuration problems on the +# server which are out of the users' hands, you may wish to suppress +# them at some point. +# +# +# set imap_user="" +# +# Name: imap_user +# Type: string +# Default: "" +# +# +# Your login name on the IMAP server. +# +# This variable defaults to your user name on the local machine. +# +# +# set implicit_autoview=no +# +# Name: implicit_autoview +# Type: boolean +# Default: no +# +# +# If set to ``yes'', mutt will look for a mailcap entry with the +# copiousoutput flag set for every MIME attachment it doesn't have +# an internal viewer defined for. If such an entry is found, mutt will +# use the viewer defined in that entry to convert the body part to text +# form. +# +# +# set include=ask-yes +# +# Name: include +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether or not a copy of the message(s) you are replying to +# is included in your reply. +# +# +# set indent_string="> " +# +# Name: indent_string +# Type: string +# Default: "> " +# +# +# Specifies the string to prepend to each line of text quoted in a +# message to which you are replying. You are strongly encouraged not to +# change this value, as it tends to agitate the more fanatical netizens. +# +# +# set index_format="%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s" +# +# Name: index_format +# Type: string +# Default: "%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s" +# +# +# This variable allows you to customize the message index display to +# your personal taste. +# +# ``Format strings'' are similar to the strings used in the ``C'' +# function printf to format output (see the man page for more detail). +# The following sequences are defined in Mutt: +# +# %a address of the author +# %A reply-to address (if present; otherwise: address of author) +# %b filename of the original message folder (think mailBox) +# %B the list to which the letter was sent, or else the folder name (%b). +# %c number of characters (bytes) in the message +# %C current message number +# %d date and time of the message in the format specified by +# ``date_format'' converted to sender's time zone +# %D date and time of the message in the format specified by +# ``date_format'' converted to the local time zone +# %e current message number in thread +# %E number of messages in current thread +# %f entire From: line (address + real name) +# %F author name, or recipient name if the message is from you +# %g newsgroup name (if compiled with nntp support) +# %i message-id of the current message +# %l number of lines in the message (does not work with maildir, +# mh, and possibly IMAP folders) +# %L If an address in the To or CC header field matches an address +# defined by the users ``subscribe'' command, this displays +# "To ", otherwise the same as %F. +# %m total number of message in the mailbox +# %M number of hidden messages if the thread is collapsed. +# %N message score +# %n author's real name (or address if missing) +# %O (_O_riginal save folder) Where mutt would formerly have +# stashed the message: list name or recipient name if no list +# %s subject of the message +# %S status of the message (N/D/d/!/r/*) +# %t `to:' field (recipients) +# %T the appropriate character from the $to_chars string +# %u user (login) name of the author +# %v first name of the author, or the recipient if the message is from you +# %W name of organization of author (`organization:' field) +# %y `x-label:' field, if present +# %Y `x-label' field, if present, and (1) not at part of a thread tree, +# (2) at the top of a thread, or (3) `x-label' is different from +# preceding message's `x-label'. +# %Z message status flags +# %{fmt} the date and time of the message is converted to sender's +# time zone, and ``fmt'' is expanded by the library function +# ``strftime''; a leading bang disables locales +# %[fmt] the date and time of the message is converted to the local +# time zone, and ``fmt'' is expanded by the library function +# ``strftime''; a leading bang disables locales +# %(fmt) the local date and time when the message was received. +# ``fmt'' is expanded by the library function ``strftime''; +# a leading bang disables locales +# % the current local time. ``fmt'' is expanded by the library +# function ``strftime''; a leading bang disables locales. +# %>X right justify the rest of the string and pad with character "X" +# %|X pad to the end of the line with character "X" +# +# +# See also: ``$to_chars''. +# +# +# set inews="" +# +# Name: inews +# Type: path +# Default: "" +# +# +# If set, specifies the program and arguments used to deliver news posted +# by Mutt. Otherwise, mutt posts article using current connection to +# news server. The following printf-style sequence is understood: +# +# %s newsserver name +# +# Example: set inews="/usr/local/bin/inews -hS" +# +# +# set ispell="/usr/bin/ispell" +# +# Name: ispell +# Type: path +# Default: "/usr/bin/ispell" +# +# +# How to invoke ispell (GNU's spell-checking software). +# +# +# set keep_flagged=no +# +# Name: keep_flagged +# Type: boolean +# Default: no +# +# +# If set, read messages marked as flagged will not be moved +# from your spool mailbox to your ``$mbox'' mailbox, or as a result of +# a ``mbox-hook'' command. +# +# +# set locale="C" +# +# Name: locale +# Type: string +# Default: "C" +# +# +# The locale used by strftime(3) to format dates. Legal values are +# the strings your system accepts for the locale variable LC_TIME. +# +# +# set mail_check=5 +# +# Name: mail_check +# Type: number +# Default: 5 +# +# +# This variable configures how often (in seconds) mutt should look for +# new mail. +# +# +# set mailcap_path="" +# +# Name: mailcap_path +# Type: string +# Default: "" +# +# +# This variable specifies which files to consult when attempting to +# display MIME bodies not directly supported by Mutt. +# +# +# set mailcap_sanitize=yes +# +# Name: mailcap_sanitize +# Type: boolean +# Default: yes +# +# +# If set, mutt will restrict possible characters in mailcap % expandos +# to a well-defined set of safe characters. This is the safe setting, +# but we are not sure it doesn't break some more advanced MIME stuff. +# +# DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE +# DOING! +# +# +# set maildir_trash=no +# +# Name: maildir_trash +# Type: boolean +# Default: no +# +# +# If set, messages marked as deleted will be saved with the maildir +# (T)rashed flag instead of unlinked. NOTE: this only applies +# to maildir-style mailboxes. Setting it will have no effect on other +# mailbox types. +# +# +# set mark_old=yes +# +# Name: mark_old +# Type: boolean +# Default: yes +# +# +# Controls whether or not mutt marks new unread +# messages as old if you exit a mailbox without reading them. +# With this option set, the next time you start mutt, the messages +# will show up with an "O" next to them in the index menu, +# indicating that they are old. +# +# +# set markers=yes +# +# Name: markers +# Type: boolean +# Default: yes +# +# +# Controls the display of wrapped lines in the internal pager. If set, a +# ``+'' marker is displayed at the beginning of wrapped lines. Also see +# the ``$smart_wrap'' variable. +# +# +# set mask="!^\\.[^.]" +# +# Name: mask +# Type: regular expression +# Default: "!^\\.[^.]" +# +# +# A regular expression used in the file browser, optionally preceded by +# the not operator ``!''. Only files whose names match this mask +# will be shown. The match is always case-sensitive. +# +# +# set mbox="~/mbox" +# +# Name: mbox +# Type: path +# Default: "~/mbox" +# +# +# This specifies the folder into which read mail in your ``$spoolfile'' +# folder will be appended. +# +# +# set mbox_type=mbox +# +# Name: mbox_type +# Type: folder magic +# Default: mbox +# +# +# The default mailbox type used when creating new folders. May be any of +# mbox, MMDF, MH and Maildir. +# +# +# set metoo=no +# +# Name: metoo +# Type: boolean +# Default: no +# +# +# If unset, Mutt will remove your address (see the ``alternates'' +# command) from the list of recipients when replying to a message. +# +# +# set menu_scroll=no +# +# Name: menu_scroll +# Type: boolean +# Default: no +# +# +# When set, menus will be scrolled up or down one line when you +# attempt to move across a screen boundary. If unset, the screen +# is cleared and the next or previous page of the menu is displayed +# (useful for slow links to avoid many redraws). +# +# +# set meta_key=no +# +# Name: meta_key +# Type: boolean +# Default: no +# +# +# If set, forces Mutt to interpret keystrokes with the high bit (bit 8) +# set as if the user had pressed the ESC key and whatever key remains +# after having the high bit removed. For example, if the key pressed +# has an ASCII value of 0xf4, then this is treated as if the user had +# pressed ESC then ``x''. This is because the result of removing the +# high bit from ``0xf4'' is ``0x74'', which is the ASCII character +# ``x''. +# +# +# set mh_purge=no +# +# Name: mh_purge +# Type: boolean +# Default: no +# +# +# When unset, mutt will mimic mh's behaviour and rename deleted messages +# to , in mh folders instead of really deleting +# them. If the variable is set, the message files will simply be +# deleted. +# +# +# set mh_seq_flagged="flagged" +# +# Name: mh_seq_flagged +# Type: string +# Default: "flagged" +# +# +# The name of the MH sequence used for flagged messages. +# +# +# set mh_seq_replied="replied" +# +# Name: mh_seq_replied +# Type: string +# Default: "replied" +# +# +# The name of the MH sequence used to tag replied messages. +# +# +# set mh_seq_unseen="unseen" +# +# Name: mh_seq_unseen +# Type: string +# Default: "unseen" +# +# +# The name of the MH sequence used for unseen messages. +# +# +# set mime_forward=no +# +# Name: mime_forward +# Type: quadoption +# Default: no +# +# +# When set, the message you are forwarding will be attached as a +# separate MIME part instead of included in the main body of the +# message. This is useful for forwarding MIME messages so the receiver +# can properly view the message as it was delivered to you. If you like +# to switch between MIME and not MIME from mail to mail, set this +# variable to ask-no or ask-yes. +# +# Also see ``$forward_decode'' and ``$mime_forward_decode''. +# +# +# set mime_forward_decode=no +# +# Name: mime_forward_decode +# Type: boolean +# Default: no +# +# +# Controls the decoding of complex MIME messages into text/plain when +# forwarding a message while ``$mime_forward'' is set. Otherwise +# ``$forward_decode'' is used instead. +# +# +# set mime_forward_rest=yes +# +# Name: mime_forward_rest +# Type: quadoption +# Default: yes +# +# +# When forwarding multiple attachments of a MIME message from the recvattach +# menu, attachments which cannot be decoded in a reasonable manner will +# be attached to the newly composed message if this option is set. +# +# +# set mime_subject=yes +# +# Name: mime_subject +# Type: boolean +# Default: yes +# +# +# If unset, 8-bit ``subject:'' line in article header will not be +# encoded according to RFC2047 to base64. This is useful when message +# is Usenet article, because MIME for news is nonstandard feature. +# +# +# set mix_entry_format="%4n %c %-16s %a" +# +# Name: mix_entry_format +# Type: string +# Default: "%4n %c %-16s %a" +# +# +# This variable describes the format of a remailer line on the mixmaster +# chain selection screen. The following printf-like sequences are +# supported: +# +# %n The running number on the menu. +# %c Remailer capabilities. +# %s The remailer's short name. +# %a The remailer's e-mail address. +# +# +# set mixmaster="mixmaster" +# +# Name: mixmaster +# Type: path +# Default: "mixmaster" +# +# +# This variable contains the path to the Mixmaster binary on your +# system. It is used with various sets of parameters to gather the +# list of known remailers, and to finally send a message through the +# mixmaster chain. +# +# +# set move=ask-no +# +# Name: move +# Type: quadoption +# Default: ask-no +# +# +# Controls whether you will be asked to confirm moving read messages +# from your spool mailbox to your ``$mbox'' mailbox, or as a result of +# a ``mbox-hook'' command. +# +# +# set message_format="%s" +# +# Name: message_format +# Type: string +# Default: "%s" +# +# +# This is the string displayed in the ``attachment'' menu for +# attachments of type message/rfc822. For a full listing of defined +# printf()-like sequences see the section on ``$index_format''. +# +# +# set narrow_tree=no +# +# Name: narrow_tree +# Type: boolean +# Default: no +# +# +# This variable, when set, makes the thread tree narrower, allowing +# deeper threads to fit on the screen. +# +# +# set news_cache_dir="~/.mutt" +# +# Name: news_cache_dir +# Type: path +# Default: "~/.mutt" +# +# +# This variable pointing to directory where Mutt will save cached news +# articles headers in. If unset, headers will not be saved at all +# and will be reloaded each time when you enter to newsgroup. +# +# +# set news_server="" +# +# Name: news_server +# Type: string +# Default: "" +# +# +# This variable specifies domain name or address of NNTP server. It +# defaults to the newsserver specified in the environment variable +# $NNTPSERVER or contained in the file /etc/nntpserver. You can also +# specify username and an alternative port for each newsserver, ie: +# +# [nntp[s]://][username[:password]@]newsserver[:port] +# +# +# set newsrc="~/.newsrc" +# +# Name: newsrc +# Type: path +# Default: "~/.newsrc" +# +# +# The file, containing info about subscribed newsgroups - names and +# indexes of read articles. The following printf-style sequence +# is understood: +# +# %s newsserver name +# +# +# set nntp_context=1000 +# +# Name: nntp_context +# Type: number +# Default: 1000 +# +# +# This variable defines number of articles which will be in index when +# newsgroup entered. If active newsgroup have more articles than this +# number, oldest articles will be ignored. Also controls how many +# articles headers will be saved in cache when you quit newsgroup. +# +# +# set nntp_load_description=yes +# +# Name: nntp_load_description +# Type: boolean +# Default: yes +# +# +# This variable controls whether or not descriptions for each newsgroup +# must be loaded when newsgroup is added to list (first time list +# loading or new newsgroup adding). +# +# +# set nntp_user="" +# +# Name: nntp_user +# Type: string +# Default: "" +# +# +# Your login name on the NNTP server. If unset and NNTP server requires +# authentification, Mutt will prompt you for your account name when you +# connect to newsserver. +# +# +# set nntp_pass="" +# +# Name: nntp_pass +# Type: string +# Default: "" +# +# +# Your password for NNTP account. +# +# +# set nntp_poll=60 +# +# Name: nntp_poll +# Type: number +# Default: 60 +# +# +# The time in seconds until any operations on newsgroup except post new +# article will cause recheck for new news. If set to 0, Mutt will +# recheck newsgroup on each operation in index (stepping, read article, +# etc.). +# +# +# set nntp_reconnect=ask-yes +# +# Name: nntp_reconnect +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether or not Mutt will try to reconnect to newsserver when +# connection lost. +# +# +# set pager="builtin" +# +# Name: pager +# Type: path +# Default: "builtin" +# +# +# This variable specifies which pager you would like to use to view +# messages. builtin means to use the builtin pager, otherwise this +# variable should specify the pathname of the external pager you would +# like to use. +# +# Using an external pager may have some disadvantages: Additional +# keystrokes are necessary because you can't call mutt functions +# directly from the pager, and screen resizes cause lines longer than +# the screen width to be badly formatted in the help menu. +# +# +# set pager_context=0 +# +# Name: pager_context +# Type: number +# Default: 0 +# +# +# This variable controls the number of lines of context that are given +# when displaying the next or previous page in the internal pager. By +# default, Mutt will display the line after the last one on the screen +# at the top of the next page (0 lines of context). +# +# +# set pager_format="-%Z- %C/%m: %-20.20n %s" +# +# Name: pager_format +# Type: string +# Default: "-%Z- %C/%m: %-20.20n %s" +# +# +# This variable controls the format of the one-line message ``status'' +# displayed before each message in either the internal or an external +# pager. The valid sequences are listed in the ``$index_format'' +# section. +# +# +# set pager_index_lines=0 +# +# Name: pager_index_lines +# Type: number +# Default: 0 +# +# +# Determines the number of lines of a mini-index which is shown when in +# the pager. The current message, unless near the top or bottom of the +# folder, will be roughly one third of the way down this mini-index, +# giving the reader the context of a few messages before and after the +# message. This is useful, for example, to determine how many messages +# remain to be read in the current thread. One of the lines is reserved +# for the status bar from the index, so a pager_index_lines of 6 +# will only show 5 lines of the actual index. A value of 0 results in +# no index being shown. If the number of messages in the current folder +# is less than pager_index_lines, then the index will only use as +# many lines as it needs. +# +# +# set pager_stop=no +# +# Name: pager_stop +# Type: boolean +# Default: no +# +# +# When set, the internal-pager will not move to the next message +# when you are at the end of a message and invoke the next-page +# function. +# +# +# set crypt_autosign=no +# +# Name: crypt_autosign +# Type: boolean +# Default: no +# +# +# Setting this variable will cause Mutt to always attempt to +# cryptographically sign outgoing messages. This can be overridden +# by use of the pgp-menu, when signing is not required or +# encryption is requested as well. If ``$smime_is_default'' is set, +# then OpenSSL is used instead to create S/MIME messages and settings can +# be overridden by use of the smime-menu. +# (Crypto only) +# +# +# set crypt_autoencrypt=no +# +# Name: crypt_autoencrypt +# Type: boolean +# Default: no +# +# +# Setting this variable will cause Mutt to always attempt to PGP +# encrypt outgoing messages. This is probably only useful in +# connection to the send-hook command. It can be overridden +# by use of the pgp-menu, when encryption is not required or +# signing is requested as well. IF ``$smime_is_default'' is set, +# then OpenSSL is used instead to create S/MIME messages and +# settings can be overridden by use of the smime-menu. +# (Crypto only) +# +# +# set pgp_ignore_subkeys=yes +# +# Name: pgp_ignore_subkeys +# Type: boolean +# Default: yes +# +# +# Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead, +# the principal key will inherit the subkeys' capabilities. Unset this +# if you want to play interesting key selection games. +# (PGP only) +# +# +# set crypt_replyencrypt=yes +# +# Name: crypt_replyencrypt +# Type: boolean +# Default: yes +# +# +# If set, automatically PGP or OpenSSL encrypt replies to messages which are +# encrypted. +# (Crypto only) +# +# +# set crypt_replysign=no +# +# Name: crypt_replysign +# Type: boolean +# Default: no +# +# +# If set, automatically PGP or OpenSSL sign replies to messages which are +# signed. +# +# Note: this does not work on messages that are encrypted +# and signed! +# (Crypto only) +# +# +# set crypt_replysignencrypted=no +# +# Name: crypt_replysignencrypted +# Type: boolean +# Default: no +# +# +# If set, automatically PGP or OpenSSL sign replies to messages +# which are encrypted. This makes sense in combination with +# ``$crypt_replyencrypt'', because it allows you to sign all +# messages which are automatically encrypted. This works around +# the problem noted in ``$crypt_replysign'', that mutt is not able +# to find out whether an encrypted message is also signed. +# (Crypto only) +# +# +# set crypt_timestamp=yes +# +# Name: crypt_timestamp +# Type: boolean +# Default: yes +# +# +# If set, mutt will include a time stamp in the lines surrounding +# PGP or S/MIME output, so spoofing such lines is more difficult. +# If you are using colors to mark these lines, and rely on these, +# you may unset this setting. +# (Crypto only) +# +# +# set pgp_use_gpg_agent=no +# +# Name: pgp_use_gpg_agent +# Type: boolean +# Default: no +# +# +# If set, mutt will use a possibly-running gpg-agent process. +# (PGP only) +# +# +# set crypt_verify_sig=yes +# +# Name: crypt_verify_sig +# Type: quadoption +# Default: yes +# +# +# If ``yes'', always attempt to verify PGP or S/MIME signatures. +# If ``ask'', ask whether or not to verify the signature. +# If ``no'', never attempt to verify cryptographic signatures. +# (Crypto only) +# +# +# set smime_is_default=no +# +# Name: smime_is_default +# Type: boolean +# Default: no +# +# +# The default behaviour of mutt is to use PGP on all auto-sign/encryption +# operations. To override and to use OpenSSL instead this must be set. +# However, this has no effect while replying, since mutt will automatically +# select the same application that was used to sign/encrypt the original +# message. (Note that this variable can be overridden by unsetting $crypt_autosmime.) +# (S/MIME only) +# +# +# set smime_ask_cert_label=yes +# +# Name: smime_ask_cert_label +# Type: boolean +# Default: yes +# +# +# This flag controls whether you want to be asked to enter a label +# for a certificate about to be added to the database or not. It is +# set by default. +# (S/MIME only) +# +# +# set smime_decrypt_use_default_key=yes +# +# Name: smime_decrypt_use_default_key +# Type: boolean +# Default: yes +# +# +# If set (default) this tells mutt to use the default key for decryption. Otherwise, +# if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address +# to determine the key to use. It will ask you to supply a key, if it can't find one. +# (S/MIME only) +# +# +# set pgp_entry_format="%4n %t%f %4l/0x%k %-4a %2c %u" +# +# Name: pgp_entry_format +# Type: string +# Default: "%4n %t%f %4l/0x%k %-4a %2c %u" +# +# +# This variable allows you to customize the PGP key selection menu to +# your personal taste. This string is similar to ``$index_format'', but +# has its own set of printf()-like sequences: +# +# %n number +# %k key id +# %u user id +# %a algorithm +# %l key length +# %f flags +# %c capabilities +# %t trust/validity of the key-uid association +# %[] date of the key where is an strftime(3) expression +# +# +# (PGP only) +# +# +# set pgp_good_sign="" +# +# Name: pgp_good_sign +# Type: regular expression +# Default: "" +# +# +# If you assign a text to this variable, then a PGP signature is only +# considered verified if the output from $pgp_verify_command contains +# the text. Use this variable if the exit code from the command is 0 +# even for bad signatures. +# (PGP only) +# +# +# set pgp_check_exit=yes +# +# Name: pgp_check_exit +# Type: boolean +# Default: yes +# +# +# If set, mutt will check the exit code of the PGP subprocess when +# signing or encrypting. A non-zero exit code means that the +# subprocess failed. +# (PGP only) +# +# +# set pgp_long_ids=no +# +# Name: pgp_long_ids +# Type: boolean +# Default: no +# +# +# If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs. +# (PGP only) +# +# +# set pgp_retainable_sigs=no +# +# Name: pgp_retainable_sigs +# Type: boolean +# Default: no +# +# +# If set, signed and encrypted messages will consist of nested +# multipart/signed and multipart/encrypted body parts. +# +# This is useful for applications like encrypted and signed mailing +# lists, where the outer layer (multipart/encrypted) can be easily +# removed, while the inner multipart/signed part is retained. +# (PGP only) +# +# +# set pgp_show_unusable=yes +# +# Name: pgp_show_unusable +# Type: boolean +# Default: yes +# +# +# If set, mutt will display non-usable keys on the PGP key selection +# menu. This includes keys which have been revoked, have expired, or +# have been marked as ``disabled'' by the user. +# (PGP only) +# +# +# set pgp_sign_as="" +# +# Name: pgp_sign_as +# Type: string +# Default: "" +# +# +# If you have more than one key pair, this option allows you to specify +# which of your private keys to use. It is recommended that you use the +# keyid form to specify your key (e.g., ``0x00112233''). +# (PGP only) +# +# +# set pgp_strict_enc=yes +# +# Name: pgp_strict_enc +# Type: boolean +# Default: yes +# +# +# If set, Mutt will automatically encode PGP/MIME signed messages as +# quoted-printable. Please note that unsetting this variable may +# lead to problems with non-verifyable PGP signatures, so only change +# this if you know what you are doing. +# (PGP only) +# +# +# set pgp_timeout=300 +# +# Name: pgp_timeout +# Type: number +# Default: 300 +# +# +# The number of seconds after which a cached passphrase will expire if +# not used. +# (PGP only) +# +# +# set pgp_sort_keys=address +# +# Name: pgp_sort_keys +# Type: sort order +# Default: address +# +# +# Specifies how the entries in the `pgp keys' menu are sorted. The +# following are legal values: +# +# address sort alphabetically by user id +# keyid sort alphabetically by key id +# date sort by key creation date +# trust sort by the trust of the key +# +# +# If you prefer reverse order of the above values, prefix it with +# `reverse-'. +# (PGP only) +# +# +# set pgp_create_traditional=no +# +# Name: pgp_create_traditional +# Type: quadoption +# Default: no +# +# +# This option controls whether Mutt generates old-style inline PGP +# encrypted or signed messages. +# +# Note that PGP/MIME will be used automatically for messages which have +# a character set different from us-ascii, or which consist of more than +# a single MIME part. +# +# Also note that using the old-style PGP message format is strongly +# deprecated. +# (PGP only) +# +# +# set pgp_auto_traditional=no +# +# Name: pgp_auto_traditional +# Type: boolean +# Default: no +# +# +# This option causes Mutt to generate an old-style inline PGP +# encrypted or signed message when replying to an old-style +# message, and a PGP/MIME message when replying to a PGP/MIME +# message. Note that this option is only meaningful when using +# ``$crypt_replyencrypt'', ``$crypt_replysign'', or +# ``$crypt_replysignencrypted''. +# +# Also note that PGP/MIME will be used automatically for messages +# which have a character set different from us-ascii, or which +# consist of more than a single MIME part. +# +# This option overrides ``$pgp_create_traditional'' +# (PGP only) +# +# +# set pgp_decode_command="" +# +# Name: pgp_decode_command +# Type: string +# Default: "" +# +# +# This format strings specifies a command which is used to decode +# application/pgp attachments. +# +# The PGP command formats have their own set of printf-like sequences: +# +# %p Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty +# string otherwise. Note: This may be used with a %? construct. +# %f Expands to the name of a file containing a message. +# %s Expands to the name of a file containing the signature part +# of a multipart/signed attachment when verifying it. +# %a The value of $pgp_sign_as. +# %r One or more key IDs. +# +# +# For examples on how to configure these formats for the various versions +# of PGP which are floating around, see the pgp*.rc and gpg.rc files in +# the samples/ subdirectory which has been installed on your system +# alongside the documentation. +# (PGP only) +# +# +# set pgp_getkeys_command="" +# +# Name: pgp_getkeys_command +# Type: string +# Default: "" +# +# +# This command is invoked whenever mutt will need public key information. +# %r is the only printf-like sequence used with this format. +# (PGP only) +# +# +# set pgp_verify_command="" +# +# Name: pgp_verify_command +# Type: string +# Default: "" +# +# +# This command is used to verify PGP signatures. +# (PGP only) +# +# +# set pgp_decrypt_command="" +# +# Name: pgp_decrypt_command +# Type: string +# Default: "" +# +# +# This command is used to decrypt a PGP encrypted message. +# (PGP only) +# +# +# set pgp_clearsign_command="" +# +# Name: pgp_clearsign_command +# Type: string +# Default: "" +# +# +# This format is used to create a old-style "clearsigned" PGP +# message. Note that the use of this format is strongly +# deprecated. +# (PGP only) +# +# +# set pgp_sign_command="" +# +# Name: pgp_sign_command +# Type: string +# Default: "" +# +# +# This command is used to create the detached PGP signature for a +# multipart/signed PGP/MIME body part. +# (PGP only) +# +# +# set pgp_encrypt_sign_command="" +# +# Name: pgp_encrypt_sign_command +# Type: string +# Default: "" +# +# +# This command is used to both sign and encrypt a body part. +# (PGP only) +# +# +# set pgp_encrypt_only_command="" +# +# Name: pgp_encrypt_only_command +# Type: string +# Default: "" +# +# +# This command is used to encrypt a body part without signing it. +# (PGP only) +# +# +# set pgp_import_command="" +# +# Name: pgp_import_command +# Type: string +# Default: "" +# +# +# This command is used to import a key from a message into +# the user's public key ring. +# (PGP only) +# +# +# set pgp_export_command="" +# +# Name: pgp_export_command +# Type: string +# Default: "" +# +# +# This command is used to export a public key from the user's +# key ring. +# (PGP only) +# +# +# set pgp_verify_key_command="" +# +# Name: pgp_verify_key_command +# Type: string +# Default: "" +# +# +# This command is used to verify key information from the key selection +# menu. +# (PGP only) +# +# +# set pgp_list_secring_command="" +# +# Name: pgp_list_secring_command +# Type: string +# Default: "" +# +# +# This command is used to list the secret key ring's contents. The +# output format must be analogous to the one used by +# gpg --list-keys --with-colons. +# +# This format is also generated by the pgpring utility which comes +# with mutt. +# (PGP only) +# +# +# set pgp_list_pubring_command="" +# +# Name: pgp_list_pubring_command +# Type: string +# Default: "" +# +# +# This command is used to list the public key ring's contents. The +# output format must be analogous to the one used by +# gpg --list-keys --with-colons. +# +# This format is also generated by the pgpring utility which comes +# with mutt. +# (PGP only) +# +# +# set forward_decrypt=yes +# +# Name: forward_decrypt +# Type: boolean +# Default: yes +# +# +# Controls the handling of encrypted messages when forwarding a message. +# When set, the outer layer of encryption is stripped off. This +# variable is only used if ``$mime_forward'' is set and +# ``$mime_forward_decode'' is unset. +# (PGP only) +# +# +# set smime_timeout=300 +# +# Name: smime_timeout +# Type: number +# Default: 300 +# +# +# The number of seconds after which a cached passphrase will expire if +# not used. +# (S/MIME only) +# +# +# set smime_encrypt_with="" +# +# Name: smime_encrypt_with +# Type: string +# Default: "" +# +# +# This sets the algorithm that should be used for encryption. +# Valid choices are "des", "des3", "rc2-40", "rc2-64", "rc2-128". +# If unset "3des" (TripleDES) is used. +# (S/MIME only) +# +# +# set smime_keys="" +# +# Name: smime_keys +# Type: path +# Default: "" +# +# +# Since there is no pubring/secring as with PGP, mutt has to handle +# storage ad retrieval of keys/certs by itself. This is very basic right now, +# and stores keys and certificates in two different directories, both +# named as the hash-value retrieved from OpenSSL. There is an index file +# which contains mailbox-address keyid pair, and which can be manually +# edited. This one points to the location of the private keys. +# (S/MIME only) +# +# +# set smime_ca_location="" +# +# Name: smime_ca_location +# Type: path +# Default: "" +# +# +# This variable contains the name of either a directory, or a file which +# contains trusted certificates for use with OpenSSL. +# (S/MIME only) +# +# +# set smime_certificates="" +# +# Name: smime_certificates +# Type: path +# Default: "" +# +# +# Since there is no pubring/secring as with PGP, mutt has to handle +# storage and retrieval of keys by itself. This is very basic right +# now, and keys and certificates are stored in two different +# directories, both named as the hash-value retrieved from +# OpenSSL. There is an index file which contains mailbox-address +# keyid pairs, and which can be manually edited. This one points to +# the location of the certificates. +# (S/MIME only) +# +# +# set smime_decrypt_command="" +# +# Name: smime_decrypt_command +# Type: string +# Default: "" +# +# +# This format string specifies a command which is used to decrypt +# application/x-pkcs7-mime attachments. +# +# The OpenSSL command formats have their own set of printf-like sequences +# similar to PGP's: +# +# %f Expands to the name of a file containing a message. +# %s Expands to the name of a file containing the signature part +# of a multipart/signed attachment when verifying it. +# %k The key-pair specified with $smime_default_key +# %c One or more certificate IDs. +# %a The algorithm used for encryption. +# %C CA location: Depending on whether $smime_ca_location +# points to a directory or file, this expands to +# "-CApath $smime_ca_location" or "-CAfile $smime_ca_location". +# +# +# For examples on how to configure these formats, see the smime.rc in +# the samples/ subdirectory which has been installed on your system +# alongside the documentation. +# (S/MIME only) +# +# +# set smime_verify_command="" +# +# Name: smime_verify_command +# Type: string +# Default: "" +# +# +# This command is used to verify S/MIME signatures of type multipart/signed. +# (S/MIME only) +# +# +# set smime_verify_opaque_command="" +# +# Name: smime_verify_opaque_command +# Type: string +# Default: "" +# +# +# This command is used to verify S/MIME signatures of type +# application/x-pkcs7-mime. +# (S/MIME only) +# +# +# set smime_sign_command="" +# +# Name: smime_sign_command +# Type: string +# Default: "" +# +# +# This command is used to created S/MIME signatures of type +# multipart/signed, which can be read by all mail clients. +# (S/MIME only) +# +# +# set smime_sign_opaque_command="" +# +# Name: smime_sign_opaque_command +# Type: string +# Default: "" +# +# +# This command is used to created S/MIME signatures of type +# application/x-pkcs7-signature, which can only be handled by mail +# clients supporting the S/MIME extension. +# (S/MIME only) +# +# +# set smime_encrypt_command="" +# +# Name: smime_encrypt_command +# Type: string +# Default: "" +# +# +# This command is used to create encrypted S/MIME messages. +# (S/MIME only) +# +# +# set smime_pk7out_command="" +# +# Name: smime_pk7out_command +# Type: string +# Default: "" +# +# +# This command is used to extract PKCS7 structures of S/MIME signatures, +# in order to extract the public X509 certificate(s). +# (S/MIME only) +# +# +# set smime_get_cert_command="" +# +# Name: smime_get_cert_command +# Type: string +# Default: "" +# +# +# This command is used to extract X509 certificates from a PKCS7 structure. +# (S/MIME only) +# +# +# set smime_get_signer_cert_command="" +# +# Name: smime_get_signer_cert_command +# Type: string +# Default: "" +# +# +# This command is used to extract only the signers X509 certificate from a S/MIME +# signature, so that the certificate's owner may get compared to the email's +# 'From'-field. +# (S/MIME only) +# +# +# set smime_import_cert_command="" +# +# Name: smime_import_cert_command +# Type: string +# Default: "" +# +# +# This command is used to import a certificate via smime_keys. +# (S/MIME only) +# +# +# set smime_get_cert_email_command="" +# +# Name: smime_get_cert_email_command +# Type: string +# Default: "" +# +# +# This command is used to extract the mail address(es) used for storing +# X509 certificates, and for verification purposes (to check whether the +# certificate was issued for the sender's mailbox). +# (S/MIME only) +# +# +# set smime_default_key="" +# +# Name: smime_default_key +# Type: string +# Default: "" +# +# +# This is the default key-pair to use for signing. This must be set to the +# keyid (the hash-value that OpenSSL generates) to work properly +# (S/MIME only) +# +# +# set ssl_starttls=yes +# +# Name: ssl_starttls +# Type: quadoption +# Default: yes +# +# +# If set (the default), mutt will attempt to use STARTTLS on servers +# advertising the capability. When unset, mutt will not attempt to +# use STARTTLS regardless of the server's capabilities. +# +# +# set certificate_file="" +# +# Name: certificate_file +# Type: path +# Default: "" +# +# +# This variable specifies the file where the certificates you trust +# are saved. When an unknown certificate is encountered, you are asked +# if you accept it or not. If you accept it, the certificate can also +# be saved in this file and further connections are automatically +# accepted. +# +# You can also manually add CA certificates in this file. Any server +# certificate that is signed with one of these CA certificates are +# also automatically accepted. +# +# Example: set certificate_file=~/.mutt/certificates +# +# +# set ssl_usesystemcerts=yes +# +# Name: ssl_usesystemcerts +# Type: boolean +# Default: yes +# +# +# If set to yes, mutt will use CA certificates in the +# system-wide certificate store when checking if server certificate +# is signed by a trusted CA. +# +# +# set entropy_file="" +# +# Name: entropy_file +# Type: path +# Default: "" +# +# +# The file which includes random data that is used to initialize SSL +# library functions. +# +# +# set ssl_use_sslv2=yes +# +# Name: ssl_use_sslv2 +# Type: boolean +# Default: yes +# +# +# This variables specifies whether to attempt to use SSLv2 in the +# SSL authentication process. +# +# +# set ssl_use_sslv3=yes +# +# Name: ssl_use_sslv3 +# Type: boolean +# Default: yes +# +# +# This variables specifies whether to attempt to use SSLv3 in the +# SSL authentication process. +# +# +# set ssl_use_tlsv1=yes +# +# Name: ssl_use_tlsv1 +# Type: boolean +# Default: yes +# +# +# This variables specifies whether to attempt to use TLSv1 in the +# SSL authentication process. +# +# +# set pipe_split=no +# +# Name: pipe_split +# Type: boolean +# Default: no +# +# +# Used in connection with the pipe-message command and the ``tag- +# prefix'' operator. If this variable is unset, when piping a list of +# tagged messages Mutt will concatenate the messages and will pipe them +# as a single folder. When set, Mutt will pipe the messages one by one. +# In both cases the messages are piped in the current sorted order, +# and the ``$pipe_sep'' separator is added after each message. +# +# +# set pipe_decode=no +# +# Name: pipe_decode +# Type: boolean +# Default: no +# +# +# Used in connection with the pipe-message command. When unset, +# Mutt will pipe the messages without any preprocessing. When set, Mutt +# will weed headers and will attempt to PGP/MIME decode the messages +# first. +# +# +# set pipe_sep="\n" +# +# Name: pipe_sep +# Type: string +# Default: "\n" +# +# +# The separator to add between messages when piping a list of tagged +# messages to an external Unix command. +# +# +# set pop_authenticators="" +# +# Name: pop_authenticators +# Type: string +# Default: "" +# +# +# This is a colon-delimited list of authentication methods mutt may +# attempt to use to log in to an POP server, in the order mutt should +# try them. Authentication methods are either 'user', 'apop' or any +# SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'. +# This parameter is case-insensitive. If this parameter is unset +# (the default) mutt will try all available methods, in order from +# most-secure to least-secure. +# +# Example: set pop_authenticators="digest-md5:apop:user" +# +# +# set pop_auth_try_all=yes +# +# Name: pop_auth_try_all +# Type: boolean +# Default: yes +# +# +# If set, Mutt will try all available methods. When unset, Mutt will +# only fall back to other authentication methods if the previous +# methods are unavailable. If a method is available but authentication +# fails, Mutt will not connect to the POP server. +# +# +# set pop_checkinterval=60 +# +# Name: pop_checkinterval +# Type: number +# Default: 60 +# +# +# This variable configures how often (in seconds) POP should look for +# new mail. +# +# +# set pop_delete=ask-no +# +# Name: pop_delete +# Type: quadoption +# Default: ask-no +# +# +# If set, Mutt will delete successfully downloaded messages from the POP +# server when using the fetch-mail function. When unset, Mutt will +# download messages but also leave them on the POP server. +# +# +# set pop_host="" +# +# Name: pop_host +# Type: string +# Default: "" +# +# +# The name of your POP server for the fetch-mail function. You +# can also specify an alternative port, username and password, ie: +# +# [pop[s]://][username[:password]@]popserver[:port] +# +# +# set pop_last=no +# +# Name: pop_last +# Type: boolean +# Default: no +# +# +# If this variable is set, mutt will try to use the "LAST" POP command +# for retrieving only unread messages from the POP server when using +# the fetch-mail function. +# +# +# set pop_reconnect=ask-yes +# +# Name: pop_reconnect +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether or not Mutt will try to reconnect to POP server when +# connection lost. +# +# +# set pop_user="" +# +# Name: pop_user +# Type: string +# Default: "" +# +# +# Your login name on the POP server. +# +# This variable defaults to your user name on the local machine. +# +# +# set pop_pass="" +# +# Name: pop_pass +# Type: string +# Default: "" +# +# +# Specifies the password for your POP account. If unset, Mutt will +# prompt you for your password when you open POP mailbox. +# Warning: you should only use this option when you are on a +# fairly secure machine, because the superuser can read your muttrc +# even if you are the only one who can read the file. +# +# +# set post_indent_string="" +# +# Name: post_indent_string +# Type: string +# Default: "" +# +# +# Similar to the ``$attribution'' variable, Mutt will append this +# string after the inclusion of a message which is being replied to. +# +# +# set post_moderated=ask-yes +# +# Name: post_moderated +# Type: quadoption +# Default: ask-yes +# +# +# If set to yes, Mutt will post article to newsgroup that have +# not permissions to posting (e.g. moderated). Note: if newsserver +# does not support posting to that newsgroup or totally read-only, that +# posting will not have an effect. +# +# +# set postpone=ask-yes +# +# Name: postpone +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether or not messages are saved in the ``$postponed'' +# mailbox when you elect not to send immediately. +# +# +# set postponed="~/postponed" +# +# Name: postponed +# Type: path +# Default: "~/postponed" +# +# +# Mutt allows you to indefinitely ``postpone sending a message'' which +# you are editing. When you choose to postpone a message, Mutt saves it +# in the mailbox specified by this variable. Also see the ``$postpone'' +# variable. +# +# +# set preconnect="" +# +# Name: preconnect +# Type: string +# Default: "" +# +# +# If set, a shell command to be executed if mutt fails to establish +# a connection to the server. This is useful for setting up secure +# connections, e.g. with ssh(1). If the command returns a nonzero +# status, mutt gives up opening the server. Example: +# +# preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net +# sleep 20 < /dev/null > /dev/null" +# +# Mailbox 'foo' on mailhost.net can now be reached +# as '{localhost:1234}foo'. +# +# NOTE: For this example to work, you must be able to log in to the +# remote machine without having to enter a password. +# +# +# set print=ask-no +# +# Name: print +# Type: quadoption +# Default: ask-no +# +# +# Controls whether or not Mutt asks for confirmation before printing. +# This is useful for people (like me) who accidentally hit ``p'' often. +# +# +# set print_command="lpr" +# +# Name: print_command +# Type: path +# Default: "lpr" +# +# +# This specifies the command pipe that should be used to print messages. +# +# +# set print_decode=yes +# +# Name: print_decode +# Type: boolean +# Default: yes +# +# +# Used in connection with the print-message command. If this +# option is set, the message is decoded before it is passed to the +# external command specified by $print_command. If this option +# is unset, no processing will be applied to the message when +# printing it. The latter setting may be useful if you are using +# some advanced printer filter which is able to properly format +# e-mail messages for printing. +# +# +# set print_split=no +# +# Name: print_split +# Type: boolean +# Default: no +# +# +# Used in connection with the print-message command. If this option +# is set, the command specified by $print_command is executed once for +# each message which is to be printed. If this option is unset, +# the command specified by $print_command is executed only once, and +# all the messages are concatenated, with a form feed as the message +# separator. +# +# Those who use the enscript(1) program's mail-printing mode will +# most likely want to set this option. +# +# +# set prompt_after=yes +# +# Name: prompt_after +# Type: boolean +# Default: yes +# +# +# If you use an external ``$pager'', setting this variable will +# cause Mutt to prompt you for a command when the pager exits rather +# than returning to the index menu. If unset, Mutt will return to the +# index menu when the external pager exits. +# +# +# set query_command="" +# +# Name: query_command +# Type: path +# Default: "" +# +# +# This specifies the command that mutt will use to make external address +# queries. The string should contain a %s, which will be substituted +# with the query string the user types. See ``query'' for more +# information. +# +# +# set quit=yes +# +# Name: quit +# Type: quadoption +# Default: yes +# +# +# This variable controls whether ``quit'' and ``exit'' actually quit +# from mutt. If it set to yes, they do quit, if it is set to no, they +# have no effect, and if it is set to ask-yes or ask-no, you are +# prompted for confirmation when you try to quit. +# +# +# set quote_regexp="^([ \t]*[|>:}#])+" +# +# Name: quote_regexp +# Type: regular expression +# Default: "^([ \t]*[|>:}#])+" +# +# +# A regular expression used in the internal-pager to determine quoted +# sections of text in the body of a message. +# +# Note: In order to use the quotedx patterns in the +# internal pager, you need to set this to a regular expression that +# matches exactly the quote characters at the beginning of quoted +# lines. +# +# +# set read_inc=10 +# +# Name: read_inc +# Type: number +# Default: 10 +# +# +# If set to a value greater than 0, Mutt will display which message it +# is currently on when reading a mailbox. The message is printed after +# read_inc messages have been read (e.g., if set to 25, Mutt will +# print a message when it reads message 25, and then again when it gets +# to message 50). This variable is meant to indicate progress when +# reading large mailboxes which may take some time. +# When set to 0, only a single message will appear before the reading +# the mailbox. +# +# Also see the ``$write_inc'' variable. +# +# +# set read_only=no +# +# Name: read_only +# Type: boolean +# Default: no +# +# +# If set, all folders are opened in read-only mode. +# +# +# set realname="" +# +# Name: realname +# Type: string +# Default: "" +# +# +# This variable specifies what "real" or "personal" name should be used +# when sending messages. +# +# By default, this is the GECOS field from /etc/passwd. Note that this +# variable will not be used when the user has set a real name +# in the $from variable. +# +# +# set recall=ask-yes +# +# Name: recall +# Type: quadoption +# Default: ask-yes +# +# +# Controls whether or not you are prompted to recall postponed messages +# when composing a new message. Also see ``$postponed''. +# +# Setting this variable to ``yes'' is not generally useful, and thus not +# recommended. +# +# +# set record="" +# +# Name: record +# Type: path +# Default: "" +# +# +# This specifies the file into which your outgoing messages should be +# appended. (This is meant as the primary method for saving a copy of +# your messages, but another way to do this is using the ``my_hdr'' +# command to create a Bcc: field with your email address in it.) +# +# The value of $record is overridden by the ``$force_name'' and +# ``$save_name'' variables, and the ``fcc-hook'' command. +# +# +# set reply_regexp="^(re([\\[0-9\\]+])*|aw):[ \t]*" +# +# Name: reply_regexp +# Type: regular expression +# Default: "^(re([\\[0-9\\]+])*|aw):[ \t]*" +# +# +# A regular expression used to recognize reply messages when threading +# and replying. The default value corresponds to the English "Re:" and +# the German "Aw:". +# +# +# set reply_self=no +# +# Name: reply_self +# Type: boolean +# Default: no +# +# +# If unset and you are replying to a message sent by you, Mutt will +# assume that you want to reply to the recipients of that message rather +# than to yourself. +# +# +# set reply_to=ask-yes +# +# Name: reply_to +# Type: quadoption +# Default: ask-yes +# +# +# If set, Mutt will ask you if you want to use the address listed in the +# Reply-To: header field when replying to a message. If you answer no, +# it will use the address in the From: header field instead. This +# option is useful for reading a mailing list that sets the Reply-To: +# header field to the list address and you want to send a private +# message to the author of a message. +# +# +# set resolve=yes +# +# Name: resolve +# Type: boolean +# Default: yes +# +# +# When set, the cursor will be automatically advanced to the next +# (possibly undeleted) message whenever a command that modifies the +# current message is executed. +# +# +# set reverse_alias=no +# +# Name: reverse_alias +# Type: boolean +# Default: no +# +# +# This variable controls whether or not Mutt will display the "personal" +# name from your aliases in the index menu if it finds an alias that +# matches the message's sender. For example, if you have the following +# alias: +# +# alias juser abd30425@somewhere.net (Joe User) +# +# and then you receive mail which contains the following header: +# +# From: abd30425@somewhere.net +# +# It would be displayed in the index menu as ``Joe User'' instead of +# ``abd30425@somewhere.net.'' This is useful when the person's e-mail +# address is not human friendly (like CompuServe addresses). +# +# +# set reverse_name=no +# +# Name: reverse_name +# Type: boolean +# Default: no +# +# +# It may sometimes arrive that you receive mail to a certain machine, +# move the messages to another machine, and reply to some the messages +# from there. If this variable is set, the default From: line of +# the reply messages is built using the address where you received the +# messages you are replying to. If the variable is unset, the +# From: line will use your address on the current machine. +# +# +# set reverse_realname=yes +# +# Name: reverse_realname +# Type: boolean +# Default: yes +# +# +# This variable fine-tunes the behaviour of the reverse_name feature. +# When it is set, mutt will use the address from incoming messages as-is, +# possibly including eventual real names. When it is unset, mutt will +# override any such real names with the setting of the realname variable. +# +# +# set rfc2047_parameters=no +# +# Name: rfc2047_parameters +# Type: boolean +# Default: no +# +# +# When this variable is set, Mutt will decode RFC-2047-encoded MIME +# parameters. You want to set this variable when mutt suggests you +# to save attachments to files named like this: +# =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?= +# +# When this variable is set interactively, the change doesn't have +# the desired effect before you have changed folders. +# +# Note that this use of RFC 2047's encoding is explicitly, +# prohibited by the standard, but nevertheless encountered in the +# wild. +# Also note that setting this parameter will not have the effect +# that mutt generates this kind of encoding. Instead, mutt will +# unconditionally use the encoding specified in RFC 2231. +# +# +# set save_address=no +# +# Name: save_address +# Type: boolean +# Default: no +# +# +# If set, mutt will take the sender's full address when choosing a +# default folder for saving a mail. If ``$save_name'' or ``$force_name'' +# is set too, the selection of the fcc folder will be changed as well. +# +# +# set save_empty=yes +# +# Name: save_empty +# Type: boolean +# Default: yes +# +# +# When unset, mailboxes which contain no saved messages will be removed +# when closed (the exception is ``$spoolfile'' which is never removed). +# If set, mailboxes are never removed. +# +# Note: This only applies to mbox and MMDF folders, Mutt does not +# delete MH and Maildir directories. +# +# +# set save_name=no +# +# Name: save_name +# Type: boolean +# Default: no +# +# +# This variable controls how copies of outgoing messages are saved. +# When set, a check is made to see if a mailbox specified by the +# recipient address exists (this is done by searching for a mailbox in +# the ``$folder'' directory with the username part of the +# recipient address). If the mailbox exists, the outgoing message will +# be saved to that mailbox, otherwise the message is saved to the +# ``$record'' mailbox. +# +# Also see the ``$force_name'' variable. +# +# +# set score=yes +# +# Name: score +# Type: boolean +# Default: yes +# +# +# When this variable is unset, scoring is turned off. This can +# be useful to selectively disable scoring for certain folders when the +# ``$score_threshold_delete'' variable and friends are used. +# +# +# set score_threshold_delete=-1 +# +# Name: score_threshold_delete +# Type: number +# Default: -1 +# +# +# Messages which have been assigned a score equal to or lower than the value +# of this variable are automatically marked for deletion by mutt. Since +# mutt scores are always greater than or equal to zero, the default setting +# of this variable will never mark a message for deletion. +# +# +# set score_threshold_flag=9999 +# +# Name: score_threshold_flag +# Type: number +# Default: 9999 +# +# +# Messages which have been assigned a score greater than or equal to this +# variable's value are automatically marked "flagged". +# +# +# set score_threshold_read=-1 +# +# Name: score_threshold_read +# Type: number +# Default: -1 +# +# +# Messages which have been assigned a score equal to or lower than the value +# of this variable are automatically marked as read by mutt. Since +# mutt scores are always greater than or equal to zero, the default setting +# of this variable will never mark a message read. +# +# +# set send_charset="us-ascii:iso-8859-1:utf-8" +# +# Name: send_charset +# Type: string +# Default: "us-ascii:iso-8859-1:utf-8" +# +# +# A list of character sets for outgoing messages. Mutt will use the +# first character set into which the text can be converted exactly. +# If your ``$charset'' is not iso-8859-1 and recipients may not +# understand UTF-8, it is advisable to include in the list an +# appropriate widely used standard character set (such as +# iso-8859-2, koi8-r or iso-2022-jp) either instead of or after +# "iso-8859-1". +# +# +# set sendmail="/usr/sbin/sendmail -oem -oi" +# +# Name: sendmail +# Type: path +# Default: "/usr/sbin/sendmail -oem -oi" +# +# +# Specifies the program and arguments used to deliver mail sent by Mutt. +# Mutt expects that the specified program interprets additional +# arguments as recipient addresses. +# +# +# set sendmail_wait=0 +# +# Name: sendmail_wait +# Type: number +# Default: 0 +# +# +# Specifies the number of seconds to wait for the ``$sendmail'' process +# to finish before giving up and putting delivery in the background. +# +# Mutt interprets the value of this variable as follows: +# >0 number of seconds to wait for sendmail to finish before continuing +# 0 wait forever for sendmail to finish +# <0 always put sendmail in the background without waiting +# +# +# Note that if you specify a value other than 0, the output of the child +# process will be put in a temporary file. If there is some error, you +# will be informed as to where to find the output. +# +# +# set shell="" +# +# Name: shell +# Type: path +# Default: "" +# +# +# Command to use when spawning a subshell. By default, the user's login +# shell from /etc/passwd is used. +# +# +# set save_unsubscribed=no +# +# Name: save_unsubscribed +# Type: boolean +# Default: no +# +# +# When set, info about unsubscribed newsgroups will be saved into +# ``newsrc'' file and into cache. +# +# +# set show_new_news=yes +# +# Name: show_new_news +# Type: boolean +# Default: yes +# +# +# If set, newsserver will be asked for new newsgroups on entering +# the browser. Otherwise, it will be done only once for a newsserver. +# Also controls whether or not number of new articles of subscribed +# newsgroups will be then checked. +# +# +# set show_only_unread=no +# +# Name: show_only_unread +# Type: boolean +# Default: no +# +# +# If set, only subscribed newsgroups that contain unread articles +# will be displayed in browser. +# +# +# set sig_dashes=yes +# +# Name: sig_dashes +# Type: boolean +# Default: yes +# +# +# If set, a line containing ``-- '' will be inserted before your +# ``$signature''. It is strongly recommended that you not unset +# this variable unless your ``signature'' contains just your name. The +# reason for this is because many software packages use ``-- \n'' to +# detect your signature. For example, Mutt has the ability to highlight +# the signature in a different color in the builtin pager. +# +# +# set sig_on_top=no +# +# Name: sig_on_top +# Type: boolean +# Default: no +# +# +# If set, the signature will be included before any quoted or forwarded +# text. It is strongly recommended that you do not set this variable +# unless you really know what you are doing, and are prepared to take +# some heat from netiquette guardians. +# +# +# set signature="~/.signature" +# +# Name: signature +# Type: path +# Default: "~/.signature" +# +# +# Specifies the filename of your signature, which is appended to all +# outgoing messages. If the filename ends with a pipe (``|''), it is +# assumed that filename is a shell command and input should be read from +# its stdout. +# +# +# set simple_search="~f %s | ~s %s" +# +# Name: simple_search +# Type: string +# Default: "~f %s | ~s %s" +# +# +# Specifies how Mutt should expand a simple search into a real search +# pattern. A simple search is one that does not contain any of the ~ +# operators. See ``patterns'' for more information on search patterns. +# +# For example, if you simply type joe at a search or limit prompt, Mutt +# will automatically expand it to the value specified by this variable. +# For the default value it would be: +# +# ~f joe | ~s joe +# +# +# set smart_wrap=yes +# +# Name: smart_wrap +# Type: boolean +# Default: yes +# +# +# Controls the display of lines longer than the screen width in the +# internal pager. If set, long lines are wrapped at a word boundary. If +# unset, lines are simply wrapped at the screen edge. Also see the +# ``$markers'' variable. +# +# +# set smileys="(>From )|(:[-^]?[][)(><}{|/DP])" +# +# Name: smileys +# Type: regular expression +# Default: "(>From )|(:[-^]?[][)(><}{|/DP])" +# +# +# The pager uses this variable to catch some common false +# positives of ``$quote_regexp'', most notably smileys in the beginning +# of a line +# +# +# set sleep_time=1 +# +# Name: sleep_time +# Type: number +# Default: 1 +# +# +# Specifies time, in seconds, to pause while displaying certain informational +# messages, while moving from folder to folder and after expunging +# messages from the current folder. The default is to pause one second, so +# a value of zero for this option suppresses the pause. +# +# +# set sort=date +# +# Name: sort +# Type: sort order +# Default: date +# +# +# Specifies how to sort messages in the index menu. Valid values +# are: +# +# date or date-sent +# date-received +# from +# mailbox-order (unsorted) +# score +# size +# subject +# threads +# to +# +# You may optionally use the reverse- prefix to specify reverse sorting +# order (example: set sort=reverse-date-sent). +# +# +# set sort_alias=alias +# +# Name: sort_alias +# Type: sort order +# Default: alias +# +# +# Specifies how the entries in the `alias' menu are sorted. The +# following are legal values: +# +# address (sort alphabetically by email address) +# alias (sort alphabetically by alias name) +# unsorted (leave in order specified in .muttrc) +# +# +# set sort_aux=date +# +# Name: sort_aux +# Type: sort order +# Default: date +# +# +# When sorting by threads, this variable controls how threads are sorted +# in relation to other threads, and how the branches of the thread trees +# are sorted. This can be set to any value that ``$sort'' can, except +# threads (in that case, mutt will just use date-sent). You can also +# specify the last- prefix in addition to the reverse- prefix, but last- +# must come after reverse-. The last- prefix causes messages to be +# sorted against its siblings by which has the last descendant, using +# the rest of sort_aux as an ordering. For instance, set sort_aux=last- +# date-received would mean that if a new message is received in a +# thread, that thread becomes the last one displayed (or the first, if +# you have set sort=reverse-threads.) Note: For reversed ``$sort'' +# order $sort_aux is reversed again (which is not the right thing to do, +# but kept to not break any existing configuration setting). +# +# +# set sort_browser=subject +# +# Name: sort_browser +# Type: sort order +# Default: subject +# +# +# Specifies how to sort entries in the file browser. By default, the +# entries are sorted alphabetically. Valid values: +# +# alpha (alphabetically) +# date +# size +# unsorted +# +# You may optionally use the reverse- prefix to specify reverse sorting +# order (example: set sort_browser=reverse-date). +# +# +# set sort_re=yes +# +# Name: sort_re +# Type: boolean +# Default: yes +# +# +# This variable is only useful when sorting by threads with +# ``$strict_threads'' unset. In that case, it changes the heuristic +# mutt uses to thread messages by subject. With sort_re set, mutt will +# only attach a message as the child of another message by subject if +# the subject of the child message starts with a substring matching the +# setting of ``$reply_regexp''. With sort_re unset, mutt will attach +# the message whether or not this is the case, as long as the +# non-``$reply_regexp'' parts of both messages are identical. +# +# +# set spoolfile="" +# +# Name: spoolfile +# Type: path +# Default: "" +# +# +# If your spool mailbox is in a non-default place where Mutt cannot find +# it, you can specify its location with this variable. Mutt will +# automatically set this variable to the value of the environment +# variable $MAIL if it is not set. +# +# +# set status_chars="-*%A" +# +# Name: status_chars +# Type: string +# Default: "-*%A" +# +# +# Controls the characters used by the "%r" indicator in +# ``$status_format''. The first character is used when the mailbox is +# unchanged. The second is used when the mailbox has been changed, and +# it needs to be resynchronized. The third is used if the mailbox is in +# read-only mode, or if the mailbox will not be written when exiting +# that mailbox (You can toggle whether to write changes to a mailbox +# with the toggle-write operation, bound by default to "%"). The fourth +# is used to indicate that the current folder has been opened in attach- +# message mode (Certain operations like composing a new mail, replying, +# forwarding, etc. are not permitted in this mode). +# +# +# set status_format="-%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)---" +# +# Name: status_format +# Type: string +# Default: "-%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)---" +# +# +# Controls the format of the status line displayed in the index +# menu. This string is similar to ``$index_format'', but has its own +# set of printf()-like sequences: +# +# %b number of mailboxes with new mail * +# %d number of deleted messages * +# %f the full pathname of the current mailbox +# %F number of flagged messages * +# %h local hostname +# %l size (in bytes) of the current mailbox * +# %L size (in bytes) of the messages shown +# (i.e., which match the current limit) * +# %m the number of messages in the mailbox * +# %M the number of messages shown (i.e., which match the current limit) * +# %n number of new messages in the mailbox * +# %o number of old unread messages +# %p number of postponed messages * +# %P percentage of the way through the index +# %r modified/read-only/won't-write/attach-message indicator, +# according to $status_chars +# %s current sorting mode ($sort) +# %S current aux sorting method ($sort_aux) +# %t number of tagged messages * +# %u number of unread messages * +# %v Mutt version string +# %V currently active limit pattern, if any * +# %>X right justify the rest of the string and pad with "X" +# %|X pad to the end of the line with "X" +# +# +# * = can be optionally printed if nonzero +# +# Some of the above sequences can be used to optionally print a string +# if their value is nonzero. For example, you may only want to see the +# number of flagged messages if such messages exist, since zero is not +# particularly meaningful. To optionally print a string based upon one +# of the above sequences, the following construct is used +# +# %??? +# +# where sequence_char is a character from the table above, and +# optional_string is the string you would like printed if +# status_char is nonzero. optional_string may contain +# other sequence as well as normal text, but you may not nest +# optional strings. +# +# Here is an example illustrating how to optionally print the number of +# new messages in a mailbox: +# %?n?%n new messages.? +# +# Additionally you can switch between two strings, the first one, if a +# value is zero, the second one, if the value is nonzero, by using the +# following construct: +# %??&? +# +# You can additionally force the result of any printf-like sequence to +# be lowercase by prefixing the sequence character with an underscore +# (_) sign. For example, if you want to display the local hostname in +# lowercase, you would use: +# %_h +# +# If you prefix the sequence character with a colon (:) character, mutt +# will replace any dots in the expansion by underscores. This might be helpful +# with IMAP folders that don't like dots in folder names. +# +# +# set status_on_top=no +# +# Name: status_on_top +# Type: boolean +# Default: no +# +# +# Setting this variable causes the ``status bar'' to be displayed on +# the first line of the screen rather than near the bottom. +# +# +# set strict_threads=no +# +# Name: strict_threads +# Type: boolean +# Default: no +# +# +# If set, threading will only make use of the ``In-Reply-To'' and +# ``References'' fields when you ``$sort'' by message threads. By +# default, messages with the same subject are grouped together in +# ``pseudo threads.'' This may not always be desirable, such as in a +# personal mailbox where you might have several unrelated messages with +# the subject ``hi'' which will get grouped together. +# +# +# set suspend=yes +# +# Name: suspend +# Type: boolean +# Default: yes +# +# +# When unset, mutt won't stop when the user presses the terminal's +# susp key, usually ``control-Z''. This is useful if you run mutt +# inside an xterm using a command like xterm -e mutt. +# +# +# set text_flowed=no +# +# Name: text_flowed +# Type: boolean +# Default: no +# +# +# When set, mutt will generate text/plain; format=flowed attachments. +# This format is easier to handle for some mailing software, and generally +# just looks like ordinary text. To actually make use of this format's +# features, you'll need support in your editor. +# +# Note that $indent_string is ignored when this option is set. +# +# +# set thread_received=no +# +# Name: thread_received +# Type: boolean +# Default: no +# +# +# When set, mutt uses the date received rather than the date sent +# to thread messages by subject. +# +# +# set thorough_search=no +# +# Name: thorough_search +# Type: boolean +# Default: no +# +# +# Affects the ~b and ~h search operations described in +# section ``patterns'' above. If set, the headers and attachments of +# messages to be searched are decoded before searching. If unset, +# messages are searched as they appear in the folder. +# +# +# set tilde=no +# +# Name: tilde +# Type: boolean +# Default: no +# +# +# When set, the internal-pager will pad blank lines to the bottom of the +# screen with a tilde (~). +# +# +# set timeout=600 +# +# Name: timeout +# Type: number +# Default: 600 +# +# +# This variable controls the number of seconds Mutt will wait +# for a key to be pressed in the main menu before timing out and +# checking for new mail. A value of zero or less will cause Mutt +# to never time out. +# +# +# set tmpdir="" +# +# Name: tmpdir +# Type: path +# Default: "" +# +# +# This variable allows you to specify where Mutt will place its +# temporary files needed for displaying and composing messages. If +# this variable is not set, the environment variable TMPDIR is +# used. If TMPDIR is not set then "/tmp" is used. +# +# +# set to_chars=" +TCFL" +# +# Name: to_chars +# Type: string +# Default: " +TCFL" +# +# +# Controls the character used to indicate mail addressed to you. The +# first character is the one used when the mail is NOT addressed to your +# address (default: space). The second is used when you are the only +# recipient of the message (default: +). The third is when your address +# appears in the TO header field, but you are not the only recipient of +# the message (default: T). The fourth character is used when your +# address is specified in the CC header field, but you are not the only +# recipient. The fifth character is used to indicate mail that was sent +# by you. The sixth character is used to indicate when a mail +# was sent to a mailing-list you subscribe to (default: L). +# +# +# set tunnel="" +# +# Name: tunnel +# Type: string +# Default: "" +# +# +# Setting this variable will cause mutt to open a pipe to a command +# instead of a raw socket. You may be able to use this to set up +# preauthenticated connections to your IMAP/POP3 server. Example: +# +# tunnel="ssh -q mailhost.net /usr/local/libexec/imapd" +# +# NOTE: For this example to work you must be able to log in to the remote +# machine without having to enter a password. +# +# +# set use_8bitmime=no +# +# Name: use_8bitmime +# Type: boolean +# Default: no +# +# +# Warning: do not set this variable unless you are using a version +# of sendmail which supports the -B8BITMIME flag (such as sendmail +# 8.8.x) or you may not be able to send mail. +# +# When set, Mutt will invoke ``$sendmail'' with the -B8BITMIME +# flag when sending 8-bit messages to enable ESMTP negotiation. +# +# +# set use_domain=yes +# +# Name: use_domain +# Type: boolean +# Default: yes +# +# +# When set, Mutt will qualify all local addresses (ones without the +# @host portion) with the value of ``$hostname''. If unset, no +# addresses will be qualified. +# +# +# set use_from=yes +# +# Name: use_from +# Type: boolean +# Default: yes +# +# +# When set, Mutt will generate the `From:' header field when +# sending messages. If unset, no `From:' header field will be +# generated unless the user explicitly sets one using the ``my_hdr'' +# command. +# +# +# set use_ipv6=yes +# +# Name: use_ipv6 +# Type: boolean +# Default: yes +# +# +# When set, Mutt will look for IPv6 addresses of hosts it tries to +# contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. +# Normally, the default should work. +# +# +# set use_ipv6=yes +# +# Name: use_ipv6 +# Type: boolean +# Default: yes +# +# +# When set, Mutt will look for IPv6 addresses of hosts it tries to +# contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. +# Normally, the default should work. +# +# +# set user_agent=yes +# +# Name: user_agent +# Type: boolean +# Default: yes +# +# +# When set, mutt will add a "User-Agent" header to outgoing +# messages, indicating which version of mutt was used for composing +# them. +# +# +# set visual="" +# +# Name: visual +# Type: path +# Default: "" +# +# +# Specifies the visual editor to invoke when the ~v command is +# given in the builtin editor. +# +# +# set wait_key=yes +# +# Name: wait_key +# Type: boolean +# Default: yes +# +# +# Controls whether Mutt will ask you to press a key after shell- +# escape, pipe-message, pipe-entry, print-message, +# and print-entry commands. +# +# It is also used when viewing attachments with ``auto_view'', provided +# that the corresponding mailcap entry has a needsterminal flag, +# and the external program is interactive. +# +# When set, Mutt will always ask for a key. When unset, Mutt will wait +# for a key only if the external command returned a non-zero status. +# +# +# set weed=yes +# +# Name: weed +# Type: boolean +# Default: yes +# +# +# When set, mutt will weed headers when when displaying, forwarding, +# printing, or replying to messages. +# +# +# set wrap_search=yes +# +# Name: wrap_search +# Type: boolean +# Default: yes +# +# +# Controls whether searches wrap around the end of the mailbox. +# +# When set, searches will wrap around the first (or last) message. When +# unset, searches will not wrap. +# +# +# set wrapmargin=0 +# +# Name: wrapmargin +# Type: number +# Default: 0 +# +# +# Controls the size of the margin remaining at the right side of +# the terminal when mutt's pager does smart wrapping. +# +# +# set write_inc=10 +# +# Name: write_inc +# Type: number +# Default: 10 +# +# +# When writing a mailbox, a message will be printed every +# write_inc messages to indicate progress. If set to 0, only a +# single message will be displayed before writing a mailbox. +# +# Also see the ``$read_inc'' variable. +# +# +# set write_bcc=yes +# +# Name: write_bcc +# Type: boolean +# Default: yes +# +# +# Controls whether mutt writes out the Bcc header when preparing +# messages to be sent. Exim users may wish to use this. +# +# +# set x_comment_to=no +# +# Name: x_comment_to +# Type: boolean +# Default: no +# +# +# If set, Mutt will add ``X-Comment-To:'' field (that contains full +# name of original article author) to article that followuped to newsgroup. +# +# diff --git a/Muttrc.head.in b/Muttrc.head.in new file mode 100644 index 0000000..081daf5 --- /dev/null +++ b/Muttrc.head.in @@ -0,0 +1,34 @@ +# +# System configuration file for Mutt +# + +# default list of header fields to weed when displaying +# +ignore "from " received content- mime-version status x-status message-id +ignore sender references return-path lines + +# imitate the old search-body function +macro index \eb '/~b ' 'search in message bodies' + +# simulate the old url menu +macro index \cb |urlview\n 'call urlview to extract URLs out of a message' +macro pager \cb |urlview\n 'call urlview to extract URLs out of a message' + +# Show documentation when pressing F1 +macro generic "!less @docdir@/manual.txt\n" "Show Mutt documentation" +macro index "!less @docdir@/manual.txt\n" "Show Mutt documentation" +macro pager "!less @docdir@/manual.txt\n" "Show Mutt documentation" + +# If Mutt is unable to determine your site's domain name correctly, you can +# set the default here. +# +# set hostname=cs.hmc.edu + +# If your sendmail supports the -B8BITMIME flag, enable the following +# +# set use_8bitmime + +## +## More settings +## + diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..b463914 --- /dev/null +++ b/NEWS @@ -0,0 +1,159 @@ + Visible changes since Mutt 1.2 + ============================== + + +Folder formats and folder access +-------------------------------- + +- Better mh support: Mutt now supports .mh_sequences files. + Currently, the "unseen", "flagged", and "replied" sequences are + used to store mutt flags (the names are configurable using the + $mh_seq_unseen, $mh_seq_flagged, and $mh_seq_replied configuration + variables). As a side effect, messages in MH folders are no longer + rewritten upon status changes. + +- The "trashed" flag is supported for maildir folders. See + $maildir_trash. + +- POP folder support. You can now access a POP mailbox just like an + IMAP folder (with obvious restrictions due to the protocol). + +- URL syntax for remote folders. You can pass things like + pop://account@host and imap://account@host/folder as arguments for + the -f command line flag. + +- STARTTLS support. If $ssl_starttls is set (the default), mutt + will attempt to use STARTTLS on servers advertising that + capability. + +- $preconnect. If set, a shell command to be executed if mutt fails + to establish a connection to the server. This is useful for + setting up secure connections; see the muttrc(5) for details. + +- $tunnel. Use a pipe to a command instead of a raw socket. See + muttrc(5) for details. (Basically, it's another way for setting + up secure connections.) + +- More new IMAP/POP-related variables (see muttrc(5) for details): + $connect_timeout, $imap_authenticators, $imap_delim_chars, + $imap_peek, $pop_authenticators, $pop_auth_try_all, + $pop_checkinterval, $pop_delete, $pop_reconnect, $use_ipv6. + +- The following IMAP/POP-related variables are gone: + $imap_checkinterval, $imap_cramkey, $pop_port. + +- There's a new imap-fetch-mail function, which forces a check for + new messages on an IMAP server. + +- The new-mailbox function was renamed to create-mailbox, and is + bound to C instead of n by default. + +Character set support +--------------------- + +- Mutt now uses the iconv interface for character set conversions. + This means that you need either a very modern libc, or Bruno + Haible's libiconv, which is available from + . + +- With sufficiently recent versions of ncurses and slang, mutt works + properly in utf-8 locales. + +- On sufficiently modern systems, the $charset variable's value is + automatically derived from the locale you use. (Note, however, + that manually setting it to a value which is compatible with your + locale doesn't do any harm.) + +- $send_charset is a colon-separated list of character sets now, + defaulting to us-ascii:iso-8859-1:utf-8. + +- charset-hook defines aliases for character sets encountered in + messages (say, someone tags his messages with latin15 when he + means iso-8859-15), iconv-hook defines local names for character + sets (for systems which don't know about MIME names; see + contrib/iconv for sample configuration snippets). + +- The change-charset function is gone. Use edit-type (C-e on the + compose menu) instead. + +- The recode-attachment function is gone. + +Other changes +------------- + +- There's a new variable $compose_format for the compose screen's + status line. You can now include the message's approximate + on-the-wire size. + +- The attachment menu knows about collapsing now: Using + collapse-parts (bound to "v" by default), you can collapse and + uncollapse parts of the attachment tree. This function is also + available from the pager when invoked from the attachment tree. + + Normally, the recvattach menu will start uncollapsed. However, + with the new $digest_collapse option (which is set by default), + the individual messages contained in digests will be displayed + collapsed. (That is, there's one line per message.) + +- Using $display_filter, you can specify a command which filters + messages before they are displayed. + +- Using message-hook, you can execute mutt configuration commands + before a message is displayed (or formatted before replying). + +- If you don't want that mutt moves flagged messages to your mbox, + set $keep_flagged. + +- Setting the $pgp_ignore_subkeys variable will cause mutt to ignore + OpenPGP. This option is set by default, and it's suggested that + you leave it. + +- $pgp_sign_micalg has gone. Mutt now automatically determines what + MIC algorithm was used for a particular signature. + +- If $pgp_good_sign is set, then a PGP signature is only considered + verified if the output from $pgp_verify_command matches this + regular expression. It's suggested that you set this variable to + the typical text message output by PGP (or GPG, or whatever) + produces when it encounters a good signature. + +- There's a new function, check-traditional-pgp, which is bound to + esc-P by default. It'll check whether a text parts of a message + contain PGP encrypted or signed material, and possibly adjust + content types. + +- $print_split. If this option is set, $print_command run + separately for each message you print. Useful with enscript(1)'s + mail printing mode. + +- $sig_on_top. Include the signature before any quoted or forwarded + text. WARNING: use of this option may provoke flames. + +- $text_flowed. When set, mutt will generate text/plain attachments + with the format=flowed parameter. In order to properly produce + such messages, you'll need an appropriate editor mode. Note that + the $indent_string option is ignored with flowed text. + +- $to_chars has grown: Mailing list messages are now tagged with an + L in the index. If you want the old behaviour back, add this to + your .muttrc: set to_chars=" +TCF " + +- New emacs-like functions in the line editor: backward-word (M-b), + capitalize-word (M-c), downcase-word (M-l), upcase-word (M-u), + forward-word (M-f), kill-eow (M-d), tranpose-chars (unbound). + + transpose-chars is unbound by default because external query + occupies C-t. Suggested alternative binding: + + bind editor "\e\t" complete-query + bind editor "\Ct" transpose-chars + +- mailto URL support: You can pass a mailto URL to mutt on the + command line. + +- If $duplicate_threads is set, mutt's new threading code will + thread messages with the same message-id together. Duplication + will be indicated with an equals sign in the thread diagram. + + You can also limit your view to the duplicates (or exclude + duplicates from view) by using the "~=" pattern. diff --git a/OPS b/OPS new file mode 100644 index 0000000..193daee --- /dev/null +++ b/OPS @@ -0,0 +1,196 @@ +OP_NULL "null operation" +OP_END_COND "end of conditional execution (noop)" +OP_ATTACH_VIEW_MAILCAP "force viewing of attachment using mailcap" +OP_ATTACH_VIEW_TEXT "view attachment as text" +OP_ATTACH_COLLAPSE "Toggle display of subparts" +OP_BOTTOM_PAGE "move to the bottom of the page" +OP_BOUNCE_MESSAGE "remail a message to another user" +OP_BROWSER_NEW_FILE "select a new file in this directory" +OP_BROWSER_VIEW_FILE "view file" +OP_BROWSER_TELL "display the currently selected file's name" +OP_BROWSER_SUBSCRIBE "subscribe to current (IMAP/NNTP only)" +OP_BROWSER_UNSUBSCRIBE "unsubscribe to current (IMAP/NNTP only)" +OP_BROWSER_TOGGLE_LSUB "toggle view all/subscribed mailboxes (IMAP only)" +OP_BUFFY_LIST "list mailboxes with new mail" +OP_CATCHUP "mark all articles in newsgroup as read" +OP_CHANGE_DIRECTORY "change directories" +OP_CHECK_NEW "check mailboxes for new mail" +OP_COMPOSE_ATTACH_FILE "attach a file(s) to this message" +OP_COMPOSE_ATTACH_MESSAGE "attach message(s) to this message" +OP_COMPOSE_ATTACH_NEWS_MESSAGE "attach newsmessage(s) to this message" +OP_COMPOSE_EDIT_BCC "edit the BCC list" +OP_COMPOSE_EDIT_CC "edit the CC list" +OP_COMPOSE_EDIT_DESCRIPTION "edit attachment description" +OP_COMPOSE_EDIT_ENCODING "edit attachment transfer-encoding" +OP_COMPOSE_EDIT_FCC "enter a file to save a copy of this message in" +OP_COMPOSE_EDIT_FILE "edit the file to be attached" +OP_COMPOSE_EDIT_FROM "edit the from field" +OP_COMPOSE_EDIT_HEADERS "edit the message with headers" +OP_COMPOSE_EDIT_MESSAGE "edit the message" +OP_COMPOSE_EDIT_MIME "edit attachment using mailcap entry" +OP_COMPOSE_EDIT_NEWSGROUPS "edit the newsgroups list" +OP_COMPOSE_EDIT_REPLY_TO "edit the Reply-To field" +OP_COMPOSE_EDIT_FOLLOWUP_TO "edit the Followup-To field" +OP_COMPOSE_EDIT_X_COMMENT_TO "edit the X-Comment-To field" +OP_COMPOSE_EDIT_SUBJECT "edit the subject of this message" +OP_COMPOSE_EDIT_TO "edit the TO list" +OP_CREATE_MAILBOX "create a new mailbox (IMAP only)" +OP_EDIT_TYPE "edit attachment content type" +OP_COMPOSE_GET_ATTACHMENT "get a temporary copy of an attachment" +OP_COMPOSE_ISPELL "run ispell on the message" +OP_COMPOSE_NEW_MIME "compose new attachment using mailcap entry" +OP_COMPOSE_TOGGLE_RECODE "toggle recoding of this attachment" +OP_COMPOSE_POSTPONE_MESSAGE "save this message to send later" +OP_COMPOSE_RENAME_FILE "rename/move an attached file" +OP_COMPOSE_SEND_MESSAGE "send the message" +OP_COMPOSE_TOGGLE_DISPOSITION "toggle disposition between inline/attachment" +OP_COMPOSE_TOGGLE_UNLINK "toggle whether to delete file after sending it" +OP_COMPOSE_UPDATE_ENCODING "update an attachment's encoding info" +OP_COMPOSE_WRITE_MESSAGE "write the message to a folder" +OP_COPY_MESSAGE "copy a message to a file/mailbox" +OP_CREATE_ALIAS "create an alias from a message sender" +OP_CURRENT_BOTTOM "move entry to bottom of screen" +OP_CURRENT_MIDDLE "move entry to middle of screen" +OP_CURRENT_TOP "move entry to top of screen" +OP_DECODE_COPY "make decoded (text/plain) copy" +OP_DECODE_SAVE "make decoded copy (text/plain) and delete" +OP_DELETE "delete the current entry" +OP_DELETE_MAILBOX "delete the current mailbox (IMAP only)" +OP_DELETE_SUBTHREAD "delete all messages in subthread" +OP_DELETE_THREAD "delete all messages in thread" +OP_DISPLAY_ADDRESS "display full address of sender" +OP_DISPLAY_HEADERS "display message and toggle header weeding" +OP_DISPLAY_MESSAGE "display a message" +OP_EDIT_MESSAGE "edit the raw message" +OP_EDITOR_BACKSPACE "delete the char in front of the cursor" +OP_EDITOR_BACKWARD_CHAR "move the cursor one character to the left" +OP_EDITOR_BACKWARD_WORD "move the cursor to the beginning of the word" +OP_EDITOR_BOL "jump to the beginning of the line" +OP_EDITOR_BUFFY_CYCLE "cycle among incoming mailboxes" +OP_EDITOR_COMPLETE "complete filename or alias" +OP_EDITOR_COMPLETE_QUERY "complete address with query" +OP_EDITOR_DELETE_CHAR "delete the char under the cursor" +OP_EDITOR_EOL "jump to the end of the line" +OP_EDITOR_FORWARD_CHAR "move the cursor one character to the right" +OP_EDITOR_FORWARD_WORD "move the cursor to the end of the word" +OP_EDITOR_HISTORY_DOWN "scroll down through the history list" +OP_EDITOR_HISTORY_UP "scroll up through the history list" +OP_EDITOR_KILL_EOL "delete chars from cursor to end of line" +OP_EDITOR_KILL_EOW "delete chars from the cursor to the end of the word" +OP_EDITOR_KILL_LINE "delete all chars on the line" +OP_EDITOR_KILL_WORD "delete the word in front of the cursor" +OP_EDITOR_QUOTE_CHAR "quote the next typed key" +OP_EDITOR_TRANSPOSE_CHARS "transpose character under cursor with previous" +OP_EDITOR_CAPITALIZE_WORD "capitalize the word" +OP_EDITOR_DOWNCASE_WORD "convert the word to lower case" +OP_EDITOR_UPCASE_WORD "convert the word to upper case" +OP_ENTER_COMMAND "enter a muttrc command" +OP_ENTER_MASK "enter a file mask" +OP_EXIT "exit this menu" +OP_FILTER "filter attachment through a shell command" +OP_FIRST_ENTRY "move to the first entry" +OP_FLAG_MESSAGE "toggle a message's 'important' flag" +OP_FOLLOWUP "followup to newsgroup" +OP_FORWARD_TO_GROUP "forward to newsgroup" +OP_FORWARD_MESSAGE "forward a message with comments" +OP_GENERIC_SELECT_ENTRY "select the current entry" +OP_GET_CHILDREN "get all children of the current message" +OP_GET_MESSAGE "get message with Message-Id" +OP_GET_PARENT "get parent of the current message" +OP_GROUP_REPLY "reply to all recipients" +OP_HALF_DOWN "scroll down 1/2 page" +OP_HALF_UP "scroll up 1/2 page" +OP_HELP "this screen" +OP_JUMP "jump to an index number" +OP_LAST_ENTRY "move to the last entry" +OP_LIST_REPLY "reply to specified mailing list" +OP_LOAD_ACTIVE "load active file from NNTP server" +OP_MACRO "execute a macro" +OP_MAIL "compose a new mail message" +OP_MAIN_CHANGE_FOLDER "open a different folder" +OP_MAIN_CHANGE_FOLDER_READONLY "open a different folder in read only mode" +OP_MAIN_CHANGE_GROUP "open a different newsgroup" +OP_MAIN_CHANGE_GROUP_READONLY "open a different newsgroup in read only mode" +OP_MAIN_CLEAR_FLAG "clear a status flag from a message" +OP_MAIN_DELETE_PATTERN "delete messages matching a pattern" +OP_RECONSTRUCT_THREAD "reconstruct thread containing current message" +OP_MAIN_IMAP_FETCH "force retrieval of mail from IMAP server" +OP_MAIN_FETCH_MAIL "retrieve mail from POP server" +OP_MAIN_FIRST_MESSAGE "move to the first message" +OP_MAIN_LAST_MESSAGE "move to the last message" +OP_MAIN_LIMIT "show only messages matching a pattern" +OP_MAIN_NEXT_NEW "jump to the next new message" +OP_MAIN_NEXT_NEW_THEN_UNREAD "jump to the next new or unread message" +OP_MAIN_NEXT_SUBTHREAD "jump to the next subthread" +OP_MAIN_NEXT_THREAD "jump to the next thread" +OP_MAIN_NEXT_UNDELETED "move to the next undeleted message" +OP_MAIN_NEXT_UNREAD "jump to the next unread message" +OP_MAIN_PARENT_MESSAGE "jump to parent message in thread" +OP_MAIN_PREV_THREAD "jump to previous thread" +OP_MAIN_PREV_SUBTHREAD "jump to previous subthread" +OP_MAIN_PREV_UNDELETED "move to the previous undeleted message" +OP_MAIN_PREV_NEW "jump to the previous new message" +OP_MAIN_PREV_NEW_THEN_UNREAD "jump to the previous new or unread message" +OP_MAIN_PREV_UNREAD "jump to the previous unread message" +OP_MAIN_READ_THREAD "mark the current thread as read" +OP_MAIN_READ_SUBTHREAD "mark the current subthread as read" +OP_MAIN_SET_FLAG "set a status flag on a message" +OP_MAIN_SYNC_FOLDER "save changes to mailbox" +OP_MAIN_TAG_PATTERN "tag messages matching a pattern" +OP_MAIN_UNDELETE_PATTERN "undelete messages matching a pattern" +OP_MAIN_UNTAG_PATTERN "untag messages matching a pattern" +OP_MIDDLE_PAGE "move to the middle of the page" +OP_NEXT_ENTRY "move to the next entry" +OP_NEXT_LINE "scroll down one line" +OP_NEXT_PAGE "move to the next page" +OP_PAGER_BOTTOM "jump to the bottom of the message" +OP_PAGER_HIDE_QUOTED "toggle display of quoted text" +OP_PAGER_SKIP_QUOTED "skip beyond quoted text" +OP_PAGER_TOP "jump to the top of the message" +OP_PIPE "pipe message/attachment to a shell command" +OP_POST "post message to newsgroup" +OP_PREV_ENTRY "move to the previous entry" +OP_PREV_LINE "scroll up one line" +OP_PREV_PAGE "move to the previous page" +OP_PRINT "print the current entry" +OP_PURGE_MESSAGE "really delete the current entry, bypassing the trash folder" +OP_QUERY "query external program for addresses" +OP_QUERY_APPEND "append new query results to current results" +OP_QUIT "save changes to mailbox and quit" +OP_RECALL_MESSAGE "recall a postponed message" +OP_REDRAW "clear and redraw the screen" +OP_REFORMAT_WINCH "{internal}" +OP_REPLY "reply to a message" +OP_RESEND "use the current message as a template for a new one" +OP_SAVE "save message/attachment to a file" +OP_SEARCH "search for a regular expression" +OP_SEARCH_REVERSE "search backwards for a regular expression" +OP_SEARCH_NEXT "search for next match" +OP_SEARCH_OPPOSITE "search for next match in opposite direction" +OP_SEARCH_TOGGLE "toggle search pattern coloring" +OP_SHELL_ESCAPE "invoke a command in a subshell" +OP_SORT "sort messages" +OP_SORT_REVERSE "sort messages in reverse order" +OP_SUBSCRIBE_PATTERN "subscribe to newsgroups matching a pattern" +OP_TAG "tag the current entry" +OP_TAG_PREFIX "apply next function to tagged messages" +OP_TAG_PREFIX_COND "apply next function ONLY to tagged messages" +OP_TAG_SUBTHREAD "tag the current subthread" +OP_TAG_THREAD "tag the current thread" +OP_TOGGLE_NEW "toggle a message's 'new' flag" +OP_TOGGLE_READ "toggle view of read messages" +OP_TOGGLE_WRITE "toggle whether the mailbox will be rewritten" +OP_TOGGLE_MAILBOXES "toggle whether to browse mailboxes or all files" +OP_TOP_PAGE "move to the top of the page" +OP_UNCATCHUP "mark all articles in newsgroup as unread" +OP_UNDELETE "undelete the current entry" +OP_UNDELETE_THREAD "undelete all messages in thread" +OP_UNDELETE_SUBTHREAD "undelete all messages in subthread" +OP_UNSUBSCRIBE_PATTERN "unsubscribe from newsgroups matching a pattern" +OP_VERSION "show the Mutt version number and date" +OP_VIEW_ATTACH "view attachment using mailcap entry if necessary" +OP_VIEW_ATTACHMENTS "show MIME attachments" +OP_WHAT_KEY "display the keycode for a key press" +OP_MAIN_SHOW_LIMIT "show currently active limit pattern" +OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" +OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" diff --git a/OPS.CRYPT b/OPS.CRYPT new file mode 100644 index 0000000..0f5664c --- /dev/null +++ b/OPS.CRYPT @@ -0,0 +1,4 @@ +OP_DECRYPT_SAVE "make decrypted copy and delete" +OP_DECRYPT_COPY "make decrypted copy" +OP_FORGET_PASSPHRASE "wipe passphrase(s) from memory" +OP_EXTRACT_KEYS "extract supported public keys" diff --git a/OPS.MIX b/OPS.MIX new file mode 100644 index 0000000..4988333 --- /dev/null +++ b/OPS.MIX @@ -0,0 +1,7 @@ +OP_MIX_USE "Accept the chain constructed" +OP_MIX_APPEND "Append a remailer to the chain" +OP_MIX_INSERT "Insert a remailer into the chain" +OP_MIX_DELETE "Delete a remailer from the chain" +OP_MIX_CHAIN_PREV "Select the previous element of the chain" +OP_MIX_CHAIN_NEXT "Select the next element of the chain" +OP_COMPOSE_MIX "send the message through a mixmaster remailer chain" diff --git a/OPS.PGP b/OPS.PGP new file mode 100644 index 0000000..8ab7eb1 --- /dev/null +++ b/OPS.PGP @@ -0,0 +1,6 @@ +OP_COMPOSE_ATTACH_KEY "attach a PGP public key" +OP_COMPOSE_PGP_MENU "show PGP options" +OP_MAIL_KEY "mail a PGP public key" +OP_VERIFY_KEY "verify a PGP public key" +OP_VIEW_ID "view the key's user id" +OP_CHECK_TRADITIONAL "check for classic pgp" diff --git a/OPS.SMIME b/OPS.SMIME new file mode 100644 index 0000000..1161ff9 --- /dev/null +++ b/OPS.SMIME @@ -0,0 +1 @@ +OP_COMPOSE_SMIME_MENU "show S/MIME options" diff --git a/PATCHES b/PATCHES new file mode 100644 index 0000000..022db6a --- /dev/null +++ b/PATCHES @@ -0,0 +1,7 @@ +patch-1.5.4.aw.listreply.1 +patch-1.5.4.cd.source_multiple.2 +vvv.initials +patch-1.5.5.1.cd.purge_message.3.4 +patch-1.5.5.1.cd.trash_folder.3.4 +vvv.quote +vvv.nntp diff --git a/README b/README new file mode 100644 index 0000000..b6cf136 --- /dev/null +++ b/README @@ -0,0 +1,38 @@ +README for mutt-1.5 +=================== + +If you got the mutt source code from the public CVS repository (CVS +root: :pserver:anonymous@cvs.mutt.org:/home/roessler/cvs, password +anonymous), please read doc/devel-notes.txt to make sure that you +have a complete development environment. + +NOTE: The CVS repository now resides on a machine which is different +from ftp.mutt.org. Anonymous CVS from ftp.mutt.org does not work +any more. + +Installation instructions are detailed in ``INSTALL''. + +The user manual is in doc/manual.txt. A list of major changes since +the last public version can be found under NEWS. + +PGP users should read doc/PGP-Notes.txt. + +Those who upgrade from a version of mutt prior to 1.1 should read +the README.UPGRADE file. + +Before you start hacking on mutt, read doc/devel-notes.txt. Before +applying patches to mutt, read doc/applying-patches.txt. Please, +read these files, as they will save you from asking FAQs. + +For more information, see the Mutt home page: + + http://www.mutt.org/ + +The primary distribution points for Mutt is: + + ftp://ftp.mutt.org/pub/mutt + +A list of mirror sites can be found under +. + +$Id: README,v 3.1 2002/11/12 08:41:18 roessler Exp $ diff --git a/README.SECURITY b/README.SECURITY new file mode 100644 index 0000000..359f44a --- /dev/null +++ b/README.SECURITY @@ -0,0 +1,60 @@ +$Id: README.SECURITY,v 3.0 2002/01/24 12:10:47 roessler Exp $ + +Recently, there have been reports on security problems induced by +the interpretation of shell meta-characters embedded in MIME +parameters. These reports were referring to Pine, but the problem +also applied when using mutt. + +More precisely, a mailcap entry like this one would lead to +problems: + +> text/test-mailcap-bug; cat %s; copiousoutput; \ +> test=test "`echo %{charset} | tr '[A-Z]' '[a-z]'`" != iso-8859-1 + +When expanded with a charset parameter of ``touch${IFS}ME``, a file +named "ME" would be created in the current directory. + +While we don't completely agree that this is an actual MUA problem +(see below), we have implemented a couple of fixes for this: + +- Backticks are handled specially when preparing % expandos for + mailcap entries. This fix will keep the current problem from + occuring, but we are sure there are other possible mailcap entries + where this doesn't help. + +- We have added a configuration variable named $mailcap_sanitize, + which is set by default. If set, mutt will restrict possible + characters in mailcap % expandos to a well-defined set of safe + characters. This is the safe setting, but we are not sure it + doesn't break some more advanced MIME stuff. + +>>> DON'T UNSET THIS OPTION UNLESS YOU KNOW WHAT YOU ARE DOING. + + +Anyway, this problem is not necessarily a problem which should be +solved inside the MUA, as it's difficult (maybe impossible) to solve +there. Additionally, there is more than one program which parses +mailcap. So writing secure mailcap statements is generally a good +idea. We encourage you to do this. + +The most basic rule is this one: + +>>> KEEP THE %-EXPANDOS AWAY FROM SHELL QUOTING. + +Don't quote them with single or double quotes. Mutt does this for +you, the right way, as should any other program which interprets +mailcap. Don't put them into backtick expansions - as you have seen +above, this is a recipe for disaster. Be highly careful with eval +statements, and avoid them if possible at all. + +If you have to use the %-expandos' values in context where you need +quoting or backtick expansions, put that value into a shell variable +and reference the shell variable where necessary (possibly with the +proper quoting put around it, like in "$charset"). + +For example, a safe version of the mailcap statement above could +look like this: + +> text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \ +> && test "`echo \"$charset\" | tr '[A-Z]' '[a-z]'`" != iso-8859-1 + diff --git a/README.SSL b/README.SSL new file mode 100644 index 0000000..579e13f --- /dev/null +++ b/README.SSL @@ -0,0 +1,110 @@ +IMAP/SSL in mutt +================ + +Compilation +----------- +If you want to have SSL support in mutt, you need to install OpenSSL +(http://www.openssl.org) libraries and headers before compiling. +OpenSSL versions 0.9.3 through 0.9.6a have been tested. + +For SSL support to be enabled, you need to run the ``configure'' +script with ``--enable-imap --with-ssl[=PFX]'' parameters. If the +OpenSSL headers and libraries are not in the default system search +paths (usually /usr/include and /usr/lib) you can use the optional PFX +argument to define the root directory of your installation. The +libraries are then expected to be found in PFX/lib and headers in +PFX/include/openssl. + + +Usage +----- +IMAP/SSL folders can be accessed just like normal IMAP folders, but you +will also have to add '/ssl' before the closing curly brace. Or you can +use IMAP url notation, where the methods is called imaps. + +For example: + mailboxes {localhost/ssl}inbox + mailboxes {localhost:994/ssl}inbox +or + mailboxes imaps://localhost/inbox + mailboxes imaps://localhost:994/inbox + +If you get errors about lack of entropy, it means that Mutt was unable +to find a source of random data to initialize SSL library with. Should +this happen, you need to generate the data yourself and save it in a +file pointed by $entropy_file or $RANDFILE (environment) variables or +in ~/.rnd. + +One way to generate random data would be to run a command which +generates unpredictable output, for example 'ps aluxww' in Linux, and +calculating the MD5-sum from the output and saving it in a file. + +** Note: The contents of the file pointed by $RANDFILE environment +** variable (or ~/.rnd if unset) will be overwritten every time Mutt +** is run so don't put anything you can't afford to lose in that file. + +The files Mutt will try to use to initialize SSL library with are files +pointed by $entropy_file and $RANDFILE (or ~/.rnd if unset.) If your +OpenSSL is version 0.9.5 or later, the previous files can also be EGD +sockets (see http://www.lothar.com/tech/crypto/ for more information +about Entropy Gathering Daemon) and in addition sockets in the following +places are tried: socket pointed by $EGDSOCKET environment variable, +~/.entropy and /tmp/entropy. + +All the files and sockets mentioned above must be owned by the user and +have permissions of 600. + + +Certificates +------------ +Each time a server is contacted, its certificate is checked against +known valid certificates. When an unknown certificate is encountered, +you are asked to verify it. If you reject the certificate, the +connection will be terminated immediately. If you accept the +certificate, the connection will be established. Accepted certificates +can also be saved so that further connections to the server are +automatically accepted. + +If your organization has several equivalent IMAP-servers, each of them +should have a unique certificate which is signed with a common +certificate. If you want to use all of those servers, you don't need to +save each server certificate on the first connect. Instead, you can get +the signer certificate and save it instead. That way, mutt will +automatically accept all certificates signed with the saved certificate. + +System-wide certificates are by default considered trusted when checking +certificates by signer. This allows system administrators to setup +trusted certificates for all users. How to install certificates +system-wide, depends on the OpenSSL installation. Use of system-wide +certificates can be disabled by unsetting $ssl_usesystemcerts variable. + +Certificates will be saved in the file specified by $certificate_file +variable. It is empty as default, so if you don't want to verify +certificates each time you connect to a server, you have set this +variable to some reasonable value. + +For example: + set certificate_file=~/.mutt/certificates + + +Troubleshooting +--------------- +If after doing the above, you are unable to successfully connect, it +is likely that your IMAP server does not support one of the SSL protocols. +There exist three different protocols, TLSv1, SSLv2, and SSLv3. To check +each of these, you use the following: + openssl s_client -host -port -verify -debug -no_tls1 + openssl s_client -host -port -verify -debug -no_ssl2 + openssl s_client -host -port -verify -debug -no_ssl3 + +You can also combine the options until you get a successfull connect. Once +you know which options do not work, you can set the variables for non-working +protocols to know. The variables for the protocols are ssl_use_tlsv1, +ssl_use_sslv2, and ssl_use_sslv3. + +-- +Tommi Komulainen +Tommi.Komulainen@iki.fi + +Updated by Jeremy Katz +katzj@linuxpower.org diff --git a/TODO b/TODO new file mode 100644 index 0000000..0d74bdd --- /dev/null +++ b/TODO @@ -0,0 +1,68 @@ +Problems are listed in approximate order of priority. + +- character set support: We should have a global cache of + character to file name mappings. + +- When displaying MIME headers, rfc 2047 decoding is applied (which + should not happen), and rfc 2231 decoding is not applied (which + should happen). + +- Help formatting could be revamped a bit. + +- re-add support for .mh_sequences files + +- In the "attachment" menu, assume this: + + 1 [text/plain, 7bit, 1.1K] + 2 [message/rfc822, 7bit, 6.1K] A test message + 3 [text/plain, 7bit, 0.1K] |-> + 4 [message/rfc822, base64, 2.5K] |-> + 5 [message/rfc822, base64, 2.7K] `-> + + (please note the "message/rfc822" attachments encoded as + Base64; that's illegal, but Sun's Mailtool sends that + kind of messages); then go to, say, attachment "4", + delete it, and go to the main menu; you won't be able to + quit the mailbox (ok, 'x' works, but 'q' doesn't). + + The problem here lies in the fact that mutt uses mailbox + handling functions to access message/rfc822 type + attachments. We'd need to perform an additional + decoding step before using these functions to fix this + bug. + + Please note that mutt's just assuming RFC-compliant mail + here. Fixing this stuff may become a PITA. + + + + +- BODY struct should probably have a pointer to its + corresponding HEADER struct. this is needed for + mh/maildir mailboxes so the correct pathname can be + found. Or perhaps all we need is a .hdr member of the + STATE struct so that all of the MIME handlers can look + up the corresponding HEADERs if need be? + +- option to not include attachments in replies + +- handle message/external-body in some fashion + +- handle message/partial reconstruction + +- make patterns generic (I have patches for this -tlr), and + introduce generic menu limiting, menu pattern searching, and the + like. + + Note: This still requires some thought, since we'd have to store + per-entry data in the menu structure. As an alternative, we could + extend the tag method to do something to more general flags. The + latter approach would make the implementation of propper + tag-prefix behaviour more simple: Functions should only be applied + when a message is tagged and visible. Additionally, we must not + access a menu's max field directly any more: Adding an entry to a + menu will require re-allocating and possibly updating the v2r + array. How do we handle "in-the-middle additions" properly? Do + they happen at all? + +$Id: TODO,v 3.0 2002/01/24 12:10:47 roessler Exp $ diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..eac1e0a --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.5.6 diff --git a/_regex.h b/_regex.h new file mode 100644 index 0000000..8e2bd8f --- /dev/null +++ b/_regex.h @@ -0,0 +1,535 @@ +/* Definitions for data structures and routines for the regular + expression library, version 0.12. + Copyright (C) 1985,89,90,91,92,93,95,96,97 Free Software Foundation, Inc. + + This file is part of the GNU C Library. Its master source is NOT part of + the C library, however. The master source lives in /gd/gnu/lib. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef __REGEXP_LIBRARY_H__ +#define __REGEXP_LIBRARY_H__ + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* POSIX says that must be included (by the caller) before + . */ + +#if !defined (_POSIX_C_SOURCE) && !defined (_POSIX_SOURCE) && defined (VMS) +/* VMS doesn't have `size_t' in , even though POSIX says it + should be there. */ +#include +#endif + +/* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ +typedef long int s_reg_t; +typedef unsigned long int active_reg_t; + +/* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +typedef unsigned long int reg_syntax_t; + +/* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + +/* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ +#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + +/* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ +#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + +/* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ +#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + +/* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ +#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + +/* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ +#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + +/* If this bit is set, then . matches newline. + If not set, then it doesn't. */ +#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + +/* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ +#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + +/* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ +#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + +/* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ +#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + +/* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ +#define RE_LIMITED_OPS (RE_INTERVALS << 1) + +/* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ +#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + +/* If this bit is set, then `{...}' defines an interval, and \{ and \} + are literals. + If not set, then `\{...\}' defines an interval. */ +#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + +/* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ +#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + +/* If this bit is set, then \ matches . + If not set, then \ is a back-reference. */ +#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + +/* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ +#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + +/* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ +#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + +/* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ +#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + +/* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ +#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + +/* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ +#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + +/* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ +#define RE_DEBUG (RE_NO_GNU_OPS << 1) + +/* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ +extern reg_syntax_t re_syntax_options; + +/* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ +/* [[[begin syntaxes]]] */ +#define RE_SYNTAX_EMACS 0 + +#define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +#define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ + & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS)) + +#define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS) + +#define RE_SYNTAX_GREP \ + (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ + | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ + | RE_NEWLINE_ALT) + +#define RE_SYNTAX_EGREP \ + (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ + | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ + | RE_NO_BK_VBAR) + +#define RE_SYNTAX_POSIX_EGREP \ + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) + +/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ +#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + +#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + +/* Syntax bits common to both basic and extended POSIX regex syntax. */ +#define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + +#define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) + +/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ +#define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + +#define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_UNMATCHED_RIGHT_PAREN_ORD) + +/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS + replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */ +#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) +/* [[[end syntaxes]]] */ + +/* Maximum number of duplicates an interval can allow. Some systems + (erroneously) define this in other header files, but we want our + value, so remove any previous define. */ +#ifdef RE_DUP_MAX +#undef RE_DUP_MAX +#endif +/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ +#define RE_DUP_MAX (0x7fff) + + +/* POSIX `cflags' bits (i.e., information for `regcomp'). */ + +/* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ +#define REG_EXTENDED 1 + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define REG_ICASE (REG_EXTENDED << 1) + +/* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ +#define REG_NEWLINE (REG_ICASE << 1) + +/* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ +#define REG_NOSUB (REG_NEWLINE << 1) + + +/* POSIX `eflags' bits (i.e., information for regexec). */ + +/* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ +#define REG_NOTBOL 1 + +/* Like REG_NOTBOL, except for the end-of-line. */ +#define REG_NOTEOL (1 << 1) + + +/* If any error codes are removed, changed, or added, update the + `re_error_msg' table in regex.c. */ +typedef enum +{ + REG_NOERROR = 0, /* Success. */ + REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + REG_BADPAT, /* Invalid pattern. */ + REG_ECOLLATE, /* Not implemented. */ + REG_ECTYPE, /* Invalid character class name. */ + REG_EESCAPE, /* Trailing backslash. */ + REG_ESUBREG, /* Invalid back reference. */ + REG_EBRACK, /* Unmatched left bracket. */ + REG_EPAREN, /* Parenthesis imbalance. */ + REG_EBRACE, /* Unmatched \{. */ + REG_BADBR, /* Invalid contents of \{\}. */ + REG_ERANGE, /* Invalid range end. */ + REG_ESPACE, /* Ran out of memory. */ + REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + REG_EEND, /* Premature end. */ + REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ + REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields `buffer', `allocated', `fastmap', + `translate', and `no_sub' can be set. After the pattern has been + compiled, the `re_nsub' field is available. All other fields are + private to the regex routines. */ + +#ifndef RE_TRANSLATE_TYPE +#define RE_TRANSLATE_TYPE char * +#endif + +struct re_pattern_buffer +{ +/* [[[begin pattern_buffer]]] */ + /* Space that holds the compiled pattern. It is declared as + `unsigned char *' because its elements are + sometimes used as array indexes. */ + unsigned char *buffer; + + /* Number of bytes to which `buffer' points. */ + unsigned long int allocated; + + /* Number of bytes actually used in `buffer'. */ + unsigned long int used; + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t syntax; + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses + the fastmap, if there is one, to skip over impossible + starting points for matches. */ + char *fastmap; + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation + is applied to a pattern when it is compiled and to a string + when it is matched. */ + RE_TRANSLATE_TYPE translate; + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in `re_search_2', to see + whether or not we should use the fastmap, so we don't set + this absolutely perfectly; see `re_compile_fastmap' (the + `duplicate' case). */ + unsigned can_be_null : 1; + + /* If REGS_UNALLOCATED, allocate space in the `regs' structure + for `max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ +#define REGS_UNALLOCATED 0 +#define REGS_REALLOCATE 1 +#define REGS_FIXED 2 + unsigned regs_allocated : 2; + + /* Set to zero when `regex_compile' compiles a pattern; set to one + by `re_compile_fastmap' if it updates the fastmap. */ + unsigned fastmap_accurate : 1; + + /* If set, `re_match_2' does not return information about + subexpressions. */ + unsigned no_sub : 1; + + /* If set, a beginning-of-line anchor doesn't match at the + beginning of the string. */ + unsigned not_bol : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned not_eol : 1; + + /* If true, an anchor at a newline matches. */ + unsigned newline_anchor : 1; + +/* [[[end pattern_buffer]]] */ +}; + +typedef struct re_pattern_buffer regex_t; + +/* Type for byte offsets within the string. POSIX mandates this. */ +typedef int regoff_t; + + +/* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ +struct re_registers +{ + unsigned num_regs; + regoff_t *start; + regoff_t *end; +}; + + +/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + `re_match_2' returns information about at least this many registers + the first time a `regs' structure is passed. */ +#ifndef RE_NREGS +#define RE_NREGS 30 +#endif + + +/* POSIX specification for registers. Aside from the different names than + `re_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ +typedef struct +{ + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ +} regmatch_t; + +/* Declarations for routines. */ + +/* To avoid duplicating every routine declaration -- once with a + prototype (if we are ANSI), and once without (if we aren't) -- we + use the following macro to declare argument types. This + unfortunately clutters up the declarations a bit, but I think it's + worth it. */ + +#if __STDC__ + +#define _RE_ARGS(args) args + +#else /* not __STDC__ */ + +#define _RE_ARGS(args) () + +#endif /* not __STDC__ */ + +/* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the `re_syntax_options' variable. */ +extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); + +/* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global `re_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. */ +extern const char *re_compile_pattern + _RE_ARGS ((const char *pattern, size_t length, + struct re_pattern_buffer *buffer)); + + +/* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ +extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); + + +/* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ +extern int re_search + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, + int length, int start, int range, struct re_registers *regs)); + + +/* Like `re_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ +extern int re_search_2 + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, int range, struct re_registers *regs, int stop)); + + +/* Like `re_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ +extern int re_match + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, + int length, int start, struct re_registers *regs)); + + +/* Relates to `re_match' as `re_search_2' relates to `re_search'. */ +extern int re_match_2 + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, struct re_registers *regs, int stop)); + + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least `NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ +extern void re_set_registers + _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, + unsigned num_regs, regoff_t *starts, regoff_t *ends)); + +#ifdef _REGEX_RE_COMP +#ifndef _CRAY +/* 4.2 bsd compatibility. */ +extern char *re_comp _RE_ARGS ((const char *)); +extern int re_exec _RE_ARGS ((const char *)); +#endif +#endif + +/* POSIX compatibility. */ +extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags)); +extern int regexec + _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags)); +extern size_t regerror + _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf, + size_t errbuf_size)); +extern void regfree _RE_ARGS ((regex_t *preg)); + + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* not __REGEXP_LIBRARY_H__ */ + +/* +Local variables: +make-backup-files: t +version-control: t +trim-versions-without-asking: nil +End: +*/ diff --git a/acconfig.h b/acconfig.h new file mode 100644 index 0000000..38f7fc5 --- /dev/null +++ b/acconfig.h @@ -0,0 +1,41 @@ + +/* Compiling with newsreading support with NNTP */ +#undef USE_NNTP + +/* program to use for shell commands */ +#define EXECSHELL "/bin/sh" + +/* Define to `int' if doesn't define. */ +#undef sig_atomic_t + +@BOTTOM@ +/* Define if you have start_color, as a function or macro. */ +#undef HAVE_START_COLOR + +/* Define if you have typeahead, as a function or macro. */ +#undef HAVE_TYPEAHEAD + +/* Define if you have bkgdset, as a function or macro. */ +#undef HAVE_BKGDSET + +/* Define if you have curs_set, as a function or macro. */ +#undef HAVE_CURS_SET + +/* Define if you have meta, as a function or macro. */ +#undef HAVE_META + +/* Define if you have use_default_colors, as a function or macro. */ +#undef HAVE_USE_DEFAULT_COLORS + +/* Define if you have resizeterm, as a function or macro. */ +#undef HAVE_RESIZETERM + +/* Some systems declare sig_atomic_t as volatile, some others -- no. + * This define will have value `sig_atomic_t' or `volatile sig_atomic_t' + * accordingly. */ +#undef SIG_ATOMIC_VOLATILE_T + +/* Define as 1 if iconv() only converts exactly and we should treat + * all return values other than (size_t)(-1) as equivalent. */ +#undef ICONV_NONTRANS + diff --git a/account.c b/account.c new file mode 100644 index 0000000..2ea4bc5 --- /dev/null +++ b/account.c @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2000-3 Brendan Cully + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* remote host account manipulation (POP/IMAP) */ + +#include "mutt.h" +#include "account.h" +#include "url.h" + +/* mutt_account_match: compare account info (host/port/user) */ +int mutt_account_match (const ACCOUNT* a1, const ACCOUNT* a2) +{ + const char* user = NONULL (Username); + + if (a1->type != a2->type) + return 0; + if (ascii_strcasecmp (a1->host, a2->host)) + return 0; + if (a1->port != a2->port) + return 0; + +#ifdef USE_IMAP + if (a1->type == M_ACCT_TYPE_IMAP && ImapUser) + user = ImapUser; +#endif + +#ifdef USE_POP + if (a1->type == M_ACCT_TYPE_POP && PopUser) + user = PopUser; +#endif + +#ifdef USE_NNTP + if (a1->type == M_ACCT_TYPE_NNTP && NntpUser) + user = NntpUser; +#endif + + if (a1->flags & a2->flags & M_ACCT_USER) + return (!strcmp (a1->user, a2->user)); + if (a1->flags & M_ACCT_USER) + return (!strcmp (a1->user, user)); + if (a2->flags & M_ACCT_USER) + return (!strcmp (a2->user, user)); + + return 1; +} + +/* mutt_account_fromurl: fill account with information from url. */ +int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url) +{ + /* must be present */ + if (url->host) + strfcpy (account->host, url->host, sizeof (account->host)); + else + return -1; + + if (url->user) + { + strfcpy (account->user, url->user, sizeof (account->user)); + account->flags |= M_ACCT_USER; + } + if (url->pass) + { + strfcpy (account->pass, url->pass, sizeof (account->pass)); + account->flags |= M_ACCT_PASS; + } + if (url->port) + { + account->port = url->port; + account->flags |= M_ACCT_PORT; + } + + return 0; +} + +/* mutt_account_tourl: fill URL with info from account. The URL information + * is a set of pointers into account - don't free or edit account until + * you've finished with url (make a copy of account if you need it for + * a while). */ +void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url) +{ + url->scheme = U_UNKNOWN; + url->user = NULL; + url->pass = NULL; + url->port = 0; + +#ifdef USE_IMAP + if (account->type == M_ACCT_TYPE_IMAP) + { + if (account->flags & M_ACCT_SSL) + url->scheme = U_IMAPS; + else + url->scheme = U_IMAP; + } +#endif + +#ifdef USE_POP + if (account->type == M_ACCT_TYPE_POP) + { + if (account->flags & M_ACCT_SSL) + url->scheme = U_POPS; + else + url->scheme = U_POP; + } +#endif + +#ifdef USE_NNTP + if (account->type == M_ACCT_TYPE_NNTP) + { + if (account->flags & M_ACCT_SSL) + url->scheme = U_NNTPS; + else + url->scheme = U_NNTP; + } +#endif + + url->host = account->host; + if (account->flags & M_ACCT_PORT) + url->port = account->port; + if (account->flags & M_ACCT_USER) + url->user = account->user; + if (account->flags & M_ACCT_PASS) + url->pass = account->pass; +} + +/* mutt_account_getuser: retrieve username into ACCOUNT, if neccessary */ +int mutt_account_getuser (ACCOUNT* account) +{ + char prompt[SHORT_STRING]; + + /* already set */ + if (account->flags & M_ACCT_USER) + return 0; +#ifdef USE_IMAP + else if ((account->type == M_ACCT_TYPE_IMAP) && ImapUser) + strfcpy (account->user, ImapUser, sizeof (account->user)); +#endif +#ifdef USE_POP + else if ((account->type == M_ACCT_TYPE_POP) && PopUser) + strfcpy (account->user, PopUser, sizeof (account->user)); +#endif +#ifdef USE_NNTP + else if ((account->type == M_ACCT_TYPE_NNTP) && NntpUser) + strfcpy (account->user, NntpUser, sizeof (account->user)); +#endif + /* prompt (defaults to unix username), copy into account->user */ + else + { + snprintf (prompt, sizeof (prompt), _("Username at %s: "), account->host); + strfcpy (account->user, NONULL (Username), sizeof (account->user)); + if (mutt_get_field (prompt, account->user, sizeof (account->user), 0)) + return -1; + } + + account->flags |= M_ACCT_USER; + + return 0; +} + +/* mutt_account_getpass: fetch password into ACCOUNT, if neccessary */ +int mutt_account_getpass (ACCOUNT* account) +{ + char prompt[SHORT_STRING]; + + if (account->flags & M_ACCT_PASS) + return 0; +#ifdef USE_IMAP + else if ((account->type == M_ACCT_TYPE_IMAP) && ImapPass) + strfcpy (account->pass, ImapPass, sizeof (account->pass)); +#endif +#ifdef USE_POP + else if ((account->type == M_ACCT_TYPE_POP) && PopPass) + strfcpy (account->pass, PopPass, sizeof (account->pass)); +#endif +#ifdef USE_NNTP + else if ((account->type == M_ACCT_TYPE_NNTP) && NntpPass) + strfcpy (account->pass, NntpPass, sizeof (account->pass)); +#endif + else + { + snprintf (prompt, sizeof (prompt), _("Password for %s@%s: "), + account->user, account->host); + account->pass[0] = '\0'; + if (mutt_get_password (prompt, account->pass, sizeof (account->pass))) + return -1; + } + + account->flags |= M_ACCT_PASS; + + return 0; +} + +void mutt_account_unsetpass (ACCOUNT* account) +{ + account->flags &= !M_ACCT_PASS; +} diff --git a/account.h b/account.h new file mode 100644 index 0000000..a2aa59e --- /dev/null +++ b/account.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2000-3 Brendan Cully + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* remote host account manipulation (POP/IMAP) */ + +#ifndef _MUTT_ACCOUNT_H_ +#define _MUTT_ACCOUNT_H_ 1 + +#include "url.h" + +/* account types */ +enum +{ + M_ACCT_TYPE_NONE = 0, + M_ACCT_TYPE_IMAP, + M_ACCT_TYPE_NNTP, + M_ACCT_TYPE_POP +}; + +/* account flags */ +#define M_ACCT_PORT (1<<0) +#define M_ACCT_USER (1<<1) +#define M_ACCT_PASS (1<<2) +#define M_ACCT_SSL (1<<3) + +typedef struct +{ + char user[64]; + char pass[64]; + char host[128]; + unsigned short port; + unsigned char type; + unsigned char flags; +} ACCOUNT; + +int mutt_account_match (const ACCOUNT* a1, const ACCOUNT* m2); +int mutt_account_fromurl (ACCOUNT* account, ciss_url_t* url); +void mutt_account_tourl (ACCOUNT* account, ciss_url_t* url); +int mutt_account_getuser (ACCOUNT* account); +int mutt_account_getpass (ACCOUNT* account); +void mutt_account_unsetpass (ACCOUNT* account); + +#endif /* _MUTT_ACCOUNT_H_ */ diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..0068dc6 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1989 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4-p4 + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# lib-prefix.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +# lib-link.m4 serial 4 (gettext-0.12) +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +# lib-ld.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN(AM_CONFIG_HEADER, +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) + + +# serial 1 + +AC_DEFUN(AM_C_PROTOTYPES, +[AC_REQUIRE([AM_PROG_CC_STDC]) +AC_REQUIRE([AC_PROG_CPP]) +AC_MSG_CHECKING([for function prototypes]) +if test "$am_cv_prog_cc_stdc" != no; then + AC_MSG_RESULT(yes) + AC_DEFINE(PROTOTYPES,1,[Define if compiler has function prototypes]) + U= ANSI2KNR= +else + AC_MSG_RESULT(no) + U=_ ANSI2KNR=./ansi2knr + # Ensure some checks needed by ansi2knr itself. + AC_HEADER_STDC + AC_CHECK_HEADERS(string.h) +fi +AC_SUBST(U)dnl +AC_SUBST(ANSI2KNR)dnl +]) + + +# serial 1 + +# @defmac AC_PROG_CC_STDC +# @maindex PROG_CC_STDC +# @ovindex CC +# If the C compiler in not in ANSI C mode by default, try to add an option +# to output variable @code{CC} to make it so. This macro tries various +# options that select ANSI C on some system or another. It considers the +# compiler to be in ANSI C mode if it handles function prototypes correctly. +# +# If you use this macro, you should check after calling it whether the C +# compiler has been set to accept ANSI C; if not, the shell variable +# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source +# code in ANSI C, you can make an un-ANSIfied copy of it by using the +# program @code{ansi2knr}, which comes with Ghostscript. +# @end defmac + +AC_DEFUN(AM_PROG_CC_STDC, +[AC_REQUIRE([AC_PROG_CC]) +AC_BEFORE([$0], [AC_C_INLINE]) +AC_BEFORE([$0], [AC_C_CONST]) +dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require +dnl a magic option to avoid problems with ANSI preprocessor commands +dnl like #elif. +dnl FIXME: can't do this because then AC_AIX won't work due to a +dnl circular dependency. +dnl AC_BEFORE([$0], [AC_PROG_CPP]) +AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) +AC_CACHE_VAL(am_cv_prog_cc_stdc, +[am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + AC_TRY_COMPILE( +[#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +], [ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; +], +[am_cv_prog_cc_stdc="$ac_arg"; break]) +done +CC="$ac_save_CC" +]) +if test -z "$am_cv_prog_cc_stdc"; then + AC_MSG_RESULT([none needed]) +else + AC_MSG_RESULT($am_cv_prog_cc_stdc) +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac +]) + +dnl --------------------------------------------------------------------------- +dnl Look for the curses libraries. Older curses implementations may require +dnl termcap/termlib to be linked as well. +AC_DEFUN([CF_CURSES_LIBS],[ +AC_CHECK_FUNC(initscr,,[ +case $host_os in #(vi +freebsd*) #(vi + AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"]) + ;; +hpux10.*|hpux11.*) + AC_CHECK_LIB(cur_colr,initscr,[ + LIBS="-lcur_colr $LIBS" + CFLAGS="-I/usr/include/curses_colr $CFLAGS" + ac_cv_func_initscr=yes + ],[ + AC_CHECK_LIB(Hcurses,initscr,[ + # HP's header uses __HP_CURSES, but user claims _HP_CURSES. + LIBS="-lHcurses $LIBS" + CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS" + ac_cv_func_initscr=yes + ])]) + ;; +linux*) # Suse Linux does not follow /usr/lib convention + LIBS="$LIBS -L/lib" + ;; +esac + +if test ".$With5lib" != ".no" ; then +if test -d /usr/5lib ; then + # SunOS 3.x or 4.x + CPPFLAGS="$CPPFLAGS -I/usr/5include" + LIBS="$LIBS -L/usr/5lib" +fi +fi + +if test ".$ac_cv_func_initscr" != .yes ; then + cf_save_LIBS="$LIBS" + cf_term_lib="" + cf_curs_lib="" + + # Check for library containing tgoto. Do this before curses library + # because it may be needed to link the test-case for initscr. + AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[ + for cf_term_lib in termcap termlib unknown + do + AC_CHECK_LIB($cf_term_lib,tgoto,[break]) + done + ]) + + # Check for library containing initscr + test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" + for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown + do + AC_CHECK_LIB($cf_curs_lib,initscr,[break]) + done + test $cf_curs_lib = unknown && AC_ERROR(no curses library found) + + LIBS="-l$cf_curs_lib $cf_save_LIBS" + if test "$cf_term_lib" = unknown ; then + AC_MSG_CHECKING(if we can link with $cf_curs_lib library) + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + [cf_result=yes], + [cf_result=no]) + AC_MSG_RESULT($cf_result) + test $cf_result = no && AC_ERROR(Cannot link curses library) + elif test "$cf_term_lib" != predefined ; then + AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries) + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr(); tgoto((char *)0, 0, 0);], + [cf_result=no], + [ + LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + [cf_result=yes], + [cf_result=error]) + ]) + AC_MSG_RESULT($cf_result) + fi +fi + +])]) + +dnl --------------------------------------------------------------------------- +dnl Check if a function is declared by including a set of include files. +dnl Invoke the corresponding actions according to whether it is found or not. +dnl +dnl Gcc (unlike other compilers) will only warn about the miscast assignment +dnl in the first test, but most compilers will oblige with an error in the +dnl second test. +dnl +dnl CF_CHECK_FUNCDECL(INCLUDES, FUNCTION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +AC_DEFUN([CF_CHECK_FUNCDECL], +[ +AC_MSG_CHECKING([for $2 declaration]) +AC_CACHE_VAL(ac_cv_func_decl_$2, +[AC_TRY_COMPILE([$1], +[#ifndef ${ac_func} +extern int ${ac_func}(); +#endif],[ +AC_TRY_COMPILE([$1], +[#ifndef ${ac_func} +int (*p)() = ${ac_func}; +#endif],[ +eval "ac_cv_func_decl_$2=yes"],[ +eval "ac_cv_func_decl_$2=no"])],[ +eval "ac_cv_func_decl_$2=yes"])]) +if eval "test \"`echo '$ac_cv_func_'decl_$2`\" = yes"; then + AC_MSG_RESULT(yes) + ifelse([$3], , :, [$3]) +else + AC_MSG_RESULT(no) +ifelse([$4], , , [$4 +])dnl +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl Check if functions are declared by including a set of include files. +dnl and define DECL_XXX if not. +dnl +dnl CF_CHECK_FUNCDECLS(INCLUDES, FUNCTION... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +AC_DEFUN([CF_CHECK_FUNCDECLS], +[for ac_func in $2 +do +CF_CHECK_FUNCDECL([$1], $ac_func, +[ + CF_UPPER(ac_tr_func,HAVE_$ac_func) + AC_DEFINE_UNQUOTED($ac_tr_func) $3], +[$4])dnl +dnl [$3], +dnl [ +dnl CF_UPPER(ac_tr_func,DECL_$ac_func) +dnl AC_DEFINE_UNQUOTED($ac_tr_func) $4])dnl +done +])dnl +dnl --------------------------------------------------------------------------- +dnl Make an uppercase version of a variable +dnl $1=uppercase($2) +AC_DEFUN([CF_UPPER], +[ +changequote(,)dnl +$1=`echo $2 | tr '[a-z]' '[A-Z]'` +changequote([,])dnl +])dnl +dnl --------------------------------------------------------------------------- + +# Define a conditional. + +AC_DEFUN(AM_CONDITIONAL, +[AC_SUBST($1_TRUE) +AC_SUBST($1_FALSE) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi]) + +# gssapi.m4: Find GSSAPI libraries in either Heimdal or MIT implementations +# Brendan Cully 20010529 + +dnl MUTT_AM_PATH_GSSAPI(PREFIX) +dnl Search for a GSSAPI implementation in the standard locations plus PREFIX, +dnl if it is set and not "yes". +dnl Defines GSSAPI_CFLAGS and GSSAPI_LIBS if found. +dnl Defines GSSAPI_IMPL to "Heimdal", "MIT", or "OldMIT", or "none" if not found +AC_DEFUN([MUTT_AM_PATH_GSSAPI], +[ + GSSAPI_PREFIX=[$]$1 + GSSAPI_IMPL="none" + saved_CPPFLAGS="$CPPFLAGS" + saved_LDFLAGS="$LDFLAGS" + saved_LIBS="$LIBS" + dnl First try krb5-config + if test "$GSSAPI_PREFIX" != "yes" + then + krb5_path="$GSSAPI_PREFIX/bin" + else + krb5_path="$PATH" + fi + AC_PATH_PROG(KRB5CFGPATH, krb5-config, none, $krb5_path) + if test "$KRB5CFGPATH" != "none" + then + GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`" + GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`" + case "`$KRB5CFGPATH --version`" in + "Kerberos 5 "*) GSSAPI_IMPL="MIT";; + ?eimdal*) GSSAPI_IMPL="Heimdal";; + *) GSSAPI_IMPL="Unknown";; + esac + else + dnl No krb5-config, run the old code + if test "$GSSAPI_PREFIX" != "yes" + then + GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include" + GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib" + CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" + LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS" + fi + + dnl New MIT kerberos V support + AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [ + GSSAPI_IMPL="MIT", + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" + ],, -lkrb5 -lk5crypto -lcom_err) + + dnl Heimdal kerberos V support + if test "$GSSAPI_IMPL" = "none" + then + AC_CHECK_LIB(gssapi, gss_init_sec_context, [ + GSSAPI_IMPL="Heimdal" + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken" + GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err" + ],, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err) + fi + + dnl Old MIT Kerberos V + dnl Note: older krb5 distributions use -lcrypto instead of + dnl -lk5crypto, which collides with OpenSSL. One way of dealing + dnl with that is to extract all objects from krb5's libcrypto + dnl and from openssl's libcrypto into the same directory, then + dnl to create a new libcrypto from these. + if test "$GSSAPI_IMPL" = "none" + then + AC_CHECK_LIB(gssapi_krb5, g_order_init, [ + GSSAPI_IMPL="OldMIT", + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" + ],, -lkrb5 -lcrypto -lcom_err) + fi + fi + + CPPFLAGS="$saved_CPPFLAGS" + LDFLAGS="$saved_LDFLAGS" + LIBS="$saved_LIBS" +]) + +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995. + +# +# Slightly modified by Thomas Roessler +# Updated to gettext-0.10.38 by Edmund Grimley Evans +# Updated to gettext-0.10.40 by Andrew W. Nosenko +# + +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License or the GNU Library General Public License but which still want +# to provide support for the GNU gettext functionality. +# Please note that the actual code of the GNU gettext library is covered +# by the GNU Library General Public License, and the rest of the GNU +# gettext package package is covered by the GNU General Public License. +# They are *not* in the public domain. + +# serial 10 + +dnl Usage: MUTT_AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]). +dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). Otherwise, a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. +dnl LIBDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([MUTT_AM_WITH_NLS], + [AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls Do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + INTLLIBS= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext Use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + CATOBJEXT=NONE + + dnl Add a version number to the cache macros. + define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc]) + define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl]) + + AC_CHECK_HEADER(libintl.h, + [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include +extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $LIBICONV" + AC_TRY_LINK([#include +extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + dnl If iconv() is in a separate libiconv library, then anyone + dnl linking with libintl{.a,.so} also needs to link with + dnl libiconv. + INTLLIBS="-lintl $LIBICONV" + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + LIBS="$gt_save_LIBS" + + dnl Search for GNU msgfmt in the PATH. + MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext in the PATH. + MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + + CATOBJEXT=.gmo + fi + ]) + + if test "$CATOBJEXT" = "NONE"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + AC_SUBST(MSGFMT) + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found msgfmt program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + AC_OUTPUT_COMMANDS( + [for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + fi + ;; + esac + done]) + + + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(GMOFILES) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLOBJS) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + ]) + +dnl Usage: Just like MUTT_AM_WITH_NLS, which see. +AC_DEFUN([MUTT_AM_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([MUTT_jm_GLIBC21])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + + MUTT_AM_ICONV + MUTT_AM_LANGINFO_CODESET + MUTT_AM_LC_MESSAGES + MUTT_AM_WITH_NLS([$1],[$2],[$3]) + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + +# Search path for a program which passes the given test. +# Ulrich Drepper , 1996. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License or the GNU Library General Public License but which still want +# to provide support for the GNU gettext functionality. +# Please note that the actual code of the GNU gettext library is covered +# by the GNU Library General Public License, and the rest of the GNU +# gettext package package is covered by the GNU General Public License. +# They are *not* in the public domain. + +# serial 2 + +dnl MUTT_AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([MUTT_AM_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) + +#serial AM2 + +dnl From Bruno Haible. + +AC_DEFUN([MUTT_AM_ICONV], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + AC_ARG_WITH([libiconv-prefix], +[ --with-libiconv-prefix=DIR Search for libiconv in DIR/include and DIR/lib], [ + for dir in `echo "$withval" | tr : ' '`; do + if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi + if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi + done + ]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS -liconv" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi + LIBICONV= + if test "$am_cv_lib_iconv" = yes; then + LIBICONV="-liconv" + fi + AC_SUBST(LIBICONV) +]) + +#serial AM1 + +dnl From Bruno Haible. + +AC_DEFUN([MUTT_AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) + +# Check whether LC_MESSAGES is available in . +# Ulrich Drepper , 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License or the GNU Library General Public License but which still want +# to provide support for the GNU gettext functionality. +# Please note that the actual code of the GNU gettext library is covered +# by the GNU Library General Public License, and the rest of the GNU +# gettext package package is covered by the GNU General Public License. +# They are *not* in the public domain. + +# serial 2 + +AC_DEFUN([MUTT_AM_LC_MESSAGES], + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + +#serial 2 + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([MUTT_jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) + +dnl vim:ft=config: + +dnl Search for libesmtp, by Steven Engelhardt +dnl +dnl libesmtp often requires linking against -lpthread or -lc_r (BSD). +dnl This macro attempts to centralize this code. + +AC_DEFUN([MUTT_AM_LIBESMTP], +[ + AC_ARG_WITH( + [libesmtp], + [ --with-libesmtp=DIR Compile in support for libesmtp for the MTA], + [ if test "$with_libesmtp" != "no" + then + mutt_libesmtp_check_path="$PATH" + + if test "$with_libesmtp" != "yes" + then + mutt_libesmtp_check_path="$tmp_path:$withval/bin" + fi + + dnl 1. Find libesmtp-config + AC_PATH_PROG([mutt_libesmtp_config_path], + [libesmtp-config], + [no], + [$mutt_libesmtp_check_path]) + + if test "$mutt_libesmtp_config_path" = "no" + then + AC_MSG_ERROR([libesmtp-config binary not found.]) + fi + + dnl 2. Get CFLAGS and LIBS from libesmtp-config + mutt_libesmtp_cflags=`$mutt_libesmtp_config_path --cflags` + mutt_libesmtp_libs=`$mutt_libesmtp_config_path --libs` + + dnl 3. Verify libesmtp.h can be found with these settings + temp_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + AC_CHECK_HEADER([libesmtp.h], + [], + AC_MSG_ERROR([Could not find libesmtp.h])) + CFLAGS="$temp_CFLAGS" + + dnl 4. Verify the libesmtp library can be linked in + temp_CFLAGS="$CFLAGS" + temp_LIBS="$LIBS" + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + LIBS="$LIBS $mutt_libesmtp_libs" + AC_CHECK_LIB([esmtp], + [smtp_create_session], + [], + AC_MSG_ERROR([Could not find libesmtp])) + CFLAGS="$temp_CFLAGS" + LIBS="$temp_LIBS" + + dnl 5. Export use_libesmtp variable so configure.in can + dnl act accordingly. + use_libesmtp=yes + fi + ] + ) +]) + diff --git a/addrbook.c b/addrbook.c new file mode 100644 index 0000000..08bed17 --- /dev/null +++ b/addrbook.c @@ -0,0 +1,242 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mapping.h" +#include "sort.h" + +#include "mutt_idna.h" + +#include +#include +#include + +#define RSORT(x) (SortAlias & SORT_REVERSE) ? -x : x + +static struct mapping_t AliasHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("Del"), OP_DELETE }, + { N_("Undel"), OP_UNDELETE }, + { N_("Select"), OP_GENERIC_SELECT_ENTRY }, + { N_("Help"), OP_HELP }, + { NULL } +}; + +static const char * +alias_format_str (char *dest, size_t destlen, char op, const char *src, + const char *fmt, const char *ifstring, const char *elsestring, + unsigned long data, format_flag flags) +{ + char tmp[SHORT_STRING], adr[SHORT_STRING]; + ALIAS *alias = (ALIAS *) data; + + switch (op) + { + case 'f': + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, alias->del ? "D" : " "); + break; + case 'a': + mutt_format_s (dest, destlen, fmt, alias->name); + break; + case 'r': + adr[0] = 0; + rfc822_write_address (adr, sizeof (adr), alias->addr, 1); + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, adr); + break; + case 'n': + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, alias->num + 1); + break; + case 't': + dest[0] = alias->tagged ? '*' : ' '; + dest[1] = 0; + break; + } + + return (src); +} + +void alias_entry (char *s, size_t slen, MUTTMENU *m, int num) +{ + mutt_FormatString (s, slen, NONULL (AliasFmt), alias_format_str, (unsigned long) ((ALIAS **) m->data)[num], M_FORMAT_ARROWCURSOR); +} + +int alias_tag (MUTTMENU *menu, int n, int m) +{ + ALIAS *cur = ((ALIAS **) menu->data)[n]; + int ot = cur->tagged; + + cur->tagged = (m >= 0 ? m : !cur->tagged); + + return cur->tagged - ot; +} + +static int alias_SortAlias (const void *a, const void *b) +{ + ALIAS *pa = *(ALIAS **) a; + ALIAS *pb = *(ALIAS **) b; + int r = mutt_strcasecmp (pa->name, pb->name); + + return (RSORT (r)); +} + +static int alias_SortAddress (const void *a, const void *b) +{ + ADDRESS *pa = (*(ALIAS **) a)->addr; + ADDRESS *pb = (*(ALIAS **) b)->addr; + int r; + + if (pa == pb) + r = 0; + else if (pa == NULL) + r = -1; + else if (pb == NULL) + r = 1; + else if (pa->personal) + { + if (pb->personal) + r = mutt_strcasecmp (pa->personal, pb->personal); + else + r = 1; + } + else if (pb->personal) + r = -1; + else + r = ascii_strcasecmp (pa->mailbox, pb->mailbox); + return (RSORT (r)); +} + +void mutt_alias_menu (char *buf, size_t buflen, ALIAS *aliases) +{ + ALIAS *aliasp; + MUTTMENU *menu; + ALIAS **AliasTable = NULL; + int t = -1; + int i, done = 0; + int op; + char helpstr[SHORT_STRING]; + + int omax; + + if (!aliases) + { + mutt_error _("You have no aliases!"); + return; + } + + /* tell whoever called me to redraw the screen when I return */ + set_option (OPTNEEDREDRAW); + + menu = mutt_new_menu (); + menu->make_entry = alias_entry; + menu->tag = alias_tag; + menu->menu = MENU_ALIAS; + menu->title = _("Aliases"); + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_ALIAS, AliasHelp); + +new_aliases: + + omax = menu->max; + + /* count the number of aliases */ + for (aliasp = aliases; aliasp; aliasp = aliasp->next) + { + aliasp->self->del = 0; + aliasp->self->tagged = 0; + menu->max++; + } + + safe_realloc (&AliasTable, menu->max * sizeof (ALIAS *)); + menu->data = AliasTable; + + for (i = omax, aliasp = aliases; aliasp; aliasp = aliasp->next, i++) + { + AliasTable[i] = aliasp->self; + aliases = aliasp; + } + + if ((SortAlias & SORT_MASK) != SORT_ORDER) + { + qsort (AliasTable, i, sizeof (ALIAS *), + (SortAlias & SORT_MASK) == SORT_ADDRESS ? alias_SortAddress : alias_SortAlias); + } + + for (i=0; imax; i++) AliasTable[i]->num = i; + + while (!done) + { + if (aliases->next) + { + menu->redraw |= REDRAW_FULL; + aliases = aliases->next; + goto new_aliases; + } + + switch ((op = mutt_menuLoop (menu))) + { + case OP_DELETE: + case OP_UNDELETE: + if (menu->tagprefix) + { + for (i = 0; i < menu->max; i++) + if (AliasTable[i]->tagged) + AliasTable[i]->del = (op == OP_DELETE) ? 1 : 0; + menu->redraw |= REDRAW_INDEX; + } + else + { + AliasTable[menu->current]->self->del = (op == OP_DELETE) ? 1 : 0; + menu->redraw |= REDRAW_CURRENT; + if (option (OPTRESOLVE) && menu->current < menu->max - 1) + { + menu->current++; + menu->redraw |= REDRAW_INDEX; + } + } + break; + case OP_GENERIC_SELECT_ENTRY: + t = menu->current; + case OP_EXIT: + done = 1; + break; + } + } + + for (i = 0; i < menu->max; i++) + { + if (AliasTable[i]->tagged) + { + mutt_addrlist_to_local (AliasTable[i]->addr); + rfc822_write_address (buf, buflen, AliasTable[i]->addr, 0); + t = -1; + } + } + + if(t != -1) + { + mutt_addrlist_to_local (AliasTable[t]->addr); + rfc822_write_address (buf, buflen, AliasTable[t]->addr, 0); + } + + mutt_menuDestroy (&menu); + FREE (&AliasTable); + +} diff --git a/alias.c b/alias.c new file mode 100644 index 0000000..508e24b --- /dev/null +++ b/alias.c @@ -0,0 +1,577 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_regex.h" +#include "mutt_curses.h" +#include "mutt_idna.h" + +#include +#include + +ADDRESS *mutt_lookup_alias (const char *s) +{ + ALIAS *t = Aliases; + + for (; t; t = t->next) + if (!mutt_strcasecmp (s, t->name)) + return (t->addr); + return (NULL); /* no such alias */ +} + +static ADDRESS *mutt_expand_aliases_r (ADDRESS *a, LIST **expn) +{ + ADDRESS *head = NULL, *last = NULL, *t, *w; + LIST *u; + char i; + const char *fqdn; + + while (a) + { + if (!a->group && !a->personal && a->mailbox && strchr (a->mailbox, '@') == NULL) + { + t = mutt_lookup_alias (a->mailbox); + + if (t) + { + i = 0; + for (u = *expn; u; u = u->next) + { + if (mutt_strcmp (a->mailbox, u->data) == 0) /* alias already found */ + { + dprint (1, (debugfile, "mutt_expand_aliases_r(): loop in alias found for '%s'\n", a->mailbox)); + i = 1; + break; + } + } + + if (!i) + { + u = safe_malloc (sizeof (LIST)); + u->data = safe_strdup (a->mailbox); + u->next = *expn; + *expn = u; + w = rfc822_cpy_adr (t); + w = mutt_expand_aliases_r (w, expn); + if (head) + last->next = w; + else + head = last = w; + while (last && last->next) + last = last->next; + } + t = a; + a = a->next; + t->next = NULL; + rfc822_free_address (&t); + continue; + } + else + { + struct passwd *pw = getpwnam (a->mailbox); + + if (pw) + { + char namebuf[STRING]; + + mutt_gecos_name (namebuf, sizeof (namebuf), pw); + mutt_str_replace (&a->personal, namebuf); + +#ifdef EXACT_ADDRESS + FREE (&a->val); +#endif + } + } + } + + if (head) + { + last->next = a; + last = last->next; + } + else + head = last = a; + a = a->next; + last->next = NULL; + } + + if (option (OPTUSEDOMAIN) && (fqdn = mutt_fqdn(1))) + { + /* now qualify all local addresses */ + rfc822_qualify (head, fqdn); + } + + return (head); +} + +ADDRESS *mutt_expand_aliases (ADDRESS *a) +{ + ADDRESS *t; + LIST *expn = NULL; /* previously expanded aliases to avoid loops */ + + t = mutt_expand_aliases_r (a, &expn); + mutt_free_list (&expn); + return (mutt_remove_duplicates (t)); +} + +void mutt_expand_aliases_env (ENVELOPE *env) +{ + env->from = mutt_expand_aliases (env->from); + env->to = mutt_expand_aliases (env->to); + env->cc = mutt_expand_aliases (env->cc); + env->bcc = mutt_expand_aliases (env->bcc); + env->reply_to = mutt_expand_aliases (env->reply_to); + env->mail_followup_to = mutt_expand_aliases (env->mail_followup_to); +} + + +/* + * if someone has an address like + * From: Michael `/bin/rm -f ~` Elkins + * and the user creates an alias for this, Mutt could wind up executing + * the backtics because it writes aliases like + * alias me Michael `/bin/rm -f ~` Elkins + * To avoid this problem, use a backslash (\) to quote any backtics. We also + * need to quote backslashes as well, since you could defeat the above by + * doing + * From: Michael \`/bin/rm -f ~\` Elkins + * since that would get aliased as + * alias me Michael \\`/bin/rm -f ~\\` Elkins + * which still gets evaluated because the double backslash is not a quote. + * + * Additionally, we need to quote ' and " characters - otherwise, mutt will + * interpret them on the wrong parsing step. + * + * $ wants to be quoted since it may indicate the start of an environment + * variable. + */ + +static void write_safe_address (FILE *fp, char *s) +{ + while (*s) + { + if (*s == '\\' || *s == '`' || *s == '\'' || *s == '"' + || *s == '$') + fputc ('\\', fp); + fputc (*s, fp); + s++; + } +} + +ADDRESS *mutt_get_address (ENVELOPE *env, char **pfxp) +{ + ADDRESS *adr; + char *pfx = NULL; + + if (mutt_addr_is_user (env->from)) + { + if (env->to && !mutt_is_mail_list (env->to)) + { + pfx = "To"; + adr = env->to; + } + else + { + pfx = "Cc"; + adr = env->cc; + } + } + else if (env->reply_to && !mutt_is_mail_list (env->reply_to)) + { + pfx = "Reply-To"; + adr = env->reply_to; + } + else + { + adr = env->from; + pfx = "From"; + } + + if (pfxp) *pfxp = pfx; + + return adr; +} + +void mutt_create_alias (ENVELOPE *cur, ADDRESS *iadr) +{ + ALIAS *new, *t; + char buf[LONG_STRING], prompt[SHORT_STRING], *pc; + char *err = NULL; + char fixed[LONG_STRING]; + FILE *rc; + ADDRESS *adr = NULL; + + if (cur) + { + adr = mutt_get_address (cur, NULL); + } + else if (iadr) + { + adr = iadr; + } + + if (adr && adr->mailbox) + { + strfcpy (buf, adr->mailbox, sizeof (buf)); + if ((pc = strchr (buf, '@'))) + *pc = 0; + } + else + buf[0] = '\0'; + + /* Don't suggest a bad alias name in the event of a strange local part. */ + mutt_check_alias_name (buf, buf); + +retry_name: + /* add a new alias */ + if (mutt_get_field (_("Alias as: "), buf, sizeof (buf), 0) != 0 || !buf[0]) + return; + + /* check to see if the user already has an alias defined */ + if (mutt_lookup_alias (buf)) + { + mutt_error _("You already have an alias defined with that name!"); + return; + } + + if (mutt_check_alias_name (buf, fixed)) + { + switch (mutt_yesorno (_("Warning: This alias name may not work. Fix it?"), M_YES)) + { + case M_YES: + strfcpy (buf, fixed, sizeof (buf)); + goto retry_name; + case -1: + return; + } + } + + new = safe_calloc (1, sizeof (ALIAS)); + new->self = new; + new->name = safe_strdup (buf); + + mutt_addrlist_to_local (adr); + + if (adr) + strfcpy (buf, adr->mailbox, sizeof (buf)); + else + buf[0] = 0; + + mutt_addrlist_to_idna (adr, NULL); + + do + { + if (mutt_get_field (_("Address: "), buf, sizeof (buf), 0) != 0 || !buf[0]) + { + mutt_free_alias (&new); + return; + } + + if((new->addr = rfc822_parse_adrlist (new->addr, buf)) == NULL) + BEEP (); + if (mutt_addrlist_to_idna (new->addr, &err)) + { + mutt_error (_("Error: '%s' is a bad IDN."), err); + mutt_sleep (2); + continue; + } + } + while(new->addr == NULL); + + if (adr && adr->personal && !mutt_is_mail_list (adr)) + strfcpy (buf, adr->personal, sizeof (buf)); + else + buf[0] = 0; + + if (mutt_get_field (_("Personal name: "), buf, sizeof (buf), 0) != 0) + { + mutt_free_alias (&new); + return; + } + new->addr->personal = safe_strdup (buf); + + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), new->addr, 1); + snprintf (prompt, sizeof (prompt), _("[%s = %s] Accept?"), new->name, buf); + if (mutt_yesorno (prompt, M_YES) != M_YES) + { + mutt_free_alias (&new); + return; + } + + if ((t = Aliases)) + { + while (t->next) + t = t->next; + t->next = new; + } + else + Aliases = new; + + strfcpy (buf, NONULL (AliasFile), sizeof (buf)); + if (mutt_get_field (_("Save to file: "), buf, sizeof (buf), M_FILE) != 0) + return; + mutt_expand_path (buf, sizeof (buf)); + if ((rc = fopen (buf, "a"))) + { + if (mutt_check_alias_name (new->name, NULL)) + mutt_quote_filename (buf, sizeof (buf), new->name); + else + strfcpy (buf, new->name, sizeof (buf)); + fprintf (rc, "alias %s ", buf); + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), new->addr, 0); + write_safe_address (rc, buf); + fputc ('\n', rc); + fclose (rc); + mutt_message _("Alias added."); + } + else + mutt_perror (buf); +} + +/* + * Sanity-check an alias name: Only characters which are non-special to both + * the RFC 822 and the mutt configuration parser are permitted. + */ + +static int check_alias_name_char (char c) +{ + return (c == '-' || c == '_' || c == '+' || c == '=' || c == '.' || + isalnum ((unsigned char) c)); +} + +int mutt_check_alias_name (const char *s, char *d) +{ + int rv = 0; + for (; *s; s++) + { + if (!check_alias_name_char (*s)) + { + if (!d) + return -1; + else + { + *d++ = '_'; + rv = -1; + } + } + else if (d) + *d++ = *s; + } + if (d) + *d++ = *s; + return rv; +} + +/* + * This routine looks to see if the user has an alias defined for the given + * address. + */ +ADDRESS *alias_reverse_lookup (ADDRESS *a) +{ + ALIAS *t = Aliases; + ADDRESS *ap; + + if (!a || !a->mailbox) + return NULL; + + for (; t; t = t->next) + { + /* cycle through all addresses if this is a group alias */ + for (ap = t->addr; ap; ap = ap->next) + { + if (!ap->group && ap->mailbox && + ascii_strcasecmp (ap->mailbox, a->mailbox) == 0) + return ap; + } + } + return 0; +} + +/* alias_complete() -- alias completion routine + * + * given a partial alias, this routine attempts to fill in the alias + * from the alias list as much as possible. if given empty search string + * or found nothing, present all aliases + */ +int mutt_alias_complete (char *s, size_t buflen) +{ + ALIAS *a = Aliases; + ALIAS *a_list = NULL, *a_cur = NULL; + char bestname[HUGE_STRING]; + int i; + +#define min(a,b) ((aname && strstr (a->name, s) == a->name) + { + if (!bestname[0]) /* init */ + strfcpy (bestname, a->name, + min (mutt_strlen (a->name) + 1, sizeof (bestname))); + else + { + for (i = 0 ; a->name[i] && a->name[i] == bestname[i] ; i++) + ; + bestname[i] = 0; + } + } + a = a->next; + } + + if (bestname[0] != 0) + { + if (mutt_strcmp (bestname, s) != 0) + { + /* we are adding something to the completion */ + strfcpy (s, bestname, mutt_strlen (bestname) + 1); + return 1; + } + + /* build alias list and show it */ + + a = Aliases; + while (a) + { + if (a->name && (strstr (a->name, s) == a->name)) + { + if (!a_list) /* init */ + a_cur = a_list = (ALIAS *) safe_malloc (sizeof (ALIAS)); + else + { + a_cur->next = (ALIAS *) safe_malloc (sizeof (ALIAS)); + a_cur = a_cur->next; + } + memcpy (a_cur, a, sizeof (ALIAS)); + a_cur->next = NULL; + } + a = a->next; + } + } + } + + bestname[0] = 0; + mutt_alias_menu (bestname, sizeof(bestname), a_list ? a_list : Aliases); + if (bestname[0] != 0) + strfcpy (s, bestname, buflen); + + /* free the alias list */ + while (a_list) + { + a_cur = a_list; + a_list = a_list->next; + FREE (&a_cur); + } + + /* remove any aliases marked for deletion */ + a_list = NULL; + for (a_cur = Aliases; a_cur;) + { + if (a_cur->del) + { + if (a_list) + a_list->next = a_cur->next; + else + Aliases = a_cur->next; + + a_cur->next = NULL; + mutt_free_alias (&a_cur); + + if (a_list) + a_cur = a_list; + else + a_cur = Aliases; + } + else + { + a_list = a_cur; + a_cur = a_cur->next; + } + } + + return 0; +} + +static int string_is_address(const char *str, const char *u, const char *d) +{ + char buf[LONG_STRING]; + + snprintf(buf, sizeof(buf), "%s@%s", NONULL(u), NONULL(d)); + if (ascii_strcasecmp(str, buf) == 0) + return 1; + + return 0; +} + +/* returns TRUE if the given address belongs to the user. */ +int mutt_addr_is_user (ADDRESS *addr) +{ + /* NULL address is assumed to be the user. */ + if (!addr) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, NULL address\n")); + return 1; + } + if (!addr->mailbox) + { + dprint (5, (debugfile, "mail_addr_is_user: no, no mailbox\n")); + return 0; + } + + if (ascii_strcasecmp (addr->mailbox, Username) == 0) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s\n", addr->mailbox, Username)); + return 1; + } + if (string_is_address(addr->mailbox, Username, Hostname)) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s @ %s \n", addr->mailbox, Username, Hostname)); + return 1; + } + if (string_is_address(addr->mailbox, Username, mutt_fqdn(0))) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s @ %s \n", addr->mailbox, Username, mutt_fqdn (0))); + return 1; + } + if (string_is_address(addr->mailbox, Username, mutt_fqdn(1))) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s @ %s \n", addr->mailbox, Username, mutt_fqdn (1))); + return 1; + } + + if (From && !ascii_strcasecmp (From->mailbox, addr->mailbox)) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, %s = %s\n", addr->mailbox, From->mailbox)); + return 1; + } + + if (mutt_match_rx_list (addr->mailbox, Alternates)) + { + dprint (5, (debugfile, "mail_addr_is_user: yes, %s matched by alternates.\n", addr->mailbox)); + return 1; + } + + dprint (5, (debugfile, "mail_addr_is_user: no, all failed.\n")); + return 0; +} diff --git a/ascii.c b/ascii.c new file mode 100644 index 0000000..d4553f6 --- /dev/null +++ b/ascii.c @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2001 Thomas Roessler + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + * + */ + + +/* + * Versions of the string comparison functions which are + * locale-insensitive. + */ + +#include +#include +#include "ascii.h" + +int ascii_isupper (int c) +{ + return (c >= 'A') && (c <= 'Z'); +} + +int ascii_islower (int c) +{ + return (c >= 'a') && (c <= 'z'); +} + +int ascii_toupper (int c) +{ + if (ascii_islower (c)) + return c & ~32; + + return c; +} + +int ascii_tolower (int c) +{ + if (ascii_isupper (c)) + return c | 32; + + return c; +} + +int ascii_strcasecmp (const char *a, const char *b) +{ + int i; + + if (a == b) + return 0; + if (a == NULL && b) + return -1; + if (b == NULL && a) + return 1; + + for (; *a || *b; a++, b++) + { + if ((i = ascii_tolower (*a) - ascii_tolower (*b))) + return i; + } + + return 0; +} + +int ascii_strncasecmp (const char *a, const char *b, int n) +{ + int i, j; + + if (a == b) + return 0; + if (a == NULL && b) + return -1; + if (b == NULL && a) + return 1; + + for (j = 0; (*a || *b) && j < n; a++, b++, j++) + { + if ((i = ascii_tolower (*a) - ascii_tolower (*b))) + return i; + } + + return 0; +} diff --git a/ascii.h b/ascii.h new file mode 100644 index 0000000..a6c1d2c --- /dev/null +++ b/ascii.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2001 Thomas Roessler + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + * + */ + + +/* + * Versions of the string comparison functions which are + * locale-insensitive. + */ + +#ifndef _ASCII_H +# define _ASCII_H + +int ascii_isupper (int c); +int ascii_islower (int c); +int ascii_toupper (int c); +int ascii_tolower (int c); +int ascii_strcasecmp (const char *a, const char *b); +int ascii_strncasecmp (const char *a, const char *b, int n); + +#define ascii_strcmp(a,b) mutt_strcmp(a,b) +#define ascii_strncmp(a,b,c) mutt_strncmp(a,b,c) + +#endif diff --git a/attach.c b/attach.c new file mode 100644 index 0000000..06dc12b --- /dev/null +++ b/attach.c @@ -0,0 +1,1069 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * Copyright (C) 1999-2000 Thomas Roessler + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mutt_curses.h" +#include "keymap.h" +#include "rfc1524.h" +#include "mime.h" +#include "pager.h" +#include "mailbox.h" +#include "copy.h" +#include "mx.h" +#include "mutt_crypt.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +int mutt_get_tmp_attachment (BODY *a) +{ + char type[STRING]; + char tempfile[_POSIX_PATH_MAX]; + rfc1524_entry *entry = rfc1524_new_entry(); + FILE *fpin = NULL, *fpout = NULL; + struct stat st; + + if(a->unlink) + return 0; + + snprintf(type, sizeof(type), "%s/%s", TYPE(a), a->subtype); + rfc1524_mailcap_lookup(a, type, entry, 0); + rfc1524_expand_filename(entry->nametemplate, a->filename, + tempfile, sizeof(tempfile)); + + rfc1524_free_entry(&entry); + + if(stat(a->filename, &st) == -1) + return -1; + + if((fpin = fopen(a->filename, "r")) && (fpout = safe_fopen(tempfile, "w"))) /* __FOPEN_CHECKED__ */ + { + mutt_copy_stream (fpin, fpout); + mutt_str_replace (&a->filename, tempfile); + a->unlink = 1; + + if(a->stamp >= st.st_mtime) + mutt_stamp_attachment(a); + } + else + mutt_perror(fpin ? tempfile : a->filename); + + if(fpin) fclose(fpin); + if(fpout) fclose(fpout); + + return a->unlink ? 0 : -1; +} + + +/* return 1 if require full screen redraw, 0 otherwise */ +int mutt_compose_attachment (BODY *a) +{ + char type[STRING]; + char command[STRING]; + char newfile[_POSIX_PATH_MAX] = ""; + rfc1524_entry *entry = rfc1524_new_entry (); + short unlink_newfile = 0; + int rc = 0; + + snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); + if (rfc1524_mailcap_lookup (a, type, entry, M_COMPOSE)) + { + if (entry->composecommand || entry->composetypecommand) + { + + if (entry->composetypecommand) + strfcpy (command, entry->composetypecommand, sizeof (command)); + else + strfcpy (command, entry->composecommand, sizeof (command)); + if (rfc1524_expand_filename (entry->nametemplate, + a->filename, newfile, sizeof (newfile))) + { + dprint(1, (debugfile, "oldfile: %s\t newfile: %s\n", + a->filename, newfile)); + if (safe_symlink (a->filename, newfile) == -1) + { + if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) != M_YES) + goto bailout; + } + unlink_newfile = 1; + } + else + strfcpy(newfile, a->filename, sizeof(newfile)); + + if (rfc1524_expand_command (a, newfile, type, + command, sizeof (command))) + { + /* For now, editing requires a file, no piping */ + mutt_error _("Mailcap compose entry requires %%s"); + } + else + { + int r; + + mutt_endwin (NULL); + if ((r = mutt_system (command)) == -1) + mutt_error (_("Error running \"%s\"!"), command); + + if (r != -1 && entry->composetypecommand) + { + BODY *b; + FILE *fp, *tfp; + char tempfile[_POSIX_PATH_MAX]; + + if ((fp = safe_fopen (a->filename, "r")) == NULL) + { + mutt_perror _("Failure to open file to parse headers."); + goto bailout; + } + + b = mutt_read_mime_header (fp, 0); + if (b) + { + if (b->parameter) + { + mutt_free_parameter (&a->parameter); + a->parameter = b->parameter; + b->parameter = NULL; + } + if (b->description) { + FREE (&a->description); + a->description = b->description; + b->description = NULL; + } + if (b->form_name) + { + FREE (&a->form_name); + a->form_name = b->form_name; + b->form_name = NULL; + } + + /* Remove headers by copying out data to another file, then + * copying the file back */ + fseek (fp, b->offset, 0); + mutt_mktemp (tempfile); + if ((tfp = safe_fopen (tempfile, "w")) == NULL) + { + mutt_perror _("Failure to open file to strip headers."); + goto bailout; + } + mutt_copy_stream (fp, tfp); + fclose (fp); + fclose (tfp); + mutt_unlink (a->filename); + mutt_rename_file (tempfile, a->filename); + + mutt_free_body (&b); + } + } + } + } + } + else + { + rfc1524_free_entry (&entry); + mutt_message (_("No mailcap compose entry for %s, creating empty file."), + type); + return 1; + } + + rc = 1; + + bailout: + + if(unlink_newfile) + unlink(newfile); + + rfc1524_free_entry (&entry); + return rc; +} + +/* + * Currently, this only works for send mode, as it assumes that the + * BODY->filename actually contains the information. I'm not sure + * we want to deal with editing attachments we've already received, + * so this should be ok. + * + * Returns 1 if editor found, 0 if not (useful to tell calling menu to + * redraw) + */ +int mutt_edit_attachment (BODY *a) +{ + char type[STRING]; + char command[STRING]; + char newfile[_POSIX_PATH_MAX] = ""; + rfc1524_entry *entry = rfc1524_new_entry (); + short unlink_newfile = 0; + int rc = 0; + + snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); + if (rfc1524_mailcap_lookup (a, type, entry, M_EDIT)) + { + if (entry->editcommand) + { + + strfcpy (command, entry->editcommand, sizeof (command)); + if (rfc1524_expand_filename (entry->nametemplate, + a->filename, newfile, sizeof (newfile))) + { + dprint(1, (debugfile, "oldfile: %s\t newfile: %s\n", + a->filename, newfile)); + if (safe_symlink (a->filename, newfile) == -1) + { + if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) != M_YES) + goto bailout; + } + unlink_newfile = 1; + } + else + strfcpy(newfile, a->filename, sizeof(newfile)); + + if (rfc1524_expand_command (a, newfile, type, + command, sizeof (command))) + { + /* For now, editing requires a file, no piping */ + mutt_error _("Mailcap Edit entry requires %%s"); + } + else + { + mutt_endwin (NULL); + if (mutt_system (command) == -1) + mutt_error (_("Error running \"%s\"!"), command); + } + } + } + else if (a->type == TYPETEXT) + { + /* On text, default to editor */ + mutt_edit_file (NONULL (Editor), newfile); + } + else + { + rfc1524_free_entry (&entry); + mutt_error (_("No mailcap edit entry for %s"),type); + return 0; + } + + rc = 1; + + bailout: + + if(unlink_newfile) + unlink(newfile); + + rfc1524_free_entry (&entry); + return rc; +} + + +/* for compatibility with metamail */ +static int is_mmnoask (const char *buf) +{ + char tmp[LONG_STRING], *p, *q; + int lng; + + if ((p = getenv ("MM_NOASK")) != NULL && *p) + { + if (mutt_strcmp (p, "1") == 0) + return (1); + + strfcpy (tmp, p, sizeof (tmp)); + p = tmp; + + while ((p = strtok (p, ",")) != NULL) + { + if ((q = strrchr (p, '/')) != NULL) + { + if (*(q+1) == '*') + { + if (ascii_strncasecmp (buf, p, q-p) == 0) + return (1); + } + else + { + if (ascii_strcasecmp (buf, p) == 0) + return (1); + } + } + else + { + lng = mutt_strlen (p); + if (buf[lng] == '/' && mutt_strncasecmp (buf, p, lng) == 0) + return (1); + } + + p = NULL; + } + } + + return (0); +} + +void mutt_check_lookup_list (BODY *b, char *type, int len) +{ + LIST *t = MimeLookupList; + int i; + + for (; t; t = t->next) { + i = mutt_strlen (t->data) - 1; + if ((i > 0 && t->data[i-1] == '/' && t->data[i] == '*' && + ascii_strncasecmp (type, t->data, i) == 0) || + ascii_strcasecmp (type, t->data) == 0) { + + BODY tmp = {0}; + int n; + if ((n = mutt_lookup_mime_type (&tmp, b->filename)) != TYPEOTHER) { + snprintf (type, len, "%s/%s", + n == TYPEAUDIO ? "audio" : + n == TYPEAPPLICATION ? "application" : + n == TYPEIMAGE ? "image" : + n == TYPEMESSAGE ? "message" : + n == TYPEMODEL ? "model" : + n == TYPEMULTIPART ? "multipart" : + n == TYPETEXT ? "text" : + n == TYPEVIDEO ? "video" : "other", + tmp.subtype); + dprint(1, (debugfile, "mutt_check_lookup_list: \"%s\" -> %s\n", + b->filename, type)); + } + if (tmp.subtype) + FREE (&tmp.subtype); + if (tmp.xtype) + FREE (&tmp.xtype); + } + } +} + +int mutt_is_autoview (BODY *b, const char *type) +{ + LIST *t = AutoViewList; + char _type[SHORT_STRING]; + int i; + + if (!type) + snprintf (_type, sizeof (_type), "%s/%s", TYPE (b), b->subtype); + else + strncpy (_type, type, sizeof(_type)); + + mutt_check_lookup_list (b, _type, sizeof(_type)); + type = _type; + + if (mutt_needs_mailcap (b)) + { + if (option (OPTIMPLICITAUTOVIEW)) + return 1; + + if (is_mmnoask (type)) + return 1; + } + + for (; t; t = t->next) { + i = mutt_strlen (t->data) - 1; + if ((i > 0 && t->data[i-1] == '/' && t->data[i] == '*' && + ascii_strncasecmp (type, t->data, i) == 0) || + ascii_strcasecmp (type, t->data) == 0) + return 1; + } + + return 0; +} + +/* returns -1 on error, 0 or the return code from mutt_do_pager() on success */ +int mutt_view_attachment (FILE *fp, BODY *a, int flag, HEADER *hdr, + ATTACHPTR **idx, short idxlen) +{ + char tempfile[_POSIX_PATH_MAX] = ""; + char pagerfile[_POSIX_PATH_MAX] = ""; + int is_message; + int use_mailcap; + int use_pipe = 0; + int use_pager = 1; + char type[STRING]; + char command[STRING]; + char descrip[STRING]; + char *fname; + rfc1524_entry *entry = NULL; + int rc = -1; + int unlink_tempfile = 0; + + is_message = mutt_is_message_type(a->type, a->subtype); + if (WithCrypto && is_message && a->hdr && (a->hdr->security & ENCRYPT) && + !crypt_valid_passphrase(a->hdr->security)) + return (rc); + use_mailcap = (flag == M_MAILCAP || + (flag == M_REGULAR && mutt_needs_mailcap (a))); + snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); + + if (use_mailcap) + { + entry = rfc1524_new_entry (); + if (!rfc1524_mailcap_lookup (a, type, entry, 0)) + { + if (flag == M_REGULAR) + { + /* fallback to view as text */ + rfc1524_free_entry (&entry); + mutt_error _("No matching mailcap entry found. Viewing as text."); + flag = M_AS_TEXT; + use_mailcap = 0; + } + else + goto return_error; + } + } + + if (use_mailcap) + { + if (!entry->command) + { + mutt_error _("MIME type not defined. Cannot view attachment."); + goto return_error; + } + strfcpy (command, entry->command, sizeof (command)); + + if (fp) + { + fname = safe_strdup (a->filename); + mutt_sanitize_filename (fname, 1); + } + else + fname = a->filename; + + if (rfc1524_expand_filename (entry->nametemplate, fname, + tempfile, sizeof (tempfile))) + { + if (fp == NULL && mutt_strcmp(tempfile, a->filename)) + { + /* send case: the file is already there */ + if (safe_symlink (a->filename, tempfile) == -1) + { + if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) == M_YES) + strfcpy (tempfile, a->filename, sizeof (tempfile)); + else + goto return_error; + } + else + unlink_tempfile = 1; + } + } + else if (fp == NULL) /* send case */ + strfcpy (tempfile, a->filename, sizeof (tempfile)); + + if (fp) + { + /* recv case: we need to save the attachment to a file */ + FREE (&fname); + if (mutt_save_attachment (fp, a, tempfile, 0, NULL) == -1) + goto return_error; + } + + use_pipe = rfc1524_expand_command (a, tempfile, type, + command, sizeof (command)); + use_pager = entry->copiousoutput; + } + + if (use_pager) + { + if (fp && !use_mailcap && a->filename) + { + /* recv case */ + strfcpy (pagerfile, a->filename, sizeof (pagerfile)); + mutt_adv_mktemp (pagerfile, sizeof(pagerfile)); + } + else + mutt_mktemp (pagerfile); + } + + if (use_mailcap) + { + pid_t thepid = 0; + int tempfd = -1, pagerfd = -1; + + if (!use_pager) + mutt_endwin (NULL); + + if (use_pager || use_pipe) + { + if (use_pager && ((pagerfd = safe_open (pagerfile, O_CREAT | O_EXCL | O_WRONLY)) == -1)) + { + mutt_perror ("open"); + goto return_error; + } + if (use_pipe && ((tempfd = open (tempfile, 0)) == -1)) + { + if(pagerfd != -1) + close(pagerfd); + mutt_perror ("open"); + goto return_error; + } + + if ((thepid = mutt_create_filter_fd (command, NULL, NULL, NULL, + use_pipe ? tempfd : -1, use_pager ? pagerfd : -1, -1)) == -1) + { + if(pagerfd != -1) + close(pagerfd); + + if(tempfd != -1) + close(tempfd); + + mutt_error _("Cannot create filter"); + goto return_error; + } + + if (use_pager) + { + if (a->description) + snprintf (descrip, sizeof (descrip), + "---Command: %-20.20s Description: %s", + command, a->description); + else + snprintf (descrip, sizeof (descrip), + "---Command: %-30.30s Attachment: %s", command, type); + } + + if ((mutt_wait_filter (thepid) || (entry->needsterminal && + option (OPTWAITKEY))) && !use_pager) + mutt_any_key_to_continue (NULL); + + close(tempfd); + close(pagerfd); + + } + else + { + /* interactive command */ + if (mutt_system (command) || + (entry->needsterminal && option (OPTWAITKEY))) + mutt_any_key_to_continue (NULL); + } + } + else + { + /* Don't use mailcap; the attachment is viewed in the pager */ + + if (flag == M_AS_TEXT) + { + /* just let me see the raw data */ + if (mutt_save_attachment (fp, a, pagerfile, 0, NULL)) + goto return_error; + } + else + { + /* Use built-in handler */ + set_option (OPTVIEWATTACH); /* disable the "use 'v' to view this part" + * message in case of error */ + if (mutt_decode_save_attachment (fp, a, pagerfile, M_DISPLAY, 0)) + { + unset_option (OPTVIEWATTACH); + goto return_error; + } + unset_option (OPTVIEWATTACH); + } + + if (a->description) + strfcpy (descrip, a->description, sizeof (descrip)); + else if (a->filename) + snprintf (descrip, sizeof (descrip), "---Attachment: %s : %s", + a->filename, type); + else + snprintf (descrip, sizeof (descrip), "---Attachment: %s", type); + } + + /* We only reach this point if there have been no errors */ + + if (use_pager) + { + pager_t info; + + memset (&info, 0, sizeof (info)); + info.fp = fp; + info.bdy = a; + info.ctx = Context; + info.idx = idx; + info.idxlen = idxlen; + info.hdr = hdr; + + rc = mutt_do_pager (descrip, pagerfile, + M_PAGER_ATTACHMENT | (is_message ? M_PAGER_MESSAGE : 0), &info); + } + else + rc = 0; + + return_error: + + if (entry) + rfc1524_free_entry (&entry); + if (fp && tempfile[0]) + mutt_unlink (tempfile); + else if (unlink_tempfile) + unlink(tempfile); + + if (pagerfile[0]) + mutt_unlink (pagerfile); + + return rc; +} + +/* returns 1 on success, 0 on error */ +int mutt_pipe_attachment (FILE *fp, BODY *b, const char *path, char *outfile) +{ + pid_t thepid; + int out = -1; + int rv = 0; + + if (outfile && *outfile) + if ((out = safe_open (outfile, O_CREAT | O_EXCL | O_WRONLY)) < 0) + { + mutt_perror ("open"); + return 0; + } + + mutt_endwin (NULL); + + if (fp) + { + /* recv case */ + + STATE s; + + memset (&s, 0, sizeof (STATE)); + + if (outfile && *outfile) + thepid = mutt_create_filter_fd (path, &s.fpout, NULL, NULL, -1, out, -1); + else + thepid = mutt_create_filter (path, &s.fpout, NULL, NULL); + + if (thepid < 0) + { + mutt_perror _("Can't create filter"); + goto bail; + } + + s.fpin = fp; + mutt_decode_attachment (b, &s); + safe_fclose (&s.fpout); + } + else + { + /* send case */ + + FILE *ifp, *ofp; + + if ((ifp = fopen (b->filename, "r")) == NULL) + { + mutt_perror ("fopen"); + if (outfile && *outfile) + { + close (out); + unlink (outfile); + } + return 0; + } + + if (outfile && *outfile) + thepid = mutt_create_filter_fd (path, &ofp, NULL, NULL, -1, out, -1); + else + thepid = mutt_create_filter (path, &ofp, NULL, NULL); + + if (thepid < 0) + { + mutt_perror _("Can't create filter"); + safe_fclose (&ifp); + goto bail; + } + + mutt_copy_stream (ifp, ofp); + safe_fclose (&ofp); + safe_fclose (&ifp); + } + + rv = 1; + +bail: + + if (outfile && *outfile) + close (out); + + /* + * check for error exit from child process + */ + if (mutt_wait_filter (thepid) != 0) + rv = 0; + + if (rv == 0 || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + return rv; +} + +static FILE * +mutt_save_attachment_open (char *path, int flags) +{ + if (flags == M_SAVE_APPEND) + return fopen (path, "a"); + if (flags == M_SAVE_OVERWRITE) + return fopen (path, "w"); /* __FOPEN_CHECKED__ */ + + return safe_fopen (path, "w"); +} + +/* returns 0 on success, -1 on error */ +int mutt_save_attachment (FILE *fp, BODY *m, char *path, int flags, HEADER *hdr) +{ + if (fp) + { + + /* recv mode */ + + if(hdr && + m->hdr && + m->encoding != ENCBASE64 && + m->encoding != ENCQUOTEDPRINTABLE && + mutt_is_message_type(m->type, m->subtype)) + { + /* message type attachments are written to mail folders. */ + + char buf[HUGE_STRING]; + HEADER *hn; + CONTEXT ctx; + MESSAGE *msg; + int chflags = 0; + int r = -1; + + hn = m->hdr; + hn->msgno = hdr->msgno; /* required for MH/maildir */ + hn->read = 1; + + fseek (fp, m->offset, 0); + if (fgets (buf, sizeof (buf), fp) == NULL) + return -1; + if (mx_open_mailbox(path, M_APPEND | M_QUIET, &ctx) == NULL) + return -1; + if ((msg = mx_open_new_message (&ctx, hn, is_from (buf, NULL, 0, NULL) ? 0 : M_ADD_FROM)) == NULL) + { + mx_close_mailbox(&ctx, NULL); + return -1; + } + if (ctx.magic == M_MBOX || ctx.magic == M_MMDF) + chflags = CH_FROM; + chflags |= (ctx.magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE); + if (_mutt_copy_message (msg->fp, fp, hn, hn->content, 0, chflags) == 0 + && mx_commit_message (msg, &ctx) == 0) + r = 0; + else + r = -1; + + mx_close_message (&msg); + mx_close_mailbox (&ctx, NULL); + return r; + } + else + { + /* In recv mode, extract from folder and decode */ + + STATE s; + + memset (&s, 0, sizeof (s)); + if ((s.fpout = mutt_save_attachment_open (path, flags)) == NULL) + { + mutt_perror ("fopen"); + return (-1); + } + fseek ((s.fpin = fp), m->offset, 0); + mutt_decode_attachment (m, &s); + + if (fclose (s.fpout) != 0) + { + mutt_perror ("fclose"); + return (-1); + } + } + } + else + { + /* In send mode, just copy file */ + + FILE *ofp, *nfp; + + if ((ofp = fopen (m->filename, "r")) == NULL) + { + mutt_perror ("fopen"); + return (-1); + } + + if ((nfp = mutt_save_attachment_open (path, flags)) == NULL) + { + mutt_perror ("fopen"); + safe_fclose (&ofp); + return (-1); + } + + if (mutt_copy_stream (ofp, nfp) == -1) + { + mutt_error _("Write fault!"); + safe_fclose (&ofp); + safe_fclose (&nfp); + return (-1); + } + safe_fclose (&ofp); + safe_fclose (&nfp); + } + + return 0; +} + +/* returns 0 on success, -1 on error */ +int mutt_decode_save_attachment (FILE *fp, BODY *m, char *path, + int displaying, int flags) +{ + STATE s; + unsigned int saved_encoding = 0; + BODY *saved_parts = NULL; + HEADER *saved_hdr = NULL; + + memset (&s, 0, sizeof (s)); + s.flags = displaying; + + if (flags == M_SAVE_APPEND) + s.fpout = fopen (path, "a"); + else if (flags == M_SAVE_OVERWRITE) + s.fpout = fopen (path, "w"); /* __FOPEN_CHECKED__ */ + else + s.fpout = safe_fopen (path, "w"); + + if (s.fpout == NULL) + { + mutt_perror ("fopen"); + return (-1); + } + + if (fp == NULL) + { + /* When called from the compose menu, the attachment isn't parsed, + * so we need to do it here. */ + struct stat st; + + if (stat (m->filename, &st) == -1) + { + mutt_perror ("stat"); + fclose (s.fpout); + return (-1); + } + + if ((s.fpin = fopen (m->filename, "r")) == NULL) + { + mutt_perror ("fopen"); + return (-1); + } + + saved_encoding = m->encoding; + if (!is_multipart (m)) + m->encoding = ENC8BIT; + + m->length = st.st_size; + m->offset = 0; + saved_parts = m->parts; + saved_hdr = m->hdr; + mutt_parse_part (s.fpin, m); + + if (m->noconv || is_multipart (m)) + s.flags |= M_CHARCONV; + } + else + { + s.fpin = fp; + s.flags |= M_CHARCONV; + } + + mutt_body_handler (m, &s); + + fclose (s.fpout); + if (fp == NULL) + { + m->length = 0; + m->encoding = saved_encoding; + if (saved_parts) + { + mutt_free_header (&m->hdr); + m->parts = saved_parts; + m->hdr = saved_hdr; + } + fclose (s.fpin); + } + + return (0); +} + +/* Ok, the difference between send and receive: + * recv: BODY->filename is a suggested name, and Context|HEADER points + * to the attachment in mailbox which is encooded + * send: BODY->filename points to the un-encoded file which contains the + * attachment + */ + +int mutt_print_attachment (FILE *fp, BODY *a) +{ + char newfile[_POSIX_PATH_MAX] = ""; + char type[STRING]; + pid_t thepid; + FILE *ifp, *fpout; + short unlink_newfile = 0; + + snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); + + if (rfc1524_mailcap_lookup (a, type, NULL, M_PRINT)) + { + char command[_POSIX_PATH_MAX+STRING]; + rfc1524_entry *entry; + int piped = FALSE; + + dprint (2, (debugfile, "Using mailcap...\n")); + + entry = rfc1524_new_entry (); + rfc1524_mailcap_lookup (a, type, entry, M_PRINT); + if (rfc1524_expand_filename (entry->nametemplate, a->filename, + newfile, sizeof (newfile))) + { + if (!fp) + { + if (safe_symlink(a->filename, newfile) == -1) + { + if (mutt_yesorno (_("Can't match nametemplate, continue?"), M_YES) != M_YES) + { + rfc1524_free_entry (&entry); + return 0; + } + strfcpy (newfile, a->filename, sizeof (newfile)); + } + else + unlink_newfile = 1; + } + } + + /* in recv mode, save file to newfile first */ + if (fp) + mutt_save_attachment (fp, a, newfile, 0, NULL); + + strfcpy (command, entry->printcommand, sizeof (command)); + piped = rfc1524_expand_command (a, newfile, type, command, sizeof (command)); + + mutt_endwin (NULL); + + /* interactive program */ + if (piped) + { + if ((ifp = fopen (newfile, "r")) == NULL) + { + mutt_perror ("fopen"); + rfc1524_free_entry (&entry); + return (0); + } + + if ((thepid = mutt_create_filter (command, &fpout, NULL, NULL)) < 0) + { + mutt_perror _("Can't create filter"); + rfc1524_free_entry (&entry); + safe_fclose (&ifp); + return 0; + } + mutt_copy_stream (ifp, fpout); + safe_fclose (&fpout); + safe_fclose (&ifp); + if (mutt_wait_filter (thepid) || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + } + else + { + if (mutt_system (command) || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + } + + if (fp) + mutt_unlink (newfile); + else if (unlink_newfile) + unlink(newfile); + + rfc1524_free_entry (&entry); + return (1); + } + + if (!ascii_strcasecmp ("text/plain", type) || + !ascii_strcasecmp ("application/postscript", type)) + { + return (mutt_pipe_attachment (fp, a, NONULL(PrintCmd), NULL)); + } + else if (mutt_can_decode (a)) + { + /* decode and print */ + + int rc = 0; + + ifp = NULL; + fpout = NULL; + + mutt_mktemp (newfile); + if (mutt_decode_save_attachment (fp, a, newfile, M_PRINTING, 0) == 0) + { + + dprint (2, (debugfile, "successfully decoded %s type attachment to %s\n", + type, newfile)); + + if ((ifp = fopen (newfile, "r")) == NULL) + { + mutt_perror ("fopen"); + goto bail0; + } + + dprint (2, (debugfile, "successfully opened %s read-only\n", newfile)); + + mutt_endwin (NULL); + if ((thepid = mutt_create_filter (NONULL(PrintCmd), &fpout, NULL, NULL)) < 0) + { + mutt_perror _("Can't create filter"); + goto bail0; + } + + dprint (2, (debugfile, "Filter created.\n")); + + mutt_copy_stream (ifp, fpout); + + safe_fclose (&fpout); + safe_fclose (&ifp); + + if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + rc = 1; + } + bail0: + safe_fclose (&ifp); + safe_fclose (&fpout); + mutt_unlink (newfile); + return rc; + } + else + { + mutt_error _("I don't know how to print that!"); + return 0; + } +} diff --git a/attach.h b/attach.h new file mode 100644 index 0000000..b751a95 --- /dev/null +++ b/attach.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* common protos for compose / attach menus */ + +int mutt_tag_attach (MUTTMENU *menu, int n, int m); +int mutt_attach_display_loop (MUTTMENU *menu, int op, FILE *fp, HEADER *hdr, + BODY *cur, ATTACHPTR ***idxp, short *idxlen, short *idxmax, + int recv); + + +void mutt_save_attachment_list (FILE *fp, int tag, BODY *top, HEADER *hdr, MUTTMENU *menu); +void mutt_pipe_attachment_list (FILE *fp, int tag, BODY *top, int filter); +void mutt_print_attachment_list (FILE *fp, int tag, BODY *top); + +void mutt_attach_bounce (FILE *, HEADER *, ATTACHPTR **, short, BODY *); +void mutt_attach_resend (FILE *, HEADER *, ATTACHPTR **, short, BODY *); +void mutt_attach_forward (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int); +void mutt_attach_reply (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int); diff --git a/base64.c b/base64.c new file mode 100644 index 0000000..0bcc865 --- /dev/null +++ b/base64.c @@ -0,0 +1,118 @@ +/* + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + * + */ + +/* + * Base64 handling elsewhere in mutt should be modified to call + * these routines. These routines were written because IMAP's + * AUTHENTICATE protocol required them, and base64 handling + * elsewhere wasn't sufficiently generic. + * + */ + +/* + * This code is heavily modified from fetchmail (also GPL'd, of + * course) by Brendan Cully . + * + * Original copyright notice: + * + * The code in the fetchmail distribution is Copyright 1997 by Eric + * S. Raymond. Portions are also copyrighted by Carl Harris, 1993 + * and 1995. Copyright retained for the purpose of protecting free + * redistribution of source. + * + */ + +#include "mutt.h" +#include "mime.h" + +#define BAD -1 + +/* raw bytes to null-terminated base 64 string */ +void mutt_to_base64 (unsigned char *out, const unsigned char *in, size_t len, + size_t olen) +{ + while (len >= 3 && olen > 10) + { + *out++ = B64Chars[in[0] >> 2]; + *out++ = B64Chars[((in[0] << 4) & 0x30) | (in[1] >> 4)]; + *out++ = B64Chars[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; + *out++ = B64Chars[in[2] & 0x3f]; + olen -= 4; + len -= 3; + in += 3; + } + + /* clean up remainder */ + if (len > 0 && olen > 4) + { + unsigned char fragment; + + *out++ = B64Chars[in[0] >> 2]; + fragment = (in[0] << 4) & 0x30; + if (len > 1) + fragment |= in[1] >> 4; + *out++ = B64Chars[fragment]; + *out++ = (len < 2) ? '=' : B64Chars[(in[1] << 2) & 0x3c]; + *out++ = '='; + } + *out = '\0'; +} + +/* Convert '\0'-terminated base 64 string to raw bytes. + * Returns length of returned buffer, or -1 on error */ +int mutt_from_base64 (char *out, const char *in) +{ + int len = 0; + register unsigned char digit1, digit2, digit3, digit4; + + do + { + digit1 = in[0]; + if (digit1 > 127 || base64val (digit1) == BAD) + return -1; + digit2 = in[1]; + if (digit2 > 127 || base64val (digit2) == BAD) + return -1; + digit3 = in[2]; + if (digit3 > 127 || ((digit3 != '=') && (base64val (digit3) == BAD))) + return -1; + digit4 = in[3]; + if (digit4 > 127 || ((digit4 != '=') && (base64val (digit4) == BAD))) + return -1; + in += 4; + + /* digits are already sanity-checked */ + *out++ = (base64val(digit1) << 2) | (base64val(digit2) >> 4); + len++; + if (digit3 != '=') + { + *out++ = ((base64val(digit2) << 4) & 0xf0) | (base64val(digit3) >> 2); + len++; + if (digit4 != '=') + { + *out++ = ((base64val(digit3) << 6) & 0xc0) | base64val(digit4); + len++; + } + } + } + while (*in && digit4 != '='); + + return len; +} diff --git a/browser.c b/browser.c new file mode 100644 index 0000000..9ae55ac --- /dev/null +++ b/browser.c @@ -0,0 +1,1590 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "buffy.h" +#include "mapping.h" +#include "sort.h" +#include "mailbox.h" +#include "browser.h" +#ifdef USE_IMAP +#include "imap.h" +#endif +#ifdef USE_NNTP +#include "nntp.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +static struct mapping_t FolderHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("Chdir"), OP_CHANGE_DIRECTORY }, + { N_("Mask"), OP_ENTER_MASK }, + { N_("Help"), OP_HELP }, + { NULL } +}; + +#ifdef USE_NNTP +static struct mapping_t FolderNewsHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("List"), OP_TOGGLE_MAILBOXES }, + { N_("Subscribe"), OP_BROWSER_SUBSCRIBE }, + { N_("Unsubscribe"), OP_BROWSER_UNSUBSCRIBE }, + { N_("Catchup"), OP_CATCHUP }, + { N_("Mask"), OP_ENTER_MASK }, + { N_("Help"), OP_HELP }, + { NULL } +}; +#endif + +typedef struct folder_t +{ + struct folder_file *ff; + int num; +} FOLDER; + +static char LastDir[_POSIX_PATH_MAX] = ""; +static char LastDirBackup[_POSIX_PATH_MAX] = ""; + +/* Frees up the memory allocated for the local-global variables. */ +static void destroy_state (struct browser_state *state) +{ + int c; + + for (c = 0; c < state->entrylen; c++) + { + FREE (&((state->entry)[c].name)); + FREE (&((state->entry)[c].desc)); + FREE (&((state->entry)[c].st)); + } +#ifdef USE_IMAP + FREE (&state->folder); +#endif + FREE (&state->entry); +} + +static int browser_compare_subject (const void *a, const void *b) +{ + struct folder_file *pa = (struct folder_file *) a; + struct folder_file *pb = (struct folder_file *) b; + + int r = mutt_strcoll (pa->name, pb->name); + + return ((BrowserSort & SORT_REVERSE) ? -r : r); +} + +static int browser_compare_date (const void *a, const void *b) +{ + struct folder_file *pa = (struct folder_file *) a; + struct folder_file *pb = (struct folder_file *) b; + + int r = pa->mtime - pb->mtime; + + return ((BrowserSort & SORT_REVERSE) ? -r : r); +} + +static int browser_compare_size (const void *a, const void *b) +{ + struct folder_file *pa = (struct folder_file *) a; + struct folder_file *pb = (struct folder_file *) b; + + int r = pa->size - pb->size; + + return ((BrowserSort & SORT_REVERSE) ? -r : r); +} + +static void browser_sort (struct browser_state *state) +{ + int (*f) (const void *, const void *); + + switch (BrowserSort & SORT_MASK) + { + case SORT_ORDER: + return; + case SORT_DATE: +#ifdef USE_NNTP + if (option (OPTNEWS)) + return; +#endif + f = browser_compare_date; + break; + case SORT_SIZE: +#ifdef USE_NNTP + if (option (OPTNEWS)) + return; +#endif + f = browser_compare_size; + break; + case SORT_SUBJECT: + default: + f = browser_compare_subject; + break; + } + qsort (state->entry, state->entrylen, sizeof (struct folder_file), f); +} + +static int link_is_dir (const char *folder, const char *path) +{ + struct stat st; + char fullpath[_POSIX_PATH_MAX]; + + mutt_concat_path (fullpath, folder, path, sizeof (fullpath)); + + if (stat (fullpath, &st) == 0) + return (S_ISDIR (st.st_mode)); + else + return 0; +} + +static const char * +folder_format_str (char *dest, size_t destlen, char op, const char *src, + const char *fmt, const char *ifstring, const char *elsestring, + unsigned long data, format_flag flags) +{ + char fn[SHORT_STRING], tmp[SHORT_STRING], permission[11]; + char date[16], *t_fmt; + time_t tnow; + FOLDER *folder = (FOLDER *) data; + struct passwd *pw; + struct group *gr; + int optional = (flags & M_FORMAT_OPTIONAL); + + switch (op) + { + case 'C': + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->num + 1); + break; + + case 'd': + if (folder->ff->st != NULL) + { + tnow = time (NULL); + t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y"; + strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime)); + mutt_format_s (dest, destlen, fmt, date); + } + else + mutt_format_s (dest, destlen, fmt, ""); + break; + + case 'f': + { + char *s; +#ifdef USE_IMAP + if (folder->ff->imap) + s = NONULL (folder->ff->desc); + else +#endif + s = NONULL (folder->ff->name); + + snprintf (fn, sizeof (fn), "%s%s", s, + folder->ff->st ? (S_ISLNK (folder->ff->st->st_mode) ? "@" : + (S_ISDIR (folder->ff->st->st_mode) ? "/" : + ((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : ""))) : ""); + + mutt_format_s (dest, destlen, fmt, fn); + break; + } + case 'F': + if (folder->ff->st != NULL) + { + snprintf (permission, sizeof (permission), "%c%c%c%c%c%c%c%c%c%c", + S_ISDIR(folder->ff->st->st_mode) ? 'd' : (S_ISLNK(folder->ff->st->st_mode) ? 'l' : '-'), + (folder->ff->st->st_mode & S_IRUSR) != 0 ? 'r': '-', + (folder->ff->st->st_mode & S_IWUSR) != 0 ? 'w' : '-', + (folder->ff->st->st_mode & S_ISUID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXUSR) != 0 ? 'x': '-', + (folder->ff->st->st_mode & S_IRGRP) != 0 ? 'r' : '-', + (folder->ff->st->st_mode & S_IWGRP) != 0 ? 'w' : '-', + (folder->ff->st->st_mode & S_ISGID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXGRP) != 0 ? 'x': '-', + (folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-', + (folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-', + (folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-'); + mutt_format_s (dest, destlen, fmt, permission); + } +#ifdef USE_IMAP + else if (folder->ff->imap) + { + /* mark folders with subfolders AND mail */ + snprintf (permission, sizeof (permission), "IMAP %c", + (folder->ff->inferiors && folder->ff->selectable) ? '+' : ' '); + mutt_format_s (dest, destlen, fmt, permission); + } +#endif + else + mutt_format_s (dest, destlen, fmt, ""); + break; + + case 'g': + if (folder->ff->st != NULL) + { + if ((gr = getgrgid (folder->ff->st->st_gid))) + mutt_format_s (dest, destlen, fmt, gr->gr_name); + else + { + snprintf (tmp, sizeof (tmp), "%%%sld", fmt); + snprintf (dest, destlen, tmp, folder->ff->st->st_gid); + } + } + else + mutt_format_s (dest, destlen, fmt, ""); + break; + + case 'l': + if (folder->ff->st != NULL) + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->ff->st->st_nlink); + } + else + mutt_format_s (dest, destlen, fmt, ""); + break; + + case 'N': +#ifdef USE_IMAP + if (mx_is_imap (folder->ff->desc)) + { + if (!optional) + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->ff->new); + } + else if (!folder->ff->new) + optional = 0; + break; + } +#endif + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : ' '); + break; + + case 's': + if (folder->ff->st != NULL) + { + snprintf (tmp, sizeof (tmp), "%%%sld", fmt); + snprintf (dest, destlen, tmp, (long) folder->ff->st->st_size); + } + else + mutt_format_s (dest, destlen, fmt, ""); + break; + + case 't': + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + snprintf (dest, destlen, tmp, folder->ff->tagged ? '*' : ' '); + break; + + case 'u': + if (folder->ff->st != NULL) + { + if ((pw = getpwuid (folder->ff->st->st_uid))) + mutt_format_s (dest, destlen, fmt, pw->pw_name); + else + { + snprintf (tmp, sizeof (tmp), "%%%sld", fmt); + snprintf (dest, destlen, tmp, folder->ff->st->st_uid); + } + } + else + mutt_format_s (dest, destlen, fmt, ""); + break; + + default: + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + snprintf (dest, destlen, tmp, op); + break; + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, folder_format_str, data, 0); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, folder_format_str, data, 0); + + return (src); +} + +#ifdef USE_NNTP +static const char * +newsgroup_format_str (char *dest, size_t destlen, char op, const char *src, + const char *fmt, const char *ifstring, const char *elsestring, + unsigned long data, format_flag flags) +{ + char fn[SHORT_STRING], tmp[SHORT_STRING]; + FOLDER *folder = (FOLDER *) data; + + switch (op) + { + case 'C': + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->num + 1); + break; + + case 'f': + strncpy (fn, folder->ff->name, sizeof(fn) - 1); + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, fn); + break; + + case 'N': + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + if (folder->ff->nd->subscribed) + snprintf (dest, destlen, tmp, ' '); + else + snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : 'u'); + break; + + case 'M': + snprintf (tmp, sizeof (tmp), "%%%sc", fmt); + if (folder->ff->nd->deleted) + snprintf (dest, destlen, tmp, 'D'); + else + snprintf (dest, destlen, tmp, folder->ff->nd->allowed ? ' ' : '-'); + break; + + case 's': + if (flags & M_FORMAT_OPTIONAL) + { + if (folder->ff->nd->unread != 0) + mutt_FormatString (dest, destlen, ifstring, newsgroup_format_str, + data, flags); + else + mutt_FormatString (dest, destlen, elsestring, newsgroup_format_str, + data, flags); + } + else if (Context && Context->data == folder->ff->nd) + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, Context->unread); + } + else + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->ff->nd->unread); + } + break; + + case 'n': + if (Context && Context->data == folder->ff->nd) + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, Context->new); + } + else if (option (OPTMARKOLD) && + folder->ff->nd->lastCached >= folder->ff->nd->firstMessage && + folder->ff->nd->lastCached <= folder->ff->nd->lastMessage) + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->ff->nd->lastMessage - folder->ff->nd->lastCached); + } + else + { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, folder->ff->nd->unread); + } + break; + + case 'd': + if (folder->ff->nd->desc != NULL) + { + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, folder->ff->nd->desc); + } + else + { + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, ""); + } + break; + } + return (src); +} +#endif /* USE_NNTP */ + +static void add_folder (MUTTMENU *m, struct browser_state *state, + const char *name, const struct stat *s, + void *data, int new) +{ + if (state->entrylen == state->entrymax) + { + /* need to allocate more space */ + safe_realloc (&state->entry, + sizeof (struct folder_file) * (state->entrymax += 256)); + memset (&state->entry[state->entrylen], 0, + sizeof (struct folder_file) * 256); + if (m) + m->data = state->entry; + } + + if (s != NULL) + { + (state->entry)[state->entrylen].mode = s->st_mode; + (state->entry)[state->entrylen].mtime = s->st_mtime; + (state->entry)[state->entrylen].size = s->st_size; + + (state->entry)[state->entrylen].st = safe_malloc (sizeof (struct stat)); + memcpy ((state->entry)[state->entrylen].st, s, sizeof (struct stat)); + } + + (state->entry)[state->entrylen].new = new; + (state->entry)[state->entrylen].name = safe_strdup (name); + (state->entry)[state->entrylen].desc = safe_strdup (name); +#ifdef USE_IMAP + (state->entry)[state->entrylen].imap = 0; +#endif +#ifdef USE_NNTP + if (option (OPTNEWS)) + (state->entry)[state->entrylen].nd = (NNTP_DATA *) data; +#endif + (state->entrylen)++; +} + +static void init_state (struct browser_state *state, MUTTMENU *menu) +{ + state->entrylen = 0; + state->entrymax = 256; + state->entry = (struct folder_file *) safe_calloc (state->entrymax, sizeof (struct folder_file)); +#ifdef USE_IMAP + state->imap_browse = 0; +#endif + if (menu) + menu->data = state->entry; +} + +/* get list of all files/newsgroups with mask */ +static int examine_directory (MUTTMENU *menu, struct browser_state *state, + char *d, const char *prefix) +{ +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + LIST *tmp; + NNTP_DATA *data; + NNTP_SERVER *news = CurrentNewsSrv; + +/* mutt_buffy_check (0); */ + init_state (state, menu); + + for (tmp = news->list; tmp; tmp = tmp->next) + { + if (!(data = (NNTP_DATA *)tmp->data)) + continue; + if (prefix && *prefix && strncmp (prefix, data->group, + strlen (prefix)) != 0) + continue; + if (!((regexec (Mask.rx, data->group, 0, NULL, 0) == 0) ^ Mask.not)) + continue; + add_folder (menu, state, data->group, NULL, data, data->new); + } + } + else +#endif /* USE_NNTP */ + { + struct stat s; + DIR *dp; + struct dirent *de; + char buffer[_POSIX_PATH_MAX + SHORT_STRING]; + BUFFY *tmp; + + while (stat (d, &s) == -1) + { + if (errno == ENOENT) + { + /* The last used directory is deleted, try to use the parent dir. */ + char *c = strrchr (d, '/'); + + if (c && (c > d)) + { + *c = 0; + continue; + } + } + mutt_perror (d); + return (-1); + } + + if (!S_ISDIR (s.st_mode)) + { + mutt_error (_("%s is not a directory."), d); + return (-1); + } + + mutt_buffy_check (0); + + if ((dp = opendir (d)) == NULL) + { + mutt_perror (d); + return (-1); + } + + init_state (state, menu); + + while ((de = readdir (dp)) != NULL) + { + if (mutt_strcmp (de->d_name, ".") == 0) + continue; /* we don't need . */ + + if (prefix && *prefix && mutt_strncmp (prefix, de->d_name, mutt_strlen (prefix)) != 0) + continue; + if (!((regexec (Mask.rx, de->d_name, 0, NULL, 0) == 0) ^ Mask.not)) + continue; + + mutt_concat_path (buffer, d, de->d_name, sizeof (buffer)); + if (lstat (buffer, &s) == -1) + continue; + + if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) && + (! S_ISLNK (s.st_mode))) + continue; + + tmp = Incoming; + while (tmp && mutt_strcmp (buffer, tmp->path)) + tmp = tmp->next; + add_folder (menu, state, de->d_name, &s, NULL, (tmp) ? tmp->new : 0); + } + closedir (dp); + } + browser_sort (state); + return 0; +} + +/* get list of mailboxes/subscribed newsgroups */ +static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state) +{ + struct stat s; + char buffer[LONG_STRING]; + +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + LIST *tmp; + NNTP_DATA *data; + NNTP_SERVER *news = CurrentNewsSrv; + +/* mutt_buffy_check (0); */ + init_state (state, menu); + + for (tmp = news->list; tmp; tmp = tmp->next) + { + if ((data = (NNTP_DATA *) tmp->data) != NULL && (data->new || + (data->subscribed && (!option (OPTSHOWONLYUNREAD) || data->unread)))) + add_folder (menu, state, data->group, NULL, data, data->new); + } + } + else +#endif + { + BUFFY *tmp = Incoming; + + if (!Incoming) + return (-1); + mutt_buffy_check (0); + + init_state (state, menu); + + do + { +#ifdef USE_IMAP + if (mx_is_imap (tmp->path)) + { + add_folder (menu, state, tmp->path, NULL, NULL, tmp->new); + continue; + } +#endif +#ifdef USE_POP + if (mx_is_pop (tmp->path)) + { + add_folder (menu, state, tmp->path, NULL, NULL, tmp->new); + continue; + } +#endif +#ifdef USE_NNTP + if (mx_is_nntp (tmp->path)) + { + add_folder (menu, state, tmp->path, NULL, NULL, tmp->new); + continue; + } +#endif + if (lstat (tmp->path, &s) == -1) + continue; + + if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) && + (! S_ISLNK (s.st_mode))) + continue; + + strfcpy (buffer, NONULL(tmp->path), sizeof (buffer)); + mutt_pretty_mailbox (buffer); + + add_folder (menu, state, buffer, &s, NULL, tmp->new); + } + while ((tmp = tmp->next)); + } + browser_sort (state); + return 0; +} + +int select_file_search (MUTTMENU *menu, regex_t *re, int n) +{ +#ifdef USE_NNTP + if (option (OPTNEWS)) + return (regexec (re, ((struct folder_file *) menu->data)[n].desc, 0, NULL, 0)); +#endif + return (regexec (re, ((struct folder_file *) menu->data)[n].name, 0, NULL, 0)); +} + +void folder_entry (char *s, size_t slen, MUTTMENU *menu, int num) +{ + FOLDER folder; + + folder.ff = &((struct folder_file *) menu->data)[num]; + folder.num = num; + +#ifdef USE_NNTP + if (option (OPTNEWS)) + mutt_FormatString (s, slen, NONULL(GroupFormat), newsgroup_format_str, + (unsigned long) &folder, M_FORMAT_ARROWCURSOR); + else +#endif + mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str, + (unsigned long) &folder, M_FORMAT_ARROWCURSOR); +} + +static void init_menu (struct browser_state *state, MUTTMENU *menu, char *title, + size_t titlelen, int buffy) +{ + char path[_POSIX_PATH_MAX]; + + menu->max = state->entrylen; + + if(menu->current >= menu->max) + menu->current = menu->max - 1; + if (menu->current < 0) + menu->current = 0; + if (menu->top > menu->current) + menu->top = 0; + + menu->tagged = 0; + +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + if (buffy) + snprintf (title, titlelen, _("Subscribed newsgroups")); + else + snprintf (title, titlelen, _("Newsgroups on server [%s]"), + CurrentNewsSrv->conn->account.host); + } + else +#endif + if (buffy) + snprintf (title, titlelen, _("Mailboxes [%d]"), mutt_buffy_check (0)); + else + { + strfcpy (path, LastDir, sizeof (path)); + mutt_pretty_mailbox (path); +#ifdef USE_IMAP + if (state->imap_browse && option (OPTIMAPLSUB)) + snprintf (title, titlelen, _("Subscribed [%s], File mask: %s"), + path, NONULL (Mask.pattern)); + else +#endif + snprintf (title, titlelen, _("Directory [%s], File mask: %s"), + path, NONULL(Mask.pattern)); + } + menu->redraw = REDRAW_FULL; +} + +int file_tag (MUTTMENU *menu, int n, int m) +{ + struct folder_file *ff = &(((struct folder_file *)menu->data)[n]); + int ot; + if (S_ISDIR (ff->mode) || (S_ISLNK (ff->mode) && link_is_dir (LastDir, ff->name))) + { + mutt_error _("Can't attach a directory!"); + return 0; + } + + ot = ff->tagged; + ff->tagged = (m >= 0 ? m : !ff->tagged); + + return ff->tagged - ot; +} + +void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *numfiles) +{ + char buf[_POSIX_PATH_MAX]; + char prefix[_POSIX_PATH_MAX] = ""; + char helpstr[SHORT_STRING]; + char title[STRING]; + struct browser_state state; + MUTTMENU *menu; + struct stat st; + int i, killPrefix = 0; + int multiple = (flags & M_SEL_MULTI) ? 1 : 0; + int folder = (flags & M_SEL_FOLDER) ? 1 : 0; + int buffy = (flags & M_SEL_BUFFY) ? 1 : 0; + + buffy = buffy && folder; + + memset (&state, 0, sizeof (struct browser_state)); + + if (!folder) + strfcpy (LastDirBackup, LastDir, sizeof (LastDirBackup)); + +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + if (*f) + strfcpy (prefix, f, sizeof (prefix)); + else + { + LIST *list; + + /* default state for news reader mode is browse subscribed newsgroups */ + buffy = 0; + for (list = CurrentNewsSrv->list; list; list = list->next) + { + NNTP_DATA *data = (NNTP_DATA *) list->data; + + if (data && data->subscribed) + { + buffy = 1; + break; + } + } + } + } + else +#endif + if (*f) + { + mutt_expand_path (f, flen); +#ifdef USE_IMAP + if (mx_is_imap (f)) + { + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (f, &state); + strfcpy (LastDir, state.folder, sizeof (LastDir)); + } + else + { +#endif + for (i = mutt_strlen (f) - 1; i > 0 && f[i] != '/' ; i--); + if (i > 0) + { + if (f[0] == '/') + { + if (i > sizeof (LastDir) - 1) i = sizeof (LastDir) - 1; + strncpy (LastDir, f, i); + LastDir[i] = 0; + } + else + { + getcwd (LastDir, sizeof (LastDir)); + strcat (LastDir, "/"); /* __STRCAT_CHECKED__ */ + strncat (LastDir, f, i); + } + } + else + { + if (f[0] == '/') + strcpy (LastDir, "/"); /* __STRCPY_CHECKED__ */ + else + getcwd (LastDir, sizeof (LastDir)); + } + + if (i <= 0 && f[0] != '/') + strfcpy (prefix, f, sizeof (prefix)); + else + strfcpy (prefix, f + i + 1, sizeof (prefix)); + killPrefix = 1; +#ifdef USE_IMAP + } +#endif + } + else + { + if (!folder) + getcwd (LastDir, sizeof (LastDir)); + else if (!LastDir[0]) + strfcpy (LastDir, NONULL(Maildir), sizeof (LastDir)); + +#ifdef USE_IMAP + if (!buffy && mx_is_imap (LastDir)) + { + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (LastDir, &state); + } +#endif + } + + *f = 0; + + if (buffy) + { + if (examine_mailboxes (NULL, &state) == -1) + goto bail; + } + else +#ifdef USE_IMAP + if (!state.imap_browse) +#endif + if (examine_directory (NULL, &state, LastDir, prefix) == -1) + goto bail; + + menu = mutt_new_menu (); + menu->menu = MENU_FOLDER; + menu->make_entry = folder_entry; + menu->search = select_file_search; + menu->title = title; + menu->data = state.entry; + if (multiple) + menu->tag = file_tag; + + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_FOLDER, +#ifdef USE_NNTP + (option (OPTNEWS)) ? FolderNewsHelp : +#endif + FolderHelp); + + init_menu (&state, menu, title, sizeof (title), buffy); + + FOREVER + { + switch (i = mutt_menuLoop (menu)) + { + case OP_GENERIC_SELECT_ENTRY: + + if (!state.entrylen) + { + mutt_error _("No files match the file mask"); + break; + } + + if (S_ISDIR (state.entry[menu->current].mode) || + (S_ISLNK (state.entry[menu->current].mode) && + link_is_dir (LastDir, state.entry[menu->current].name)) +#ifdef USE_IMAP + || state.entry[menu->current].inferiors +#endif + ) + { + /* make sure this isn't a MH or maildir mailbox */ + if (buffy) + { + strfcpy (buf, state.entry[menu->current].name, sizeof (buf)); + mutt_expand_path (buf, sizeof (buf)); + } +#ifdef USE_IMAP + else if (state.imap_browse) + { + strfcpy (buf, state.entry[menu->current].name, sizeof (buf)); + } +#endif + else + mutt_concat_path (buf, LastDir, state.entry[menu->current].name, sizeof (buf)); + + if ((mx_get_magic (buf) <= 0) +#ifdef USE_IMAP + || state.entry[menu->current].inferiors +#endif + ) + { + char OldLastDir[_POSIX_PATH_MAX]; + + /* save the old directory */ + strfcpy (OldLastDir, LastDir, sizeof (OldLastDir)); + + if (mutt_strcmp (state.entry[menu->current].name, "..") == 0) + { + if (mutt_strcmp ("..", LastDir + mutt_strlen (LastDir) - 2) == 0) + strcat (LastDir, "/.."); /* __STRCAT_CHECKED__ */ + else + { + char *p = strrchr (LastDir + 1, '/'); + + if (p) + *p = 0; + else + { + if (LastDir[0] == '/') + LastDir[1] = 0; + else + strcat (LastDir, "/.."); /* __STRCAT_CHECKED__ */ + } + } + } + else if (buffy) + { + strfcpy (LastDir, state.entry[menu->current].name, sizeof (LastDir)); + mutt_expand_path (LastDir, sizeof (LastDir)); + } +#ifdef USE_IMAP + else if (state.imap_browse) + { + int n; + ciss_url_t url; + + strfcpy (LastDir, state.entry[menu->current].name, + sizeof (LastDir)); + /* tack on delimiter here */ + n = strlen (LastDir)+1; + + /* special case "" needs no delimiter */ + url_parse_ciss (&url, state.entry[menu->current].name); + if (url.path && + (state.entry[menu->current].delim != '\0') && + (n < sizeof (LastDir))) + { + LastDir[n] = '\0'; + LastDir[n-1] = state.entry[menu->current].delim; + } + } +#endif + else + { + char tmp[_POSIX_PATH_MAX]; + mutt_concat_path (tmp, LastDir, state.entry[menu->current].name, sizeof (tmp)); + strfcpy (LastDir, tmp, sizeof (LastDir)); + } + + destroy_state (&state); + if (killPrefix) + { + prefix[0] = 0; + killPrefix = 0; + } + buffy = 0; +#ifdef USE_IMAP + if (state.imap_browse) + { + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (LastDir, &state); + menu->data = state.entry; + } + else +#endif + if (examine_directory (menu, &state, LastDir, prefix) == -1) + { + /* try to restore the old values */ + strfcpy (LastDir, OldLastDir, sizeof (LastDir)); + if (examine_directory (menu, &state, LastDir, prefix) == -1) + { + strfcpy (LastDir, NONULL(Homedir), sizeof (LastDir)); + goto bail; + } + } + menu->current = 0; + menu->top = 0; + init_menu (&state, menu, title, sizeof (title), buffy); + break; + } + } + +#ifdef USE_NNTP + if (buffy || option (OPTNEWS)) /* news have not path */ +#else + if (buffy) +#endif + { + strfcpy (f, state.entry[menu->current].name, flen); + mutt_expand_path (f, flen); + } +#ifdef USE_IMAP + else if (state.imap_browse) + strfcpy (f, state.entry[menu->current].name, flen); +#endif + else + mutt_concat_path (f, LastDir, state.entry[menu->current].name, flen); + + /* Fall through to OP_EXIT */ + + case OP_EXIT: + + if (multiple) + { + char **tfiles; + int i, j; + + if (menu->tagged) + { + *numfiles = menu->tagged; + tfiles = safe_calloc (*numfiles, sizeof (char *)); + for (i = 0, j = 0; i < state.entrylen; i++) + { + struct folder_file ff = state.entry[i]; + char full[_POSIX_PATH_MAX]; + if (ff.tagged) + { + mutt_concat_path (full, LastDir, ff.name, sizeof (full)); + mutt_expand_path (full, sizeof (full)); + tfiles[j++] = safe_strdup (full); + } + } + *files = tfiles; + } + else if (f[0]) /* no tagged entries. return selected entry */ + { + *numfiles = 1; + tfiles = safe_calloc (*numfiles, sizeof (char *)); + mutt_expand_path (f, flen); + tfiles[0] = safe_strdup (f); + *files = tfiles; + } + } + + destroy_state (&state); + mutt_menuDestroy (&menu); + goto bail; + + case OP_BROWSER_TELL: + if(state.entrylen) + mutt_message("%s", state.entry[menu->current].name); + break; + +#ifdef USE_IMAP + case OP_BROWSER_TOGGLE_LSUB: + if (option (OPTIMAPLSUB)) + { + unset_option (OPTIMAPLSUB); + } + else + { + set_option (OPTIMAPLSUB); + } + mutt_ungetch (0, OP_CHECK_NEW); + break; + + case OP_CREATE_MAILBOX: + if (!state.imap_browse) + mutt_error (_("Create is only supported for IMAP mailboxes")); + else + { + imap_mailbox_create (LastDir); + /* TODO: find a way to detect if the new folder would appear in + * this window, and insert it without starting over. */ + destroy_state (&state); + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (LastDir, &state); + menu->data = state.entry; + menu->current = 0; + menu->top = 0; + init_menu (&state, menu, title, sizeof (title), buffy); + MAYBE_REDRAW (menu->redraw); + } + break; + + case OP_DELETE_MAILBOX: + if (!state.entry[menu->current].imap) + mutt_error (_("Delete is only supported for IMAP mailboxes")); + else + { + char msg[SHORT_STRING]; + IMAP_MBOX mx; + int nentry = menu->current; + + imap_parse_path (state.entry[nentry].name, &mx); + snprintf (msg, sizeof (msg), _("Really delete mailbox \"%s\"?"), + mx.mbox); + if (mutt_yesorno (msg, M_NO) == M_YES) + { + if (!imap_delete_mailbox (Context, mx)) + { + /* free the mailbox from the browser */ + FREE (&((state.entry)[nentry].name)); + FREE (&((state.entry)[nentry].desc)); + /* and move all other entries up */ + if (nentry+1 < state.entrylen) + memmove (state.entry + nentry, state.entry + nentry + 1, + sizeof (struct folder_file) * (state.entrylen - (nentry+1))); + state.entrylen--; + mutt_message _("Mailbox deleted."); + init_menu (&state, menu, title, sizeof (title), buffy); + MAYBE_REDRAW (menu->redraw); + } + } + else + mutt_message _("Mailbox not deleted."); + FREE (&mx.mbox); + } + break; +#endif + + case OP_CHANGE_DIRECTORY: + +#ifdef USE_NNTP + if (option (OPTNEWS)) + break; +#endif + + strfcpy (buf, LastDir, sizeof (buf)); +#ifdef USE_IMAP + if (!state.imap_browse) +#endif + { + /* add '/' at the end of the directory name if not already there */ + int len=mutt_strlen(LastDir); + if (len && LastDir[len-1] != '/' && sizeof (buf) > len) + buf[len]='/'; + } + + if (mutt_get_field (_("Chdir to: "), buf, sizeof (buf), M_FILE) == 0 && + buf[0]) + { + buffy = 0; + mutt_expand_path (buf, sizeof (buf)); +#ifdef USE_IMAP + if (mx_is_imap (buf)) + { + strfcpy (LastDir, buf, sizeof (LastDir)); + destroy_state (&state); + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (LastDir, &state); + menu->data = state.entry; + menu->current = 0; + menu->top = 0; + init_menu (&state, menu, title, sizeof (title), buffy); + } + else +#endif + if (stat (buf, &st) == 0) + { + if (S_ISDIR (st.st_mode)) + { + strfcpy (LastDir, buf, sizeof (LastDir)); + destroy_state (&state); + if (examine_directory (menu, &state, LastDir, prefix) == 0) + { + menu->current = 0; + menu->top = 0; + init_menu (&state, menu, title, sizeof (title), buffy); + } + else + { + mutt_error _("Error scanning directory."); + destroy_state (&state); + mutt_menuDestroy (&menu); + goto bail; + } + } + else + mutt_error (_("%s is not a directory."), buf); + } + else + mutt_perror (buf); + } + MAYBE_REDRAW (menu->redraw); + break; + + case OP_ENTER_MASK: + + strfcpy (buf, NONULL(Mask.pattern), sizeof (buf)); + if (mutt_get_field (_("File Mask: "), buf, sizeof (buf), 0) == 0) + { + regex_t *rx = (regex_t *) safe_malloc (sizeof (regex_t)); + char *s = buf; + int not = 0, err; + + buffy = 0; + /* assume that the user wants to see everything */ + if (!buf[0]) + strfcpy (buf, ".", sizeof (buf)); + SKIPWS (s); + if (*s == '!') + { + s++; + SKIPWS (s); + not = 1; + } + + if ((err = REGCOMP (rx, s, REG_NOSUB)) != 0) + { + regerror (err, rx, buf, sizeof (buf)); + regfree (rx); + FREE (&rx); + mutt_error ("%s", buf); + } + else + { + mutt_str_replace (&Mask.pattern, buf); + regfree (Mask.rx); + FREE (&Mask.rx); + Mask.rx = rx; + Mask.not = not; + + destroy_state (&state); +#ifdef USE_IMAP + if (state.imap_browse) + { + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (LastDir, &state); + menu->data = state.entry; + init_menu (&state, menu, title, sizeof (title), buffy); + } + else +#endif + if (examine_directory (menu, &state, LastDir, NULL) == 0) + init_menu (&state, menu, title, sizeof (title), buffy); + else + { + mutt_error _("Error scanning directory."); + mutt_menuDestroy (&menu); + goto bail; + } + killPrefix = 0; + if (!state.entrylen) + { + mutt_error _("No files match the file mask"); + break; + } + } + } + MAYBE_REDRAW (menu->redraw); + break; + + case OP_SORT: + case OP_SORT_REVERSE: + + { + int resort = 1; + int reverse = (i == OP_SORT_REVERSE); + + switch (mutt_multi_choice ((reverse) ? + _("Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? ") : + _("Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? "), + _("dazn"))) + { + case -1: /* abort */ + resort = 0; + break; + + case 1: /* (d)ate */ + BrowserSort = SORT_DATE; + break; + + case 2: /* (a)lpha */ + BrowserSort = SORT_SUBJECT; + break; + + case 3: /* si(z)e */ + BrowserSort = SORT_SIZE; + break; + + case 4: /* do(n)'t sort */ + BrowserSort = SORT_ORDER; + resort = 0; + break; + } + if (resort) + { + BrowserSort |= reverse ? SORT_REVERSE : 0; + browser_sort (&state); + menu->redraw = REDRAW_FULL; + } + break; + } + + case OP_TOGGLE_MAILBOXES: + buffy = 1 - buffy; + + case OP_CHECK_NEW: + destroy_state (&state); + prefix[0] = 0; + killPrefix = 0; + + if (buffy) + { + if (examine_mailboxes (menu, &state) == -1) + goto bail; + } +#ifdef USE_IMAP + else if (mx_is_imap (LastDir)) + { + init_state (&state, NULL); + state.imap_browse = 1; + imap_browse (LastDir, &state); + menu->data = state.entry; + } +#endif + else if (examine_directory (menu, &state, LastDir, prefix) == -1) + goto bail; + init_menu (&state, menu, title, sizeof (title), buffy); + break; + + case OP_BUFFY_LIST: + mutt_buffy_list (); + break; + + case OP_BROWSER_NEW_FILE: + + snprintf (buf, sizeof (buf), "%s/", LastDir); + if (mutt_get_field (_("New file name: "), buf, sizeof (buf), M_FILE) == 0) + { + strfcpy (f, buf, flen); + destroy_state (&state); + mutt_menuDestroy (&menu); + goto bail; + } + MAYBE_REDRAW (menu->redraw); + break; + + case OP_BROWSER_VIEW_FILE: + if (!state.entrylen) + { + mutt_error _("No files match the file mask"); + break; + } + +#ifdef USE_IMAP + if (state.entry[menu->current].selectable) + { + strfcpy (f, state.entry[menu->current].name, flen); + destroy_state (&state); + mutt_menuDestroy (&menu); + goto bail; + } + else +#endif + if (S_ISDIR (state.entry[menu->current].mode) || + (S_ISLNK (state.entry[menu->current].mode) && + link_is_dir (LastDir, state.entry[menu->current].name))) + { + mutt_error _("Can't view a directory"); + break; + } + else + { + BODY *b; + char buf[_POSIX_PATH_MAX]; + + mutt_concat_path (buf, LastDir, state.entry[menu->current].name, sizeof (buf)); + b = mutt_make_file_attach (buf); + if (b != NULL) + { + mutt_view_attachment (NULL, b, M_REGULAR, NULL, NULL, 0); + mutt_free_body (&b); + menu->redraw = REDRAW_FULL; + } + else + mutt_error _("Error trying to view file"); + } + break; + +#ifdef USE_NNTP + case OP_CATCHUP: + case OP_UNCATCHUP: + if (option (OPTNEWS)) + { + struct folder_file *f = &state.entry[menu->current]; + NNTP_DATA *nd; + + if (i == OP_CATCHUP) + nd = mutt_newsgroup_catchup (CurrentNewsSrv, f->name); + else + nd = mutt_newsgroup_uncatchup (CurrentNewsSrv, f->name); + + if (nd) + { +/* FOLDER folder; + struct folder_file ff; + char buffer[_POSIX_PATH_MAX + SHORT_STRING]; + + folder.ff = &ff; + folder.ff->name = f->name; + folder.ff->st = NULL; + folder.ff->is_new = nd->new; + folder.ff->nd = nd; + FREE (&f->desc); + mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat), + newsgroup_format_str, (unsigned long) &folder, + M_FORMAT_ARROWCURSOR); + f->desc = safe_strdup (buffer); */ + if (menu->current + 1 < menu->max) + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + } + break; + + case OP_LOAD_ACTIVE: + if (!option (OPTNEWS)) + break; + + { + LIST *tmp; + NNTP_DATA *data; + + for (tmp = CurrentNewsSrv->list; tmp; tmp = tmp->next) + { + if ((data = (NNTP_DATA *)tmp->data)) + data->deleted = 1; + } + } + nntp_get_active (CurrentNewsSrv); + + destroy_state (&state); + if (buffy) + examine_mailboxes (menu, &state); + else + examine_directory (menu, &state, NULL, NULL); + init_menu (&state, menu, title, sizeof (title), buffy); + break; +#endif /* USE_NNTP */ + +#if defined USE_IMAP || defined USE_NNTP + case OP_BROWSER_SUBSCRIBE: + case OP_BROWSER_UNSUBSCRIBE: +#endif +#ifdef USE_NNTP + case OP_SUBSCRIBE_PATTERN: + case OP_UNSUBSCRIBE_PATTERN: + if (option (OPTNEWS)) + { + regex_t *rx = (regex_t *) safe_malloc (sizeof (regex_t)); + char *s = buf; + int j = menu->current; + NNTP_DATA *nd; + NNTP_SERVER *news = CurrentNewsSrv; + + if (i == OP_SUBSCRIBE_PATTERN || i == OP_UNSUBSCRIBE_PATTERN) + { + char tmp[STRING]; + int err; + + buf[0] = 0; + if (i == OP_SUBSCRIBE_PATTERN) + snprintf (tmp, sizeof (tmp), _("Subscribe pattern: ")); + else + snprintf (tmp, sizeof (tmp), _("Unsubscribe pattern: ")); + if (mutt_get_field (tmp, buf, sizeof (buf), 0) != 0 || !buf[0]) + { + FREE (&rx); + break; + } + + if ((err = REGCOMP (rx, s, REG_NOSUB)) != 0) + { + regerror (err, rx, buf, sizeof (buf)); + regfree (rx); + FREE (&rx); + mutt_error ("%s", buf); + break; + } + menu->redraw = REDRAW_FULL; + j = 0; + } + else if (!state.entrylen) + { + mutt_error _("No newsgroups match the mask"); + break; + } + + for ( ; j < state.entrylen; j++) + { + struct folder_file *f = &state.entry[j]; + + if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE || + regexec (rx, f->name, 0, NULL, 0) == 0) + { + if (i == OP_BROWSER_SUBSCRIBE || i == OP_SUBSCRIBE_PATTERN) + nd = mutt_newsgroup_subscribe (news, f->name); + else + nd = mutt_newsgroup_unsubscribe (news, f->name); +/* if (nd) + { + FOLDER folder; + char buffer[_POSIX_PATH_MAX + SHORT_STRING]; + + folder.name = f->name; + folder.f = NULL; + folder.new = nd->new; + folder.nd = nd; + FREE (&f->desc); + mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat), + newsgroup_format_str, (unsigned long) &folder, + M_FORMAT_ARROWCURSOR); + f->desc = safe_strdup (buffer); + } */ + } + if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE) + { + if (menu->current + 1 < menu->max) + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + break; + } + } + if (i == OP_SUBSCRIBE_PATTERN) + { + LIST *grouplist = NULL; + + if (news) + grouplist = news->list; + for (; grouplist; grouplist = grouplist->next) + { + nd = (NNTP_DATA *) grouplist->data; + if (nd && nd->group && !nd->subscribed) + { + if (regexec (rx, nd->group, 0, NULL, 0) == 0) + { + mutt_newsgroup_subscribe (news, nd->group); + add_folder (menu, &state, nd->group, NULL, nd, nd->new); + } + } + } + init_menu (&state, menu, title, sizeof (title), buffy); + } + mutt_newsrc_update (news); + nntp_clear_cacheindex (news); + if (i != OP_BROWSER_SUBSCRIBE && i != OP_BROWSER_UNSUBSCRIBE) + regfree (rx); + FREE (&rx); + } +#ifdef USE_IMAP + else +#endif /* USE_IMAP && USE_NNTP */ +#endif /* USE_NNTP */ +#ifdef USE_IMAP + { + if (i == OP_BROWSER_SUBSCRIBE) + imap_subscribe (state.entry[menu->current].name, 1); + else + imap_subscribe (state.entry[menu->current].name, 0); + } +#endif /* USE_IMAP */ + } + } + + bail: + + if (!folder) + strfcpy (LastDir, LastDirBackup, sizeof (LastDir)); + +} diff --git a/browser.h b/browser.h new file mode 100644 index 0000000..dbc5726 --- /dev/null +++ b/browser.h @@ -0,0 +1,65 @@ +/* $Id: browser.h,v 3.1 2002/12/11 11:19:39 roessler Exp $ */ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _BROWSER_H +#define _BROWSER_H 1 + +#ifdef USE_NNTP +#include "nntp.h" +#endif + +struct folder_file +{ + mode_t mode; + off_t size; + time_t mtime; + struct stat *st; + + char *name; + char *desc; + + unsigned short new; +#ifdef USE_IMAP + char delim; + + unsigned imap : 1; + unsigned selectable : 1; + unsigned inferiors : 1; +#endif +#ifdef USE_NNTP + NNTP_DATA *nd; +#endif + unsigned tagged : 1; +}; + +struct browser_state +{ + struct folder_file *entry; + unsigned int entrylen; /* number of real entries */ + unsigned int entrymax; /* max entry */ +#ifdef USE_IMAP + short imap_browse; + char *folder; + unsigned noselect : 1; + unsigned marked : 1; + unsigned unmarked : 1; +#endif +}; + +#endif /* _BROWSER_H */ diff --git a/buffy.c b/buffy.c new file mode 100644 index 0000000..334a164 --- /dev/null +++ b/buffy.c @@ -0,0 +1,561 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "buffy.h" +#include "mailbox.h" +#include "mx.h" + +#include "mutt_curses.h" + +#ifdef USE_IMAP +#include "imap.h" +#endif + +#include +#include +#include +#include +#include +#include + +#include + +static time_t BuffyTime = 0; /* last time we started checking for mail */ +time_t BuffyDoneTime = 0; /* last time we knew for sure how much mail there was. */ +static short BuffyCount = 0; /* how many boxes with new mail */ +static short BuffyNotify = 0; /* # of unnotified new boxes */ + +#ifdef BUFFY_SIZE + +/* Find the last message in the file. + * upon success return 0. If no message found - return -1 */ + +int fseek_last_message (FILE * f) +{ + long int pos; + char buffer[BUFSIZ + 9]; /* 7 for "\n\nFrom " */ + int bytes_read; + int i; /* Index into `buffer' for scanning. */ + + memset (buffer, 0, sizeof(buffer)); + fseek (f, 0, SEEK_END); + pos = ftell (f); + + /* Set `bytes_read' to the size of the last, probably partial, buffer; 0 < + * `bytes_read' <= `BUFSIZ'. */ + bytes_read = pos % BUFSIZ; + if (bytes_read == 0) + bytes_read = BUFSIZ; + /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all + * reads will be on block boundaries, which might increase efficiency. */ + while ((pos -= bytes_read) >= 0) + { + /* we save in the buffer at the end the first 7 chars from the last read */ + strncpy (buffer + BUFSIZ, buffer, 5+2); /* 2 == 2 * mutt_strlen(CRLF) */ + fseek (f, pos, SEEK_SET); + bytes_read = fread (buffer, sizeof (char), bytes_read, f); + if (bytes_read == -1) + return -1; + for (i = bytes_read; --i >= 0;) + if (!mutt_strncmp (buffer + i, "\n\nFrom ", mutt_strlen ("\n\nFrom "))) + { /* found it - go to the beginning of the From */ + fseek (f, pos + i + 2, SEEK_SET); + return 0; + } + bytes_read = BUFSIZ; + } + + /* here we are at the beginning of the file */ + if (!mutt_strncmp ("From ", buffer, 5)) + { + fseek (f, 0, 0); + return (0); + } + + return (-1); +} + +/* Return 1 if the last message is new */ +int test_last_status_new (FILE * f) +{ + HEADER *hdr; + ENVELOPE* tmp_envelope; + int result = 0; + + if (fseek_last_message (f) == -1) + return (0); + + hdr = mutt_new_header (); + tmp_envelope = mutt_read_rfc822_header (f, hdr, 0, 0); + if (!(hdr->read || hdr->old)) + result = 1; + + mutt_free_envelope(&tmp_envelope); + mutt_free_header (&hdr); + + return result; +} + +int test_new_folder (const char *path) +{ + FILE *f; + int rc = 0; + int typ; + + typ = mx_get_magic (path); + + if (typ != M_MBOX && typ != M_MMDF) + return 0; + + if ((f = fopen (path, "rb"))) + { + rc = test_last_status_new (f); + fclose (f); + } + + return rc; +} + +BUFFY *mutt_find_mailbox (const char *path) +{ + BUFFY *tmp = NULL; + struct stat sb; + struct stat tmp_sb; + + if (stat (path,&sb) != 0) + return NULL; + + for (tmp = Incoming; tmp; tmp = tmp->next) + { + if (stat (tmp->path,&tmp_sb) ==0 && + sb.st_dev == tmp_sb.st_dev && sb.st_ino == tmp_sb.st_ino) + break; + } + return tmp; +} + +void mutt_update_mailbox (BUFFY * b) +{ + struct stat sb; + + if (!b) + return; + + if (stat (b->path, &sb) == 0) + b->size = (long) sb.st_size; + else + b->size = 0; + return; +} +#endif + +int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, unsigned long data, BUFFER *err) +{ + BUFFY **tmp,*tmp1; + char buf[_POSIX_PATH_MAX]; +#ifdef BUFFY_SIZE + struct stat sb; +#endif /* BUFFY_SIZE */ + + while (MoreArgs (s)) + { + mutt_extract_token (path, s, 0); + strfcpy (buf, path->data, sizeof (buf)); + + if(data == M_UNMAILBOXES && mutt_strcmp(buf,"*") == 0) + { + for (tmp = &Incoming; *tmp;) + { + FREE (&((*tmp)->path)); + tmp1=(*tmp)->next; + FREE (tmp); + *tmp=tmp1; + } + return 0; + } + + mutt_expand_path (buf, sizeof (buf)); + + /* Skip empty tokens. */ + if(!*buf) continue; + + /* simple check to avoid duplicates */ + for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next)) + { + if (mutt_strcmp (buf, (*tmp)->path) == 0) + break; + } + + if(data == M_UNMAILBOXES) + { + if(*tmp) + { + FREE (&((*tmp)->path)); + tmp1=(*tmp)->next; + FREE (tmp); + *tmp=tmp1; + } + continue; + } + + if (!*tmp) + { + *tmp = (BUFFY *) safe_calloc (1, sizeof (BUFFY)); + (*tmp)->path = safe_strdup (buf); + (*tmp)->next = NULL; + /* it is tempting to set magic right here */ + (*tmp)->magic = 0; + + } + + (*tmp)->new = 0; + (*tmp)->notified = 1; + (*tmp)->newly_created = 0; + +#ifdef BUFFY_SIZE + /* for buffy_size, it is important that if the folder is new (tested by + * reading it), the size is set to 0 so that later when we check we see + * that it increased . without buffy_size we probably don't care. + */ + if (stat ((*tmp)->path, &sb) == 0 && !test_new_folder ((*tmp)->path)) + { + /* some systems out there don't have an off_t type */ + (*tmp)->size = (long) sb.st_size; + } + else + (*tmp)->size = 0; +#endif /* BUFFY_SIZE */ + } + return 0; +} + +#ifdef BUFFY_SIZE +/* people use buffy_size on systems where modified time attributes are BADLY + * broken. Ignore them. + */ +#define STAT_CHECK (sb.st_size > tmp->size) +#else +#define STAT_CHECK (sb.st_mtime > sb.st_atime || (tmp->newly_created && sb.st_ctime == sb.st_mtime && sb.st_ctime == sb.st_atime)) +#endif /* BUFFY_SIZE */ + +int mutt_buffy_check (int force) +{ + BUFFY *tmp; + struct stat sb; + struct dirent *de; + DIR *dirp; + char path[_POSIX_PATH_MAX]; + struct stat contex_sb; + time_t t; + +#ifdef USE_IMAP + /* update postponed count as well, on force */ + if (force) + mutt_update_num_postponed (); +#endif + + /* fastest return if there are no mailboxes */ + if (!Incoming) + return 0; + t = time (NULL); + if (!force && (t - BuffyTime < BuffyTimeout)) + return BuffyCount; + + BuffyTime = t; + BuffyCount = 0; + BuffyNotify = 0; + +#ifdef USE_IMAP + if (!Context || Context->magic != M_IMAP) +#endif +#ifdef USE_POP + if (!Context || Context->magic != M_POP) +#endif +#ifdef USE_NNTP + if (!Context || Context->magic != M_NNTP) +#endif + /* check device ID and serial number instead of comparing paths */ + if (!Context || !Context->path || stat (Context->path, &contex_sb) != 0) + { + contex_sb.st_dev=0; + contex_sb.st_ino=0; + } + + for (tmp = Incoming; tmp; tmp = tmp->next) + { + tmp->new = 0; + +#ifdef USE_IMAP + if (mx_is_imap (tmp->path)) + tmp->magic = M_IMAP; + else +#endif +#ifdef USE_POP + if (mx_is_pop (tmp->path)) + tmp->magic = M_POP; + else +#endif +#ifdef USE_NNTP + if ((tmp->magic == M_NNTP) || mx_is_nntp (tmp->path)) + tmp->magic = M_NNTP; + else +#endif + if (stat (tmp->path, &sb) != 0 || sb.st_size == 0 || + (!tmp->magic && (tmp->magic = mx_get_magic (tmp->path)) <= 0)) + { + /* if the mailbox still doesn't exist, set the newly created flag to + * be ready for when it does. */ + tmp->newly_created = 1; + tmp->magic = 0; +#ifdef BUFFY_SIZE + tmp->size = 0; +#endif + continue; + } + + /* check to see if the folder is the currently selected folder + * before polling */ + if (!Context || !Context->path || + ( + (0 +#ifdef USE_IMAP + || tmp->magic == M_IMAP +#endif +#ifdef USE_POP + || tmp->magic == M_POP +#endif +#ifdef USE_NNTP + || tmp->magic == M_NNTP +#endif + ) ? mutt_strcmp (tmp->path, Context->path) : + (sb.st_dev != contex_sb.st_dev || sb.st_ino != contex_sb.st_ino) + ) + ) + { + switch (tmp->magic) + { + case M_MBOX: + case M_MMDF: + + if (STAT_CHECK) + { + BuffyCount++; + tmp->new = 1; + } +#ifdef BUFFY_SIZE + else + { + /* some other program has deleted mail from the folder */ + tmp->size = (long) sb.st_size; + } +#endif + if (tmp->newly_created && + (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) + tmp->newly_created = 0; + + break; + + case M_MAILDIR: + + snprintf (path, sizeof (path), "%s/new", tmp->path); + if ((dirp = opendir (path)) == NULL) + { + tmp->magic = 0; + break; + } + while ((de = readdir (dirp)) != NULL) + { + char *p; + if (*de->d_name != '.' && + (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) + { + /* one new and undeleted message is enough */ + BuffyCount++; + tmp->new = 1; + break; + } + } + closedir (dirp); + break; + + case M_MH: + if ((tmp->new = mh_buffy (tmp->path)) > 0) + BuffyCount++; + break; + +#ifdef USE_IMAP + case M_IMAP: + if ((tmp->new = imap_mailbox_check (tmp->path, 1)) > 0) + BuffyCount++; + else + tmp->new = 0; + + break; +#endif + +#ifdef USE_POP + case M_POP: + break; +#endif + +#ifdef USE_NNTP + case M_NNTP: + break; +#endif + } + } +#ifdef BUFFY_SIZE + else if (Context && Context->path) + tmp->size = (long) sb.st_size; /* update the size */ +#endif + + if (!tmp->new) + tmp->notified = 0; + else if (!tmp->notified) + BuffyNotify++; + } + + BuffyDoneTime = BuffyTime; + return (BuffyCount); +} + +int mutt_buffy_list (void) +{ + BUFFY *tmp; + char path[_POSIX_PATH_MAX]; + char buffylist[160]; + int pos; + int first; + + int have_unnotified = BuffyNotify; + + pos = 0; + first = 1; + buffylist[0] = 0; + pos += strlen (strncat (buffylist, _("New mail in "), sizeof (buffylist) - 1 - pos)); + for (tmp = Incoming; tmp; tmp = tmp->next) + { + /* Is there new mail in this mailbox? */ + if (!tmp->new || (have_unnotified && tmp->notified)) + continue; + + strfcpy (path, tmp->path, sizeof (path)); + mutt_pretty_mailbox (path); + + if (!first && pos + strlen (path) >= COLS - 7) + break; + + if (!first) + pos += strlen (strncat(buffylist + pos, ", ", sizeof(buffylist)-1-pos)); + + /* Prepend an asterisk to mailboxes not already notified */ + if (!tmp->notified) + { + /* pos += strlen (strncat(buffylist + pos, "*", sizeof(buffylist)-1-pos)); */ + tmp->notified = 1; + BuffyNotify--; + } + pos += strlen (strncat(buffylist + pos, path, sizeof(buffylist)-1-pos)); + first = 0; + } + if (!first && tmp) + { + strncat (buffylist + pos, ", ...", sizeof (buffylist) - 1 - pos); + } + if (!first) + { + mutt_message ("%s", buffylist); + return (1); + } + /* there were no mailboxes needing to be notified, so clean up since + * BuffyNotify has somehow gotten out of sync + */ + BuffyNotify = 0; + return (0); +} + +int mutt_buffy_notify (void) +{ + if (mutt_buffy_check (0) && BuffyNotify) + { + return (mutt_buffy_list ()); + } + return (0); +} + +/* + * mutt_buffy() -- incoming folders completion routine + * + * given a folder name, this routine gives the next incoming folder with new + * new mail. + */ +void mutt_buffy (char *s, size_t slen) +{ + int count; + BUFFY *tmp = Incoming; + + mutt_expand_path (s, _POSIX_PATH_MAX); + switch (mutt_buffy_check (0)) + { + case 0: + + *s = '\0'; + break; + + case 1: + + while (tmp && !tmp->new) + tmp = tmp->next; + if (!tmp) + { + *s = '\0'; + mutt_buffy_check (1); /* buffy was wrong - resync things */ + break; + } + strfcpy (s, tmp->path, slen); + mutt_pretty_mailbox (s); + break; + + default: + + count = 0; + while (count < 3) + { + if (mutt_strcmp (s, tmp->path) == 0) + count++; + else if (count && tmp->new) + break; + tmp = tmp->next; + if (!tmp) + { + tmp = Incoming; + count++; + } + } + if (count >= 3) + { + *s = '\0'; + mutt_buffy_check (1); /* buffy was wrong - resync things */ + break; + } + strfcpy (s, tmp->path, slen); + mutt_pretty_mailbox (s); + break; + } +} diff --git a/buffy.h b/buffy.h new file mode 100644 index 0000000..e04e7c5 --- /dev/null +++ b/buffy.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/*parameter to mutt_parse_mailboxes*/ +#define M_MAILBOXES 1 +#define M_UNMAILBOXES 2 + +typedef struct buffy_t +{ + char *path; +#ifdef BUFFY_SIZE + long size; +#endif /* BUFFY_SIZE */ + struct buffy_t *next; + short new; /* mailbox has new mail */ + short notified; /* user has been notified */ + short magic; /* mailbox type */ + short newly_created; /* mbox or mmdf just popped into existence */ +} +BUFFY; + +WHERE BUFFY *Incoming INITVAL (0); +WHERE short BuffyTimeout INITVAL (3); + +extern time_t BuffyDoneTime; /* last time we knew for sure how much mail there was */ + +#ifdef BUFFY_SIZE +BUFFY *mutt_find_mailbox (const char *path); +void mutt_update_mailbox (BUFFY * b); +#endif diff --git a/charset.c b/charset.c new file mode 100644 index 0000000..19c3a2b --- /dev/null +++ b/charset.c @@ -0,0 +1,583 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "mutt.h" +#include "charset.h" + +#ifndef EILSEQ +# define EILSEQ EINVAL +#endif + +/* + * The following list has been created manually from the data under: + * http://www.isi.edu/in-notes/iana/assignments/character-sets + * Last update: 2000-09-07 + * + * Note that it includes only the subset of character sets for which + * a preferred MIME name is given. + */ + +static struct +{ + char *key; + char *pref; +} +PreferredMIMENames[] = +{ + { "ansi_x3.4-1968", "us-ascii" }, + { "iso-ir-6", "us-ascii" }, + { "iso_646.irv:1991", "us-ascii" }, + { "ascii", "us-ascii" }, + { "iso646-us", "us-ascii" }, + { "us", "us-ascii" }, + { "ibm367", "us-ascii" }, + { "cp367", "us-ascii" }, + { "csASCII", "us-ascii" }, + + { "csISO2022KR", "iso-2022-kr" }, + { "csEUCKR", "euc-kr" }, + { "csISO2022JP", "iso-2022-jp" }, + { "csISO2022JP2", "iso-2022-jp-2" }, + + { "ISO_8859-1:1987", "iso-8859-1" }, + { "iso-ir-100", "iso-8859-1" }, + { "iso_8859-1", "iso-8859-1" }, + { "latin1", "iso-8859-1" }, + { "l1", "iso-8859-1" }, + { "IBM819", "iso-8859-1" }, + { "CP819", "iso-8859-1" }, + { "csISOLatin1", "iso-8859-1" }, + + { "ISO_8859-2:1987", "iso-8859-2" }, + { "iso-ir-101", "iso-8859-2" }, + { "iso_8859-2", "iso-8859-2" }, + { "latin2", "iso-8859-2" }, + { "l2", "iso-8859-2" }, + { "csISOLatin2", "iso-8859-2" }, + + { "ISO_8859-3:1988", "iso-8859-3" }, + { "iso-ir-109", "iso-8859-3" }, + { "ISO_8859-3", "iso-8859-3" }, + { "latin3", "iso-8859-3" }, + { "l3", "iso-8859-3" }, + { "csISOLatin3", "iso-8859-3" }, + + { "ISO_8859-4:1988", "iso-8859-4" }, + { "iso-ir-110", "iso-8859-4" }, + { "ISO_8859-4", "iso-8859-4" }, + { "latin4", "iso-8859-4" }, + { "l4", "iso-8859-4" }, + { "csISOLatin4", "iso-8859-4" }, + + { "ISO_8859-6:1987", "iso-8859-6" }, + { "iso-ir-127", "iso-8859-6" }, + { "iso_8859-6", "iso-8859-6" }, + { "ECMA-114", "iso-8859-6" }, + { "ASMO-708", "iso-8859-6" }, + { "arabic", "iso-8859-6" }, + { "csISOLatinArabic", "iso-8859-6" }, + + { "ISO_8859-7:1987", "iso-8859-7" }, + { "iso-ir-126", "iso-8859-7" }, + { "ISO_8859-7", "iso-8859-7" }, + { "ELOT_928", "iso-8859-7" }, + { "ECMA-118", "iso-8859-7" }, + { "greek", "iso-8859-7" }, + { "greek8", "iso-8859-7" }, + { "csISOLatinGreek", "iso-8859-7" }, + + { "ISO_8859-8:1988", "iso-8859-8" }, + { "iso-ir-138", "iso-8859-8" }, + { "ISO_8859-8", "iso-8859-8" }, + { "hebrew", "iso-8859-8" }, + { "csISOLatinHebrew", "iso-8859-8" }, + + { "ISO_8859-5:1988", "iso-8859-5" }, + { "iso-ir-144", "iso-8859-5" }, + { "ISO_8859-5", "iso-8859-5" }, + { "cyrillic", "iso-8859-5" }, + { "csISOLatinCyrillic", "iso8859-5" }, + + { "ISO_8859-9:1989", "iso-8859-9" }, + { "iso-ir-148", "iso-8859-9" }, + { "ISO_8859-9", "iso-8859-9" }, + { "latin5", "iso-8859-9" }, /* this is not a bug */ + { "l5", "iso-8859-9" }, + { "csISOLatin5", "iso-8859-9" }, + + { "ISO_8859-10:1992", "iso-8859-10" }, + { "iso-ir-157", "iso-8859-10" }, + { "latin6", "iso-8859-10" }, /* this is not a bug */ + { "l6", "iso-8859-10" }, + { "csISOLatin6" "iso-8859-10" }, + + { "csKOI8r", "koi8-r" }, + + { "MS_Kanji", "Shift_JIS" }, /* Note the underscore! */ + { "csShiftJis", "Shift_JIS" }, + + { "Extended_UNIX_Code_Packed_Format_for_Japanese", + "EUC-JP" }, + { "csEUCPkdFmtJapanese", + "EUC-JP" }, + + { "csGB2312", "gb2312" }, + { "csbig5", "big5" }, + + /* + * End of official brain damage. What follows has been taken + * from glibc's localedata files. + */ + + { "iso_8859-13", "iso-8859-13" }, + { "iso-ir-179", "iso-8859-13" }, + { "latin7", "iso-8859-13" }, /* this is not a bug */ + { "l7", "iso-8859-13" }, + + { "iso_8859-14", "iso-8859-14" }, + { "latin8", "iso-8859-14" }, /* this is not a bug */ + { "l8", "iso-8859-14" }, + + { "iso_8859-15", "iso-8859-15" }, + { "latin9", "iso-8859-15" }, /* this is not a bug */ + + /* Suggested by Ionel Mugurel Ciobica */ + { "latin0", "iso-8859-15" }, /* this is not a bug */ + + { "iso_8859-16", "iso-8859-16" }, + { "latin10", "iso-8859-16" }, /* this is not a bug */ + + /* + * David Champion has observed this with + * nl_langinfo under SunOS 5.8. + */ + + { "646", "us-ascii" }, + + /* + * http://www.sun.com/software/white-papers/wp-unicode/ + */ + + { "eucJP", "euc-jp" }, + { "PCK", "Shift_JIS" }, + { "ko_KR-euc", "euc-kr" }, + { "zh_TW-big5", "big5" }, + + /* seems to be common on some systems */ + + { "sjis", "Shift_JIS" }, + + + /* + * If you happen to encounter system-specific brain-damage with + * respect to character set naming, please add it above this + * comment, and submit a patch to . + */ + + /* End of aliases. Please keep this line last. */ + + { NULL, NULL } +}; + +#ifdef HAVE_LANGINFO_CODESET +# include + + +void mutt_set_langinfo_charset (void) +{ + char buff[LONG_STRING]; + char buff2[LONG_STRING]; + + strfcpy (buff, nl_langinfo (CODESET), sizeof (buff)); + mutt_canonical_charset (buff2, sizeof (buff2), buff); + + /* finally, set $charset */ + if (!(Charset = safe_strdup (buff2))) + Charset = safe_strdup ("iso-8859-1"); +} + +#else + +void mutt_set_langinfo_charset (void) +{ + Charset = safe_strdup ("iso-8859-1"); +} + +#endif + +void mutt_canonical_charset (char *dest, size_t dlen, const char *name) +{ + size_t i; + char *p; + char scratch[LONG_STRING]; + + /* catch some common iso-8859-something misspellings */ + if (!ascii_strncasecmp (name, "8859", 4) && name[4] != '-') + snprintf (scratch, sizeof (scratch), "iso-8859-%s", name +4); + else if (!ascii_strncasecmp (name, "8859-", 5)) + snprintf (scratch, sizeof (scratch), "iso-8859-%s", name + 5); + else if (!ascii_strncasecmp (name, "iso8859", 7) && name[7] != '-') + snprintf (scratch, sizeof (scratch), "iso_8859-%s", name + 7); + else if (!ascii_strncasecmp (name, "iso8859-", 8)) + snprintf (scratch, sizeof (scratch), "iso_8859-%s", name + 8); + else + strfcpy (scratch, NONULL(name), sizeof (scratch)); + + for (i = 0; PreferredMIMENames[i].key; i++) + if (!ascii_strcasecmp (scratch, PreferredMIMENames[i].key) || + !mutt_strcasecmp (scratch, PreferredMIMENames[i].key)) + { + strfcpy (dest, PreferredMIMENames[i].pref, dlen); + return; + } + + strfcpy (dest, scratch, dlen); + + /* for cosmetics' sake, transform to lowercase. */ + for (p = dest; *p; p++) + *p = ascii_tolower (*p); +} + +int mutt_chscmp (const char *s, const char *chs) +{ + char buffer[STRING]; + + if (!s) return 0; + + mutt_canonical_charset (buffer, sizeof (buffer), s); + return !ascii_strcasecmp (buffer, chs); +} + + +#ifndef HAVE_ICONV + +iconv_t iconv_open (const char *tocode, const char *fromcode) +{ + return (iconv_t)(-1); +} + +size_t iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft) +{ + return 0; +} + +int iconv_close (iconv_t cd) +{ + return 0; +} + +#endif /* !HAVE_ICONV */ + + +/* + * Like iconv_open, but canonicalises the charsets + */ + +iconv_t mutt_iconv_open (const char *tocode, const char *fromcode, int flags) +{ + char tocode1[SHORT_STRING]; + char fromcode1[SHORT_STRING]; + char *tocode2, *fromcode2; + char *tmp; + + iconv_t cd; + + mutt_canonical_charset (tocode1, sizeof (tocode1), tocode); + +#ifdef M_ICONV_HOOK_TO + /* Not used. */ + if ((flags & M_ICONV_HOOK_TO) && (tmp = mutt_charset_hook (tocode1))) + mutt_canonical_charset (tocode1, sizeof (tocode1), tmp); +#endif + + mutt_canonical_charset (fromcode1, sizeof (fromcode1), fromcode); + if ((flags & M_ICONV_HOOK_FROM) && (tmp = mutt_charset_hook (fromcode1))) + mutt_canonical_charset (fromcode1, sizeof (fromcode1), tmp); + + if ((cd = iconv_open (tocode1, fromcode1)) != (iconv_t) -1) + return cd; + if ((tocode2 = mutt_iconv_hook (tocode1)) && (fromcode2 = mutt_iconv_hook (fromcode1))) + return iconv_open (tocode2, fromcode2); + + return (iconv_t) -1; +} + + +/* + * Like iconv, but keeps going even when the input is invalid + * If you're supplying inrepls, the source charset should be stateless; + * if you're supplying an outrepl, the target charset should be. + */ + +size_t mutt_iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft, + ICONV_CONST char **inrepls, const char *outrepl) +{ + size_t ret = 0, ret1; + ICONV_CONST char *ib = *inbuf; + size_t ibl = *inbytesleft; + char *ob = *outbuf; + size_t obl = *outbytesleft; + + for (;;) + { + ret1 = iconv (cd, &ib, &ibl, &ob, &obl); + if (ret1 != (size_t)-1) + ret += ret1; + if (ibl && obl && errno == EILSEQ) + { + if (inrepls) + { + /* Try replacing the input */ + ICONV_CONST char **t; + for (t = inrepls; *t; t++) + { + ICONV_CONST char *ib1 = *t; + size_t ibl1 = strlen (*t); + char *ob1 = ob; + size_t obl1 = obl; + iconv (cd, &ib1, &ibl1, &ob1, &obl1); + if (!ibl1) + { + ++ib, --ibl; + ob = ob1, obl = obl1; + ++ret; + break; + } + } + if (*t) + continue; + } + if (outrepl) + { + /* Try replacing the output */ + int n = strlen (outrepl); + if (n <= obl) + { + memcpy (ob, outrepl, n); + ++ib, --ibl; + ob += n, obl -= n; + ++ret; + continue; + } + } + } + *inbuf = ib, *inbytesleft = ibl; + *outbuf = ob, *outbytesleft = obl; + return ret; + } +} + + +/* + * Convert a string + * Used in rfc2047.c and rfc2231.c + */ + +int mutt_convert_string (char **ps, const char *from, const char *to, int flags) +{ + iconv_t cd; + ICONV_CONST char *repls[] = { "\357\277\275", "?", 0 }; + char *s = *ps; + + if (!s || !*s) + return 0; + + if (to && from && (cd = mutt_iconv_open (to, from, flags)) != (iconv_t)-1) + { + int len; + ICONV_CONST char *ib; + char *buf, *ob; + size_t ibl, obl; + ICONV_CONST char **inrepls = 0; + char *outrepl = 0; + + if (mutt_is_utf8 (to)) + outrepl = "\357\277\275"; + else if (mutt_is_utf8 (from)) + inrepls = repls; + else + outrepl = "?"; + + len = strlen (s); + ib = s, ibl = len + 1; + obl = MB_LEN_MAX * ibl; + ob = buf = safe_malloc (obl + 1); + + mutt_iconv (cd, &ib, &ibl, &ob, &obl, inrepls, outrepl); + iconv_close (cd); + + *ob = '\0'; + + FREE (ps); + *ps = buf; + + mutt_str_adjust (ps); + return 0; + } + else + return -1; +} + + +/* + * FGETCONV stuff for converting a file while reading it + * Used in sendlib.c for converting from mutt's Charset + */ + +struct fgetconv_s +{ + FILE *file; + iconv_t cd; + char bufi[512]; + char bufo[512]; + char *p; + char *ob; + char *ib; + size_t ibl; + ICONV_CONST char **inrepls; +}; + +struct fgetconv_not +{ + FILE *file; + iconv_t cd; +}; + +FGETCONV *fgetconv_open (FILE *file, const char *from, const char *to, int flags) +{ + struct fgetconv_s *fc; + iconv_t cd = (iconv_t)-1; + static ICONV_CONST char *repls[] = { "\357\277\275", "?", 0 }; + + if (from && to) + cd = mutt_iconv_open (to, from, flags); + + if (cd != (iconv_t)-1) + { + fc = safe_malloc (sizeof (struct fgetconv_s)); + fc->p = fc->ob = fc->bufo; + fc->ib = fc->bufi; + fc->ibl = 0; + fc->inrepls = mutt_is_utf8 (to) ? repls : repls + 1; + } + else + fc = safe_malloc (sizeof (struct fgetconv_not)); + fc->file = file; + fc->cd = cd; + return (FGETCONV *)fc; +} + +char *fgetconvs (char *buf, size_t l, FGETCONV *_fc) +{ + int c; + size_t r; + + for (r = 0; r + 1 < l;) + { + if ((c = fgetconv (_fc)) == EOF) + break; + buf[r++] = (char) c; + if (c == '\n') + break; + } + buf[r] = '\0'; + + if (r) + return buf; + else + return NULL; +} + +int fgetconv (FGETCONV *_fc) +{ + struct fgetconv_s *fc = (struct fgetconv_s *)_fc; + + if (!fc) + return EOF; + if (fc->cd == (iconv_t)-1) + return fgetc (fc->file); + if (!fc->p) + return EOF; + if (fc->p < fc->ob) + return (unsigned char)*(fc->p)++; + + /* Try to convert some more */ + fc->p = fc->ob = fc->bufo; + if (fc->ibl) + { + size_t obl = sizeof (fc->bufo); + iconv (fc->cd, (ICONV_CONST char **)&fc->ib, &fc->ibl, &fc->ob, &obl); + if (fc->p < fc->ob) + return (unsigned char)*(fc->p)++; + } + + /* If we trusted iconv a bit more, we would at this point + * ask why it had stopped converting ... */ + + /* Try to read some more */ + if (fc->ibl == sizeof (fc->bufi) || + (fc->ibl && fc->ib + fc->ibl < fc->bufi + sizeof (fc->bufi))) + { + fc->p = 0; + return EOF; + } + if (fc->ibl) + memcpy (fc->bufi, fc->ib, fc->ibl); + fc->ib = fc->bufi; + fc->ibl += fread (fc->ib + fc->ibl, 1, sizeof (fc->bufi) - fc->ibl, fc->file); + + /* Try harder this time to convert some */ + if (fc->ibl) + { + size_t obl = sizeof (fc->bufo); + mutt_iconv (fc->cd, (ICONV_CONST char **)&fc->ib, &fc->ibl, &fc->ob, &obl, + fc->inrepls, 0); + if (fc->p < fc->ob) + return (unsigned char)*(fc->p)++; + } + + /* Either the file has finished or one of the buffers is too small */ + fc->p = 0; + return EOF; +} + +void fgetconv_close (FGETCONV **_fc) +{ + struct fgetconv_s *fc = (struct fgetconv_s *) *_fc; + + if (fc->cd != (iconv_t)-1) + iconv_close (fc->cd); + FREE (_fc); +} diff --git a/charset.h b/charset.h new file mode 100644 index 0000000..cfc2ac5 --- /dev/null +++ b/charset.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _CHARSET_H +#define _CHARSET_H + +#ifdef HAVE_ICONV_H +#include +#endif + +#ifndef HAVE_ICONV_T_DEF +typedef void *iconv_t; +#endif + +#ifndef HAVE_ICONV +#define ICONV_CONST /**/ +iconv_t iconv_open (const char *, const char *); +size_t iconv (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *); +int iconv_close (iconv_t); +#endif + +int mutt_convert_string (char **, const char *, const char *, int); + +iconv_t mutt_iconv_open (const char *, const char *, int); +size_t mutt_iconv (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *, ICONV_CONST char **, const char *); + +typedef void * FGETCONV; + +FGETCONV *fgetconv_open (FILE *, const char *, const char *, int); +int fgetconv (FGETCONV *); +char * fgetconvs (char *, size_t, FGETCONV *); +void fgetconv_close (FGETCONV **); + +void mutt_set_langinfo_charset (void); + +#define M_ICONV_HOOK_FROM 1 +#define M_ICONV_HOOK_TO 2 + +#endif /* _CHARSET_H */ diff --git a/color.c b/color.c new file mode 100644 index 0000000..2d013e7 --- /dev/null +++ b/color.c @@ -0,0 +1,801 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mapping.h" + +#include +#include +#include + +/* globals */ +int *ColorQuote; +int ColorQuoteUsed; +int ColorDefs[MT_COLOR_MAX]; +COLOR_LINE *ColorHdrList = NULL; +COLOR_LINE *ColorBodyList = NULL; +COLOR_LINE *ColorIndexList = NULL; + +/* local to this file */ +static int ColorQuoteSize; + +#ifdef HAVE_COLOR + +#define COLOR_DEFAULT (-2) + +typedef struct color_list +{ + short fg; + short bg; + short index; + short count; + struct color_list *next; +} COLOR_LIST; + +static COLOR_LIST *ColorList = NULL; +static int UserColors = 0; + +static struct mapping_t Colors[] = +{ + { "black", COLOR_BLACK }, + { "blue", COLOR_BLUE }, + { "cyan", COLOR_CYAN }, + { "green", COLOR_GREEN }, + { "magenta", COLOR_MAGENTA }, + { "red", COLOR_RED }, + { "white", COLOR_WHITE }, + { "yellow", COLOR_YELLOW }, +#if defined (USE_SLANG_CURSES) || defined (HAVE_USE_DEFAULT_COLORS) + { "default", COLOR_DEFAULT }, +#endif + { 0, 0 } +}; + +#endif /* HAVE_COLOR */ + +static struct mapping_t Fields[] = +{ + { "hdrdefault", MT_COLOR_HDEFAULT }, + { "quoted", MT_COLOR_QUOTED }, + { "signature", MT_COLOR_SIGNATURE }, + { "indicator", MT_COLOR_INDICATOR }, + { "status", MT_COLOR_STATUS }, + { "tree", MT_COLOR_TREE }, + { "error", MT_COLOR_ERROR }, + { "normal", MT_COLOR_NORMAL }, + { "tilde", MT_COLOR_TILDE }, + { "markers", MT_COLOR_MARKERS }, + { "header", MT_COLOR_HEADER }, + { "body", MT_COLOR_BODY }, + { "message", MT_COLOR_MESSAGE }, + { "attachment", MT_COLOR_ATTACHMENT }, + { "search", MT_COLOR_SEARCH }, + { "bold", MT_COLOR_BOLD }, + { "underline", MT_COLOR_UNDERLINE }, + { "index", MT_COLOR_INDEX }, + { NULL, 0 } +}; + +#define COLOR_QUOTE_INIT 8 + +static COLOR_LINE *mutt_new_color_line (void) +{ + COLOR_LINE *p = safe_calloc (1, sizeof (COLOR_LINE)); + + p->fg = p->bg = -1; + + return (p); +} + +static void mutt_free_color_line(COLOR_LINE **l, + int free_colors) +{ + COLOR_LINE *tmp; + + if(!l || !*l) + return; + + tmp = *l; + +#ifdef HAVE_COLOR + if(free_colors && tmp->fg != -1 && tmp->bg != -1) + mutt_free_color(tmp->fg, tmp->bg); +#endif + + /* we should really introduce a container + * type for regular expressions. + */ + + regfree(&tmp->rx); + mutt_pattern_free(&tmp->color_pattern); + FREE (&tmp->pattern); + FREE (l); +} + +void ci_start_color (void) +{ + memset (ColorDefs, A_NORMAL, sizeof (int) * MT_COLOR_MAX); + ColorQuote = (int *) safe_malloc (COLOR_QUOTE_INIT * sizeof (int)); + memset (ColorQuote, A_NORMAL, sizeof (int) * COLOR_QUOTE_INIT); + ColorQuoteSize = COLOR_QUOTE_INIT; + ColorQuoteUsed = 0; + + /* set some defaults */ + ColorDefs[MT_COLOR_STATUS] = A_REVERSE; + ColorDefs[MT_COLOR_INDICATOR] = A_REVERSE; + ColorDefs[MT_COLOR_SEARCH] = A_REVERSE; + ColorDefs[MT_COLOR_MARKERS] = A_REVERSE; + /* special meaning: toggle the relevant attribute */ + ColorDefs[MT_COLOR_BOLD] = 0; + ColorDefs[MT_COLOR_UNDERLINE] = 0; + +#ifdef HAVE_COLOR + start_color (); +#endif +} + +#ifdef HAVE_COLOR + +#ifdef USE_SLANG_CURSES +static char *get_color_name (char *dest, size_t destlen, int val) +{ + static char * missing[3] = {"brown", "lightgray", ""}; + int i; + + switch (val) + { + case COLOR_YELLOW: + strfcpy (dest, missing[0], destlen); + return dest; + + case COLOR_WHITE: + strfcpy (dest, missing[1], destlen); + return dest; + + case COLOR_DEFAULT: + strfcpy (dest, missing[2], destlen); + return dest; + } + + for (i = 0; Colors[i].name; i++) + { + if (Colors[i].value == val) + { + strfcpy (dest, Colors[i].name, destlen); + return dest; + } + } + + /* Sigh. If we got this far, the color is of the form 'colorN' + * Slang can handle this itself, so just return 'colorN' + */ + + snprintf (dest, destlen, "color%d", val); + return dest; +} +#endif + +int mutt_alloc_color (int fg, int bg) +{ + COLOR_LIST *p = ColorList; + int i; + +#if defined (USE_SLANG_CURSES) + char fgc[SHORT_STRING], bgc[SHORT_STRING]; +#endif + + /* check to see if this color is already allocated to save space */ + while (p) + { + if (p->fg == fg && p->bg == bg) + { + (p->count)++; + return (COLOR_PAIR (p->index)); + } + p = p->next; + } + + /* check to see if there are colors left */ + if (++UserColors > COLOR_PAIRS) return (A_NORMAL); + + /* find the smallest available index (object) */ + i = 1; + FOREVER + { + p = ColorList; + while (p) + { + if (p->index == i) break; + p = p->next; + } + if (p == NULL) break; + i++; + } + + p = (COLOR_LIST *) safe_malloc (sizeof (COLOR_LIST)); + p->next = ColorList; + ColorList = p; + + p->index = i; + p->count = 1; + p->bg = bg; + p->fg = fg; + +#if defined (USE_SLANG_CURSES) + if (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT) + SLtt_set_color (i, NULL, get_color_name (fgc, sizeof (fgc), fg), get_color_name (bgc, sizeof (bgc), bg)); + else +#elif defined (HAVE_USE_DEFAULT_COLORS) + if (fg == COLOR_DEFAULT) + fg = -1; + if (bg == COLOR_DEFAULT) + bg = -1; +#endif + + init_pair(i, fg, bg); + + dprint(1,(debugfile,"mutt_alloc_color(): Color pairs used so far: %d\n", + UserColors)); + + return (COLOR_PAIR (p->index)); +} + +void mutt_free_color (int fg, int bg) +{ + COLOR_LIST *p, *q; + + p = ColorList; + while (p) + { + if (p->fg == fg && p->bg == bg) + { + (p->count)--; + if (p->count > 0) return; + + UserColors--; + dprint(1,(debugfile,"mutt_free_color(): Color pairs used so far: %d\n", + UserColors)); + + if (p == ColorList) + { + ColorList = ColorList->next; + FREE (&p); + return; + } + q = ColorList; + while (q) + { + if (q->next == p) + { + q->next = p->next; + FREE (&p); + return; + } + q = q->next; + } + /* can't get here */ + } + p = p->next; + } +} + +#endif /* HAVE_COLOR */ + + +#ifdef HAVE_COLOR + +static int +parse_color_name (const char *s, int *col, int *attr, int brite, BUFFER *err) +{ + char *eptr; + + if (mutt_strncasecmp (s, "bright", 6) == 0) + { + *attr |= brite; + s += 6; + } + + /* allow aliases for xterm color resources */ + if (mutt_strncasecmp (s, "color", 5) == 0) + { + s += 5; + *col = strtol (s, &eptr, 10); + if (!*s || *eptr || *col < 0 || + (*col >= COLORS && !option(OPTNOCURSES) && has_colors())) + { + snprintf (err->data, err->dsize, _("%s: color not supported by term"), s); + return (-1); + } + } + else if ((*col = mutt_getvaluebyname (s, Colors)) == -1) + { + snprintf (err->data, err->dsize, _("%s: no such color"), s); + return (-1); + } + + return 0; +} + +#endif + + +/* usage: uncolor index pattern [pattern...] + * unmono index pattern [pattern...] + */ + +static int +_mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, + short parse_uncolor); + + +#ifdef HAVE_COLOR + +int mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, + BUFFER *err) +{ + return _mutt_parse_uncolor(buf, s, data, err, 1); +} + +#endif + +int mutt_parse_unmono (BUFFER *buf, BUFFER *s, unsigned long data, + BUFFER *err) +{ + return _mutt_parse_uncolor(buf, s, data, err, 0); +} + +static int +_mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, + short parse_uncolor) +{ + int object = 0, do_cache = 0; + COLOR_LINE *tmp, *last = NULL; + + mutt_extract_token (buf, s, 0); + + if ((object = mutt_getvaluebyname (buf->data, Fields)) == -1) + { + snprintf (err->data, err->dsize, _("%s: no such object"), buf->data); + return (-1); + } + + if (mutt_strncmp (buf->data, "index", 5) != 0) + { + snprintf (err->data, err->dsize, + _("%s: command valid only for index object"), + parse_uncolor ? "uncolor" : "unmono"); + return (-1); + } + + if (!MoreArgs (s)) + { + snprintf (err->data, err->dsize, + _("%s: too few arguments"), parse_uncolor ? "uncolor" : "unmono"); + return (-1); + } + + if( +#ifdef HAVE_COLOR + /* we're running without curses */ + option (OPTNOCURSES) + || /* we're parsing an uncolor command, and have no colors */ + (parse_uncolor && !has_colors()) + /* we're parsing an unmono command, and have colors */ + || (!parse_uncolor && has_colors()) +#else + /* We don't even have colors compiled in */ + parse_uncolor +#endif + ) + { + /* just eat the command, but don't do anything real about it */ + do + mutt_extract_token (buf, s, 0); + while (MoreArgs (s)); + + return 0; + } + + + do + { + mutt_extract_token (buf, s, 0); + if (!mutt_strcmp ("*", buf->data)) + { + for (tmp = ColorIndexList; tmp; ) + { + if (!do_cache) + do_cache = 1; + last = tmp; + tmp = tmp->next; + mutt_free_color_line(&last, parse_uncolor); + } + ColorIndexList = NULL; + } + else + { + for (last = NULL, tmp = ColorIndexList; tmp; last = tmp, tmp = tmp->next) + { + if (!mutt_strcmp (buf->data, tmp->pattern)) + { + if (!do_cache) + do_cache = 1; + dprint(1,(debugfile,"Freeing pattern \"%s\" from ColorIndexList\n", + tmp->pattern)); + if (last) + last->next = tmp->next; + else + ColorIndexList = tmp->next; + mutt_free_color_line(&tmp, parse_uncolor); + break; + } + } + } + } + while (MoreArgs (s)); + + + if (do_cache && !option (OPTNOCURSES)) + { + int i; + set_option (OPTFORCEREDRAWINDEX); + /* force re-caching of index colors */ + for (i = 0; Context && i < Context->msgcount; i++) + Context->hdrs[i]->pair = 0; + } + return (0); +} + + +static int +add_pattern (COLOR_LINE **top, const char *s, int sensitive, + int fg, int bg, int attr, BUFFER *err, + int is_index) +{ + + /* is_index used to store compiled pattern + * only for `index' color object + * when called from mutt_parse_color() */ + + COLOR_LINE *tmp = *top; + + while (tmp) + { + if (sensitive) + { + if (mutt_strcmp (s, tmp->pattern) == 0) + break; + } + else + { + if (mutt_strcasecmp (s, tmp->pattern) == 0) + break; + } + tmp = tmp->next; + } + + if (tmp) + { +#ifdef HAVE_COLOR + if (fg != -1 && bg != -1) + { + if (tmp->fg != fg || tmp->bg != bg) + { + mutt_free_color (tmp->fg, tmp->bg); + tmp->fg = fg; + tmp->bg = bg; + attr |= mutt_alloc_color (fg, bg); + } + else + attr |= (tmp->pair & ~A_BOLD); + } +#endif /* HAVE_COLOR */ + tmp->pair = attr; + } + else + { + int r; + char buf[STRING]; + + tmp = mutt_new_color_line (); + if (is_index) + { + int i; + + strfcpy(buf, NONULL(s), sizeof(buf)); + mutt_check_simple (buf, sizeof (buf), NONULL(SimpleSearch)); + if((tmp->color_pattern = mutt_pattern_comp (buf, M_FULL_MSG, err)) == NULL) + { + mutt_free_color_line(&tmp, 1); + return -1; + } + /* force re-caching of index colors */ + for (i = 0; Context && i < Context->msgcount; i++) + Context->hdrs[i]->pair = 0; + } + else if ((r = REGCOMP (&tmp->rx, s, (sensitive ? mutt_which_case (s) : REG_ICASE))) != 0) + { + regerror (r, &tmp->rx, err->data, err->dsize); + mutt_free_color_line(&tmp, 1); + return (-1); + } + tmp->next = *top; + tmp->pattern = safe_strdup (s); +#ifdef HAVE_COLOR + if(fg != -1 && bg != -1) + { + tmp->fg = fg; + tmp->bg = bg; + attr |= mutt_alloc_color (fg, bg); + } +#endif + tmp->pair = attr; + *top = tmp; + } + + return 0; +} + +static int +parse_object(BUFFER *buf, BUFFER *s, int *o, int *ql, BUFFER *err) +{ + int q_level = 0; + char *eptr; + + if(!MoreArgs(s)) + { + strfcpy(err->data, _("Missing arguments."), err->dsize); + return -1; + } + + mutt_extract_token(buf, s, 0); + if(!mutt_strncmp(buf->data, "quoted", 6)) + { + if(buf->data[6]) + { + *ql = strtol(buf->data + 6, &eptr, 10); + if(*eptr || q_level < 0) + { + snprintf(err->data, err->dsize, _("%s: no such object"), buf->data); + return -1; + } + } + else + *ql = 0; + + *o = MT_COLOR_QUOTED; + } + else if ((*o = mutt_getvaluebyname (buf->data, Fields)) == -1) + { + snprintf (err->data, err->dsize, _("%s: no such object"), buf->data); + return (-1); + } + + return 0; +} + +typedef int (*parser_callback_t)(BUFFER *, BUFFER *, int *, int *, int *, BUFFER *); + +#ifdef HAVE_COLOR + +static int +parse_color_pair(BUFFER *buf, BUFFER *s, int *fg, int *bg, int *attr, BUFFER *err) +{ + if (! MoreArgs (s)) + { + strfcpy (err->data, _("color: too few arguments"), err->dsize); + return (-1); + } + + mutt_extract_token (buf, s, 0); + + if (parse_color_name (buf->data, fg, attr, A_BOLD, err) != 0) + return (-1); + + if (! MoreArgs (s)) + { + strfcpy (err->data, _("color: too few arguments"), err->dsize); + return (-1); + } + + mutt_extract_token (buf, s, 0); + + if (parse_color_name (buf->data, bg, attr, A_BLINK, err) != 0) + return (-1); + + return 0; +} + +#endif + +static int +parse_attr_spec(BUFFER *buf, BUFFER *s, int *fg, int *bg, int *attr, BUFFER *err) +{ + + if(fg) *fg = -1; + if(bg) *bg = -1; + + if (! MoreArgs (s)) + { + strfcpy (err->data, _("mono: too few arguments"), err->dsize); + return (-1); + } + + mutt_extract_token (buf, s, 0); + + if (ascii_strcasecmp ("bold", buf->data) == 0) + *attr |= A_BOLD; + else if (ascii_strcasecmp ("underline", buf->data) == 0) + *attr |= A_UNDERLINE; + else if (ascii_strcasecmp ("none", buf->data) == 0) + *attr = A_NORMAL; + else if (ascii_strcasecmp ("reverse", buf->data) == 0) + *attr |= A_REVERSE; + else if (ascii_strcasecmp ("standout", buf->data) == 0) + *attr |= A_STANDOUT; + else if (ascii_strcasecmp ("normal", buf->data) == 0) + *attr = A_NORMAL; /* needs use = instead of |= to clear other bits */ + else + { + snprintf (err->data, err->dsize, _("%s: no such attribute"), buf->data); + return (-1); + } + + return 0; +} + +static int fgbgattr_to_color(int fg, int bg, int attr) +{ +#ifdef HAVE_COLOR + if(fg != -1 && bg != -1) + return attr | mutt_alloc_color(fg, bg); + else +#endif + return attr; +} + +/* usage: color [ ] + * mono [ ] + */ + +static int +_mutt_parse_color (BUFFER *buf, BUFFER *s, BUFFER *err, + parser_callback_t callback, short dry_run) +{ + int object = 0, attr = 0, fg = 0, bg = 0, q_level = 0; + int r = 0; + + if(parse_object(buf, s, &object, &q_level, err) == -1) + return -1; + + if(callback(buf, s, &fg, &bg, &attr, err) == -1) + return -1; + + /* extract a regular expression if needed */ + + if (object == MT_COLOR_HEADER || object == MT_COLOR_BODY || object == MT_COLOR_INDEX) + { + if (!MoreArgs (s)) + { + strfcpy (err->data, _("too few arguments"), err->dsize); + return (-1); + } + + mutt_extract_token (buf, s, 0); + } + + if (MoreArgs (s)) + { + strfcpy (err->data, _("too many arguments"), err->dsize); + return (-1); + } + + /* dry run? */ + + if(dry_run) return 0; + + +#ifdef HAVE_COLOR +# ifdef HAVE_USE_DEFAULT_COLORS + if (!option (OPTNOCURSES) && has_colors() + /* delay use_default_colors() until needed, since it initializes things */ + && (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT) + && use_default_colors () != OK) + { + strfcpy (err->data, _("default colors not supported"), err->dsize); + return (-1); + } +# endif /* HAVE_USE_DEFAULT_COLORS */ +#endif + + if (object == MT_COLOR_HEADER) + r = add_pattern (&ColorHdrList, buf->data, 0, fg, bg, attr, err,0); + else if (object == MT_COLOR_BODY) + r = add_pattern (&ColorBodyList, buf->data, 1, fg, bg, attr, err, 0); + else if (object == MT_COLOR_INDEX) + { + r = add_pattern (&ColorIndexList, buf->data, 1, fg, bg, attr, err, 1); + set_option (OPTFORCEREDRAWINDEX); + } + else if (object == MT_COLOR_QUOTED) + { + if (q_level >= ColorQuoteSize) + { + safe_realloc (&ColorQuote, (ColorQuoteSize += 2) * sizeof (int)); + ColorQuote[ColorQuoteSize-2] = ColorDefs[MT_COLOR_QUOTED]; + ColorQuote[ColorQuoteSize-1] = ColorDefs[MT_COLOR_QUOTED]; + } + if (q_level >= ColorQuoteUsed) + ColorQuoteUsed = q_level + 1; + if (q_level == 0) + { + ColorDefs[MT_COLOR_QUOTED] = fgbgattr_to_color(fg, bg, attr); + + ColorQuote[0] = ColorDefs[MT_COLOR_QUOTED]; + for (q_level = 1; q_level < ColorQuoteUsed; q_level++) + { + if (ColorQuote[q_level] == A_NORMAL) + ColorQuote[q_level] = ColorDefs[MT_COLOR_QUOTED]; + } + } + else + ColorQuote[q_level] = fgbgattr_to_color(fg, bg, attr); + } + else + ColorDefs[object] = fgbgattr_to_color(fg, bg, attr); + +#ifdef HAVE_COLOR +# ifdef HAVE_BKGDSET + if (object == MT_COLOR_NORMAL && !option (OPTNOCURSES) && has_colors()) + BKGDSET (MT_COLOR_NORMAL); +# endif +#endif + + return (r); +} + +#ifdef HAVE_COLOR + +int mutt_parse_color(BUFFER *buff, BUFFER *s, unsigned long data, BUFFER *err) +{ + int dry_run = 0; + + if(option(OPTNOCURSES) || !has_colors()) + dry_run = 1; + + return _mutt_parse_color(buff, s, err, parse_color_pair, dry_run); +} + +#endif + +int mutt_parse_mono(BUFFER *buff, BUFFER *s, unsigned long data, BUFFER *err) +{ + int dry_run = 0; + +#ifdef HAVE_COLOR + if(option(OPTNOCURSES) || has_colors()) + dry_run = 1; +#else + if(option(OPTNOCURSES)) + dry_run = 1; +#endif + + return _mutt_parse_color(buff, s, err, parse_attr_spec, dry_run); +} + diff --git a/commands.c b/commands.c new file mode 100644 index 0000000..5a8862e --- /dev/null +++ b/commands.c @@ -0,0 +1,1104 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * Copyright (C) 2000 Thomas Roessler + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "mime.h" +#include "sort.h" +#include "mailbox.h" +#include "copy.h" +#include "mx.h" +#include "pager.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" +#include "rfc1524.h" +#include +#include +#include + +#ifdef USE_IMAP +#include "imap.h" +#endif + +#ifdef BUFFY_SIZE +#include "buffy.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +extern char *ReleaseDate; + +/* The folder the user last saved to. Used by ci_save_message() */ +static char LastSaveFolder[_POSIX_PATH_MAX] = ""; + +int mutt_display_message (HEADER *cur) +{ + char tempfile[_POSIX_PATH_MAX], buf[LONG_STRING]; + int rc = 0, builtin = 0; + int cmflags = M_CM_DECODE | M_CM_DISPLAY | M_CM_CHARCONV; + FILE *fpout = NULL; + FILE *fpfilterout = NULL; + pid_t filterpid = -1; + int res; + + snprintf (buf, sizeof (buf), "%s/%s", TYPE (cur->content), + cur->content->subtype); + + mutt_parse_mime_message (Context, cur); + mutt_message_hook (Context, cur, M_MESSAGEHOOK); + + /* see if crytpo is needed for this message. if so, we should exit curses */ + if (WithCrypto && cur->security) + { + if (cur->security & ENCRYPT) + { + if (cur->security & APPLICATION_SMIME) + crypt_smime_getkeys (cur->env); + if(!crypt_valid_passphrase(cur->security)) + return 0; + + cmflags |= M_CM_VERIFY; + } + else if (cur->security & SIGN) + { + /* find out whether or not the verify signature */ + if (query_quadoption (OPT_VERIFYSIG, _("Verify PGP signature?")) == M_YES) + { + cmflags |= M_CM_VERIFY; + } + } + } + + if (cmflags & M_CM_VERIFY || cur->security & ENCRYPT) + { + if (cur->security & APPLICATION_PGP) + { + if (cur->env->from) + crypt_pgp_invoke_getkeys (cur->env->from); + + crypt_invoke_message (APPLICATION_PGP); + } + + if (cur->security & APPLICATION_SMIME) + crypt_invoke_message (APPLICATION_SMIME); + } + + + mutt_mktemp (tempfile); + if ((fpout = safe_fopen (tempfile, "w")) == NULL) + { + mutt_error _("Could not create temporary file!"); + return (0); + } + + if (DisplayFilter && *DisplayFilter) + { + fpfilterout = fpout; + fpout = NULL; + /* mutt_endwin (NULL); */ + filterpid = mutt_create_filter_fd (DisplayFilter, &fpout, NULL, NULL, + -1, fileno(fpfilterout), -1); + if (filterpid < 0) + { + mutt_error (_("Cannot create display filter")); + safe_fclose (&fpfilterout); + unlink (tempfile); + return 0; + } + } + + if (!Pager || mutt_strcmp (Pager, "builtin") == 0) + builtin = 1; + else + { + mutt_make_string (buf, sizeof (buf), NONULL(PagerFmt), Context, cur); + fputs (buf, fpout); + fputs ("\n\n", fpout); + } + + res = mutt_copy_message (fpout, Context, cur, cmflags, + (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | CH_DECODE | CH_FROM); + if ((safe_fclose (&fpout) != 0 && errno != EPIPE) || res == -1) + { + mutt_error (_("Could not copy message")); + if (fpfilterout != NULL) + { + mutt_wait_filter (filterpid); + safe_fclose (&fpfilterout); + } + mutt_unlink (tempfile); + return 0; + } + + if (fpfilterout != NULL && mutt_wait_filter (filterpid) != 0) + mutt_any_key_to_continue (NULL); + + safe_fclose (&fpfilterout); /* XXX - check result? */ + + + if (WithCrypto) + { + /* update crypto information for this message */ + cur->security |= crypt_query (cur->content); + + /* Remove color cache for this message, in case there + are color patterns for both ~g and ~V */ + cur->pair = 0; + } + + if (builtin) + { + pager_t info; + + if (WithCrypto + && (cur->security & APPLICATION_SMIME) && (cmflags & M_CM_VERIFY)) + { + if (cur->security & GOODSIGN) + { + if (!crypt_smime_verify_sender(cur)) + mutt_message ( _("S/MIME signature successfully verified.")); + else + mutt_error ( _("S/MIME certificate owner does not match sender.")); + } + else if (cur->security & PARTSIGN) + mutt_message (_("Warning: Part of this message has not been signed.")); + else if (cur->security & SIGN || cur->security & BADSIGN) + mutt_error ( _("S/MIME signature could NOT be verified.")); + } + + if (WithCrypto + && (cur->security & APPLICATION_PGP) && (cmflags & M_CM_VERIFY)) + { + if (cur->security & GOODSIGN) + mutt_message (_("PGP signature successfully verified.")); + else if (cur->security & PARTSIGN) + mutt_message (_("Warning: Part of this message has not been signed.")); + else + mutt_message (_("PGP signature could NOT be verified.")); + } + + /* Invoke the builtin pager */ + memset (&info, 0, sizeof (pager_t)); + info.hdr = cur; + info.ctx = Context; + rc = mutt_pager (NULL, tempfile, M_PAGER_MESSAGE, &info); + } + else + { + int r; + + mutt_endwin (NULL); + snprintf (buf, sizeof (buf), "%s %s", NONULL(Pager), tempfile); + if ((r = mutt_system (buf)) == -1) + mutt_error (_("Error running \"%s\"!"), buf); + unlink (tempfile); + keypad (stdscr, TRUE); + if (r != -1) + mutt_set_flag (Context, cur, M_READ, 1); + if (r != -1 && option (OPTPROMPTAFTER)) + { + mutt_ungetch (mutt_any_key_to_continue _("Command: "), 0); + rc = km_dokey (MENU_PAGER); + } + else + rc = 0; + } + + return rc; +} + +void ci_bounce_message (HEADER *h, int *redraw) +{ + char prompt[SHORT_STRING]; + char buf[HUGE_STRING] = { 0 }; + ADDRESS *adr = NULL; + char *err = NULL; + int rc; + + if(h) + strfcpy(prompt, _("Bounce message to: "), sizeof(prompt)); + else + strfcpy(prompt, _("Bounce tagged messages to: "), sizeof(prompt)); + + rc = mutt_get_field (prompt, buf, sizeof (buf), M_ALIAS); + + if (option (OPTNEEDREDRAW)) + { + unset_option (OPTNEEDREDRAW); + *redraw = REDRAW_FULL; + } + + if (rc || !buf[0]) + return; + + if (!(adr = rfc822_parse_adrlist (adr, buf))) + { + mutt_error _("Error parsing address!"); + return; + } + + adr = mutt_expand_aliases (adr); + + if (mutt_addrlist_to_idna (adr, &err) < 0) + { + mutt_error (_("Bad IDN: '%s'"), err); + FREE (&err); + rfc822_free_address (&adr); + return; + } + + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), adr, 1); + +#define extra_space (15 + 7 + 2) + snprintf (prompt, sizeof (prompt), + (h ? _("Bounce message to %s") : _("Bounce messages to %s")), buf); + + if (mutt_strwidth (prompt) > COLS - extra_space) + { + mutt_format_string (prompt, sizeof (prompt), + 0, COLS-extra_space, 0, 0, + prompt, sizeof (prompt), 0); + strncat (prompt, "...?", sizeof (prompt)); + } + else + strncat (prompt, "?", sizeof (prompt)); + + if (query_quadoption (OPT_BOUNCE, prompt) != M_YES) + { + rfc822_free_address (&adr); + CLEARLINE (LINES - 1); + mutt_message (h ? _("Message not bounced.") : _("Messages not bounced.")); + return; + } + + CLEARLINE (LINES - 1); + + rc = mutt_bounce_message (NULL, h, adr); + rfc822_free_address (&adr); + /* If no error, or background, display message. */ + if ((rc == 0) || (rc == S_BKG)) + mutt_message (h ? _("Message bounced.") : _("Messages bounced.")); +} + +static void pipe_set_flags (int decode, int print, int *cmflags, int *chflags) +{ + if (decode) + { + *cmflags |= M_CM_DECODE | M_CM_CHARCONV; + *chflags |= CH_DECODE | CH_REORDER; + + if (option (OPTWEED)) + { + *chflags |= CH_WEED; + *cmflags |= M_CM_WEED; + } + } + + if (print) + *cmflags |= M_CM_PRINTING; + +} + +void pipe_msg (HEADER *h, FILE *fp, int decode, int print) +{ + int cmflags = 0; + int chflags = CH_FROM; + + pipe_set_flags (decode, print, &cmflags, &chflags); + + if (WithCrypto && decode && h->security & ENCRYPT) + { + if(!crypt_valid_passphrase(h->security)) + return; + endwin (); + } + + if (decode) + mutt_parse_mime_message (Context, h); + + mutt_copy_message (fp, Context, h, cmflags, chflags); +} + + +/* the following code is shared between printing and piping */ + +static int _mutt_pipe_message (HEADER *h, char *cmd, + int decode, + int print, + int split, + char *sep) +{ + + int i, rc = 0; + pid_t thepid; + FILE *fpout; + +/* mutt_endwin (NULL); + + is this really needed here ? + it makes the screen flicker on pgp and s/mime messages, + before asking for a passphrase... + Oliver Ehli */ + if (h) + { + + mutt_message_hook (Context, h, M_MESSAGEHOOK); + + if (WithCrypto && decode) + { + mutt_parse_mime_message (Context, h); + if(h->security & ENCRYPT && !crypt_valid_passphrase(h->security)) + return 1; + } + mutt_endwin (NULL); + + if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0) + { + mutt_perror _("Can't create filter process"); + return 1; + } + + pipe_msg (h, fpout, decode, print); + fclose (fpout); + rc = mutt_wait_filter (thepid); + } + else + { /* handle tagged messages */ + + if (WithCrypto && decode) + { + for (i = 0; i < Context->vcount; i++) + if(Context->hdrs[Context->v2r[i]]->tagged) + { + mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK); + mutt_parse_mime_message(Context, Context->hdrs[Context->v2r[i]]); + if (Context->hdrs[Context->v2r[i]]->security & ENCRYPT && + !crypt_valid_passphrase(Context->hdrs[Context->v2r[i]]->security)) + return 1; + } + } + + if (split) + { + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]]->tagged) + { + mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK); + mutt_endwin (NULL); + if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0) + { + mutt_perror _("Can't create filter process"); + return 1; + } + pipe_msg (Context->hdrs[Context->v2r[i]], fpout, decode, print); + /* add the message separator */ + if (sep) fputs (sep, fpout); + safe_fclose (&fpout); + if (mutt_wait_filter (thepid) != 0) + rc = 1; + } + } + } + else + { + mutt_endwin (NULL); + if ((thepid = mutt_create_filter (cmd, &fpout, NULL, NULL)) < 0) + { + mutt_perror _("Can't create filter process"); + return 1; + } + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]]->tagged) + { + mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK); + pipe_msg (Context->hdrs[Context->v2r[i]], fpout, decode, print); + /* add the message separator */ + if (sep) fputs (sep, fpout); + } + } + safe_fclose (&fpout); + if (mutt_wait_filter (thepid) != 0) + rc = 1; + } + } + + if (rc || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + return rc; +} + +void mutt_pipe_message (HEADER *h) +{ + char buffer[LONG_STRING]; + + buffer[0] = 0; + if (mutt_get_field (_("Pipe to command: "), buffer, sizeof (buffer), M_CMD) + != 0 || !buffer[0]) + return; + + mutt_expand_path (buffer, sizeof (buffer)); + _mutt_pipe_message (h, buffer, + option (OPTPIPEDECODE), + 0, + option (OPTPIPESPLIT), + PipeSep); +} + +void mutt_print_message (HEADER *h) +{ + + if (quadoption (OPT_PRINT) && (!PrintCmd || !*PrintCmd)) + { + mutt_message (_("No printing command has been defined.")); + return; + } + + if (query_quadoption (OPT_PRINT, + h ? _("Print message?") : _("Print tagged messages?")) + != M_YES) + return; + + if (_mutt_pipe_message (h, PrintCmd, + option (OPTPRINTDECODE), + 1, + option (OPTPRINTSPLIT), + "\f") == 0) + mutt_message (h ? _("Message printed") : _("Messages printed")); + else + mutt_message (h ? _("Message could not be printed") : + _("Messages could not be printed")); +} + + +int mutt_select_sort (int reverse) +{ + int method = Sort; /* save the current method in case of abort */ + + switch (mutt_multi_choice (reverse ? + _("Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: ") : + _("Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: "), + _("dfrsotuzc"))) + { + case -1: /* abort - don't resort */ + return -1; + + case 1: /* (d)ate */ + Sort = SORT_DATE; + break; + + case 2: /* (f)rm */ + Sort = SORT_FROM; + break; + + case 3: /* (r)ecv */ + Sort = SORT_RECEIVED; + break; + + case 4: /* (s)ubj */ + Sort = SORT_SUBJECT; + break; + + case 5: /* t(o) */ + Sort = SORT_TO; + break; + + case 6: /* (t)hread */ + Sort = SORT_THREADS; + break; + + case 7: /* (u)nsort */ + Sort = SORT_ORDER; + break; + + case 8: /* si(z)e */ + Sort = SORT_SIZE; + break; + + case 9: /* s(c)ore */ + Sort = SORT_SCORE; + break; + } + if (reverse) + Sort |= SORT_REVERSE; + + return (Sort != method ? 0 : -1); /* no need to resort if it's the same */ +} + +/* invoke a command in a subshell */ +void mutt_shell_escape (void) +{ + char buf[LONG_STRING]; + + buf[0] = 0; + if (mutt_get_field (_("Shell command: "), buf, sizeof (buf), M_CMD) == 0) + { + if (!buf[0] && Shell) + strfcpy (buf, Shell, sizeof (buf)); + if(buf[0]) + { + CLEARLINE (LINES-1); + mutt_endwin (NULL); + fflush (stdout); + if (mutt_system (buf) != 0 || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + } + } +} + +/* enter a mutt command */ +void mutt_enter_command (void) +{ + BUFFER err, token; + char buffer[LONG_STRING], errbuf[SHORT_STRING]; + int r; + + buffer[0] = 0; + if (mutt_get_field (":", buffer, sizeof (buffer), M_COMMAND) != 0 || !buffer[0]) + return; + err.data = errbuf; + err.dsize = sizeof (errbuf); + memset (&token, 0, sizeof (token)); + r = mutt_parse_rc_line (buffer, &token, &err); + FREE (&token.data); + if (errbuf[0]) + { + /* since errbuf could potentially contain printf() sequences in it, + we must call mutt_error() in this fashion so that vsprintf() + doesn't expect more arguments that we passed */ + if (r == 0) + mutt_message ("%s", errbuf); + else + mutt_error ("%s", errbuf); + } +} + +void mutt_display_address (ENVELOPE *env) +{ + char *pfx = NULL; + char buf[SHORT_STRING]; + ADDRESS *adr = NULL; + + adr = mutt_get_address (env, &pfx); + + if (!adr) return; + + /* + * Note: We don't convert IDNA to local representation this time. + * That is intentional, so the user has an opportunity to copy & + * paste the on-the-wire form of the address to other, IDN-unable + * software. + */ + + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), adr, 0); + mutt_message ("%s: %s", pfx, buf); +} + +static void set_copy_flags (HEADER *hdr, int decode, int decrypt, int *cmflags, int *chflags) +{ + *cmflags = 0; + *chflags = CH_UPDATE_LEN; + + if (WithCrypto && !decode && decrypt && (hdr->security & ENCRYPT)) + { + if ((WithCrypto & APPLICATION_PGP) + && mutt_is_multipart_encrypted(hdr->content)) + { + *chflags = CH_NONEWLINE | CH_XMIT | CH_MIME; + *cmflags = M_CM_DECODE_PGP; + } + else if ((WithCrypto & APPLICATION_PGP) + && mutt_is_application_pgp (hdr->content) & ENCRYPT) + decode = 1; + else if ((WithCrypto & APPLICATION_SMIME) + && mutt_is_application_smime(hdr->content) & ENCRYPT) + { + *chflags = CH_NONEWLINE | CH_XMIT | CH_MIME; + *cmflags = M_CM_DECODE_SMIME; + } + } + + if (decode) + { + *chflags = CH_XMIT | CH_MIME | CH_TXTPLAIN; + *cmflags = M_CM_DECODE | M_CM_CHARCONV; + + if (!decrypt) /* If decode doesn't kick in for decrypt, */ + { + *chflags |= CH_DECODE; /* then decode RFC 2047 headers, */ + + if (option (OPTWEED)) + { + *chflags |= CH_WEED; /* and respect $weed. */ + *cmflags |= M_CM_WEED; + } + } + } +} + +void _mutt_save_message (HEADER *h, CONTEXT *ctx, int delete, int decode, int decrypt) +{ + int cmflags, chflags; + + set_copy_flags (h, decode, decrypt, &cmflags, &chflags); + + if (decode || decrypt) + mutt_parse_mime_message (Context, h); + + if (mutt_append_message (ctx, Context, h, cmflags, chflags) == 0) + { + if (delete) + { + mutt_set_flag (Context, h, M_DELETE, 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, h, M_TAG, 0); + } + mutt_set_flag (Context, h, M_APPENDED, 1); + } +} + +/* returns 0 if the copy/save was successful, or -1 on error/abort */ +int mutt_save_message (HEADER *h, int delete, + int decode, int decrypt, int *redraw) +{ + int i, need_buffy_cleanup; + int need_passphrase = 0, app=0; + char prompt[SHORT_STRING], buf[_POSIX_PATH_MAX]; + CONTEXT ctx; + struct stat st; +#ifdef BUFFY_SIZE + BUFFY *tmp = NULL; +#else + struct utimbuf ut; +#endif + + *redraw = 0; + + + snprintf (prompt, sizeof (prompt), + decode ? (delete ? _("Decode-save%s to mailbox") : + _("Decode-copy%s to mailbox")) : + (decrypt ? (delete ? _("Decrypt-save%s to mailbox") : + _("Decrypt-copy%s to mailbox")) : + (delete ? _("Save%s to mailbox") : _("Copy%s to mailbox"))), + h ? "" : _(" tagged")); + + + if (h) + { + if (WithCrypto) + { + need_passphrase = h->security & ENCRYPT; + app = h->security; + } + mutt_message_hook (Context, h, M_MESSAGEHOOK); + mutt_default_save (buf, sizeof (buf), h); + } + else + { + /* look for the first tagged message */ + + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]]->tagged) + { + h = Context->hdrs[Context->v2r[i]]; + break; + } + } + + + if (h) + { + mutt_message_hook (Context, h, M_MESSAGEHOOK); + mutt_default_save (buf, sizeof (buf), h); + if (WithCrypto) + { + need_passphrase = h->security & ENCRYPT; + app = h->security; + } + h = NULL; + } + } + + mutt_pretty_mailbox (buf); + if (mutt_enter_fname (prompt, buf, sizeof (buf), redraw, 0) == -1) + return (-1); + + if (*redraw != REDRAW_FULL) + { + if (!h) + *redraw = REDRAW_INDEX | REDRAW_STATUS; + else + *redraw = REDRAW_STATUS; + } + + if (!buf[0]) + return (-1); + + /* This is an undocumented feature of ELM pointed out to me by Felix von + * Leitner + */ + if (mutt_strcmp (buf, ".") == 0) + strfcpy (buf, LastSaveFolder, sizeof (buf)); + else + strfcpy (LastSaveFolder, buf, sizeof (LastSaveFolder)); + + mutt_expand_path (buf, sizeof (buf)); + + /* check to make sure that this file is really the one the user wants */ + if (mutt_save_confirm (buf, &st) != 0) + return -1; + + if (WithCrypto && need_passphrase && (decode || decrypt) + && !crypt_valid_passphrase(app)) + return -1; + + mutt_message (_("Copying to %s..."), buf); + +#ifdef USE_IMAP + if (Context->magic == M_IMAP && + !(decode || decrypt) && mx_is_imap (buf)) + { + switch (imap_copy_messages (Context, h, buf, delete)) + { + /* success */ + case 0: mutt_clear_error (); return 0; + /* non-fatal error: fall through to fetch/append */ + case 1: break; + /* fatal error, abort */ + case -1: return -1; + } + } +#endif + + if (mx_open_mailbox (buf, M_APPEND, &ctx) != NULL) + { + if (h) + _mutt_save_message(h, &ctx, delete, decode, decrypt); + else + { + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]]->tagged) + { + mutt_message_hook (Context, Context->hdrs[Context->v2r[i]], M_MESSAGEHOOK); + _mutt_save_message(Context->hdrs[Context->v2r[i]], + &ctx, delete, decode, decrypt); + } + } + } + + need_buffy_cleanup = (ctx.magic == M_MBOX || ctx.magic == M_MMDF); + + mx_close_mailbox (&ctx, NULL); + + if (need_buffy_cleanup) + { +#ifdef BUFFY_SIZE + tmp = mutt_find_mailbox (buf); + if (tmp && !tmp->new) + mutt_update_mailbox (tmp); +#else + /* fix up the times so buffy won't get confused */ + if (st.st_mtime > st.st_atime) + { + ut.actime = st.st_atime; + ut.modtime = time (NULL); + utime (buf, &ut); + } + else + utime (buf, NULL); +#endif + } + + mutt_clear_error (); + return (0); + } + + return -1; +} + +int mutt_update_list_file (char *filename, char *section, char *key, char *line) +{ + FILE *ifp; + FILE *ofp; + char buf[HUGE_STRING]; + char oldfile[_POSIX_PATH_MAX]; + char *c; + int ext = 0, done = 0, r = 0; + + snprintf (oldfile, sizeof(oldfile), "%s.bak", filename); + dprint (1, (debugfile, "Renaming %s to %s\n", filename, oldfile)); + + /* if file not exist, create it */ + if ((ifp = safe_fopen (filename, "a"))) + fclose (ifp); + if (_mutt_rename_file (filename, oldfile, 1)) + { + mutt_perror _("Unable to create backup file"); + return (-1); + } + dprint (1, (debugfile, "Opening %s\n", oldfile)); + if (!(ifp = safe_fopen (oldfile, "r"))) + { + mutt_perror _("Unable to open backup file for reading"); + return (-1); + } + dprint (1, (debugfile, "Opening %s\n", filename)); + if (!(ofp = fopen (filename, "w"))) + { + fclose (ifp); + mutt_perror _("Unable to open new file for writing"); + return (-1); + } + if (mx_lock_file (filename, fileno (ofp), 1, 0, 1)) + { + fclose (ofp); + fclose (ifp); + mutt_error (_("Unable to lock %s, old file saved as %s"), filename, oldfile); + return (-1); + } + + if (section) + { + while (r != EOF && !done && fgets (buf, sizeof (buf), ifp)) + { + r = fputs (buf, ofp); + c = buf; + while (*c && *c != '\n') c++; + c[0] = 0; /* strip EOL */ + if (!strncmp (buf, "#: ", 3) && !mutt_strcasecmp (buf+3, section)) + done++; + } + if (r != EOF && !done) + { + snprintf (buf, sizeof(buf), "#: %s\n", section); + r = fputs (buf, ofp); + } + done = 0; + } + + while (r != EOF && fgets (buf, sizeof (buf), ifp)) + { + if (ext) + { + c = buf; + while (*c && (*c != '\r') && (*c != '\n')) c++; + c--; + if (*c != '\\') ext = 0; + } + else if ((section && !strncmp (buf, "#: ", 3))) + { + if (!done && line) + { + fputs (line, ofp); + fputc ('\n', ofp); + } + r = fputs (buf, ofp); + done++; + break; + } + else if (key && !strncmp (buf, key, strlen(key)) && + (!*key || buf[strlen(key)] == ' ')) + { + c = buf; + ext = 0; + while (*c && (*c != '\r') && (*c != '\n')) c++; + c--; + if (*c == '\\') ext = 1; + if (!done && line) + { + r = fputs (line, ofp); + if (*key) + r = fputc ('\n', ofp); + done++; + } + } + else + { + r = fputs (buf, ofp); + } + } + + while (r != EOF && fgets (buf, sizeof (buf), ifp)) + r = fputs (buf, ofp); + + /* If there wasn't a line to replace, put it on the end of the file */ + if (r != EOF && !done && line) + { + fputs (line, ofp); + r = fputc ('\n', ofp); + } + mx_unlock_file (filename, fileno (ofp), 0); + fclose (ofp); + fclose (ifp); + if (r != EOF) + { + unlink (oldfile); + return 0; + } + unlink (filename); + mutt_error (_("Cannot write new %s, old file saved as %s"), filename, + oldfile); + return (-1); +} + + +void mutt_version (void) +{ + mutt_message ("Mutt %s (%s)", MUTT_VERSION, ReleaseDate); +} + +void mutt_edit_content_type (HEADER *h, BODY *b, FILE *fp) +{ + char buf[LONG_STRING]; + char obuf[LONG_STRING]; + char tmp[STRING]; + PARAMETER *p; + + char charset[STRING]; + char *cp; + + short charset_changed = 0; + short type_changed = 0; + + cp = mutt_get_parameter ("charset", b->parameter); + strfcpy (charset, NONULL (cp), sizeof (charset)); + + snprintf (buf, sizeof (buf), "%s/%s", TYPE (b), b->subtype); + strfcpy (obuf, buf, sizeof (obuf)); + if (b->parameter) + { + size_t l; + + for (p = b->parameter; p; p = p->next) + { + l = strlen (buf); + + rfc822_cat (tmp, sizeof (tmp), p->value, MimeSpecials); + snprintf (buf + l, sizeof (buf) - l, "; %s=%s", p->attribute, tmp); + } + } + + if (mutt_get_field ("Content-Type: ", buf, sizeof (buf), 0) != 0 || + buf[0] == 0) + return; + + /* clean up previous junk */ + mutt_free_parameter (&b->parameter); + FREE (&b->subtype); + + mutt_parse_content_type (buf, b); + + + snprintf (tmp, sizeof (tmp), "%s/%s", TYPE (b), NONULL (b->subtype)); + type_changed = ascii_strcasecmp (tmp, obuf); + charset_changed = ascii_strcasecmp (charset, mutt_get_parameter ("charset", b->parameter)); + + /* if in send mode, check for conversion - current setting is default. */ + + if (!h && b->type == TYPETEXT && charset_changed) + { + int r; + snprintf (tmp, sizeof (tmp), _("Convert to %s upon sending?"), + mutt_get_parameter ("charset", b->parameter)); + if ((r = mutt_yesorno (tmp, !b->noconv)) != -1) + b->noconv = (r == M_NO); + } + + /* inform the user */ + + if (type_changed) + mutt_message (_("Content-Type changed to %s."), tmp); + else if (b->type == TYPETEXT && charset_changed) + mutt_message (_("Character set changed to %s; %s."), + mutt_get_parameter ("charset", b->parameter), + b->noconv ? _("not converting") : _("converting")); + + b->force_charset |= charset_changed ? 1 : 0; + + if (!is_multipart (b) && b->parts) + mutt_free_body (&b->parts); + if (!mutt_is_message_type (b->type, b->subtype) && b->hdr) + { + b->hdr->content = NULL; + mutt_free_header (&b->hdr); + } + + if (fp && (is_multipart (b) || mutt_is_message_type (b->type, b->subtype))) + mutt_parse_part (fp, b); + + if (WithCrypto && h) + { + if (h->content == b) + h->security = 0; + + h->security |= crypt_query (b); + } +} + + +static int _mutt_check_traditional_pgp (HEADER *h, int *redraw) +{ + MESSAGE *msg; + int rv = 0; + + mutt_parse_mime_message (Context, h); + if ((msg = mx_open_message (Context, h->msgno)) == NULL) + return 0; + if (crypt_pgp_check_traditional (msg->fp, h->content, 0)) + { + h->security = crypt_query (h->content); + *redraw |= REDRAW_FULL; + rv = 1; + } + + mx_close_message (&msg); + return rv; +} + +int mutt_check_traditional_pgp (HEADER *h, int *redraw) +{ + int i; + int rv = 0; + if (h) + rv = _mutt_check_traditional_pgp (h, redraw); + else + { + for (i = 0; i < Context->vcount; i++) + if (Context->hdrs[Context->v2r[i]]->tagged) + rv = _mutt_check_traditional_pgp (Context->hdrs[Context->v2r[i]], redraw) + || rv; + } + return rv; +} + + diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..6a8a49d --- /dev/null +++ b/compile.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# ./configure --enable-pgp --enable-smime --with-regex --enable-pop --enable-imap --enable-nntp --enable-imap-edit-threads --with-ssl --enable-hcache --with-libesmtp && make +./configure --enable-pgp --enable-smime --with-regex --enable-pop --enable-imap --enable-nntp --enable-imap-edit-threads --with-ssl --enable-hcache && make diff --git a/complete.c b/complete.c new file mode 100644 index 0000000..58e0529 --- /dev/null +++ b/complete.c @@ -0,0 +1,263 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#ifdef USE_IMAP +#include "mailbox.h" +#include "imap.h" +#endif +#ifdef USE_NNTP +#include "nntp.h" +#endif + +#include +#include +#include +#include +#include + +/* given a partial pathname, this routine fills in as much of the rest of the + * path as is unique. + * + * return 0 if ok, -1 if no matches + */ +int mutt_complete (char *s, size_t slen) +{ + char *p; + DIR *dirp = NULL; + struct dirent *de; + int i ,init=0; + size_t len; + char dirpart[_POSIX_PATH_MAX], exp_dirpart[_POSIX_PATH_MAX]; + char filepart[_POSIX_PATH_MAX]; +#ifdef USE_IMAP + char imap_path[LONG_STRING]; +#endif + + dprint (2, (debugfile, "mutt_complete: completing %s\n", s)); + +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + LIST *l = CurrentNewsSrv->list; + + strfcpy (filepart, s, sizeof (filepart)); + + /* + * special case to handle when there is no filepart yet. + * find the first subscribed newsgroup + */ + if ((len = mutt_strlen (filepart)) == 0) + { + for (; l; l = l->next) + { + NNTP_DATA *data = (NNTP_DATA *)l->data; + + if (data && data->subscribed) + { + strfcpy (filepart, data->group, sizeof (filepart)); + init++; + l = l->next; + break; + } + } + } + + for (; l; l = l->next) + { + NNTP_DATA *data = (NNTP_DATA *)l->data; + + if (data && data->subscribed && + mutt_strncmp (data->group, filepart, len) == 0) + { + if (init) + { + for (i = 0; filepart[i] && data->group[i]; i++) + { + if (filepart[i] != data->group[i]) + { + filepart[i] = 0; + break; + } + } + filepart[i] = 0; + } + else + { + strfcpy (filepart, data->group, sizeof (filepart)); + init = 1; + } + } + } + + strcpy (s, filepart); + + return (init ? 0 : -1); + } +#endif + +#ifdef USE_IMAP + /* we can use '/' as a delimiter, imap_complete rewrites it */ + if (*s == '=' || *s == '+' || *s == '!') + { + if (*s == '!') + p = NONULL (Spoolfile); + else + p = NONULL (Maildir); + + mutt_concat_path (imap_path, p, s+1, sizeof (imap_path)); + } + else + strfcpy (imap_path, s, sizeof(imap_path)); + + if (mx_is_imap (imap_path)) + return imap_complete (s, slen, imap_path); +#endif + + if (*s == '=' || *s == '+' || *s == '!') + { + dirpart[0] = *s; + dirpart[1] = 0; + if (*s == '!') + strfcpy (exp_dirpart, NONULL (Spoolfile), sizeof (exp_dirpart)); + else + strfcpy (exp_dirpart, NONULL (Maildir), sizeof (exp_dirpart)); + if ((p = strrchr (s, '/'))) + { + char buf[_POSIX_PATH_MAX]; + *p++ = 0; + mutt_concat_path (buf, exp_dirpart, s + 1, sizeof (buf)); + strfcpy (exp_dirpart, buf, sizeof (exp_dirpart)); + snprintf (buf, sizeof (buf), "%s%s/", dirpart, s+1); + strfcpy (dirpart, buf, sizeof (dirpart)); + strfcpy (filepart, p, sizeof (filepart)); + } + else + strfcpy (filepart, s + 1, sizeof (filepart)); + dirp = opendir (exp_dirpart); + } + else + { + if ((p = strrchr (s, '/'))) + { + if (p == s) /* absolute path */ + { + p = s + 1; + strfcpy (dirpart, "/", sizeof (dirpart)); + exp_dirpart[0] = 0; + strfcpy (filepart, p, sizeof (filepart)); + dirp = opendir (dirpart); + } + else + { + *p = 0; + len = (size_t)(p - s); + strncpy (dirpart, s, len); + dirpart[len]=0; + p++; + strfcpy (filepart, p, sizeof (filepart)); + strfcpy (exp_dirpart, dirpart, sizeof (exp_dirpart)); + mutt_expand_path (exp_dirpart, sizeof (exp_dirpart)); + dirp = opendir (exp_dirpart); + } + } + else + { + /* no directory name, so assume current directory. */ + dirpart[0] = 0; + strfcpy (filepart, s, sizeof (filepart)); + dirp = opendir ("."); + } + } + + if (dirp == NULL) + { + dprint (1, (debugfile, "mutt_complete(): %s: %s (errno %d).\n", exp_dirpart, strerror (errno), errno)); + return (-1); + } + + /* + * special case to handle when there is no filepart yet. find the first + * file/directory which is not ``.'' or ``..'' + */ + if ((len = mutt_strlen (filepart)) == 0) + { + while ((de = readdir (dirp)) != NULL) + { + if (mutt_strcmp (".", de->d_name) != 0 && mutt_strcmp ("..", de->d_name) != 0) + { + strfcpy (filepart, de->d_name, sizeof (filepart)); + init++; + break; + } + } + } + + while ((de = readdir (dirp)) != NULL) + { + if (mutt_strncmp (de->d_name, filepart, len) == 0) + { + if (init) + { + for (i=0; filepart[i] && de->d_name[i]; i++) + { + if (filepart[i] != de->d_name[i]) + { + filepart[i] = 0; + break; + } + } + filepart[i] = 0; + } + else + { + char buf[_POSIX_PATH_MAX]; + struct stat st; + + strfcpy (filepart, de->d_name, sizeof(filepart)); + + /* check to see if it is a directory */ + if (dirpart[0]) + { + strfcpy (buf, exp_dirpart, sizeof (buf)); + strfcpy (buf + strlen (buf), "/", sizeof (buf) - strlen (buf)); + } + else + buf[0] = 0; + strfcpy (buf + strlen (buf), filepart, sizeof (buf) - strlen (buf)); + if (stat (buf, &st) != -1 && (st.st_mode & S_IFDIR)) + strfcpy (filepart + strlen (filepart), "/", + sizeof (filepart) - strlen (filepart)); + init = 1; + } + } + } + closedir (dirp); + + if (dirpart[0]) + { + strfcpy (s, dirpart, slen); + if (mutt_strcmp ("/", dirpart) != 0 && dirpart[0] != '=' && dirpart[0] != '+') + strfcpy (s + strlen (s), "/", slen - strlen (s)); + strfcpy (s + strlen (s), filepart, slen - strlen (s)); + } + else + strfcpy (s, filepart, slen); + + return (init ? 0 : -1); +} diff --git a/compose.c b/compose.c new file mode 100644 index 0000000..6711dd9 --- /dev/null +++ b/compose.c @@ -0,0 +1,1551 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_idna.h" +#include "mutt_menu.h" +#include "rfc1524.h" +#include "mime.h" +#include "attach.h" +#include "mapping.h" +#include "mailbox.h" +#include "sort.h" +#include "charset.h" +#include "mx.h" + +#ifdef MIXMASTER +#include "remailer.h" +#endif + +#ifdef USE_NNTP +#include "nntp.h" +#endif + +#include +#include +#include +#include +#include +#include + +static const char* There_are_no_attachments = N_("There are no attachments."); + +#define CHECK_COUNT if (idxlen == 0) { mutt_error _(There_are_no_attachments); break; } + + + +enum +{ + HDR_FROM = 1, + HDR_TO, + HDR_CC, + HDR_BCC, + HDR_SUBJECT, + HDR_REPLYTO, + HDR_FCC, + + + HDR_CRYPT, + HDR_CRYPTINFO, + +#ifdef USE_NNTP + HDR_NEWSGROUPS, + HDR_FOLLOWUPTO, + HDR_XCOMMENTTO, +#endif + + HDR_ATTACH = (HDR_FCC + 5) /* where to start printing the attachments */ +}; + +#define HDR_XOFFSET 14 +#define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */ +#define W (COLS - HDR_XOFFSET) + +static char *Prompts[] = +{ + "From: ", + "To: ", + "Cc: ", + "Bcc: ", + "Subject: ", + "Reply-To: ", + "Fcc: " +#ifdef USE_NNTP +#ifdef MIXMASTER + ,"" +#endif + ,"" + ,"" + ,"Newsgroups: " + ,"Followup-To: " + ,"X-Comment-To: " +#endif +}; + +static struct mapping_t ComposeHelp[] = { + { N_("Send"), OP_COMPOSE_SEND_MESSAGE }, + { N_("Abort"), OP_EXIT }, + { "To", OP_COMPOSE_EDIT_TO }, + { "CC", OP_COMPOSE_EDIT_CC }, + { "Subj", OP_COMPOSE_EDIT_SUBJECT }, + { N_("Attach file"), OP_COMPOSE_ATTACH_FILE }, + { N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION }, + { N_("Help"), OP_HELP }, + { NULL } +}; + +#ifdef USE_NNTP +static struct mapping_t ComposeNewsHelp[] = { + { N_("Send"), OP_COMPOSE_SEND_MESSAGE }, + { N_("Abort"), OP_EXIT }, + { "Newsgroups", OP_COMPOSE_EDIT_NEWSGROUPS }, + { "Subj", OP_COMPOSE_EDIT_SUBJECT }, + { N_("Attach file"), OP_COMPOSE_ATTACH_FILE }, + { N_("Descrip"), OP_COMPOSE_EDIT_DESCRIPTION }, + { N_("Help"), OP_HELP }, + { NULL } +}; +#endif + +static void snd_entry (char *b, size_t blen, MUTTMENU *menu, int num) +{ + mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, + (unsigned long)(((ATTACHPTR **) menu->data)[num]), + M_FORMAT_STAT_FILE | M_FORMAT_ARROWCURSOR); +} + + + +#include "mutt_crypt.h" + +static void redraw_crypt_lines (HEADER *msg) +{ + int off = 0; + + if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) + { + if (!msg->security) + mvaddstr (HDR_CRYPT, 0, " Security: "); + else if (msg->security & APPLICATION_SMIME) + mvaddstr (HDR_CRYPT, 0, " S/MIME: "); + else if (msg->security & APPLICATION_PGP) + mvaddstr (HDR_CRYPT, 0, " PGP: "); + } + else if ((WithCrypto & APPLICATION_SMIME)) + mvaddstr (HDR_CRYPT, 0, " S/MIME: "); + else if ((WithCrypto & APPLICATION_PGP)) + mvaddstr (HDR_CRYPT, 0, " PGP: "); + else + return; + + if ((msg->security & (ENCRYPT | SIGN)) == (ENCRYPT | SIGN)) + addstr (_("Sign, Encrypt")); + else if (msg->security & ENCRYPT) + addstr (_("Encrypt")); + else if (msg->security & SIGN) + addstr (_("Sign")); + else + addstr (_("Clear")); + clrtoeol (); + + move (HDR_CRYPTINFO, 0); + clrtoeol (); + if ((WithCrypto & APPLICATION_PGP) + && msg->security & APPLICATION_PGP && msg->security & SIGN) + printw ("%s%s", _(" sign as: "), PgpSignAs ? PgpSignAs : _("")); + + if ((WithCrypto & APPLICATION_SMIME) + && msg->security & APPLICATION_SMIME && msg->security & SIGN) { + printw ("%s%s", _(" sign as: "), SmimeDefaultKey ? SmimeDefaultKey : _("")); + } + + if ((WithCrypto & APPLICATION_SMIME) + && msg->security & APPLICATION_SMIME && (msg->security & ENCRYPT)) { + mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), + NONULL(SmimeCryptAlg)); + off = 20; + } +} + + + +static int pgp_send_menu (HEADER *msg, int *redraw) +{ + pgp_key_t p; + char input_signas[SHORT_STRING]; + + if (!(WithCrypto & APPLICATION_PGP)) + return msg->security; + + switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "), + _("esabf"))) + { + case 1: /* (e)ncrypt */ + msg->security |= ENCRYPT; + break; + + case 2: /* (s)ign */ + msg->security |= SIGN; + break; + + case 3: /* sign (a)s */ + unset_option(OPTPGPCHECKTRUST); + + if ((p = crypt_pgp_ask_for_key (_("Sign as: "), NULL, + KEYFLAG_CANSIGN, PGP_PUBRING))) + { + snprintf (input_signas, sizeof (input_signas), "0x%s", + crypt_pgp_keyid (p)); + mutt_str_replace (&PgpSignAs, input_signas); + crypt_pgp_free_key (&p); + + msg->security |= SIGN; + + crypt_pgp_void_passphrase (); /* probably need a different passphrase */ + } + else + { + msg->security &= ~SIGN; + } + + *redraw = REDRAW_FULL; + break; + + case 4: /* (b)oth */ + msg->security = ENCRYPT | SIGN; + break; + + case 5: /* (f)orget it */ + msg->security = 0; + break; + } + + if (msg->security && msg->security != APPLICATION_PGP) + msg->security |= APPLICATION_PGP; + else + msg->security = 0; + + if(*redraw) + redraw_crypt_lines (msg); + return (msg->security); +} + + + +static int smime_send_menu (HEADER *msg, int *redraw) +{ + char *p; + + if (!(WithCrypto & APPLICATION_SMIME)) + return msg->security; + + switch (mutt_multi_choice (_("S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? "), + _("eswabf"))) + { + case 1: /* (e)ncrypt */ + msg->security |= ENCRYPT; + break; + + case 3: /* encrypt (w)ith */ + msg->security |= ENCRYPT; + switch (mutt_multi_choice (_("1: DES, 2: Triple-DES, 3: RC2-40," + " 4: RC2-64, 5: RC2-128, or (f)orget it? "), + _("12345f"))) { + case 1: + mutt_str_replace (&SmimeCryptAlg, "des"); + break; + case 2: + mutt_str_replace (&SmimeCryptAlg, "des3"); + break; + case 3: + mutt_str_replace (&SmimeCryptAlg, "rc2-40"); + break; + case 4: + mutt_str_replace (&SmimeCryptAlg, "rc2-64"); + break; + case 5: + mutt_str_replace (&SmimeCryptAlg, "rc2-128"); + break; + case 6: /* forget it */ + break; + } + break; + + case 2: /* (s)ign */ + + if(!SmimeDefaultKey) + mutt_message("Can\'t sign: No key specified. use sign(as)."); + else + msg->security |= SIGN; + break; + + case 4: /* sign (a)s */ + + if ((p = crypt_smime_ask_for_key (_("Sign as: "), NULL, 0))) { + p[mutt_strlen (p)-1] = '\0'; + mutt_str_replace (&SmimeDefaultKey, p); + + msg->security |= SIGN; + + /* probably need a different passphrase */ + crypt_smime_void_passphrase (); + } + else + msg->security &= ~SIGN; + + *redraw = REDRAW_FULL; + break; + + case 5: /* (b)oth */ + msg->security = ENCRYPT | SIGN; + break; + + case 6: /* (f)orget it */ + msg->security = 0; + break; + } + + if (msg->security && msg->security != APPLICATION_SMIME) + msg->security |= APPLICATION_SMIME; + else + msg->security = 0; + + if(*redraw) + redraw_crypt_lines (msg); + return (msg->security); +} + + +#ifdef MIXMASTER + +static void redraw_mix_line (LIST *chain) +{ + int c; + char *t; + + mvaddstr (HDR_MIX, 0, " Mix: "); + + if (!chain) + { + addstr (""); + clrtoeol (); + return; + } + + for (c = 12; chain; chain = chain->next) + { + t = chain->data; + if (t && t[0] == '0' && t[1] == '\0') + t = ""; + + if (c + mutt_strlen (t) + 2 >= COLS) + break; + + addstr (NONULL(t)); + if (chain->next) + addstr (", "); + + c += mutt_strlen (t) + 2; + } +} +#endif /* MIXMASTER */ + +static int +check_attachments(ATTACHPTR **idx, short idxlen) +{ + int i, r; + struct stat st; + char pretty[_POSIX_PATH_MAX], msg[_POSIX_PATH_MAX + SHORT_STRING]; + + for (i = 0; i < idxlen; i++) + { + strfcpy(pretty, idx[i]->content->filename, sizeof(pretty)); + if(stat(idx[i]->content->filename, &st) != 0) + { + mutt_pretty_mailbox(pretty); + mutt_error(_("%s [#%d] no longer exists!"), + pretty, i+1); + return -1; + } + + if(idx[i]->content->stamp < st.st_mtime) + { + mutt_pretty_mailbox(pretty); + snprintf(msg, sizeof(msg), _("%s [#%d] modified. Update encoding?"), + pretty, i+1); + + if((r = mutt_yesorno(msg, M_YES)) == M_YES) + mutt_update_encoding(idx[i]->content); + else if(r == -1) + return -1; + } + } + + return 0; +} + +static void draw_envelope_addr (int line, ADDRESS *addr) +{ + char buf[STRING]; + + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), addr, 1); + mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); + mutt_paddstr (W, buf); +} + +static void draw_envelope (HEADER *msg, char *fcc) +{ + draw_envelope_addr (HDR_FROM, msg->env->from); +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) + { +#endif + draw_envelope_addr (HDR_TO, msg->env->to); + draw_envelope_addr (HDR_CC, msg->env->cc); + draw_envelope_addr (HDR_BCC, msg->env->bcc); +#ifdef USE_NNTP + } + else + { + mvprintw (HDR_TO, 0, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]); + mutt_paddstr (W, NONULL (msg->env->newsgroups)); + mvprintw (HDR_CC, 0, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]); + mutt_paddstr (W, NONULL (msg->env->followup_to)); + if (option (OPTXCOMMENTTO)) + { + mvprintw (HDR_BCC, 0, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]); + mutt_paddstr (W, NONULL (msg->env->x_comment_to)); + } + } +#endif + mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); + mutt_paddstr (W, NONULL (msg->env->subject)); + draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); + mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); + mutt_paddstr (W, fcc); + + if (WithCrypto) + redraw_crypt_lines (msg); + +#ifdef MIXMASTER + redraw_mix_line (msg->chain); +#endif + + SETCOLOR (MT_COLOR_STATUS); + mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); + BKGDSET (MT_COLOR_STATUS); + clrtoeol (); + + BKGDSET (MT_COLOR_NORMAL); + SETCOLOR (MT_COLOR_NORMAL); +} + +static int edit_address_list (int line, ADDRESS **addr) +{ + char buf[HUGE_STRING] = ""; /* needs to be large for alias expansion */ + char *err = NULL; + + mutt_addrlist_to_local (*addr); + rfc822_write_address (buf, sizeof (buf), *addr, 0); + if (mutt_get_field (Prompts[line - 1], buf, sizeof (buf), M_ALIAS) == 0) + { + rfc822_free_address (addr); + *addr = mutt_parse_adrlist (*addr, buf); + *addr = mutt_expand_aliases (*addr); + } + + if (option (OPTNEEDREDRAW)) + { + unset_option (OPTNEEDREDRAW); + return (REDRAW_FULL); + } + + if (mutt_addrlist_to_idna (*addr, &err) != 0) + { + mutt_error (_("Warning: '%s' is a bad IDN."), err); + mutt_refresh(); + FREE (&err); + } + + /* redraw the expanded list so the user can see the result */ + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), *addr, 1); + move (line, HDR_XOFFSET); + mutt_paddstr (W, buf); + + return 0; +} + +static int delete_attachment (MUTTMENU *menu, short *idxlen, int x) +{ + ATTACHPTR **idx = (ATTACHPTR **) menu->data; + int y; + + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + + if (x == 0 && menu->max == 1) + { + mutt_error _("You may not delete the only attachment."); + idx[x]->content->tagged = 0; + return (-1); + } + + for (y = 0; y < *idxlen; y++) + { + if (idx[y]->content->next == idx[x]->content) + { + idx[y]->content->next = idx[x]->content->next; + break; + } + } + + idx[x]->content->next = NULL; + idx[x]->content->parts = NULL; + mutt_free_body (&(idx[x]->content)); + FREE (&idx[x]->tree); + FREE (&idx[x]); + for (; x < *idxlen - 1; x++) + idx[x] = idx[x+1]; + menu->max = --(*idxlen); + + return (0); +} + +static void update_idx (MUTTMENU *menu, ATTACHPTR **idx, short idxlen) +{ + idx[idxlen]->level = (idxlen > 0) ? idx[idxlen-1]->level : 0; + if (idxlen) + idx[idxlen - 1]->content->next = idx[idxlen]->content; + idx[idxlen]->content->aptr = idx[idxlen]; + menu->current = idxlen++; + mutt_update_tree (idx, idxlen); + menu->max = idxlen; + return; +} + + +/* + * cum_attachs_size: Cumulative Attachments Size + * + * Returns the total number of bytes used by the attachments in the + * attachment list _after_ content-transfer-encodings have been + * applied. + * + */ + +static unsigned long cum_attachs_size (MUTTMENU *menu) +{ + size_t s; + unsigned short i; + ATTACHPTR **idx = menu->data; + CONTENT *info; + BODY *b; + + for (i = 0, s = 0; i < menu->max; i++) + { + b = idx[i]->content; + + if (!b->content) + b->content = mutt_get_content_info (b->filename, b); + + if ((info = b->content)) + { + switch (b->encoding) + { + case ENCQUOTEDPRINTABLE: + s += 3 * (info->lobin + info->hibin) + info->ascii + info->crlf; + break; + case ENCBASE64: + s += (4 * (info->lobin + info->hibin + info->ascii + info->crlf)) / 3; + break; + default: + s += info->lobin + info->hibin + info->ascii + info->crlf; + break; + } + } + } + + return s; +} + +/* prototype for use below */ +void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu, + const char *p); + +/* + * compose_format_str() + * + * %a = total number of attachments + * %h = hostname [option] + * %l = approx. length of current message (in bytes) + * %v = Mutt version + * + * This function is similar to status_format_str(). Look at that function for + * help when modifying this function. + */ + +static const char * +compose_format_str (char *buf, size_t buflen, char op, const char *src, + const char *prefix, const char *ifstring, + const char *elsestring, + unsigned long data, format_flag flags) +{ + char fmt[SHORT_STRING], tmp[SHORT_STRING]; + int optional = (flags & M_FORMAT_OPTIONAL); + MUTTMENU *menu = (MUTTMENU *) data; + + *buf = 0; + switch (op) + { + case 'a': /* total number of attachments */ + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, menu->max); + break; + + case 'h': /* hostname */ + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (buf, buflen, fmt, NONULL(Hostname)); + break; + + case 'l': /* approx length of current message in bytes */ + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + mutt_pretty_size (tmp, sizeof (tmp), menu ? cum_attachs_size(menu) : 0); + snprintf (buf, buflen, fmt, tmp); + break; + + case 'v': + snprintf (fmt, sizeof (fmt), "Mutt %%s"); + snprintf (buf, buflen, fmt, MUTT_VERSION); + break; + + case 0: + *buf = 0; + return (src); + + default: + snprintf (buf, buflen, "%%%s%c", prefix, op); + break; + } + + if (optional) + compose_status_line (buf, buflen, menu, ifstring); + else if (flags & M_FORMAT_OPTIONAL) + compose_status_line (buf, buflen, menu, elsestring); + + return (src); +} + +void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu, + const char *p) +{ + mutt_FormatString (buf, buflen, p, compose_format_str, + (unsigned long) menu, 0); +} + + +/* return values: + * + * 1 message should be postponed + * 0 normal exit + * -1 abort message + */ +int mutt_compose_menu (HEADER *msg, /* structure for new message */ + char *fcc, /* where to save a copy of the message */ + size_t fcclen, + HEADER *cur) /* current message */ +{ + char helpstr[SHORT_STRING]; + char buf[LONG_STRING]; + char fname[_POSIX_PATH_MAX]; + MUTTMENU *menu; + ATTACHPTR **idx = NULL; + short idxlen = 0; + short idxmax = 0; + int i, close = 0; + int r = -1; /* return value */ + int op = 0; + int loop = 1; + int fccSet = 0; /* has the user edited the Fcc: field ? */ + CONTEXT *ctx = NULL, *this = NULL; + /* Sort, SortAux could be changed in mutt_index_menu() */ + int oldSort, oldSortAux; + struct stat st; +#ifdef USE_NNTP + int news = 0; /* is it a news article ? */ + + if (option (OPTNEWSSEND)) + news++; +#endif + + mutt_attach_init (msg->content); + idx = mutt_gen_attach_list (msg->content, -1, idx, &idxlen, &idxmax, 0, 1); + + menu = mutt_new_menu (); + menu->menu = MENU_COMPOSE; + menu->offset = HDR_ATTACH; + menu->max = idxlen; + menu->make_entry = snd_entry; + menu->tag = mutt_tag_attach; + menu->data = idx; +#ifdef USE_NNTP + if (news) + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_COMPOSE, ComposeNewsHelp); + else +#endif + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_COMPOSE, ComposeHelp); + + while (loop) + { +#ifdef USE_NNTP + unset_option (OPTNEWS); /* for any case */ +#endif + switch (op = mutt_menuLoop (menu)) + { + case OP_REDRAW: + draw_envelope (msg, fcc); + menu->offset = HDR_ATTACH; + menu->pagelen = LINES - HDR_ATTACH - 2; + break; + case OP_COMPOSE_EDIT_FROM: + menu->redraw = edit_address_list (HDR_FROM, &msg->env->from); + break; + case OP_COMPOSE_EDIT_TO: +#ifdef USE_NNTP + if (!news) +#endif + menu->redraw = edit_address_list (HDR_TO, &msg->env->to); + break; + case OP_COMPOSE_EDIT_BCC: +#ifdef USE_NNTP + if (!news) +#endif + menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc); + break; + case OP_COMPOSE_EDIT_CC: +#ifdef USE_NNTP + if (!news) +#endif + menu->redraw = edit_address_list (HDR_CC, &msg->env->cc); + break; +#ifdef USE_NNTP + case OP_COMPOSE_EDIT_NEWSGROUPS: + if (news) + { + if (msg->env->newsgroups) + strfcpy (buf, msg->env->newsgroups, sizeof (buf)); + else + buf[0] = 0; + if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) == 0 && buf[0]) + { + FREE (&msg->env->newsgroups); + mutt_remove_trailing_ws (buf); + msg->env->newsgroups = safe_strdup (mutt_skip_whitespace (buf)); + move (HDR_TO, HDR_XOFFSET); + clrtoeol (); + if (msg->env->newsgroups) + printw ("%-*.*s", W, W, msg->env->newsgroups); + } + } + break; + + case OP_COMPOSE_EDIT_FOLLOWUP_TO: + if (news) + { + buf[0] = 0; + if (msg->env->followup_to) + strfcpy (buf, msg->env->followup_to, sizeof (buf)); + if (mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) == 0 && buf[0]) + { + FREE (&msg->env->followup_to); + mutt_remove_trailing_ws (buf); + msg->env->followup_to = safe_strdup (mutt_skip_whitespace (buf)); + move (HDR_CC, HDR_XOFFSET); + clrtoeol(); + if (msg->env->followup_to) + printw ("%-*.*s", W, W, msg->env->followup_to); + } + } + break; + + case OP_COMPOSE_EDIT_X_COMMENT_TO: + if (news && option (OPTXCOMMENTTO)) + { + buf[0] = 0; + if (msg->env->x_comment_to) + strfcpy (buf, msg->env->x_comment_to, sizeof (buf)); + if (mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) == 0 && buf[0]) + { + FREE (&msg->env->x_comment_to); + msg->env->x_comment_to = safe_strdup (buf); + move (HDR_BCC, HDR_XOFFSET); + clrtoeol(); + if (msg->env->x_comment_to) + printw ("%-*.*s", W, W, msg->env->x_comment_to); + } + } + break; +#endif + case OP_COMPOSE_EDIT_SUBJECT: + if (msg->env->subject) + strfcpy (buf, msg->env->subject, sizeof (buf)); + else + buf[0] = 0; + if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) + { + mutt_str_replace (&msg->env->subject, buf); + move (HDR_SUBJECT, HDR_XOFFSET); + clrtoeol (); + if (msg->env->subject) + mutt_paddstr (W, msg->env->subject); + } + break; + case OP_COMPOSE_EDIT_REPLY_TO: + menu->redraw = edit_address_list (HDR_REPLYTO, &msg->env->reply_to); + break; + case OP_COMPOSE_EDIT_FCC: + strfcpy (buf, fcc, sizeof (buf)); + if (mutt_get_field ("Fcc: ", buf, sizeof (buf), M_FILE | M_CLEAR) == 0) + { + strfcpy (fcc, buf, _POSIX_PATH_MAX); + mutt_pretty_mailbox (fcc); + move (HDR_FCC, HDR_XOFFSET); + mutt_paddstr (W, fcc); + fccSet = 1; + } + MAYBE_REDRAW (menu->redraw); + break; + case OP_COMPOSE_EDIT_MESSAGE: + if (Editor && (mutt_strcmp ("builtin", Editor) != 0) && !option (OPTEDITHDRS)) + { + mutt_edit_file (Editor, msg->content->filename); + mutt_update_encoding (msg->content); + menu->redraw = REDRAW_CURRENT | REDRAW_STATUS; + break; + } + /* fall through */ + case OP_COMPOSE_EDIT_HEADERS: + if (op == OP_COMPOSE_EDIT_HEADERS || + (op == OP_COMPOSE_EDIT_MESSAGE && option (OPTEDITHDRS))) + { + char *tag = NULL, *err = NULL; + mutt_env_to_local (msg->env); + mutt_edit_headers (NONULL (Editor), msg->content->filename, msg, + fcc, fcclen); + if (mutt_env_to_idna (msg->env, &tag, &err)) + { + mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err); + FREE (&err); + } + } + else + { + /* this is grouped with OP_COMPOSE_EDIT_HEADERS because the + attachment list could change if the user invokes ~v to edit + the message with headers, in which we need to execute the + code below to regenerate the index array */ + mutt_builtin_editor (msg->content->filename, msg, cur); + } + mutt_update_encoding (msg->content); + + /* attachments may have been added */ + if (idxlen && idx[idxlen - 1]->content->next) + { + for (i = 0; i < idxlen; i++) + FREE (&idx[i]); + idxlen = 0; + idx = mutt_gen_attach_list (msg->content, -1, idx, &idxlen, &idxmax, 0, 1); + menu->data = idx; + menu->max = idxlen; + } + + menu->redraw = REDRAW_FULL; + break; + + + + case OP_COMPOSE_ATTACH_KEY: + if (!(WithCrypto & APPLICATION_PGP)) + break; + if (idxlen == idxmax) + { + safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5)); + menu->data = idx; + } + + idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR)); + if ((idx[idxlen]->content = crypt_pgp_make_key_attachment(NULL)) != NULL) + { + update_idx (menu, idx, idxlen++); + menu->redraw |= REDRAW_INDEX; + } + else + FREE (&idx[idxlen]); + + menu->redraw |= REDRAW_STATUS; + + if (option(OPTNEEDREDRAW)) + { + menu->redraw = REDRAW_FULL; + unset_option(OPTNEEDREDRAW); + } + + break; + + + case OP_COMPOSE_ATTACH_FILE: + { + char *prompt, **files; + int error, numfiles; + + fname[0] = 0; + prompt = _("Attach file"); + numfiles = 0; + files = NULL; + + if (_mutt_enter_fname (prompt, fname, sizeof (fname), &menu->redraw, 0, 1, &files, &numfiles) == -1 || + *fname == '\0') + break; + + if (idxlen + numfiles >= idxmax) + { + safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5 + numfiles)); + menu->data = idx; + } + + error = 0; + if (numfiles > 1) + mutt_message _("Attaching selected files..."); + for (i = 0; i < numfiles; i++) + { + char *att = files[i]; + idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR)); + idx[idxlen]->content = mutt_make_file_attach (att); + if (idx[idxlen]->content != NULL) + update_idx (menu, idx, idxlen++); + else + { + error = 1; + mutt_error (_("Unable to attach %s!"), att); + FREE (&idx[idxlen]); + } + } + + FREE (&files); + if (!error) mutt_clear_error (); + + menu->redraw |= REDRAW_INDEX | REDRAW_STATUS; + } + break; + + case OP_COMPOSE_ATTACH_MESSAGE: +#ifdef USE_NNTP + case OP_COMPOSE_ATTACH_NEWS_MESSAGE: +#endif + { + char *prompt; + HEADER *h; + + fname[0] = 0; + prompt = _("Open mailbox to attach message from"); + +#ifdef USE_NNTP + unset_option (OPTNEWS); + if (op == OP_COMPOSE_ATTACH_NEWS_MESSAGE) + { + if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer))) + break; + + prompt = _("Open newsgroup to attach message from"); + set_option (OPTNEWS); + } +#endif + + if (Context) +#ifdef USE_NNTP + if ((op == OP_COMPOSE_ATTACH_MESSAGE) ^ (Context->magic == M_NNTP)) +#endif + { + strfcpy (fname, NONULL (Context->path), sizeof (fname)); + mutt_pretty_mailbox (fname); + } + + if (mutt_enter_fname (prompt, fname, sizeof (fname), &menu->redraw, 1) == -1 || !fname[0]) + break; + +#ifdef USE_NNTP + if (option (OPTNEWS)) + nntp_expand_path (fname, sizeof (fname), &CurrentNewsSrv->conn->account); + else +#endif + mutt_expand_path (fname, sizeof (fname)); +#ifdef USE_IMAP + if (!mx_is_imap (fname)) +#endif +#ifdef USE_POP + if (!mx_is_pop (fname)) +#endif +#ifdef USE_NNTP + if (!mx_is_nntp (fname) && !option (OPTNEWS)) +#endif + /* check to make sure the file exists and is readable */ + if (access (fname, R_OK) == -1) + { + mutt_perror (fname); + break; + } + + menu->redraw = REDRAW_FULL; + + ctx = mx_open_mailbox (fname, M_READONLY, NULL); + if (ctx == NULL) + { + mutt_perror (fname); + break; + } + + if (!ctx->msgcount) + { + mx_close_mailbox (ctx, NULL); + FREE (&ctx); + mutt_error _("No messages in that folder."); + break; + } + + this = Context; /* remember current folder and sort methods*/ + oldSort = Sort; oldSortAux = SortAux; + + Context = ctx; + set_option(OPTATTACHMSG); + mutt_message _("Tag the messages you want to attach!"); + close = mutt_index_menu (); + unset_option(OPTATTACHMSG); + + if (!Context) + { + /* go back to the folder we started from */ + Context = this; + /* Restore old $sort and $sort_aux */ + Sort = oldSort; + SortAux = oldSortAux; + menu->redraw |= REDRAW_INDEX | REDRAW_STATUS; + break; + } + + if (idxlen + Context->tagged >= idxmax) + { + safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5 + Context->tagged)); + menu->data = idx; + } + + for (i = 0; i < Context->msgcount; i++) + { + h = Context->hdrs[i]; + if (h->tagged) + { + idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR)); + idx[idxlen]->content = mutt_make_message_attach (Context, h, 1); + if (idx[idxlen]->content != NULL) + update_idx (menu, idx, idxlen++); + else + { + mutt_error _("Unable to attach!"); + FREE (&idx[idxlen]); + } + } + } + menu->redraw |= REDRAW_FULL; + + if (close == OP_QUIT) + mx_close_mailbox (Context, NULL); + else + mx_fastclose_mailbox (Context); + FREE (&Context); + + /* go back to the folder we started from */ + Context = this; + /* Restore old $sort and $sort_aux */ + Sort = oldSort; + SortAux = oldSortAux; + } + break; + + case OP_DELETE: + CHECK_COUNT; + if (delete_attachment (menu, &idxlen, menu->current) == -1) + break; + mutt_update_tree (idx, idxlen); + if (idxlen) + { + if (menu->current > idxlen - 1) + menu->current = idxlen - 1; + } + else + menu->current = 0; + + if (menu->current == 0) + msg->content = idx[0]->content; + + menu->redraw |= REDRAW_STATUS; + break; + +#define CURRENT idx[menu->current]->content + + case OP_COMPOSE_TOGGLE_RECODE: + { + CHECK_COUNT; + if (!mutt_is_text_part (CURRENT)) + { + mutt_error (_("Recoding only affects text attachments.")); + break; + } + CURRENT->noconv = !CURRENT->noconv; + if (CURRENT->noconv) + mutt_message (_("The current attachment won't be converted.")); + else + mutt_message (_("The current attachment will be converted.")); + menu->redraw = REDRAW_CURRENT; + break; + } +#undef CURRENT + + case OP_COMPOSE_EDIT_DESCRIPTION: + CHECK_COUNT; + strfcpy (buf, + idx[menu->current]->content->description ? + idx[menu->current]->content->description : "", + sizeof (buf)); + /* header names should not be translated */ + if (mutt_get_field ("Description: ", buf, sizeof (buf), 0) == 0) + { + mutt_str_replace (&idx[menu->current]->content->description, buf); + menu->redraw = REDRAW_CURRENT; + } + break; + + case OP_COMPOSE_UPDATE_ENCODING: + CHECK_COUNT; + if (menu->tagprefix) + { + BODY *top; + for (top = msg->content; top; top = top->next) + { + if (top->tagged) + mutt_update_encoding (top); + } + menu->redraw = REDRAW_FULL; + } + else + { + mutt_update_encoding(idx[menu->current]->content); + menu->redraw = REDRAW_CURRENT | REDRAW_STATUS; + } + break; + + case OP_COMPOSE_TOGGLE_DISPOSITION: + /* toggle the content-disposition between inline/attachment */ + idx[menu->current]->content->disposition = (idx[menu->current]->content->disposition == DISPINLINE) ? DISPATTACH : DISPINLINE; + menu->redraw = REDRAW_CURRENT; + break; + + case OP_EDIT_TYPE: + CHECK_COUNT; + { + mutt_edit_content_type (NULL, idx[menu->current]->content, NULL); + + /* this may have been a change to text/something */ + mutt_update_encoding (idx[menu->current]->content); + + menu->redraw = REDRAW_CURRENT; + } + break; + + case OP_COMPOSE_EDIT_ENCODING: + CHECK_COUNT; + strfcpy (buf, ENCODING (idx[menu->current]->content->encoding), + sizeof (buf)); + if (mutt_get_field ("Content-Transfer-Encoding: ", buf, + sizeof (buf), 0) == 0 && buf[0]) + { + if ((i = mutt_check_encoding (buf)) != ENCOTHER && i != ENCUUENCODED) + { + idx[menu->current]->content->encoding = i; + menu->redraw = REDRAW_CURRENT | REDRAW_STATUS; + mutt_clear_error(); + } + else + mutt_error _("Invalid encoding."); + } + break; + + case OP_COMPOSE_SEND_MESSAGE: + + if(check_attachments(idx, idxlen) != 0) + { + menu->redraw = REDRAW_FULL; + break; + } + + +#ifdef MIXMASTER + if (msg->chain && mix_check_message (msg) != 0) + break; +#endif + + if (!fccSet && *fcc) + { + if ((i = query_quadoption (OPT_COPY, + _("Save a copy of this message?"))) == -1) + break; + else if (i == M_NO) + *fcc = 0; + } + + loop = 0; + r = 0; + break; + + case OP_COMPOSE_EDIT_FILE: + CHECK_COUNT; + mutt_edit_file (NONULL(Editor), idx[menu->current]->content->filename); + mutt_update_encoding (idx[menu->current]->content); + menu->redraw = REDRAW_CURRENT | REDRAW_STATUS; + break; + + case OP_COMPOSE_TOGGLE_UNLINK: + CHECK_COUNT; + idx[menu->current]->content->unlink = !idx[menu->current]->content->unlink; + +#if 0 + /* OPTRESOLVE is otherwise ignored on this menu. + * Where's the bug? + */ + + if (option (OPTRESOLVE) && menu->current + 1 < menu->max) + menu->current++; +# endif + menu->redraw = REDRAW_INDEX; + break; + + case OP_COMPOSE_GET_ATTACHMENT: + CHECK_COUNT; + if(menu->tagprefix) + { + BODY *top; + for(top = msg->content; top; top = top->next) + { + if(top->tagged) + mutt_get_tmp_attachment(top); + } + menu->redraw = REDRAW_FULL; + } + else if (mutt_get_tmp_attachment(idx[menu->current]->content) == 0) + menu->redraw = REDRAW_CURRENT; + + break; + + case OP_COMPOSE_RENAME_FILE: + CHECK_COUNT; + strfcpy (fname, idx[menu->current]->content->filename, sizeof (fname)); + mutt_pretty_mailbox (fname); + if (mutt_get_field (_("Rename to: "), fname, sizeof (fname), M_FILE) + == 0 && fname[0]) + { + if (stat(idx[menu->current]->content->filename, &st) == -1) + { + mutt_error (_("Can't stat %s: %s"), fname, strerror (errno)); + break; + } + + mutt_expand_path (fname, sizeof (fname)); + if(mutt_rename_file (idx[menu->current]->content->filename, fname)) + break; + + mutt_str_replace (&idx[menu->current]->content->filename, fname); + menu->redraw = REDRAW_CURRENT; + + if(idx[menu->current]->content->stamp >= st.st_mtime) + mutt_stamp_attachment(idx[menu->current]->content); + + } + break; + + case OP_COMPOSE_NEW_MIME: + { + char type[STRING]; + char *p; + int itype; + FILE *fp; + + CLEARLINE (LINES-1); + fname[0] = 0; + if (mutt_get_field (_("New file: "), fname, sizeof (fname), M_FILE) + != 0 || !fname[0]) + continue; + mutt_expand_path (fname, sizeof (fname)); + + /* Call to lookup_mime_type () ? maybe later */ + type[0] = 0; + if (mutt_get_field ("Content-Type: ", type, sizeof (type), 0) != 0 + || !type[0]) + continue; + + if (!(p = strchr (type, '/'))) + { + mutt_error _("Content-Type is of the form base/sub"); + continue; + } + *p++ = 0; + if ((itype = mutt_check_mime_type (type)) == TYPEOTHER) + { + mutt_error (_("Unknown Content-Type %s"), type); + continue; + } + if (idxlen == idxmax) + { + safe_realloc (&idx, sizeof (ATTACHPTR *) * (idxmax += 5)); + menu->data = idx; + } + + idx[idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR)); + /* Touch the file */ + if (!(fp = safe_fopen (fname, "w"))) + { + mutt_error (_("Can't create file %s"), fname); + FREE (&idx[idxlen]); + continue; + } + fclose (fp); + + if ((idx[idxlen]->content = mutt_make_file_attach (fname)) == NULL) + { + mutt_error _("What we have here is a failure to make an attachment"); + continue; + } + update_idx (menu, idx, idxlen++); + + idx[menu->current]->content->type = itype; + mutt_str_replace (&idx[menu->current]->content->subtype, p); + idx[menu->current]->content->unlink = 1; + menu->redraw |= REDRAW_INDEX | REDRAW_STATUS; + + if (mutt_compose_attachment (idx[menu->current]->content)) + { + mutt_update_encoding (idx[menu->current]->content); + menu->redraw = REDRAW_FULL; + } + } + break; + + case OP_COMPOSE_EDIT_MIME: + CHECK_COUNT; + if (mutt_edit_attachment (idx[menu->current]->content)) + { + mutt_update_encoding (idx[menu->current]->content); + menu->redraw = REDRAW_FULL; + } + break; + + case OP_VIEW_ATTACH: + case OP_DISPLAY_HEADERS: + CHECK_COUNT; + mutt_attach_display_loop (menu, op, NULL, NULL, NULL, &idx, &idxlen, NULL, 0); + menu->redraw = REDRAW_FULL; + break; + + case OP_SAVE: + CHECK_COUNT; + mutt_save_attachment_list (NULL, menu->tagprefix, menu->tagprefix ? msg->content : idx[menu->current]->content, NULL, menu); + MAYBE_REDRAW (menu->redraw); + break; + + case OP_PRINT: + CHECK_COUNT; + mutt_print_attachment_list (NULL, menu->tagprefix, menu->tagprefix ? msg->content : idx[menu->current]->content); + break; + + case OP_PIPE: + case OP_FILTER: + CHECK_COUNT; + mutt_pipe_attachment_list (NULL, menu->tagprefix, menu->tagprefix ? msg->content : idx[menu->current]->content, op == OP_FILTER); + if (op == OP_FILTER) /* cte might have changed */ + menu->redraw = menu->tagprefix ? REDRAW_FULL : REDRAW_CURRENT; + menu->redraw |= REDRAW_STATUS; + break; + + case OP_EXIT: + if ((i = query_quadoption (OPT_POSTPONE, _("Postpone this message?"))) == M_NO) + { + while (idxlen-- > 0) + { + /* avoid freeing other attachments */ + idx[idxlen]->content->next = NULL; + idx[idxlen]->content->parts = NULL; + mutt_free_body (&idx[idxlen]->content); + FREE (&idx[idxlen]->tree); + FREE (&idx[idxlen]); + } + FREE (&idx); + idxlen = 0; + idxmax = 0; + r = -1; + loop = 0; + break; + } + else if (i == -1) + break; /* abort */ + + /* fall through to postpone! */ + + case OP_COMPOSE_POSTPONE_MESSAGE: + + if(check_attachments(idx, idxlen) != 0) + { + menu->redraw = REDRAW_FULL; + break; + } + + loop = 0; + r = 1; + break; + + case OP_COMPOSE_ISPELL: + endwin (); + snprintf (buf, sizeof (buf), "%s -x %s", NONULL(Ispell), msg->content->filename); + if (mutt_system (buf) == -1) + mutt_error (_("Error running \"%s\"!"), buf); + else + { + mutt_update_encoding (msg->content); + menu->redraw |= REDRAW_STATUS; + } + break; + + case OP_COMPOSE_WRITE_MESSAGE: + + fname[0] = '\0'; + if (Context) + { + strfcpy (fname, NONULL (Context->path), sizeof (fname)); + mutt_pretty_mailbox (fname); + } + if (idxlen) + msg->content = idx[0]->content; + if (mutt_enter_fname (_("Write message to mailbox"), fname, sizeof (fname), + &menu->redraw, 1) != -1 && fname[0]) + { + mutt_message (_("Writing message to %s ..."), fname); + mutt_expand_path (fname, sizeof (fname)); + + if (msg->content->next) + msg->content = mutt_make_multipart (msg->content); + + if (mutt_write_fcc (NONULL (fname), msg, NULL, 1, NULL) < 0) + msg->content = mutt_remove_multipart (msg->content); + else + mutt_message _("Message written."); + } + break; + + + + case OP_COMPOSE_PGP_MENU: + if (!(WithCrypto & APPLICATION_PGP)) + break; + if ((WithCrypto & APPLICATION_SMIME) + && msg->security & APPLICATION_SMIME) + { + if (mutt_yesorno (_("S/MIME already selected. Clear & continue ? "), + M_YES) != M_YES) + { + mutt_clear_error (); + break; + } + msg->security = 0; + } + msg->security = pgp_send_menu (msg, &menu->redraw); + redraw_crypt_lines (msg); + break; + + + case OP_FORGET_PASSPHRASE: + crypt_forget_passphrase (); + break; + + + case OP_COMPOSE_SMIME_MENU: + if (!(WithCrypto & APPLICATION_SMIME)) + break; + + if ((WithCrypto & APPLICATION_PGP) + && msg->security & APPLICATION_PGP) + { + if (mutt_yesorno (_("PGP already selected. Clear & continue ? "), + M_YES) != M_YES) + { + mutt_clear_error (); + break; + } + msg->security = 0; + } + msg->security = smime_send_menu(msg, &menu->redraw); + redraw_crypt_lines (msg); + break; + + +#ifdef MIXMASTER + case OP_COMPOSE_MIX: + + mix_make_chain (&msg->chain, &menu->redraw); + break; +#endif + + } + + /* Draw formated compose status line */ + if (menu->redraw & REDRAW_STATUS) + { + compose_status_line (buf, sizeof (buf), menu, NONULL(ComposeFormat)); + CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); + SETCOLOR (MT_COLOR_STATUS); + printw ("%-*.*s", COLS, COLS, buf); + SETCOLOR (MT_COLOR_NORMAL); + menu->redraw &= ~REDRAW_STATUS; + } + } + + mutt_menuDestroy (&menu); + + if (idxlen) + { + msg->content = idx[0]->content; + for (i = 0; i < idxlen; i++) + { + idx[i]->content->aptr = NULL; + FREE (&idx[i]); + } + } + else + msg->content = NULL; + + FREE (&idx); + + return (r); +} + diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..cc726cd --- /dev/null +++ b/config.guess @@ -0,0 +1,1388 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-02-22' + +# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i586-pc-interix3 + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..7a995eb --- /dev/null +++ b/config.h.in @@ -0,0 +1,560 @@ +/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */ + +/* Define if using alloca.c. */ +#undef C_ALLOCA + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define if you have and it should be used (not on Ultrix). */ +#undef HAVE_ALLOCA_H + +/* Define if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define as __inline if that's what the C compiler calls it. */ +#undef inline + +/* Define to `long' if doesn't define. */ +#undef off_t + +/* Define to `int' if doesn't define. */ +#undef pid_t + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +#undef STACK_DIRECTION + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if `sys_siglist' is declared by . */ +#undef SYS_SIGLIST_DECLARED + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* Compiling with newsreading support with NNTP */ +#undef USE_NNTP + +/* program to use for shell commands */ +#define EXECSHELL "/bin/sh" + +/* Define to `int' if doesn't define. */ +#undef sig_atomic_t + +/* The number of bytes in a int. */ +#undef SIZEOF_INT + +/* The number of bytes in a long. */ +#undef SIZEOF_LONG + +/* Define if you have the RAND_egd function. */ +#undef HAVE_RAND_EGD + +/* Define if you have the RAND_status function. */ +#undef HAVE_RAND_STATUS + +/* Define if you have the __argz_count function. */ +#undef HAVE___ARGZ_COUNT + +/* Define if you have the __argz_next function. */ +#undef HAVE___ARGZ_NEXT + +/* Define if you have the __argz_stringify function. */ +#undef HAVE___ARGZ_STRINGIFY + +/* Define if you have the bind_textdomain_codeset function. */ +#undef HAVE_BIND_TEXTDOMAIN_CODESET + +/* Define if you have the dcgettext function. */ +#undef HAVE_DCGETTEXT + +/* Define if you have the fchdir function. */ +#undef HAVE_FCHDIR + +/* Define if you have the feof_unlocked function. */ +#undef HAVE_FEOF_UNLOCKED + +/* Define if you have the fgetpos function. */ +#undef HAVE_FGETPOS + +/* Define if you have the fgets_unlocked function. */ +#undef HAVE_FGETS_UNLOCKED + +/* Define if you have the ftruncate function. */ +#undef HAVE_FTRUNCATE + +/* Define if you have the getaddrinfo function. */ +#undef HAVE_GETADDRINFO + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD + +/* Define if you have the getegid function. */ +#undef HAVE_GETEGID + +/* Define if you have the geteuid function. */ +#undef HAVE_GETEUID + +/* Define if you have the getgid function. */ +#undef HAVE_GETGID + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the getsid function. */ +#undef HAVE_GETSID + +/* Define if you have the getuid function. */ +#undef HAVE_GETUID + +/* Define if you have the idna_to_ascii_8z function. */ +#undef HAVE_IDNA_TO_ASCII_8Z + +/* Define if you have the idna_to_ascii_from_locale function. */ +#undef HAVE_IDNA_TO_ASCII_FROM_LOCALE + +/* Define if you have the idna_to_ascii_from_utf8 function. */ +#undef HAVE_IDNA_TO_ASCII_FROM_UTF8 + +/* Define if you have the idna_to_ascii_lz function. */ +#undef HAVE_IDNA_TO_ASCII_LZ + +/* Define if you have the idna_to_unicode_8z8z function. */ +#undef HAVE_IDNA_TO_UNICODE_8Z8Z + +/* Define if you have the idna_to_unicode_utf8_from_utf8 function. */ +#undef HAVE_IDNA_TO_UNICODE_UTF8_FROM_UTF8 + +/* Define if you have the iswalnum function. */ +#undef HAVE_ISWALNUM + +/* Define if you have the iswalpha function. */ +#undef HAVE_ISWALPHA + +/* Define if you have the iswcntrl function. */ +#undef HAVE_ISWCNTRL + +/* Define if you have the iswdigit function. */ +#undef HAVE_ISWDIGIT + +/* Define if you have the iswgraph function. */ +#undef HAVE_ISWGRAPH + +/* Define if you have the iswlower function. */ +#undef HAVE_ISWLOWER + +/* Define if you have the iswprint function. */ +#undef HAVE_ISWPRINT + +/* Define if you have the iswpunct function. */ +#undef HAVE_ISWPUNCT + +/* Define if you have the iswspace function. */ +#undef HAVE_ISWSPACE + +/* Define if you have the iswupper function. */ +#undef HAVE_ISWUPPER + +/* Define if you have the iswxdigit function. */ +#undef HAVE_ISWXDIGIT + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + +/* Define if you have the mempcpy function. */ +#undef HAVE_MEMPCPY + +/* Define if you have the munmap function. */ +#undef HAVE_MUNMAP + +/* Define if you have the putenv function. */ +#undef HAVE_PUTENV + +/* Define if you have the regcomp function. */ +#undef HAVE_REGCOMP + +/* Define if you have the setegid function. */ +#undef HAVE_SETEGID + +/* Define if you have the setenv function. */ +#undef HAVE_SETENV + +/* Define if you have the setlocale function. */ +#undef HAVE_SETLOCALE + +/* Define if you have the setrlimit function. */ +#undef HAVE_SETRLIMIT + +/* Define if you have the snprintf function. */ +#undef HAVE_SNPRINTF + +/* Define if you have the srand48 function. */ +#undef HAVE_SRAND48 + +/* Define if you have the stpcpy function. */ +#undef HAVE_STPCPY + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strchr function. */ +#undef HAVE_STRCHR + +/* Define if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR + +/* Define if you have the strftime function. */ +#undef HAVE_STRFTIME + +/* Define if you have the strtoul function. */ +#undef HAVE_STRTOUL + +/* Define if you have the towlower function. */ +#undef HAVE_TOWLOWER + +/* Define if you have the towupper function. */ +#undef HAVE_TOWUPPER + +/* Define if you have the tsearch function. */ +#undef HAVE_TSEARCH + +/* Define if you have the vsnprintf function. */ +#undef HAVE_VSNPRINTF + +/* Define if you have the header file. */ +#undef HAVE_ARGZ_H + +/* Define if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define if you have the header file. */ +#undef HAVE_ICONV_H + +/* Define if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if you have the header file. */ +#undef HAVE_IOCTL_H + +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#undef HAVE_NCURSES_H + +/* Define if you have the header file. */ +#undef HAVE_NCURSESW_NCURSES_H + +/* Define if you have the header file. */ +#undef HAVE_NL_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define if you have the header file. */ +#undef HAVE_STDDEF_H + +/* Define if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_SYSEXITS_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the header file. */ +#undef HAVE_UNIX_H + +/* Define if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define if you have the header file. */ +#undef HAVE_WCTYPE_H + +/* Define if you have the crypto library (-lcrypto). */ +#undef HAVE_LIBCRYPTO + +/* Define if you have the esmtp library (-lesmtp). */ +#undef HAVE_LIBESMTP + +/* Define if you have the idn library (-lidn). */ +#undef HAVE_LIBIDN + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the sasl library (-lsasl). */ +#undef HAVE_LIBSASL + +/* Define if you have the sasl2 library (-lsasl2). */ +#undef HAVE_LIBSASL2 + +/* Define if you have the socket library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Define if you have the ssl library (-lssl). */ +#undef HAVE_LIBSSL + +/* Define if you have the termlib library (-ltermlib). */ +#undef HAVE_LIBTERMLIB + +/* Name of package */ +#undef PACKAGE + +/* Version number of package */ +#undef VERSION + +/* Define if compiler has function prototypes */ +#undef PROTOTYPES + +/* Where to find sendmail on your system. */ +#undef SENDMAIL + +/* Define if you want classic PGP support. */ +#undef CRYPT_BACKEND_CLASSIC_PGP + +/* Define if you want clasic S/MIME support. */ +#undef CRYPT_BACKEND_CLASSIC_SMIME + +/* Where to find mixmaster on your system. */ +#undef MIXMASTER + +/* Is this the international version? */ +#undef SUBVERSION + +/* Where to find ispell on your system. */ +#undef ISPELL + +/* Define if you compile with SLang instead of curses/ncurses. */ +#undef USE_SLANG_CURSES + +/* Define if your curses library supports color. */ +#undef HAVE_COLOR + +/* Define if your curses library supports color. */ +#undef HAVE_COLOR + +/* Define if you have the uint32_t type. */ +#undef HAVE_UINT32_T + +/* Define if you want to use the included regex.c. */ +#undef USE_GNU_REGEX + +/* Where new mail is spooled. */ +#undef MAILPATH + +/* Is mail spooled to the user's home directory? If defined, + MAILPATH should be set to the filename of the spool mailbox + relative the the home directory. + use: configure --with-homespool=FILE */ +#undef HOMESPOOL + +/* Define to use dotlocking for mailboxes. */ +#undef USE_DOTLOCK + +/* Where new mail is spooled. */ +#undef MAILPATH + +/* Define to use dotlocking for mailboxes. */ +#undef USE_DOTLOCK + +/* Define to use dotlocking for mailboxes. */ +#undef USE_DOTLOCK + +/* Define if mutt should run setgid mail. */ +#undef USE_SETGID + +/* Define if you want to use an external dotlocking program. */ +#undef DL_STANDALONE + +/* Define your domain name. */ +#undef DOMAIN + +/* Define if you want support for the POP3 protocol. */ +#undef USE_POP + +/* Define if you want support for the IMAP protocol. */ +#undef USE_IMAP + +/* Define to 'int' if doesn't have it. */ +#undef socklen_t + +/* Include code for socket support. Set automatically if you enable POP3 or IMAP */ +#undef USE_SOCKET + +/* Define if your GSSAPI implementation is Heimdal */ +#undef HAVE_HEIMDAL + +/* Define if you have GSSAPI libraries available */ +#undef USE_GSS + +/* Define if you want support for SSL. */ +#undef USE_SSL + +/* Define if you want support for SSL via the NSS library. */ +#undef USE_NSS + +/* Define if want to use the Cyrus SASL library for POP/IMAP authentication. */ +#undef USE_SASL + +/* Define if want to use the Cyrus SASL library for POP/IMAP authentication. */ +#undef USE_SASL + +/* Define if want to use version 2 of the Cyrus SASL library. */ +#undef USE_SASL2 + +/* Define to enable debugging info. */ +#undef DEBUG + +/* Define to use flock() to lock mailboxes. */ +#undef USE_FLOCK + +/* Define to use fcntl() to lock folders. */ +#undef USE_FCNTL + +/* Define if you have problems with mutt not detecting + new/old mailboxes over NFS. Some NFS implementations + incorrectly cache the attributes of small files. */ +#undef NFS_ATTRIBUTE_HACK + +/* Define to enable the buffy_size feature. */ +#undef BUFFY_SIZE + +/* Define to enable Sun mailtool attachments support. */ +#undef SUN_ATTACHMENT + +/* Define if the result of isprint() is unreliable. */ +#undef LOCALES_HACK + +/* program to use for shell commands */ +#undef EXECSHELL + +/* Enable exact regeneration of email addresses as parsed? + NOTE: this requires significant more memory when defined. */ +#undef EXACT_ADDRESS + +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + +/* Define if you have and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define if your file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if translation of program messages to the user's native language + is requested. */ +#undef ENABLE_NLS + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if defines iconv_t. */ +#undef HAVE_ICONV_T_DEF + +/* Define if your gettext has bind_textdomain_codeset. */ +#undef HAVE_BIND_TEXTDOMAIN_CODESET + +/* Define to 'int' if system headers don't define. */ +#undef wchar_t + +/* Define to 'int' if system headers don't define. */ +#undef wint_t + +/* Define to 'int' if system headers don't define. */ +#undef mbstate_t + +/* Define if you are using the system's wchar_t functions. */ +#undef HAVE_WC_FUNCS + +/* Define if you have and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define if you have and nl_langinfo(YESEXPR). */ +#undef HAVE_LANGINFO_YESEXPR + +/* Define to enable the use of libesmtp */ +#undef USE_LIBESMTP + +/* Define if you have start_color, as a function or macro. */ +#undef HAVE_START_COLOR + +/* Define if you have typeahead, as a function or macro. */ +#undef HAVE_TYPEAHEAD + +/* Define if you have bkgdset, as a function or macro. */ +#undef HAVE_BKGDSET + +/* Define if you have curs_set, as a function or macro. */ +#undef HAVE_CURS_SET + +/* Define if you have meta, as a function or macro. */ +#undef HAVE_META + +/* Define if you have use_default_colors, as a function or macro. */ +#undef HAVE_USE_DEFAULT_COLORS + +/* Define if you have resizeterm, as a function or macro. */ +#undef HAVE_RESIZETERM + +/* Some systems declare sig_atomic_t as volatile, some others -- no. + * This define will have value `sig_atomic_t' or `volatile sig_atomic_t' + * accordingly. */ +#undef SIG_ATOMIC_VOLATILE_T + +/* Define as 1 if iconv() only converts exactly and we should treat + * all return values other than (size_t)(-1) as equivalent. */ +#undef ICONV_NONTRANS + diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..9772e87 --- /dev/null +++ b/config.sub @@ -0,0 +1,1489 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-02-22' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic4x | c4x*) + basic_machine=tic4x-unknown + os=-coff + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..05de30d --- /dev/null +++ b/configure @@ -0,0 +1,9058 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --disable-pgp Disable PGP support" +ac_help="$ac_help + --disable-smime Disable SMIME support" +ac_help="$ac_help + --with-mixmaster[=PATH] Include Mixmaster support" +ac_help="$ac_help + --with-slang[=DIR] Use S-Lang instead of ncurses" +ac_help="$ac_help + --with-curses=DIR Where ncurses is installed " +ac_help="$ac_help + --with-regex Use the GNU regex library " +ac_help="$ac_help + --with-homespool[=FILE] File in user's directory where new mail is spooled" +ac_help="$ac_help + --with-mailpath=DIR Directory where spool mailboxes are located" +ac_help="$ac_help + --enable-external-dotlock Force use of an external dotlock program" +ac_help="$ac_help + --with-docdir=PATH Specify where to put the documentation" +ac_help="$ac_help + --with-domain=DOMAIN Specify your DNS domain name" +ac_help="$ac_help + --enable-pop Enable POP3 support" +ac_help="$ac_help + --enable-imap Enable IMAP support" +ac_help="$ac_help + --enable-nntp Enable NNTP support" +ac_help="$ac_help + --with-gss[=PFX] Compile in GSSAPI authentication for IMAP" +ac_help="$ac_help + --with-ssl[=PFX] Compile in SSL support for POP/IMAP" +ac_help="$ac_help + --with-nss[=PFX] Compile in SSL support for POP/IMAP via NSS" +ac_help="$ac_help + --with-sasl[=PFX] Use Cyrus SASL library for POP/IMAP authentication" +ac_help="$ac_help + --with-sasl2[=PFX] Use Cyrus SASL library version 2 for POP/IMAP authentication" +ac_help="$ac_help + --with-idn=[PFX] Use GNU libidn for domain names" +ac_help="$ac_help + --enable-debug Enable debugging support" +ac_help="$ac_help + --enable-flock Use flock() to lock files" +ac_help="$ac_help + --disable-fcntl Do NOT use fcntl() to lock files " +ac_help="$ac_help + --disable-warnings Turn off compiler warnings (not recommended)" +ac_help="$ac_help + --enable-nfs-fix Work around an NFS with broken attributes caching " +ac_help="$ac_help + --enable-buffy-size Use file size attribute instead of access time " +ac_help="$ac_help + --enable-mailtool Enable Sun mailtool attachments support " +ac_help="$ac_help + --enable-locales-fix The result of isprint() is unreliable " +ac_help="$ac_help + --with-exec-shell=SHELL Specify alternate shell (ONLY if /bin/sh is broken)" +ac_help="$ac_help + --enable-exact-address Enable regeneration of email addresses" +ac_help="$ac_help + --disable-iconv Disable iconv support" +ac_help="$ac_help + --with-libiconv-prefix=DIR Search for libiconv in DIR/include and DIR/lib" +ac_help="$ac_help + --disable-nls Do not use Native Language Support" +ac_help="$ac_help + --with-included-gettext Use the GNU gettext library included here" +ac_help="$ac_help + --without-wc-funcs Do not use the system's wchar_t functions" +ac_help="$ac_help + --with-libesmtp=DIR Compile in support for libesmtp for the MTA" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=mutt.h + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + + + + +mutt_cv_version=`cat $srcdir/VERSION` + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:635: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:688: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:745: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=mutt + +VERSION=$mutt_cv_version + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:791: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:804: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:817: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:830: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:843: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + + + +ALL_LINGUAS="de ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg" + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:868: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + + +echo $ac_n "checking for prefix""... $ac_c" 1>&6 +echo "configure:890: checking for prefix" >&5 +if test x$prefix = xNONE; then + mutt_cv_prefix=$ac_default_prefix +else + mutt_cv_prefix=$prefix +fi +echo "$ac_t""$mutt_cv_prefix" 1>&6 + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:901: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:931: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:982: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1014: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1025 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1056: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1061: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1089: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + + + echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6 +echo "configure:1122: checking for strerror in -lcposix" >&5 +ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lcposix $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lcposix" +else + echo "$ac_t""no" 1>&6 +fi + + + + + + +echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 +echo "configure:1167: checking for ${CC-cc} option to accept ANSI C" >&5 +if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + cat > conftest.$ac_ext < +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; + +int main() { + +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + +; return 0; } +EOF +if { (eval echo configure:1220: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + am_cv_prog_cc_stdc="$ac_arg"; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done +CC="$ac_save_CC" + +fi + +if test -z "$am_cv_prog_cc_stdc"; then + echo "$ac_t""none needed" 1>&6 +else + echo "$ac_t""$am_cv_prog_cc_stdc" 1>&6 +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1244: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1265: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1299: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + + + +echo $ac_n "checking for function prototypes""... $ac_c" 1>&6 +echo "configure:1326: checking for function prototypes" >&5 +if test "$am_cv_prog_cc_stdc" != no; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define PROTOTYPES 1 +EOF + + U= ANSI2KNR= +else + echo "$ac_t""no" 1>&6 + U=_ ANSI2KNR=./ansi2knr + # Ensure some checks needed by ansi2knr itself. + echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1339: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + + for ac_hdr in string.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:1446: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +fi + +if test "x$U" != "x"; then + { echo "configure: error: Compiler not ANSI compliant" 1>&2; exit 1; } +fi +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1488: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1509: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1543: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:1568: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:1606: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1661: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:1689: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +if test $host != $build; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + +# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1715: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +AR="$ac_cv_prog_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +if test -z "$ac_cv_prog_AR"; then +if test -n "$ac_tool_prefix"; then + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1747: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="ar" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar" +fi +fi +AR="$ac_cv_prog_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +else + AR="ar" +fi +fi + + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:1781: checking for inline" >&5 +if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done + +fi + +echo "$ac_t""$ac_cv_c_inline" 1>&6 +case "$ac_cv_c_inline" in + inline | yes) ;; + no) cat >> confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >> confdefs.h <&6 +echo "configure:1821: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:1875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + + +# Extract the first word of "dbx", so it can be a program name with args. +set dummy dbx; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1899: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_DBX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$DBX" in + /*) + ac_cv_path_DBX="$DBX" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_DBX="$DBX" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_DBX="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_DBX" && ac_cv_path_DBX="no" + ;; +esac +fi +DBX="$ac_cv_path_DBX" +if test -n "$DBX"; then + echo "$ac_t""$DBX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Extract the first word of "gdb", so it can be a program name with args. +set dummy gdb; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1935: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GDB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GDB" in + /*) + ac_cv_path_GDB="$GDB" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GDB="$GDB" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GDB="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GDB" && ac_cv_path_GDB="no" + ;; +esac +fi +GDB="$ac_cv_path_GDB" +if test -n "$GDB"; then + echo "$ac_t""$GDB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Extract the first word of "sdb", so it can be a program name with args. +set dummy sdb; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1971: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_SDB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$SDB" in + /*) + ac_cv_path_SDB="$SDB" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_SDB="$SDB" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_SDB="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_SDB" && ac_cv_path_SDB="no" + ;; +esac +fi +SDB="$ac_cv_path_SDB" +if test -n "$SDB"; then + echo "$ac_t""$SDB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +if test $GDB != no ; then + DEBUGGER=$GDB +elif test $DBX != no ; then + DEBUGGER=$DBX +elif test $SDB != no ; then + DEBUGGER=$SDB +else + DEBUGGER=no +fi + + + +# The following templates should be used with newer automakes +# instead of acconfig.h +# +#AH_TEMPLATE([sig_atomic_t], +# [/* Define to `int' if doesn't define.]) +#AH_TEMPLATE([HAVE_START_COLOR], +# [Define if you have start_color, as a function or macro.]) +#AH_TEMPLATE([HAVE_TYPEAHEAD], +# [Define if you have typeahead, as a function or macro.]) +#AH_TEMPLATE([HAVE_BKGDSET], +# [Define if you have bkgdset, as a function or macro.]) +#AH_TEMPLATE([HAVE_CURS_SET], +# [Define if you have curs_set, as a function or macro.]) +#AH_TEMPLATE([HAVE_META], +# [Define if you have meta, as a function or macro.]) +#AH_TEMPLATE([HAVE_USE_DEFAULT_COLORS], +# [Define if you have use_default_colors, as a function or macro.]) +#AH_TEMPLATE([HAVE_RESIZETERM], +# [Define if you have resizeterm, as a function or macro.]) +#AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T], +# [Some systems declare sig_atomic_t as volatile, some others -- no. +# This define will have value `sig_atomic_t' or +# `volatile sig_atomic_t' accordingly.]) +#AH_TEMPLATE([ICONV_NONTRANS], +# [Define as 1 if iconv() only converts exactly and we should treat +# all return values other than (size_t)(-1) as equivalent.]) + + +ac_aux_path_sendmail=/usr/sbin:/usr/lib +# Extract the first word of "sendmail", so it can be a program name with args. +set dummy sendmail; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2049: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$SENDMAIL" in + /*) + ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH:$ac_aux_path_sendmail" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_SENDMAIL="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="/usr/sbin/sendmail" + ;; +esac +fi +SENDMAIL="$ac_cv_path_SENDMAIL" +if test -n "$SENDMAIL"; then + echo "$ac_t""$SENDMAIL" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +cat >> confdefs.h <> confdefs.h <<\EOF +#define CRYPT_BACKEND_CLASSIC_PGP 1 +EOF + + PGPAUX_TARGET="pgpring pgpewrap" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o" + fi + + # Check whether --enable-smime or --disable-smime was given. +if test "${enable_smime+set}" = set; then + enableval="$enable_smime" + if test x$enableval = xno ; then + have_smime=no + fi + +fi + + + if test x$have_smime != xno ; then + cat >> confdefs.h <<\EOF +#define CRYPT_BACKEND_CLASSIC_SMIME 1 +EOF + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o " + SMIMEAUX_TARGET="smime_keys" + fi + + # Check whether --with-mixmaster or --without-mixmaster was given. +if test "${with_mixmaster+set}" = set; then + withval="$with_mixmaster" + if test -x "$withval" ; then + MIXMASTER="$withval" + else + MIXMASTER="mixmaster" + fi + OPS="$OPS \$(srcdir)/OPS.MIX" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o" + cat >> confdefs.h <> confdefs.h <&6 +echo "configure:2167: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_ISPELL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$ISPELL" in + /*) + ac_cv_path_ISPELL="$ISPELL" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_ISPELL="$ISPELL" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_ISPELL="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_ISPELL" && ac_cv_path_ISPELL="no" + ;; +esac +fi +ISPELL="$ac_cv_path_ISPELL" +if test -n "$ISPELL"; then + echo "$ac_t""$ISPELL" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test $ISPELL != no; then + cat >> confdefs.h <&6 +echo "configure:2211: checking if this is a BSD system" >&5 +if eval "test \"`echo '$''{'mutt_cv_bsdish'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + mutt_cv_bsdish=no +else + cat > conftest.$ac_ext < + +main () +{ +#ifdef BSD + exit (0); +#else + exit (1); +#endif +} +EOF +if { (eval echo configure:2232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + mutt_cv_bsdish=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + mutt_cv_bsdish=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$mutt_cv_bsdish" 1>&6 + + echo $ac_n "checking for S-Lang""... $ac_c" 1>&6 +echo "configure:2249: checking for S-Lang" >&5 + if test $withval = yes; then + if test -d $srcdir/../slang; then + mutt_cv_slang=$srcdir/../slang/src + CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" + LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" + else + if test -d $mutt_cv_prefix/include/slang; then + CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang" + elif test -d /usr/include/slang; then + CPPFLAGS="$CPPFLAGS -I/usr/include/slang" + fi + mutt_cv_slang=yes + fi + else + if test -f $withval/src/slang.h; then + mutt_cv_slang=$withval/src + CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" + LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" + else + mutt_cv_slang=$withval + if test -d $withval/include/slang; then + CPPFLAGS="$CPPFLAGS -I${withval}/include/slang" + elif test -d $withval/include; then + CPPFLAGS="$CPPFLAGS -I${withval}/include" + fi + LDFLAGS="$LDFLAGS -L${withval}/lib" + fi + fi + echo "$ac_t""$mutt_cv_slang" 1>&6 + if test $mutt_cv_bsdish = yes; then + echo $ac_n "checking for main in -ltermlib""... $ac_c" 1>&6 +echo "configure:2281: checking for main in -ltermlib" >&5 +ac_lib_var=`echo termlib'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ltermlib $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo termlib | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + fi + cat >> confdefs.h <<\EOF +#define USE_SLANG_CURSES 1 +EOF + + cat >> confdefs.h <<\EOF +#define HAVE_COLOR 1 +EOF + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" + + + echo $ac_n "checking for SLtt_get_terminfo in -lslang""... $ac_c" 1>&6 +echo "configure:2336: checking for SLtt_get_terminfo in -lslang" >&5 +ac_lib_var=`echo slang'_'SLtt_get_terminfo | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lslang -lm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + MUTTLIBS="$MUTTLIBS -lslang -lm" +else + echo "$ac_t""no" 1>&6 +{ echo "configure: error: unable to compile. check config.log" 1>&2; exit 1; } +fi + + + +else + mutt_cv_curses=/usr + # Check whether --with-curses or --without-curses was given. +if test "${with_curses+set}" = set; then + withval="$with_curses" + if test $withval != yes; then + mutt_cv_curses=$withval + fi + if test x$mutt_cv_curses != x/usr; then + LDFLAGS="-L${mutt_cv_curses}/lib $LDFLAGS" + CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include" + fi +fi + + + echo $ac_n "checking for initscr""... $ac_c" 1>&6 +echo "configure:2394: checking for initscr" >&5 +if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_initscr) || defined (__stub___initscr) +choke me +#else +initscr(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_initscr=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_initscr=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 + + cf_ncurses="ncurses" + for lib in ncurses ncursesw + do + echo $ac_n "checking for waddnwstr in -l$lib""... $ac_c" 1>&6 +echo "configure:2444: checking for waddnwstr in -l$lib" >&5 +ac_lib_var=`echo $lib'_'waddnwstr | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-l$lib $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cf_ncurses="$lib"; break +else + echo "$ac_t""no" 1>&6 +fi + + done + echo $ac_n "checking for initscr in -l$cf_ncurses""... $ac_c" 1>&6 +echo "configure:2485: checking for initscr in -l$cf_ncurses" >&5 +ac_lib_var=`echo $cf_ncurses'_'initscr | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-l$cf_ncurses $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + MUTTLIBS="$MUTTLIBS -l$cf_ncurses" + if test x$mutt_cv_curses = x/usr -a -d /usr/include/ncurses; then + CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses" + fi + + if test "$cf_ncurses" = ncursesw; then + for ac_hdr in ncursesw/ncurses.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2529: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + else + for ac_hdr in ncurses.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2570: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + fi +else + echo "$ac_t""no" 1>&6 + +echo $ac_n "checking for initscr""... $ac_c" 1>&6 +echo "configure:2611: checking for initscr" >&5 +if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char initscr(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_initscr) || defined (__stub___initscr) +choke me +#else +initscr(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_initscr=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_initscr=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 + +case $host_os in #(vi +freebsd*) #(vi + echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6 +echo "configure:2660: checking for tgoto in -lmytinfo" >&5 +ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lmytinfo $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="-lmytinfo $LIBS" +else + echo "$ac_t""no" 1>&6 +fi + + ;; +hpux10.*|hpux11.*) + echo $ac_n "checking for initscr in -lcur_colr""... $ac_c" 1>&6 +echo "configure:2702: checking for initscr in -lcur_colr" >&5 +ac_lib_var=`echo cur_colr'_'initscr | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lcur_colr $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + LIBS="-lcur_colr $LIBS" + CFLAGS="-I/usr/include/curses_colr $CFLAGS" + ac_cv_func_initscr=yes + +else + echo "$ac_t""no" 1>&6 + + echo $ac_n "checking for initscr in -lHcurses""... $ac_c" 1>&6 +echo "configure:2745: checking for initscr in -lHcurses" >&5 +ac_lib_var=`echo Hcurses'_'initscr | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lHcurses $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + # HP's header uses __HP_CURSES, but user claims _HP_CURSES. + LIBS="-lHcurses $LIBS" + CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS" + ac_cv_func_initscr=yes + +else + echo "$ac_t""no" 1>&6 +fi + +fi + + ;; +linux*) # Suse Linux does not follow /usr/lib convention + LIBS="$LIBS -L/lib" + ;; +esac + +if test ".$With5lib" != ".no" ; then +if test -d /usr/5lib ; then + # SunOS 3.x or 4.x + CPPFLAGS="$CPPFLAGS -I/usr/5include" + LIBS="$LIBS -L/usr/5lib" +fi +fi + +if test ".$ac_cv_func_initscr" != .yes ; then + cf_save_LIBS="$LIBS" + cf_term_lib="" + cf_curs_lib="" + + # Check for library containing tgoto. Do this before curses library + # because it may be needed to link the test-case for initscr. + echo $ac_n "checking for tgoto""... $ac_c" 1>&6 +echo "configure:2813: checking for tgoto" >&5 +if eval "test \"`echo '$''{'ac_cv_func_tgoto'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgoto(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_tgoto) || defined (__stub___tgoto) +choke me +#else +tgoto(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_tgoto=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_tgoto=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'tgoto`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cf_term_lib=predefined +else + echo "$ac_t""no" 1>&6 + + for cf_term_lib in termcap termlib unknown + do + echo $ac_n "checking for tgoto in -l$cf_term_lib""... $ac_c" 1>&6 +echo "configure:2862: checking for tgoto in -l$cf_term_lib" >&5 +ac_lib_var=`echo $cf_term_lib'_'tgoto | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-l$cf_term_lib $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + break +else + echo "$ac_t""no" 1>&6 +fi + + done + +fi + + + # Check for library containing initscr + test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" + for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown + do + echo $ac_n "checking for initscr in -l$cf_curs_lib""... $ac_c" 1>&6 +echo "configure:2911: checking for initscr in -l$cf_curs_lib" >&5 +ac_lib_var=`echo $cf_curs_lib'_'initscr | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-l$cf_curs_lib $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + break +else + echo "$ac_t""no" 1>&6 +fi + + done + test $cf_curs_lib = unknown && { echo "configure: error: no curses library found" 1>&2; exit 1; } + + LIBS="-l$cf_curs_lib $cf_save_LIBS" + if test "$cf_term_lib" = unknown ; then + echo $ac_n "checking if we can link with $cf_curs_lib library""... $ac_c" 1>&6 +echo "configure:2956: checking if we can link with $cf_curs_lib library" >&5 + cat > conftest.$ac_ext < +int main() { +initscr() +; return 0; } +EOF +if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + cf_result=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + cf_result=no +fi +rm -f conftest* + echo "$ac_t""$cf_result" 1>&6 + test $cf_result = no && { echo "configure: error: Cannot link curses library" 1>&2; exit 1; } + elif test "$cf_term_lib" != predefined ; then + echo $ac_n "checking if we need both $cf_curs_lib and $cf_term_lib libraries""... $ac_c" 1>&6 +echo "configure:2979: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5 + cat > conftest.$ac_ext < +int main() { +initscr(); tgoto((char *)0, 0, 0); +; return 0; } +EOF +if { (eval echo configure:2988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + cf_result=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + + LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" + cat > conftest.$ac_ext < +int main() { +initscr() +; return 0; } +EOF +if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + cf_result=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + cf_result=error +fi +rm -f conftest* + +fi +rm -f conftest* + echo "$ac_t""$cf_result" 1>&6 + fi +fi + + +fi + +fi + + +fi + + + old_LIBS="$LIBS" + LIBS="$LIBS $MUTTLIBS" + for ac_func in start_color typeahead bkgdset curs_set meta use_default_colors resizeterm +do + +echo $ac_n "checking for $ac_func declaration""... $ac_c" 1>&6 +echo "configure:3037: checking for $ac_func declaration" >&5 +if eval "test \"`echo '$''{'ac_cv_func_decl_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +#ifndef ${ac_func} +extern int ${ac_func}(); +#endif +; return 0; } +EOF +if { (eval echo configure:3051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + +cat > conftest.$ac_ext < +int main() { +#ifndef ${ac_func} +int (*p)() = ${ac_func}; +#endif +; return 0; } +EOF +if { (eval echo configure:3064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + +eval "ac_cv_func_decl_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + +eval "ac_cv_func_decl_$ac_func=no" +fi +rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + +eval "ac_cv_func_decl_$ac_func=yes" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'decl_$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + +ac_tr_func=`echo HAVE_$ac_func | tr '[a-z]' '[A-Z]'` + + cat >> confdefs.h <&6 +fi +done + + if test "$ac_cv_func_decl_start_color" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_COLOR 1 +EOF + + fi + if test "$ac_cv_func_decl_resizeterm" = yes; then + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" + fi + LIBS="$old_LIBS" + +fi + + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:3116: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:3196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + + +for ac_hdr in stdarg.h sys/ioctl.h ioctl.h sysexits.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:3224: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_hdr in sys/time.h sys/resource.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:3264: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_hdr in unix.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:3304: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + +for ac_func in setrlimit getsid +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3344: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + +echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 +echo "configure:3398: checking return type of signal handlers" >&5 +if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef signal +#undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int main() { +int i; +; return 0; } +EOF +if { (eval echo configure:3420: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_signal=void +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_signal=int +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_type_signal" 1>&6 +cat >> confdefs.h <&6 +echo "configure:3440: checking for sig_atomic_t in signal.h" >&5 +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "sig_atomic_t" >/dev/null 2>&1; then + rm -rf conftest* + + ac_cv_type_sig_atomic_t=yes; + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "volatile.*sig_atomic_t" >/dev/null 2>&1; then + rm -rf conftest* + + is_sig_atomic_t_volatile=yes; + echo "$ac_t""yes, volatile" 1>&6 + +else + rm -rf conftest* + + is_sig_atomic_t_volatile=no; + echo "$ac_t""yes, non volatile" 1>&6 + +fi +rm -f conftest* + + +else + rm -rf conftest* + + echo "$ac_t""no" 1>&6 + echo $ac_n "checking for sig_atomic_t""... $ac_c" 1>&6 +echo "configure:3478: checking for sig_atomic_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_sig_atomic_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])sig_atomic_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_sig_atomic_t=yes +else + rm -rf conftest* + ac_cv_type_sig_atomic_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_sig_atomic_t" 1>&6 +if test $ac_cv_type_sig_atomic_t = no; then + cat >> confdefs.h <<\EOF +#define sig_atomic_t int +EOF + +fi + + is_sig_atomic_t_volatile=no + +fi +rm -f conftest* + +if test $is_sig_atomic_t_volatile = 'yes' +then + cat >> confdefs.h <<\EOF +#define SIG_ATOMIC_VOLATILE_T sig_atomic_t +EOF + +else + cat >> confdefs.h <<\EOF +#define SIG_ATOMIC_VOLATILE_T volatile sig_atomic_t +EOF + +fi + +echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 +echo "configure:3529: checking for sys_siglist declaration in signal.h or unistd.h" >&5 +if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +#include +#endif +int main() { +char *msg = *(sys_siglist + 1); +; return 0; } +EOF +if { (eval echo configure:3546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_decl_sys_siglist=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_decl_sys_siglist=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6 +if test $ac_cv_decl_sys_siglist = yes; then + cat >> confdefs.h <<\EOF +#define SYS_SIGLIST_DECLARED 1 +EOF + +fi + + +echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +echo "configure:3568: checking whether byte ordering is bigendian" >&5 +if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_bigendian=unknown +# See if sys/param.h defines the BYTE_ORDER macro. +cat > conftest.$ac_ext < +#include +int main() { + +#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN + bogus endian macros +#endif +; return 0; } +EOF +if { (eval echo configure:3586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. +cat > conftest.$ac_ext < +#include +int main() { + +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif +; return 0; } +EOF +if { (eval echo configure:3601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_bigendian=no +fi +rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +if test $ac_cv_c_bigendian = unknown; then +if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_bigendian=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_bigendian=yes +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_c_bigendian" 1>&6 +if test $ac_cv_c_bigendian = yes; then + cat >> confdefs.h <<\EOF +#define WORDS_BIGENDIAN 1 +EOF + +fi + +for ac_hdr in inttypes.h stdint.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:3661: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +echo $ac_n "checking for uint32_t""... $ac_c" 1>&6 +echo "configure:3698: checking for uint32_t" >&5 +cat > conftest.$ac_ext < +#if HAVE_INTTYPES_H +#include +#else +#if HAVE_STDINT_H +#include +#endif +#endif +int main() { +if ((uint32_t *) 0) + return 0; +if (sizeof (uint32_t)) + return 0; + +; return 0; } +EOF +if { (eval echo configure:3719: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + + cat >> confdefs.h <<\EOF +#define HAVE_UINT32_T 1 +EOF + + echo "$ac_t""yes" 1>&6 + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 + +fi +rm -f conftest* +echo $ac_n "checking size of int""... $ac_c" 1>&6 +echo "configure:3737: checking size of int" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(int)); + exit(0); +} +EOF +if { (eval echo configure:3757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_int=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_int=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_int" 1>&6 +cat >> confdefs.h <&6 +echo "configure:3777: checking size of long" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext < +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(long)); + exit(0); +} +EOF +if { (eval echo configure:3797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_long=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_long=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_long" 1>&6 +cat >> confdefs.h <&6 +echo "configure:3818: checking for pid_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_pid_t=yes +else + rm -rf conftest* + ac_cv_type_pid_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_pid_t" 1>&6 +if test $ac_cv_type_pid_t = no; then + cat >> confdefs.h <<\EOF +#define pid_t int +EOF + +fi + + +for ac_func in fgetpos memmove setegid srand48 strerror +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3854: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + +for ac_func in strcasecmp strdup +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3910: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" +fi +done + + + +echo $ac_n "checking for getopt""... $ac_c" 1>&6 +echo "configure:3966: checking for getopt" >&5 +if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getopt(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_getopt) || defined (__stub___getopt) +choke me +#else +getopt(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_getopt=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_getopt=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'getopt`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + +if test $ac_cv_func_getopt = yes; then + for ac_hdr in getopt.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:4018: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:4028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +fi + +mutt_cv_snprintf=no +SNPRINTFOBJS="" +for ac_func in snprintf +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4061: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +mutt_cv_snprintf=yes +fi +done + +for ac_func in vsnprintf +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4117: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +mutt_cv_snprintf=yes +fi +done + +if test $mutt_cv_snprintf = yes; then + LIBOBJS="$LIBOBJS snprintf.o" +fi + +for ac_func in ftruncate +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4177: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +echo $ac_n "checking for chsize in -lx""... $ac_c" 1>&6 +echo "configure:4227: checking for chsize in -lx" >&5 +ac_lib_var=`echo x'_'chsize | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lx $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo x | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi +done + + +for ac_func in strftime +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4280: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6 +echo "configure:4330: checking for strftime in -lintl" >&5 +ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lintl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo intl | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi +done + + +for ac_func in fchdir +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4383: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +mutt_cv_fchdir=no +fi +done + + +# Check whether --with-regex or --without-regex was given. +if test "${with_regex+set}" = set; then + withval="$with_regex" + mutt_cv_regex=yes +else + for ac_func in regcomp +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4445: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +mutt_cv_regex=yes +fi +done + +fi + + +if test $mutt_cv_regex = no ; then +echo $ac_n "checking whether your system's regexp library is completely broken""... $ac_c" 1>&6 +echo "configure:4503: checking whether your system's regexp library is completely broken" >&5 +if eval "test \"`echo '$''{'mutt_cv_regex_broken'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + mutt_cv_regex_broken=yes +else + cat > conftest.$ac_ext < +#include +main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); } +EOF +if { (eval echo configure:4518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + mutt_cv_regex_broken=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + mutt_cv_regex_broken=yes +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$mutt_cv_regex_broken" 1>&6 + if test $mutt_cv_regex_broken = yes ; then + echo "Using the included GNU regex instead." >&6 + mutt_cv_regex=yes + fi +fi + +if test $mutt_cv_regex = yes; then + cat >> confdefs.h <<\EOF +#define USE_GNU_REGEX 1 +EOF + + LIBOBJS="$LIBOBJS regex.o" +fi + + +# Check whether --with-homespool or --without-homespool was given. +if test "${with_homespool+set}" = set; then + withval="$with_homespool" + with_homespool=${withval} +fi + +if test x$with_homespool != x; then + if test $with_homespool = yes; then + with_homespool=mailbox + fi + cat >> confdefs.h <> confdefs.h <<\EOF +#define HOMESPOOL 1 +EOF + + cat >> confdefs.h <<\EOF +#define USE_DOTLOCK 1 +EOF + + mutt_cv_setgid=no +else + # Check whether --with-mailpath or --without-mailpath was given. +if test "${with_mailpath+set}" = set; then + withval="$with_mailpath" + mutt_cv_mailpath=$withval +else + echo $ac_n "checking where new mail is stored""... $ac_c" 1>&6 +echo "configure:4578: checking where new mail is stored" >&5 +if eval "test \"`echo '$''{'mutt_cv_mailpath'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + mutt_cv_mailpath=no + if test -d /var/mail; then + mutt_cv_mailpath=/var/mail + elif test -d /var/spool/mail; then + mutt_cv_mailpath=/var/spool/mail + elif test -d /usr/spool/mail; then + mutt_cv_mailpath=/usr/spool/mail + elif test -d /usr/mail; then + mutt_cv_mailpath=/usr/mail + fi +fi + +echo "$ac_t""$mutt_cv_mailpath" 1>&6 + +fi + + if test "$mutt_cv_mailpath" = no; then + { echo "configure: error: "Could not determine where new mail is stored."" 1>&2; exit 1; } + fi + cat >> confdefs.h <&6 +echo "configure:4607: checking if $mutt_cv_mailpath is world writable" >&5 +if eval "test \"`echo '$''{'mutt_cv_worldwrite'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + mutt_cv_worldwrite=no +else + cat > conftest.$ac_ext < +#include + +int main (int argc, char **argv) +{ + struct stat s; + + stat ("$mutt_cv_mailpath", &s); + if (s.st_mode & S_IWOTH) exit (0); + exit (1); +} +EOF +if { (eval echo configure:4629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + mutt_cv_worldwrite=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + mutt_cv_worldwrite=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$mutt_cv_worldwrite" 1>&6 + + mutt_cv_setgid=no + if test $mutt_cv_worldwrite = yes; then + cat >> confdefs.h <<\EOF +#define USE_DOTLOCK 1 +EOF + + else + + echo $ac_n "checking if $mutt_cv_mailpath is group writable""... $ac_c" 1>&6 +echo "configure:4654: checking if $mutt_cv_mailpath is group writable" >&5 +if eval "test \"`echo '$''{'mutt_cv_groupwrite'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + mutt_cv_groupwrite=no +else + cat > conftest.$ac_ext < +#include + +int main (int argc, char **argv) +{ + struct stat s; + + stat ("$mutt_cv_mailpath", &s); + if (s.st_mode & S_IWGRP) exit (0); + exit (1); +} +EOF +if { (eval echo configure:4676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + mutt_cv_groupwrite=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + mutt_cv_groupwrite=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$mutt_cv_groupwrite" 1>&6 + + if test $mutt_cv_groupwrite = yes; then + cat >> confdefs.h <<\EOF +#define USE_DOTLOCK 1 +EOF + + cat >> confdefs.h <<\EOF +#define USE_SETGID 1 +EOF + + mutt_cv_setgid=yes + fi + fi +fi + +# Check whether --enable-external_dotlock or --disable-external_dotlock was given. +if test "${enable_external_dotlock+set}" = set; then + enableval="$enable_external_dotlock" + mutt_cv_external_dotlock="$enableval" +fi + + +if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \ + || test "x$mutt_cv_external_dotlock" = "xyes" +then + cat >> confdefs.h <<\EOF +#define DL_STANDALONE 1 +EOF + + DOTLOCK_TARGET="mutt_dotlock" +else + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o" +fi + + + + +echo $ac_n "checking where to put the documentation""... $ac_c" 1>&6 +echo "configure:4729: checking where to put the documentation" >&5 +# Check whether --with-docdir or --without-docdir was given. +if test "${with_docdir+set}" = set; then + withval="$with_docdir" + mutt_cv_docdir=$withval +else + mutt_cv_docdir="$mutt_cv_prefix/doc/mutt" +fi + +echo "$ac_t""$mutt_cv_docdir" 1>&6 + +docdir=$mutt_cv_docdir + + +if test x$mutt_cv_setgid = xyes; then + DOTLOCK_GROUP='mail' + DOTLOCK_PERMISSION=2755 +else + DOTLOCK_GROUP='' + DOTLOCK_PERMISSION=755 +fi + + + +# Check whether --with-domain or --without-domain was given. +if test "${with_domain+set}" = set; then + withval="$with_domain" + if test $withval != yes; then + cat >> confdefs.h <> confdefs.h <<\EOF +#define USE_POP 1 +EOF + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o" + need_socket="yes" + need_md5="yes" + fi + +fi + + +# Check whether --enable-imap or --disable-imap was given. +if test "${enable_imap+set}" = set; then + enableval="$enable_imap" + if test x$enableval = xyes ; then + cat >> confdefs.h <<\EOF +#define USE_IMAP 1 +EOF + + LIBIMAP="-Limap -limap" + LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a" + need_imap="yes" + need_socket="yes" + need_md5="yes" + fi + +fi + + + +if test x$need_imap = xyes; then + BUILD_IMAP_TRUE= + BUILD_IMAP_FALSE='#' +else + BUILD_IMAP_TRUE='#' + BUILD_IMAP_FALSE= +fi + +# Check whether --enable-nntp or --disable-nntp was given. +if test "${enable_nntp+set}" = set; then + enableval="$enable_nntp" + if test x$enableval = xyes ; then + cat >> confdefs.h <<\EOF +#define USE_NNTP 1 +EOF + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS nntp.o newsrc.o" + need_socket="yes" + fi + +fi + + + +if test "$need_socket" = "yes" +then + echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 +echo "configure:4830: checking for socklen_t" >&5 + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "socklen_t" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 + cat >> confdefs.h <<\EOF +#define socklen_t int +EOF + +fi +rm -f conftest* + + echo $ac_n "checking for gethostent""... $ac_c" 1>&6 +echo "configure:4851: checking for gethostent" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gethostent'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostent(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostent) || defined (__stub___gethostent) +choke me +#else +gethostent(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gethostent=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gethostent=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gethostent`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for gethostent in -lnsl""... $ac_c" 1>&6 +echo "configure:4897: checking for gethostent in -lnsl" >&5 +ac_lib_var=`echo nsl'_'gethostent | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + echo $ac_n "checking for setsockopt""... $ac_c" 1>&6 +echo "configure:4946: checking for setsockopt" >&5 +if eval "test \"`echo '$''{'ac_cv_func_setsockopt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char setsockopt(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_setsockopt) || defined (__stub___setsockopt) +choke me +#else +setsockopt(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_setsockopt=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_setsockopt=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'setsockopt`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for setsockopt in -lsocket""... $ac_c" 1>&6 +echo "configure:4992: checking for setsockopt in -lsocket" >&5 +ac_lib_var=`echo socket'_'setsockopt | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + for ac_func in getaddrinfo +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:5043: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:5071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + cat >> confdefs.h <<\EOF +#define USE_SOCKET 1 +EOF + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o" +fi + + +# Check whether --with-gss or --without-gss was given. +if test "${with_gss+set}" = set; then + withval="$with_gss" + gss_prefix="$withval" +else + gss_prefix="no" +fi + +if test "$gss_prefix" != "no" +then + if test "$need_imap" = "yes" + then + + GSSAPI_PREFIX=$gss_prefix + GSSAPI_IMPL="none" + saved_CPPFLAGS="$CPPFLAGS" + saved_LDFLAGS="$LDFLAGS" + saved_LIBS="$LIBS" + if test "$GSSAPI_PREFIX" != "yes" + then + krb5_path="$GSSAPI_PREFIX/bin" + else + krb5_path="$PATH" + fi + # Extract the first word of "krb5-config", so it can be a program name with args. +set dummy krb5-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:5130: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_KRB5CFGPATH'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$KRB5CFGPATH" in + /*) + ac_cv_path_KRB5CFGPATH="$KRB5CFGPATH" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_KRB5CFGPATH="$KRB5CFGPATH" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$krb5_path" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_KRB5CFGPATH="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_KRB5CFGPATH" && ac_cv_path_KRB5CFGPATH="none" + ;; +esac +fi +KRB5CFGPATH="$ac_cv_path_KRB5CFGPATH" +if test -n "$KRB5CFGPATH"; then + echo "$ac_t""$KRB5CFGPATH" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test "$KRB5CFGPATH" != "none" + then + GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`" + GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`" + case "`$KRB5CFGPATH --version`" in + "Kerberos 5 "*) GSSAPI_IMPL="MIT";; + ?eimdal*) GSSAPI_IMPL="Heimdal";; + *) GSSAPI_IMPL="Unknown";; + esac + else + if test "$GSSAPI_PREFIX" != "yes" + then + GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include" + GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib" + CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" + LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS" + fi + + echo $ac_n "checking for gss_init_sec_context in -lgssapi_krb5""... $ac_c" 1>&6 +echo "configure:5182: checking for gss_init_sec_context in -lgssapi_krb5" >&5 +ac_lib_var=`echo gssapi_krb5'_'gss_init_sec_context | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + GSSAPI_IMPL="MIT", + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" + +else + echo "$ac_t""no" 1>&6 +fi + + + if test "$GSSAPI_IMPL" = "none" + then + echo $ac_n "checking for gss_init_sec_context in -lgssapi""... $ac_c" 1>&6 +echo "configure:5228: checking for gss_init_sec_context in -lgssapi" >&5 +ac_lib_var=`echo gssapi'_'gss_init_sec_context | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lgssapi -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + GSSAPI_IMPL="Heimdal" + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken" + GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err" + +else + echo "$ac_t""no" 1>&6 +fi + + fi + + if test "$GSSAPI_IMPL" = "none" + then + echo $ac_n "checking for g_order_init in -lgssapi_krb5""... $ac_c" 1>&6 +echo "configure:5276: checking for g_order_init in -lgssapi_krb5" >&5 +ac_lib_var=`echo gssapi_krb5'_'g_order_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lgssapi_krb5 -lkrb5 -lcrypto -lcom_err $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + GSSAPI_IMPL="OldMIT", + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" + +else + echo "$ac_t""no" 1>&6 +fi + + fi + fi + + CPPFLAGS="$saved_CPPFLAGS" + LDFLAGS="$saved_LDFLAGS" + LIBS="$saved_LIBS" + + echo $ac_n "checking GSSAPI implementation""... $ac_c" 1>&6 +echo "configure:5326: checking GSSAPI implementation" >&5 + echo "$ac_t""$GSSAPI_IMPL" 1>&6 + if test "$GSSAPI_IMPL" = "none" + then + cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + echo "$ac_t""GSSAPI libraries not found" 1>&6 + fi + if test "$GSSAPI_IMPL" = "Heimdal" + then + cat >> confdefs.h <<\EOF +#define HAVE_HEIMDAL 1 +EOF + + fi + CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" + MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS" + cat >> confdefs.h <<\EOF +#define USE_GSS 1 +EOF + + need_gss="yes" + else + echo "configure: warning: GSS was requested but IMAP is not enabled" 1>&2 + fi +fi + + +if test x$need_gss = xyes; then + USE_GSS_TRUE= + USE_GSS_FALSE='#' +else + USE_GSS_TRUE='#' + USE_GSS_FALSE= +fi + + +# Check whether --with-ssl or --without-ssl was given. +if test "${with_ssl+set}" = set; then + withval="$with_ssl" + if test "$with_ssl" != "no" + then + if test "$need_socket" != "yes"; then + { echo "configure: error: SSL support is only useful with POP or IMAP support" 1>&2; exit 1; } + fi + + if test "$with_ssl" != "yes" + then + LDFLAGS="$LDFLAGS -L$withval/lib" + CPPFLAGS="$CPPFLAGS -I$withval/include" + fi + saved_LIBS="$LIBS" + + echo $ac_n "checking for X509_new in -lcrypto""... $ac_c" 1>&6 +echo "configure:5425: checking for X509_new in -lcrypto" >&5 +ac_lib_var=`echo crypto'_'X509_new | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lcrypto $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo crypto | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +{ echo "configure: error: Unable to find SSL library" 1>&2; exit 1; } +fi + + echo $ac_n "checking for SSL_new in -lssl""... $ac_c" 1>&6 +echo "configure:5473: checking for SSL_new in -lssl" >&5 +ac_lib_var=`echo ssl'_'SSL_new | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lssl -lcrypto $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo ssl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +{ echo "configure: error: Unable to find SSL library" 1>&2; exit 1; } +fi + + + for ac_func in RAND_status RAND_egd +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:5524: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:5552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + cat >> confdefs.h <<\EOF +#define USE_SSL 1 +EOF + + LIBS="$saved_LIBS" + MUTTLIBS="$MUTTLIBS -lssl -lcrypto" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o" + need_ssl=yes + + fi + +fi + + + +if test x$need_ssl = xyes; then + USE_SSL_TRUE= + USE_SSL_FALSE='#' +else + USE_SSL_TRUE='#' + USE_SSL_FALSE= +fi + +# Check whether --with-nss or --without-nss was given. +if test "${with_nss+set}" = set; then + withval="$with_nss" + if test "$with_nss" != no + then + if test "$need_socket" != "yes"; then + { echo "configure: error: SSL support is only useful with POP or IMAP support" 1>&2; exit 1; } + fi + + if test "$with_nss" != "yes" + then + LDFLAGS="$LDFLAGS -L$withval/lib" + CPPFLAGS="$CPPFLAGS -I$withval/include -I$withval/public/security" + fi + + cat >> confdefs.h <<\EOF +#define USE_NSS 1 +EOF + + MUTTLIBS="$MUTTLIBS -lssl -lnss -lcertdb -lcerthi -lcryptohi" + MUTTLIBS="$MUTTLIBS -lpk11wrap -lsoftoken -lsecutil -ldbm -lplds4 -lplc4 -lfreebl" + MUTTLIBS="$MUTTLIBS -lnspr4" + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_nss.o" + need_ssl=yes + fi + +fi + + +# Check whether --with-sasl or --without-sasl was given. +if test "${with_sasl+set}" = set; then + withval="$with_sasl" + + if test "$need_socket" != "yes" + then + { echo "configure: error: SASL support is only useful with POP or IMAP support" 1>&2; exit 1; } + fi + + if test "$with_sasl" != "no" + then + if test "$with_sasl" != "yes" + then + CPPFLAGS="$CPPFLAGS -I$with_sasl/include" + LDFLAGS="$LDFLAGS -L$with_sasl/lib" + fi + + saved_LIBS="$LIBS" + + echo $ac_n "checking for sasl_client_init in -lsasl""... $ac_c" 1>&6 +echo "configure:5650: checking for sasl_client_init in -lsasl" >&5 +ac_lib_var=`echo sasl'_'sasl_client_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsasl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo sasl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +{ echo "configure: error: could not find libsasl" 1>&2; exit 1; } +fi + + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o" + MUTTLIBS="$MUTTLIBS -lsasl" + LIBS="$saved_LIBS" + cat >> confdefs.h <<\EOF +#define USE_SASL 1 +EOF + + need_sasl=yes + fi + +fi + + + +if test x$need_sasl = xyes; then + USE_SASL_TRUE= + USE_SASL_FALSE='#' +else + USE_SASL_TRUE='#' + USE_SASL_FALSE= +fi + +# Check whether --with-sasl2 or --without-sasl2 was given. +if test "${with_sasl2+set}" = set; then + withval="$with_sasl2" + + if test "$need_socket" != "yes" + then + { echo "configure: error: SASL support is only useful with POP or IMAP support" 1>&2; exit 1; } + fi + + if test "$with_sasl2" != "no" + then + if test "$with_sasl2" != "yes" + then + CPPFLAGS="$CPPFLAGS -I$with_sasl2/include" + LDFLAGS="$LDFLAGS -L$with_sasl2/lib" + fi + + saved_LIBS="$LIBS" + + echo $ac_n "checking for sasl_client_init in -lsasl2""... $ac_c" 1>&6 +echo "configure:5740: checking for sasl_client_init in -lsasl2" >&5 +ac_lib_var=`echo sasl2'_'sasl_client_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsasl2 $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo sasl2 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +{ echo "configure: error: could not find libsasl" 1>&2; exit 1; } +fi + + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o" + MUTTLIBS="$MUTTLIBS -lsasl2" + LIBS="$saved_LIBS" + cat >> confdefs.h <<\EOF +#define USE_SASL 1 +EOF + + cat >> confdefs.h <<\EOF +#define USE_SASL2 1 +EOF + + need_sasl=yes + fi + +fi + + + +if test x$need_sasl = xyes; then + USE_SASL_TRUE= + USE_SASL_FALSE='#' +else + USE_SASL_TRUE='#' + USE_SASL_FALSE= +fi + +# Check whether --with-idn or --without-idn was given. +if test "${with_idn+set}" = set; then + withval="$with_idn" + + if test "$with_idn" != "no" ; then + if test "$with_idn" != "yes" ; then + CPPFLAGS="$CPPFLAGS -I$with_idn/include" + LDFLAGS="$LDFLAGS -L$with_idn/lib" + fi + fi + + +fi + + +if test "x$with_idn" != "xno"; then + echo $ac_n "checking for stringprep_check_version in -lidn""... $ac_c" 1>&6 +echo "configure:5831: checking for stringprep_check_version in -lidn" >&5 +ac_lib_var=`echo idn'_'stringprep_check_version | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lidn $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo idn | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + for ac_func in idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:5880: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:5908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + for ac_func in idna_to_ascii_from_utf8 idna_to_ascii_8z +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:5935: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:5963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + for ac_func in idna_to_ascii_lz idna_to_ascii_from_locale +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:5990: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +fi + +if test "$need_md5" = "yes" +then + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o" +fi + + +# Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + if test x$enableval = xyes ; then + cat >> confdefs.h <<\EOF +#define DEBUG 1 +EOF + + fi + +fi + + +# Check whether --enable-flock or --disable-flock was given. +if test "${enable_flock+set}" = set; then + enableval="$enable_flock" + if test $enableval = yes; then + cat >> confdefs.h <<\EOF +#define USE_FLOCK 1 +EOF + + fi +fi + + +mutt_cv_fcntl=yes +# Check whether --enable-fcntl or --disable-fcntl was given. +if test "${enable_fcntl+set}" = set; then + enableval="$enable_fcntl" + if test $enableval = no; then mutt_cv_fcntl=no; fi +fi + + +if test $mutt_cv_fcntl = yes; then + cat >> confdefs.h <<\EOF +#define USE_FCNTL 1 +EOF + +fi + +mutt_cv_warnings=yes +# Check whether --enable-warnings or --disable-warnings was given. +if test "${enable_warnings+set}" = set; then + enableval="$enable_warnings" + if test $enableval = no; then + mutt_cv_warnings=no +fi +fi + + +if test x$GCC = xyes -a $mutt_cv_warnings = yes; then + CFLAGS="-Wall -pedantic $CFLAGS" +fi + +# Check whether --enable-nfs-fix or --disable-nfs-fix was given. +if test "${enable_nfs_fix+set}" = set; then + enableval="$enable_nfs_fix" + if test x$enableval = xyes; then + cat >> confdefs.h <<\EOF +#define NFS_ATTRIBUTE_HACK 1 +EOF + + fi +fi + + +# Check whether --enable-buffy-size or --disable-buffy-size was given. +if test "${enable_buffy_size+set}" = set; then + enableval="$enable_buffy_size" + if test x$enableval = xyes; then + cat >> confdefs.h <<\EOF +#define BUFFY_SIZE 1 +EOF + + fi +fi + + +# Check whether --enable-mailtool or --disable-mailtool was given. +if test "${enable_mailtool+set}" = set; then + enableval="$enable_mailtool" + if test x$enableval = xyes; then + cat >> confdefs.h <<\EOF +#define SUN_ATTACHMENT 1 +EOF + + fi +fi + + +# Check whether --enable-locales-fix or --disable-locales-fix was given. +if test "${enable_locales_fix+set}" = set; then + enableval="$enable_locales_fix" + if test x$enableval = xyes; then + cat >> confdefs.h <<\EOF +#define LOCALES_HACK 1 +EOF + + fi +fi + + +# Check whether --with-exec-shell or --without-exec-shell was given. +if test "${with_exec_shell+set}" = set; then + withval="$with_exec_shell" + if test $withval != yes; then + cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <<\EOF +#define EXACT_ADDRESS 1 +EOF + + + fi +fi + + + + + + + + +# Check whether --enable-iconv or --disable-iconv was given. +if test "${enable_iconv+set}" = set; then + enableval="$enable_iconv" + if test x$enableval = xno ; then + am_cv_func_iconv=no + fi + +fi + + +echo $ac_n "checking for off_t""... $ac_c" 1>&6 +echo "configure:6204: checking for off_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_off_t=yes +else + rm -rf conftest* + ac_cv_type_off_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_off_t" 1>&6 +if test $ac_cv_type_off_t = no; then + cat >> confdefs.h <<\EOF +#define off_t long +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:6237: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 +echo "configure:6272: checking for working alloca.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char *p = alloca(2 * sizeof(int)); +; return 0; } +EOF +if { (eval echo configure:6284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_header_alloca_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_alloca_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 +if test $ac_cv_header_alloca_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 +EOF + +fi + +echo $ac_n "checking for alloca""... $ac_c" 1>&6 +echo "configure:6305: checking for alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int main() { +char *p = (char *) alloca(1); +; return 0; } +EOF +if { (eval echo configure:6338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_func_alloca_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_func_alloca_works=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 +if test $ac_cv_func_alloca_works = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF + +fi + +if test $ac_cv_func_alloca_works = no; then + # The SVR3 libPW and SVR4 libucb both contain incompatible functions + # that cause trouble. Some versions do not even contain alloca or + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + ALLOCA=alloca.${ac_objext} + cat >> confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF + + +echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 +echo "configure:6370: checking whether alloca needs Cray hooks" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5 | + egrep "webecray" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_os_cray=yes +else + rm -rf conftest* + ac_cv_os_cray=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_os_cray" 1>&6 +if test $ac_cv_os_cray = yes; then +for ac_func in _getb67 GETB67 getb67; do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6400: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <&6 +fi + +done +fi + +echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 +echo "configure:6455: checking stack direction for C alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat > conftest.$ac_ext < addr) ? 1 : -1; +} +main () +{ + exit (find_stack_direction() < 0); +} +EOF +if { (eval echo configure:6482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_stack_direction=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_stack_direction=-1 +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 +cat >> confdefs.h <&6 +echo "configure:6507: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:6517: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in getpagesize +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6546: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +echo $ac_n "checking for working mmap""... $ac_c" 1>&6 +echo "configure:6599: checking for working mmap" >&5 +if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat > conftest.$ac_ext < +#include +#include + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include +# endif + +/* Assume that all systems that can run configure have sys/param.h. */ +# ifndef HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +#ifdef __cplusplus +extern "C" { void *malloc(unsigned); } +#else +char *malloc(); +#endif + +int +main() +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize(); + + /* + * First, make a file with some known garbage in it. + */ + data = malloc(pagesize); + if (!data) + exit(1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand(); + umask(0); + fd = creat("conftestmmap", 0600); + if (fd < 0) + exit(1); + if (write(fd, data, pagesize) != pagesize) + exit(1); + close(fd); + + /* + * Next, try to mmap the file at a fixed address which + * already has something else allocated at it. If we can, + * also make sure that we see the same garbage. + */ + fd = open("conftestmmap", O_RDWR); + if (fd < 0) + exit(1); + data2 = malloc(2 * pagesize); + if (!data2) + exit(1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit(1); + + /* + * Finally, make sure that changes to the mapped area + * do not percolate back to the file as seen by read(). + * (This is a bug on some variants of i386 svr4.0.) + */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = malloc(pagesize); + if (!data3) + exit(1); + if (read(fd, data3, pagesize) != pagesize) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit(1); + close(fd); + unlink("conftestmmap"); + exit(0); +} + +EOF +if { (eval echo configure:6747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_mmap_fixed_mapped=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_MMAP 1 +EOF + +fi + + + echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6 +echo "configure:6771: checking whether we are using the GNU C Library 2.1 or newer" >&5 +if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "Lucky GNU user" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_gnu_library_2_1=yes +else + rm -rf conftest* + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi + +echo "$ac_t""$ac_cv_gnu_library_2_1" 1>&6 + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:6812: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:6822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6853: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + + + # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval="$with_libiconv_prefix" + + for dir in `echo "$withval" | tr : ' '`; do + if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi + if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi + done + +fi + + + echo $ac_n "checking for iconv""... $ac_c" 1>&6 +echo "configure:6921: checking for iconv" >&5 +if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat > conftest.$ac_ext < +#include +int main() { +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); +; return 0; } +EOF +if { (eval echo configure:6939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + am_cv_func_iconv=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS -liconv" + cat > conftest.$ac_ext < +#include +int main() { +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); +; return 0; } +EOF +if { (eval echo configure:6961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + LIBS="$am_save_LIBS" + fi + +fi + +echo "$ac_t""$am_cv_func_iconv" 1>&6 + if test "$am_cv_func_iconv" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ICONV 1 +EOF + + echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6 +echo "configure:6982: checking for iconv declaration" >&5 + if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int main() { + +; return 0; } +EOF +if { (eval echo configure:7007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + am_cv_proto_iconv_arg1="" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_proto_iconv_arg1="const" +fi +rm -f conftest* + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + echo "$ac_t""${ac_t:- + }$am_cv_proto_iconv" 1>&6 + cat >> confdefs.h <&6 +echo "configure:7036: checking for nl_langinfo and CODESET" >&5 +if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char* cs = nl_langinfo(CODESET); +; return 0; } +EOF +if { (eval echo configure:7048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + am_cv_langinfo_codeset=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_langinfo_codeset=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$am_cv_langinfo_codeset" 1>&6 + if test $am_cv_langinfo_codeset = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LANGINFO_CODESET 1 +EOF + + fi + + if test $ac_cv_header_locale_h = yes; then + echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 +echo "configure:7071: checking for LC_MESSAGES" >&5 +if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +return LC_MESSAGES +; return 0; } +EOF +if { (eval echo configure:7083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + am_cv_val_LC_MESSAGES=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_val_LC_MESSAGES=no +fi +rm -f conftest* +fi + +echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6 + if test $am_cv_val_LC_MESSAGES = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LC_MESSAGES 1 +EOF + + fi + fi + echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 +echo "configure:7104: checking whether NLS is requested" >&5 + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes +fi + + echo "$ac_t""$USE_NLS" 1>&6 + + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + INTLLIBS= + + if test "$USE_NLS" = "yes"; then + cat >> confdefs.h <<\EOF +#define ENABLE_NLS 1 +EOF + + echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 +echo "configure:7126: checking whether included gettext is requested" >&5 + # Check whether --with-included-gettext or --without-included-gettext was given. +if test "${with_included_gettext+set}" = set; then + withval="$with_included_gettext" + nls_cv_force_use_gnu_gettext=$withval +else + nls_cv_force_use_gnu_gettext=no +fi + + echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6 + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + CATOBJEXT=NONE + + + + + ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 +echo "configure:7146: checking for libintl.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:7156: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6 +echo "configure:7173: checking for GNU gettext in libc" >&5 +if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +extern int _nl_msg_cat_cntr; +int main() { +bindtextdomain ("", ""); +return (int) gettext ("") + _nl_msg_cat_cntr +; return 0; } +EOF +if { (eval echo configure:7187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + gt_cv_func_gnugettext1_libc=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gt_cv_func_gnugettext1_libc=no +fi +rm -f conftest* +fi + +echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6 + + if test "$gt_cv_func_gnugettext1_libc" != "yes"; then + echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6 +echo "configure:7203: checking for GNU gettext in libintl" >&5 +if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $LIBICONV" + cat > conftest.$ac_ext < +extern int _nl_msg_cat_cntr; +int main() { +bindtextdomain ("", ""); +return (int) gettext ("") + _nl_msg_cat_cntr +; return 0; } +EOF +if { (eval echo configure:7219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + gt_cv_func_gnugettext1_libintl=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gt_cv_func_gnugettext1_libintl=no +fi +rm -f conftest* + LIBS="$gt_save_LIBS" +fi + +echo "$ac_t""$gt_cv_func_gnugettext1_libintl" 1>&6 + fi + + if test "$gt_cv_func_gnugettext1_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + cat >> confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF + + + if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + INTLLIBS="-lintl $LIBICONV" + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + for ac_func in dcgettext +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:7252: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:7280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + LIBS="$gt_save_LIBS" + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7309: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + echo "$ac_t""$MSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7343: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7380: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + CATOBJEXT=.gmo + fi + +else + echo "$ac_t""no" 1>&6 +fi + + + if test "$CATOBJEXT" = "NONE"; then + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7430: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + echo "$ac_t""$MSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7464: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7500: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INTLLIBS="\$(top_builddir)/intl/libintl.a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + echo "$ac_t""found msgfmt program is not GNU msgfmt; ignore it" 1>&6 + GMSGFMT=":" + fi + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6 + XGETTEXT=":" + fi + fi + + POSUB=po + fi + + + + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + for ac_prog in bison +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:7571: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$INTLBISON"; then + ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_INTLBISON="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +INTLBISON="$ac_cv_prog_INTLBISON" +if test -n "$INTLBISON"; then + echo "$ac_t""$INTLBISON" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$INTLBISON" && break +done + + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + echo $ac_n "checking version of bison""... $ac_c" 1>&6 +echo "configure:7604: checking version of bison" >&5 + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + echo "$ac_t""$ac_prog_version" 1>&6 + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + + + + + + + + + + + nls_cv_header_intl= + nls_cv_header_libgt= + + DATADIRNAME=share + + + INSTOBJEXT=.mo + + + GENCAT=gencat + + + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 +echo "configure:7651: checking for catalogs to be installed" >&5 + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + echo "$ac_t""$LINGUAS" 1>&6 + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + INTL_LIBTOOL_SUFFIX_PREFIX= + + + +if test "$am_cv_func_iconv" != "yes" +then + echo "configure: warning: Configuring without iconv support. See INSTALL for details" 1>&2 +else + +for ac_hdr in iconv.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:7700: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:7710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +echo "configure:7731: checking whether iconv.h defines iconv_t" >&5 + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "typedef.*iconv_t" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_ICONV_T_DEF 1 +EOF + +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + +else + echo "$ac_t""no" 1>&6 +fi +done + + +echo $ac_n "checking whether this iconv is good enough""... $ac_c" 1>&6 +echo "configure:7758: checking whether this iconv is good enough" >&5 +if eval "test \"`echo '$''{'mutt_cv_iconv_good'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + mutt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + if test "$cross_compiling" = yes; then + mutt_cv_iconv_good=yes +else + cat > conftest.$ac_ext < +int main() +{ + iconv_t cd; + char buf[4]; + char *ob; + size_t obl; + ob = buf, obl = sizeof(buf); + return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) && + (iconv(cd, 0, 0, &ob, &obl) || + !(ob == buf && obl == sizeof(buf)) || + iconv_close(cd))); +} + +EOF +if { (eval echo configure:7786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + mutt_cv_iconv_good=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + mutt_cv_iconv_good=no +fi +rm -fr conftest* +fi + + LIBS="$mutt_save_LIBS" +fi + +echo "$ac_t""$mutt_cv_iconv_good" 1>&6 +if test "$mutt_cv_iconv_good" = no; then + { echo "configure: error: Try using libiconv instead" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether iconv is non-transcribing""... $ac_c" 1>&6 +echo "configure:7807: checking whether iconv is non-transcribing" >&5 +if eval "test \"`echo '$''{'mutt_cv_iconv_nontrans'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + mutt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + if test "$cross_compiling" = yes; then + mutt_cv_iconv_nontrans=no +else + cat > conftest.$ac_ext < +#include +int main() +{ + iconv_t cd; + const char *ib; + char *ob; + size_t ibl, obl; + const char *s = "\304\211"; + char t[3]; + ib = s, ibl = 2, ob = t, obl = 3; + return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) || + iconv(cd, &ib, &ibl, &ob, &obl)); +} + +EOF +if { (eval echo configure:7836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + mutt_cv_iconv_nontrans=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + mutt_cv_iconv_nontrans=yes +fi +rm -fr conftest* +fi + + LIBS="$mutt_save_LIBS" +fi + +echo "$ac_t""$mutt_cv_iconv_nontrans" 1>&6 +if test "$mutt_cv_iconv_nontrans" = yes; then + cat >> confdefs.h <<\EOF +#define ICONV_NONTRANS 1 +EOF + +else + cat >> confdefs.h <<\EOF +#define ICONV_NONTRANS 0 +EOF + +fi + +CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl" + +if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_BIND_TEXTDOMAIN_CODESET 1 +EOF + +else + for ac_func in bind_textdomain_codeset +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:7875: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:7903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +fi + +fi # libiconv + + +for ac_hdr in wchar.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:7936: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:7946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + +echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 +echo "configure:7974: checking for wchar_t" >&5 +if eval "test \"`echo '$''{'mutt_cv_wchar_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef HAVE_WCHAR_H +#include +#endif + +int main() { + wchar_t wc; return 0; +; return 0; } +EOF +if { (eval echo configure:7992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + mutt_cv_wchar_t=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + mutt_cv_wchar_t=no +fi +rm -f conftest* +fi + +echo "$ac_t""$mutt_cv_wchar_t" 1>&6 + +if test "$mutt_cv_wchar_t" = no; then + cat >> confdefs.h <<\EOF +#define wchar_t int +EOF + +fi + +echo $ac_n "checking for wint_t""... $ac_c" 1>&6 +echo "configure:8014: checking for wint_t" >&5 +if eval "test \"`echo '$''{'mutt_cv_wint_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef HAVE_WCHAR_H +#include +#endif + +int main() { + wint_t wc; return 0; +; return 0; } +EOF +if { (eval echo configure:8032: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + mutt_cv_wint_t=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + mutt_cv_wint_t=no +fi +rm -f conftest* +fi + +echo "$ac_t""$mutt_cv_wint_t" 1>&6 + +if test "$mutt_cv_wint_t" = no; then + cat >> confdefs.h <<\EOF +#define wint_t int +EOF + +fi + +for ac_hdr in wctype.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:8057: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:8067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in iswalnum iswalpha iswcntrl iswdigit +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:8096: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:8124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in iswgraph iswlower iswprint iswpunct iswspace iswupper +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:8151: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:8179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in iswxdigit towupper towlower +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:8206: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:8234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + +echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6 +echo "configure:8260: checking for mbstate_t" >&5 +if eval "test \"`echo '$''{'mutt_cv_mbstate_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef HAVE_WCHAR_H +#include +#endif + +int main() { + mbstate_t s; return 0; +; return 0; } +EOF +if { (eval echo configure:8278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + mutt_cv_mbstate_t=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + mutt_cv_mbstate_t=no +fi +rm -f conftest* +fi + +echo "$ac_t""$mutt_cv_mbstate_t" 1>&6 + +if test "$mutt_cv_mbstate_t" = no; then + cat >> confdefs.h <<\EOF +#define mbstate_t int +EOF + +fi + +wc_funcs=maybe +# Check whether --with-wc-funcs or --without-wc-funcs was given. +if test "${with_wc_funcs+set}" = set; then + withval="$with_wc_funcs" + wc_funcs=$withval +fi + + +if test "$wc_funcs" != yes -a "$wc_funcs" != no; then + echo $ac_n "checking for wchar_t functions""... $ac_c" 1>&6 +echo "configure:8309: checking for wchar_t functions" >&5 +if eval "test \"`echo '$''{'mutt_cv_wc_funcs'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + mutt_cv_wc_funcs=no + cat > conftest.$ac_ext < +#include +#ifdef HAVE_WCTYPE_H +#include +#endif +#ifdef HAVE_WCHAR_H +#include +#endif +int main() { +mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0); + iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0) +; return 0; } +EOF +if { (eval echo configure:8332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + mutt_cv_wc_funcs=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +fi + +echo "$ac_t""$mutt_cv_wc_funcs" 1>&6 + wc_funcs=$mutt_cv_wc_funcs +fi + +if test $wc_funcs = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_WC_FUNCS 1 +EOF + +fi + +echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6 +echo "configure:8354: checking for nl_langinfo and CODESET" >&5 +if eval "test \"`echo '$''{'mutt_cv_langinfo_codeset'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char* cs = nl_langinfo(CODESET); +; return 0; } +EOF +if { (eval echo configure:8366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + mutt_cv_langinfo_codeset=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + mutt_cv_langinfo_codeset=no +fi +rm -f conftest* +fi + +echo "$ac_t""$mutt_cv_langinfo_codeset" 1>&6 +if test $mutt_cv_langinfo_codeset = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LANGINFO_CODESET 1 +EOF + +fi + +echo $ac_n "checking for nl_langinfo and YESEXPR""... $ac_c" 1>&6 +echo "configure:8387: checking for nl_langinfo and YESEXPR" >&5 +if eval "test \"`echo '$''{'mutt_cv_langinfo_yesexpr'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char* cs = nl_langinfo(YESEXPR); +; return 0; } +EOF +if { (eval echo configure:8399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + mutt_cv_langinfo_yesexpr=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + mutt_cv_langinfo_yesexpr=no +fi +rm -f conftest* +fi + +echo "$ac_t""$mutt_cv_langinfo_yesexpr" 1>&6 +if test $mutt_cv_langinfo_yesexpr = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LANGINFO_YESEXPR 1 +EOF + +fi + + + # Check whether --with-libesmtp or --without-libesmtp was given. +if test "${with_libesmtp+set}" = set; then + withval="$with_libesmtp" + if test "$with_libesmtp" != "no" + then + mutt_libesmtp_check_path="$PATH" + + if test "$with_libesmtp" != "yes" + then + mutt_libesmtp_check_path="$tmp_path:$withval/bin" + fi + + # Extract the first word of "libesmtp-config", so it can be a program name with args. +set dummy libesmtp-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:8435: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_mutt_libesmtp_config_path'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$mutt_libesmtp_config_path" in + /*) + ac_cv_path_mutt_libesmtp_config_path="$mutt_libesmtp_config_path" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_mutt_libesmtp_config_path="$mutt_libesmtp_config_path" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$mutt_libesmtp_check_path" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_mutt_libesmtp_config_path="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_mutt_libesmtp_config_path" && ac_cv_path_mutt_libesmtp_config_path="no" + ;; +esac +fi +mutt_libesmtp_config_path="$ac_cv_path_mutt_libesmtp_config_path" +if test -n "$mutt_libesmtp_config_path"; then + echo "$ac_t""$mutt_libesmtp_config_path" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + if test "$mutt_libesmtp_config_path" = "no" + then + { echo "configure: error: libesmtp-config binary not found." 1>&2; exit 1; } + fi + + mutt_libesmtp_cflags=`$mutt_libesmtp_config_path --cflags` + mutt_libesmtp_libs=`$mutt_libesmtp_config_path --libs` + + temp_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + ac_safe=`echo "libesmtp.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for libesmtp.h""... $ac_c" 1>&6 +echo "configure:8481: checking for libesmtp.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:8491: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +{ echo "configure: error: Could not find libesmtp.h" 1>&2; exit 1; } +fi + + CFLAGS="$temp_CFLAGS" + + temp_CFLAGS="$CFLAGS" + temp_LIBS="$LIBS" + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + LIBS="$LIBS $mutt_libesmtp_libs" + echo $ac_n "checking for smtp_create_session in -lesmtp""... $ac_c" 1>&6 +echo "configure:8520: checking for smtp_create_session in -lesmtp" >&5 +ac_lib_var=`echo esmtp'_'smtp_create_session | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lesmtp $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo esmtp | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +{ echo "configure: error: Could not find libesmtp" 1>&2; exit 1; } +fi + + CFLAGS="$temp_CFLAGS" + LIBS="$temp_LIBS" + + use_libesmtp=yes + fi + + +fi + + +if test x$use_libesmtp = xyes; then + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + MUTTLIBS="$MUTTLIBS $mutt_libesmtp_libs" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_libesmtp.o" + + cat >> confdefs.h <<\EOF +#define USE_LIBESMTP 1 +EOF + +fi + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile intl/Makefile m4/Makefile + po/Makefile.in doc/Makefile contrib/Makefile + muttbug.sh + imap/Makefile + Muttrc.head + doc/instdoc.sh config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +s%@U@%$U%g +s%@ANSI2KNR@%$ANSI2KNR%g +s%@RANLIB@%$RANLIB%g +s%@build@%$build%g +s%@build_alias@%$build_alias%g +s%@build_cpu@%$build_cpu%g +s%@build_vendor@%$build_vendor%g +s%@build_os@%$build_os%g +s%@AR@%$AR%g +s%@DBX@%$DBX%g +s%@GDB@%$GDB%g +s%@SDB@%$SDB%g +s%@DEBUGGER@%$DEBUGGER%g +s%@SENDMAIL@%$SENDMAIL%g +s%@OPS@%$OPS%g +s%@PGPAUX_TARGET@%$PGPAUX_TARGET%g +s%@SMIMEAUX_TARGET@%$SMIMEAUX_TARGET%g +s%@SUBVERSION@%$SUBVERSION%g +s%@ISPELL@%$ISPELL%g +s%@LIBOBJS@%$LIBOBJS%g +s%@DOTLOCK_TARGET@%$DOTLOCK_TARGET%g +s%@docdir@%$docdir%g +s%@DOTLOCK_GROUP@%$DOTLOCK_GROUP%g +s%@DOTLOCK_PERMISSION@%$DOTLOCK_PERMISSION%g +s%@BUILD_IMAP_TRUE@%$BUILD_IMAP_TRUE%g +s%@BUILD_IMAP_FALSE@%$BUILD_IMAP_FALSE%g +s%@KRB5CFGPATH@%$KRB5CFGPATH%g +s%@USE_GSS_TRUE@%$USE_GSS_TRUE%g +s%@USE_GSS_FALSE@%$USE_GSS_FALSE%g +s%@USE_SSL_TRUE@%$USE_SSL_TRUE%g +s%@USE_SSL_FALSE@%$USE_SSL_FALSE%g +s%@USE_SASL_TRUE@%$USE_SASL_TRUE%g +s%@USE_SASL_FALSE@%$USE_SASL_FALSE%g +s%@MUTTLIBS@%$MUTTLIBS%g +s%@MUTT_LIB_OBJECTS@%$MUTT_LIB_OBJECTS%g +s%@LIBIMAP@%$LIBIMAP%g +s%@LIBIMAPDEPS@%$LIBIMAPDEPS%g +s%@ALLOCA@%$ALLOCA%g +s%@GLIBC21@%$GLIBC21%g +s%@LIBICONV@%$LIBICONV%g +s%@USE_NLS@%$USE_NLS%g +s%@MSGFMT@%$MSGFMT%g +s%@GMSGFMT@%$GMSGFMT%g +s%@XGETTEXT@%$XGETTEXT%g +s%@INTLBISON@%$INTLBISON%g +s%@BUILD_INCLUDED_LIBINTL@%$BUILD_INCLUDED_LIBINTL%g +s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g +s%@CATALOGS@%$CATALOGS%g +s%@CATOBJEXT@%$CATOBJEXT%g +s%@GMOFILES@%$GMOFILES%g +s%@INTLLIBS@%$INTLLIBS%g +s%@INTLOBJS@%$INTLOBJS%g +s%@POFILES@%$POFILES%g +s%@POSUB@%$POSUB%g +s%@DATADIRNAME@%$DATADIRNAME%g +s%@INSTOBJEXT@%$INSTOBJEXT%g +s%@GENCAT@%$GENCAT%g +s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g +s%@INTL_LIBTOOL_SUFFIX_PREFIX@%$INTL_LIBTOOL_SUFFIX_PREFIX%g +s%@mutt_libesmtp_config_path@%$mutt_libesmtp_config_path%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h +for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + fi + ;; + esac + done + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..66d54de --- /dev/null +++ b/configure.in @@ -0,0 +1,1003 @@ +dnl Process this file with autoconf to produce a configure script. + +dnl !!! WHEN ADDING NEW CONFIGURE TESTS, PLEASE ADD CODE TO MAIN.C !!! +dnl !!! TO DUMP THEIR RESULTS WHEN MUTT -V IS CALLED !!! + +AC_PREREQ(2.12) +AC_INIT(mutt.h) +AM_CONFIG_HEADER(config.h) + +mutt_cv_version=`cat $srcdir/VERSION` + + +AM_INIT_AUTOMAKE(mutt, $mutt_cv_version) + +ifdef([AC_LIBOBJ], , [define([AC_LIBOBJ], [LIB[]OBJS="$LIBOBJS $1.o"])]) + +ALL_LINGUAS="de ru it es uk fr pl nl cs id sk ko el zh_TW zh_CN pt_BR eo gl sv da lt tr ja hu et ca bg" + +AC_CANONICAL_HOST + +AC_MSG_CHECKING(for prefix) +if test x$prefix = xNONE; then + mutt_cv_prefix=$ac_default_prefix +else + mutt_cv_prefix=$prefix +fi +AC_MSG_RESULT($mutt_cv_prefix) + +AC_PROG_CC +AC_ISC_POSIX +AM_C_PROTOTYPES +if test "x$U" != "x"; then + AC_MSG_ERROR(Compiler not ANSI compliant) +fi +AC_PROG_CPP +AC_PROG_MAKE_SET +AC_PROG_INSTALL +AC_PROG_RANLIB +AC_CHECK_TOOL(AR, ar, ar) + +AC_C_INLINE +AC_C_CONST + +AC_PATH_PROG(DBX, dbx, no) +AC_PATH_PROG(GDB, gdb, no) +AC_PATH_PROG(SDB, sdb, no) + +if test $GDB != no ; then + DEBUGGER=$GDB +elif test $DBX != no ; then + DEBUGGER=$DBX +elif test $SDB != no ; then + DEBUGGER=$SDB +else + DEBUGGER=no +fi + +AC_SUBST(DEBUGGER) + +# The following templates should be used with newer automakes +# instead of acconfig.h +# +#AH_TEMPLATE([sig_atomic_t], +# [/* Define to `int' if doesn't define.]) +#AH_TEMPLATE([HAVE_START_COLOR], +# [Define if you have start_color, as a function or macro.]) +#AH_TEMPLATE([HAVE_TYPEAHEAD], +# [Define if you have typeahead, as a function or macro.]) +#AH_TEMPLATE([HAVE_BKGDSET], +# [Define if you have bkgdset, as a function or macro.]) +#AH_TEMPLATE([HAVE_CURS_SET], +# [Define if you have curs_set, as a function or macro.]) +#AH_TEMPLATE([HAVE_META], +# [Define if you have meta, as a function or macro.]) +#AH_TEMPLATE([HAVE_USE_DEFAULT_COLORS], +# [Define if you have use_default_colors, as a function or macro.]) +#AH_TEMPLATE([HAVE_RESIZETERM], +# [Define if you have resizeterm, as a function or macro.]) +#AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T], +# [Some systems declare sig_atomic_t as volatile, some others -- no. +# This define will have value `sig_atomic_t' or +# `volatile sig_atomic_t' accordingly.]) +#AH_TEMPLATE([ICONV_NONTRANS], +# [Define as 1 if iconv() only converts exactly and we should treat +# all return values other than (size_t)(-1) as equivalent.]) + + +ac_aux_path_sendmail=/usr/sbin:/usr/lib +AC_PATH_PROG(SENDMAIL, sendmail, /usr/sbin/sendmail, $PATH:$ac_aux_path_sendmail) +AC_DEFINE_UNQUOTED(SENDMAIL,"$ac_cv_path_SENDMAIL",[ Where to find sendmail on your system. ]) + +OPS='$(srcdir)/OPS' +if test -f $srcdir/EXPORTABLE ; then + SUBVERSION="us" +else + SUBVERSION="i" + + AC_ARG_ENABLE(pgp, [ --disable-pgp Disable PGP support], + [ if test x$enableval = xno ; then + have_pgp=no + fi + ]) + + if test x$have_pgp != xno ; then + AC_DEFINE(CRYPT_BACKEND_CLASSIC_PGP,1, + [ Define if you want classic PGP support. ]) + PGPAUX_TARGET="pgpring pgpewrap" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pgp.o pgpinvoke.o pgpkey.o pgplib.o gnupgparse.o pgpmicalg.o pgppacket.o" + fi + + AC_ARG_ENABLE(smime, [ --disable-smime Disable SMIME support], + [ if test x$enableval = xno ; then + have_smime=no + fi + ]) + + if test x$have_smime != xno ; then + AC_DEFINE(CRYPT_BACKEND_CLASSIC_SMIME,1, + [ Define if you want clasic S/MIME support. ]) + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS smime.o " + SMIMEAUX_TARGET="smime_keys" + fi + + AC_ARG_WITH(mixmaster, [ --with-mixmaster[=PATH] Include Mixmaster support], + [if test -x "$withval" ; then + MIXMASTER="$withval" + else + MIXMASTER="mixmaster" + fi + OPS="$OPS \$(srcdir)/OPS.MIX" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS remailer.o" + AC_DEFINE_UNQUOTED(MIXMASTER,"$MIXMASTER", + [ Where to find mixmaster on your system. ]) + ]) + +fi +# We now require all OPS +OPS="$OPS \$(srcdir)/OPS.PGP \$(srcdir)/OPS.SMIME \$(srcdir)/OPS.CRYPT " +AC_SUBST(OPS) + + +AC_SUBST(PGPAUX_TARGET) +AC_SUBST(SMIMEAUX_TARGET) + +AC_DEFINE_UNQUOTED(SUBVERSION,"$SUBVERSION",[ Is this the international version? ]) +AC_SUBST(SUBVERSION) + +AC_PATH_PROG(ISPELL, ispell, no) +if test $ISPELL != no; then + AC_DEFINE_UNQUOTED(ISPELL,"$ISPELL",[ Where to find ispell on your system. ]) +fi + +AC_ARG_WITH(slang, [ --with-slang[=DIR] Use S-Lang instead of ncurses], + [AC_CACHE_CHECK([if this is a BSD system], mutt_cv_bsdish, + [AC_TRY_RUN([#include + +main () +{ +#ifdef BSD + exit (0); +#else + exit (1); +#endif +}], + mutt_cv_bsdish=yes, + mutt_cv_bsdish=no, + mutt_cv_bsdish=no)]) + + AC_MSG_CHECKING(for S-Lang) + if test $withval = yes; then + if test -d $srcdir/../slang; then + mutt_cv_slang=$srcdir/../slang/src + CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" + LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" + else + if test -d $mutt_cv_prefix/include/slang; then + CPPFLAGS="$CPPFLAGS -I$mutt_cv_prefix/include/slang" + elif test -d /usr/include/slang; then + CPPFLAGS="$CPPFLAGS -I/usr/include/slang" + fi + mutt_cv_slang=yes + fi + else + dnl ---Check to see if $withval is a source directory + if test -f $withval/src/slang.h; then + mutt_cv_slang=$withval/src + CPPFLAGS="$CPPFLAGS -I${mutt_cv_slang}" + LDFLAGS="$LDFLAGS -L${mutt_cv_slang}/objs" + else + dnl ---Must be installed somewhere + mutt_cv_slang=$withval + if test -d $withval/include/slang; then + CPPFLAGS="$CPPFLAGS -I${withval}/include/slang" + elif test -d $withval/include; then + CPPFLAGS="$CPPFLAGS -I${withval}/include" + fi + LDFLAGS="$LDFLAGS -L${withval}/lib" + fi + fi + AC_MSG_RESULT($mutt_cv_slang) + if test $mutt_cv_bsdish = yes; then + AC_CHECK_LIB(termlib, main) + fi + AC_DEFINE(USE_SLANG_CURSES,1, + [ Define if you compile with SLang instead of curses/ncurses. ]) + AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ]) + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" + + dnl --- now that we've found it, check the link + + AC_CHECK_LIB(slang, SLtt_get_terminfo, + [MUTTLIBS="$MUTTLIBS -lslang -lm"], + [AC_MSG_ERROR(unable to compile. check config.log)], -lm) + + ], + + [mutt_cv_curses=/usr + AC_ARG_WITH(curses, [ --with-curses=DIR Where ncurses is installed ], + [if test $withval != yes; then + mutt_cv_curses=$withval + fi + if test x$mutt_cv_curses != x/usr; then + LDFLAGS="-L${mutt_cv_curses}/lib $LDFLAGS" + CPPFLAGS="$CPPFLAGS -I${mutt_cv_curses}/include" + fi]) + + AC_CHECK_FUNC(initscr,,[ + cf_ncurses="ncurses" + for lib in ncurses ncursesw + do + AC_CHECK_LIB($lib, waddnwstr, [cf_ncurses="$lib"; break]) + done + AC_CHECK_LIB($cf_ncurses, initscr, + [MUTTLIBS="$MUTTLIBS -l$cf_ncurses" + if test x$mutt_cv_curses = x/usr -a -d /usr/include/ncurses; then + CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses" + fi + + if test "$cf_ncurses" = ncursesw; then + AC_CHECK_HEADERS(ncursesw/ncurses.h,[cf_cv_ncurses_header="ncursesw/ncurses.h"]) + else + AC_CHECK_HEADERS(ncurses.h,[cf_cv_ncurses_header="ncurses.h"]) + fi], + + [CF_CURSES_LIBS]) + ]) + + old_LIBS="$LIBS" + LIBS="$LIBS $MUTTLIBS" + CF_CHECK_FUNCDECLS([#include <${cf_cv_ncurses_header-curses.h}>], + [start_color typeahead bkgdset curs_set meta use_default_colors resizeterm]) + if test "$ac_cv_func_decl_start_color" = yes; then + AC_DEFINE(HAVE_COLOR,1,[ Define if your curses library supports color. ]) + fi + if test "$ac_cv_func_decl_resizeterm" = yes; then + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS resize.o" + fi + LIBS="$old_LIBS" + ]) + +AC_HEADER_STDC + +AC_CHECK_HEADERS(stdarg.h sys/ioctl.h ioctl.h sysexits.h) +AC_CHECK_HEADERS(sys/time.h sys/resource.h) +AC_CHECK_HEADERS(unix.h) + +AC_CHECK_FUNCS(setrlimit getsid) + +AC_TYPE_SIGNAL + +AC_MSG_CHECKING(for sig_atomic_t in signal.h) +AC_EGREP_HEADER(sig_atomic_t,signal.h, + [ + ac_cv_type_sig_atomic_t=yes; + AC_EGREP_HEADER(volatile.*sig_atomic_t, + signal.h, + [ + is_sig_atomic_t_volatile=yes; + AC_MSG_RESULT([yes, volatile]) + ], + [ + is_sig_atomic_t_volatile=no; + AC_MSG_RESULT([yes, non volatile]) + ]) + ], + [ + AC_MSG_RESULT(no) + AC_CHECK_TYPE(sig_atomic_t, int) + is_sig_atomic_t_volatile=no + ]) +if test $is_sig_atomic_t_volatile = 'yes' +then + AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t) +else + AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t]) +fi + +AC_DECL_SYS_SIGLIST + +dnl For MD5 and SHA1 on 64-bit systems +AC_C_BIGENDIAN +AC_CHECK_HEADERS(inttypes.h stdint.h) +dnl This is the method autoconf-2.50's new AC_CHECK_TYPE macro uses. +dnl We need to be backwards compatible to autoconf 2.13, though. -lh +AC_MSG_CHECKING(for uint32_t) +AC_TRY_COMPILE([ +#include +#if HAVE_INTTYPES_H +#include +#else +#if HAVE_STDINT_H +#include +#endif +#endif], +[if ((uint32_t *) 0) + return 0; +if (sizeof (uint32_t)) + return 0; +],[ + AC_DEFINE(HAVE_UINT32_T,1,[ Define if you have the uint32_t type. ]) + AC_MSG_RESULT(yes) + ], AC_MSG_RESULT(no) +) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(long) + +AC_TYPE_PID_T + +AC_CHECK_FUNCS(fgetpos memmove setegid srand48 strerror) + +AC_REPLACE_FUNCS(strcasecmp strdup) + +AC_CHECK_FUNC(getopt) +if test $ac_cv_func_getopt = yes; then + AC_CHECK_HEADERS(getopt.h) +fi + +mutt_cv_snprintf=no +SNPRINTFOBJS="" +AC_CHECK_FUNCS(snprintf, , [mutt_cv_snprintf=yes]) +AC_CHECK_FUNCS(vsnprintf, , [mutt_cv_snprintf=yes]) +if test $mutt_cv_snprintf = yes; then + AC_LIBOBJ(snprintf) +fi + +dnl SCO uses chsize() instead of ftruncate() +AC_CHECK_FUNCS(ftruncate, , [AC_CHECK_LIB(x, chsize)]) + +dnl SCO has strftime() in libintl +AC_CHECK_FUNCS(strftime, , [AC_CHECK_LIB(intl, strftime)]) + +dnl AIX may not have fchdir() +AC_CHECK_FUNCS(fchdir, , [mutt_cv_fchdir=no]) + +AC_ARG_WITH(regex, [ --with-regex Use the GNU regex library ], + [mutt_cv_regex=yes], + [AC_CHECK_FUNCS(regcomp, mutt_cv_regex=no, mutt_cv_regex=yes)]) + +if test $mutt_cv_regex = no ; then +AC_CACHE_CHECK([whether your system's regexp library is completely broken], + [mutt_cv_regex_broken], + AC_TRY_RUN([ +#include +#include +main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }], + mutt_cv_regex_broken=no, mutt_cv_regex_broken=yes, mutt_cv_regex_broken=yes)) + if test $mutt_cv_regex_broken = yes ; then + echo "Using the included GNU regex instead." >&AC_FD_MSG + mutt_cv_regex=yes + fi +fi + +if test $mutt_cv_regex = yes; then + AC_DEFINE(USE_GNU_REGEX,1,[ Define if you want to use the included regex.c. ]) + AC_LIBOBJ(regex) +fi + + +AC_ARG_WITH(homespool, [ --with-homespool[=FILE] File in user's directory where new mail is spooled], with_homespool=${withval}) +if test x$with_homespool != x; then + if test $with_homespool = yes; then + with_homespool=mailbox + fi + AC_DEFINE_UNQUOTED(MAILPATH,"$with_homespool",[ Where new mail is spooled. ]) + AC_DEFINE(HOMESPOOL,1, + [Is mail spooled to the user's home directory? If defined, + MAILPATH should be set to the filename of the spool mailbox + relative the the home directory. + use: configure --with-homespool=FILE]) + AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ]) + mutt_cv_setgid=no +else + AC_ARG_WITH(mailpath, [ --with-mailpath=DIR Directory where spool mailboxes are located], + [mutt_cv_mailpath=$withval], + [ AC_CACHE_CHECK(where new mail is stored, mutt_cv_mailpath, + [mutt_cv_mailpath=no + if test -d /var/mail; then + mutt_cv_mailpath=/var/mail + elif test -d /var/spool/mail; then + mutt_cv_mailpath=/var/spool/mail + elif test -d /usr/spool/mail; then + mutt_cv_mailpath=/usr/spool/mail + elif test -d /usr/mail; then + mutt_cv_mailpath=/usr/mail + fi]) + ]) + if test "$mutt_cv_mailpath" = no; then + AC_MSG_ERROR("Could not determine where new mail is stored.") + fi + AC_DEFINE_UNQUOTED(MAILPATH,"$mutt_cv_mailpath",[ Where new mail is spooled. ]) + + AC_CACHE_CHECK(if $mutt_cv_mailpath is world writable, mutt_cv_worldwrite, [AC_TRY_RUN([#include +#include + +int main (int argc, char **argv) +{ + struct stat s; + + stat ("$mutt_cv_mailpath", &s); + if (s.st_mode & S_IWOTH) exit (0); + exit (1); +}], mutt_cv_worldwrite=yes, mutt_cv_worldwrite=no, mutt_cv_worldwrite=no)]) + + mutt_cv_setgid=no + if test $mutt_cv_worldwrite = yes; then + AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ]) + else + + AC_CACHE_CHECK(if $mutt_cv_mailpath is group writable, mutt_cv_groupwrite, [AC_TRY_RUN([#include +#include + +int main (int argc, char **argv) +{ + struct stat s; + + stat ("$mutt_cv_mailpath", &s); + if (s.st_mode & S_IWGRP) exit (0); + exit (1); +}], mutt_cv_groupwrite=yes, mutt_cv_groupwrite=no, mutt_cv_groupwrite=no)]) + + if test $mutt_cv_groupwrite = yes; then + AC_DEFINE(USE_DOTLOCK,1,[ Define to use dotlocking for mailboxes. ]) + AC_DEFINE(USE_SETGID,1,[ Define if mutt should run setgid "mail". ]) + mutt_cv_setgid=yes + fi + fi +fi + +AC_ARG_ENABLE(external_dotlock, [ --enable-external-dotlock Force use of an external dotlock program], + [mutt_cv_external_dotlock="$enableval"]) + +if test "x$mutt_cv_setgid" = "xyes" || test "x$mutt_cv_fchdir" = "xno" \ + || test "x$mutt_cv_external_dotlock" = "xyes" +then + AC_DEFINE(DL_STANDALONE,1,[ Define if you want to use an external dotlocking program. ]) + DOTLOCK_TARGET="mutt_dotlock" +else + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS dotlock.o" +fi + +AC_SUBST(DOTLOCK_TARGET) + + +AC_MSG_CHECKING(where to put the documentation) +AC_ARG_WITH(docdir, [ --with-docdir=PATH Specify where to put the documentation], + [mutt_cv_docdir=$withval], + [mutt_cv_docdir="$mutt_cv_prefix/doc/mutt"]) +AC_MSG_RESULT($mutt_cv_docdir) + +docdir=$mutt_cv_docdir +AC_SUBST(docdir) + +if test x$mutt_cv_setgid = xyes; then + DOTLOCK_GROUP='mail' + DOTLOCK_PERMISSION=2755 +else + DOTLOCK_GROUP='' + DOTLOCK_PERMISSION=755 +fi +AC_SUBST(DOTLOCK_GROUP) +AC_SUBST(DOTLOCK_PERMISSION) + +AC_ARG_WITH(domain, [ --with-domain=DOMAIN Specify your DNS domain name], + [if test $withval != yes; then + AC_DEFINE_UNQUOTED(DOMAIN,"$withval",[ Define your domain name. ]) + fi]) + +need_socket="no" + +dnl -- socket dependencies -- + +AC_ARG_ENABLE(pop, [ --enable-pop Enable POP3 support], +[ if test x$enableval = xyes ; then + AC_DEFINE(USE_POP,1,[ Define if you want support for the POP3 protocol. ]) + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS pop.o pop_lib.o pop_auth.o" + need_socket="yes" + need_md5="yes" + fi +]) + +AC_ARG_ENABLE(imap, [ --enable-imap Enable IMAP support], +[ if test x$enableval = xyes ; then + AC_DEFINE(USE_IMAP,1,[ Define if you want support for the IMAP protocol. ]) + LIBIMAP="-Limap -limap" + LIBIMAPDEPS="\$(top_srcdir)/imap/imap.h imap/libimap.a" + need_imap="yes" + need_socket="yes" + need_md5="yes" + fi +]) +AM_CONDITIONAL(BUILD_IMAP, test x$need_imap = xyes) + +AC_ARG_ENABLE(nntp, [ --enable-nntp Enable NNTP support], +[ if test x$enableval = xyes ; then + AC_DEFINE(USE_NNTP) + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS nntp.o newsrc.o" + need_socket="yes" + fi +]) + +dnl -- end socket dependencies -- + +if test "$need_socket" = "yes" +then + AC_MSG_CHECKING([for socklen_t]) + AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]), + AC_MSG_RESULT([no]) + AC_DEFINE(socklen_t,int, + [ Define to 'int' if doesn't have it. ])) + AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent)) + AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt)) + AC_CHECK_FUNCS(getaddrinfo) + AC_DEFINE(USE_SOCKET,1, + [ Include code for socket support. Set automatically if you enable POP3 or IMAP ]) + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS account.o mutt_socket.o mutt_tunnel.o" +fi + +dnl -- imap dependencies -- + +AC_ARG_WITH(gss, [ --with-gss[=PFX] Compile in GSSAPI authentication for IMAP], + gss_prefix="$withval", gss_prefix="no") +if test "$gss_prefix" != "no" +then + if test "$need_imap" = "yes" + then + MUTT_AM_PATH_GSSAPI(gss_prefix) + AC_MSG_CHECKING(GSSAPI implementation) + AC_MSG_RESULT($GSSAPI_IMPL) + if test "$GSSAPI_IMPL" = "none" + then + AC_CACHE_SAVE + AC_MSG_RESULT([GSSAPI libraries not found]) + fi + if test "$GSSAPI_IMPL" = "Heimdal" + then + AC_DEFINE(HAVE_HEIMDAL,1,[ Define if your GSSAPI implementation is Heimdal ]) + fi + CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" + MUTTLIBS="$MUTTLIBS $GSSAPI_LIBS" + AC_DEFINE(USE_GSS,1,[ Define if you have GSSAPI libraries available ]) + need_gss="yes" + else + AC_MSG_WARN([GSS was requested but IMAP is not enabled]) + fi +fi +AM_CONDITIONAL(USE_GSS, test x$need_gss = xyes) + +dnl -- end imap dependencies -- + +AC_ARG_WITH(ssl, [ --with-ssl[=PFX] Compile in SSL support for POP/IMAP], +[ if test "$with_ssl" != "no" + then + if test "$need_socket" != "yes"; then + AC_MSG_ERROR([SSL support is only useful with POP or IMAP support]) + fi + + if test "$with_ssl" != "yes" + then + LDFLAGS="$LDFLAGS -L$withval/lib" + CPPFLAGS="$CPPFLAGS -I$withval/include" + fi + saved_LIBS="$LIBS" + + AC_CHECK_LIB(crypto, X509_new,, AC_MSG_ERROR([Unable to find SSL library])) + AC_CHECK_LIB(ssl, SSL_new,, AC_MSG_ERROR([Unable to find SSL library]), -lcrypto) + + AC_CHECK_FUNCS(RAND_status RAND_egd) + + AC_DEFINE(USE_SSL,1,[ Define if you want support for SSL. ]) + LIBS="$saved_LIBS" + MUTTLIBS="$MUTTLIBS -lssl -lcrypto" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl.o" + need_ssl=yes + + fi +]) +AM_CONDITIONAL(USE_SSL, test x$need_ssl = xyes) + +dnl SSL support via NSS +AC_ARG_WITH(nss, [ --with-nss[=PFX] Compile in SSL support for POP/IMAP via NSS], +[ if test "$with_nss" != no + then + if test "$need_socket" != "yes"; then + AC_MSG_ERROR([SSL support is only useful with POP or IMAP support]) + fi + + if test "$with_nss" != "yes" + then + LDFLAGS="$LDFLAGS -L$withval/lib" + CPPFLAGS="$CPPFLAGS -I$withval/include -I$withval/public/security" + fi + + AC_DEFINE(USE_NSS,1,[ Define if you want support for SSL via the NSS library. ]) + MUTTLIBS="$MUTTLIBS -lssl -lnss -lcertdb -lcerthi -lcryptohi" + MUTTLIBS="$MUTTLIBS -lpk11wrap -lsoftoken -lsecutil -ldbm -lplds4 -lplc4 -lfreebl" + MUTTLIBS="$MUTTLIBS -lnspr4" + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_ssl_nss.o" + need_ssl=yes + fi +]) + +AC_ARG_WITH(sasl, [ --with-sasl[=PFX] Use Cyrus SASL library for POP/IMAP authentication], + [ + if test "$need_socket" != "yes" + then + AC_MSG_ERROR([SASL support is only useful with POP or IMAP support]) + fi + + if test "$with_sasl" != "no" + then + if test "$with_sasl" != "yes" + then + CPPFLAGS="$CPPFLAGS -I$with_sasl/include" + LDFLAGS="$LDFLAGS -L$with_sasl/lib" + fi + + saved_LIBS="$LIBS" + + AC_CHECK_LIB(sasl, sasl_client_init,, + AC_MSG_ERROR([could not find libsasl]),) + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o" + MUTTLIBS="$MUTTLIBS -lsasl" + LIBS="$saved_LIBS" + AC_DEFINE(USE_SASL,1, + [ Define if want to use the Cyrus SASL library for POP/IMAP authentication. ]) + need_sasl=yes + fi + ]) +AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes) + +AC_ARG_WITH(sasl2, [ --with-sasl2[=PFX] Use Cyrus SASL library version 2 for POP/IMAP authentication], + [ + if test "$need_socket" != "yes" + then + AC_MSG_ERROR([SASL support is only useful with POP or IMAP support]) + fi + + if test "$with_sasl2" != "no" + then + if test "$with_sasl2" != "yes" + then + CPPFLAGS="$CPPFLAGS -I$with_sasl2/include" + LDFLAGS="$LDFLAGS -L$with_sasl2/lib" + fi + + saved_LIBS="$LIBS" + + AC_CHECK_LIB(sasl2, sasl_client_init,, + AC_MSG_ERROR([could not find libsasl]),) + + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_sasl.o" + MUTTLIBS="$MUTTLIBS -lsasl2" + LIBS="$saved_LIBS" + AC_DEFINE(USE_SASL,1, + [ Define if want to use the Cyrus SASL library for POP/IMAP authentication. ]) + AC_DEFINE(USE_SASL2,1, + [ Define if want to use version 2 of the Cyrus SASL library. ]) + need_sasl=yes + fi + ]) +AM_CONDITIONAL(USE_SASL, test x$need_sasl = xyes) + +AC_ARG_WITH(idn, [ --with-idn=[PFX] Use GNU libidn for domain names], + [ + if test "$with_idn" != "no" ; then + if test "$with_idn" != "yes" ; then + CPPFLAGS="$CPPFLAGS -I$with_idn/include" + LDFLAGS="$LDFLAGS -L$with_idn/lib" + fi + fi + ] +) + +if test "x$with_idn" != "xno"; then + AC_CHECK_LIB(idn, stringprep_check_version) + AC_CHECK_FUNCS(idna_to_unicode_utf8_from_utf8 idna_to_unicode_8z8z) + AC_CHECK_FUNCS(idna_to_ascii_from_utf8 idna_to_ascii_8z) + AC_CHECK_FUNCS(idna_to_ascii_lz idna_to_ascii_from_locale) +fi + +if test "$need_md5" = "yes" +then + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o" +fi + +dnl -- end socket -- + +AC_ARG_ENABLE(debug, [ --enable-debug Enable debugging support], + [ if test x$enableval = xyes ; then + AC_DEFINE(DEBUG,1,[ Define to enable debugging info. ]) + fi + ]) + +AC_ARG_ENABLE(flock, [ --enable-flock Use flock() to lock files], + [if test $enableval = yes; then + AC_DEFINE(USE_FLOCK,1, [ Define to use flock() to lock mailboxes. ]) + fi]) + +mutt_cv_fcntl=yes +AC_ARG_ENABLE(fcntl, [ --disable-fcntl Do NOT use fcntl() to lock files ], + [if test $enableval = no; then mutt_cv_fcntl=no; fi]) + +if test $mutt_cv_fcntl = yes; then + AC_DEFINE(USE_FCNTL,1, [ Define to use fcntl() to lock folders. ]) +fi + +mutt_cv_warnings=yes +AC_ARG_ENABLE(warnings, [ --disable-warnings Turn off compiler warnings (not recommended)], +[if test $enableval = no; then + mutt_cv_warnings=no +fi]) + +if test x$GCC = xyes -a $mutt_cv_warnings = yes; then + CFLAGS="-Wall -pedantic $CFLAGS" +fi + +AC_ARG_ENABLE(nfs-fix, [ --enable-nfs-fix Work around an NFS with broken attributes caching ], + [if test x$enableval = xyes; then + AC_DEFINE(NFS_ATTRIBUTE_HACK,1, + [Define if you have problems with mutt not detecting + new/old mailboxes over NFS. Some NFS implementations + incorrectly cache the attributes of small files.]) + fi]) + +AC_ARG_ENABLE(buffy-size, [ --enable-buffy-size Use file size attribute instead of access time ], + [if test x$enableval = xyes; then + AC_DEFINE(BUFFY_SIZE,1,[ Define to enable the "buffy_size" feature. ]) + fi]) + +AC_ARG_ENABLE(mailtool, [ --enable-mailtool Enable Sun mailtool attachments support ], + [if test x$enableval = xyes; then + AC_DEFINE(SUN_ATTACHMENT,1,[ Define to enable Sun mailtool attachments support. ]) + fi]) + +AC_ARG_ENABLE(locales-fix, [ --enable-locales-fix The result of isprint() is unreliable ], + [if test x$enableval = xyes; then + AC_DEFINE(LOCALES_HACK,1,[ Define if the result of isprint() is unreliable. ]) + fi]) + +AC_ARG_WITH(exec-shell, [ --with-exec-shell=SHELL Specify alternate shell (ONLY if /bin/sh is broken)], + [if test $withval != yes; then + AC_DEFINE_UNQUOTED(EXECSHELL, "$withval", + [program to use for shell commands]) + else + AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh") + fi], + [AC_DEFINE_UNQUOTED(EXECSHELL, "/bin/sh")]) + +AC_ARG_ENABLE(exact-address, [ --enable-exact-address Enable regeneration of email addresses], + [if test $enableval = yes; then + AC_DEFINE(EXACT_ADDRESS,1, + [Enable exact regeneration of email addresses as parsed? + NOTE: this requires significant more memory when defined.]) + + fi]) + +AC_SUBST(MUTTLIBS) +AC_SUBST(MUTT_LIB_OBJECTS) +AC_SUBST(LIBIMAP) +AC_SUBST(LIBIMAPDEPS) + +dnl -- iconv/gettext -- + +AC_ARG_ENABLE(iconv, [ --disable-iconv Disable iconv support], + [if test x$enableval = xno ; then + am_cv_func_iconv=no + fi +]) + +MUTT_AM_GNU_GETTEXT + +if test "$am_cv_func_iconv" != "yes" +then + AC_MSG_WARN([Configuring without iconv support. See INSTALL for details]) +else + +AC_CHECK_HEADERS(iconv.h, + [AC_MSG_CHECKING(whether iconv.h defines iconv_t) + AC_EGREP_HEADER([typedef.*iconv_t],iconv.h, + [AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_ICONV_T_DEF, 1, + [Define if defines iconv_t.])], + AC_MSG_RESULT(no))]) + +dnl (1) Some implementations of iconv won't convert from UTF-8 to UTF-8. +dnl (2) In glibc-2.1.2 and earlier there is a bug that messes up ob and +dnl obl when args 2 and 3 are 0 (fixed in glibc-2.1.3). +AC_CACHE_CHECK([whether this iconv is good enough], mutt_cv_iconv_good, + mutt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_RUN([ +#include +int main() +{ + iconv_t cd; +changequote(, )dnl + char buf[4]; +changequote([, ])dnl + char *ob; + size_t obl; + ob = buf, obl = sizeof(buf); + return ((cd = iconv_open("UTF-8", "UTF-8")) != (iconv_t)(-1) && + (iconv(cd, 0, 0, &ob, &obl) || + !(ob == buf && obl == sizeof(buf)) || + iconv_close(cd))); +} + ], + mutt_cv_iconv_good=yes, + mutt_cv_iconv_good=no, + mutt_cv_iconv_good=yes) + LIBS="$mutt_save_LIBS") +if test "$mutt_cv_iconv_good" = no; then + AC_MSG_ERROR(Try using libiconv instead) +fi + +dnl This is to detect implementations such as the one in glibc-2.1, +dnl which always convert exactly but return the number of characters +dnl converted instead of the number converted inexactly. +AC_CACHE_CHECK([whether iconv is non-transcribing], mutt_cv_iconv_nontrans, + mutt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_RUN([ +#include +#include +int main() +{ + iconv_t cd; + const char *ib; + char *ob; + size_t ibl, obl; + const char *s = "\304\211"; +changequote(, )dnl + char t[3]; +changequote([, ])dnl + ib = s, ibl = 2, ob = t, obl = 3; + return ((cd = iconv_open("UTF-8", "UTF-8")) == (iconv_t)(-1) || + iconv(cd, &ib, &ibl, &ob, &obl)); +} + ], + mutt_cv_iconv_nontrans=no, + mutt_cv_iconv_nontrans=yes, + mutt_cv_iconv_nontrans=no) + LIBS="$mutt_save_LIBS") +if test "$mutt_cv_iconv_nontrans" = yes; then + AC_DEFINE(ICONV_NONTRANS, 1) +else + AC_DEFINE(ICONV_NONTRANS, 0) +fi + +CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/intl" + +if test "$BUILD_INCLUDED_LIBINTL" = "yes"; then + AC_DEFINE(HAVE_BIND_TEXTDOMAIN_CODESET,1, + [ Define if your gettext has bind_textdomain_codeset. ]) +else + AC_CHECK_FUNCS(bind_textdomain_codeset) +fi + +fi # libiconv + +dnl -- locales -- + +AC_CHECK_HEADERS(wchar.h) + +AC_CACHE_CHECK([for wchar_t], mutt_cv_wchar_t, + AC_TRY_COMPILE([ +#include +#include +#ifdef HAVE_WCHAR_H +#include +#endif + ], + [ wchar_t wc; return 0; ], + mutt_cv_wchar_t=yes, + mutt_cv_wchar_t=no)) + +if test "$mutt_cv_wchar_t" = no; then + AC_DEFINE(wchar_t,int,[ Define to 'int' if system headers don't define. ]) +fi + +AC_CACHE_CHECK([for wint_t], mutt_cv_wint_t, + AC_TRY_COMPILE([ +#include +#include +#ifdef HAVE_WCHAR_H +#include +#endif + ], + [ wint_t wc; return 0; ], + mutt_cv_wint_t=yes, + mutt_cv_wint_t=no)) + +if test "$mutt_cv_wint_t" = no; then + AC_DEFINE(wint_t,int,[ Define to 'int' if system headers don't define. ]) +fi + +AC_CHECK_HEADERS(wctype.h) +AC_CHECK_FUNCS(iswalnum iswalpha iswcntrl iswdigit) +AC_CHECK_FUNCS(iswgraph iswlower iswprint iswpunct iswspace iswupper) +AC_CHECK_FUNCS(iswxdigit towupper towlower) + +AC_CACHE_CHECK([for mbstate_t], mutt_cv_mbstate_t, + AC_TRY_COMPILE([ +#include +#include +#ifdef HAVE_WCHAR_H +#include +#endif + ], + [ mbstate_t s; return 0; ], + mutt_cv_mbstate_t=yes, + mutt_cv_mbstate_t=no)) + +if test "$mutt_cv_mbstate_t" = no; then + AC_DEFINE(mbstate_t,int,[ Define to 'int' if system headers don't define. ]) +fi + +wc_funcs=maybe +AC_ARG_WITH(wc-funcs, [ --without-wc-funcs Do not use the system's wchar_t functions], + wc_funcs=$withval) + +if test "$wc_funcs" != yes -a "$wc_funcs" != no; then + AC_CACHE_CHECK([for wchar_t functions], mutt_cv_wc_funcs, + mutt_cv_wc_funcs=no + AC_TRY_LINK([ +#define _XOPEN_SOURCE 1 +#include +#include +#ifdef HAVE_WCTYPE_H +#include +#endif +#ifdef HAVE_WCHAR_H +#include +#endif], + [mbrtowc(0, 0, 0, 0); wctomb(0, 0); wcwidth(0); + iswprint(0); iswspace(0); towlower(0); towupper(0); iswalnum(0)], + mutt_cv_wc_funcs=yes)) + wc_funcs=$mutt_cv_wc_funcs +fi + +if test $wc_funcs = yes; then + AC_DEFINE(HAVE_WC_FUNCS,1,[ Define if you are using the system's wchar_t functions. ]) +fi + +AC_CACHE_CHECK([for nl_langinfo and CODESET], mutt_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + mutt_cv_langinfo_codeset=yes, + mutt_cv_langinfo_codeset=no)]) +if test $mutt_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET,1,[ Define if you have and nl_langinfo(CODESET). ]) +fi + +AC_CACHE_CHECK([for nl_langinfo and YESEXPR], mutt_cv_langinfo_yesexpr, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(YESEXPR);], + mutt_cv_langinfo_yesexpr=yes, + mutt_cv_langinfo_yesexpr=no)]) +if test $mutt_cv_langinfo_yesexpr = yes; then + AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have and nl_langinfo(YESEXPR). ]) +fi + +dnl -- libesmtp -- +MUTT_AM_LIBESMTP +if test x$use_libesmtp = xyes; then + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + MUTTLIBS="$MUTTLIBS $mutt_libesmtp_libs" + MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS mutt_libesmtp.o" + + AC_DEFINE(USE_LIBESMTP, + 1, + [Define to enable the use of libesmtp]) +fi +dnl -- end libesmtp -- + +AC_OUTPUT(Makefile intl/Makefile m4/Makefile + po/Makefile.in doc/Makefile contrib/Makefile + muttbug.sh + imap/Makefile + Muttrc.head + doc/instdoc.sh) diff --git a/contrib/Makefile.in b/contrib/Makefile.in new file mode 100644 index 0000000..d0c775a --- /dev/null +++ b/contrib/Makefile.in @@ -0,0 +1,74 @@ +# $Id: Makefile.in,v 3.3 2003/04/02 08:47:28 roessler Exp $ + +SHELL = /bin/sh + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +libdir = @libdir@ +mandir = @mandir@ +srcdir = @srcdir@ +docdir = @docdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +INSTALL = @INSTALL@ +VPATH = @srcdir@ +@SET_MAKE@ + +subdir = contrib + +SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp5.rc pgp6.rc Tin.rc \ + sample.muttrc sample.mailcap sample.muttrc-tlr \ + colors.default colors.linux smime.rc \ + ca-bundle.crt smime_keys_test.pl + +DISTFILES = Makefile.in language.txt language50.txt \ + patch.slang-1.2.2.keypad.1 \ + $(SAMPLES) + +ICONV_DISTFILES = README make.sh + +all clean: + +distclean: + -rm -f Makefile + +check: + +install: + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)/samples $(DESTDIR)$(docdir)/samples/iconv + for f in $(SAMPLES) ; do \ + $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir)/samples ; \ + done + for f in $(srcdir)/iconv/*.rc ; do \ + $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir)/samples/iconv ; \ + done + +# Nothing needs to be done - uninstall in doc removes samples as well. +# This is just so make uninstall doesn't fail. +uninstall: + +maintainer-clean: distclean + +Makefile: ../config.status Makefile.in + cd .. \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: Makefile $(DISTFILES) + for file in $(DISTFILES) ; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + mkdir -p $(distdir)/iconv + for file in $(ICONV_DISTFILES) ; do \ + ln $(srcdir)/iconv/$$file $(distdir)/iconv 2> /dev/null \ + || cp -p $(srcdir)/iconv/$$file $(distdir)/iconv; \ + done + for file in $(srcdir)/iconv/*.rc ; do \ + ln $$file $(distdir)/iconv 2> /dev/null \ + || cp -p $$file $(distdir)/iconv ; \ + done diff --git a/contrib/Mush.rc b/contrib/Mush.rc new file mode 100644 index 0000000..f0f7378 --- /dev/null +++ b/contrib/Mush.rc @@ -0,0 +1,20 @@ +# +# Key bindings similar to those of MUSH +# + +# $Id: Mush.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $ + +bind index . display-message +bind index t display-message +macro index n j\n +bind index + next-entry +bind index j next-entry +bind index J next-entry +bind index - previous-entry +bind index k previous-entry +bind index K previous-entry +bind index { top-page +bind index } bottom-page +bind index f change-folder +bind index \cu sync-mailbox +bind index * flag-message diff --git a/contrib/Pine.rc b/contrib/Pine.rc new file mode 100644 index 0000000..f16ffbf --- /dev/null +++ b/contrib/Pine.rc @@ -0,0 +1,44 @@ +# +# This file contains commands to change the keybindings in Mutt to be +# similar to those of PINE 3.95. +# + +# +# $Id: Pine.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $ +# + +bind index v display-message +bind index p previous-undeleted +bind index n next-undeleted +bind index ' ' next-page +bind index c mail +bind index g change-folder +bind index w search +bind index y print-message +bind index x sync-mailbox +bind index $ sort-mailbox +bind index a tag-prefix +bind index \; tag-entry + +# Not possible to simulate zoom-out... +macro index z l~T\r + +bind pager p previous-undeleted +bind pager n next-undeleted +bind pager ' ' next-page +bind pager g change-folder +bind pager c mail +bind pager w search +bind pager y print-message +bind pager \n noop # PINE prints "No default action for this menu." +bind pager previous-line +bind pager next-line + +bind compose \cx send-message + +# PINE has different defaults for this variables +set folder=~/mail +set record=+sent-mail +set nosave_name +set postponed=~/postponed-msgs +set hdr_format="%Z %3C %{%b %d} %-19.19L (%5c) %s" diff --git a/contrib/Tin.rc b/contrib/Tin.rc new file mode 100644 index 0000000..8f8b1de --- /dev/null +++ b/contrib/Tin.rc @@ -0,0 +1,22 @@ +# From: Tom Gilbert +# To: mutt-users@mutt.org +# Subject: Re: Lynx-like movements +# Date: Sat, 4 Sep 1999 21:09:00 +0000 + + +# +# These key bindings may be nice for notorious lynx or tin users. +# + +bind pager previous-line +bind pager next-line +bind pager exit +bind pager view-attachments +bind attach exit +bind attach view-attach +bind index display-message +macro index "c?" +bind browser select-entry +macro browser "qc!\r" + + diff --git a/contrib/ca-bundle.crt b/contrib/ca-bundle.crt new file mode 100644 index 0000000..12b997d --- /dev/null +++ b/contrib/ca-bundle.crt @@ -0,0 +1,4599 @@ +## +## ca-bundle.crt -- Bundle of CA Root Certificates +## Last Modified: Thu Mar 2 09:32:46 CET 2000 +## +## This is a bundle of X.509 certificates of public +## Certificate Authorities (CA). These were automatically +## extracted from Netscape Communicator 4.72's certificate database +## (the file `cert7.db'). It contains the certificates in both +## plain text and PEM format and therefore can be directly used +## with an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## (SKIPME) +## + +ABAecom (sub., Am. Bankers Assn.) Root CA +========================================= +MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92 +PEM Data: +-----BEGIN CERTIFICATE----- +MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw +gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh +a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy +dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe +Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN +MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT +D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ +KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24 +4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp +mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb +QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5 +0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v +xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O +BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP +Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5 +m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS +YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN +u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD +Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr +wo3CbezcE9NGxXl8 +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: + d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com + Validity + Not Before: Jul 14 16:14:18 1999 GMT + Not After : Jul 11 16:14:18 2009 GMT + Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c: + 8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97: + 61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3: + ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c: + d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2: + 29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5: + 6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25: + 7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e: + db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18: + a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6: + 1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c: + db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0: + 42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28: + bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8: + e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b: + 0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6: + ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c: + ee:71 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Authority Key Identifier: + keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 + + X509v3 Subject Key Identifier: + 08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 + Signature Algorithm: sha1WithRSAEncryption + 5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b: + 9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec: + d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48: + b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c: + 18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30: + 82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94: + 90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2: + 52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60: + e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97: + 16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22: + 5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af: + 60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed: + 5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3: + 9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3: + 46:c5:79:7c + +ANX Network CA by DST +===================== +MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV +UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL +ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx +NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy +ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G +CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI +IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce +InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04 +JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr +MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL +BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw +OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz +ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD +AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK +UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY +gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 913220207 (0x366ea26f) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA + Validity + Not Before: Dec 9 15:46:48 1998 GMT + Not After : Dec 9 16:16:48 2018 GMT + Subject: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b4:48:11:80:58:a0:d5:a5:99:0f:f6:37:2c:44: + b6:6e:d1:7c:f3:2a:6b:9e:11:b6:88:23:04:5c:71: + 25:9e:6a:12:77:11:6e:bf:68:39:65:a8:f6:b2:f6: + a2:18:b2:89:15:a0:67:b7:7a:8c:22:48:6b:f6:84: + 34:1f:b6:ca:f7:1b:72:cb:f2:5b:48:d3:87:1e:22: + 76:13:04:b4:ac:6c:96:7f:e7:0e:08:c9:32:51:30: + 2d:d5:80:e8:21:67:ba:f3:5e:08:24:2c:07:59:9d: + 90:1a:ee:46:c9:b5:a4:1e:96:b4:41:91:d4:7f:d2: + 8d:38:26:b0:6f:43:6e:09:7d + Exponent: 3 (0x3) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 CRL Distribution Points: + DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1 + + X509v3 Private Key Usage Period: + Not Before: Dec 9 15:46:48 1998 GMT, Not After: Dec 9 15:46:48 2018 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 + + X509v3 Subject Key Identifier: + 8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0 +..V4.0.... + Signature Algorithm: sha1WithRSAEncryption + 49:25:c9:60:b1:0c:5f:a9:39:10:d3:c5:34:55:7d:cf:79:c3: + 29:eb:de:f9:c2:40:f9:e8:56:c5:f0:2f:ec:f4:d9:ec:48:51: + b8:63:38:5e:93:6e:18:96:85:b9:ca:50:9c:a4:b8:ea:66:26: + 68:93:85:6f:6f:4c:71:d0:be:7a:0b:3c:31:b9:f7:be:69:9e: + 10:d7:d1:40:e8:ac:16:71:ab:ae:ab:38:e1:70:b1:ca:92:16: + e0:5d:85:a6:18:80:06:00:9c:e1:a6:18:42:51:a7:68:68:59: + ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32: + a3:5d + +American Express CA +=================== +MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICkDCCAfkCAgCNMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYDVQQGEwJVUzEnMCUG +A1UEChMeQW1lcmljYW4gRXhwcmVzcyBDb21wYW55LCBJbmMuMSYwJAYDVQQLEx1B +bWVyaWNhbiBFeHByZXNzIFRlY2hub2xvZ2llczEvMC0GA1UEAxMmQW1lcmljYW4g +RXhwcmVzcyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgwODE0MjIwMTAwWhcN +MDYwODE0MjM1OTAwWjCBjzELMAkGA1UEBhMCVVMxJzAlBgNVBAoTHkFtZXJpY2Fu +IEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1lcmljYW4gRXhwcmVz +cyBUZWNobm9sb2dpZXMxLzAtBgNVBAMTJkFtZXJpY2FuIEV4cHJlc3MgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ8kmS +hcr9FSm1BrZE7PyIo/KGzv8UTyQckvnCI8HOQ99dNMi4FOzVKnCRSZXXVs2U8amT +0Ggi3E19oApyKkfqJfCFAF82VGHPC/k3Wmed6R/pZD9wlWGn0DAC3iYopGYDBOkw ++48zB/lvYYeictvzaHhjZlmpybdm4RWySDYs+QIDAQABMA0GCSqGSIb3DQEBBAUA +A4GBAGgXYrhzi0xs60qlPqvlnS7SzYoHV/PGWZd2Fxf4Uo4nk9hY2Chs9KIEeorC +diSxArTfKPL386infiNIYYj0EWiuJl32oUtTJWrYKhQCDuCHIG6eGVxzkAsj4jGX +Iz/VIqLTBnvaN/XXtUFEF3pFAtmFRWbWjsfwegyZYiJpW+3S +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 141 (0x8d) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority + Validity + Not Before: Aug 14 22:01:00 1998 GMT + Not After : Aug 14 23:59:00 2006 GMT + Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:c9:f2:49:92:85:ca:fd:15:29:b5:06:b6:44:ec: + fc:88:a3:f2:86:ce:ff:14:4f:24:1c:92:f9:c2:23: + c1:ce:43:df:5d:34:c8:b8:14:ec:d5:2a:70:91:49: + 95:d7:56:cd:94:f1:a9:93:d0:68:22:dc:4d:7d:a0: + 0a:72:2a:47:ea:25:f0:85:00:5f:36:54:61:cf:0b: + f9:37:5a:67:9d:e9:1f:e9:64:3f:70:95:61:a7:d0: + 30:02:de:26:28:a4:66:03:04:e9:30:fb:8f:33:07: + f9:6f:61:87:a2:72:db:f3:68:78:63:66:59:a9:c9: + b7:66:e1:15:b2:48:36:2c:f9 + Exponent: 65537 (0x10001) + Signature Algorithm: md5WithRSAEncryption + 68:17:62:b8:73:8b:4c:6c:eb:4a:a5:3e:ab:e5:9d:2e:d2:cd: + 8a:07:57:f3:c6:59:97:76:17:17:f8:52:8e:27:93:d8:58:d8: + 28:6c:f4:a2:04:7a:8a:c2:76:24:b1:02:b4:df:28:f2:f7:f3: + a8:a7:7e:23:48:61:88:f4:11:68:ae:26:5d:f6:a1:4b:53:25: + 6a:d8:2a:14:02:0e:e0:87:20:6e:9e:19:5c:73:90:0b:23:e2: + 31:97:23:3f:d5:22:a2:d3:06:7b:da:37:f5:d7:b5:41:44:17: + 7a:45:02:d9:85:45:66:d6:8e:c7:f0:7a:0c:99:62:22:69:5b: + ed:d2 + +American Express Global CA +========================== +MD5 Fingerprint: 63:1B:66:93:8C:F3:66:CB:3C:79:57:DC:05:49:EA:DB +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEBDCCAuygAwIBAgICAIUwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVT +MScwJQYDVQQKEx5BbWVyaWNhbiBFeHByZXNzIENvbXBhbnksIEluYy4xJjAkBgNV +BAsTHUFtZXJpY2FuIEV4cHJlc3MgVGVjaG5vbG9naWVzMTYwNAYDVQQDEy1BbWVy +aWNhbiBFeHByZXNzIEdsb2JhbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgw +ODE0MTkwNjAwWhcNMTMwODE0MjM1OTAwWjCBljELMAkGA1UEBhMCVVMxJzAlBgNV +BAoTHkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1l +cmljYW4gRXhwcmVzcyBUZWNobm9sb2dpZXMxNjA0BgNVBAMTLUFtZXJpY2FuIEV4 +cHJlc3MgR2xvYmFsIENlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAPAkJmYu++tKc3FTiUfLJjxTkpRMysKFtQ34w1e9 +Lyofahi3V68MABb6oLaQpvcaoS5mJsdoo4qTaWa1RlYtHYLqkAwKIsKJUI0F89Sr +c0HwzxKsKLRvFJSWWUuekHWG3+JH6+HpT0N+h8onGGaetcFAZX38YW+tm3LPqV7Y +8/nabpEQ+ky16n4g3qk5L/WI5IpvNcYgnCuGRjMK/DFVpWusFkDpzTVZbzIEw3u1 +D3t3cPNIuypSgs6vKW3xEW9t5gcAAe+a8yYNpnkTZ6/4qxx1rJG1a75AsN6cDLFp +hRlxkRNFyt/R/eayypaDedvFuKpbepALeFY+xteflEgR9a0CAwEAAaNaMFgwEgYD +VR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAQYwFwYDVR0gBBAwDjAMBgoq +hkiG+Q8KAQUBMBkGA1UdDgQSBBBXRzV7NicRqAj8L0Yl6yRpMA0GCSqGSIb3DQEB +BQUAA4IBAQDHYUWoinG5vjTpIXshzVYTmNUwY+kYqkuSFb8LHbvskmnFLsNhi+gw +RcsQRsFzOFyLGdIr80DrfHKzLh4n43WVihybLsSVBYZy0FX0oZJSeVzb9Pjc5dcS +sUDHPIbkMWVKyjfG3nZXGWlMRmn8Kq0WN3qTrPchSy3766lQy8HRQAjaA2mHpzde +VcHF7cTjjgwml5tcV0ty4/IDBdACOyYDQJCevgtbSQx48dVMVSng9v1MA6lUAjLR +V1qFrEPtWzsWX6C/NdtLnnvo/+cNPDuom0lBRvVzTv+SZSGDE1Vx60k8f4gawhIo +JaFGS0E3l3/sjvHUoZbCILZerakcHhGg +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 133 (0x85) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority + Validity + Not Before: Aug 14 19:06:00 1998 GMT + Not After : Aug 14 23:59:00 2013 GMT + Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:f0:24:26:66:2e:fb:eb:4a:73:71:53:89:47:cb: + 26:3c:53:92:94:4c:ca:c2:85:b5:0d:f8:c3:57:bd: + 2f:2a:1f:6a:18:b7:57:af:0c:00:16:fa:a0:b6:90: + a6:f7:1a:a1:2e:66:26:c7:68:a3:8a:93:69:66:b5: + 46:56:2d:1d:82:ea:90:0c:0a:22:c2:89:50:8d:05: + f3:d4:ab:73:41:f0:cf:12:ac:28:b4:6f:14:94:96: + 59:4b:9e:90:75:86:df:e2:47:eb:e1:e9:4f:43:7e: + 87:ca:27:18:66:9e:b5:c1:40:65:7d:fc:61:6f:ad: + 9b:72:cf:a9:5e:d8:f3:f9:da:6e:91:10:fa:4c:b5: + ea:7e:20:de:a9:39:2f:f5:88:e4:8a:6f:35:c6:20: + 9c:2b:86:46:33:0a:fc:31:55:a5:6b:ac:16:40:e9: + cd:35:59:6f:32:04:c3:7b:b5:0f:7b:77:70:f3:48: + bb:2a:52:82:ce:af:29:6d:f1:11:6f:6d:e6:07:00: + 01:ef:9a:f3:26:0d:a6:79:13:67:af:f8:ab:1c:75: + ac:91:b5:6b:be:40:b0:de:9c:0c:b1:69:85:19:71: + 91:13:45:ca:df:d1:fd:e6:b2:ca:96:83:79:db:c5: + b8:aa:5b:7a:90:0b:78:56:3e:c6:d7:9f:94:48:11: + f5:ad + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:5 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Certificate Policies: + Policy: 1.2.840.113807.10.1.5.1 + + X509v3 Subject Key Identifier: + 57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69 + Signature Algorithm: sha1WithRSAEncryption + c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5: + 30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3: + 61:8b:e8:30:45:cb:10:46:c1:73:38:5c:8b:19:d2:2b:f3:40: + eb:7c:72:b3:2e:1e:27:e3:75:95:8a:1c:9b:2e:c4:95:05:86: + 72:d0:55:f4:a1:92:52:79:5c:db:f4:f8:dc:e5:d7:12:b1:40: + c7:3c:86:e4:31:65:4a:ca:37:c6:de:76:57:19:69:4c:46:69: + fc:2a:ad:16:37:7a:93:ac:f7:21:4b:2d:fb:eb:a9:50:cb:c1: + d1:40:08:da:03:69:87:a7:37:5e:55:c1:c5:ed:c4:e3:8e:0c: + 26:97:9b:5c:57:4b:72:e3:f2:03:05:d0:02:3b:26:03:40:90: + 9e:be:0b:5b:49:0c:78:f1:d5:4c:55:29:e0:f6:fd:4c:03:a9: + 54:02:32:d1:57:5a:85:ac:43:ed:5b:3b:16:5f:a0:bf:35:db: + 4b:9e:7b:e8:ff:e7:0d:3c:3b:a8:9b:49:41:46:f5:73:4e:ff: + 92:65:21:83:13:55:71:eb:49:3c:7f:88:1a:c2:12:28:25:a1: + 46:4b:41:37:97:7f:ec:8e:f1:d4:a1:96:c2:20:b6:5e:ad:a9: + 1c:1e:11:a0 + +BelSign Object Publishing CA +============================ +MD5 Fingerprint: 8A:02:F8:DF:B8:E1:84:9F:5A:C2:60:24:65:D1:73:FB +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDAzCCAmygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBuzELMAkGA1UEBhMCQkUx +ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQL +Ey9CZWxTaWduIE9iamVjdCBQdWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0 +eTElMCMGA1UEAxMcQmVsU2lnbiBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqG +SIb3DQEJARYUd2VibWFzdGVyQGJlbHNpZ24uYmUwHhcNOTcwOTE5MjIwMzAwWhcN +MDcwOTE5MjIwMzAwWjCBuzELMAkGA1UEBhMCQkUxETAPBgNVBAcTCEJydXNzZWxz +MRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQLEy9CZWxTaWduIE9iamVjdCBQ +dWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0eTElMCMGA1UEAxMcQmVsU2ln +biBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVy +QGJlbHNpZ24uYmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQuH7a/7oJA +3fm3LkHVngWxWtAmfGJVA5v8y2HeS+/+6Jn+h7mIz5DaDwk8dt8Xl7bLPyVF/bS8 +WAC+sFq2FIeP7mdkrR2Ig7tnn2VhAFgIgFCfgMkx9iqQHC33SmwQ9iNDXTgJYIhX +As0WbBj8zfuSKnfQnpOjXYhk0Mj4XVRRAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE +AwIABzANBgkqhkiG9w0BAQQFAAOBgQBjdhd8lvBTpV0BHFPOKcJ+daxMDaIIc7Rq +Mf0CBhSZ3FQEpL/IloafMUMyJVf2hfYluze+oXkjyVcGJXFrRU/49AJAFoIir1Tq +Mij2De6ZuksIUQ9uhiMhTC0liIHELg7xEyw4ipUCJMM6lWPkk45IuwhHcl+u5jpa +R9Zxxp6aUg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be + Validity + Not Before: Sep 19 22:03:00 1997 GMT + Not After : Sep 19 22:03:00 2007 GMT + Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:c4:2e:1f:b6:bf:ee:82:40:dd:f9:b7:2e:41:d5: + 9e:05:b1:5a:d0:26:7c:62:55:03:9b:fc:cb:61:de: + 4b:ef:fe:e8:99:fe:87:b9:88:cf:90:da:0f:09:3c: + 76:df:17:97:b6:cb:3f:25:45:fd:b4:bc:58:00:be: + b0:5a:b6:14:87:8f:ee:67:64:ad:1d:88:83:bb:67: + 9f:65:61:00:58:08:80:50:9f:80:c9:31:f6:2a:90: + 1c:2d:f7:4a:6c:10:f6:23:43:5d:38:09:60:88:57: + 02:cd:16:6c:18:fc:cd:fb:92:2a:77:d0:9e:93:a3: + 5d:88:64:d0:c8:f8:5d:54:51 + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Signature Algorithm: md5WithRSAEncryption + 63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac: + 4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf: + c8:96:86:9f:31:43:32:25:57:f6:85:f6:25:bb:37:be:a1:79: + 23:c9:57:06:25:71:6b:45:4f:f8:f4:02:40:16:82:22:af:54: + ea:32:28:f6:0d:ee:99:ba:4b:08:51:0f:6e:86:23:21:4c:2d: + 25:88:81:c4:2e:0e:f1:13:2c:38:8a:95:02:24:c3:3a:95:63: + e4:93:8e:48:bb:08:47:72:5f:ae:e6:3a:5a:47:d6:71:c6:9e: + 9a:52 + +BelSign Secure Server CA +======================== +MD5 Fingerprint: 3D:5E:82:C6:D9:AD:D9:8B:93:6B:0C:10:B9:49:0A:B1 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIC8zCCAlygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBszELMAkGA1UEBhMCQkUx +ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTQwMgYDVQQL +EytCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSEw +HwYDVQQDExhCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ0ExIzAhBgkqhkiG9w0BCQEW +FHdlYm1hc3RlckBiZWxzaWduLmJlMB4XDTk3MDcxNjIyMDA1NFoXDTA3MDcxNjIy +MDA1NFowgbMxCzAJBgNVBAYTAkJFMREwDwYDVQQHEwhCcnVzc2VsczETMBEGA1UE +ChMKQmVsU2lnbiBOVjE0MDIGA1UECxMrQmVsU2lnbiBTZWN1cmUgU2VydmVyIENl +cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQmVsU2lnbiBTZWN1cmUgU2Vy +dmVyIENBMSMwIQYJKoZIhvcNAQkBFhR3ZWJtYXN0ZXJAYmVsc2lnbi5iZTCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gESeJL4BEJ/yccig/x8R3AwK0kLPjZA +kCjaIXODU/LE0RZAwFP/rqbGJLMnbaWzPTl3XagG9ubpvGMRTgZlcAqdk/miQIt/ +SoQOjRax1swIZBIM4ChLyKWEkBf7EUYu1qeFGMsYrmOasFgG9ADP+MQJGjUMofnu +Sv1t3v4mpTsCAwEAAaMVMBMwEQYJYIZIAYb4QgEBBAQDAgCgMA0GCSqGSIb3DQEB +BAUAA4GBAGw9mcMF4h3K5S2qaIWLQDEgZhNo5lg6idCNdbLFYth9go/32TKBd/Y1 +W4UpzmeyubwrGXjP84f9RvGVdbIJVwMwwXrNckdxgMp9ncllPEcRIn36BwsoeKGT +6AVFSOIyMko96FMcELfHc4wHUOH5yStTQfWDjeUJOUqOA2KqQGOL +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be + Validity + Not Before: Jul 16 22:00:54 1997 GMT + Not After : Jul 16 22:00:54 2007 GMT + Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d6:01:12:78:92:f8:04:42:7f:c9:c7:22:83:fc: + 7c:47:70:30:2b:49:0b:3e:36:40:90:28:da:21:73: + 83:53:f2:c4:d1:16:40:c0:53:ff:ae:a6:c6:24:b3: + 27:6d:a5:b3:3d:39:77:5d:a8:06:f6:e6:e9:bc:63: + 11:4e:06:65:70:0a:9d:93:f9:a2:40:8b:7f:4a:84: + 0e:8d:16:b1:d6:cc:08:64:12:0c:e0:28:4b:c8:a5: + 84:90:17:fb:11:46:2e:d6:a7:85:18:cb:18:ae:63: + 9a:b0:58:06:f4:00:cf:f8:c4:09:1a:35:0c:a1:f9: + ee:4a:fd:6d:de:fe:26:a5:3b + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Cert Type: + SSL Client, S/MIME + Signature Algorithm: md5WithRSAEncryption + 6c:3d:99:c3:05:e2:1d:ca:e5:2d:aa:68:85:8b:40:31:20:66: + 13:68:e6:58:3a:89:d0:8d:75:b2:c5:62:d8:7d:82:8f:f7:d9: + 32:81:77:f6:35:5b:85:29:ce:67:b2:b9:bc:2b:19:78:cf:f3: + 87:fd:46:f1:95:75:b2:09:57:03:30:c1:7a:cd:72:47:71:80: + ca:7d:9d:c9:65:3c:47:11:22:7d:fa:07:0b:28:78:a1:93:e8: + 05:45:48:e2:32:32:4a:3d:e8:53:1c:10:b7:c7:73:8c:07:50: + e1:f9:c9:2b:53:41:f5:83:8d:e5:09:39:4a:8e:03:62:aa:40: + 63:8b + +Deutsche Telekom AG Root CA +=========================== +MD5 Fingerprint: 77:DE:04:94:77:D0:0C:5F:A7:B1:F4:30:18:87:FB:55 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICjjCCAfegAwIBAgIBBjANBgkqhkiG9w0BAQQFADBtMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEdMBsGA1UECxMUVGVsZVNlYyBU +cnVzdCBDZW50ZXIxITAfBgNVBAMTGERldXRzY2hlIFRlbGVrb20gUm9vdCBDQTAe +Fw05ODEyMDkwOTExMDBaFw0wNDEyMDkyMzU5MDBaMG0xCzAJBgNVBAYTAkRFMRww +GgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR0wGwYDVQQLExRUZWxlU2VjIFRy +dXN0IENlbnRlcjEhMB8GA1UEAxMYRGV1dHNjaGUgVGVsZWtvbSBSb290IENBMIGf +MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBSz5BbO5EtdpcffqVjAIVxRDe7sa +nG0vV2HX4vVEa+42QZb2ZM7hwbK5pBQEmFDocPiONZp9ScFhHVmu2gYYlX2tzuyp +vtEYD0CRdiqj5f3+iRX0V/fgVdp1rQD0LME1zLRDJlViRC4BJZyKW/DB0AA1eP41 +3pRAZHiDocw5iQIDAQABoz4wPDAPBgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQE +AwIBBjAZBgNVHQ4EEgQQLIdZH4sTgLL5hp0+En5YljANBgkqhkiG9w0BAQQFAAOB +gQAP/nO1B4hvoAuJ6spQH5TelCsLJ15P9RyVJtqMllStGZE3Q12ryYuzzW+YOT3t +3TXjcbftE5OD6IblKTMTE7w1e/0oL3BZ1dO0jSgTWTvI1XT5RcIHYKq4GFT5pWj/ +1wXVj7YFMS5BSvQQH2BHGguLGU2SVyDS71AZ6M3QcLy8Ng== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 6 (0x6) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA + Validity + Not Before: Dec 9 09:11:00 1998 GMT + Not After : Dec 9 23:59:00 2004 GMT + Subject: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:dd:05:2c:f9:05:b3:b9:12:d7:69:71:f7:ea:56: + 30:08:57:14:43:7b:bb:1a:9c:6d:2f:57:61:d7:e2: + f5:44:6b:ee:36:41:96:f6:64:ce:e1:c1:b2:b9:a4: + 14:04:98:50:e8:70:f8:8e:35:9a:7d:49:c1:61:1d: + 59:ae:da:06:18:95:7d:ad:ce:ec:a9:be:d1:18:0f: + 40:91:76:2a:a3:e5:fd:fe:89:15:f4:57:f7:e0:55: + da:75:ad:00:f4:2c:c1:35:cc:b4:43:26:55:62:44: + 2e:01:25:9c:8a:5b:f0:c1:d0:00:35:78:fe:35:de: + 94:40:64:78:83:a1:cc:39:89 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE, pathlen:5 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 2C:87:59:1F:8B:13:80:B2:F9:86:9D:3E:12:7E:58:96 + Signature Algorithm: md5WithRSAEncryption + 0f:fe:73:b5:07:88:6f:a0:0b:89:ea:ca:50:1f:94:de:94:2b: + 0b:27:5e:4f:f5:1c:95:26:da:8c:96:54:ad:19:91:37:43:5d: + ab:c9:8b:b3:cd:6f:98:39:3d:ed:dd:35:e3:71:b7:ed:13:93: + 83:e8:86:e5:29:33:13:13:bc:35:7b:fd:28:2f:70:59:d5:d3: + b4:8d:28:13:59:3b:c8:d5:74:f9:45:c2:07:60:aa:b8:18:54: + f9:a5:68:ff:d7:05:d5:8f:b6:05:31:2e:41:4a:f4:10:1f:60: + 47:1a:0b:8b:19:4d:92:57:20:d2:ef:50:19:e8:cd:d0:70:bc: + bc:36 + +Digital Signature Trust Co. Global CA 1 +======================================= +MD5 Fingerprint: 25:7A:BA:83:2E:B6:A2:0B:DA:FE:F5:02:0F:08:D7:AD +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV +UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL +EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ +BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x +ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg +bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ +j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV +Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG +SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx +JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI +RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw +MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 +fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i ++DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG +SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN +QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ +gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 913315222 (0x36701596) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 + Validity + Not Before: Dec 10 18:10:23 1998 GMT + Not After : Dec 10 18:40:23 2018 GMT + Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de: + 83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c: + a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5: + 62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb: + 43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8: + bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00: + cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3: + be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d: + 13:74:76:36:b5:7a:b4:2d:71 + Exponent: 3 (0x3) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 CRL Distribution Points: + DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1 + + X509v3 Private Key Usage Period: + Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 + + X509v3 Subject Key Identifier: + 6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0 +..V4.0.... + Signature Algorithm: sha1WithRSAEncryption + 22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f: + e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42: + c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b: + 31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c: + a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97: + 8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c: + e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3: + 8a:65 + +Digital Signature Trust Co. Global CA 2 +======================================= +MD5 Fingerprint: 6C:C9:A7:6E:47:F1:0C:E3:53:3B:78:4C:4D:C2:6A:C5 +PEM Data: +-----BEGIN CERTIFICATE----- +MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw +CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp +dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE +CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B +CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx +ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO +U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 +IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx +ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf +WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK +xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE +zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F +5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv +OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG +9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz +ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME +lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG +Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q +gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k +Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + d0:1e:40:8b:00:00:02:7c:00:00:00:02:00:00:00:01 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com + Validity + Not Before: Dec 1 18:18:55 1998 GMT + Not After : Nov 28 18:18:55 2008 GMT + Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:d2:c6:26:b6:e7:a5:3d:c1:c4:68:d5:50:6f:53: + c5:6f:49:13:09:b8:af:2c:48:8d:14:6a:a3:17:5f: + 5a:f9:d3:2e:75:2f:d8:28:62:d1:93:2f:fc:4d:d4: + ab:87:e5:08:c7:99:e7:92:3f:75:bd:eb:25:b4:15: + c1:9b:19:3d:d2:44:8d:d7:74:20:6d:37:02:8f:69: + 93:5b:8a:c4:19:9d:f4:b2:0e:fc:16:6c:b9:b1:05: + 92:83:d1:85:2c:60:94:3e:45:55:a0:d9:ab:08:21: + e6:60:e8:3b:74:f2:99:50:51:68:d0:03:2d:b1:80: + be:a3:d8:52:b0:44:cd:43:4a:70:8e:58:85:95:e1: + 4e:2c:d6:2d:41:6f:d6:84:e7:c8:98:44:ca:47:db: + 2c:24:a5:69:26:cf:6b:b8:27:62:c3:f4:c9:7a:92: + 23:ed:13:67:82:ae:45:2e:45:e5:7e:72:3f:85:9d: + 94:62:10:e6:3c:91:a1:ad:77:00:e0:15:ec:f3:84: + 80:72:7a:8e:6e:60:97:c7:24:59:10:34:83:5b:e1: + a5:a4:69:b6:57:35:1c:78:59:c6:d3:2f:3a:73:67: + ee:94:ca:04:13:05:62:06:70:23:b3:f4:7c:ee:45: + d9:64:0b:5b:49:aa:a4:43:ce:26:c4:44:12:6c:b8: + dd:79 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + a2:37:b2:3f:69:fb:d7:86:79:54:49:31:95:33:2b:f3:d1:09: + 14:49:62:60:86:a5:b0:11:e2:50:c2:1d:06:57:3e:2d:e8:33: + 64:be:9b:aa:ad:5f:1b:4d:d4:99:95:a2:8b:9a:c9:62:72:b5: + 69:ea:d9:58:ab:35:ed:15:a2:43:d6:b6:bc:07:79:65:64:73: + 7d:d7:79:ca:7b:d5:5a:51:c6:e1:53:04:96:8d:38:cf:a3:17: + ac:39:71:6b:01:c3:8b:53:3c:63:e9:ee:79:c0:e4:be:92:32: + 64:7a:b3:1f:97:94:62:bd:ea:b2:20:15:95:fb:97:f2:78:2f: + 63:36:40:38:e3:46:0f:1d:dd:ac:95:ca:e7:4b:90:7b:b1:4b: + a9:d4:c5:eb:9a:da:aa:d5:a3:94:14:46:8d:2d:1f:f3:3a:d6: + 93:3a:f6:3e:79:fc:e8:e6:b0:75:ed:ee:3d:c9:70:c7:5d:aa: + 81:4b:46:25:1c:c7:6c:15:e3:95:4e:0f:aa:32:37:94:0a:17: + 24:92:13:84:58:d2:63:6f:2b:f7:e6:5b:62:0b:13:17:b0:0d: + 52:4c:fe:fe:6f:5c:e2:91:6e:1d:fd:a4:62:d7:68:fa:8e:7a: + 4f:d2:08:da:93:dc:f0:92:11:7a:d0:dc:72:93:0c:73:93:62: + 85:68:d0:f4 + +Digital Signature Trust Co. Global CA 3 +======================================= +MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV +UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL +EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ +BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x +ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ +k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso +LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o +TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG +SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx +JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI +RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 +MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C +TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 +WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG +SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR +xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL +B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 913232846 (0x366ed3ce) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 + Validity + Not Before: Dec 9 19:17:26 1998 GMT + Not After : Dec 9 19:47:26 2018 GMT + Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16: + bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03: + b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8: + 63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce: + 1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f: + ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef: + de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6: + 17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da: + 0c:9d:e7:91:5b:80:cd:94:9d + Exponent: 3 (0x3) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 CRL Distribution Points: + DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1 + + X509v3 Private Key Usage Period: + Not Before: Dec 9 19:17:26 1998 GMT, Not After: Dec 9 19:17:26 2018 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B + + X509v3 Subject Key Identifier: + 1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0 +..V4.0.... + Signature Algorithm: sha1WithRSAEncryption + 47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38: + 72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5: + d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e: + a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec: + b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83: + 73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0: + 78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3: + a2:03 + +Digital Signature Trust Co. Global CA 4 +======================================= +MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA +PEM Data: +-----BEGIN CERTIFICATE----- +MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw +CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp +dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE +CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B +CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy +MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO +U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 +IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx +ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV +p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw +BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl +5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi +3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ +QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG +9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ +2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN +I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL +553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q +10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN +uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com + Validity + Not Before: Nov 30 22:46:16 1998 GMT + Not After : Nov 27 22:46:16 2008 GMT + Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4: + e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5: + a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a: + 50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb: + 26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92: + dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39: + fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd: + 82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd: + 91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd: + 33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0: + 26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae: + 85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1: + 62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32: + 17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf: + cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af: + 6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48: + da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb: + 09:db + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28: + a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90: + d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07: + eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1: + cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45: + e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be: + e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83: + 7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79: + 28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40: + d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a: + d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f: + 56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec: + b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba: + c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad: + 7f:c2:78:b6 + +Entrust Worldwide by DST +======================== +MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV +UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL +ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz +MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg +VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI +hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe +3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU +/Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc +PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl +oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg +VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT +BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy +NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u +MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG +CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn +3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J +1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr +3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 913163544 (0x366dc518) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA + Validity + Not Before: Dec 9 00:02:24 1998 GMT + Not After : Dec 9 00:32:24 2018 GMT + Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32: + 0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de: + de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4: + fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4: + fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69: + fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12: + bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38: + c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3: + c6:ec:3f:be:35:9c:3d:22:ef + Exponent: 3 (0x3) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 CRL Distribution Points: + DirName:/C=US/O=Digital Signature Trust Co./OU=DST-Entrust GTI CA/CN=CRL1 + + X509v3 Private Key Usage Period: + Not Before: Dec 9 00:02:24 1998 GMT, Not After: Dec 9 00:02:24 2018 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE + + X509v3 Subject Key Identifier: + 93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0 +..V4.0.... + Signature Algorithm: sha1WithRSAEncryption + 64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87: + b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c: + 03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4: + cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1: + 2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1: + 76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b: + 1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1: + 4e:4c + +Entrust.net Premium 2048 Secure Server CA +========================================= +MD5 Fingerprint: BA:21:EA:20:D6:DD:DB:8F:C1:57:8B:40:AD:A1:FC:FC +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy +MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA +vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G +CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA +WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ +h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 +f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN +B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy +vUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 946059622 (0x3863b966) + Signature Algorithm: sha1WithRSAEncryption + Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) + Validity + Not Before: Dec 24 17:50:51 1999 GMT + Not After : Dec 24 18:20:51 2019 GMT + Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64: + 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7: + 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76: + 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf: + e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1: + 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29: + b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64: + ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c: + e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89: + a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90: + 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2: + cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a: + fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55: + 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86: + 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26: + 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e: + 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0: + 07:e1 + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 Authority Key Identifier: + keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 + + X509v3 Subject Key Identifier: + 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 + 1.2.840.113533.7.65.0: + 0...V5.0:4.0.... + Signature Algorithm: sha1WithRSAEncryption + 59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c: + 4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61: + 7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73: + ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5: + da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4: + 03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4: + 15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68: + c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c: + 7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33: + db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18: + b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2: + de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c: + e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e: + c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1: + d2:69:7c:c5 + +Entrust.net Secure Personal CA +============================== +MD5 Fingerprint: 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u +ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh +Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU +MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D +bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq +RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G +CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo +6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux +5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm +AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC +ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 +cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m +by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp +IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg +Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg +KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV +HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E +BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE +FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 +pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz +wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a +EkP/TOYGJqibGapEPHayXOw= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 939758062 (0x380391ee) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority + Validity + Not Before: Oct 12 19:24:30 1999 GMT + Not After : Oct 12 19:54:30 2019 GMT + Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:c8:3a:99:5e:31:17:df:ac:27:6f:90:7b:e4:19: + ff:45:a3:34:c2:db:c1:a8:4f:f0:68:ea:84:fd:9f: + 75:79:cf:c1:8a:51:94:af:c7:57:03:47:64:9e:ad: + 82:1b:5a:da:7f:37:78:47:bb:37:98:12:96:ce:c6: + 13:7d:ef:d2:0c:30:51:a9:39:9e:55:f8:fb:b1:e7: + 30:de:83:b2:ba:3e:f1:d5:89:3b:3b:85:ba:aa:74: + 2c:fe:3f:31:6e:af:91:95:6e:06:d4:07:4d:4b:2c: + 56:47:18:04:52:da:0e:10:93:bf:63:90:9b:e1:df: + 8c:e6:02:a4:e6:4f:5e:f7:8b + Exponent: 3 (0x3) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 CRL Distribution Points: + DirName:/C=US/O=Entrust.net/OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab./OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Client Certification Authority/CN=CRL1 + URI:http://www.entrust.net/CRL/Client1.crl + + X509v3 Private Key Usage Period: + Not Before: Oct 12 19:24:30 1999 GMT, Not After: Oct 12 19:24:30 2019 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C + + X509v3 Subject Key Identifier: + C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0 +..V4.0.... + Signature Algorithm: md5WithRSAEncryption + 3f:ae:8a:f1:d7:66:03:05:9e:3e:fa:ea:1c:46:bb:a4:5b:8f: + 78:9a:12:48:99:f9:f4:35:de:0c:36:07:02:6b:10:3a:89:14: + 81:9c:31:a6:7c:b2:41:b2:6a:e7:07:01:a1:4b:f9:9f:25:3b: + 96:ca:99:c3:3e:a1:51:1c:f3:c3:2e:44:f7:b0:67:46:aa:92: + e5:3b:da:1c:19:14:38:30:d5:e2:a2:31:25:2e:f1:ec:45:38: + ed:f8:06:58:03:73:62:b0:10:31:8f:40:bf:64:e0:5c:3e:c5: + 4f:1f:da:12:43:ff:4c:e6:06:26:a8:9b:19:aa:44:3c:76:b2: + 5c:ec + +Entrust.net Secure Server CA +============================ +MD5 Fingerprint: DF:F2:80:73:CC:F1:E6:61:73:FC:F5:42:E9:C5:7C:EE +PEM Data: +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 +MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE +ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j +b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg +U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ +I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 +wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC +AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb +oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 +BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 +MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi +E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa +MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI +hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN +95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd +2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 927650371 (0x374ad243) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority + Validity + Not Before: May 25 16:09:40 1999 GMT + Not After : May 25 16:39:40 2019 GMT + Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff: + af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1: + 0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81: + 26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71: + d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24: + da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29: + 92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8: + ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81: + b1:16:19:61:b9:54:b6:e6:43 + Exponent: 3 (0x3) + X509v3 extensions: + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + X509v3 CRL Distribution Points: + DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1 + URI:http://www.entrust.net/CRL/net1.crl + + X509v3 Private Key Usage Period: + Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A + + X509v3 Subject Key Identifier: + F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0 +..V4.0.... + Signature Algorithm: sha1WithRSAEncryption + 90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb: + 47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d: + f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31: + c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb: + a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58: + 0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54: + 73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06: + f9:b2 + +Equifax Premium CA +================== +MD5 Fingerprint: A9:E9:A8:9D:0E:73:E3:B1:2F:37:0D:E8:48:3F:86:ED +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDIzCCAoygAwIBAgIENeHvHjANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQGEwJV +UzEQMA4GA1UEChMHRXF1aWZheDEuMCwGA1UECxMlRXF1aWZheCBQcmVtaXVtIENl +cnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjQyMjU0MjNaFw0xODA4MjQyMjU0 +MjNaME8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVF +cXVpZmF4IFByZW1pdW0gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3 +DQEBAQUAA4GNADCBiQKBgQDOoQaOBswIC8GGqN4g1Q0O0Q3En+pq2bPCMkdAb4qI +pAm9OCwd5svmpPM269rrvPxkswf2Lbyqzp8ZSGhK/PWiRX4JEPWPs0lcIwY56hOL +uAvNkR12X9k3oUT7X5DyZ7PNGJlDH3YSawLylYM4Q8L2YjTKyXhdX9LYupr/vhBg +WwIDAQABo4IBCjCCAQYwcQYDVR0fBGowaDBmoGSgYqRgMF4xCzAJBgNVBAYTAlVT +MRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVFcXVpZmF4IFByZW1pdW0gQ2Vy +dGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIw +MTgwODI0MjI1NDIzWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUFe6yKFmrbuX4 +z4uB9CThrj91G5gwHQYDVR0OBBYEFBXusihZq27l+M+LgfQk4a4/dRuYMAwGA1Ud +EwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEB +BQUAA4GBAL0LnCepA9so3JipS9DRjqeoGlqR4Jzx9xh8LiKeNh/JqLXNRkpu+jUH +G4YI65/iqPmdQS06rlxctl80BOv8KmCw+3TkhellOJbuFcfGd2MSvYpoH6tsfdrK +XBPO6snrCVzFc+cSAdXZUwee4A+W8Iu0u0VIn4bFGVWgy5bFA/xI +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 903999262 (0x35e1ef1e) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Equifax, OU=Equifax Premium Certificate Authority + Validity + Not Before: Aug 24 22:54:23 1998 GMT + Not After : Aug 24 22:54:23 2018 GMT + Subject: C=US, O=Equifax, OU=Equifax Premium Certificate Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:ce:a1:06:8e:06:cc:08:0b:c1:86:a8:de:20:d5: + 0d:0e:d1:0d:c4:9f:ea:6a:d9:b3:c2:32:47:40:6f: + 8a:88:a4:09:bd:38:2c:1d:e6:cb:e6:a4:f3:36:eb: + da:eb:bc:fc:64:b3:07:f6:2d:bc:aa:ce:9f:19:48: + 68:4a:fc:f5:a2:45:7e:09:10:f5:8f:b3:49:5c:23: + 06:39:ea:13:8b:b8:0b:cd:91:1d:76:5f:d9:37:a1: + 44:fb:5f:90:f2:67:b3:cd:18:99:43:1f:76:12:6b: + 02:f2:95:83:38:43:c2:f6:62:34:ca:c9:78:5d:5f: + d2:d8:ba:9a:ff:be:10:60:5b + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 CRL Distribution Points: + DirName:/C=US/O=Equifax/OU=Equifax Premium Certificate Authority/CN=CRL1 + + X509v3 Private Key Usage Period: + Not After: Aug 24 22:54:23 2018 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 + + X509v3 Subject Key Identifier: + 15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0...V3.0c.... + Signature Algorithm: sha1WithRSAEncryption + bd:0b:9c:27:a9:03:db:28:dc:98:a9:4b:d0:d1:8e:a7:a8:1a: + 5a:91:e0:9c:f1:f7:18:7c:2e:22:9e:36:1f:c9:a8:b5:cd:46: + 4a:6e:fa:35:07:1b:86:08:eb:9f:e2:a8:f9:9d:41:2d:3a:ae: + 5c:5c:b6:5f:34:04:eb:fc:2a:60:b0:fb:74:e4:85:e9:65:38: + 96:ee:15:c7:c6:77:63:12:bd:8a:68:1f:ab:6c:7d:da:ca:5c: + 13:ce:ea:c9:eb:09:5c:c5:73:e7:12:01:d5:d9:53:07:9e:e0: + 0f:96:f0:8b:b4:bb:45:48:9f:86:c5:19:55:a0:cb:96:c5:03: + fc:48 + +Equifax Secure CA +================= +MD5 Fingerprint: 67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV +UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy +dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 +MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx +dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f +BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A +cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC +AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ +MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw +ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj +IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF +MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA +A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y +7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh +1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 903804111 (0x35def4cf) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority + Validity + Not Before: Aug 22 16:41:51 1998 GMT + Not After : Aug 22 16:41:51 2018 GMT + Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: + 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: + d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: + 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: + 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: + 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: + 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: + af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: + 3a:88:e7:bf:14:fd:e0:c7:b9 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 CRL Distribution Points: + DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1 + + X509v3 Private Key Usage Period: + Not After: Aug 22 16:41:51 2018 GMT + X509v3 Key Usage: + Certificate Sign, CRL Sign + X509v3 Authority Key Identifier: + keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 + + X509v3 Subject Key Identifier: + 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 + X509v3 Basic Constraints: + CA:TRUE + 1.2.840.113533.7.65.0: + 0...V3.0c.... + Signature Algorithm: sha1WithRSAEncryption + 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: + 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: + 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: + 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: + a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: + 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: + 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: + 77:38 + +GTE CyberTrust Global Root +========================== +MD5 Fingerprint: CA:3D:D3:68:F1:03:5C:D0:32:FA:B8:2B:59:E8:5A:DB +PEM Data: +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv +b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH +iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS +r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 +04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r +GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 +3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P +lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 421 (0x1a5) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root + Validity + Not Before: Aug 13 00:29:00 1998 GMT + Not After : Aug 13 23:59:00 2018 GMT + Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17: + 0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06: + c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28: + 73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af: + 8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c: + 72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac: + 8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87: + 45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15: + c7:79:b4:1f:05:2f:3b:62:99 + Exponent: 65537 (0x10001) + Signature Algorithm: md5WithRSAEncryption + 6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3: + a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33: + 81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55: + 7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95: + 4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7: + a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c: + 85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b: + 7a:7f + +GTE CyberTrust Japan Root CA +============================ +MD5 Fingerprint: DE:AB:FF:43:2A:65:37:06:9B:28:B5:7A:E8:84:D3:8E +PEM Data: +-----BEGIN CERTIFICATE----- +MIICETCCAXoCAU4wDQYJKoZIhvcNAQEEBQAwUTELMAkGA1UEBhMCSlAxHzAdBgNV +BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xITAfBgNVBAMTGEN5YmVyVHJ1c3Qg +SkFQQU4gUm9vdCBDQTAeFw05ODA4MDQwNzU3MDBaFw0wMzA4MDQyMzU5MDBaMFEx +CzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFuLCBJbmMuMSEw +HwYDVQQDExhDeWJlclRydXN0IEpBUEFOIFJvb3QgQ0EwgZ8wDQYJKoZIhvcNAQEB +BQADgY0AMIGJAoGBALet/MpHEHaJ/Wes5HMGfIFLHda1fA5Hr+ymVHWoxP1lr+fI +sbFsNDWN97lkVygLIVredP7ceC6GRhJMfxEf3JO9X75mmIa4t+xtSdOQ2eF5AFZo +uq1sHyw7H8ksjEOwBELqgXOmzjN1RQ2KRXIvqldV5AfDQ+J1Og+8PNCEzrrvAgMB +AAEwDQYJKoZIhvcNAQEEBQADgYEAt6ZkowyAPBzE2O5BO+WGpJ5gXdYBMqhqZC0g +cEC6ck5m+gdlTgOOC/1W4K07IKcy+rISHoDfHuN6GMxX2+bJNGDvdesQFtCkLnDY +JCO4pXdzQvkHOt0BbAiTBzUmECVgKf8J5WSfabkWSfNc3SRjRpMNsFM2dbxIILsZ +to/QIv0= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 78 (0x4e) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA + Validity + Not Before: Aug 4 07:57:00 1998 GMT + Not After : Aug 4 23:59:00 2003 GMT + Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b7:ad:fc:ca:47:10:76:89:fd:67:ac:e4:73:06: + 7c:81:4b:1d:d6:b5:7c:0e:47:af:ec:a6:54:75:a8: + c4:fd:65:af:e7:c8:b1:b1:6c:34:35:8d:f7:b9:64: + 57:28:0b:21:5a:de:74:fe:dc:78:2e:86:46:12:4c: + 7f:11:1f:dc:93:bd:5f:be:66:98:86:b8:b7:ec:6d: + 49:d3:90:d9:e1:79:00:56:68:ba:ad:6c:1f:2c:3b: + 1f:c9:2c:8c:43:b0:04:42:ea:81:73:a6:ce:33:75: + 45:0d:8a:45:72:2f:aa:57:55:e4:07:c3:43:e2:75: + 3a:0f:bc:3c:d0:84:ce:ba:ef + Exponent: 65537 (0x10001) + Signature Algorithm: md5WithRSAEncryption + b7:a6:64:a3:0c:80:3c:1c:c4:d8:ee:41:3b:e5:86:a4:9e:60: + 5d:d6:01:32:a8:6a:64:2d:20:70:40:ba:72:4e:66:fa:07:65: + 4e:03:8e:0b:fd:56:e0:ad:3b:20:a7:32:fa:b2:12:1e:80:df: + 1e:e3:7a:18:cc:57:db:e6:c9:34:60:ef:75:eb:10:16:d0:a4: + 2e:70:d8:24:23:b8:a5:77:73:42:f9:07:3a:dd:01:6c:08:93: + 07:35:26:10:25:60:29:ff:09:e5:64:9f:69:b9:16:49:f3:5c: + dd:24:63:46:93:0d:b0:53:36:75:bc:48:20:bb:19:b6:8f:d0: + 22:fd + +GTE CyberTrust Japan Secure Server CA +===================================== +MD5 Fingerprint: DD:0D:0D:B4:78:4B:7D:CE:30:0A:A6:35:C6:AB:4C:88 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICIzCCAYwCAU8wDQYJKoZIhvcNAQEEBQAwWjELMAkGA1UEBhMCSlAxHzAdBgNV +BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xKjAoBgNVBAMTIUN5YmVyVHJ1c3Qg +SkFQQU4gU2VjdXJlIFNlcnZlciBDQTAeFw05ODA4MDQwODA2MzJaFw0wMzA4MDQy +MzU5MDBaMFoxCzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFu +LCBJbmMuMSowKAYDVQQDEyFDeWJlclRydXN0IEpBUEFOIFNlY3VyZSBTZXJ2ZXIg +Q0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKwmo6G4b2rALBL52zEFkuf9 ++tSBtLjVKtWQ+vBDZfwSFcrs27lh3jNjN0+vADx/kjcbGHPlnzyI8RoTRP558sMm +lQ8L8J4UByFsV8Jdw+JRsM2LX81fhjj4eZc57Oi/Ui6xXqqprozt7tfIty4xi7Q5 +kjt8gScHGgFEL0lzILbJAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAaB17Eu5aeSkx +ygGsi1CpJ5ksAPw4Ghz/wtXwE/4bpzn1gBTrUfrAjXuEG1musTVRbqE+1xvsoJ7f +4KWCluOxP9io8ct5gI738ESZfhT1I6MR42hLBTZuiOOrhqo4UwNCO9O5+eC/BenT +X8NKp7b9t12QSfiasq1mpoIAk65g/yA= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 79 (0x4f) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA + Validity + Not Before: Aug 4 08:06:32 1998 GMT + Not After : Aug 4 23:59:00 2003 GMT + Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:ac:26:a3:a1:b8:6f:6a:c0:2c:12:f9:db:31:05: + 92:e7:fd:fa:d4:81:b4:b8:d5:2a:d5:90:fa:f0:43: + 65:fc:12:15:ca:ec:db:b9:61:de:33:63:37:4f:af: + 00:3c:7f:92:37:1b:18:73:e5:9f:3c:88:f1:1a:13: + 44:fe:79:f2:c3:26:95:0f:0b:f0:9e:14:07:21:6c: + 57:c2:5d:c3:e2:51:b0:cd:8b:5f:cd:5f:86:38:f8: + 79:97:39:ec:e8:bf:52:2e:b1:5e:aa:a9:ae:8c:ed: + ee:d7:c8:b7:2e:31:8b:b4:39:92:3b:7c:81:27:07: + 1a:01:44:2f:49:73:20:b6:c9 + Exponent: 65537 (0x10001) + Signature Algorithm: md5WithRSAEncryption + 68:1d:7b:12:ee:5a:79:29:31:ca:01:ac:8b:50:a9:27:99:2c: + 00:fc:38:1a:1c:ff:c2:d5:f0:13:fe:1b:a7:39:f5:80:14:eb: + 51:fa:c0:8d:7b:84:1b:59:ae:b1:35:51:6e:a1:3e:d7:1b:ec: + a0:9e:df:e0:a5:82:96:e3:b1:3f:d8:a8:f1:cb:79:80:8e:f7: + f0:44:99:7e:14:f5:23:a3:11:e3:68:4b:05:36:6e:88:e3:ab: + 86:aa:38:53:03:42:3b:d3:b9:f9:e0:bf:05:e9:d3:5f:c3:4a: + a7:b6:fd:b7:5d:90:49:f8:9a:b2:ad:66:a6:82:00:93:ae:60: + ff:20 + +GTE CyberTrust Root 2 +===================== +MD5 Fingerprint: BA:ED:17:57:9A:4B:FF:7C:F9:C9:1F:A2:CD:1A:D6:87 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICUDCCAbkCAgGbMA0GCSqGSIb3DQEBBAUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAyMB4X +DTk4MDgxMTExMzUwN1oXDTA4MDgxMTExMjIxNlowcDELMAkGA1UEBhMCVVMxGDAW +BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg +U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDIw +gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANksTE4vaRoj41a6886EwAnAefFE +XzMfFZF/iogouCRFzI8YzR900bWPcUzWMfZzloSUQMWpg2Akfa9vNLdLTMIJgDtF +BJ7EPMQndXsADKFkR7UUXYJLUTpYu0RMPdPlBjjoYVyYeLuAs5zacoJioN+cX+v5 +T3fCzGAYAGs0giWzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAo2SRbxDt526iQkCU +eM74FAjR+kOF60bNkhTQ7y4tNjkY2brJJ4gp6UgXb/jBqshhbS39QC11QzCXOfgU +ZL1v72OoK0LfsloNJex7N9jOkSmCFvnoYqLhdsQCfd0li5jh9g1gjPZZkEBRRNHC ++xkkHhc5a3QhFTPWVdeCHnAsJ6g= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 411 (0x19b) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 + Validity + Not Before: Aug 11 11:35:07 1998 GMT + Not After : Aug 11 11:22:16 2008 GMT + Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d9:2c:4c:4e:2f:69:1a:23:e3:56:ba:f3:ce:84: + c0:09:c0:79:f1:44:5f:33:1f:15:91:7f:8a:88:28: + b8:24:45:cc:8f:18:cd:1f:74:d1:b5:8f:71:4c:d6: + 31:f6:73:96:84:94:40:c5:a9:83:60:24:7d:af:6f: + 34:b7:4b:4c:c2:09:80:3b:45:04:9e:c4:3c:c4:27: + 75:7b:00:0c:a1:64:47:b5:14:5d:82:4b:51:3a:58: + bb:44:4c:3d:d3:e5:06:38:e8:61:5c:98:78:bb:80: + b3:9c:da:72:82:62:a0:df:9c:5f:eb:f9:4f:77:c2: + cc:60:18:00:6b:34:82:25:b3 + Exponent: 65537 (0x10001) + Signature Algorithm: md5WithRSAEncryption + a3:64:91:6f:10:ed:e7:6e:a2:42:40:94:78:ce:f8:14:08:d1: + fa:43:85:eb:46:cd:92:14:d0:ef:2e:2d:36:39:18:d9:ba:c9: + 27:88:29:e9:48:17:6f:f8:c1:aa:c8:61:6d:2d:fd:40:2d:75: + 43:30:97:39:f8:14:64:bd:6f:ef:63:a8:2b:42:df:b2:5a:0d: + 25:ec:7b:37:d8:ce:91:29:82:16:f9:e8:62:a2:e1:76:c4:02: + 7d:dd:25:8b:98:e1:f6:0d:60:8c:f6:59:90:40:51:44:d1:c2: + fb:19:24:1e:17:39:6b:74:21:15:33:d6:55:d7:82:1e:70:2c: + 27:a8 + +GTE CyberTrust Root 3 +===================== +MD5 Fingerprint: DB:81:96:57:AE:64:61:EF:77:A7:83:C4:51:24:3C:87 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICUDCCAbkCAgGXMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAzMB4X +DTk4MDgxMDE5NTkwOFoXDTA4MDgxMDE5MzYzOVowcDELMAkGA1UEBhMCVVMxGDAW +BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg +U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDMw +gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHzsSsLztwU2TSXYlASVmOETFP6 +wIXP+sHdD955E39T+6oOYN3iYr/G7k6ZNKpoQzWZ+KP982O9AVRqnrI6lix7eCjG +WrWNGhUY/eOMLqJQCVtx1g21GB8ZjgQpk5N4q18U53NC8gMMV6IbUDsLu1ngoDoD +7icbWky5sAjKuRqJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAheutlCAG6bKiazvy +ZuvjS7gSJgXl9JGo3IfcmPSUwfRhvdWcbFFzlV7QvdfmRdw8z0aE1ee57ORnY24A +KHdxXUoF6bl8hszCRLveKUja6t29F58dUQGo6BResVf3/9qPzpX+Le0yEnf/fGph +la4xcgYI8PnzDY7i76hTXZEDg94= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 407 (0x197) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 + Validity + Not Before: Aug 10 19:59:08 1998 GMT + Not After : Aug 10 19:36:39 2008 GMT + Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:e1:f3:b1:2b:0b:ce:dc:14:d9:34:97:62:50:12: + 56:63:84:4c:53:fa:c0:85:cf:fa:c1:dd:0f:de:79: + 13:7f:53:fb:aa:0e:60:dd:e2:62:bf:c6:ee:4e:99: + 34:aa:68:43:35:99:f8:a3:fd:f3:63:bd:01:54:6a: + 9e:b2:3a:96:2c:7b:78:28:c6:5a:b5:8d:1a:15:18: + fd:e3:8c:2e:a2:50:09:5b:71:d6:0d:b5:18:1f:19: + 8e:04:29:93:93:78:ab:5f:14:e7:73:42:f2:03:0c: + 57:a2:1b:50:3b:0b:bb:59:e0:a0:3a:03:ee:27:1b: + 5a:4c:b9:b0:08:ca:b9:1a:89 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 85:eb:ad:94:20:06:e9:b2:a2:6b:3b:f2:66:eb:e3:4b:b8:12: + 26:05:e5:f4:91:a8:dc:87:dc:98:f4:94:c1:f4:61:bd:d5:9c: + 6c:51:73:95:5e:d0:bd:d7:e6:45:dc:3c:cf:46:84:d5:e7:b9: + ec:e4:67:63:6e:00:28:77:71:5d:4a:05:e9:b9:7c:86:cc:c2: + 44:bb:de:29:48:da:ea:dd:bd:17:9f:1d:51:01:a8:e8:14:5e: + b1:57:f7:ff:da:8f:ce:95:fe:2d:ed:32:12:77:ff:7c:6a:61: + 95:ae:31:72:06:08:f0:f9:f3:0d:8e:e2:ef:a8:53:5d:91:03: + 83:de + +GTE CyberTrust Root 4 +===================== +MD5 Fingerprint: 33:43:02:B1:B9:E0:73:B1:B1:20:CA:CB:C7:84:03:50 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDVTCCAj0CAgGoMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCA0MB4X +DTk4MDgxMzEzNTEwMFoXDTEzMDgxMzIzNTkwMFowcDELMAkGA1UEBhMCVVMxGDAW +BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg +U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDQw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6nSJuf9pmPDlCsaMqb9P3 +vK6sMVrXEZBHuZ0ZLvnzGyKgw+GnusT8XgqUS5haSybkH/Tc8/6OiNxsLXx3hyZQ +wF5OqCih6hdpT03GAQ7amg0GViYVtqRdejWvje14Uob5OKuzAdPaBZaxtlCrwKGu +F1P6QzkgcWUj223Etu2YRYPX0vbiqWv7+XXM78WrcZY16N+OkZuoEHUft84Tjmuz +lneXGpEvxyxpmfAPKmgAmHZEG4wo0uuO9IO0f6QlXmw72cZo1WG41F4xB7VbkDVS +V3sXIO0tuB6OiDk+Usvf8FyxZbulErSQY79xnTLB2r9QSpW+BjrEK+vNmHZETQvl +AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAEOvHIfJSbpliTRJPOoHO0eiedSgO5Bs +3n+oVMPoTEAyvMjsHOXZrEC6/Iw/wnOc9GTq36ntTlvIAWDuOW1DJ/N/qgjS/k5v +FDJNfeQ0gKU1xNZGULQ7oC1lH09lfjQoLcCndn0xyQ0zFvYgGSARULsDzHBtlrfv +TKfaNhXPu03UltyITWyY7blz/ihXoO1k+AqBKXP29pcyhzm0ge/ZTRoHNPe6QjXe +V9xc1vfF6wonDIGmwtBoTv2SW0iD9haKjzZb7TFsP0F6cfeSPzGkCkBM84biYcE8 +SYEtpbjvupcPvCsdm4ny0o4eTYbywqv2LZnAGyoNobZP+SxYTT19Nwo= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 424 (0x1a8) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 + Validity + Not Before: Aug 13 13:51:00 1998 GMT + Not After : Aug 13 23:59:00 2013 GMT + Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ba:9d:22:6e:7f:da:66:3c:39:42:b1:a3:2a:6f: + d3:f7:bc:ae:ac:31:5a:d7:11:90:47:b9:9d:19:2e: + f9:f3:1b:22:a0:c3:e1:a7:ba:c4:fc:5e:0a:94:4b: + 98:5a:4b:26:e4:1f:f4:dc:f3:fe:8e:88:dc:6c:2d: + 7c:77:87:26:50:c0:5e:4e:a8:28:a1:ea:17:69:4f: + 4d:c6:01:0e:da:9a:0d:06:56:26:15:b6:a4:5d:7a: + 35:af:8d:ed:78:52:86:f9:38:ab:b3:01:d3:da:05: + 96:b1:b6:50:ab:c0:a1:ae:17:53:fa:43:39:20:71: + 65:23:db:6d:c4:b6:ed:98:45:83:d7:d2:f6:e2:a9: + 6b:fb:f9:75:cc:ef:c5:ab:71:96:35:e8:df:8e:91: + 9b:a8:10:75:1f:b7:ce:13:8e:6b:b3:96:77:97:1a: + 91:2f:c7:2c:69:99:f0:0f:2a:68:00:98:76:44:1b: + 8c:28:d2:eb:8e:f4:83:b4:7f:a4:25:5e:6c:3b:d9: + c6:68:d5:61:b8:d4:5e:31:07:b5:5b:90:35:52:57: + 7b:17:20:ed:2d:b8:1e:8e:88:39:3e:52:cb:df:f0: + 5c:b1:65:bb:a5:12:b4:90:63:bf:71:9d:32:c1:da: + bf:50:4a:95:be:06:3a:c4:2b:eb:cd:98:76:44:4d: + 0b:e5 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 43:af:1c:87:c9:49:ba:65:89:34:49:3c:ea:07:3b:47:a2:79: + d4:a0:3b:90:6c:de:7f:a8:54:c3:e8:4c:40:32:bc:c8:ec:1c: + e5:d9:ac:40:ba:fc:8c:3f:c2:73:9c:f4:64:ea:df:a9:ed:4e: + 5b:c8:01:60:ee:39:6d:43:27:f3:7f:aa:08:d2:fe:4e:6f:14: + 32:4d:7d:e4:34:80:a5:35:c4:d6:46:50:b4:3b:a0:2d:65:1f: + 4f:65:7e:34:28:2d:c0:a7:76:7d:31:c9:0d:33:16:f6:20:19: + 20:11:50:bb:03:cc:70:6d:96:b7:ef:4c:a7:da:36:15:cf:bb: + 4d:d4:96:dc:88:4d:6c:98:ed:b9:73:fe:28:57:a0:ed:64:f8: + 0a:81:29:73:f6:f6:97:32:87:39:b4:81:ef:d9:4d:1a:07:34: + f7:ba:42:35:de:57:dc:5c:d6:f7:c5:eb:0a:27:0c:81:a6:c2: + d0:68:4e:fd:92:5b:48:83:f6:16:8a:8f:36:5b:ed:31:6c:3f: + 41:7a:71:f7:92:3f:31:a4:0a:40:4c:f3:86:e2:61:c1:3c:49: + 81:2d:a5:b8:ef:ba:97:0f:bc:2b:1d:9b:89:f2:d2:8e:1e:4d: + 86:f2:c2:ab:f6:2d:99:c0:1b:2a:0d:a1:b6:4f:f9:2c:58:4d: + 3d:7d:37:0a + +GTE CyberTrust Root 5 +===================== +MD5 Fingerprint: 7D:6C:86:E4:FC:4D:D1:0B:00:BA:22:BB:4E:7C:6A:8E +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx +GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 +c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 +IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv +b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe +uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf +lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 +mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ +D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 +0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 +ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC +AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE +ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH +9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv +FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT +T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk +6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D +ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 438 (0x1b6) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 + Validity + Not Before: Aug 14 14:50:00 1998 GMT + Not After : Aug 14 23:59:00 2013 GMT + Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:bc:12:6e:3f:8a:7c:7a:97:01:ec:1e:bb:39:5a: + 02:f4:78:44:a2:48:1b:8e:7b:49:52:7a:b8:7b:47: + b3:af:94:9b:6f:bb:96:fa:2b:6a:65:5c:b8:1c:94: + 73:be:bf:89:0a:22:80:ee:57:fc:8c:05:bb:70:9f: + 97:39:04:da:a3:87:5c:a8:e5:ca:af:c0:33:9a:d5: + 37:5c:4b:ac:e4:80:d0:a6:23:60:fb:fd:72:2e:94: + 9d:c7:ce:c2:04:32:ef:78:60:5d:ed:ad:87:0f:45: + 65:1e:3c:9a:0a:9a:be:5d:1d:99:ec:e7:f2:d1:c6: + 7a:17:d9:ad:9b:54:96:7f:c4:7c:60:bf:85:aa:15: + 35:1d:40:da:11:bc:ec:54:21:28:2d:23:a1:a8:f0: + cf:2d:cd:dd:fc:7e:0f:5e:e1:65:07:56:cb:07:b4: + d2:56:e8:5e:31:cc:18:63:c4:86:d2:2d:85:cf:93: + 92:ab:6d:fe:68:39:fb:de:73:bd:86:f8:e4:46:7a: + ea:9f:0c:cb:f4:19:fe:63:bc:d1:2c:7b:88:33:36: + f6:e4:e1:9c:0c:53:81:60:1c:da:2e:ab:96:a9:16: + 88:13:50:99:b2:bd:55:df:15:30:7e:e8:e5:98:fb: + 70:7e:6c:b5:07:fc:fc:46:b7:d0:ed:37:96:7e:32: + fe:21 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE, pathlen:5 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Certificate Policies: + Policy: 1.2.840.113763.1.2.1.3 + + X509v3 Subject Key Identifier: + 76:0A:49:21:38:4C:9F:DE:F8:C4:49:C7:71:71:91:9D + Signature Algorithm: sha1WithRSAEncryption + 41:3a:d4:18:5b:da:b8:de:21:1c:e1:8e:09:e5:f1:68:34:ff: + de:96:f4:07:f5:a7:3c:f3:ac:4a:b1:9b:fa:92:fa:9b:ed:e6: + 32:21:aa:4a:76:c5:dc:4f:38:e5:df:d5:86:e4:d5:c8:76:7d: + 98:d7:b1:cd:8f:4d:b5:91:23:6c:8b:8a:eb:ea:7c:ef:14:94: + c4:c6:f0:1f:4a:2d:32:71:63:2b:63:91:26:02:09:b6:80:1d: + ed:e2:cc:b8:7f:db:87:63:c8:e1:d0:6c:26:b1:35:1d:40:66: + 10:1b:cd:95:54:18:33:61:ec:13:4f:da:13:f7:99:af:3e:d0: + cf:8e:a6:72:a2:b3:c3:05:9a:c9:27:7d:92:cc:7e:52:8d:b3: + ab:70:6d:9e:89:9f:4d:eb:1a:75:c2:98:aa:d5:02:16:d7:0c: + 8a:bf:25:e4:eb:2d:bc:98:e9:58:38:19:7c:b9:37:fe:db:e2: + 99:08:73:06:c7:97:83:6a:7d:10:01:2f:32:b9:17:05:4a:65: + e6:2f:ce:be:5e:53:a6:82:e9:9a:53:0a:84:74:2d:83:ca:c8: + 94:16:76:5f:94:61:28:f0:85:a7:39:bb:d7:8b:d9:a8:b2:13: + 1d:54:09:34:24:7d:20:81:7d:66:7e:a2:90:74:5c:10:c6:bd: + ec:ab:1b:c2 + +GTE CyberTrust Root CA +====================== +MD5 Fingerprint: C4:D7:F0:B2:A3:C5:7D:61:67:F0:04:CD:43:D3:BA:58 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv +b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU +cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv +RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M +ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5 +1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz +dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl +IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy +bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 419 (0x1a3) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root + Validity + Not Before: Feb 23 23:01:00 1996 GMT + Not After : Feb 23 23:59:00 2006 GMT + Subject: C=US, O=GTE Corporation, CN=GTE CyberTrust Root + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b8:e6:4f:ba:db:98:7c:71:7c:af:44:b7:d3:0f: + 46:d9:64:e5:93:c1:42:8e:c7:ba:49:8d:35:2d:7a: + e7:8b:bd:e5:05:31:59:c6:b1:2f:0a:0c:fb:9f:a7: + 3f:a2:09:66:84:56:1e:37:29:1b:87:e9:7e:0c:ca: + 9a:9f:a5:7f:f5:15:94:a3:d5:a2:46:82:d8:68:4c: + d1:37:15:06:68:af:bd:f8:b0:b3:f0:29:f5:95:5a: + 09:16:61:77:0a:22:25:d4:4f:45:aa:c7:bd:e5:96: + df:f9:d4:a8:8e:42:cc:24:c0:1e:91:27:4a:b5:6d: + 06:80:63:39:c4:a2:5e:38:03 + Exponent: 65537 (0x10001) + Signature Algorithm: md5WithRSAEncryption + 12:b3:75:c6:5f:1d:e1:61:55:80:00:d4:81:4b:7b:31:0f:23: + 63:e7:3d:f3:03:f9:f4:36:a8:bb:d9:e3:a5:97:4d:ea:2b:29: + e0:d6:6a:73:81:e6:c0:89:a3:d3:f1:e0:a5:a5:22:37:9a:63: + c2:48:20:b4:db:72:e3:c8:f6:d9:7c:be:b1:af:53:da:14:b4: + 21:b8:d6:d5:96:e3:fe:4e:0c:59:62:b6:9a:4a:f9:42:dd:8c: + 6f:81:a9:71:ff:f4:0a:72:6d:6d:44:0e:9d:f3:74:74:a8:d5: + 34:49:e9:5e:9e:e9:b4:7a:e1:e5:5a:1f:84:30:9c:d3:9f:a5: + 25:d8 + +GlobalSign Partners CA +====================== +MD5 Fingerprint: 3C:75:CD:4C:BD:A9:D0:8A:79:4F:50:16:37:84:F4:2B +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDnjCCAoagAwIBAgILAgAAAAAA1ni50a8wDQYJKoZIhvcNAQEEBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw +MDBaFw0wOTAxMjgxMjAwMDBaMF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xv +YmFsU2lnbiBQYXJ0bmVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBANIs+DKsShJ6N8gpkaWujG4eDsA0M4jlM3EWHHiEaMMYNFAuFj6xlIJPsZqf +APjGETXGaXuYAq0ABohs50wzKACIJ0Yfh7NxdWO8MruI3mYYDlAGk7T2vBQ3MD0i +3z3/dX7ZChrFn7P80KyzCHqJ0wHoAFznSgs9TXsmordiBovaRt2TFz8/WwJLC7aI +IBGSAK27xy7U40Wu9YlafI2krYVkMsAnjMbyioCShiRWWY10aKKDQrOePVBBhm8g +bvb9ztMZ4zLMj+2aXm0fKPVSrG4YXvg90ZLlumwBiEsK8i3eZTMFQqBMqjF2vv2/ +gXj5cRxGXi0VlS0wWY5MQdFiqz0CAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgAGMB0G +A1UdDgQWBBRDJI1wFQhiVZxPDEAXXYZeD6JM+zAfBgNVHSMEGDAWgBRge2YaRQ2X +yolQL30EzTSo//z9SzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IB +AQBm7bSIaRGZgiGDrKFti5uErQ8tyB6Mynt+rarUjt4H1p5Fx6W4nAc5YCVVGsBP +GeXPFylJiRg1ZuXrKEBOV8mvs+S4IAWjO5VQkUmUKX0s5YhBpUWIXp2CJ/fS71u1 +T5++/jVlLFVkn+FR2iJhd7pYTo/GeVlZbjCAok+QbiELrdBoOZAQm+0iZW8eETjm +f4zS8zltR9Uh6Op1OkHRrfYWnV0LIb3zH2MGJR3BHzVxLOsgGdXBsOw95W/tAgc/ +E3tmktZEwZj3X1CLelvCb22w0fjldKBAN6MlD+Q9ymQxk5BcMHu5OTGaXkzNuUFP +UOQ9OK7IZtnHO11RR6ybq/Kt +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: + 02:00:00:00:00:00:d6:78:b9:d1:af + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA + Validity + Not Before: Jan 28 12:00:00 1999 GMT + Not After : Jan 28 12:00:00 2009 GMT + Subject: C=BE, O=GlobalSign nv-sa, OU=Partners CA, CN=GlobalSign Partners CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:d2:2c:f8:32:ac:4a:12:7a:37:c8:29:91:a5:ae: + 8c:6e:1e:0e:c0:34:33:88:e5:33:71:16:1c:78:84: + 68:c3:18:34:50:2e:16:3e:b1:94:82:4f:b1:9a:9f: + 00:f8:c6:11:35:c6:69:7b:98:02:ad:00:06:88:6c: + e7:4c:33:28:00:88:27:46:1f:87:b3:71:75:63:bc: + 32:bb:88:de:66:18:0e:50:06:93:b4:f6:bc:14:37: + 30:3d:22:df:3d:ff:75:7e:d9:0a:1a:c5:9f:b3:fc: + d0:ac:b3:08:7a:89:d3:01:e8:00:5c:e7:4a:0b:3d: + 4d:7b:26:a2:b7:62:06:8b:da:46:dd:93:17:3f:3f: + 5b:02:4b:0b:b6:88:20:11:92:00:ad:bb:c7:2e:d4: + e3:45:ae:f5:89:5a:7c:8d:a4:ad:85:64:32:c0:27: + 8c:c6:f2:8a:80:92:86:24:56:59:8d:74:68:a2:83: + 42:b3:9e:3d:50:41:86:6f:20:6e:f6:fd:ce:d3:19: + e3:32:cc:8f:ed:9a:5e:6d:1f:28:f5:52:ac:6e:18: + 5e:f8:3d:d1:92:e5:ba:6c:01:88:4b:0a:f2:2d:de: + 65:33:05:42:a0:4c:aa:31:76:be:fd:bf:81:78:f9: + 71:1c:46:5e:2d:15:95:2d:30:59:8e:4c:41:d1:62: + ab:3d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 43:24:8D:70:15:08:62:55:9C:4F:0C:40:17:5D:86:5E:0F:A2:4C:FB + X509v3 Authority Key Identifier: + keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B + + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 66:ed:b4:88:69:11:99:82:21:83:ac:a1:6d:8b:9b:84:ad:0f: + 2d:c8:1e:8c:ca:7b:7e:ad:aa:d4:8e:de:07:d6:9e:45:c7:a5: + b8:9c:07:39:60:25:55:1a:c0:4f:19:e5:cf:17:29:49:89:18: + 35:66:e5:eb:28:40:4e:57:c9:af:b3:e4:b8:20:05:a3:3b:95: + 50:91:49:94:29:7d:2c:e5:88:41:a5:45:88:5e:9d:82:27:f7: + d2:ef:5b:b5:4f:9f:be:fe:35:65:2c:55:64:9f:e1:51:da:22: + 61:77:ba:58:4e:8f:c6:79:59:59:6e:30:80:a2:4f:90:6e:21: + 0b:ad:d0:68:39:90:10:9b:ed:22:65:6f:1e:11:38:e6:7f:8c: + d2:f3:39:6d:47:d5:21:e8:ea:75:3a:41:d1:ad:f6:16:9d:5d: + 0b:21:bd:f3:1f:63:06:25:1d:c1:1f:35:71:2c:eb:20:19:d5: + c1:b0:ec:3d:e5:6f:ed:02:07:3f:13:7b:66:92:d6:44:c1:98: + f7:5f:50:8b:7a:5b:c2:6f:6d:b0:d1:f8:e5:74:a0:40:37:a3: + 25:0f:e4:3d:ca:64:31:93:90:5c:30:7b:b9:39:31:9a:5e:4c: + cd:b9:41:4f:50:e4:3d:38:ae:c8:66:d9:c7:3b:5d:51:47:ac: + 9b:ab:f2:ad + +GlobalSign Primary Class 1 CA +============================= +MD5 Fingerprint: 5C:AC:59:01:A4:86:53:CB:10:66:B5:D6:D6:71:FF:01 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4N88wDQYJKoZIhvcNAQEEBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MTUxMjAw +MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNV +BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAvSA1R9Eo1gijEjkjRw29cCFSDlcxlaY0V2vsfkN5 +wwZSSM28taGZvdgfMrzP125ybS53IpCCTkuPmgwBQprZcFm2nR/mY9EMrR1O+IWB ++a7vn6ZSYUR5GnVF4GFWRW1CjD1yy6akErea9dZg0GBQs46mpuy09BLNf6jO77Ph +hTD+csTm53eznlhB1lGDiAfGtmlPNt7RC0g/vdafIXRkbycGPkv9Dqabv6RIV4yQ +7okYCwKBGL5n/lNgiCe6o3M0S1pWtN5zBe2Yll3sSudA/EsJYuvQ4zFPhdF6q1ln +K/uID+uqg701/WEn7GYOQlf3acIM7/xqwm5J2o9BOK5IqQIDAQABo2MwYTAOBgNV +HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFPzgZvZaNZnrQB7SuB5DvJiOH4rDMB8GA1Ud +IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEEBQADggEBAJujCETO8pCdcfMyswVqterPKZjeVT6gFn0GekTWr9L6 +E1iM+BzHqx20G+9paJhcCDmP4Pf7SMwh57gz2wWqNCRsSuXpe2Deg7MfCr5BdfzM +MEi3wSYdBDOqtnjtKsu6VpcybvcxlS5G8hTuJ8f3Yom5XFrTOIpk9Te08bM0ctXV +IT1L13iT1zFmNR6j2EdJbxyt4YB/+JgkbHOsDsIadwKjJge3x2tdvILVKkgdY89Q +Mqb7HBhHFQpbDFw4JJoEmKgISF98NIdjqy2NTAB3lBt2uvUWGKMVry+U9ikAdsEV +F9PpN0121MtLKVkkrNpKoOpj3l9Usfrz0UXLxWS0cyE= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: + 02:00:00:00:00:00:d6:78:b8:37:cf + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA + Validity + Not Before: Sep 15 12:00:00 1998 GMT + Not After : Jan 28 12:00:00 2009 GMT + Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 1 CA, CN=GlobalSign Primary Class 1 CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:bd:20:35:47:d1:28:d6:08:a3:12:39:23:47:0d: + bd:70:21:52:0e:57:31:95:a6:34:57:6b:ec:7e:43: + 79:c3:06:52:48:cd:bc:b5:a1:99:bd:d8:1f:32:bc: + cf:d7:6e:72:6d:2e:77:22:90:82:4e:4b:8f:9a:0c: + 01:42:9a:d9:70:59:b6:9d:1f:e6:63:d1:0c:ad:1d: + 4e:f8:85:81:f9:ae:ef:9f:a6:52:61:44:79:1a:75: + 45:e0:61:56:45:6d:42:8c:3d:72:cb:a6:a4:12:b7: + 9a:f5:d6:60:d0:60:50:b3:8e:a6:a6:ec:b4:f4:12: + cd:7f:a8:ce:ef:b3:e1:85:30:fe:72:c4:e6:e7:77: + b3:9e:58:41:d6:51:83:88:07:c6:b6:69:4f:36:de: + d1:0b:48:3f:bd:d6:9f:21:74:64:6f:27:06:3e:4b: + fd:0e:a6:9b:bf:a4:48:57:8c:90:ee:89:18:0b:02: + 81:18:be:67:fe:53:60:88:27:ba:a3:73:34:4b:5a: + 56:b4:de:73:05:ed:98:96:5d:ec:4a:e7:40:fc:4b: + 09:62:eb:d0:e3:31:4f:85:d1:7a:ab:59:67:2b:fb: + 88:0f:eb:aa:83:bd:35:fd:61:27:ec:66:0e:42:57: + f7:69:c2:0c:ef:fc:6a:c2:6e:49:da:8f:41:38:ae: + 48:a9 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + FC:E0:66:F6:5A:35:99:EB:40:1E:D2:B8:1E:43:BC:98:8E:1F:8A:C3 + X509v3 Authority Key Identifier: + keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B + + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 9b:a3:08:44:ce:f2:90:9d:71:f3:32:b3:05:6a:b5:ea:cf:29: + 98:de:55:3e:a0:16:7d:06:7a:44:d6:af:d2:fa:13:58:8c:f8: + 1c:c7:ab:1d:b4:1b:ef:69:68:98:5c:08:39:8f:e0:f7:fb:48: + cc:21:e7:b8:33:db:05:aa:34:24:6c:4a:e5:e9:7b:60:de:83: + b3:1f:0a:be:41:75:fc:cc:30:48:b7:c1:26:1d:04:33:aa:b6: + 78:ed:2a:cb:ba:56:97:32:6e:f7:31:95:2e:46:f2:14:ee:27: + c7:f7:62:89:b9:5c:5a:d3:38:8a:64:f5:37:b4:f1:b3:34:72: + d5:d5:21:3d:4b:d7:78:93:d7:31:66:35:1e:a3:d8:47:49:6f: + 1c:ad:e1:80:7f:f8:98:24:6c:73:ac:0e:c2:1a:77:02:a3:26: + 07:b7:c7:6b:5d:bc:82:d5:2a:48:1d:63:cf:50:32:a6:fb:1c: + 18:47:15:0a:5b:0c:5c:38:24:9a:04:98:a8:08:48:5f:7c:34: + 87:63:ab:2d:8d:4c:00:77:94:1b:76:ba:f5:16:18:a3:15:af: + 2f:94:f6:29:00:76:c1:15:17:d3:e9:37:4d:76:d4:cb:4b:29: + 59:24:ac:da:4a:a0:ea:63:de:5f:54:b1:fa:f3:d1:45:cb:c5: + 64:b4:73:21 + +GlobalSign Primary Class 2 CA +============================= +MD5 Fingerprint: A9:A9:42:59:7E:BE:5A:94:E4:2C:C6:8B:1C:2A:44:B6 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4jY0wDQYJKoZIhvcNAQEEBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw +MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNV +BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAkoz+7/RFjhdBbvzYvyFvqwadUsEsAJ0/joW4f0qP +vaBjKspJJ65agvR04lWS/8LRqnmitvrVnYIET8ayxl5jpzq62O7rim+ftrsoQcAi ++05IGgaS17/Xz7nZvThPOw1EblVB/vwJ29i/844h8egStfYTpdPGTJMisAL/7h0M +xKhrT3VoVujcKBJQ96gknS4kOfsJBd7lo2RJIdBofnEwkbFg4Dn0UPh6TZgAa3x5 +uk7OSuK6Nh23xTYVlZxkQupfxLr1QAW+4TpZvYSnGbjeTVNQzgfR0lHT7w2BbObn +bctdfD98zOxPgycl/3BQ9oNZdYQGZlgs3omNAKZJ+aVDdwIDAQABo2MwYTAOBgNV +HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFHznsrEs3rGna+l2DOGj/U5sx7n2MB8GA1Ud +IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEEBQADggEBAGPdWc6KeaqYnU7FiWQ3foqTZy8Q6m8nw413bfJcVpQZ +GmlgMEZdj/JtRTyONZd8L7hR4uiJvYjPJxwINFyIwWgk25GF5M/7+0ON6CUBG8QO +9wBCSIYfJAhYWoyN8mtHLGiRsWlC/Q2NySbmkoamZG6Sxc4+PH1x4yOkq8fVqKnf +gqc76IbVw08Y40TQ4NzzxWgu/qUvBYTIfkdCU2uHSv4y/14+cIy3qBXMF8L/RuzQ +7C20bhIoqflA6evUZpdTqWlVwKmqsi7N0Wn0vvi7fGnuVKbbnvtapj7+mu+UUUt1 +7tjU4ZrxAlYTiQ6nQouWi4UMG4W+Jq6rppm8IvFz30I= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: + 02:00:00:00:00:00:d6:78:b8:8d:8d + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA + Validity + Not Before: Jan 28 12:00:00 1999 GMT + Not After : Jan 28 12:00:00 2009 GMT + Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 2 CA, CN=GlobalSign Primary Class 2 CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:92:8c:fe:ef:f4:45:8e:17:41:6e:fc:d8:bf:21: + 6f:ab:06:9d:52:c1:2c:00:9d:3f:8e:85:b8:7f:4a: + 8f:bd:a0:63:2a:ca:49:27:ae:5a:82:f4:74:e2:55: + 92:ff:c2:d1:aa:79:a2:b6:fa:d5:9d:82:04:4f:c6: + b2:c6:5e:63:a7:3a:ba:d8:ee:eb:8a:6f:9f:b6:bb: + 28:41:c0:22:fb:4e:48:1a:06:92:d7:bf:d7:cf:b9: + d9:bd:38:4f:3b:0d:44:6e:55:41:fe:fc:09:db:d8: + bf:f3:8e:21:f1:e8:12:b5:f6:13:a5:d3:c6:4c:93: + 22:b0:02:ff:ee:1d:0c:c4:a8:6b:4f:75:68:56:e8: + dc:28:12:50:f7:a8:24:9d:2e:24:39:fb:09:05:de: + e5:a3:64:49:21:d0:68:7e:71:30:91:b1:60:e0:39: + f4:50:f8:7a:4d:98:00:6b:7c:79:ba:4e:ce:4a:e2: + ba:36:1d:b7:c5:36:15:95:9c:64:42:ea:5f:c4:ba: + f5:40:05:be:e1:3a:59:bd:84:a7:19:b8:de:4d:53: + 50:ce:07:d1:d2:51:d3:ef:0d:81:6c:e6:e7:6d:cb: + 5d:7c:3f:7c:cc:ec:4f:83:27:25:ff:70:50:f6:83: + 59:75:84:06:66:58:2c:de:89:8d:00:a6:49:f9:a5: + 43:77 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 7C:E7:B2:B1:2C:DE:B1:A7:6B:E9:76:0C:E1:A3:FD:4E:6C:C7:B9:F6 + X509v3 Authority Key Identifier: + keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B + + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 63:dd:59:ce:8a:79:aa:98:9d:4e:c5:89:64:37:7e:8a:93:67: + 2f:10:ea:6f:27:c3:8d:77:6d:f2:5c:56:94:19:1a:69:60:30: + 46:5d:8f:f2:6d:45:3c:8e:35:97:7c:2f:b8:51:e2:e8:89:bd: + 88:cf:27:1c:08:34:5c:88:c1:68:24:db:91:85:e4:cf:fb:fb: + 43:8d:e8:25:01:1b:c4:0e:f7:00:42:48:86:1f:24:08:58:5a: + 8c:8d:f2:6b:47:2c:68:91:b1:69:42:fd:0d:8d:c9:26:e6:92: + 86:a6:64:6e:92:c5:ce:3e:3c:7d:71:e3:23:a4:ab:c7:d5:a8: + a9:df:82:a7:3b:e8:86:d5:c3:4f:18:e3:44:d0:e0:dc:f3:c5: + 68:2e:fe:a5:2f:05:84:c8:7e:47:42:53:6b:87:4a:fe:32:ff: + 5e:3e:70:8c:b7:a8:15:cc:17:c2:ff:46:ec:d0:ec:2d:b4:6e: + 12:28:a9:f9:40:e9:eb:d4:66:97:53:a9:69:55:c0:a9:aa:b2: + 2e:cd:d1:69:f4:be:f8:bb:7c:69:ee:54:a6:db:9e:fb:5a:a6: + 3e:fe:9a:ef:94:51:4b:75:ee:d8:d4:e1:9a:f1:02:56:13:89: + 0e:a7:42:8b:96:8b:85:0c:1b:85:be:26:ae:ab:a6:99:bc:22: + f1:73:df:42 + +GlobalSign Primary Class 3 CA +============================= +MD5 Fingerprint: 98:12:A3:4B:95:A9:96:64:94:E7:50:8C:3E:E1:83:5A +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDrDCCApSgAwIBAgILAgAAAAAA1ni41sMwDQYJKoZIhvcNAQEEBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw +MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNV +BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAkV5WZdbAwAScv0fEXHt6MQH5WJaZ4xyEL9xWj631 +WYHVQ2ZdWpOMdcqp5xHBURAUYMks1HuvxneGq3onrm+VuQvKtkb7fhr0DRRt0slO +sq7wVPZcQEw2SHToVIxlZhCnvSu3II0FSa14fdIkI1Dj8LR5mwE5/6870y3u4UmN +jS88akFFL5vjPeES5JF1ns+gPjySgW+KLhjc4PKMjP2H2Qf0QJTJTk9D32dWb70D +UHyZZ6S5PJFsAm6E1vxG98xvGD4X8O8LZBZX5qyG8UiqQ8HJJ3hzREXihX26/7Ph ++xsFpEs7mRIlAVAUaq9d6sgM7uTa7EuLXGgTldzDtTA61wIDAQABo2MwYTAOBgNV +HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFMw2zBe0RZEv7c87MEh3+7UUmb7jMB8GA1Ud +IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEEBQADggEBAFeyVMy9lRdkYIm2U5EMRZLDPahsw8yyGPV4QXTYfaMn +r3cNWT6UHWn6idMMvRoB9D/o4Hcagiha5mLXt+M2yQ6feuPC08xZiQzvFovwNnci +yqS2t8FCZwFAY8znOGSHWxSWZnstFO69SW3/d9DiTlvTgMJND8q4nYGXpzRux+Oc +SOW0qkX19mVMSPISwtKTjMIVJPMrUv/jCK64btYsEs85yxIq56l7X5g9o+HMpmOJ +XH0xdfnV1l3y0NQ9355xqA7c5CCXeOZ/U6QNUU+OOwOuow1aTcN55zVYcELJXqFe +tNkio0RTNaTQz3OAxc+fVph2+RRMd4eCydx+XTTVNnU= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: + 02:00:00:00:00:00:d6:78:b8:d6:c3 + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA + Validity + Not Before: Jan 28 12:00:00 1999 GMT + Not After : Jan 28 12:00:00 2009 GMT + Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 3 CA, CN=GlobalSign Primary Class 3 CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:91:5e:56:65:d6:c0:c0:04:9c:bf:47:c4:5c:7b: + 7a:31:01:f9:58:96:99:e3:1c:84:2f:dc:56:8f:ad: + f5:59:81:d5:43:66:5d:5a:93:8c:75:ca:a9:e7:11: + c1:51:10:14:60:c9:2c:d4:7b:af:c6:77:86:ab:7a: + 27:ae:6f:95:b9:0b:ca:b6:46:fb:7e:1a:f4:0d:14: + 6d:d2:c9:4e:b2:ae:f0:54:f6:5c:40:4c:36:48:74: + e8:54:8c:65:66:10:a7:bd:2b:b7:20:8d:05:49:ad: + 78:7d:d2:24:23:50:e3:f0:b4:79:9b:01:39:ff:af: + 3b:d3:2d:ee:e1:49:8d:8d:2f:3c:6a:41:45:2f:9b: + e3:3d:e1:12:e4:91:75:9e:cf:a0:3e:3c:92:81:6f: + 8a:2e:18:dc:e0:f2:8c:8c:fd:87:d9:07:f4:40:94: + c9:4e:4f:43:df:67:56:6f:bd:03:50:7c:99:67:a4: + b9:3c:91:6c:02:6e:84:d6:fc:46:f7:cc:6f:18:3e: + 17:f0:ef:0b:64:16:57:e6:ac:86:f1:48:aa:43:c1: + c9:27:78:73:44:45:e2:85:7d:ba:ff:b3:e1:fb:1b: + 05:a4:4b:3b:99:12:25:01:50:14:6a:af:5d:ea:c8: + 0c:ee:e4:da:ec:4b:8b:5c:68:13:95:dc:c3:b5:30: + 3a:d7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + CC:36:CC:17:B4:45:91:2F:ED:CF:3B:30:48:77:FB:B5:14:99:BE:E3 + X509v3 Authority Key Identifier: + keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B + + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 57:b2:54:cc:bd:95:17:64:60:89:b6:53:91:0c:45:92:c3:3d: + a8:6c:c3:cc:b2:18:f5:78:41:74:d8:7d:a3:27:af:77:0d:59: + 3e:94:1d:69:fa:89:d3:0c:bd:1a:01:f4:3f:e8:e0:77:1a:82: + 28:5a:e6:62:d7:b7:e3:36:c9:0e:9f:7a:e3:c2:d3:cc:59:89: + 0c:ef:16:8b:f0:36:77:22:ca:a4:b6:b7:c1:42:67:01:40:63: + cc:e7:38:64:87:5b:14:96:66:7b:2d:14:ee:bd:49:6d:ff:77: + d0:e2:4e:5b:d3:80:c2:4d:0f:ca:b8:9d:81:97:a7:34:6e:c7: + e3:9c:48:e5:b4:aa:45:f5:f6:65:4c:48:f2:12:c2:d2:93:8c: + c2:15:24:f3:2b:52:ff:e3:08:ae:b8:6e:d6:2c:12:cf:39:cb: + 12:2a:e7:a9:7b:5f:98:3d:a3:e1:cc:a6:63:89:5c:7d:31:75: + f9:d5:d6:5d:f2:d0:d4:3d:df:9e:71:a8:0e:dc:e4:20:97:78: + e6:7f:53:a4:0d:51:4f:8e:3b:03:ae:a3:0d:5a:4d:c3:79:e7: + 35:58:70:42:c9:5e:a1:5e:b4:d9:22:a3:44:53:35:a4:d0:cf: + 73:80:c5:cf:9f:56:98:76:f9:14:4c:77:87:82:c9:dc:7e:5d: + 34:d5:36:75 + +GlobalSign Root CA +================== +MD5 Fingerprint: AB:BF:EA:E3:6B:29:A6:CC:A6:78:35:99:EF:AD:2B:80 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU +YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 +5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q +gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR +rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 +ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o +Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: + 02:00:00:00:00:00:d6:78:b7:94:05 + Signature Algorithm: md5WithRSAEncryption + Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA + Validity + Not Before: Sep 1 12:00:00 1998 GMT + Not After : Jan 28 12:00:00 2014 GMT + Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b: + 83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0: + 63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89: + 8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c: + 70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50: + 15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0: + 6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2: + 89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7: + 54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c: + 92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2: + 75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9: + c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b: + bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91: + ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51: + 63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa: + 48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a: + 07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93: + 90:cf + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + X509v3 Subject Key Identifier: + 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + ae:aa:9f:fc:b7:d2:cb:1f:5f:39:29:28:18:9e:34:c9:6c:4f: + 6f:1a:f0:64:a2:70:4a:4f:13:86:9b:60:28:9e:e8:81:49:98: + 7d:0a:bb:e5:b0:9d:3d:36:db:8f:05:51:ff:09:31:2a:1f:dd: + 89:77:9e:0f:2e:6c:95:04:ed:86:cb:b4:00:3f:84:02:4d:80: + 6a:2a:2d:78:0b:ae:6f:2b:a2:83:44:83:1f:cd:50:82:4c:24: + af:bd:f7:a5:b4:c8:5a:0f:f4:e7:47:5e:49:8e:37:96:fe:9a: + 88:05:3a:d9:c0:db:29:87:e6:19:96:47:a7:3a:a6:8c:8b:3c: + 77:fe:46:63:a7:53:da:21:d1:ac:7e:49:a2:4b:e6:c3:67:59: + 2f:b3:8a:0e:bb:2c:bd:a9:aa:42:7c:35:c1:d8:7f:d5:a7:31: + 3a:4e:63:43:39:af:08:b0:61:34:8c:d3:98:a9:43:34:f6:0f: + 87:29:3b:9d:c2:56:58:98:77:c3:f7:1b:ac:f6:9d:f8:3e:aa: + a7:54:45:f0:f5:f9:d5:31:65:fe:6b:58:9c:71:b3:1e:d7:52: + ea:32:17:fc:40:60:1d:c9:79:24:b2:f6:6c:fd:a8:66:0e:82: + dd:98:cb:da:c2:44:4f:2e:a0:7b:f2:f7:6b:2c:76:11:84:46: + 8a:78:a3:e3 + +National Retail Federation by DST +================================= +MD5 Fingerprint: AD:8E:0F:9E:01:6B:A0:C5:74:D5:0C:D3:68:65:4F:1E +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEAjCCAuoCEQDQHkCKAAACfAAAAAMAAAABMA0GCSqGSIb3DQEBBQUAMIG+MQsw +CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp +dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UE +CxMaTmF0aW9uYWwgUmV0YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJG +KSBSb290Q0ExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05 +ODEyMTExNjE0MTZaFw0wODEyMDgxNjE0MTZaMIG+MQswCQYDVQQGEwJ1czENMAsG +A1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp +Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UECxMaTmF0aW9uYWwgUmV0 +YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJGKSBSb290Q0ExITAfBgkq +hkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBANmsm3f6UNPM3LlArLlyagCHI/wPliHQJq/k4rVf+tOmfSEw +LswXgo+YdPxnpKbfiJeiQin1p9sRk/teIzDCqrwi50Eb5e0l3sg/295XRXhARoOy +1Ro93w9FbdVjAnXYL8Zuq5WRdDcNy00JXNHUWzra3Q7Ia5nY1TnM34VVxJJTAqPh +94DJcKPa3DPEf6JHCBw1lh+hAxwwg/TEzP+Yw7BGRKLAv63b0oH2TJgsp14k84bK +Y9W6ffCawErQG1ju7Klnz2kCbCLAYCws0cgg6sgt+92cu8tRTNznVwQ7VJsRpTJ0 +7HQB85AVWy98LJNluWZntIGINeWekRh/gahByMsCAwEAATANBgkqhkiG9w0BAQUF +AAOCAQEAhF4LO+ygjRyb0DwdcWnkGn9kvoFlYcWMatd8AHTgemJV7SR84GHj8t0U +5hFugw7h6qmegK2aIL/gV37V0LWEYy3ZGOS9GzUsXq5hdqpnhTs44TGBHzF/5tf4 +W9K7Y3mGxIzF3gqu19H8AXT/trYNYoFnHLsm+CSA4Fxe2KSKOo99y/+So/18qTJp +B1hYYUKZUgOxOD3GcW9s8uh9BqrBfFPLGi2IT8mpp6xpb/ekH9h0gfVKv7FVt9N3 +OKdvwkrI4nOJ01dy4UMvcjz2H7f4BEpuwemUF+SXF/QOE4ZvjavoXy20/2zWorQf +7LmUaqoSTxrd9Xe1JYzyigrx/FJbWA== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + d0:1e:40:8a:00:00:02:7c:00:00:00:03:00:00:00:01 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com + Validity + Not Before: Dec 11 16:14:16 1998 GMT + Not After : Dec 8 16:14:16 2008 GMT + Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:d9:ac:9b:77:fa:50:d3:cc:dc:b9:40:ac:b9:72: + 6a:00:87:23:fc:0f:96:21:d0:26:af:e4:e2:b5:5f: + fa:d3:a6:7d:21:30:2e:cc:17:82:8f:98:74:fc:67: + a4:a6:df:88:97:a2:42:29:f5:a7:db:11:93:fb:5e: + 23:30:c2:aa:bc:22:e7:41:1b:e5:ed:25:de:c8:3f: + db:de:57:45:78:40:46:83:b2:d5:1a:3d:df:0f:45: + 6d:d5:63:02:75:d8:2f:c6:6e:ab:95:91:74:37:0d: + cb:4d:09:5c:d1:d4:5b:3a:da:dd:0e:c8:6b:99:d8: + d5:39:cc:df:85:55:c4:92:53:02:a3:e1:f7:80:c9: + 70:a3:da:dc:33:c4:7f:a2:47:08:1c:35:96:1f:a1: + 03:1c:30:83:f4:c4:cc:ff:98:c3:b0:46:44:a2:c0: + bf:ad:db:d2:81:f6:4c:98:2c:a7:5e:24:f3:86:ca: + 63:d5:ba:7d:f0:9a:c0:4a:d0:1b:58:ee:ec:a9:67: + cf:69:02:6c:22:c0:60:2c:2c:d1:c8:20:ea:c8:2d: + fb:dd:9c:bb:cb:51:4c:dc:e7:57:04:3b:54:9b:11: + a5:32:74:ec:74:01:f3:90:15:5b:2f:7c:2c:93:65: + b9:66:67:b4:81:88:35:e5:9e:91:18:7f:81:a8:41: + c8:cb + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 84:5e:0b:3b:ec:a0:8d:1c:9b:d0:3c:1d:71:69:e4:1a:7f:64: + be:81:65:61:c5:8c:6a:d7:7c:00:74:e0:7a:62:55:ed:24:7c: + e0:61:e3:f2:dd:14:e6:11:6e:83:0e:e1:ea:a9:9e:80:ad:9a: + 20:bf:e0:57:7e:d5:d0:b5:84:63:2d:d9:18:e4:bd:1b:35:2c: + 5e:ae:61:76:aa:67:85:3b:38:e1:31:81:1f:31:7f:e6:d7:f8: + 5b:d2:bb:63:79:86:c4:8c:c5:de:0a:ae:d7:d1:fc:01:74:ff: + b6:b6:0d:62:81:67:1c:bb:26:f8:24:80:e0:5c:5e:d8:a4:8a: + 3a:8f:7d:cb:ff:92:a3:fd:7c:a9:32:69:07:58:58:61:42:99: + 52:03:b1:38:3d:c6:71:6f:6c:f2:e8:7d:06:aa:c1:7c:53:cb: + 1a:2d:88:4f:c9:a9:a7:ac:69:6f:f7:a4:1f:d8:74:81:f5:4a: + bf:b1:55:b7:d3:77:38:a7:6f:c2:4a:c8:e2:73:89:d3:57:72: + e1:43:2f:72:3c:f6:1f:b7:f8:04:4a:6e:c1:e9:94:17:e4:97: + 17:f4:0e:13:86:6f:8d:ab:e8:5f:2d:b4:ff:6c:d6:a2:b4:1f: + ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1: + fc:52:5b:58 + +TC TrustCenter, Germany, Class 0 CA +=================================== +MD5 Fingerprint: 35:85:49:8E:6E:57:FE:BD:97:F1:C9:46:23:3A:B6:7D +PEM Data: +-----BEGIN CERTIFICATE----- +MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx +EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD +IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx +IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B +CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX +DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn +MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig +U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz +dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 +cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V +8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC +NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz +9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG ++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr +LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl +ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw +czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI +AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p +bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw +IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ +kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h +qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN +pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de + Validity + Not Before: Mar 9 13:54:48 1998 GMT + Not After : Dec 31 13:54:48 2005 GMT + Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:df:7d:e6:be:bf:d5:f0:2f:6d:4e:0e:d1:e0:8d: + 0b:7f:3b:54:e8:8a:e2:b0:9f:28:c5:8a:c6:b9:b3: + 33:27:f5:27:ca:1a:4c:54:12:6b:b4:b2:46:b3:1d: + 4b:b3:f4:21:0b:4b:02:2e:a1:c2:34:9c:85:a0:c4: + 78:11:db:db:6b:27:2b:09:2a:18:4e:40:cc:9f:71: + 19:67:99:74:a2:7c:3f:c1:d8:8b:23:c8:63:3b:8a: + 21:ab:5c:de:1e:f4:8d:dc:b4:18:c3:05:73:f4:6a: + b4:a1:fa:01:08:2b:01:0f:6d:37:5b:aa:38:86:67: + 39:d7:e5:5f:fa:e4:7e:cc:a3 + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape CA Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape Renewal Url: + https://www.trustcenter.de/cgi-bin/Renew.cgi? + Netscape CA Policy Url: + http://www.trustcenter.de/guidelines/index.html + Netscape Comment: + TC TrustCenter Class 0 CA + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Signature Algorithm: md5WithRSAEncryption + 4d:07:7f:5f:09:30:19:92:aa:05:47:7a:94:75:54:2a:ae:cf: + fc:d8:0c:42:e1:45:38:2b:24:95:b2:ca:87:ca:79:c4:c3:97: + 90:5e:62:18:c6:c9:38:61:4c:68:35:d3:4c:14:11:eb:c4:cd: + a1:a9:d8:c5:9e:68:27:32:07:35:45:04:f8:5f:21:a0:60:1e: + 1c:00:48:04:58:d2:c5:cb:ae:6d:32:6e:3d:77:95:8c:85:c7: + e5:ae:50:9d:75:4a:7b:ff:0b:27:79:ea:4d:a4:59:ff:ec:5a: + ea:26:a5:39:83:a4:d1:78:ce:a7:a9:7e:bc:dd:2b:ca:12:93: + 03:4a + +TC TrustCenter, Germany, Class 1 CA +=================================== +MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx +EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD +IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx +IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B +CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX +DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn +MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig +U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz +dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 +cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz +rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0 +L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX +PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG ++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr +LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl +ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw +czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI +AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p +bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx +IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn +AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm +vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF +BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 2 (0x2) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de + Validity + Not Before: Mar 9 13:56:33 1998 GMT + Not After : Dec 31 13:56:33 2005 GMT + Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b0:29:eb:b4:76:b3:ae:d7:b6:5b:b4:5e:e7:bd: + e3:b1:9c:49:04:57:5b:a1:ab:d9:7f:13:1b:fd:ba: + 61:ab:d8:e7:71:df:2d:00:94:5d:51:48:7d:23:ef: + 75:62:84:90:3c:0a:1f:59:11:74:2f:8e:80:a5:fd: + 30:02:3d:29:52:cd:72:1a:49:21:9c:bc:cb:52:8e: + 48:a1:63:96:c8:10:85:30:69:57:74:45:c0:5a:86: + c6:d5:3d:e0:68:57:7d:31:6a:24:8d:45:97:3e:31: + 7e:68:66:32:6e:24:6d:ec:32:36:c9:41:ca:f0:31: + 44:c8:a3:61:ca:1b:a0:36:1f + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape CA Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape Renewal Url: + https://www.trustcenter.de/cgi-bin/Renew.cgi? + Netscape CA Policy Url: + http://www.trustcenter.de/guidelines/index.html + Netscape Comment: + TC TrustCenter Class 1 CA + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Signature Algorithm: md5WithRSAEncryption + 05:42:52:26:a4:0c:27:01:44:ac:5c:25:28:c2:44:42:54:08: + b9:1d:c5:3e:6c:59:66:c4:b3:4e:50:a7:f8:f8:96:75:a1:96: + 75:e8:16:38:a0:cd:5d:6e:fa:79:a7:1b:7b:1d:1e:c3:00:b9: + 66:be:5a:d6:62:0f:e7:f2:7b:b8:ef:4c:e0:c0:3f:59:ae:39: + b7:84:09:9e:ab:f1:a9:2e:6b:69:e2:ad:cc:f2:ea:78:09:05: + 20:38:42:71:18:7e:c7:b2:97:e6:d5:02:05:06:56:a3:5f:f1: + aa:c2:c4:4f:fe:f7:ef:16:0f:9d:ec:aa:85:cf:3d:29:24:f1: + 04:cd + +TC TrustCenter, Germany, Class 2 CA +=================================== +MD5 Fingerprint: E1:E9:96:53:77:E1:F0:38:A0:02:AB:94:C6:95:7B:FC +PEM Data: +-----BEGIN CERTIFICATE----- +MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx +EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD +IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx +IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B +CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX +DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn +MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig +U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz +dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 +cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA +KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM +VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+ ++Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG ++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr +LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl +ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw +czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI +AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p +bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy +IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji +bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu +fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC +MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 3 (0x3) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de + Validity + Not Before: Mar 9 13:57:44 1998 GMT + Not After : Dec 31 13:57:44 2005 GMT + Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:da:38:e8:ed:32:00:29:71:83:01:0d:bf:8c:01: + dc:da:c6:ad:39:a4:a9:8a:2f:d5:8b:5c:68:5f:50: + c6:62:f5:66:bd:ca:91:22:ec:aa:1d:51:d7:3d:b3: + 51:b2:83:4e:5d:cb:49:b0:f0:4c:55:e5:6b:2d:c7: + 85:0b:30:1c:92:4e:82:d4:ca:02:ed:f7:6f:be:dc: + e0:e3:14:b8:05:53:f2:9a:f4:56:8b:5a:9e:85:93: + d1:b4:82:56:ae:4d:bb:a8:4b:57:16:bc:fe:f8:58: + 9e:f8:29:8d:b0:7b:cd:78:c9:4f:ac:8b:67:0c:f1: + 9c:fb:fc:57:9b:57:5c:4f:0d + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape CA Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape Renewal Url: + https://www.trustcenter.de/cgi-bin/Renew.cgi? + Netscape CA Policy Url: + http://www.trustcenter.de/guidelines/index.html + Netscape Comment: + TC TrustCenter Class 2 CA + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Signature Algorithm: md5WithRSAEncryption + 89:1b:f4:ef:e9:38:e2:6c:0c:f6:cd:6f:49:ce:29:cc:fb:a6: + 0f:f9:8d:3e:95:46:d6:fc:47:32:89:b2:c8:06:61:7a:d2:e7: + 0d:13:02:94:0b:d9:8b:56:47:f4:bb:e7:c5:5f:7b:f4:63:4c: + ae:7c:34:ea:0d:a2:a9:b3:2c:85:f3:e3:fe:27:54:10:92:b0: + 8f:92:c1:98:42:18:70:48:db:4e:2c:eb:0d:24:68:e4:d1:f7: + be:09:a9:29:87:bb:e8:da:dc:3e:a3:88:42:31:f5:d1:e3:7f: + ae:d8:8e:00:5a:74:98:b0:4f:c6:ff:23:7b:5c:73:00:78:c9: + db:4e + +TC TrustCenter, Germany, Class 3 CA +=================================== +MD5 Fingerprint: 62:AB:B6:15:4A:B4:B0:16:77:FF:AE:CF:16:16:2B:8C +PEM Data: +-----BEGIN CERTIFICATE----- +MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx +EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD +IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx +IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B +CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX +DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn +MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig +U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz +dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 +cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu +DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO +1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD +UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG ++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr +LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl +ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw +czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI +AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p +bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz +IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn +4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt +7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5 +lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 4 (0x4) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de + Validity + Not Before: Mar 9 13:58:49 1998 GMT + Not After : Dec 31 13:58:49 2005 GMT + Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b6:b4:c1:35:05:2e:0d:8d:ec:a0:40:6a:1c:0e: + 27:a6:50:92:6b:50:1b:07:de:2e:e7:76:cc:e0:da: + fc:84:a8:5e:8c:63:6a:2b:4d:d9:4e:02:76:11:c1: + 0b:f2:8d:79:ca:00:b6:f1:b0:0e:d7:fb:a4:17:3d: + af:ab:69:7a:96:27:bf:af:33:a1:9a:2a:59:aa:c4: + b5:37:08:f2:12:a5:31:b6:43:f5:32:96:71:28:28: + ab:8d:28:86:df:bb:ee:e3:0c:7d:30:d6:c3:52:ab: + 8f:5d:27:9c:6b:c0:a3:e7:05:6b:57:49:44:b3:6e: + ea:64:cf:d2:8e:7a:50:77:77 + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape CA Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape Renewal Url: + https://www.trustcenter.de/cgi-bin/Renew.cgi? + Netscape CA Policy Url: + http://www.trustcenter.de/guidelines/index.html + Netscape Comment: + TC TrustCenter Class 3 CA + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Signature Algorithm: md5WithRSAEncryption + 84:86:50:62:79:a0:27:e1:25:ba:09:b1:34:0f:13:09:ed:2d: + ca:a3:e6:95:f9:30:ac:cd:17:a5:ce:3d:97:9d:ec:7c:8f:26: + 7f:c0:61:ca:22:f7:91:dd:3c:36:59:9a:9b:75:f7:bc:e4:c8: + ed:ec:02:b6:22:a7:f3:2c:f1:c8:92:78:6d:b6:ee:c5:28:ec: + 80:20:4f:b9:6b:08:e7:2f:a7:86:1e:7d:b1:08:9f:54:b9:00: + 37:3c:a0:d8:1a:c8:96:1c:f4:32:14:9c:39:95:b7:ee:f0:43: + 49:c2:5e:e8:cb:79:6f:53:bf:fb:49:8a:2c:d8:4b:d9:55:f2: + 12:70 + +TC TrustCenter, Germany, Class 4 CA +=================================== +MD5 Fingerprint: BF:AF:EC:C4:DA:F9:30:F9:CA:35:CA:25:E4:3F:8D:89 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx +EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD +IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx +IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B +CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX +DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn +MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig +U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz +dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 +cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7 +sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13 +su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT +xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG ++EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr +LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl +ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw +czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI +AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p +bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0 +IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p +mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm +ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK +85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 5 (0x5) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de + Validity + Not Before: Mar 9 14:00:20 1998 GMT + Not After : Dec 31 14:00:20 2005 GMT + Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:bf:2f:63:d6:36:7b:b2:0d:d3:55:f5:64:6c:e6: + 25:5d:c6:b4:c8:14:ba:25:38:83:eb:56:62:a5:55: + a9:65:a3:f4:23:99:c2:4b:b9:d0:cd:54:67:a6:a3: + a0:a3:a9:33:2b:76:e4:bd:ad:77:b2:ed:5c:12:74: + c3:c5:b6:0f:52:9a:72:93:43:90:62:66:15:0f:45: + a5:dd:e0:dd:b8:6f:40:6e:57:c1:79:72:a3:60:aa: + ba:76:1d:12:89:53:5a:fc:02:be:e1:09:13:c5:4a: + 2f:dc:3d:8b:19:ad:d7:8b:24:45:fb:4c:f4:cd:5c: + 35:1d:29:4c:51:f3:f2:6c:55 + Exponent: 65537 (0x10001) + X509v3 extensions: + Netscape Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape CA Revocation Url: + https://www.trustcenter.de/cgi-bin/check-rev.cgi? + Netscape Renewal Url: + https://www.trustcenter.de/cgi-bin/Renew.cgi? + Netscape CA Policy Url: + http://www.trustcenter.de/guidelines/index.html + Netscape Comment: + TC TrustCenter Class 4 CA + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Signature Algorithm: md5WithRSAEncryption + 94:68:14:1b:25:9e:29:99:b1:b2:23:d2:44:b3:95:9f:d1:9e: + 55:04:dd:e3:2f:82:33:55:96:77:19:9d:2b:9e:65:1c:fa:8a: + e3:c7:8f:25:fc:b1:1e:55:46:0f:8f:ff:4f:37:2f:a4:76:59: + a6:64:eb:d5:16:70:bd:dd:95:33:0c:a4:0d:24:eb:64:50:b4: + 43:11:f2:43:be:0d:71:98:22:ec:01:af:ec:f7:c7:5c:71:c3: + 75:91:58:19:e8:dd:a0:f4:b4:f1:bc:10:4a:f3:93:b4:06:49: + bb:1f:66:d2:bd:74:47:e1:9a:f9:eb:d7:ab:6d:1f:ba:e1:1d: + 2c:da + +Thawte Personal Basic CA +======================== +MD5 Fingerprint: E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B:78:EB:02:41 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj +IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X +DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw +EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE +ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy +dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD +QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 +dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK +wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 +G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF +AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 +c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P +9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com + Validity + Not Before: Jan 1 00:00:00 1996 GMT + Not After : Dec 31 23:59:59 2020 GMT + Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:bc:bc:93:53:6d:c0:50:4f:82:15:e6:48:94:35: + a6:5a:be:6f:42:fa:0f:47:ee:77:75:72:dd:8d:49: + 9b:96:57:a0:78:d4:ca:3f:51:b3:69:0b:91:76:17: + 22:07:97:6a:c4:51:93:4b:e0:8d:ef:37:95:a1:0c: + 4d:da:34:90:1d:17:89:97:e0:35:38:57:4a:c0:f4: + 08:70:e9:3c:44:7b:50:7e:61:9a:90:e3:23:d3:88: + 11:46:27:f5:0b:07:0e:bb:dd:d1:7f:20:0a:88:b9: + 56:0b:2e:1c:80:da:f1:e3:9e:29:ef:14:bd:0a:44: + fb:1b:5b:18:d1:bf:23:93:21 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 2d:e2:99:6b:b0:3d:7a:89:d7:59:a2:94:01:1f:2b:dd:12:4b: + 53:c2:ad:7f:aa:a7:00:5c:91:40:57:25:4a:38:aa:84:70:b9: + d9:80:0f:a5:7b:5c:fb:73:c6:bd:d7:8a:61:5c:03:e3:2d:27: + a8:17:e0:84:85:42:dc:5e:9b:c6:b7:b2:6d:bb:74:af:e4:3f: + cb:a7:b7:b0:e0:5d:be:78:83:25:94:d2:db:81:0f:79:07:6d: + 4f:f4:39:15:5a:52:01:7b:de:32:d6:4d:38:f6:12:5c:06:50: + df:05:5b:bd:14:4b:a1:df:29:ba:3b:41:8d:f7:63:56:a1:df: + 22:b1 + +Thawte Personal Freemail CA +=========================== +MD5 Fingerprint: 1E:74:C3:86:3C:0C:35:C5:3E:C2:7F:EF:3C:AA:3C:D9 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt +YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu +Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa +MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG +cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh +d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY +DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E +rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq +uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN +BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP +MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa +/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei +gQ== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com + Validity + Not Before: Jan 1 00:00:00 1996 GMT + Not After : Dec 31 23:59:59 2020 GMT + Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d4:69:d7:d4:b0:94:64:5b:71:e9:47:d8:0c:51: + b6:ea:72:91:b0:84:5e:7d:2d:0d:8f:7b:12:df:85: + 25:75:28:74:3a:42:2c:63:27:9f:95:7b:4b:ef:7e: + 19:87:1d:86:ea:a3:dd:b9:ce:96:64:1a:c2:14:6e: + 44:ac:7c:e6:8f:e8:4d:0f:71:1f:40:38:a6:00:a3: + 87:78:f6:f9:94:86:5e:ad:ea:c0:5e:76:eb:d9:14: + a3:5d:6e:7a:7c:0c:a5:4b:55:7f:06:19:29:7f:9e: + 9a:26:d5:6a:bb:38:24:08:6a:98:c7:b1:da:a3:98: + 91:fd:79:db:e5:5a:c4:1c:b9 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + c7:ec:92:7e:4e:f8:f5:96:a5:67:62:2a:a4:f0:4d:11:60:d0: + 6f:8d:60:58:61:ac:26:bb:52:35:5c:08:cf:30:fb:a8:4a:96: + 8a:1f:62:42:23:8c:17:0f:f4:ba:64:9c:17:ac:47:29:df:9d: + 98:5e:d2:6c:60:71:5c:a2:ac:dc:79:e3:e7:6e:00:47:1f:b5: + 0d:28:e8:02:9d:e4:9a:fd:13:f4:a6:d9:7c:b1:f8:dc:5f:23: + 26:09:91:80:73:d0:14:1b:de:43:a9:83:25:f2:e6:9c:2f:15: + ca:fe:a6:ab:8a:07:75:8b:0c:dd:51:84:6b:e4:f8:d1:ce:77: + a2:81 + +Thawte Personal Premium CA +========================== +MD5 Fingerprint: 3A:B2:DE:22:9A:20:93:49:F9:ED:C8:D2:8A:E7:68:0D +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD +VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT +ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p +dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv +bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa +QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY +BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u +IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl +bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu +Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs +Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI +Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD +ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH +b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh +KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com + Validity + Not Before: Jan 1 00:00:00 1996 GMT + Not After : Dec 31 23:59:59 2020 GMT + Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:c9:66:d9:f8:07:44:cf:b9:8c:2e:f0:a1:ef:13: + 45:6c:05:df:de:27:16:51:36:41:11:6c:6c:3b:ed: + fe:10:7d:12:9e:e5:9b:42:9a:fe:60:31:c3:66:b7: + 73:3a:48:ae:4e:d0:32:37:94:88:b5:0d:b6:d9:f3: + f2:44:d9:d5:88:12:dd:76:4d:f2:1a:fc:6f:23:1e: + 7a:f1:d8:98:45:4e:07:10:ef:16:42:d0:43:75:6d: + 4a:de:e2:aa:c9:31:ff:1f:00:70:7c:66:cf:10:25: + 08:ba:fa:ee:00:e9:46:03:66:27:11:15:3b:aa:5b: + f2:98:dd:36:42:b2:da:88:75 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 69:36:89:f7:34:2a:33:72:2f:6d:3b:d4:22:b2:b8:6f:9a:c5: + 36:66:0e:1b:3c:a1:b1:75:5a:e6:fd:35:d3:f8:a8:f2:07:6f: + 85:67:8e:de:2b:b9:e2:17:b0:3a:a0:f0:0e:a2:00:9a:df:f3: + 14:15:6e:bb:c8:85:5a:98:80:f9:ff:be:74:1d:3d:f3:fe:30: + 25:d1:37:34:67:fa:a5:71:79:30:61:29:72:c0:e0:2c:4c:fb: + 56:e4:3a:a8:6f:e5:32:59:52:db:75:28:50:59:0c:f8:0b:19: + e4:ac:d9:af:96:8d:2f:50:db:07:c3:ea:1f:ab:33:e0:f5:2b: + 31:89 + +Thawte Premium Server CA +======================== +MD5 Fingerprint: 06:9F:69:79:16:66:90:02:1B:8C:8C:A2:C3:07:6F:3A +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy +dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t +MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB +MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG +A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl +cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv +bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE +VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ +ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR +uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI +hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM +pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com + Validity + Not Before: Aug 1 00:00:00 1996 GMT + Not After : Dec 31 23:59:59 2020 GMT + Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f: + 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18: + 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af: + 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2: + 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93: + cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44: + 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73: + b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07: + 8d:f4:42:4d:e7:40:9d:1c:37 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7: + c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5: + 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb: + c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59: + 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9: + a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92: + 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07: + 14:42 + +Thawte Server CA +================ +MD5 Fingerprint: C5:70:C4:A2:ED:53:78:0C:C8:10:53:81:64:CB:D0:1D +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm +MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx +MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 +dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl +cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 +DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD +gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 +yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX +L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj +EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG +7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e +QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ +qdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com + Validity + Not Before: Aug 1 00:00:00 1996 GMT + Not After : Dec 31 23:59:59 2020 GMT + Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c: + 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da: + 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06: + 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2: + 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b: + 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90: + 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f: + 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36: + 3a:c2:b5:66:22:12:d6:87:0d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: md5WithRSAEncryption + 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9: + a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48: + 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88: + 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9: + 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5: + e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9: + b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e: + 70:47 + +Thawte Universal CA Root +======================== +MD5 Fingerprint: 17:AF:71:16:52:7B:73:65:22:05:29:28:84:71:9D:13 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw +HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0 +ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2 +MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh +bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi +MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS +IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/ +ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7 +32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft ++aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl +CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn +j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs +a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS +lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv +SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP +IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P +v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7 +Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3 +uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI +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 +yJTuQFv5QgLC/7DYLOsof17JJgGZpw== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root + Validity + Not Before: Dec 5 13:56:05 1999 GMT + Not After : Apr 3 13:56:05 2037 GMT + Subject: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (16384 bit) + Modulus (16384 bit): + 00:e2:89:05:6d:c3:7f:ad:a6:89:3a:ff:bb:c7:cd: + 9d:37:b1:e1:d2:21:1e:9b:61:2a:15:e7:7b:57:4f: + 55:3c:d0:bb:f9:d9:3d:3e:a6:bc:ec:b4:ad:53:9a: + 16:02:eb:0b:72:fd:8a:f2:8f:44:05:c5:eb:d3:e5: + bd:b6:44:39:e6:fb:47:bf:6a:9e:0a:95:18:e2:68: + e2:d6:96:d6:21:ad:88:fd:f5:17:f5:d3:da:42:a5: + 90:ed:29:95:96:75:3a:da:87:a1:d4:f5:d3:87:de: + 05:62:a6:e3:66:74:92:cf:a5:bc:bb:df:68:ff:71: + 75:56:41:59:35:eb:33:5a:66:51:f2:d2:a3:0a:c1: + 8c:ce:73:5c:11:6f:2d:8c:95:8c:91:b1:fd:cf:e5: + ad:56:95:cc:85:92:83:90:55:41:c9:c2:77:ed:f9: + a3:74:42:0a:68:08:f3:d0:d1:65:fd:67:2c:34:ff: + 24:7f:e7:79:c8:07:3b:25:57:dd:a4:0c:98:3d:be: + e0:cc:19:65:db:f2:54:a2:af:42:d4:9d:e2:ae:84: + 23:25:09:33:12:b5:6a:1e:76:c4:8b:d9:49:00:6c: + 5e:ba:1f:f2:1b:da:67:ca:27:aa:a3:44:23:1b:83: + 82:ce:f2:ab:33:ed:54:a4:dc:c9:ab:59:65:d1:38: + 0e:c1:3e:1b:67:8f:d6:75:01:e0:55:22:dd:76:77: + ec:8e:dd:f4:cf:79:22:6d:b9:57:03:f5:99:08:a7: + 3c:3e:34:fb:c4:17:ae:23:58:cd:24:f3:23:ca:6a: + 02:28:94:01:81:34:b4:6c:6b:ae:8b:1a:c3:a3:d2: + 09:3c:16:54:f5:36:5f:24:e3:9f:4a:a1:e2:64:c6: + 16:c3:a6:81:7a:24:36:47:8e:c1:5e:0e:fb:f9:15: + 78:04:d6:0e:59:d9:9d:58:66:62:d2:94:29:32:32: + c8:78:b9:66:f6:b5:56:e1:6c:c6:14:4b:96:52:59: + 91:02:24:6a:55:47:d7:3f:b6:23:1a:60:77:97:2e: + e2:40:af:9e:04:57:9e:ad:11:c5:c9:43:70:ef:48: + b4:5e:ac:1c:69:2e:2e:82:d5:5b:8b:be:82:be:19: + 14:5e:e7:0d:22:c7:51:1b:ff:1e:9b:f1:30:8f:71: + 31:06:b3:34:27:8f:5f:7a:66:82:4f:8a:2d:13:ab: + 42:cf:21:56:9e:97:8e:66:36:0f:96:9b:e5:2b:f4: + 02:a9:2a:6a:8c:2c:c4:c3:b8:70:2c:2d:29:1e:3f: + 50:77:1e:6d:2a:54:e4:55:0a:91:38:a1:c5:b5:66: + a2:76:5a:ee:0f:bf:b4:67:e1:28:6e:0f:e1:36:a1: + 82:d1:bf:d4:77:e1:c4:67:32:93:78:c8:e7:54:53: + fe:23:79:e6:68:cc:26:90:f6:10:63:5d:2a:6f:91: + 2d:a4:73:32:51:21:f2:bb:15:df:aa:24:08:48:06: + de:a1:9e:26:bf:ba:83:bf:7c:a4:c8:a0:8c:bd:d2: + ff:bc:84:69:27:13:24:18:c4:45:18:23:26:5e:18: + 14:ca:2e:88:87:62:a3:53:e6:21:b7:b8:85:7b:9a: + 85:bb:15:26:72:f8:b9:f7:6a:74:0f:49:3f:92:be: + a9:05:b7:99:27:bf:bf:09:17:4b:99:4c:ad:11:10: + 7c:df:74:31:f6:8f:26:5f:aa:88:ae:38:57:c8:55: + 2d:d3:fb:d8:1b:51:99:be:25:1b:3a:ba:c0:7d:1b: + ed:ce:d2:49:b9:cf:f3:c5:7d:89:90:81:d8:69:48: + 20:10:a3:f8:ef:92:51:18:32:8b:11:18:c0:3f:1b: + 85:56:ce:57:c9:f2:82:64:c6:df:02:09:2e:4a:11: + 2f:b1:27:6d:37:52:f0:f0:16:61:f1:67:8d:df:87: + 72:af:87:da:cf:fb:50:94:6e:d4:94:85:eb:8a:2c: + ea:21:f5:96:4a:44:d5:e0:ce:6a:74:44:4d:d0:05: + d3:87:15:ed:36:d0:a4:8b:66:55:70:93:ee:47:06: + c1:7e:2e:a5:18:79:67:f3:28:85:f1:70:f7:0e:83: + a4:7e:54:9e:5a:76:32:cb:65:1b:b8:cd:fb:c8:28: + 03:d2:54:91:d1:a7:c5:85:43:08:17:76:a5:e6:2f: + 67:08:d8:a1:a2:82:2d:0c:f8:c1:af:63:d4:50:77: + 6d:6b:46:4a:41:85:d5:90:5f:79:2d:c4:ec:d7:11: + 87:40:8a:e1:68:e2:64:f8:55:32:fb:6f:93:2c:da: + 77:d9:21:c1:17:e5:36:2c:4e:7e:90:7f:ac:94:2b: + 32:67:be:38:50:76:b8:ae:41:b9:d7:21:c5:09:4c: + 60:c8:a3:51:c4:34:9b:57:37:df:cb:c9:33:57:8b: + eb:fb:76:9f:19:4d:c5:6a:1f:2a:45:ae:2b:ed:2f: + 8d:a7:a5:00:cb:04:fa:25:62:2e:74:48:1b:ca:2a: + 8c:ba:db:b6:7e:f6:bb:02:7c:a9:c3:db:58:78:a1: + bf:f0:fe:1a:10:55:11:ce:e8:69:4e:96:65:c6:17: + 03:d6:07:68:8c:54:82:ae:1c:22:55:3f:f1:f4:09: + 97:28:c0:46:f7:4e:0b:25:1d:f7:07:d7:09:1d:3a: + 18:57:38:3b:e8:33:06:e7:8f:78:46:1e:5b:f5:06: + b6:ec:b8:a6:0d:f1:ba:13:4b:d6:18:20:dd:69:33: + 4a:33:15:ae:b8:c8:98:8a:27:2c:93:bc:2d:fb:ee: + 33:bf:66:e6:4d:ba:b6:9b:06:55:60:97:4b:bc:44: + cd:7e:f4:a1:d8:aa:2f:c0:02:28:21:16:62:78:db: + 08:54:f2:fc:f4:34:e3:c6:8f:1c:43:57:ce:90:1a: + 4b:dc:2e:3b:28:91:89:3f:7a:da:35:1d:8e:2c:ee: + 49:ec:f4:33:ad:c9:53:a8:8c:9f:04:53:3e:24:1c: + 52:c9:12:f9:62:57:a3:bc:ee:2c:eb:40:7c:20:23: + 70:2b:95:f9:73:17:8a:d1:c1:1c:69:a6:b7:38:9a: + 67:f7:70:1d:7a:5a:0c:40:cf:62:0f:85:3c:c2:02: + 4e:7e:b5:f6:c5:2a:29:84:b3:1f:37:2a:e1:aa:72: + 42:c4:ed:6b:1a:8f:92:1c:5d:be:d1:f2:5b:f2:ab: + aa:a9:d2:f5:b8:a4:41:2b:2b:91:6e:12:48:ca:98: + d8:37:8d:c8:ed:00:30:b5:b6:04:4e:7e:9c:da:84: + ec:c0:fa:7b:e5:1d:88:a4:53:46:b0:94:e4:5c:1b: + a1:25:2c:0f:48:52:77:97:09:6c:ec:5b:18:33:83: + 02:e5:82:7e:cd:85:21:30:11:fd:27:4f:cf:e4:1e: + ec:3f:a5:57:6c:e9:2a:30:19:2a:88:e5:c3:69:38: + ab:6f:39:71:7f:84:e1:41:c3:e1:cc:2a:89:20:52: + 2e:83:0f:6c:39:3f:4b:2d:16:ac:2d:f0:24:ac:00: + 73:f4:9b:b3:06:3f:05:b8:14:85:1f:ab:9e:5c:3c: + 9e:62:9d:0e:6d:3b:80:09:fc:02:ea:a2:97:74:ca: + c7:f9:e3:56:e1:c3:ca:a5:a6:9a:c0:90:e0:24:12: + 53:d2:c2:8b:da:be:ed:02:43:5e:67:e1:89:98:79: + ee:cb:aa:ca:c3:1b:dc:e7:a5:46:a5:7c:6b:16:87: + b6:5a:28:d7:db:27:3c:5e:a5:bd:b6:51:dd:1f:43: + cf:3b:26:c8:3a:8d:25:61:c1:49:f4:3c:1b:c9:44: + ea:af:1c:c2:2b:94:01:2a:0e:30:d1:5b:8b:2b:47: + e5:c3:d1:04:03:9b:0e:39:2c:d6:27:d4:e6:70:5a: + d9:75:cf:2a:d8:c9:00:05:e4:13:88:ec:c3:39:fb: + 87:61:30:36:43:03:c8:9e:9c:a2:06:c2:2f:c5:fc: + f0:80:63:b1:54:04:a0:4c:a9:2e:c6:f5:76:7a:d8: + d0:e4:d4:94:11:e5:15:b5:78:06:dc:b8:80:8f:99: + a9:20:33:3d:10:85:4c:65:09:ca:3e:58:5e:60:93: + 9a:aa:62:5d:c0:51:06:1c:5d:60:a0:0d:9c:4b:43: + f6:a7:16:21:a4:87:aa:f2:c1:2e:ee:92:30:b8:9e: + df:df:10:01:8b:86:09:70:d8:6c:a8:b7:50:1e:16: + 96:b4:f7:67:fd:35:3a:21:90:2a:32:c7:00:7b:4d: + 07:10:09:b9:2f:73:d8:18:7e:67:99:04:4f:06:fc: + 50:c7:85:9b:9d:40:9d:b3:96:37:fa:a5:dc:b2:72: + 4e:ef:4e:09:2c:fd:91:fd:4d:f7:bb:a6:a1:3e:ab: + 7b:a2:03:40:a6:a9:55:27:e2:fa:f9:19:ce:87:75: + aa:f1:75:36:f3:f3:b8:91:f8:91:c3:8b:75:13:8e: + 4c:65:9a:16:39:6a:e5:34:e8:7a:96:59:7f:35:b0: + 00:fd:5b:69:fc:43:26:fa:f5:28:6e:fe:87:d9:7e: + 24:fb:b4:a0:82:6e:54:a2:ff:ae:bf:62:b4:f4:72: + 01:c2:cb:98:47:98:e1:4c:b5:17:80:80:ce:8f:a6: + 28:ee:1e:45:6a:fb:df:f1:1d:fc:5a:3b:d6:ea:f4: + 6c:1d:62:49:57:3b:8a:8f:86:ea:f0:53:04:ce:9c: + 16:68:ff:ba:b9:fc:88:0f:47:f7:02:44:72:40:b8: + ca:3b:2d:53:9d:dc:3c:56:8c:59:7b:68:1a:2c:8d: + 71:bb:6c:00:c7:1a:ce:6f:40:92:b1:a3:2f:0f:d9: + 44:f2:a3:70:2e:9e:ee:0e:ae:32:d0:3b:3e:8b:07: + ea:e6:79:b3:5c:29:e2:7d:6b:a8:5e:f9:5a:31:e8: + 08:96:a2:8c:03:98:46:f1:b8:7d:90:54:26:ed:76: + 62:fe:9e:e9:9a:6e:5e:c9:49:c7:5c:34:53:29:54: + d9:ec:e4:46:e1:80:3b:75:d9:df:fb:79:d5:87:f1: + ba:9e:eb:19:ce:4c:52:73:e6:5b:87:ae:25:4f:39: + 79:cc:c6:b8:f9:10:7b:ec:f0:9b:71:a4:05:a0:d3: + 29:d3:4e:7f:1f:f4:2d:28:78:cc:55:95:7b:1e:91: + 2f:cc:56:18:73:8b:b2:db:bc:69:07:e6:d0:d8:4f: + ed:a2:ff:58:85:a3:6d:e0:4a:53:b7:67:7d:8d:0c: + 5c:5b:7b:77:28:02:35:44:7a:04:d3:28:43:c8:6b: + 30:17:5d:32:b8:29:35:ba:76:da:3b:14:4a:76:18: + 58:a4:f8:92:3c:9e:4d:33:6f:46:6b:08:d9:31:48: + 68:dd:f4:fb:24:56:34:b2:cf:69:66:be:48:d2:8a: + 66:22:cd:f2:69:cd:c2:53:13:45:29:41:22:d6:5d: + 98:1f:b6:a4:b2:a3:c2:ee:02:2f:51:1b:dc:83:a4: + ec:70:25:a8:d4:08:61:32:6f:e4:a1:81:2e:7c:63: + 72:fa:29:65:bc:70:44:cf:5d + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 55:9a:34:6a:22:06:69:09:45:33:c7:ae:a9:5c:c7:09:4e:9b: + 86:bc:41:90:d4:94:52:f6:cd:23:29:94:4b:22:cd:e8:bd:fe: + 9d:cd:52:f2:bd:ed:ab:87:c9:ab:ab:46:04:b4:bd:a2:3f:22: + 30:47:50:c0:4b:8c:76:0f:03:f5:92:d2:b1:2d:c4:7a:35:9c: + c9:73:87:eb:a6:9f:de:0f:73:8d:d3:7f:99:d8:ba:8f:6f:c4: + f3:be:1a:ae:8b:a2:94:36:90:e2:e5:eb:8d:05:f4:fc:65:df: + 95:f1:c4:94:4d:17:56:d7:9f:3c:8f:50:3c:e7:77:bf:95:86: + 26:64:fb:6a:ff:c6:da:e9:8c:ae:42:bb:69:e5:33:c6:d8:e9: + 0d:c6:55:21:49:c1:0c:b4:a3:f9:9b:4b:5c:de:83:4f:41:03: + ce:2a:79:68:38:7d:f0:54:49:20:f5:b6:10:ff:08:dc:33:66: + 96:9b:ff:06:de:00:9e:d7:ce:56:43:9a:51:fc:70:cd:f6:f0: + 51:a3:b7:cd:b4:5c:85:62:cd:71:b7:c6:2b:23:2b:dd:c3:6e: + 40:42:fa:37:ff:37:1c:f6:7a:57:94:87:85:23:d7:d4:c9:c7: + 5f:c1:4d:2f:c9:0d:d7:5c:ec:9c:25:ee:9e:30:82:91:96:72: + b8:75:1d:f8:09:68:57:97:b2:2d:4b:ee:25:ec:7a:24:29:ee: + 72:d4:9c:13:db:ab:dc:03:0a:d8:4a:14:c9:08:57:44:5d:a1: + b5:53:80:34:f2:14:97:cf:52:de:a2:0e:8a:10:e9:14:ef:d0: + 60:be:61:a1:f1:25:5d:d5:18:73:3f:93:10:ca:96:ee:b3:40: + d2:db:a3:55:cf:57:5a:a5:0e:4f:75:47:df:ea:f7:90:9a:6d: + f5:70:2e:1d:14:1c:37:64:04:59:50:b0:dc:72:86:6f:9c:37: + 3d:5d:28:af:73:55:ef:d2:ee:24:74:74:13:ef:dc:db:31:49: + fb:3f:63:f5:d3:08:3e:33:a5:e7:9d:0a:de:53:2c:51:8e:67: + db:9b:41:65:41:50:bd:d4:a4:96:6c:87:bc:12:e0:94:c7:d3: + c0:e4:cb:73:58:00:83:e1:ac:27:85:d6:9d:53:9d:5c:bd:0a: + 3e:03:43:9c:0c:91:f5:6d:7b:f8:40:72:75:ab:11:76:91:2b: + e1:c6:aa:1f:70:69:76:70:15:09:fe:93:d0:d6:2d:b7:15:6a: + 9b:67:5c:b4:69:9f:25:a6:7d:8a:fb:7d:22:a9:71:f2:ce:4e: + 8c:b8:21:2d:de:fe:41:71:0d:ff:9d:ec:73:a6:bb:07:4f:88: + 0e:58:47:2e:7e:a9:c2:c7:78:dd:ba:7a:9e:4e:e0:30:4e:63: + 6f:85:d4:20:41:e9:fa:fe:43:45:e7:fb:af:7a:b2:ce:a4:05: + 1d:22:9a:58:86:df:e4:ce:4c:a9:fe:d8:16:a5:6f:fb:d8:ce: + 56:7b:f5:d6:20:ef:e4:47:cd:63:24:ff:b9:be:f1:48:a3:c1: + 01:72:e6:bd:c0:ad:ed:26:0d:ca:34:9f:fc:02:2d:20:4f:05: + 20:ae:21:3d:0c:c2:20:3c:3f:f0:04:84:dc:cf:89:fd:b9:25: + 91:8e:d0:43:e6:b3:20:ab:5c:2d:d5:40:9e:a0:4b:d8:f4:b2: + cc:7d:f1:58:0a:8e:87:ed:88:ac:36:96:e4:56:a0:11:8a:f2: + 9a:d0:b3:57:a3:34:bb:19:ab:38:e1:74:6b:22:c4:31:ce:01: + d5:1b:36:e3:1e:38:4c:33:93:df:40:e3:59:57:4e:ac:6e:7b: + 1e:5a:3d:c5:1d:5b:ac:c8:10:82:35:02:22:b2:fc:75:e8:10: + 91:8d:c4:7d:78:93:47:9e:1c:9d:ac:6b:62:02:58:8c:d6:1c: + 23:d6:af:78:c2:80:9c:a4:aa:24:54:14:b5:14:98:c6:f8:2b: + 1a:24:cb:71:32:0a:e2:9b:0e:69:6b:dd:7e:8c:64:d1:2e:63: + ef:0e:7f:b1:3e:88:4c:9d:55:e5:c9:6e:17:04:b7:41:ff:bd: + 8a:41:cb:25:31:6f:44:77:3f:47:b1:fc:81:88:07:8e:05:49: + 20:b7:11:d9:69:03:2a:03:9d:b9:33:84:9a:df:df:7a:e3:46: + 73:a3:d8:a2:8c:53:19:88:55:4c:74:b8:f6:44:84:2b:d1:14: + 2d:4e:39:2e:92:68:ff:69:fc:85:62:1b:eb:55:4f:ef:25:84: + 62:45:99:d6:d8:4e:6f:3f:53:08:7d:1d:06:95:81:80:7f:4f: + 4e:74:36:98:b5:e2:87:70:98:dc:d7:f5:dc:52:15:e6:c6:d6: + 79:96:39:7f:8f:95:cf:ab:80:53:ad:1b:0b:45:40:0e:d4:18: + bd:2c:de:8a:77:76:fd:f2:44:47:c6:21:d0:e4:74:f0:d8:18: + 05:c8:7c:30:72:c7:df:f1:bb:fc:02:30:a9:f4:42:26:59:0d: + 93:05:82:a1:73:ed:34:e5:38:5d:cd:50:90:fe:94:fc:13:bc: + bd:fc:a8:a2:88:a7:73:c4:b2:a8:d1:5d:88:c4:02:a2:7a:f1: + 04:c9:fe:8c:74:c9:ef:1d:64:41:9f:ac:1e:96:67:64:ac:ab: + 28:41:c7:9d:f7:c0:98:1b:6e:07:c2:64:7d:5a:83:66:56:28: + 36:9c:e7:fb:1c:77:0e:28:a0:c4:f7:6b:79:39:04:20:84:c7: + 57:93:bc:1b:a0:ea:bc:eb:42:e5:a8:11:fe:fc:ac:65:cc:fd: + f8:28:88:f4:a5:9a:e5:73:51:e0:a8:9b:0d:03:77:4e:e5:e0: + 98:b3:88:da:7d:e6:c6:9e:7c:14:66:c1:2e:53:4a:92:07:37: + a0:7e:e9:3d:09:e4:15:7c:cf:fd:b8:41:a5:ef:9e:66:9d:c4: + 5e:07:1d:87:f8:41:ad:ea:e7:2f:d2:41:63:18:37:f9:14:e3: + 4d:d0:e5:f7:43:fd:15:e3:f9:36:73:06:26:df:01:4f:a9:c3: + 4e:de:20:46:77:98:b4:7a:24:2b:3b:75:2b:4e:58:8d:9b:5d: + a4:c7:16:a0:bc:32:88:3f:a1:83:f3:00:c8:f8:d8:58:e9:63: + 5d:4c:2b:b5:f0:72:41:d8:ab:77:37:d6:72:74:ae:b6:36:9c: + c8:a6:83:49:4b:e0:c9:56:0b:29:be:00:30:cb:dd:d6:c8:42: + 8a:00:d9:ec:15:d1:34:71:f2:5b:64:87:f6:27:d2:b7:eb:86: + b0:90:bf:29:db:21:9e:36:8c:e3:20:2f:95:23:51:6c:1b:c2: + a4:d5:e6:d8:02:43:67:a0:fe:9b:50:03:44:7f:bb:e4:72:d5: + d1:e4:da:8f:92:14:64:fb:5d:14:10:12:4a:95:06:c9:65:08: + 29:ca:21:a3:26:38:11:c9:27:df:70:67:04:fd:ca:48:32:7f: + 63:b2:45:74:31:50:4f:87:d9:20:70:d2:21:70:b1:d6:10:9d: + 33:5d:78:83:91:6d:55:82:ec:da:e4:62:63:c7:81:46:d7:19: + 65:72:2a:43:19:90:b8:d7:23:4d:4c:1c:e0:44:a9:66:67:ac: + ee:71:79:27:26:78:6d:72:0e:f5:5d:4b:23:b5:7c:7c:65:e9: + 17:c6:3a:0b:0d:dd:5e:1e:51:c3:86:b8:ec:7f:c7:27:4a:a5: + 46:e8:6a:2d:19:c1:87:a3:cb:99:93:87:64:a2:55:14:4c:b7: + 43:a5:93:d7:e7:d2:4e:79:40:ca:65:99:46:3d:3f:7a:80:7a: + 88:6a:cc:1e:e5:6b:33:46:f4:50:c0:d5:1f:09:b8:cd:8a:2e: + a1:27:eb:5d:73:a7:e8:6b:0a:e5:57:82:2a:b0:fc:e2:54:52: + 56:f0:ab:a9:12:c6:23:96:07:24:9c:e0:bc:46:a5:b4:20:04: + da:09:93:63:e5:d4:2e:c2:7e:c5:31:ed:b5:15:74:86:17:b9: + b3:f3:26:8a:1d:02:6a:da:1a:3f:e8:ba:f1:04:6d:94:51:54: + e2:5a:b4:59:83:1d:60:d0:2d:73:cc:07:b5:26:8c:f9:d7:c6: + 88:91:ef:80:cf:5d:0f:a1:60:cb:45:d4:42:22:d1:b1:70:1d: + fd:d0:b7:30:90:3a:c6:48:6d:67:e5:32:da:8f:db:e3:a8:e3: + 1d:20:25:a2:1c:e1:4c:b9:a4:f6:c6:3f:5c:58:0d:bb:c6:b2: + 77:01:16:91:9f:17:06:0d:b7:40:3e:cc:8f:8e:9c:4b:e0:9d: + 7e:9b:1e:05:ab:88:22:fa:d3:28:1b:57:14:64:4a:3e:24:2c: + 38:4d:21:69:00:73:2e:d0:55:2d:74:f2:15:e8:94:43:3e:40: + 2a:c6:c6:b9:6a:5b:de:a2:cc:18:50:54:5d:4e:2a:85:6c:f6: + 92:8b:29:19:7e:e7:ea:4a:e0:22:2b:25:bc:f7:66:cf:77:9a: + 41:74:f2:3c:14:0d:74:69:f5:50:83:cd:cd:2f:21:db:22:46: + 8a:d0:f7:51:1a:95:57:f2:05:8b:1a:19:ed:3b:45:e8:36:c2: + 6e:7e:fb:57:22:00:1f:06:53:a9:ae:93:c6:8f:71:2a:31:45: + 92:e7:8e:6d:e6:99:22:c0:83:fc:ef:dc:57:66:77:4f:a2:36: + 31:fb:a1:13:8d:e5:ca:a3:95:7d:01:0c:64:70:3b:53:42:68: + 80:c7:bb:9d:a8:00:35:69:98:0c:a8:67:d8:43:e5:aa:cf:95: + e0:51:95:a4:17:3f:42:9d:b8:04:ce:d3:79:79:c8:d3:8a:16: + 32:92:e0:d7:a2:ee:d7:37:4c:2f:ac:b8:7b:be:45:f6:f1:18: + 33:9c:7b:37:a6:24:d9:bc:40:ab:00:e9:c3:37:8b:ab:d8:b6: + f3:5e:81:4e:b0:14:6b:07:3e:1f:ec:c2:f6:44:22:95:bb:b3: + e6:6f:d6:f9:70:65:ba:0a:83:65:aa:0e:13:2f:83:13:23:53: + 8b:40:16:fa:ce:2f:fc:4d:04:f8:eb:d8:ac:c5:36:c2:15:57: + 48:38:ec:55:b3:b4:1e:ba:ad:d2:42:06:17:0d:73:c8:57:a6: + be:96:4d:a9:f2:c0:fb:7a:21:1c:f5:c9:70:a9:82:90:b5:f1: + 0c:d4:79:10:be:81:a6:e9:5c:61:9c:77:79:9a:a4:c3:37:26: + 57:37:c9:52:2c:fa:08:ff:d0:5f:c6:61:c0:f4:76:be:fc:de: + 4e:cf:ab:51:99:71:c7:df:7e:f4:d6:cf:06:56:19:13:53:0b: + 6d:74:59:48:19:9b:53:05:2d:9d:32:54:d3:e5:2c:53:8b:64: + 3e:d4:64:7b:e3:80:09:14:cc:fe:16:46:63:6b:71:69:f8:f9: + cb:27:f6:88:54:bc:45:b3:ce:02:c8:94:ee:40:5b:f9:42:02: + c2:ff:b0:d8:2c:eb:28:7f:5e:c9:26:01:99:a7 + +UPS Document Exchange by DST +============================ +MD5 Fingerprint: 78:A5:FB:10:4B:E4:63:2E:D2:6B:FB:F2:B6:C2:4B:8E +PEM Data: +-----BEGIN CERTIFICATE----- +MIID+DCCAuACEQDQHkCLAAACfAAAAAcAAAABMA0GCSqGSIb3DQEBBQUAMIG5MQsw +CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp +dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEeMBwGA1UE +CxMVVW5pdGVkIFBhcmNlbCBTZXJ2aWNlMRkwFwYDVQQDExBEU1QgKFVQUykgUm9v +dENBMSEwHwYJKoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wHhcNOTgxMjEw +MDAyNTQ2WhcNMDgxMjA3MDAyNTQ2WjCBuTELMAkGA1UEBhMCdXMxDTALBgNVBAgT +BFV0YWgxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xHjAcBgNVBAsTFVVuaXRlZCBQYXJjZWwgU2Vy +dmljZTEZMBcGA1UEAxMQRFNUIChVUFMpIFJvb3RDQTEhMB8GCSqGSIb3DQEJARYS +Y2FAZGlnc2lndHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA7xfsrynm2SsnwNt7JJ9m9ASjwq0KyrDNhCuqN/OAoWDvQo/lXXdfV0JU3Svb +YbJxXpN7b1/rJCvnpPLr8XOzC431Wdcy36yQjk4xuiVNtgym8eWvDOHlb1IDFcHf +vn5KpqYYRnA/76dNqNz1dNlhekA8oZQo6sKUiMs3FQUZPJViuhwt+yiM0ciekjxb +EVQ7eNlHO5stSuY+e2vf9PYFzyj2upg2AJ48N4UKnN63pIXFY/23YhRtFx7MioCF +QjIRsCHinXfJgBZBnuvlFIl/t8O8T8Gfh5uW7GP2+ZBWDpWjIwqMZNqbuxx3sExd +5sjo9X15LVckP8zjPSyYzxKfFwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQC7OI4E +IiZYDiFEVsy9WXwpaMtcD8iGVD+BeKetj8xG9xxUuHktW3IFaugh0OwdHf6kNFG+ +7u3OzJwWaOJddXMIQzGRahArEMJLafjJrZio/bjv9qvwXyHvy4VrCe0vSGa1YHLA +6KDHmNsO9xtzjTQICnvFd2KqMCObsB6LgJhU3AWHs6liWfyLtxWarETszzUa9w8u +XZJLAch77qA37eQdgg2ZQUMXrdTVyuP5fReiAdAwD0C53LkEgmmDtvkP+gaS96j0 +1hcc8F5/xCnI5uHi/zZoIVGu/6m6hJKtinsz2JDSwXltMzM5dKwbOHGfLAeQ6h3g +04lfy+8UjSdUpb1G +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + d0:1e:40:8b:00:00:02:7c:00:00:00:07:00:00:00:01 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com + Validity + Not Before: Dec 10 00:25:46 1998 GMT + Not After : Dec 7 00:25:46 2008 GMT + Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ef:17:ec:af:29:e6:d9:2b:27:c0:db:7b:24:9f: + 66:f4:04:a3:c2:ad:0a:ca:b0:cd:84:2b:aa:37:f3: + 80:a1:60:ef:42:8f:e5:5d:77:5f:57:42:54:dd:2b: + db:61:b2:71:5e:93:7b:6f:5f:eb:24:2b:e7:a4:f2: + eb:f1:73:b3:0b:8d:f5:59:d7:32:df:ac:90:8e:4e: + 31:ba:25:4d:b6:0c:a6:f1:e5:af:0c:e1:e5:6f:52: + 03:15:c1:df:be:7e:4a:a6:a6:18:46:70:3f:ef:a7: + 4d:a8:dc:f5:74:d9:61:7a:40:3c:a1:94:28:ea:c2: + 94:88:cb:37:15:05:19:3c:95:62:ba:1c:2d:fb:28: + 8c:d1:c8:9e:92:3c:5b:11:54:3b:78:d9:47:3b:9b: + 2d:4a:e6:3e:7b:6b:df:f4:f6:05:cf:28:f6:ba:98: + 36:00:9e:3c:37:85:0a:9c:de:b7:a4:85:c5:63:fd: + b7:62:14:6d:17:1e:cc:8a:80:85:42:32:11:b0:21: + e2:9d:77:c9:80:16:41:9e:eb:e5:14:89:7f:b7:c3: + bc:4f:c1:9f:87:9b:96:ec:63:f6:f9:90:56:0e:95: + a3:23:0a:8c:64:da:9b:bb:1c:77:b0:4c:5d:e6:c8: + e8:f5:7d:79:2d:57:24:3f:cc:e3:3d:2c:98:cf:12: + 9f:17 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + bb:38:8e:04:22:26:58:0e:21:44:56:cc:bd:59:7c:29:68:cb: + 5c:0f:c8:86:54:3f:81:78:a7:ad:8f:cc:46:f7:1c:54:b8:79: + 2d:5b:72:05:6a:e8:21:d0:ec:1d:1d:fe:a4:34:51:be:ee:ed: + ce:cc:9c:16:68:e2:5d:75:73:08:43:31:91:6a:10:2b:10:c2: + 4b:69:f8:c9:ad:98:a8:fd:b8:ef:f6:ab:f0:5f:21:ef:cb:85: + 6b:09:ed:2f:48:66:b5:60:72:c0:e8:a0:c7:98:db:0e:f7:1b: + 73:8d:34:08:0a:7b:c5:77:62:aa:30:23:9b:b0:1e:8b:80:98: + 54:dc:05:87:b3:a9:62:59:fc:8b:b7:15:9a:ac:44:ec:cf:35: + 1a:f7:0f:2e:5d:92:4b:01:c8:7b:ee:a0:37:ed:e4:1d:82:0d: + 99:41:43:17:ad:d4:d5:ca:e3:f9:7d:17:a2:01:d0:30:0f:40: + b9:dc:b9:04:82:69:83:b6:f9:0f:fa:06:92:f7:a8:f4:d6:17: + 1c:f0:5e:7f:c4:29:c8:e6:e1:e2:ff:36:68:21:51:ae:ff:a9: + ba:84:92:ad:8a:7b:33:d8:90:d2:c1:79:6d:33:33:39:74:ac: + 1b:38:71:9f:2c:07:90:ea:1d:e0:d3:89:5f:cb:ef:14:8d:27: + 54:a5:bd:46 + +ValiCert Class 1 VA +=================== +MD5 Fingerprint: 65:58:AB:15:AD:57:6C:1E:A8:A7:B5:69:AC:BF:FF:EB +PEM Data: +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy +NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y +LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ +TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y +TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 +LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW +I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw +nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 1 (0x1) + Signature Algorithm: sha1WithRSAEncryption + Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com + Validity + Not Before: Jun 25 22:23:48 1999 GMT + Not After : Jun 25 22:23:48 2019 GMT + Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e: + a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3: + 4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03: + 12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a: + 26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8: + 58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0: + 3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e: + e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76: + 72:a0:1d:9d:1d:c0:dd:3f:71 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f: + 71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2: + 07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23: + cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9: + fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee: + e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5: + ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d: + 72:c8 + +ValiCert Class 2 VA +=================== +MD5 Fingerprint: A9:23:75:9B:BA:49:36:6E:31:C2:DB:F2:E7:66:BA:87 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy +NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY +dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 +WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS +v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v +UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu +IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC +W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 1 (0x1) + Signature Algorithm: sha1WithRSAEncryption + Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com + Validity + Not Before: Jun 26 00:19:54 1999 GMT + Not After : Jun 26 00:19:54 2019 GMT + Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74: + 0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb: + 98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed: + 25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4: + d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f: + b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91: + 1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64: + 73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1: + b3:43:bb:ef:7b:6e:2e:69:f7 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e: + a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d: + bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21: + 81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99: + 6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32: + 3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72: + 0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f: + 43:dd + +ValiCert Class 3 VA +=================== +MD5 Fingerprint: A2:6F:53:B7:EE:40:DB:4A:68:E7:FA:18:D9:10:4B:72 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy +NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD +cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs +2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY +JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE +Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ +n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A +PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: 1 (0x1) + Signature Algorithm: sha1WithRSAEncryption + Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com + Validity + Not Before: Jun 26 00:22:33 1999 GMT + Not After : Jun 26 00:22:33 2019 GMT + Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72: + 75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35: + 44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7: + ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92: + 97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30: + 5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b: + 9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04: + 5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7: + 43:62:61:f3:d3:e2:d0:55:3f + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d: + f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42: + d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f: + 45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f: + 89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67: + c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d: + 82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c: + 15:ee + +VeriSign Class 4 Primary CA +=========================== +MD5 Fingerprint: 1B:D1:AD:17:8B:7F:22:13:24:F5:26:E2:5D:4E:B9:10 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa +Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln +biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1 +9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj +IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd +O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF +AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ +g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am +yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 02:a6:00:00:01 + Signature Algorithm: md2WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority + Validity + Not Before: Jan 29 00:00:00 1996 GMT + Not After : Dec 31 23:59:59 1999 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:d0:b2:75:f6:78:d0:ae:5a:50:f4:e9:50:a9:9f: + 8c:d7:ef:91:94:70:e8:d2:24:90:76:89:85:d6:df: + ac:e6:01:17:32:80:f0:9d:93:47:bc:9a:65:9d:1f: + 97:ae:bf:e9:86:75:63:20:89:bd:80:58:9d:04:0c: + 9d:a8:c1:24:e9:0b:e5:31:78:bd:fc:2d:0c:37:6a: + 9e:78:80:e9:46:75:f9:ed:a3:fb:13:7b:c8:c1:4c: + d2:a3:ef:f5:3c:b0:62:8f:4a:5d:3b:dd:95:67:8f: + 13:b9:c1:3c:d6:a7:26:9b:ec:c3:3b:7a:d9:4d:bc: + 6d:9b:e8:15:01:e3:f0:47:a9 + Exponent: 65537 (0x10001) + Signature Algorithm: md2WithRSAEncryption + 53:dd:d3:f0:9c:24:7e:40:aa:e2:fc:00:1a:d7:da:0c:fc:32: + 61:b8:15:0d:96:f3:fa:57:1b:7f:33:7c:af:e9:98:9a:61:c8: + 7a:b3:b7:ff:b1:dc:99:83:dc:ac:12:fc:70:c9:1f:38:42:ed: + 44:f6:80:2e:5b:6b:33:69:ac:9c:d3:5c:e7:5f:5a:18:c7:b1: + 2d:79:04:96:41:91:99:41:b1:3c:0d:ba:84:39:c6:3b:97:f0: + 26:c9:8e:ee:bd:cc:42:95:ff:1e:c7:02:3f:54:0c:78:f5:bc: + aa:60:7c:02:69:e8:dc:ac:e2:02:76:61:c4:3e:03:ea:d2:8a: + 24:d1 + +Verisign Class 1 Public Primary Certification Authority +======================================================= +MD5 Fingerprint: 97:60:E8:57:5F:D3:50:47:E5:43:0C:94:36:8A:B0:62 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 +NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD +VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp +bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N +H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR +4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN +BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo +EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 +FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx +lA== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + cd:ba:7f:56:f0:df:e4:bc:54:fe:22:ac:b3:72:aa:55 + Signature Algorithm: md2WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority + Validity + Not Before: Jan 29 00:00:00 1996 GMT + Not After : Aug 1 23:59:59 2028 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de: + b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46: + 88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c: + b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58: + 39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31: + ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e: + 45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9: + 63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba: + 2a:2f:31:aa:ee:a3:67:da:db + Exponent: 65537 (0x10001) + Signature Algorithm: md2WithRSAEncryption + 4c:3f:b8:8b:c6:68:df:ee:43:33:0e:5d:e9:a6:cb:07:84:4d: + 7a:33:ff:92:1b:f4:36:ad:d8:95:22:36:68:11:6c:7c:42:cc: + f3:9c:2e:c4:07:3f:14:b0:0f:4f:ff:90:92:76:f9:e2:bc:4a: + e9:8f:cd:a0:80:0a:f7:c5:29:f1:82:22:5d:b8:b1:dd:81:23: + a3:7b:25:15:46:30:79:16:f8:ea:05:4b:94:7f:1d:c2:1c:c8: + e3:b7:f4:10:40:3c:13:c3:5f:1f:53:e8:48:e4:86:b4:7b:a1: + 35:b0:7b:25:ba:b8:d3:8e:ab:3f:38:9d:00:34:00:98:f3:d1: + 71:94 + +Verisign Class 1 Public Primary Certification Authority - G2 +============================================================ +MD5 Fingerprint: F2:7D:E9:54:E4:A3:22:0D:76:9F:E7:0B:BB:B3:24:2B +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEDnKVIn+UCIy/jLZ2/sbhBkwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTE4MDUxODIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK +VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm +Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAIv3GhDOdlwHq4OZ3BeAbzQ5XZg+a3Is4cei +e0ApuXiIukzFo2penm574/ICQQxmvq37rqIUzpLzojSLtLK2JPLl1eDI5WJthHvL +vrsDi3xXyvA3qZCviu4Dvh0onNkmdqDNxJ1O8K4HFtW+r1cIatCgQkJCHvQgzKV4 +gpUmOIpH +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 39:ca:54:89:fe:50:22:32:fe:32:d9:db:fb:1b:84:19 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Validity + Not Before: May 18 00:00:00 1998 GMT + Not After : May 18 23:59:59 2018 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76: + 31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52: + 36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e: + 8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35: + eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5: + e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d: + 8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b: + 51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea: + 09:40:be:73:92:3d:6b:e7:75 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 8b:f7:1a:10:ce:76:5c:07:ab:83:99:dc:17:80:6f:34:39:5d: + 98:3e:6b:72:2c:e1:c7:a2:7b:40:29:b9:78:88:ba:4c:c5:a3: + 6a:5e:9e:6e:7b:e3:f2:02:41:0c:66:be:ad:fb:ae:a2:14:ce: + 92:f3:a2:34:8b:b4:b2:b6:24:f2:e5:d5:e0:c8:e5:62:6d:84: + 7b:cb:be:bb:03:8b:7c:57:ca:f0:37:a9:90:af:8a:ee:03:be: + 1d:28:9c:d9:26:76:a0:cd:c4:9d:4e:f0:ae:07:16:d5:be:af: + 57:08:6a:d0:a0:42:42:42:1e:f4:20:cc:a5:78:82:95:26:38: + 8a:47 + +Verisign Class 1 Public Primary Certification Authority - G3 +============================================================ +MD5 Fingerprint: B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 +nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO +8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV +ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb +PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 +6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr +n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a +qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 +wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs +pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 +E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 + Validity + Not Before: Oct 1 00:00:00 1999 GMT + Not After : Jul 16 23:59:59 2036 GMT + Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d: + dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d: + ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8: + de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e: + f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6: + 6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10: + 78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3: + 55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca: + 14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff: + c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e: + 54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27: + a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb: + 30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29: + bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12: + 5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81: + 15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7: + a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76: + d1:3d + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a: + aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9: + fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c: + b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7: + b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0: + 97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f: + 04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54: + 73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8: + 1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec: + a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38: + dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f: + b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50: + ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef: + 86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f: + a4:ef:3f:ee + +Verisign Class 2 Public Primary Certification Authority +======================================================= +MD5 Fingerprint: B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E +PEM Data: +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh +YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 +FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg +J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc +r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 2d:1b:fc:4a:17:8d:a3:91:eb:e7:ff:f5:8b:45:be:0b + Signature Algorithm: md2WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority + Validity + Not Before: Jan 29 00:00:00 1996 GMT + Not After : Aug 1 23:59:59 2028 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:b6:5a:8b:a3:0d:6a:23:83:80:6b:cf:39:87:f4: + 21:13:33:06:4c:25:a2:ed:55:12:97:c5:a7:80:b9: + fa:83:c1:20:a0:fa:2f:15:0d:7c:a1:60:6b:7e:79: + 2c:fa:06:0f:3a:ae:f6:1b:6f:b1:d2:ff:2f:28:52: + 5f:83:7d:4b:c4:7a:b7:f8:66:1f:80:54:fc:b7:c2: + 8e:59:4a:14:57:46:d1:9a:93:be:41:91:03:bb:15: + 80:93:5c:eb:e7:cc:08:6c:3f:3e:b3:4a:fc:ff:4b: + 6c:23:d5:50:82:26:44:19:8e:23:c3:71:ea:19:24: + 47:04:9e:75:bf:c8:a6:00:1f + Exponent: 65537 (0x10001) + Signature Algorithm: md2WithRSAEncryption + 8a:1b:2b:fa:39:c1:74:d7:5e:d8:19:64:a2:58:4a:2d:37:e0: + 33:47:0f:ac:ed:f7:aa:db:1e:e4:8b:06:5c:60:27:ca:45:52: + ce:16:ef:3f:06:64:e7:94:68:7c:60:33:15:11:69:af:9d:62: + 8d:a3:03:54:6b:a6:be:e5:ee:05:18:60:04:bf:42:80:fd:d0: + a8:a8:1e:01:3b:f7:a3:5c:af:a3:dc:e6:26:80:23:3c:b8:44: + 74:f7:0a:ae:49:8b:61:78:cc:24:bf:88:8a:a7:0e:ea:73:19: + 41:fd:4d:03:f0:88:d1:e5:78:8d:a5:2a:4f:f6:97:0d:17:77: + ca:d8 + +Verisign Class 2 Public Primary Certification Authority - G2 +============================================================ +MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns +YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe +Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj +IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx +KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM +HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw +DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC +AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji +nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX +rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn +jBJ7xUS0rg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Validity + Not Before: May 18 00:00:00 1998 GMT + Not After : Aug 1 23:59:59 2028 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c: + 0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be: + 5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99: + 1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08: + 2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4: + 42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f: + 99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9: + 86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff: + 0d:6c:f5:2d:0e:6d:ce:7f:77 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8: + 68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4: + ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0: + d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30: + 17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a: + 54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4: + 12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44: + b4:ae + +Verisign Class 2 Public Primary Certification Authority - G3 +============================================================ +MD5 Fingerprint: F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy +aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp +Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV +BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp +Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g +Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU +J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO +JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY +wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o +koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN +qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E +Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe +xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u +7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI +sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP +cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 + Validity + Not Before: Oct 1 00:00:00 1999 GMT + Not After : Jul 16 23:59:59 2036 GMT + Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd: + a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd: + 3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1: + a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10: + ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02: + 37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7: + 3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56: + 69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3: + 48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32: + dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7: + 20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2: + ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8: + 16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5: + 1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb: + 1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2: + ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11: + 60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8: + 3e:89 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7: + de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5: + fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4: + e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33: + 3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55: + a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4: + 1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63: + 63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf: + 7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64: + 48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46: + 23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45: + aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43: + e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33: + 5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf: + 4b:4b:df:2a + +Verisign Class 3 Public Primary Certification Authority +======================================================= +MD5 Fingerprint: 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE +BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is +I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do +lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc +AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf + Signature Algorithm: md2WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority + Validity + Not Before: Jan 29 00:00:00 1996 GMT + Not After : Aug 1 23:59:59 2028 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40: + db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9: + 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03: + 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2: + 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f: + 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23: + 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85: + e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2: + 71:64:4c:65:2e:81:68:45:a7 + Exponent: 65537 (0x10001) + Signature Algorithm: md2WithRSAEncryption + bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84: + 8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f: + 6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57: + 81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c: + 9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45: + 4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6: + 62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64: + 0d:64 + +Verisign Class 3 Public Primary Certification Authority - G2 +============================================================ +MD5 Fingerprint: A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 +pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 +13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk +U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i +F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY +oJ2daZH9 +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Validity + Not Before: May 18 00:00:00 1998 GMT + Not After : Aug 1 23:59:59 2028 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99: + 1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20: + 84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9: + 25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b: + 33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8: + 6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43: + 91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97: + 37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69: + 61:f8:9b:1d:1c:89:4f:5c:67 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67: + 70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b: + 64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27: + 3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01: + ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69: + 92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59: + 57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69: + 91:fd + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +MD5 Fingerprint: CD:68:B6:A7:C7:C4:CE:75:E0:1D:4F:57:44:61:92:09 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 + Validity + Not Before: Oct 1 00:00:00 1999 GMT + Not After : Jul 16 23:59:59 2036 GMT + Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd: + f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5: + 17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20: + c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad: + 2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04: + 58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0: + 58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32: + 6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88: + e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96: + 55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79: + 65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8: + 46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46: + b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c: + 1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76: + ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63: + d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e: + 1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9: + 57:97 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de: + db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f: + 37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09: + 5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5: + 23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f: + d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8: + ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38: + 62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe: + 7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69: + 17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00: + cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2: + c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af: + 0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e: + 81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b: + f1:7d:dd:11 + +Verisign Class 4 Public Primary Certification Authority - G2 +============================================================ +MD5 Fingerprint: 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60 +PEM Data: +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM +HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK +qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj +cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y +cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP +T8qAkbYp +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 32:88:8e:9a:d2:f5:eb:13:47:f8:7f:c4:20:37:25:f8 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Validity + Not Before: May 18 00:00:00 1998 GMT + Not After : Aug 1 23:59:59 2028 GMT + Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:ba:f0:e4:cf:f9:c4:ae:85:54:b9:07:57:f9:8f: + c5:7f:68:11:f8:c4:17:b0:44:dc:e3:30:73:d5:2a: + 62:2a:b8:d0:cc:1c:ed:28:5b:7e:bd:6a:dc:b3:91: + 24:ca:41:62:3c:fc:02:01:bf:1c:16:31:94:05:97: + 76:6e:a2:ad:bd:61:17:6c:4e:30:86:f0:51:37:2a: + 50:c7:a8:62:81:dc:5b:4a:aa:c1:a0:b4:6e:eb:2f: + e5:57:c5:b1:2b:40:70:db:5a:4d:a1:8e:1f:bd:03: + 1f:d8:03:d4:8f:4c:99:71:bc:e2:82:cc:58:e8:98: + 3a:86:d3:86:38:f3:00:29:1f + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 85:8c:12:c1:a7:b9:50:15:7a:cb:3e:ac:b8:43:8a:dc:aa:dd: + 14:ba:89:81:7e:01:3c:23:71:21:88:2f:82:dc:63:fa:02:45: + ac:45:59:d7:2a:58:44:5b:b7:9f:81:3b:92:68:3d:e2:37:24: + f5:7b:6c:8f:76:35:96:09:a8:59:9d:b9:ce:23:ab:74:d6:83: + fd:32:73:27:d8:69:3e:43:74:f6:ae:c5:89:9a:e7:53:7c:e9: + 7b:f6:4b:f3:c1:65:83:de:8d:8a:9c:3c:88:8d:39:59:fc:aa: + 3f:22:8d:a1:c1:66:50:81:72:4c:ed:22:64:4f:4f:ca:80:91: + b6:29 + +Verisign Class 4 Public Primary Certification Authority - G3 +============================================================ +MD5 Fingerprint: DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF +PEM Data: +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 +GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ ++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd +U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm +NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY +ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ +ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 +CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq +g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c +2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ +bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7 + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 + Validity + Not Before: Oct 1 00:00:00 1999 GMT + Not After : Jul 16 23:59:59 2036 GMT + Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56: + ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59: + de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4: + e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09: + fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2: + 9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86: + 52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e: + d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46: + 33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1: + 89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88: + 02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d: + a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea: + c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0: + ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2: + 3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7: + 45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34: + 66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97: + ef:03 + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5: + 0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be: + 3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3: + 05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02: + 00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1: + 32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b: + 00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52: + e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14: + 5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc: + d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83: + 46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0: + a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0: + 21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01: + a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3: + 35:60:91:ce + +Verisign/RSA Commercial CA +========================== +MD5 Fingerprint: 5A:0B:DD:42:9E:B2:B4:62:97:32:7F:7F:0A:AA:9A:39 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw +HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy +Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05 +OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT +ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o +975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/ +touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE +7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j +9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI +0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb +MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU= +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 02:41:00:00:16 + Signature Algorithm: md2WithRSAEncryption + Issuer: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority + Validity + Not Before: Nov 4 18:58:34 1994 GMT + Not After : Nov 3 18:58:34 1999 GMT + Subject: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1000 bit) + Modulus (1000 bit): + 00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e: + c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96: + 3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d: + 03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6: + 8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2: + 2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c: + d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82: + a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9: + fd:bd:3b:69:d9:eb + Exponent: 65537 (0x10001) + Signature Algorithm: md2WithRSAEncryption + 76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49: + bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a: + 83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48: + d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79: + 35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50: + bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b: + 53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5 + +Verisign/RSA Secure Server CA +============================= +MD5 Fingerprint: 74:7B:82:03:43:F0:00:9E:6B:B3:EC:47:BF:85:A5:93 +PEM Data: +-----BEGIN CERTIFICATE----- +MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD +VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 +MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV +BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy +dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ +ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII +0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI +uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI +hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 +YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc +1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== +-----END CERTIFICATE----- +Certificate Ingredients: + Data: + Version: 1 (0x0) + Serial Number: + 02:ad:66:7e:4e:45:fe:5e:57:6f:3c:98:19:5e:dd:c0 + Signature Algorithm: md2WithRSAEncryption + Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority + Validity + Not Before: Nov 9 00:00:00 1994 GMT + Not After : Jan 7 23:59:59 2010 GMT + Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1000 bit) + Modulus (1000 bit): + 00:92:ce:7a:c1:ae:83:3e:5a:aa:89:83:57:ac:25: + 01:76:0c:ad:ae:8e:2c:37:ce:eb:35:78:64:54:03: + e5:84:40:51:c9:bf:8f:08:e2:8a:82:08:d2:16:86: + 37:55:e9:b1:21:02:ad:76:68:81:9a:05:a2:4b:c9: + 4b:25:66:22:56:6c:88:07:8f:f7:81:59:6d:84:07: + 65:70:13:71:76:3e:9b:77:4c:e3:50:89:56:98:48: + b9:1d:a7:29:1a:13:2e:4a:11:59:9c:1e:15:d5:49: + 54:2c:73:3a:69:82:b1:97:39:9c:6d:70:67:48:e5: + dd:2d:d6:c8:1e:7b + Exponent: 65537 (0x10001) + Signature Algorithm: md2WithRSAEncryption + 65:dd:7e:e1:b2:ec:b0:e2:3a:e0:ec:71:46:9a:19:11:b8:d3: + c7:a0:b4:03:40:26:02:3e:09:9c:e1:12:b3:d1:5a:f6:37:a5: + b7:61:03:b6:5b:16:69:3b:c6:44:08:0c:88:53:0c:6b:97:49: + c7:3e:35:dc:6c:b9:bb:aa:df:5c:bb:3a:2f:93:60:b6:a9:4b: + 4d:f2:20:f7:cd:5f:7f:64:7b:8e:dc:00:5c:d7:fa:77:ca:39: + 16:59:6f:0e:ea:d3:b5:83:7f:4d:4d:42:56:76:b4:c9:5f:04: + f8:38:f8:eb:d2:5f:75:5f:cd:7b:fc:e5:8e:80:7c:fc:50 + +CA WEB.DE TrustCenter +======================================= +MD5 Fingerprint=BD:D4:F5:1A:7D:70:46:50:DB:6F:4D:68:41:83:99:93 +PEM-Data: +-----BEGIN CERTIFICATE----- +MIIH1TCCBb2gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBjTELMAkGA1UEBhMCREUx +GjAYBgNVBAcTEUQtNzYyMjcgS2FybHNydWhlMRIwEAYDVQQKEwlXRUIuREUgQUcx +FDASBgNVBAsTC1RydXN0Q2VudGVyMRswGQYDVQQDExJXRUIuREUgVHJ1c3RDZW50 +ZXIxGzAZBgkqhkiG9w0BCQEWDHRydXN0QHdlYi5kZTAeFw05OTA2MjMwOTE5NTRa +Fw0wOTA2MjAwOTE5NTRaMIGNMQswCQYDVQQGEwJERTEaMBgGA1UEBxMRRC03NjIy +NyBLYXJsc3J1aGUxEjAQBgNVBAoTCVdFQi5ERSBBRzEUMBIGA1UECxMLVHJ1c3RD +ZW50ZXIxGzAZBgNVBAMTEldFQi5ERSBUcnVzdENlbnRlcjEbMBkGCSqGSIb3DQEJ +ARYMdHJ1c3RAd2ViLmRlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +wSWKmSp6XW+aYJsfYWhvxNgo3uViORtbNcpnkcLeAA4zobLEdqno80YInjFgWq8d +f5U6jOFIAzPdRCFqsj6LQDppQq22q/sal4rOVVt3t6XlWgDBfF8K+iQEQQd2TNMS +J7pd+MUY2IyBGjGqGINRKsoU/sd1nwPRm2tv3VhIlDOcxhJIx9pm2+hNmaJEz55a +ma+sQl8+odtfsNNrYv1LitbqELP/hsRwWzE30m1cHvcy6yczH0GmKB8seSD69qjK +HJlYa+qPrSjIwEhhUNOcoNx227B9ZJFETrTdW2q5vp4BAPoX2nvRm5ynAdaHn0LI +pYrhwpEiTb121ksguyDH+AasBMZ6gVP0qTvI9awRfUPyZsxWXeBDaNpw2zkqnIaj +QIlXzVYKSBaR4TSDQ9L+bYNDSCyERdSFyJeQ2UPL/jxuS94jIbGiWE07X7wuSoA2 +BB0NKtUviZT/jyNzOGfu2TNcHkjc6x6NQMJanxKO5VZDfnfQUyWshQb99IelpjsS +tPc//U04zMfEoJFvhosBIXKwthN7F7WE7KRhILTBwX2i+4d2doVA25OZHlcZI1L5 +K391IzzqeJdrM4Nrc0MnAsRY+sZJVmUi8u9lHsxCjMht3DpJ1JALGhj7hTDPsxjX +eGAUZIbq9rQ/fhN0UxXkO/wQfWVsq1ZO3XfgL4tE5OkCAwEAAaOCAjwwggI4MAwG +A1UdEwQFMAMBAf8wSQYDVR0gBEIwQDA+BgtghkgBhvhFAQcBATAvMC0GCCsGAQUF +BwIBFiFodHRwOi8vdHJ1c3Qud2ViLmRlL0hpbGZlL1BvbGljeS8wggEpBglghkgB +hvhCAQ0EggEaFoIBFlRydXN0Q2VudGVyIHZvbiBXRUIuREUgLSBSb290LVplcnRp +ZmlrYXQKCkRpZSBOdXR6dW5nIGRpZXNlcyBaZXJ0aWZpa2F0ZXMgd2lyZCB2b24g +ZGVuIEFsbGdlbWVpbmVuIEdlc2No5GZ0c2JlZGluZ3VuZ2VuIChBR0IpIC8gWmVy +dGlmaXppZXJ1bmdzcmljaHRsaW5pZW4gZGVzIFdFQi5ERSBUcnVzdENlbnRlcnMg +Z2VyZWdlbHQuCkRpZSBBR0JzIHVuZCBaZXJ0aWZpemllcnVuZ3NyaWNodGxpbmll +biBzaW5kIHVudGVyIGh0dHA6Ly90cnVzdC53ZWIuZGUvSGlsZmUvIGVpbnNlaGJh +ci4KMBoGCWCGSAGG+EIBCAQNFgsvSGlsZmUvQUdCLzAWBglghkgBhvhCAQcECRYH +L3JuLz9zPTAWBglghkgBhvhCAQMECRYHL3J2Lz9zPTAjBglghkgBhvhCAQIEFhYU +aHR0cHM6Ly90cnVzdC53ZWIuZGUwEQYJYIZIAYb4QgEBBAQDAgAHMCwGCWCGSAGG ++EIBBAQfFh1odHRwczovL3RydXN0LndlYi5kZS9ydkNBLz9zPTANBgkqhkiG9w0B +AQQFAAOCAgEALT0XbRQJA+pMrUUT4tm1nCnPkm3+iz6Av2tf3BcONJrNVDgQGDN4 +HL3iRMfLZvzSuvJ06BXl3ogqAkSUJxfBd7fYRi+rhgjKxuJZwUNS06a0eGlo12ol +G4DOz2VrNFDmRzEIRv6DgnnIj7cjo9MPefFi/RJgRHQYP33dyP9dycKKsA0Q7xAI +6JvBduOaeAx/LrGE2JkcPk26oDkpPDFOh5FoQ6LffwFv5086IIa6uK6X9QPdwtzy +apBp0YXeB/S+o2ggwA4n88Ht+U/aBbsCEoy6tbdosLqmLD2SkE4rFNJNBPLcw37o +ITLKogpZnIEYWaz0Tcavvk90ytaCP5vXmSaQSjmeUQCgK/cXJwfp1QRUhkG4UU+U +CvsmnhmGnwQLrnpUgQehw1M/KP2bRr9akBVIabic+yjKOUJuap1uhOosaQjsThgq +9uqYIYZGS9YjN50kRjxndbNuJVuhMgJSDCPE+74feCcySfjhVxGVJVnJUDQZoqVW +/NqHaR07wAB6D1b+inaaKyz58Nw3D6yzBxpttZDTguWn+ry5eN6Um1Ez22Fs65Uo +eszLk3hHFUnImzdd5QtFJ40JGxuiZoCpZhyJNpAvGUwUMsbdrY+iEqisKGVF07rQ +D2H0VMBBKfqZr4BilkYTmnnciBN7OhOg2VDnyUNHxiIr3dT12oviZU8= +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=DE, L=D-76227 Karlsruhe, O=WEB.DE AG, OU=TrustCenter, CN=WEB.DE TrustCenter/Email=trust@web.de + Validity + Not Before: Jun 23 09:19:54 1999 GMT + Not After : Jun 20 09:19:54 2009 GMT + Subject: C=DE, L=D-76227 Karlsruhe, O=WEB.DE AG, OU=TrustCenter, CN=WEB.DE TrustCenter/Email=trust@web.de + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (4096 bit) + Modulus (4096 bit): + 00:c1:25:8a:99:2a:7a:5d:6f:9a:60:9b:1f:61:68: + 6f:c4:d8:28:de:e5:62:39:1b:5b:35:ca:67:91:c2: + de:00:0e:33:a1:b2:c4:76:a9:e8:f3:46:08:9e:31: + 60:5a:af:1d:7f:95:3a:8c:e1:48:03:33:dd:44:21: + 6a:b2:3e:8b:40:3a:69:42:ad:b6:ab:fb:1a:97:8a: + ce:55:5b:77:b7:a5:e5:5a:00:c1:7c:5f:0a:fa:24: + 04:41:07:76:4c:d3:12:27:ba:5d:f8:c5:18:d8:8c: + 81:1a:31:aa:18:83:51:2a:ca:14:fe:c7:75:9f:03: + d1:9b:6b:6f:dd:58:48:94:33:9c:c6:12:48:c7:da: + 66:db:e8:4d:99:a2:44:cf:9e:5a:99:af:ac:42:5f: + 3e:a1:db:5f:b0:d3:6b:62:fd:4b:8a:d6:ea:10:b3: + ff:86:c4:70:5b:31:37:d2:6d:5c:1e:f7:32:eb:27: + 33:1f:41:a6:28:1f:2c:79:20:fa:f6:a8:ca:1c:99: + 58:6b:ea:8f:ad:28:c8:c0:48:61:50:d3:9c:a0:dc: + 76:db:b0:7d:64:91:44:4e:b4:dd:5b:6a:b9:be:9e: + 01:00:fa:17:da:7b:d1:9b:9c:a7:01:d6:87:9f:42: + c8:a5:8a:e1:c2:91:22:4d:bd:76:d6:4b:20:bb:20: + c7:f8:06:ac:04:c6:7a:81:53:f4:a9:3b:c8:f5:ac: + 11:7d:43:f2:66:cc:56:5d:e0:43:68:da:70:db:39: + 2a:9c:86:a3:40:89:57:cd:56:0a:48:16:91:e1:34: + 83:43:d2:fe:6d:83:43:48:2c:84:45:d4:85:c8:97: + 90:d9:43:cb:fe:3c:6e:4b:de:23:21:b1:a2:58:4d: + 3b:5f:bc:2e:4a:80:36:04:1d:0d:2a:d5:2f:89:94: + ff:8f:23:73:38:67:ee:d9:33:5c:1e:48:dc:eb:1e: + 8d:40:c2:5a:9f:12:8e:e5:56:43:7e:77:d0:53:25: + ac:85:06:fd:f4:87:a5:a6:3b:12:b4:f7:3f:fd:4d: + 38:cc:c7:c4:a0:91:6f:86:8b:01:21:72:b0:b6:13: + 7b:17:b5:84:ec:a4:61:20:b4:c1:c1:7d:a2:fb:87: + 76:76:85:40:db:93:99:1e:57:19:23:52:f9:2b:7f: + 75:23:3c:ea:78:97:6b:33:83:6b:73:43:27:02:c4: + 58:fa:c6:49:56:65:22:f2:ef:65:1e:cc:42:8c:c8: + 6d:dc:3a:49:d4:90:0b:1a:18:fb:85:30:cf:b3:18: + d7:78:60:14:64:86:ea:f6:b4:3f:7e:13:74:53:15: + e4:3b:fc:10:7d:65:6c:ab:56:4e:dd:77:e0:2f:8b: + 44:e4:e9 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE + X509v3 Certificate Policies: + Policy: 2.16.840.1.113733.1.7.1.1 + CPS: http://trust.web.de/Hilfe/Policy/ + + Netscape Comment: + TrustCenter von WEB.DE - Root-Zertifikat + +Die Nutzung dieses Zertifikates wird von den Allgemeinen Geschäftsbedingungen (AGB) / Zertifizierungsrichtlinien des WEB.DE TrustCenters geregelt. +Die AGBs und Zertifizierungsrichtlinien sind unter http://trust.web.de/Hilfe/ einsehbar. + + Netscape CA Policy Url: + /Hilfe/AGB/ + Netscape Renewal Url: + /rn/?s= + Netscape Revocation Url: + /rv/?s= + Netscape Base Url: + https://trust.web.de + Netscape Cert Type: + SSL CA, S/MIME CA, Object Signing CA + Netscape CA Revocation Url: + https://trust.web.de/rvCA/?s= + Signature Algorithm: md5WithRSAEncryption + 2d:3d:17:6d:14:09:03:ea:4c:ad:45:13:e2:d9:b5:9c:29:cf: + 92:6d:fe:8b:3e:80:bf:6b:5f:dc:17:0e:34:9a:cd:54:38:10: + 18:33:78:1c:bd:e2:44:c7:cb:66:fc:d2:ba:f2:74:e8:15:e5: + de:88:2a:02:44:94:27:17:c1:77:b7:d8:46:2f:ab:86:08:ca: + c6:e2:59:c1:43:52:d3:a6:b4:78:69:68:d7:6a:25:1b:80:ce: + cf:65:6b:34:50:e6:47:31:08:46:fe:83:82:79:c8:8f:b7:23: + a3:d3:0f:79:f1:62:fd:12:60:44:74:18:3f:7d:dd:c8:ff:5d: + c9:c2:8a:b0:0d:10:ef:10:08:e8:9b:c1:76:e3:9a:78:0c:7f: + 2e:b1:84:d8:99:1c:3e:4d:ba:a0:39:29:3c:31:4e:87:91:68: + 43:a2:df:7f:01:6f:e7:4f:3a:20:86:ba:b8:ae:97:f5:03:dd: + c2:dc:f2:6a:90:69:d1:85:de:07:f4:be:a3:68:20:c0:0e:27: + f3:c1:ed:f9:4f:da:05:bb:02:12:8c:ba:b5:b7:68:b0:ba:a6: + 2c:3d:92:90:4e:2b:14:d2:4d:04:f2:dc:c3:7e:e8:21:32:ca: + a2:0a:59:9c:81:18:59:ac:f4:4d:c6:af:be:4f:74:ca:d6:82: + 3f:9b:d7:99:26:90:4a:39:9e:51:00:a0:2b:f7:17:27:07:e9: + d5:04:54:86:41:b8:51:4f:94:0a:fb:26:9e:19:86:9f:04:0b: + ae:7a:54:81:07:a1:c3:53:3f:28:fd:9b:46:bf:5a:90:15:48: + 69:b8:9c:fb:28:ca:39:42:6e:6a:9d:6e:84:ea:2c:69:08:ec: + 4e:18:2a:f6:ea:98:21:86:46:4b:d6:23:37:9d:24:46:3c:67: + 75:b3:6e:25:5b:a1:32:02:52:0c:23:c4:fb:be:1f:78:27:32: + 49:f8:e1:57:11:95:25:59:c9:50:34:19:a2:a5:56:fc:da:87: + 69:1d:3b:c0:00:7a:0f:56:fe:8a:76:9a:2b:2c:f9:f0:dc:37: + 0f:ac:b3:07:1a:6d:b5:90:d3:82:e5:a7:fa:bc:b9:78:de:94: + 9b:51:33:db:61:6c:eb:95:28:7a:cc:cb:93:78:47:15:49:c8: + 9b:37:5d:e5:0b:45:27:8d:09:1b:1b:a2:66:80:a9:66:1c:89: + 36:90:2f:19:4c:14:32:c6:dd:ad:8f:a2:12:a8:ac:28:65:45: + d3:ba:d0:0f:61:f4:54:c0:41:29:fa:99:af:80:62:96:46:13: + 9a:79:dc:88:13:7b:3a:13:a0:d9:50:e7:c9:43:47:c6:22:2b: + dd:d4:f5:da:8b:e2:65:4f diff --git a/contrib/colors.default b/contrib/colors.default new file mode 100644 index 0000000..84298e9 --- /dev/null +++ b/contrib/colors.default @@ -0,0 +1,23 @@ +# -*-muttrc-*- + +# Colors for use with xterm and the like, white background. + +color hdrdefault blue white +color quoted blue white +color signature red white +color attachment red white +color message brightred white +color error brightred white +color indicator brightyellow red +color status brightgreen blue +color tree black white +color normal black white +color markers red white +color search white black +color tilde brightmagenta white +color index blue white ~F +color index red white "~N|~O" + + +# color body brightblack white '\*+[^*]+\*+' +# color body brightblack white '_+[^_]+_+' diff --git a/contrib/colors.linux b/contrib/colors.linux new file mode 100644 index 0000000..1366a9c --- /dev/null +++ b/contrib/colors.linux @@ -0,0 +1,22 @@ +# -*-muttrc-*- + +# Palette for use with the Linux console. Black background. + +color hdrdefault blue black +color quoted blue black +color signature blue black +color attachment red black +color message brightred black +color error brightred black +color indicator black red +color status brightgreen blue +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index blue black ~F +color index red black "~N|~O" + +# color body brightwhite black '\*+[^*]+\*+' +# color body brightwhite black '_+[^_]+_+' diff --git a/contrib/gpg.rc b/contrib/gpg.rc new file mode 100644 index 0000000..8b567ef --- /dev/null +++ b/contrib/gpg.rc @@ -0,0 +1,82 @@ +# -*-muttrc-*- +# +# Command formats for gpg. +# +# This version uses gpg-2comp from +# http://muppet.faveve.uni-stuttgart.de/~gero/gpg-2comp.tar.gz +# +# $Id: gpg.rc,v 3.1 2002/03/26 22:23:58 roessler Exp $ +# +# %p The empty string when no passphrase is needed, +# the string "PGPPASSFD=0" if one is needed. +# +# This is mostly used in conditional % sequences. +# +# %f Most PGP commands operate on a single file or a file +# containing a message. %f expands to this file's name. +# +# %s When verifying signatures, there is another temporary file +# containing the detached signature. %s expands to this +# file's name. +# +# %a In "signing" contexts, this expands to the value of the +# configuration variable $pgp_sign_as. You probably need to +# use this within a conditional % sequence. +# +# %r In many contexts, mutt passes key IDs to pgp. %r expands to +# a list of key IDs. + +# Note that we explicitly set the comment armor header since GnuPG, when used +# in some localiaztion environments, generates 8bit data in that header, thereby +# breaking PGP/MIME. + +# decode application/pgp +set pgp_decode_command="/usr/bin/gpg --charset utf-8 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" + +# verify a pgp/mime signature +set pgp_verify_command="/usr/bin/gpg --no-verbose --quiet --batch --output - --verify %s %f" + +# decrypt a pgp/mime attachment +set pgp_decrypt_command="/usr/bin/gpg --passphrase-fd 0 --no-verbose --quiet --batch --output - %f" + +# create a pgp/mime signed attachment +# set pgp_sign_command="/usr/bin/gpg-2comp --comment '' --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f" +set pgp_sign_command="/usr/bin/gpg --no-verbose --batch --quiet --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f" + +# create a application/pgp signed (old-style) message +# set pgp_clearsign_command="/usr/bin/gpg-2comp --comment '' --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f" +set pgp_clearsign_command="/usr/bin/gpg --charset utf-8 --no-verbose --batch --quiet --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f" + +# create a pgp/mime encrypted attachment +# set pgp_encrypt_only_command="pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" +set pgp_encrypt_only_command="pgpewrap /usr/bin/gpg --charset utf-8 --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" + +# create a pgp/mime encrypted and signed attachment +# set pgp_encrypt_sign_command="pgpewrap gpg-2comp --passphrase-fd 0 -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" +set pgp_encrypt_sign_command="pgpewrap /usr/bin/gpg --charset utf-8 --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" + +# import a key into the public key ring +set pgp_import_command="/usr/bin/gpg --no-verbose --import -v %f" + +# export a key from the public key ring +set pgp_export_command="/usr/bin/gpg --no-verbose --export --armor %r" + +# verify a key +set pgp_verify_key_command="/usr/bin/gpg --verbose --batch --fingerprint --check-sigs %r" + +# read in the public key ring +set pgp_list_pubring_command="/usr/bin/gpg --no-verbose --batch --quiet --with-colons --list-keys %r" + +# read in the secret key ring +set pgp_list_secring_command="/usr/bin/gpg --no-verbose --batch --quiet --with-colons --list-secret-keys %r" + +# fetch keys +# set pgp_getkeys_command="pkspxycwrap %r" + +# pattern for good signature - may need to be adapted to locale! + +# set pgp_good_sign="^gpg: Good signature from" + +# OK, here's a version which uses gnupg's message catalog: +set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`" + diff --git a/contrib/iconv/README b/contrib/iconv/README new file mode 100644 index 0000000..1a3135c --- /dev/null +++ b/contrib/iconv/README @@ -0,0 +1,15 @@ +This directory contains sample collections of iconv-hooks for +various platforms. The files have been auto-generated from the +source code of Bruno Haible's libiconv implementation, version 1.5.1. + +libiconv is available from . + +If you want to re-generate the files from a newer version of +libiconv, just type: + + rm -f *.rc + ./make.sh + +Note, however, that make.sh isn't guaranteed to run on any system +but the one used for generating these files. + diff --git a/contrib/iconv/iconv.aix-3.2.5.rc b/contrib/iconv/iconv.aix-3.2.5.rc new file mode 100644 index 0000000..45fe632 --- /dev/null +++ b/contrib/iconv/iconv.aix-3.2.5.rc @@ -0,0 +1,2 @@ +iconv-hook CP850 IBM-850 +iconv-hook ISO-8859-1 ISO8859-1 diff --git a/contrib/iconv/iconv.aix-4.1.5.rc b/contrib/iconv/iconv.aix-4.1.5.rc new file mode 100644 index 0000000..6481a25 --- /dev/null +++ b/contrib/iconv/iconv.aix-4.1.5.rc @@ -0,0 +1,13 @@ +iconv-hook CP1046 IBM-1046 +iconv-hook CP850 IBM-850 +iconv-hook CP856 IBM-856 +iconv-hook CP932 IBM-932 +iconv-hook EUC-CN IBM-eucCN +iconv-hook EUC-JP IBM-eucJP +iconv-hook EUC-KR IBM-eucKR +iconv-hook EUC-TW IBM-eucTW +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-6 ISO8859-6 +iconv-hook ISO-8859-8 ISO8859-8 diff --git a/contrib/iconv/iconv.aix-4.2.0.rc b/contrib/iconv/iconv.aix-4.2.0.rc new file mode 100644 index 0000000..aeb5327 --- /dev/null +++ b/contrib/iconv/iconv.aix-4.2.0.rc @@ -0,0 +1,18 @@ +iconv-hook BIG5 big5 +iconv-hook CP1046 IBM-1046 +iconv-hook CP850 IBM-850 +iconv-hook CP856 IBM-856 +iconv-hook CP922 IBM-922 +iconv-hook CP932 IBM-932 +iconv-hook EUC-CN IBM-eucCN +iconv-hook EUC-JP IBM-eucJP +iconv-hook EUC-KR IBM-eucKR +iconv-hook EUC-TW IBM-eucTW +iconv-hook ISO-8859-13 IBM-921 +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-6 ISO8859-6 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-8 ISO8859-8 +iconv-hook ISO-8859-9 ISO8859-9 diff --git a/contrib/iconv/iconv.aix-4.3.2.rc b/contrib/iconv/iconv.aix-4.3.2.rc new file mode 100644 index 0000000..f0aa365 --- /dev/null +++ b/contrib/iconv/iconv.aix-4.3.2.rc @@ -0,0 +1,23 @@ +iconv-hook BIG5 big5 +iconv-hook CP1046 IBM-1046 +iconv-hook CP1124 IBM-1124 +iconv-hook CP1129 IBM-1129 +iconv-hook CP1252 IBM-1252 +iconv-hook CP850 IBM-850 +iconv-hook CP856 IBM-856 +iconv-hook CP922 IBM-922 +iconv-hook CP932 IBM-932 +iconv-hook CP943 IBM-943 +iconv-hook EUC-CN IBM-eucCN +iconv-hook EUC-JP IBM-eucJP +iconv-hook EUC-KR IBM-eucKR +iconv-hook EUC-TW IBM-eucTW +iconv-hook ISO-8859-13 IBM-921 +iconv-hook ISO-8859-15 ISO8859-15 +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-6 ISO8859-6 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-8 ISO8859-8 +iconv-hook ISO-8859-9 ISO8859-9 diff --git a/contrib/iconv/iconv.freebsd-3.3.rc b/contrib/iconv/iconv.freebsd-3.3.rc new file mode 100644 index 0000000..24e8bbb --- /dev/null +++ b/contrib/iconv/iconv.freebsd-3.3.rc @@ -0,0 +1,6 @@ +iconv-hook ASCII +iconv-hook CP866 +iconv-hook ISO-8859-15 +iconv-hook ISO-8859-1 +iconv-hook ISO-8859-2 +iconv-hook KOI8-R diff --git a/contrib/iconv/iconv.glibc-2.1.3.rc b/contrib/iconv/iconv.glibc-2.1.3.rc new file mode 100644 index 0000000..4003291 --- /dev/null +++ b/contrib/iconv/iconv.glibc-2.1.3.rc @@ -0,0 +1 @@ +iconv-hook ISO-8859-1 ANSI_X3.4-1968 diff --git a/contrib/iconv/iconv.glibc-2.1.90.rc b/contrib/iconv/iconv.glibc-2.1.90.rc new file mode 100644 index 0000000..3ba121e --- /dev/null +++ b/contrib/iconv/iconv.glibc-2.1.90.rc @@ -0,0 +1 @@ +iconv-hook ASCII ANSI_X3.4-1968 diff --git a/contrib/iconv/iconv.hpux-10.01.rc b/contrib/iconv/iconv.hpux-10.01.rc new file mode 100644 index 0000000..adf5e19 --- /dev/null +++ b/contrib/iconv/iconv.hpux-10.01.rc @@ -0,0 +1,15 @@ +iconv-hook EUC-CN hp15CN +iconv-hook EUC-TW eucTW +iconv-hook HP-ARABIC8 arabic8 +iconv-hook HP-GREEK8 greek8 +iconv-hook HP-HEBREW8 hebrew8 +iconv-hook HP-ROMAN8 roman8 +iconv-hook HP-TURKISH8 turkish8 +iconv-hook ISO-8859-1 iso88591 +iconv-hook ISO-8859-2 iso88592 +iconv-hook ISO-8859-5 iso88595 +iconv-hook ISO-8859-6 iso88596 +iconv-hook ISO-8859-7 iso88597 +iconv-hook ISO-8859-8 iso88598 +iconv-hook ISO-8859-9 iso88599 +iconv-hook TIS-620 tis620 diff --git a/contrib/iconv/iconv.hpux-10.20.rc b/contrib/iconv/iconv.hpux-10.20.rc new file mode 100644 index 0000000..38bc1a1 --- /dev/null +++ b/contrib/iconv/iconv.hpux-10.20.rc @@ -0,0 +1,15 @@ +iconv-hook HP-ARABIC8 arabic8 +iconv-hook HP-GREEK8 greek8 +iconv-hook HP-HEBREW8 hebrew8 +iconv-hook HP-ROMAN8 roman8 +iconv-hook HP-TURKISH8 turkish8 +iconv-hook ISO-8859-15 iso885915 +iconv-hook ISO-8859-1 iso88591 +iconv-hook ISO-8859-2 iso88592 +iconv-hook ISO-8859-5 iso88595 +iconv-hook ISO-8859-6 iso88596 +iconv-hook ISO-8859-7 iso88597 +iconv-hook ISO-8859-8 iso88598 +iconv-hook ISO-8859-9 iso88599 +iconv-hook TIS-620 tis620 +iconv-hook UTF-8 utf8 diff --git a/contrib/iconv/iconv.hpux-11.00.rc b/contrib/iconv/iconv.hpux-11.00.rc new file mode 100644 index 0000000..81bda2f --- /dev/null +++ b/contrib/iconv/iconv.hpux-11.00.rc @@ -0,0 +1,21 @@ +iconv-hook BIG5 big5 +iconv-hook EUC-CN hp15CN +iconv-hook EUC-JP eucJP +iconv-hook EUC-KR eucKR +iconv-hook EUC-TW eucTW +iconv-hook HP-ARABIC8 arabic8 +iconv-hook HP-GREEK8 greek8 +iconv-hook HP-HEBREW8 hebrew8 +iconv-hook HP-KANA8 kana8 +iconv-hook HP-ROMAN8 roman8 +iconv-hook HP-TURKISH8 turkish8 +iconv-hook ISO-8859-15 iso885915 +iconv-hook ISO-8859-1 iso88591 +iconv-hook ISO-8859-2 iso88592 +iconv-hook ISO-8859-5 iso88595 +iconv-hook ISO-8859-6 iso88596 +iconv-hook ISO-8859-7 iso88597 +iconv-hook ISO-8859-8 iso88598 +iconv-hook ISO-8859-9 iso88599 +iconv-hook TIS-620 tis620 +iconv-hook UTF-8 utf8 diff --git a/contrib/iconv/iconv.irix-6.5.rc b/contrib/iconv/iconv.irix-6.5.rc new file mode 100644 index 0000000..4cdba04 --- /dev/null +++ b/contrib/iconv/iconv.irix-6.5.rc @@ -0,0 +1,9 @@ +iconv-hook EUC-CN eucCN +iconv-hook EUC-JP eucJP +iconv-hook EUC-KR eucKR +iconv-hook EUC-TW eucTW +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-9 ISO8859-9 diff --git a/contrib/iconv/iconv.osf1-4.0a.rc b/contrib/iconv/iconv.osf1-4.0a.rc new file mode 100644 index 0000000..3e4bbdd --- /dev/null +++ b/contrib/iconv/iconv.osf1-4.0a.rc @@ -0,0 +1,3 @@ +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-9 ISO8859-9 diff --git a/contrib/iconv/iconv.osf1-4.0d.rc b/contrib/iconv/iconv.osf1-4.0d.rc new file mode 100644 index 0000000..837b02f --- /dev/null +++ b/contrib/iconv/iconv.osf1-4.0d.rc @@ -0,0 +1,4 @@ +iconv-hook CP850 cp850 +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-9 ISO8859-9 diff --git a/contrib/iconv/iconv.solaris-2.4.rc b/contrib/iconv/iconv.solaris-2.4.rc new file mode 100644 index 0000000..7981bf0 --- /dev/null +++ b/contrib/iconv/iconv.solaris-2.4.rc @@ -0,0 +1 @@ +iconv-hook bug diff --git a/contrib/iconv/iconv.solaris-2.5.1.rc b/contrib/iconv/iconv.solaris-2.5.1.rc new file mode 100644 index 0000000..673e46b --- /dev/null +++ b/contrib/iconv/iconv.solaris-2.5.1.rc @@ -0,0 +1 @@ +iconv-hook ISO-8859-1 ISO8859-1 diff --git a/contrib/iconv/iconv.solaris-2.6-cjk.rc b/contrib/iconv/iconv.solaris-2.6-cjk.rc new file mode 100644 index 0000000..d0cb0b2 --- /dev/null +++ b/contrib/iconv/iconv.solaris-2.6-cjk.rc @@ -0,0 +1,11 @@ +iconv-hook EUC-CN gb2312 +iconv-hook EUC-JP eucJP +iconv-hook EUC-KR 5601 +iconv-hook EUC-TW cns11643 +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-4 ISO8859-4 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-9 ISO8859-9 +iconv-hook Shift_JIS PCK diff --git a/contrib/iconv/iconv.solaris-2.6.rc b/contrib/iconv/iconv.solaris-2.6.rc new file mode 100644 index 0000000..8ecdb4d --- /dev/null +++ b/contrib/iconv/iconv.solaris-2.6.rc @@ -0,0 +1,6 @@ +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-4 ISO8859-4 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-9 ISO8859-9 diff --git a/contrib/iconv/iconv.solaris-2.7.rc b/contrib/iconv/iconv.solaris-2.7.rc new file mode 100644 index 0000000..e4850b1 --- /dev/null +++ b/contrib/iconv/iconv.solaris-2.7.rc @@ -0,0 +1,12 @@ +iconv-hook ASCII 646 +iconv-hook ISO-8859-15 ISO8859-15 +iconv-hook ISO-8859-1 ISO8859-1 +iconv-hook ISO-8859-2 ISO8859-2 +iconv-hook ISO-8859-4 ISO8859-4 +iconv-hook ISO-8859-5 ISO8859-5 +iconv-hook ISO-8859-6 ISO8859-6 +iconv-hook ISO-8859-7 ISO8859-7 +iconv-hook ISO-8859-8 ISO8859-8 +iconv-hook ISO-8859-9 ISO8859-9 +iconv-hook KOI8-R koi8-r +iconv-hook TIS-620 TIS620.2533 diff --git a/contrib/iconv/make.sh b/contrib/iconv/make.sh new file mode 100755 index 0000000..777d002 --- /dev/null +++ b/contrib/iconv/make.sh @@ -0,0 +1,25 @@ +#!/bin/sh -- + +# +# Create sample configuration files from the tables contained with libiconv. +# Copyright (C) 2001 Thomas Roessler +# +# This ugly shell script is free software; you can distribute and/or modify +# it under the terms of the GNU General Public License version 2 or later. +# + +LIBICONV="$1" +test -d $LIBICONV/libcharset/tools || { + echo "Sorry, I can't find libiconv's source!" >&2 ; + exit 1 ; +} + +for f in $LIBICONV/libcharset/tools/* ; do + rm -f tmp.rc. + ( head -3 $f | grep -q 'locale name.*locale charmap.*locale_charset' ) && ( + sed '1,/^$/d' $f | awk '($4 != $3) { printf ("iconv-hook %s %s\n", $4, $3); }' | \ + sed -e 's/^iconv-hook SJIS /iconv-hook Shift_JIS /gi' | + sort -u > tmp.rc ) + test -s tmp.rc && mv tmp.rc iconv.`basename $f`.rc + rm -f tmp.rc +done diff --git a/contrib/language.txt b/contrib/language.txt new file mode 100644 index 0000000..a09add2 --- /dev/null +++ b/contrib/language.txt @@ -0,0 +1,3261 @@ +# Translation file for PGP 2.6.3(i)n. + +# $Id: language.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $ + +# ------------------------------------------------------------------ +# Character set: ISO-Latin/1 (ISO 8859/1) +# Date revised: 7 October 1997 +# ------------------------------------------------------------------ +# Language: German/Deutsch (de) +# Translator: Frank Pruefer +# (based on the German translation for PGP 2.3a by +# Marc Aurel <4-tea-2@bong.saar.de>) +# ------------------------------------------------------------------ +# Language: Spanish/Español (es) +# Translator: Armando Ramos +# ------------------------------------------------------------------ +# Language: French/Francais (fr) +# Translator: Yanik Crépeau +# (based on the French translation for PGP 2.3a by +# Jean-loup Gailly ) +# ------------------------------------------------------------------ +# +# Additional language files may be obtained from: +# +# http://www.ifi.uio.no/pgp/modules.shtml +# ftp://ftp.ifi.uio.no/pub/pgp/lang/ +# +# ------------------------------------------------------------------ + +"\nClear signature file: %s\n" +de: "\nDateiname der Klartext-Unterschrift: %s\n" +es: "\nFichero normal con firma: %s\n" +fr: "\nFichier de signature en clair: %s\n" +muttde: "\nDateiname der Klartext-Unterschrift: %s\n" + +"\nTransport armor file: %s\n" +de: "\nDateiname der Versandhülle: %s\n" +es: "\nFichero con armadura: %s\n" +fr: "\nFichier de transport armure: %s\n" +muttde: "\nDateiname der Versandhülle: %s\n" + +"\nTransport armor files: " +de: "\nDateinamen der Versandhüllen: " +es: "\nFicheros con armadura: " +fr: "\nFichiers de transport armure: " +muttde: "\nDateinamen der Versandhüllen: " + +"Invalid ASCII armor header line: \"%.40s\"\n\ +ASCII armor corrupted.\n" +de: "\nUnzulässige Kopfzeile \"%.40s\"\n\ +in der ASCII-Versandhülle. Die Versandhülle ist deshalb ungültig.\n" +es: "Línea incorrecta en la cabecera de la armadura ASCII:\n\ +\"%.40s\"\n\ +Armadura dañada\n" +fr: "Entête enveloppe ASCII invalide: \"%.40s\"\n\ +l'enveloppe ASCII est corrompue" +muttde: "\nUnzulässige Kopfzeile \"%.40s\"\n\ +in der ASCII-Versandhülle. Die Versandhülle ist deshalb ungültig.\n" + +"Warning: Unrecognized ASCII armor header label \"%.*s:\" ignored.\n" +de: "\nWARNUNG: Der unbekannte Bezeichner \"%.*s:\"\n\ +in der ASCII-Versandhülle wurde überlesen.\n" +es: "Advertencia: Se ignora la etiqueta \"%.*s:\"\n\ +No se reconoce como cabecera de armadura ASCII\n" +fr: "Avertissement: Type d'entête de l'envloppe ASCII \"%.*s:\" ignoré\n" +muttde: "\nWARNUNG: Der unbekannte Bezeichner \"%.*s:\"\n\ +in der ASCII-Versandhülle wurde überlesen.\n" + +"ERROR: Bad ASCII armor checksum in section %d.\n" +de: "\nFEHLER: Falsche Prüfsumme im Abschnitt %d der Versandhülle.\n" +es: "ERROR: Suma incorrecta de comprobación en armadura ASCII,\n\ +sección %d.\n" +fr: "ERREUR: mauvaise vérification de l'armure ASCII dans la section %d.\n" +muttde: "\nFEHLER: Falsche Prüfsumme im Abschnitt %d der Versandhülle.\n" + +"Can't find section %d.\n" +de: "\nAbschnitt %d nicht gefunden.\n" +es: "No se encuentra la sección %d.\n" +fr: "Section %d introuvable.\n" +muttde: "\nAbschnitt %d nicht gefunden.\n" + +"Badly formed section delimiter, part %d.\n" +de: "\nFehlerhafter Abschnitts-Begrenzer im Teil %d.\n" +es: "Delimitador de sección mal formado, parte %d.\n" +fr: "Séparateurs de section mal formés" +muttde: "\nFehlerhafter Abschnitts-Begrenzer im Teil %d.\n" + +"Sections out of order, expected part %d" +de: "\nAbschnitte in falscher Reihenfolge.\nErwartet wurde Teil %d" +es: "Las secciones están desordenadas: se esperaba la parte %d" +fr: "Sections en désordre, partie %d attendue" +muttde: "\nAbschnitte in falscher Reihenfolge.\nErwartet wurde Teil %d" + +", got part %d\n" +de: ", angekommen ist Teil %d.\n" +es: ", se encuentra la parte %d\n" +fr: ", partie %d obtenue\n" +muttde: ", angekommen ist Teil %d.\n" + +"ERROR: Hit EOF in header of section %d.\n" +de: "\nFEHLER: EOF (Dateiende) im Header von Abschnitt %d.\n" +es: "ERROR: Hay un EOF (fin de fichero) en la cabecera de\ +la sección %d.\n" +fr: "ERREUR: find de fichier dans l'en-tête de la section %d.\n" +muttde: "\nFEHLER: EOF (Dateiende) im Header von Abschnitt %d.\n" + +"ERROR: Badly formed ASCII armor checksum, line %d.\n" +de: "\nFEHLER: Falsche Prüfsumme in Zeile %d der Versandhülle.\n" +es: "ERROR: Suma de comprobación mal construida en la armadura ASCII,\n\ +línea %d.\n" +fr: "ERREUR: Verification de l'armure ASCII mal formée, ligne %d.\n" +muttde: "\nFEHLER: Falsche Prüfsumme in Zeile %d der Versandhülle.\n" + +"WARNING: No ASCII armor `END' line.\n" +de: "\nWARNUNG: Keine 'END'-Zeile in der Versandhülle.\n" +es: "ADVERTENCIA: No hay línea `END' en la armadura ASCII.\n" +fr: "ATTENTION: Pas de ligne `END' dans l'armure ASCII.\n" +muttde: "\nWARNUNG: Keine 'END'-Zeile in der Versandhülle.\n" + +"ERROR: Bad ASCII armor character, line %d.\n" +de: "\nFEHLER: Unerlaubtes Zeichen in Zeile %d der Versandhülle.\n" +es: "ERROR: Carácter incorrecto en la armadura ASCII, línea %d.\n" +fr: "ERREUR: Mauvais charactère dans l'armure ASCII, ligne %d.\n" +muttde: "\nFEHLER: Unerlaubtes Zeichen in Zeile %d der Versandhülle.\n" + +"ERROR: Bad ASCII armor line length %d on line %d.\n" +de: "\nFEHLER: Falsche Zeilenlänge (%d) in Zeile %d der Versandhülle.\n" +es: "ERROR: Longitud incorrecta (%d) de línea en la armadura ASCII,\n\ +línea %d.\n" +fr: "ERREUR: Mauvais longueur de ligne %d dans l'armure ASCII, ligne %d.\n" +muttde: "\nFEHLER: Falsche Zeilenlänge (%d) in Zeile %d der Versandhülle.\n" + +"ERROR: Bad ASCII armor checksum" +de: "\nFEHLER: Falsche Prüfsumme der Versandhülle" +es: "ERROR: Suma incorrecta de comprobación en la armadura ASCII" +fr: "ERREUR de vérification dans l'armure ASCII" +muttde: "\nFEHLER: Falsche Prüfsumme der Versandhülle" + +" in section %d" +de: " im Abschnitt %d.\n" +es: " en la sección %d" +fr: " dans la section %d" +muttde: " im Abschnitt %d.\n" + +"Warning: Transport armor lacks a checksum.\n" +de: "\nWARNUNG: Die Prüfsumme der Versandhülle fehlt.\n" +es: "Advertencia: La armadura de transporte no lleva suma de\ +comprobación.\n" +fr: "Attention: l'armure de transport n'a pas de vérification.\n" +muttde: "\nWARNUNG: Die Prüfsumme der Versandhülle fehlt.\n" + +"ERROR: Can't find file %s\n" +de: "\nFEHLER: Datei '%s' nicht gefunden.\n" +es: "ERROR: No se encuentra el fichero %s\n" +fr: "ERREUR: Fichier %s introuvable\n" +muttde: "\nFEHLER: Datei '%s' nicht gefunden.\n" + +"ERROR: No ASCII armor `BEGIN' line!\n" +de: "\nFEHLER: Keine 'BEGIN'-Zeile in der Versandhülle!\n" +es: "ERROR: No hay línea 'BEGIN' en la armadura ASCII\n" +fr: "ERREUR: Pas de ligne `BEGIN' dans l'armure ASCII!\n" +muttde: "\nFEHLER: Keine 'BEGIN'-Zeile in der Versandhülle!\n" + +"ERROR: ASCII armor decode input ended unexpectedly!\n" +de: "\nFEHLER: Vorzeitiges Ende der Versandhülle!\n" +es: "ERROR: La entrada con armadura ASCII termina antes de tiempo\n" +fr: "ERREUR: fin prématurée du fichier armure ASCII!\n" +muttde: "\nFEHLER: Vorzeitiges Ende der Versandhülle!\n" + +"ERROR: Header line added to ASCII armor: \"%s\"\n\ +ASCII armor corrupted.\n" +de: "\nFEHLER: Eine Kopfzeile \"%s\" ist\n\ +in der ASCII-Versandhülle enthalten. Die Versandhülle ist deshalb ungültig.\n" +es: "ERROR: Línea de cabecera añadida a la armadura ASCII:\n\ +\"%s\" Armadura dañada\n" +fr: "Ligne d'entête ajoutée à l'enveloppe ASCII: \"%s\"\n\ +enveloppe ASCII corrompue" +muttde: "\nFEHLER: Eine Kopfzeile \"%s\" ist\n\ +in der ASCII-Versandhülle enthalten. Die Versandhülle ist deshalb ungültig.\n" + +"\n\007Unable to write ciphertext output file '%s'.\n" +de: "\n\007FEHLER beim Schreiben der verschlüsselten\nAusgabedatei '%s'.\n" +es: "\n\007No puede escribirse el fichero de salida cifrado '%s'.\n" +fr: "\n\007Ecriture impossible dans le fichier de sortie chiffré '%s'.\n" +mutt: "\nUnable to write ciphertext output file '%s'.\n" +muttde: "\nFEHLER beim Schreiben der verschlüsselten\nAusgabedatei '%s'.\n" + +"ERROR: Hit EOF in header.\n" +de: "\nFEHLER: EOF (Dateiende) im Header.\n" +es: "ERROR: Hay un EOF (fin de fichero) en la cabecera.\n" +fr: "ERREUR: fin de fichier dans l'en-tête.\n" +muttde: "\nFEHLER: EOF (Dateiende) im Header.\n" + +"Unsupported character set: '%s'\n" +de: "\nKeine Unterstützung für Zeichensatz '%s'.\n" +es: "Conjunto de caracteres no admitido: '%s'\n" +fr: "Table de caractères non supportée: '%s'\n" +muttde: "\nKeine Unterstützung für Zeichensatz '%s'.\n" + +"The legal_kludge cannot be disabled in US version.\n" +de: "LEGAL_KLUDGE kann in der USA-Version nicht abgeschaltet werden!\n" +es: "'legal_kludge' no puede desactivarse en la versión para los EE.UU.\n" +fr: "Les embarras légaux ne peuvent pas être désactivés aux Etats-Unis.\n" +muttde: "LEGAL_KLUDGE kann in der USA-Version nicht abgeschaltet werden!\n" + +"The multiple_recipients flag is unnecessary in this \ +version of MacPGP.\ +\nPlease remove this entry from your configuration file.\n" +de: "Die Kennung \"multiple_recipients\" ist in dieser Version von MacPGP nicht\ +\nnötig. Bitte entferne diesen Eintrag aus Deiner Konfigurationsdatei.\n" +es: "No se necesita la bandera 'multiple_recipients' en esta versión\n\ +de MacPGP.\ +\nElimina esa entrada del fichero de configuración.\n" +fr: "L'indicateur de destinataires multiples n'est pas nécessaire dans \ +version de MacPGP. \ +\nS.V.P. supprimez cette entrée de votre fichier de configuration. \n" +muttde: "Die Kennung \"multiple_recipients\" ist in dieser Version von MacPGP nicht\ +\nnötig. Bitte entferne diesen Eintrag aus Deiner Konfigurationsdatei.\n" + +"\007\nWARNING: This key has been revoked by its owner,\n\ +possibly because the secret key was compromised.\n" +de: "\007\nWARNUNG: Dieser Schlüssel wurde von seinem Besitzer zurückgezogen,\n\ +möglicherweise, weil sein privater Schlüssel nicht mehr sicher ist.\n" +es: "\007\nADVERTENCIA: Esta clave ha sido revocada por su propietario;\n\ +es posible que la clave secreta se haya visto comprometida.\n" +fr: "\007\nATTENTION: cette clé a été révoquée par son propriétaire,\n\ +probablement parce que la clé secrète a été compromise.\n" +mutt: "\nWARNING: This key has been revoked by its owner,\n\ +possibly because the secret key was compromised.\n" +muttde: "\nWARNUNG: Dieser Schlüssel wurde von seinem Besitzer zurückgezogen,\n\ +möglicherweise, weil sein privater Schlüssel nicht mehr sicher ist.\n" + +"This could mean that this signature is a forgery.\n" +de: "Dies könnte bedeuten, daß diese Unterschrift eine Fälschung ist.\n" +es: "Puede significar que la firma está falsificada.\n" +fr: "Ceci peut signifier que cette signature est un faux.\n" +muttde: "Dies könnte bedeuten, daß diese Unterschrift eine Fälschung ist.\n" + +"You cannot use this revoked key.\n" +de: "Du kannst diesen Schlüssel nicht benutzen, weil er zurückgezogen wurde.\n" +es: "No puedes utilizar esta clave revocada.\n" +fr: "Vous ne pouvez pas utiliser cette clé révoquée.\n" +muttde: "Du kannst diesen Schlüssel nicht benutzen, weil er zurückgezogen wurde.\n" + +"\007\nWARNING: Because this public key is not certified with \ +a trusted\nsignature, it is not known with high confidence that this \ +public key\nactually belongs to: \"%s\".\n" +de: "\007\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer vertrauenswürdigen\n\ +Unterschrift beglaubigt ist, ist nicht sicher, daß er wirklich zu\n\"%s\" gehört.\n" +es: "\nAVISO: Esta clave pública no está certificada con una firma\ +de confianza,\n\ +por lo que no se sabe con seguridad si realmente pertenece a:\n\ + \"%s\".\n" +fr: "\007\nATTENTION: Cette clé publique n'est pas certifiée avec une\n\ +signature fiable. Il n'est donc pas reconnu avec un haut degré de confiance\n\ +que cette signature appartient effectivement à: \"%s\".\n" +mutt: "\nWARNING: Because this public key is not certified with \ +a trusted\nsignature, it is not known with high confidence that this \ +public key\nactually belongs to: \"%s\".\n" +muttde: "\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer vertrauenswürdigen\n\ +Unterschrift beglaubigt ist, ist nicht sicher, daß er wirklich zu\n\"%s\" gehört.\n" + +"\007\nWARNING: This public key is not trusted to actually belong \ +to:\n\"%s\".\n" +de: "\007\nWARNUNG: Es ist nicht sicher, daß dieser öffentliche Schlüssel wirklich\n\ +zu \"%s\" gehört.\n" +es: "\nADVERTENCIA: No se sabe con seguridad si esta clave pública\n\ +pertenece realmente a: \"%s\".\n" +fr: "\007\nATTENTION: Cette clé publique n'est pas reconnue comme\n\ +appartenant à: \"%s\".\n" +mutt: "\nWARNING: This public key is not trusted to actually belong \ +to:\n\"%s\".\n" +muttde: "\nWARNUNG: Es ist nicht sicher, daß dieser öffentliche Schlüssel wirklich\n\ +zu \"%s\" gehört.\n" + +"\007\nWARNING: Because this public key is not certified with enough \ +trusted\nsignatures, it is not known with high confidence that this \ +public key\nactually belongs to: \"%s\".\n" +de: "\007\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer ausreichenden\n\ +Anzahl vertrauenswürdiger Unterschriften beglaubigt ist, ist nicht sicher,\n\ +daß er wirklich zu \"%s\" gehört.\n" +es: "\nADVERTENCIA: Como esta clave no está certificada con suficientes\n\ +firmas fiables, no se sabe con seguridad si realmente pertenece a:\n\ + \"%s\".\n" +fr: "\007\nATTENTION: puisque cette clé publique n'est pas certifiée avec\n\ +suffisament de signatures, il n'est pas connu avec un haut niveau de confiance\ +\nque cette clé appartient effectivement à: \"%s\".\n" +mutt: "\nWARNING: Because this public key is not certified with enough \ +trusted\nsignatures, it is not known with high confidence that this \ +public key\nactually belongs to: \"%s\".\n" +muttde: "\nWARNUNG: Da dieser öffentliche Schlüssel nicht mit einer ausreichenden\n\ +Anzahl vertrauenswürdiger Unterschriften beglaubigt ist, ist nicht sicher,\n\ +daß er wirklich zu \"%s\" gehört.\n" + +"But you previously approved using this public key anyway.\n" +de: "Aber Du hast diesen Schlüssel trotzdem bereits benutzt...\n" +es: "Ya has permitido antes que se utilice esta clave p\372blica.\n" +fr: "Mais vous avez déjà accepté l'usage de cette clé publique.\n" +muttde: "Aber Du hast diesen Schlüssel trotzdem bereits benutzt...\n" + +"\nAre you sure you want to use this public key (y/N)? " +de: "\nBist Du sicher, daß Du diesen Schlüssel benutzen willst? (j/N) " +es: "\n¿Estás seguro de querer utilizar esta clave pública (s/N)? " +fr: "\nEtes vous sûr(e) de vouloir utiliser cette clé publique (o/N)? " +muttde: "\nBist Du sicher, daß Du diesen Schlüssel benutzen willst? (j/N) " + +"\n\007Unsupported packet format - you need a newer version of PGP \ +for this file.\n" +de: "\n\007WARNUNG: nicht unterstütztes Datenformat!\n\ +Du brauchst eine neuere PGP-Version für diese Datei.\n" +es: "\n\007Formato desconocido -\ +se necesita una versión más reciente de PGP" +fr: "\n\007Format non-supporté - vous devez utiliser un version nouvelle de PGP +pour ce fichier.\n" +mutt: "\nUnsupported packet format - you need a newer version of PGP \ +for this file.\n" +muttde: "\nWARNUNG: nicht unterstütztes Datenformat!\n\ +Du brauchst eine neuere PGP-Version für diese Datei.\n" + +"Preparing random session key..." +de: "\nVorbereitung des zufälligen IDEA-Schlüssels..." +es: "Preparando la clave aleatoria de la sesión..." +fr: "Préparation de la clé aléatoire..." +muttde: "\nVorbereitung des zufälligen IDEA-Schlüssels..." + +"\n\007Error: System clock/calendar is set wrong.\n" +de: "\n\007FEHLER: Die System-Zeit und/oder das System-Datum sind falsch.\n" +es: "\n\007Error: El reloj/calendario del sistema está equivocado.\n" +fr: "\n\007Erreur: L'horloge du système est incorrecte.\n" +mutt: "\nError: System clock/calendar is set wrong.\n" +muttde: "\nFEHLER: Die System-Zeit und/oder das System-Datum sind falsch.\n" + +"Just a moment..." +de: "\nEinen Augenblick, bitte..." +es: "Un momento..." +fr: "Un moment..." +muttde: "\nEinen Augenblick, bitte..." + +"\n\007Can't open input plaintext file '%s'\n" +de: "\n\007FEHLER beim Öffnen der Eingabedatei '%s'.\n" +es: "\n\007No puede abrirse el fichero normal de entrada '%s'\n" +fr: "\n\007Ouverture du fichier en clair '%s' impossible.\n" +mutt: "\nCan't open input plaintext file '%s'\n" +muttde: "\nFEHLER beim Öffnen der Eingabedatei '%s'.\n" + +"\n\007Can't open plaintext file '%s'\n" +de: "\n\007FEHLER beim Öffnen der Klartextdatei '%s'.\n" +es: "\n\007No puede abrirse el fichero normal '%s'\n" +fr: "\n\007Ouverture du fichier en clair '%s' impossible\n" +mutt: "\nCan't open plaintext file '%s'\n" +muttde: "\nFEHLER beim Öffnen der Klartextdatei '%s'.\n" + +"\n\007Can't create signature file '%s'\n" +de: "\n\007FEHLER beim Erzeugen der Unterschriftsdatei '%s'.\n" +es: "\n\007No puede crearse el fichero de firma '%s'\n" +fr: "\n\007Création du fichier de signature '%s' impossible\n" +mutt: "\nCan't create signature file '%s'\n" +muttde: "\nFEHLER beim Erzeugen der Unterschriftsdatei '%s'.\n" + +"\n\007Can't open key ring file '%s'\n" +de: "\n\007FEHLER beim Öffnen des Schlüsselbunds '%s'.\n" +es: "\n\007No puede abrirse el anillo de claves '%s'\n" +fr: "\n\007Ouverture du fichier de clé '%s' impossible\n" +mutt: "\nCan't open key ring file '%s'\n" +muttde: "\nFEHLER beim Öffnen des Schlüsselbunds '%s'.\n" + +"This key has already been revoked.\n" +de: "Dieser Schlüssel wurde bereits zurückgezogen.\n" +es: "Esta clave ya se había revocado.\n" +fr: "Cette clé a déjà été révoquée.\n" +muttde: "Dieser Schlüssel wurde bereits zurückgezogen.\n" + +"\n\007Can't create output file to update key ring.\n" +de: "\n\007Dateifehler bei der Aktualisierung des Schlüsselbunds.\n" +es: "\n\007No puede crearse el fichero de salida para actualizar\ +el anillo.\n" +fr: "\n\007Impossible de créer le fichier de sortie pour modifier le\ +\nfichier de clés\n" +mutt: "\nCan't create output file to update key ring.\n" +muttde: "\nDateifehler bei der Aktualisierung des Schlüsselbunds.\n" + +"\nKey compromise certificate created.\n" +de: "\nDie Urkunde zum Zurückziehen des Schlüssels wurde erzeugt.\n" +es: "\nCreado el certificado de compromiso de clave.\n" +fr: "\nCertificat de compromission de clé créé.\n" +muttde: "\nDie Urkunde zum Zurückziehen des Schlüssels wurde erzeugt.\n" + +"\n\007Key is already signed by user '%s'.\n" +de: "\n\007Der Schlüssel wurde von \"%s\"\nbereits unterschrieben.\n" +es: "\n\007La clave ya ha sido firmada por '%s'.\n" +fr: "\n\007La clé est déjà signée par l'utilisateur '%s'.\n" +mutt: "\nKey is already signed by user '%s'.\n" +muttde: "\nDer Schlüssel wurde von \"%s\"\nbereits unterschrieben.\n" + +"\n\nREAD CAREFULLY: Based on your own direct first-hand knowledge, \ +are\nyou absolutely certain that you are prepared to solemnly certify \ +that\nthe above public key actually belongs to the user specified by \ +the\nabove user ID (y/N)? " +de: "\nSORGFÄLTIG LESEN: Bist Du, gestützt auf eigenes, direktes Wissen aus\n\ +erster Hand, absolut sicher, daß Du zuverlässig beglaubigen kannst, daß der\n\ +oben angezeigte öffentliche Schlüssel wirklich zu der oben genannten Person\n\ +gehört? (j/N) " +es: "\n\nLEE ATENTAMENTE: Según tu conocimiento directo,\n\ +¿estás absolutamente seguro de poder certificar solemnemente que la\n\ +clave pública pertenece realmente al usuario especificado por\n\ +este identificador (s/N)? " +fr: "\n\nLIRE ATTENTIVEMENT: Selon votre propre connaissance directe,\n\ +êtes vous absoluement certain(e) d'être prêt(e) à certifier\n\ +solennellement que la clé publique ci-dessus appartient effectivement à\n\ +la personne spécifiée par le nom d'utilisateur ci-dessus (o/N)? " +muttde: "\nSORGFÄLTIG LESEN: Bist Du, gestützt auf eigenes, direktes Wissen aus\n\ +erster Hand, absolut sicher, daß Du zuverlässig beglaubigen kannst, daß der\n\ +oben angezeigte öffentliche Schlüssel wirklich zu der oben genannten Person\n\ +gehört? (j/N) " + +"\nKey signature certificate added.\n" +de: "\n\nDer Schlüssel wurde mit Deiner Unterschrift beglaubigt.\n" +es: "\nSe ha añadido el certificado de firma.\n" +fr: "\nCertificat de signature de clé ajouté.\n" +muttde: "\n\nDer Schlüssel wurde mit Deiner Unterschrift beglaubigt.\n" + +"\nError: Key for signing userid '%s'\n\ +does not appear in public keyring '%s'.\n\ +Thus, a signature made with this key cannot be checked on this keyring.\n" +de: "\nFEHLER: Der Schlüssel für eine Unterschrift unter die Benutzer-ID\n\ +\"%s\" ist nicht im öffentlichen\n\ +Schlüsselbund '%s' enthalten. Deshalb ist eine mit diesem\n\ +Schlüssel erzeugte Unterschrift mit diesem Schlüsselbund nicht überprüfbar.\n" +es: "\nError: La clave del firmante '%s'\n\ +no se encuentra en el anillo '%s'.\n\ +No puede comprobarse la firma realizada con esa clave.\n" +fr: "\nErreur: La clef du signataire id '%s'\n\ +est absente du fichier de clefs publiques '%s'\n\ +en consequence, une signature faite avec cette clef ne peut etre verifiee.\n" +muttde: "\nFEHLER: Der Schlüssel für eine Unterschrift unter die Benutzer-ID\n\ +\"%s\" ist nicht im öffentlichen\n\ +Schlüsselbund '%s' enthalten. Deshalb ist eine mit diesem\n\ +Schlüssel erzeugte Unterschrift mit diesem Schlüsselbund nicht überprüfbar.\n" + +"\nLooking for key for user '%s':\n" +de: "\nSuche den Schlüssel für \"%s\":\n" +es: "\nBuscando la clave del usuario '%s':\n" +fr: "\nRecherche de la clé pour l'utilisateur '%s':\n" +muttde: "\nSuche den Schlüssel für \"%s\":\n" + +"\n\007Can't open ciphertext file '%s'\n" +de: "\n\007FEHLER beim Öffnen der verschlüsselten Datei '%s'.\n" +es: "\n\007No puede abrirse el fichero cifrado '%s'\n" +fr: "\n\007Ouverture du fichier chiffré '%s' impossible\n" +mutt: "\nCan't open ciphertext file '%s'\n" +muttde: "\nFEHLER beim Öffnen der verschlüsselten Datei '%s'.\n" + +"\nFile '%s' has signature, but with no text." +de: "\nDie Datei '%s' enthält eine Unterschrift, aber keinen Text." +es: "\nEl fichero '%s' tiene firma, pero no texto." +fr: "\nLe fichier '%s' à une signature, mais pas de texte." +mutt: " " +muttde: " " + +"\nText is assumed to be in file '%s'.\n" +de: "\nDer Text könnte sich in der Datei '%s' befinden.\n" +es: "\nSe asume que el texto se encuentra en el fichero '%s'.\n" +fr: "\nLe texte est supposé être dans le fichier '%s'.\n" +mutt: " " +muttde: " " + +"\nPlease enter filename of material that signature applies to: " +de: "\nName der Datei, zu der die Unterschrift gehört: " +es: "\nIntroduzca el nombre del fichero al que se aplica la firma: " +fr: "SVP indiques le nom du fichier que vous voulez signer: " +muttde: "\nName der Datei, zu der die Unterschrift gehört: " + +"File signature applies to?" +de: "Die Unterschrift gehört zu welcher Datei?" +es: "¿Dónde se aplica la firma?" +fr: "Ce fichier signataire s'applique à quoi? " +muttde: "Die Unterschrift gehört zu welcher Datei?" + +"\n\007Can't open file '%s'\n" +de: "\n\007FEHLER beim Öffnen der Datei '%s'.\n" +es: "\n\007No puede abrirse el fichero '%s'\n" +fr: "\n\007Ouverture du fichier '%s' impossible\n" +mutt: "\nCan't open file '%s'\n" +muttde: "\nFEHLER beim Öffnen der Datei '%s'.\n" + +"File type: '%c'\n" +de: "\nDateityp: '%c'\n" +es: "\nTipo de fichero: '%c'\n" +fr: "Type de fichier: '%c'\n" +muttde: "\nDateityp: '%c'\n" + +"Original plaintext file name was: '%s'\n" +de: "Der ursprüngliche Name der Klartextdatei war: '%s'.\n" +es: "El nombre del fichero original era: '%s'\n" +fr: "Le nom originel du fichier en clair était: '%s'\n" +muttde: "Der ursprüngliche Name der Klartextdatei war: '%s'.\n" + +"\nWARNING: Can't find the right public key-- can't check signature \ +integrity.\n" +de: "\nWARNUNG: Der passende öffentliche Schlüssel wurde nicht gefunden.\n\ +Eine Überprüfung der Unterschrift ist nicht möglich.\n" +es: "\nAVISO: No se encuentra la clave pública necesaria para comprobar\n\ +la integridad de la firma.\n" +fr: "\nATTENTION: impossible de trouver la clé publique adéquate et de\n\ +vérifier l'integrité de la signature.\n" +muttde: "\nWARNUNG: Der passende öffentliche Schlüssel wurde nicht gefunden.\n\ +Eine Überprüfung der Unterschrift ist nicht möglich.\n" + +"\007\nUnrecognized message digest algorithm.\n\ +This may require a newer version of PGP.\n\ +Can't check signature integrity.\n" +de: "\007\nDer Algorithmus für die Textprüfsumme ist unbekannt.\n\ +Du brauchst wahrscheinlich eine neuere Version von PGP.\n\ +Eine Überprüfung der Unterschrift ist nicht möglich.\n" +es: "\007\nAlgoritmo desconocido de resumen de mensaje.\n\ +Puede necesitarse una nueva versión de PGP.\n\ +No puede comprobarse la integridad de la firma.\n" +fr: "\007Algorithme de digest inconnu.\n\ +Ceci peut vouloir dire que vous avez besoin d'une version plus récente\n\ +de PGP. Incapable de vérifier la signature.\n" +mutt: "\nUnrecognized message digest algorithm.\n\ +This may require a newer version of PGP.\n\ +Can't check signature integrity.\n" +muttde: "\nDer Algorithmus für die Textprüfsumme ist unbekannt.\n\ +Du brauchst wahrscheinlich eine neuere Version von PGP.\n\ +Eine Überprüfung der Unterschrift ist nicht möglich.\n" + +"\a\nMalformed or obsolete signature. Can't check signature \ +integrity.\n" +de: "\a\nFehlerhafte oder veraltete Unterschrift! Überprüfung nicht möglich.\n" +es: "\a\nFirma incorrecta u obsoleta.\n\ +No puede comprobarse su integridad.\n" +fr: "\a\nSignature déformée ou obsolète. Vérification impossible. \n" +muttde: "\a\nFehlerhafte oder veraltete Unterschrift! Überprüfung nicht möglich.\n" + +"\a\nSigning key is too large. Can't check signature integrity.\n" +de: "\a\nDer unterschreibende Schlüssel ist zu lang! Eine Überprüfung der\n\ +Unterschrift ist deshalb nicht möglich.\n" +es: "\a\nLa clave para firmar es demasiado grande.\n\ +No puede comprobarse la integridad de la firma." +fr: "La clef signataire est trop grande. Incapable d'en vérifier l'intégrité. \n" +muttde: "\a\nDer unterschreibende Schlüssel ist zu lang! Eine Überprüfung der\n\ +Unterschrift ist deshalb nicht möglich.\n" + +"\n\007Error: RSA-decrypted block is corrupted.\n\ +This may be caused either by corrupted data or by using the wrong RSA key.\n\ +" +de: "\n\007FEHLER: Die mit RSA entschlüsselten Daten sind fehlerhaft.\n\ +Ursache: beschädigte Daten oder ein falscher RSA-Schlüssel.\n" +es: "\n\007Error: El bloque desencriptado RSA está dañado.\n\ +Puede deberse a un problema en los datos o a una clave RSA equivocada.\n" +fr: "\n\007Erreur: le block dechiffré par RSA est endommagé.\n\ +Ceci est peut être causé par des données endommagées our par\n\ +l'utilisation d'une mauvaise clé RSA.\n" +mutt: "\nError: RSA-decrypted block is corrupted.\n\ +This may be caused either by corrupted data or by using the wrong RSA key.\n\ +" +muttde: "\nFEHLER: Die mit RSA entschlüsselten Daten sind fehlerhaft.\n\ +Ursache: beschädigte Daten oder ein falscher RSA-Schlüssel.\n" + +"WARNING: Bad signature, doesn't match file contents!" +de: "WARNUNG: Die Unterschrift stimmt nicht mit dem Datei-Inhalt überein!" +es: "ADVERTENCIA: Firma incorrecta, no coincide con el contenido\ +del fichero\n" +fr: "ATTENTION: Mauvaise signature, ne correspond pas au contenu!" +muttde: "WARNUNG: Die Unterschrift stimmt nicht mit dem Datei-Inhalt überein!" + +"\nBad signature from user \"%s\".\n" +de: "\nFEHLERHAFTE Unterschrift von \"%s\",\n" +es: "\nFirma incorrecta de \"%s\".\n" +fr: "\nMauvaise signature de l'utilisateur \"%s\".\n" +muttde: "\nFEHLERHAFTE Unterschrift von \"%s\",\n" + +"Signature made %s using %d-bit key, key ID %s\n" +de: "Unterschrift erzeugt am %s mit %d-Bit-Schlüssel 0x%s.\n" +es: "Firma realizada el %s con una clave de %d bits, identificador %s\n" +fr: "Signature faite %s en utilisant un clef de %d bits. Id de la clef:%s\n" +muttde: "Unterschrift erzeugt am %s mit %d-Bit-Schlüssel 0x%s.\n" + +"\nPress ENTER to continue..." +de: "\nWeiter mit Return..." +es: "\nPulse 'Enter' para continuar..." +fr: "\nAppuyez sur la touche Retour ou Entrée pour continuer..." +muttde: "\nWeiter mit Return..." + +"\nGood signature from user \"%s\".\n" +de: "\nBESTÄTIGTE Unterschrift von \"%s\",\n" +es: "\nFirma correcta de \"%s\".\n" +fr: "\nBonne signature de l'utilisateur \"%s\".\n" +muttde: "\nBESTÄTIGTE Unterschrift von \"%s\",\n" + +"\nSignature and text are separate. No output file produced. " +de: "\nUnterschrift und Text sind getrennt. Es wurde keine Ausgabedatei erzeugt." +es: "\nLa firma y el texto están separados.\n\ +No se produce fichero de salida. " +fr: "\nLa signature et le texte sont séparés. Fichier de sortie non produit." +muttde: "\nUnterschrift und Text sind getrennt. Es wurde keine Ausgabedatei erzeugt." + +"\n\007Can't create plaintext file '%s'\n" +de: "\n\007FEHLER beim Erzeugen der Klartextdatei '%s'.\n" +es: "\n\007No puede crearse el fichero normal '%s'\n" +fr: "\n\007Creation du fichier en clair '%s' impossible.\n" +mutt: "\nCan't create plaintext file '%s'\n" +muttde: "\nFEHLER beim Erzeugen der Klartextdatei '%s'.\n" + +"\n\007Signature file '%s' already exists. Overwrite (y/N)? " +de: "\n\007Die Unterschriftsdatei '%s'\nexistiert bereits. Überschreiben? (j/N) " +es: "\n\007El fichero de firma '%s' ya existe.\n\ +¿Se sobreescribe (s/N)? " +fr: "\n\007Le fichier de signature '%s' existe déjà. A écraser (o/N)? " +mutt: "\nSignature file '%s' already exists. Overwrite (y/N)? " +muttde: "\nDie Unterschriftsdatei '%s'\nexistiert bereits. Überschreiben? (j/N) " + +"\nWriting signature certificate to '%s'\n" +de: "\nDie Unterschrift wird in die Datei '%s' geschrieben.\n" +es: "\nEscribiendo el certificado de firma para '%s'\n" +fr: "\nEcriture du certificat de signature dans '%s'\n" +muttde: "\nDie Unterschrift wird in die Datei '%s' geschrieben.\n" + +"\n\007Error: Badly-formed or corrupted signature certificate.\n" +de: "\n\007FEHLER: Format- oder Datenfehler in der Unterschrift.\n" +es: "\n\007Error: Certificado de firma incorrecto o dañado.\n" +fr: "\n\007Erreur: certificat de signature mal formé ou endommagé\n" +mutt: "\nError: Badly-formed or corrupted signature certificate.\n" +muttde: "\nFEHLER: Format- oder Datenfehler in der Unterschrift.\n" + +"File \"%s\" does not have a properly-formed signature.\n" +de: "Die Datei '%s' hat keine formal korrekte Unterschrift.\n" +es: "El fichero \"%s\" no tiene una firma construida correctamente.\n" +fr: "Le fichier \"%s\" n'a pas une signature correctement formée.\n" +muttde: "Die Datei '%s' hat keine formal korrekte Unterschrift.\n" + +"compressed. " +de: "gepackt. " +es: "comprimido. " +fr: "comprimé. " +muttde: "gepackt. " + +"\n\007Can't create compressed file '%s'\n" +de: "\n\007FEHLER beim Erzeugen der gepackten Datei '%s'.\n" +es: "\n\007No puede crearse el fichero comprimido '%s'\n" +fr: "\n\007Création du fichier compressé '%s' impossible\n" +mutt: "\nCan't create compressed file '%s'\n" +muttde: "\nFEHLER beim Erzeugen der gepackten Datei '%s'.\n" + +"Compressing file..." +de: "Packen der Datei..." +es: "Comprimiendo el fichero..." +fr: "Compression du fichier..." +muttde: "Packen der Datei..." + +"\n\007Can't create ciphertext file '%s'\n" +de: "\n\007FEHLER beim Erzeugen der verschlüsselten\nAusgabedatei '%s'.\n" +es: "\n\007No puede crearse el fichero cifrado '%s'\n" +fr: "\n\007Création du fichier chiffré '%s' impossible.\n" +mutt: "\nCan't create ciphertext file '%s'\n" +muttde: "\nFEHLER beim Erzeugen der verschlüsselten\nAusgabedatei '%s'.\n" + +"\nYou need a pass phrase to encrypt the file. " +de: "\nDu brauchst ein Mantra zum Verschlüsseln der Datei." +es: "\nSe necesita una contraseña para encriptar el fichero. " +fr: "\nUn mot de passe est nécessaire pour chiffrer ce fichier. " +muttde: "\nDu brauchst ein Mantra zum Verschlüsseln der Datei." + +"\n\007Cannot find the public key matching userid '%s'\n\ +This user will not be able to decrypt this message.\n" +de: "\n\007Der öffentliche Schlüssel zu Benutzer-ID \"%s\"\n\ +ist nicht aufzufinden. Dieser Empfänger wird diese Nachricht nicht\n\ +entschlüsseln können.\n" +es: "\n\007No puede encontrarse la clave pública de '%s'\n\ +Ese usuario no podrá descifrar el mensaje.\n" +fr: "\n\007Impossible de trouver la clé publique pour l'utilisateur '%s'\n\ +Cet utilisateur ne pourra pas déchiffrer ce message.\n" +mutt: "\nCannot find the public key matching userid '%s'\n\ +This user will not be able to decrypt this message.\n" +muttde: "\nDer öffentliche Schlüssel zu Benutzer-ID \"%s\"\n\ +ist nicht aufzufinden. Dieser Empfänger wird diese Nachricht nicht\n\ +entschlüsseln können.\n" + +"Skipping userid %s\n" +de: "Die Benutzer-ID \"%s\" wird übersprungen.\n" +es: "Saltando el identificador %s\n" +fr: "je passe l'utiliateur %s\n" +muttde: "Die Benutzer-ID \"%s\" wird übersprungen.\n" + +"\n\007'%s' is not a cipher file.\n" +de: "\n\007'%s' ist keine verschlüsselte Datei.\n" +es: "\n\007'%s' no es un fichero cifrado.\n" +fr: "\n\007'%s' n'est pas un fichier chiffré.\n" +mutt: "\n'%s' is not a cipher file.\n" +muttde: "\n'%s' ist keine verschlüsselte Datei.\n" + +"\n\007Error: RSA block is possibly malformed. Old format, maybe?\n" +de: "\n\007FEHLER: RSA-Block möglicherweise fehlerhaft. Vielleicht altes Format?\n" +es: "\n\007Error: El bloque RSA está mal formado.\n\ +Quizá se trate de un formato antiguo.\n" +fr: "\n\007Erreur: Block RSA malformé, vieux format ???" +mutt: "\nError: RSA block is possibly malformed. Old format, maybe?\n" +muttde: "\nFEHLER: RSA-Block möglicherweise fehlerhaft. Vielleicht altes Format?\n" + +"\nThis message can only be read by:\n" +de: "\nDiese Nachricht kann nur gelesen werden von:\n" +es: "\nEste mensaje sólo puede leerlo:\n" +fr: "\nCe message ne peut être lu que par:\n" +muttde: "\nDiese Nachricht kann nur gelesen werden von:\n" + +" keyID: %s\n" +de: " Schlüssel-ID: %s\n" +es: " identificador: %s\n" +fr: " Id de la clef: %s \n" +muttde: " Schlüssel-ID: %s\n" + +"\n\007You do not have the secret key needed to decrypt this file.\n" +de: "\n\007Dir fehlt der private Schlüssel zum Entschlüsseln dieser Datei.\n" +es: "\n\007No tienes la clave secreta necesaria para descifrar\ +este fichero.\n" +fr: "\n\007Vous n'avez pas la clé secrète requise pour déchiffrer\ +\nce fichier.\n" +mutt: "\nYou do not have the secret key needed to decrypt this file.\n" +muttde: "\nDir fehlt der private Schlüssel zum Entschlüsseln dieser Datei.\n" + +"\n\007Error: Decrypted plaintext is corrupted.\n" +de: "\n\007FEHLER: Der entschlüsselte Klartext ist fehlerhaft.\n" +es: "\n\007Error: El texto en claro desencriptado está dañado.\n" +fr: "\n\007Erreur: le fichier déchiffré est endommagé.\n" +mutt: "\nError: Decrypted plaintext is corrupted.\n" +muttde: "\nFEHLER: Der entschlüsselte Klartext ist fehlerhaft.\n" + +"\nYou need a pass phrase to decrypt this file. " +de: "\nDu brauchst ein Mantra zum Entschlüsseln dieser Datei." +es: "\nSe necesita la contraseña para desencriptar este fichero. " +fr: "\nUn mot de passe est nécessaire pour déchiffrer ce fichier. " +muttde: "\nDu brauchst ein Mantra zum Entschlüsseln dieser Datei." + +"\n\007Error: Bad pass phrase.\n" +de: "\n\007FEHLER: Falsches Mantra!\n" +es: "\n\007Error: Contraseña incorrecta.\n" +fr: "\n\007Erreur: Mauvais mot de passe.\n" +mutt: "\nError: Bad pass phrase.\n" +muttde: "\nFEHLER: Falsches Mantra!\n" + +"Pass phrase appears good. " +de: "\nDas Mantra scheint zu stimmen.\n" +es: "Parece correcta. " +fr: "Le mot de passe semble correct. " +muttde: "\nDas Mantra scheint zu stimmen.\n" + +"Decompressing plaintext..." +de: "Entpacken des Klartextes..." +es: "Descomprimiendo el texto normal..." +fr: "Decompression du texte en clair..." +muttde: "Entpacken des Klartextes..." + +"\n\007Can't open compressed file '%s'\n" +de: "\n\007FEHLER beim Öffnen der gepackten Datei '%s'.\n" +es: "\n\007No puede abrirse el fichero comprimido '%s'\n" +fr: "\n\007Ouverture du fichier compressé '%s' impossible.\n" +mutt: "\nCan't open compressed file '%s'\n" +muttde: "\nFEHLER beim Öffnen der gepackten Datei '%s'.\n" + +"\007\nUnrecognized compression algorithm.\n\ +This may require a newer version of PGP.\n" +de: "\007\nUnbekanntes Pack-Verfahren. Eine neuere Version von PGP könnte notwendig sein.\n" +es: "\007\nAlgoritmo de compresión no reconocido.\n\ +Puede necesitarse una nueva versión de PGP.\n" +fr: "\007\nAlgorithme de compression non reconnu.\n\ +Ceci peut nécessiter une nouvelle version de PGP.\n" +mutt: "\nUnrecognized compression algorithm.\n\ +This may require a newer version of PGP.\n" +muttde: "\nUnbekanntes Pack-Verfahren. Eine neuere Version von PGP könnte notwendig sein.\n" + +"\n\007Can't create decompressed file '%s'\n" +de: "\n\007FEHLER beim Erzeugen der entpackten Datei '%s'.\n" +es: "\n\007No puede crearse el fichero descomprimido '%s'\n" +fr: "\n\007Création du fichier décompressé '%s' impossible.\n" +mutt: "\nCan't create decompressed file '%s'\n" +muttde: "\nFEHLER beim Erzeugen der entpackten Datei '%s'.\n" + +"\n\007Decompression error. Probable corrupted input.\n" +de: "\n\007FEHLER beim Entpacken! Wahrscheinlich beschädigte Eingangsdaten.\n" +es: "\n007Error en descompresión. Probable entrada dañada.\n" +fr: "\n\007Erreur de Decompression, entrée probablement corrompue" +mutt: "\nDecompression error. Probable corrupted input.\n" +muttde: "\nFEHLER beim Entpacken! Wahrscheinlich beschädigte Eingangsdaten.\n" + +"done. " +de: "fertig. " +es: "finalizado. " +fr: "terminé. " +muttde: "fertig. " + +"Truncating filename '%s' " +de: "Kürzung des Dateinamens '%s' " +es: "Truncando el nombre de fichero '%s' " +fr: "troncation du fichier '%s'" +muttde: "Kürzung des Dateinamens '%s' " + +"y" +de: "j" +es: "s" +fr: "o" +muttde: "j" + +"n" +de: "n" +es: "n" +fr: "n" +muttde: "n" + +"\nShould '%s' be renamed to '%s' (Y/n)? " +de: "\nSoll '%s' in '%s' umbenannt werden? (J/n) " +es: "\n¿Renombrar '%s' como '%s' (S/n)? " +fr: "\nEst-ce que '%s' doit être renommé '%s' (O/n)? " +muttde: "\nSoll '%s' in '%s' umbenannt werden? (J/n) " + +"\nDisk full.\n" +de: "\nDie Platte ist voll!\n" +es: "\nDisco lleno.\n" +fr: "\nDisque plein.\n" +muttde: "\nDie Platte ist voll!\n" + +"\nFile write error.\n" +de: "\nFEHLER beim Schreiben einer Datei.\n" +es: "\nError de escritura del fichero.\n" +fr: "\nErreur d'écriture sur fichier.\n" +muttde: "\nFEHLER beim Schreiben einer Datei.\n" + +"\007Write error on stdout.\n" +de: "\n\007FEHLER beim Schreiben auf stdout (Standard-Ausgabe).\n" +es: "\007Error de escritura en la salida estándar (\"stdout\").\n" +fr: "\007Erreur d'écriture sur la sortie standard.\n" +mutt: "Write error on stdout.\n" +muttde: "\nFEHLER beim Schreiben auf stdout (Standard-Ausgabe).\n" + +"\n\007Cannot create temporary file '%s'\n" +de: "\n\007FEHLER beim Erzeugen der Temporärdatei '%s'.\n" +es: "\n\007No puede crearse el fichero temporal '%s'\n" +fr: "\n\007Création du fichier temporaire '%s' impossible\n" +mutt: "\nCannot create temporary file '%s'\n" +muttde: "\nFEHLER beim Erzeugen der Temporärdatei '%s'.\n" + +"Can't create output file '%s'\n" +de: "\nFEHLER beim Erzeugen der Ausgabedatei '%s'.\n" +es: "No puede crearse el fichero '%s'\n" +fr: "Création du fichier '%s' impossible.\n" +muttde: "\nFEHLER beim Erzeugen der Ausgabedatei '%s'.\n" + +"\n\007Output file '%s' already exists.\n" +de: "\n\007Die Ausgabedatei '%s' existiert bereits.\n" +es: "\n\007El fichero de salida '%s' ya existe.\n" +fr: "\n\007Le ficher de sortie '%s' existe déjà.\n" +mutt: "\nOutput file '%s' already exists.\n" +muttde: "\nDie Ausgabedatei '%s' existiert bereits.\n" + +"\n\007Output file '%s' already exists. Overwrite (y/N)? " +de: "\n\007Die Ausgabedatei '%s' existiert bereits. Überschreiben? (j/N) " +es: "\n\007El fichero de salida '%s' ya existe. ¿Sobrescribir (s/N)? " +fr: "\n\007Le fichier de sortie '%s' existe déjà. A écraser (o/N)? " +mutt: "\nOutput file '%s' already exists. Overwrite (y/N)? " +muttde: "\nDie Ausgabedatei '%s' existiert bereits. Überschreiben? (j/N) " + +"Enter new file name:" +de: "Gib den neuen Dateinamen ein:" +es: "Introduzca el nuevo nombre de fichero: " +fr: "Donnez un nouveau nom de fichier:" +muttde: "Gib den neuen Dateinamen ein:" + +"Replacing signature from keyID %s on userid \"%s\"\n" +de: "Die Unterschrift von der Schlüssel-ID %s unter der\n\ +Benutzer-ID \"%s\" wird ersetzt.\n" +es: "Sustituyendo la firma de la clave %s para el usuario\n\ +\"%s\"\n" +fr: "Remplacement la signature de keyID %s de l'utilisateur '%s'\n" +muttde: "Die Unterschrift von der Schlüssel-ID %s unter der\n\ +Benutzer-ID \"%s\" wird ersetzt.\n" + +"Verifying signature from %s\n" +de: "Überprüfung der Unterschrift von \"%s\"\n" +es: "Verificando la firma de %s\n" +fr: "Vérification de la signature de %s\n" +muttde: "Überprüfung der Unterschrift von \"%s\"\n" + +"on userid \"%s\"\n" +de: "unter \"%s\".\n" +es: "en el identificador \"%s\"\n" +fr: "pour le nom d'utilisateur \"%s\"\n" +muttde: "unter \"%s\".\n" + +"Replacing signature from %s\n" +de: "Ersetzung der Unterschrift von \"%s\"\n" +es: "Sustituyendo la firma de %s\n" +fr: "Remplacement de la signature de %s" +muttde: "Ersetzung der Unterschrift von \"%s\"\n" + +"Verification Failed\n" +de: "\nDie Überprüfung ist fehlgeschlagen!\n" +es: "Verificación fallida\n" +fr: "Echec de la vérification" +muttde: "\nDie Überprüfung ist fehlgeschlagen!\n" + +"New signature from keyID %s on userid \"%s\"\n" +de: "Neue Unterschrift von %s unter \"%s\".\n" +es: "Nueva firma de la clave %s para el usuario \"%s\"\n" +fr: "Nouvelle signature de la clé %s sur l'utilisateur \"%s\"\n" +muttde: "Neue Unterschrift von %s unter \"%s\".\n" + +"New signature from %s\n" +de: "Neue Unterschrift von \"%s\"\n" +es: "Nueva firma de %s\n" +fr: "\nNouvelle signature de %s\n" +muttde: "Neue Unterschrift von \"%s\"\n" + +"Key revocation certificate from \"%s\".\n" +de: "Urkunde zum Zurückziehen eines Schlüssels\nvon \"%s\".\n" +es: "Certificado de revocación de clave de \"%s\".\n" +fr: "Certificat de révocation de clé de \"%s\".\n" +muttde: "Urkunde zum Zurückziehen eines Schlüssels\nvon \"%s\".\n" + +"\n\007WARNING: File '%s' contains bad revocation certificate.\n" +de: "\n\007WARNUNG: Die Datei '%s' enthält eine\n\ +fehlerhafte Urkunde zum Zurückziehen eines Schlüssels.\n" +es: "\n\007AVISO: El fichero '%s' tiene un certificado de revocación\ +incorrecto.\n" +fr: "\n\007ATTENTION: the fichier '%s' contient de mauvais certificats\n\ +de révocation.\n" +mutt: "\nWARNING: File '%s' contains bad revocation certificate.\n" +muttde: "\nWARNUNG: Die Datei '%s' enthält eine\n\ +fehlerhafte Urkunde zum Zurückziehen eines Schlüssels.\n" + +"New userid: \"%s\".\n" +de: "Neue Benutzer-ID: \"%s\".\n" +es: "Nuevo identificador: \"%s\".\n" +fr: "Nouveau nom d'utilisateur: \"%s\".\n" +muttde: "Neue Benutzer-ID: \"%s\".\n" + +"\nWill be added to the following key:\n" +de: "Sie wird zu dem folgenden Schlüssel hinzugefügt:\n" +es: "\nSe añadirá a la clave siguiente:\n" +fr: "\nSera ajouté(e) à la clé suivante:\n" +muttde: "Sie wird zu dem folgenden Schlüssel hinzugefügt:\n" + +"\nAdd this userid (y/N)? " +de: "\nSoll diese Benutzer-ID hinzugefügt werden? (j/N) " +es: "\n¿Añadir este identificador (s/N)? " +fr: "\nAjouter ce nom d'utilisateur (o/N)? " +muttde: "\nSoll diese Benutzer-ID hinzugefügt werden? (j/N) " + +"\n\007Can't open key file '%s'\n" +de: "\n\007FEHLER beim Öffnen der Schlüsseldatei '%s'.\n" +es: "\n\007No puede abrirse el fichero de claves '%s'\n" +fr: "\n\007Ouverture du fichier de clé '%s' impossible\n" +mutt: "\nCan't open key file '%s'\n" +muttde: "\nFEHLER beim Öffnen der Schlüsseldatei '%s'.\n" + +"\nKey ring file '%s' cannot be created.\n" +de: "\nFEHLER beim Anlegen des Schlüsselbunds '%s'.\n" +es: "\nNo se puede crear el anillo de claves '%s'.\n" +fr: "\nCréation du fichier de clés '%s' impossible.\n" +muttde: "\nFEHLER beim Anlegen des Schlüsselbunds '%s'.\n" + +"\nLooking for new keys...\n" +de: "\nSuche nach neuen Schlüsseln...\n" +es: "\nBuscando nuevas claves...\n" +fr: "\nRecherche des nouvelles clés...\n" +muttde: "\nSuche nach neuen Schlüsseln...\n" + +"\n\007Could not read key from file '%s'.\n" +de: "\n\007FEHLER beim Lesen des Schlüssels aus Datei '%s'.\n" +es: "\n\007No ha podido leerse la clave en el fichero '%s'.\n" +fr: "\n\007Lecture impossible de la clé dans le fichier '%s'.\n" +mutt: "\nCould not read key from file '%s'.\n" +muttde: "\nFEHLER beim Lesen des Schlüssels aus Datei '%s'.\n" + +"\n\007Warning: Key ID %s matches key ID of key already on \n\ +key ring '%s', but the keys themselves differ.\n\ +This is highly suspicious. This key will not be added to ring.\n\ +Acknowledge by pressing return: " +de: "\n\007WARNUNG: Die Schlüssel-ID %s stimmt mit einem schon\n\ +im Schlüsselbund '%s' vorhandenen Schlüssel\n\ +überein, aber die Schlüssel selbst sind nicht identisch.\n\ +Das ist höchst verdächtig! Dieser Schlüssel wird nicht zum\n\ +Schlüsselbund hinzugefügt. Mit Return bestätigen: " +es: "\n\007Advertencia: El identificador de clave %s coincide con otro\n\ +en el anillo '%s', pero las claves son distintas.\n\ +Es muy sospechoso. Esta clave no se incluirá en el anillo.\n\ +Confirmar pulsando 'retorno': " +fr: "\n\007Attention: l'identificateur de clé %s correspond à une clé\ +\ndéjà dans le fichier de clés '%s', mais les clés sont différentes.\ +\nCeci est très suspect. Cette clé ne sera pas ajoutée au fichier de clés.\ +\nAppuyez sur la touche Retour ou Entrée: " +mutt: "\nWarning: Key ID %s matches key ID of key already on \n\ +key ring '%s', but the keys themselves differ.\n\ +This is highly suspicious. This key will not be added to ring.\n\ +Acknowledge by pressing return: " +muttde: "\nWARNUNG: Die Schlüssel-ID %s stimmt mit einem schon\n\ +im Schlüsselbund '%s' vorhandenen Schlüssel\n\ +überein, aber die Schlüssel selbst sind nicht identisch.\n\ +Das ist höchst verdächtig! Dieser Schlüssel wird nicht zum\n\ +Schlüsselbund hinzugefügt. Mit Return bestätigen: " + +"\nDo you want to add this key to keyring '%s' (y/N)? " +de: "\nMöchtest Du diesen Schlüssel zum Schlüsselbund\n'%s' hinzufügen? (j/N) " +es: "\n¿Quieres añadir esta clave al anillo '%s' (s/N)? " +fr: "\nVoulez vous ajouter cette clé au fichier de clés '%s' (o/N)? " +muttde: "\nMöchtest Du diesen Schlüssel zum Schlüsselbund\n'%s' hinzufügen? (j/N) " + +"Key has been revoked.\n" +de: "Der Schlüssel wurde zurückgezogen.\n" +es: "La clave se ha revocado.\n" +fr: "La clé a été révoquée.\n" +muttde: "Der Schlüssel wurde zurückgezogen.\n" + +"\n\007Key file contains duplicate keys: cannot be added to keyring\n" +de: "\n\007Die Datei enthält doppelte Schlüssel, die nicht zum Schlüsselbund\n\ +hinzugefügt werden.\n" +es: "\n\007El fichero contiene claves duplicadas: \ +no puede añadirse al anillo\n" +fr: "\n\007Le fichier contient des clés dupliquées: impossible\n\ +de l'ajouter au fichier de clés\n" +mutt: "\nKey file contains duplicate keys: cannot be added to keyring\n" +muttde: "\nDie Datei enthält doppelte Schlüssel, die nicht zum Schlüsselbund\n\ +hinzugefügt werden.\n" + +"No new keys or signatures in keyfile.\n" +de: "Keine neuen Schlüssel oder Unterschriften in der Datei.\n" +es: "No hay nuevas claves ni nuevas firmas en el fichero.\n" +fr: "Pas de nouvelles clés ou signatures dans le fichier de clés.\n" +muttde: "Keine neuen Schlüssel oder Unterschriften in der Datei.\n" + +"\nKeyfile contains:\n" +de: "\nDie Datei enthält folgende Schlüssel:\n" +es: "\nEl fichero de claves contiene:\n" +fr: "\nLe fichier de clés contient:\n" +muttde: "\nDie Datei enthält folgende Schlüssel:\n" + +"%4d new key(s)\n" +de: "%4d neue(n) Schlüssel\n" +es: "%4d nueva(s) clave(s)\n" +fr: "%4d nouvelle(s) clé(s)\n" +muttde: "%4d neue(n) Schlüssel\n" + +"%4d new signatures(s)\n" +de: "%4d neue Unterschrift(en)\n" +es: "%4d nueva(s) firma(s)\n" +fr: "%4d nouvelle(s) signatures(s)\n" +muttde: "%4d neue Unterschrift(en)\n" + +"%4d new user ID(s)\n" +de: "%4d neue Benutzer-ID(s)\n" +es: "%4d nuevo(s) identificador(es) de usuario\n" +fr: "%4d nouveau(x) nom(s) d'utilisateur\n" +muttde: "%4d neue Benutzer-ID(s)\n" + +"%4d new revocation(s)\n" +de: "%4d neue Urkunde(n) zum Zurückziehen von Schlüsseln\n" +es: "%4d nueva(s) revocacion(es)\n" +fr: "%4d nouvelle(s) révocation(s)\n" +muttde: "%4d neue Urkunde(n) zum Zurückziehen von Schlüsseln\n" + +"\nNo keys found in '%s'.\n" +de: "\nKeine Schlüssel in '%s' gefunden.\n" +es: "\nNo se encuentran claves en '%s'.\n" +fr: "\nPas de clés trouvées dans '%s'.\n" +muttde: "\nKeine Schlüssel in '%s' gefunden.\n" + +"\nOne or more of the new keys are not fully certified.\n\ +Do you want to certify any of these keys yourself (y/N)? " +de: "\nEin oder mehrere neue Schlüssel sind nicht ausreichend beglaubigt.\n\ +Willst Du sie selbst beglaubigen? (j/N) " +es: "\nUna o más de las nuevas claves no están completamente certificadas.\n\ +¿Quieres certificar alguna de ellas tú mismo (s/N)? " +fr: "\nUne ou plusieurs des nouvelles clés ne sont pas complètement\ +\ncertifiées. Voulez vous certifier ces clés vous même (o/N)? " +muttde: "\nEin oder mehrere neue Schlüssel sind nicht ausreichend beglaubigt.\n\ +Willst Du sie selbst beglaubigen? (j/N) " + +"\nDo you want to certify this key yourself (y/N)? " +de: "\nWillst Du diesen Schlüssel selbst beglaubigen? (j/N) " +es: "\n¿Quieres certificar esta clave tú mismo (s/N)? " +fr: "\nVoulez vous certifier cette clé vous même (o/N)? " +muttde: "\nWillst Du diesen Schlüssel selbst beglaubigen? (j/N) " + +"undefined" +de: "undefin." +es: "sin definir" +fr: "indéfinie" +muttde: "undefin." + +"unknown" +de: "unbekannt" +es: "desconocida" +fr: "inconnu" +muttde: "unbekannt" + +"untrusted" +de: "kein" +es: "no fiable" +fr: "non sûr" +muttde: "kein" + +"marginal" +de: "teilweise" +es: "relativa" +fr: "marginal" +muttde: "teilweise" + +"complete" +de: "voll" +es: "completa" +fr: "complète" +muttde: "voll" + +"ultimate" +de: "absolut" +es: "fundamental" +fr: "ultime" +muttde: "absolut" + +"\nCan't open backup key ring file '%s'\n" +de: "\nFEHLER beim Öffnen der Schlüsselbund-Kopie '%s'.\n" +es: "\nNo se puede abrir la copia de seguridad del anillo '%s'\n" +fr: "\nImpossible d'ouvrir le fichier de clé de sauvegarde '%s'\n" +muttde: "\nFEHLER beim Öffnen der Schlüsselbund-Kopie '%s'.\n" + +"\n%d \"trust parameter(s)\" need to be changed.\n" +de: "\n%d 'Vertrauens-Einstellung(en)' muß/müssen geändert werden.\n" +es: "\n%d \"parámetro(s) de confianza\" debe(n) cambiarse.\n" +fr: "\n%d \"paramètre(s) de confiance\" doi(ven)t être changé(s).\n" +muttde: "\n%d 'Vertrauens-Einstellung(en)' muß/müssen geändert werden.\n" + +"Continue with '%s' (Y/n)? " +de: "Weiter mit '%s'? (J/n) " +es: "¿Seguir con '%s' (S/n)? " +fr: "Continuer avec '%s' (O/n)? " +muttde: "Weiter mit '%s'? (J/n) " + +"\n%d \"trust parameter(s)\" changed.\n" +de: "\n%d 'Vertrauens-Einstellung(en)' geändert.\n" +es: "\nCambiados %d \"parámetro(s) de confianza.\n" +fr: "\n%d \"paramètre(s) de confiance\" changé(s).\n" +muttde: "\n%d 'Vertrauens-Einstellung(en)' geändert.\n" + +"Update public keyring '%s' (Y/n)? " +de: "Öffentlichen Schlüsselbund '%s' aktualisieren? (J/n) " +es: "¿Actualizar el anillo de claves públicas '%s' (S/n)? " +fr: "Modifier le fichier de clés publiques '%s' (O/n)? " +muttde: "Öffentlichen Schlüsselbund '%s' aktualisieren? (J/n) " + +"\nCan't open secret key ring file '%s'\n" +de: "\nFEHLER beim Öffnen des privaten Schlüsselbunds '%s'.\n" +es: "\nNo puede abrirse el anillo de claves secretas '%s'\n" +fr: "\nOuverture du fichier de clés secrètes '%s' impossible.\n" +muttde: "\nFEHLER beim Öffnen des privaten Schlüsselbunds '%s'.\n" + +"\nPass 1: Looking for the \"ultimately-trusted\" keys...\n" +de: "\nDurchlauf 1: Suche nach 'absolut vertrauenswürdigen' Schlüsseln...\n" +es: "\nProceso 1: Búsqueda de las claves \"fundamentalmente fiables\" ...\n" +fr: "\nPasse 1: Recherche des clés \"de confiance ultime\"...\n" +muttde: "\nDurchlauf 1: Suche nach 'absolut vertrauenswürdigen' Schlüsseln...\n" + +"\nPass 2: Tracing signature chains...\n" +de: "\nDurchlauf 2: Überprüfung von verketteten Unterschriften...\n" +es: "\nProceso 2: Seguimiento de las cadenas de firmas...\n" +fr: "\nPasse 2: Vérification des chaines de signatures...\n" +muttde: "\nDurchlauf 2: Überprüfung von verketteten Unterschriften...\n" + +"Keyring contains duplicate key: %s\n" +de: "\nDer Schlüsselbund enthält den Schlüssel %s doppelt.\n" +es: "El anillo contiene una clave duplicada: %s\n" +fr: "Le fichier de clés contient des clés dupliquées: %s\n" +muttde: "\nDer Schlüsselbund enthält den Schlüssel %s doppelt.\n" + +"No ultimately-trusted keys.\n" +de: "Keine absolut vertrauenswürdigen Schlüssel gefunden.\n" +es: "No hay ninguna clave fundamentalmente fiable.\n" +fr: "Pas de clés de confiance ultime.\n" +muttde: "Keine absolut vertrauenswürdigen Schlüssel gefunden.\n" + +" KeyID Trust Validity User ID\n" +de: "\n ID Vertrauen Gültigk. Benutzer\n" +es: " Clave Confianza Validez Identificador\n" +fr: " IDcle Conf. Validité Utilisateur\n" +muttde: "\n ID Vertrauen Gültigk. Benutzer\n" + +"(KeyID: %s)\n" +de: "(Schlüssel-ID: %s)\n" +es: "(Identificador: %s)\n" +fr: "(IDclef: %s)\n" +muttde: "(Schlüssel-ID: %s)\n" + +"\nAn \"axiomatic\" key is one which does not need certifying by\n\ +anyone else. Usually this special status is reserved only for your\n\ +own keys, which should also appear on your secret keyring. The owner\n\ +of an axiomatic key (who is typically yourself) is \"ultimately trusted\"\n\ +by you to certify any or all other keys.\n" +de: "\nEin 'definitionsgemäß vertrauenswürdiger' Schlüssel braucht nicht von einer\n\ +anderen Person beglaubigt zu werden. Normalerweise ist dieser spezielle Status\n\ +nur für Deine eigenen Schlüssel reserviert, die sich auch in Deinem privaten\n\ +Schlüsselbund befinden sollten. Der Besitzer eines 'definitionsgemäß vertrau-\n\ +enswürdigen' Schlüssels (das bist in der Regel Du selbst) wird von Dir als\n\ +'absolut vertrauenswürdig' betrachtet, beliebige oder sogar alle anderen\n\ +Schlüssel Dir gegenüber zu beglaubigen.\n" +es: "\nUna clave \"axiomatica\" es aquella que no necesita certificación.\n\ +Normalmente este estado se reserva para tus propias claves, que deben\n\ +aparecer también en tu anillo de claves secretas. El propietario de una\n\ +clave axiomática (normalmente tú mismo) es \"fundamentalmente fiable\"\n\ +para certificar cualquier clave.\n" +fr: "\n Une clef 'axiomatique' est un clef qui n'a pas besoin d'être\n\ +signé par personne. Habituellement ce statut est reservé à vos propres \n\ +clefs, celles qui apparaissent dans votre tousseau de clefs secrètes. \n\ +Le propriétaire de ces clefs (vous-même) possède votre 'confiance ultime'\n\ +pour accorder un certificat à l'une au l'autre des autres clefs.\n" +muttde: "\nEin 'definitionsgemäß vertrauenswürdiger' Schlüssel braucht nicht von einer\n\ +anderen Person beglaubigt zu werden. Normalerweise ist dieser spezielle Status\n\ +nur für Deine eigenen Schlüssel reserviert, die sich auch in Deinem privaten\n\ +Schlüsselbund befinden sollten. Der Besitzer eines 'definitionsgemäß vertrau-\n\ +enswürdigen' Schlüssels (das bist in der Regel Du selbst) wird von Dir als\n\ +'absolut vertrauenswürdig' betrachtet, beliebige oder sogar alle anderen\n\ +Schlüssel Dir gegenüber zu beglaubigen.\n" + +"\nKey for user ID \"%s\"\n\ +is designated as an \"ultimately-trusted\" introducer, but the key\n\ +does not appear in the secret keyring.\n\ +Use this key as an ultimately-trusted introducer (y/N)? " +de: "\nDer Schlüssel von \"%s\"\n\ +soll ein 'absolut vertrauenswürdiger Einführer' werden, aber er befindet\n\ +sich nicht im privaten Schlüsselbund. Soll ich diesen Schlüssel trotzdem\n\ +als 'absolut vertrauenswürdigen Einführer' behandeln? (j/N) " +es: "\nLa clave del usuario \"%s\"\n\ +está designada como referencia \"fundamentalmente fiable\", pero +la clave no aparece en el anillo de claves secretas.\n\ +¿Se utiliza como referencia fundamentalmente fiable (s/N)? " +fr: "\nLa clef de l'utilisateur '%s' \n\ +a été désigné comme ayant la 'confiance ulime', mais cette clef \n\ +n'apparraît pas dans le trousseau des clefs secrètes. \n\ +Voulez-vous utiliser cette clef comme ayant la 'confiance ultime'? (o/N) " +muttde: "\nDer Schlüssel von \"%s\"\n\ +soll ein 'absolut vertrauenswürdiger Einführer' werden, aber er befindet\n\ +sich nicht im privaten Schlüsselbund. Soll ich diesen Schlüssel trotzdem\n\ +als 'absolut vertrauenswürdigen Einführer' behandeln? (j/N) " + +"\n\007Cannot read from secret keyring.\n" +de: "\n\007FEHLER beim Lesen des privaten Schlüsselbunds.\n" +es: "\n\007No puede leerse el anillo de claves secretas.\n" +fr: "\n\007Lecture du fichier de clés secrètes impossible.\n" +mutt: "\nCannot read from secret keyring.\n" +muttde: "\nFEHLER beim Lesen des privaten Schlüsselbunds.\n" + +"\n\007WARNING: Public key for user ID: \"%s\"\n\ +does not match the corresponding key in the secret keyring.\n" +de: "\n\007WARNUNG: Der öffentliche Schlüssel\nvon \"%s\" stimmt nicht\n\ +mit dem Gegenstück im privaten Schlüsselbund überein.\n" +es: "\n\007AVISO: La clave pública de \"%s\"\n\ +no coincide con la clave correspondiente en el anillo de claves secretas.\n" +fr: "\n\007ATTENTION: la clé publique pour l'utilisateur: \"%s\"\n\ +ne correspond pas avec la clé respective dans le fichier de clés\ +secrètes.\n" +mutt: "\nWARNING: Public key for user ID: \"%s\"\n\ +does not match the corresponding key in the secret keyring.\n" +muttde: "\nWARNUNG: Der öffentliche Schlüssel\nvon \"%s\" stimmt nicht\n\ +mit dem Gegenstück im privaten Schlüsselbund überein.\n" + +"This is a serious condition, indicating possible keyring tampering.\n" +de: "Dies könnte bedeuten, daß die Schlüsselbunde manipuliert wurden!\n" +es: "Es una situación grave: posible manipulación de anillos.\n" +fr: "Ceci est une condition sérieuse, indiquant une possible manipulation\n\ +du fichier de clés.\n" +muttde: "Dies könnte bedeuten, daß die Schlüsselbunde manipuliert wurden!\n" + +"\nKey for user ID \"%s\"\n\ +also appears in the secret key ring." +de: "\nDer Schlüssel für die Benutzer-ID \"%s\"\n\ +ist auch im privaten Schlüsselbund vorhanden." +es: "\nLa clave del identificador \"%s\"\n\ +también aparece en el anillo de claves secretas." +fr: "\nLa clef pour l'utilisateur avec id: \"%s\"\n\ +apparait egalement dans le repertoire des clefs secretes." +muttde: "\nDer Schlüssel für die Benutzer-ID \"%s\"\n\ +ist auch im privaten Schlüsselbund vorhanden." + +"\nUse this key as an ultimately-trusted introducer (y/N)? " +de: "\nSoll dieser Schlüssel als 'absolut vertrauenswürdigen Einführer'\n\ +behandelt werden? (j/N) " +es: "\n¿Se utiliza esta clave como referencia fundamentalmente fiable (s/N)? " +fr: "\nUtiliser cette clé comme introducteur de confiance ultime (o/N)? " +muttde: "\nSoll dieser Schlüssel als 'absolut vertrauenswürdigen Einführer'\n\ +behandelt werden? (j/N) " + +"Public key for: \"%s\"\n\ +is not present in the backup keyring '%s'.\n" +de: "Der öffentliche Schlüssel von \"%s\"\n\ +ist nicht in der Schlüsselbund-Kopie '%s' enthalten.\n" +es: "La clave pública de: \"%s\"\n\ +no se encuentra en la copia de seguridad del anillo '%s'.\n" +fr: "La clé publique pour: \"%s\"\n\ +n'est pas présente dans le fichier de clés de sauvegarde '%s'.\n" +muttde: "Der öffentliche Schlüssel von \"%s\"\n\ +ist nicht in der Schlüsselbund-Kopie '%s' enthalten.\n" + +"\n\007WARNING: Secret key for: \"%s\"\n\ +does not match the key in the backup keyring '%s'.\n" +de: "\n\007WARNUNG: Der private Schlüssel von \"%s\"\n\ +entspricht nicht der Kopie im Schlüsselbund '%s'.\n" +es: "\n\007AVISO: La clave secreta de: \"%s\"\n\ +no coincide con la clave en la copia de seguridad del anillo '%s'.\n" +fr: "\n\007ATTENTION: la clé secrète pour: \"%s\"\n\ +ne correspond pas avec la clé dans le fichier de clés de sauvegarde.\n" +mutt: "\nWARNING: Secret key for: \"%s\"\n\ +does not match the key in the backup keyring '%s'.\n" +muttde: "\nWARNUNG: Der private Schlüssel von \"%s\"\n\ +entspricht nicht der Kopie im Schlüsselbund '%s'.\n" + +"\nMake a determination in your own mind whether this key actually\n\ +belongs to the person whom you think it belongs to, based on available\n\ +evidence. If you think it does, then based on your estimate of\n\ +that person's integrity and competence in key management, answer\n\ +the following question:\n" +de: "\nEntscheide für Dich, ob dieser Schlüssel tatsächlich zu dieser Person gehört.\n\ +Triff diese Entscheidung unter Berücksichtigung der zur Verfügung stehenden\n\ +Informationen. Wenn Du glaubst, daß der Schlüssel echt ist, dann beantworte\n\ +folgende Frage aufgrund Deiner Einschätzung der Vertrauenswürdigkeit der\n\ +Person und ihrer Kompetenz beim Umgang mit PGP-Schlüsseln:\n" +es: "\nDecide tú mismo si esta clave realmente pertenece, según la\n\ +evidencia a tu alcance, a la persona que crees. Si es así,\n\ +contesta a la siguiente pregunta, basándote en tu estimación de la\n\ +integridad de esa persona y de su conocimiento sobre gestión de claves:\n" +fr: "\nDeterminez vous même si cette clé appartient vraiment à la personne\ +\nà qui vous croyez qu'elle appartient, selon les informations disponibles.\ +\nSi vous le croyez, alors selon votre estimation de l'intégrité de cette\ +\npersonne et de sa compétence dans la gestion de clés, répondez à la\ +\nquestion suivante:\n" +muttde: "\nEntscheide für Dich, ob dieser Schlüssel tatsächlich zu dieser Person gehört.\n\ +Triff diese Entscheidung unter Berücksichtigung der zur Verfügung stehenden\n\ +Informationen. Wenn Du glaubst, daß der Schlüssel echt ist, dann beantworte\n\ +folgende Frage aufgrund Deiner Einschätzung der Vertrauenswürdigkeit der\n\ +Person und ihrer Kompetenz beim Umgang mit PGP-Schlüsseln:\n" + +"\nWould you trust \"%s\"\n\ +to act as an introducer and certify other people's public keys to you?\n\ +(1=I don't know. 2=No. 3=Usually. 4=Yes, always.) ? " +de: "\nWürdest Du \"%s\" als 'Einführer'\n\ +und 'Beglaubiger' für die öffentlichen Schlüssel Dritter vertrauen?\n\ +(1=Ich weiß nicht; 2=Nein; 3=In der Regel; 4=Ja, immer) : " +es: "\n¿Confiarías en \"%s\"\n\ +como referencia y para certificar ante ti otras claves públicas?\n\ +(1=No sé. 2=No. 3=Normalmente. 4=Sí, siempre.) ? " +fr: "\nAuriez vous confiance en \"%s\"\n\ +pour servir d'introducteur et certifier pour vous les clés publiques d'autres\ +\npersonnes? (1=Ne sais pas. 2=Non. 3=Généralement. 4=Oui, toujours.) ? " +muttde: "\nWürdest Du \"%s\" als 'Einführer'\n\ +und 'Beglaubiger' für die öffentlichen Schlüssel Dritter vertrauen?\n\ +(1=Ich weiß nicht; 2=Nein; 3=In der Regel; 4=Ja, immer) : " + +"This user is untrusted to certify other keys.\n" +de: "Dieser Benutzer ist nicht vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" +es: "Este usuario no es fiable para certificar otras claves.\n" +fr: "Cet utilisateur n'est pas de confiance pour certifier d'autres clés.\n" +muttde: "Dieser Benutzer ist nicht vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" + +"This user is generally trusted to certify other keys.\n" +de: "Dieser Benutzer ist in der Regel vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" +es: "Este usuario es de relativa confianza para certificar otras claves.\n" +fr: "Cet utilisateur est généralement de confiance pour certifier d'autres\ + clés.\n" +muttde: "Dieser Benutzer ist in der Regel vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" + +"This user is completely trusted to certify other keys.\n" +de: "Dieser Benutzer ist immer vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" +es: "Este usuario es de completa confianza para certificar otras claves.\n" +fr: "Cet utilisateur est de confiance totale pour certifier d'autres clés.\n" +muttde: "Dieser Benutzer ist immer vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" + +"This axiomatic key is ultimately trusted to certify other keys.\n" +de: "Dieser Schlüssel ist definitionsgemäß vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" +es: "Esta clave axiomática es absolutamente fiable para certificar otras.\n" +fr: "Cette clé axiomatique est de confiance ultime pour certifier\n\ +d'autres clés\n" +muttde: "Dieser Schlüssel ist definitionsgemäß vertrauenswürdig genug,\n\ +um andere Schlüssel zu beglaubigen.\n" + +"This key/userID association is not certified.\n" +de: "Diese Schlüssel-/Benutzer-Zuordnung ist nicht bestätigt.\n" +es: "Esta asociación clave/usuario no está certificada.\n" +fr: "Cette association clé/utilisateur n'est pas certifiée.\n" +muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist nicht bestätigt.\n" + +"This key/userID association is marginally certified.\n" +de: "Diese Schlüssel-/Benutzer-Zuordnung ist teilweise bestätigt.\n" +es: "Esta asociación clave/usuario está relativamente certificada.\n" +fr: "Cette association clé/utilisateur est marginalement certifiée.\n" +muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist teilweise bestätigt.\n" + +"This key/userID association is fully certified.\n" +de: "Diese Schlüssel-/Benutzer-Zuordnung ist voll bestätigt.\n" +es: "Esta asociación clave/usuario está completamente certificada.\n" +fr: "Cette association clé/utilisateur est complètement certifiée.\n" +muttde: "Diese Schlüssel-/Benutzer-Zuordnung ist voll bestätigt.\n" + +" Questionable certification from:\n " +de: " Fragwürdige Beglaubigung von:\n " +es: " Certificación cuestionable de:\n " +fr: " Certificat de confiance douteux de:\n " +muttde: " Fragwürdige Beglaubigung von:\n " + +" Untrusted certification from:\n " +de: " Unglaubwürdige Beglaubigung von:\n " +es: " Certificación no fiable de:\n " +fr: " Certificat non sûr de:\n " +muttde: " Unglaubwürdige Beglaubigung von:\n " + +" Generally trusted certification from:\n " +de: " Glaubwürdige Beglaubigung von:\n " +es: " Certificación relativamente fiable de:\n " +fr: " Certificat de confiance relatif de:\n " +muttde: " Glaubwürdige Beglaubigung von:\n " + +" Completely trusted certification from:\n " +de: " Voll glaubwürdige Beglaubigung von:\n " +es: " Certificación completamente fiable de:\n " +fr: " Certificat de confiance complet de:\n " +muttde: " Voll glaubwürdige Beglaubigung von:\n " + +" Axiomatically trusted certification from:\n " +de: " Definitionsgemäß glaubwürdige Beglaubigung von:\n " +es: " Certificación axiomáticamente fiable de:\n " +fr: " Certificat de confiance par axiome de:\n " +muttde: " Definitionsgemäß glaubwürdige Beglaubigung von:\n " + +"\nKey for user ID: %s\n" +de: "\nSchlüssel für Benutzer-ID \"%s\",\n" +es: "\nClave del usuario: %s\n" +fr: "\nClé pour le nom d'utilisateur: %s\n" +muttde: "\nSchlüssel für Benutzer-ID \"%s\",\n" + +"%d-bit key, key ID %s, created %s\n" +de: "%d-Bit-Schlüssel, Schlüssel-ID: %s, erzeugt am: %s.\n" +es: "Clave de %d bits, con identificador %s, creada el %\n" +fr: "Clef de %d bits. Id clef %s créé %s\n" +muttde: "%d-Bit-Schlüssel, Schlüssel-ID: %s, erzeugt am: %s.\n" + +"Bad key format.\n" +de: "Falsches Schlüssel-Format.\n" +es: "Formato incorrecto de clave.\n" +fr: "Mauvais format de clé\n" +muttde: "Falsches Schlüssel-Format.\n" + +"Unrecognized version.\n" +de: "Unbekannte Version.\n" +es: "Versión no reconocida.\n" +fr: "Version non reconnue.\n" +muttde: "Unbekannte Version.\n" + +"Key is disabled.\n" +de: "Der Schlüssel ist gesperrt.\n" +es: "La clave está desactivada.\n" +fr: "La clé est inactivée.\n" +muttde: "Der Schlüssel ist gesperrt.\n" + +"Also known as: %s\n" +de: "Alternative Benutzer-ID: %s\n" +es: "También conocido como: %s\n" +fr: "Egalement connu(e) en tant que: %s\n" +muttde: "Alternative Benutzer-ID: %s\n" + +" Certified by: " +de: " Beglaubigt von: " +es: " Certificado por: " +fr: " Certifiée par: " +muttde: " Beglaubigt von: " + +"\nWarning: keyid %4d/%s %s has no user id!\n" +de: "\nWARNUNG: Der Schlüssel '%4d/%s %s' hat keine Benutzer-ID!\n" +es: "\nAdvertencia: la clave %4d/%s %s no tiene identificador\n" +fr: "\nAttention: IDclef %4d/%s %s n'est pas associé à un utilisateur!\n" +muttde: "\nWARNUNG: Der Schlüssel '%4d/%s %s' hat keine Benutzer-ID!\n" + +"Updated keyID: 0x%s\n" +de: "Die Schlüssel-ID 0x%s wurde aktualisiert.\n" +es: "Identificador actualizado: 0x%s\n" +fr: "Mise à jour de la clef ID: 0x%s\n" +muttde: "Die Schlüssel-ID 0x%s wurde aktualisiert.\n" + +"\n\007Unable to create key file '%s'.\n" +de: "\n\007FEHLER beim Erzeugen der Schlüsseldatei '%s'.\n" +es: "\n\007No puede crearse el fichero de claves '%s'.\n" +fr: "\n\007Impossible de créer le fichier de clés '%s'.\n" +mutt: "\nUnable to create key file '%s'.\n" +muttde: "\nFEHLER beim Erzeugen der Schlüsseldatei '%s'.\n" + +"\n\007Keyring file '%s' does not exist. " +de: "\n\007Der Schlüsselbund '%s' existiert nicht.\n" +es: "\n\007El anillo '%s' no existe. " +fr: "\n\007Le fichier de clés '%s' n'existe pas. " +mutt: "\nKeyring file '%s' does not exist. " +muttde: "\nDer Schlüsselbund '%s' existiert nicht.\n" + +"\n\007Sorry, this key has been revoked by its owner.\n" +de: "\n\007Dieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" +es: "\n\007Esa clave ha sido revocada por su propietario.\n" +fr: "\n\007Désolé, cette clé a été révoquée par son propriétaire.\n" +mutt: "\nSorry, this key has been revoked by its owner.\n" +muttde: "\nDieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" + +"\nKey for user ID \"%s\"\n\ +has been revoked. You cannot use this key.\n" +de: "\nDer Schlüssel von \"%s\"\n\ +wurde zurückgezogen und kann nicht verwendet werden.\n" +es: "\nLa clave del usuario \"%s\"\n\ +ha sido revocada. No puede utilizarse.\n" +fr: "\nLa clé pour l'utilisateur \"%s\"\n\ +a été révoquée. Vous ne pouvez utiliser cette clé.\n" +muttde: "\nDer Schlüssel von \"%s\"\n\ +wurde zurückgezogen und kann nicht verwendet werden.\n" + +"\n\007Key matching expected Key ID %s not found in file '%s'.\n" +de: "\n\007Der zur erwarteten Schlüssel-ID %s passende Schlüssel\n\ +ist nicht in der Datei '%s' enthalten.\n" +es: "\n\007Se esperaba una clave %s que no se encuentra en '%s'.\n" +fr: "\n\007Clé correspondant à l'identificateur %s non trouvée\ +\ndans le fichier '%s'.\n" +mutt: "\nKey matching expected Key ID %s not found in file \n\ +'%s'.\n" +muttde: "\nDer zur erwarteten Schlüssel-ID %s passende Schlüssel\n\ +ist nicht in der Datei '%s' enthalten.\n" + +"\n\007Key matching userid '%s' not found in file '%s'.\n" +de: "\n\007Der zur Benutzer-ID \"%s\" passende Schlüssel\n\ +ist nicht in der Datei '%s' enthalten.\n" +es: "\n\007La clave del usuario '%s' no se encuentra en el fichero '%s'.\n" +fr: "\n\007Clé correspondant à l'utilisateur '%s' introuvable\n\ +dans le fichier '%s'.\n" +mutt: "\nKey matching userid '%s' not found in file '%s'.\n" +muttde: "\nDer zur Benutzer-ID \"%s\" passende Schlüssel\n\ +ist nicht in der Datei '%s' enthalten.\n" + +"Enter secret key filename: " +de: "Dateiname des privaten Schlüssels: " +es: "Introduzca el nombre del anillo de claves secretas: " +fr: "Entrez le nom du fichier de clés secrètes: " +muttde: "Dateiname des privaten Schlüssels: " + +"Enter public key filename: " +de: "Dateiname des öffentlichen Schlüssels: " +es: "Introduzca el nombre del anillo de claves públicas: " +fr: "Entrez le nom du fichier de clés publiques: " +muttde: "Dateiname des öffentlichen Schlüssels: " + +"\nYou need a pass phrase to unlock your RSA secret key. " +de: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu benutzen." +es: "\nSe necesita la contraseña para abrir la clave secreta RSA. " +fr: "\nVous devez avoir un mot de passe pour utiliser votre clé secrète RSA." +muttde: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu benutzen." + +"No passphrase; secret key unavailable.\n" +de: "\nKein Mantra; der private Schlüssel kann nicht benutzt werden.\n" +es: "\nSin contraseña; la clave secreta no está disponible.\n" +fr: "\nSans la phrase secrete, pas de clef secrete disponible.\n" +muttde: "\nKein Mantra; der private Schlüssel kann nicht benutzt werden.\n" + +"\nAdvisory warning: This RSA secret key is not protected by a \ +passphrase.\n" +de: "\nHinweis: Dieser private Schlüssel ist nicht durch ein Mantra geschützt.\n" +es: "\nAdvertencia: Esta clave secreta RSA no tiene contraseña.\n" +fr: "\nAttention: cette clé secrète RSA n'est pas protégée par un mot \ +de passe" +muttde: "\nHinweis: Dieser private Schlüssel ist nicht durch ein Mantra geschützt.\n" + +"Pass phrase is good. " +de: "\nDas Mantra ist richtig.\n" +es: "La contraseña es correcta. " +fr: "Le mot de passe est correct. " +muttde: "\nDas Mantra ist richtig.\n" + +"\n\007Key file '%s' is not a secret key file.\n" +de: "\n\007Die Datei '%s' ist keine private Schlüsseldatei.\n" +es: "\n\007El fichero '%s' no tiene claves secretas.\n" +fr: "\n\007Le fichier de clé '%s' n'est pas un fichier de clés secrètes.\n" +mutt: "\nKey file '%s' is not a secret key file.\n" +muttde: "\nDie Datei '%s' ist keine private Schlüsseldatei.\n" + +"Key fingerprint =" +de: "Fingerabdruck des Schlüssels:" +es: "Huella dactilar =" +fr: "Empreinte de la clé =" +muttde: "Fingerabdruck des Schlüssels:" + +"\nKey ring: '%s'" +de: "\nSchlüsselbund '%s':\n" +es: "\nAnillo de claves: '%s',\n" +fr: "\nFichier de clé: '%s'" +muttde: "\nSchlüsselbund '%s':\n" + +", looking for user ID \"%s\"." +de: "Suche nach Benutzer-ID \"%s\":\n" +es: "buscando el usuario \"%s\"\n" +fr: ", recherche du nom d'utilisateur \"%s\"." +muttde: "Suche nach Benutzer-ID \"%s\":\n" + +"1 matching key found.\n" +de: "Es wurde ein passender Schlüssel gefunden.\n" +es: "Se ha encontrado una clave.\n" +fr: "1 clef trouvée.\n" +muttde: "Es wurde ein passender Schlüssel gefunden.\n" + +"%d matching keys found.\n" +de: "Es wurden %d passende Schlüssel gefunden.\n" +es: "Se han encontrado %d claves.\n" +fr: "%d clefs trouvées. \n" +muttde: "Es wurden %d passende Schlüssel gefunden.\n" + +"\nChecking signatures...\n" +de: "\nÜberprüfung der Unterschriften...\n" +es: "\nComprobando las firmas...\n" +fr: "\nVérification des signatures...\n" +muttde: "\nÜberprüfung der Unterschriften...\n" + +"*** KEY REVOKED ***\n" +de: "*** ZURÜCKGEZOGEN ***\n" +es: "*** CLAVE REVOCADA ***\n" +fr: "*** CLEF REVOQUÉE ***\n" +muttde: "*** ZURÜCKGEZOGEN ***\n" + +"(Unknown signator, can't be checked)" +de: "(Unterschreibender unbekannt, keine Prüfung)" +es: "(Firmante desconocido, no puede comprobarse)" +fr: "(Signataire inconnu, ne peut être vérifié)" +muttde: "(Unterschreibender unbekannt, keine Prüfung)" + +"(Key too long, can't be checked)" +de: "(Schlüssel zu lang, keine Prüfung)" +es: "(Clave demasiado larga, no puede comprobarse)" +fr: "(Clef trop longue, ne peut etre verifiée)" +muttde: "(Schlüssel zu lang, keine Prüfung)" + +"(Malformed or obsolete signature format)" +de: "(Unterschriftsformat fehlerhaft oder veraltet)" +es: "(Formato de firma obsoleto o incorrecto)" +fr: "(Signature malformee ou obsolete)" +muttde: "(Unterschriftsformat fehlerhaft oder veraltet)" + +"(Unknown public-key algorithm)" +de: "(unbek. Algorithmus des öffentl. Schlüssels)" +es: "(Algoritmo desconocido de clave pública)" +fr: "(Algorithme de clef publique inconnu)" +muttde: "(unbek. Algorithmus des öffentl. Schlüssels)" + +"(Unknown hash algorithm)" +de: "(unbekannter Prüfsummen-Algorithmus)" +es: "(Algoritmo desconocido de distribución [hash])" +fr: "(Algorithme de hash inconnu)" +muttde: "(unbekannter Prüfsummen-Algorithmus)" + +"(Unknown signature packet version)" +de: "(unbekannte Version des Unterschriftsblocks)" +es: "(Versión desconocida de firma)" +fr: "Version de paquet de signature inconnue" +muttde: "(unbekannte Version des Unterschriftsblocks)" + +"(Malformed signature)" +de: "(fehlerhafte Unterschrift)" +es: "(Firma mal formada)" +fr: "(Signature deformée)" +muttde: "(fehlerhafte Unterschrift)" + +"(Corrupted signature packet)" +de: "(beschädigter Unterschriftsblock)" +es: "(Firma dañada)" +fr: "(Signature corrompue)" +muttde: "(beschädigter Unterschriftsblock)" + +"\007**** BAD SIGNATURE! ****" +de: "\007**** FALSCHE UNTERSCHRIFT! ****" +es: "\007**** FIRMA INCORRECTA ****" +fr: "\007**** MAUVAISE SIGNATURE! ****" +mutt: "**** BAD SIGNATURE! ****" +muttde: "**** FALSCHE UNTERSCHRIFT! ****" + +"Remove bad signatures (Y/n)? " +de: "Falsche Unterschriften löschen? (J/n) " +es: "¿Suprimir las firmas incorrectas (S/n)? " +fr: "Supprimer les mauvaises signatures (O/n)? " +muttde: "Falsche Unterschriften löschen? (J/n) " + +"\nRemoving signatures from userid '%s' in key ring '%s'\n" +de: "\nLöschen der Unterschriften unter ID \"%s\"\naus dem Schlüsselbund '%s'.\n" +es: "\nSuprimiendo las firmas del usuario '%s' del\n\ +anillo de claves '%s'\n" +fr: "\nSuppression des signatures de l'utilisateur '%s'\n\ +dans le fichier de clés '%s'\n" +muttde: "\nLöschen der Unterschriften unter ID \"%s\"\naus dem Schlüsselbund '%s'.\n" + +"\n\007Key not found in key ring '%s'.\n" +de: "\n\007Der Schlüssel ist nicht im Schlüsselbund\n'%s' enthalten.\n" +es: "\n\007No se ha encontrado la clave en el anillo '%s'.\n" +fr: "\n\007Clé introuvable dans le fichier de clés '%s'.\n" +mutt: "\nKey not found in key ring '%s'.\n" +muttde: "\nDer Schlüssel ist nicht im Schlüsselbund\n'%s' enthalten.\n" + +"\nKey has no signatures to remove.\n" +de: "\nDer Schlüssel trägt keine Unterschriften, die gelöscht werden könnten.\n" +es: "\nLa clave no tiene ninguna firma por borrar.\n" +fr: "\nLa clé n'a pas de signatures à supprimer.\n" +muttde: "\nDer Schlüssel trägt keine Unterschriften, die gelöscht werden könnten.\n" + +"\nKey has %d signature(s):\n" +de: "\nDer Schlüssel trägt %d Unterschrift(en):\n" +es: "\nLa clave tiene %d firma(s):\n" +fr: "\nLa clé a %d signature(s):\n" +muttde: "\nDer Schlüssel trägt %d Unterschrift(en):\n" + +"(Unknown signator, can't be checked)\n" +de: "(Unterschreibender unbekannt, keine Prüfung)\n" +es: "(Firmante desconocido, no puede comprobarse)\n" +fr: "(Signataire inconnu, ne peut être vérifié)\n" +muttde: "(Unterschreibender unbekannt, keine Prüfung)\n" + +"Remove this signature (y/N)? " +de: "Diese Unterschrift löschen? (j/N) " +es: "\277Suprimir esta firma (s/N)? " +fr: "Suppression de cette signature (o/N)? " +muttde: "Diese Unterschrift löschen? (j/N) " + +"\nNo key signatures removed.\n" +de: "\nKeine Unterschriften gelöscht.\n" +es: "\nNo se ha suprimido ninguna firma.\n" +fr: "\nPas de supression de signature de clé.\n" +muttde: "\nKeine Unterschriften gelöscht.\n" + +"\n%d key signature(s) removed.\n" +de: "\n%d Unterschrift(en) gelöscht.\n" +es: "\nSuprimidas %d firma(s) de clave.\n" +fr: "\n%d signature(s) de clé supprimée(s).\n" +muttde: "\n%d Unterschrift(en) gelöscht.\n" + +"\nRemoving from key ring: '%s'" +de: "\nLöschen aus Schlüsselbund '%s'\n" +es: "\nSuprimiendo del anillo: '%s'" +fr: "\nSuppression du ficher de clés: '%s'" +muttde: "\nLöschen aus Schlüsselbund '%s'\n" + +", userid \"%s\".\n" +de: "Benutzer-ID \"%s\".\n" +es: ", identificador \"%s\".\n" +fr: ", utilisateur \"%s\".\n" +muttde: "Benutzer-ID \"%s\".\n" + +"\nKey has more than one user ID.\n\ +Do you want to remove the whole key (y/N)? " +de: "\nDer Schlüssel hat mehr als eine Benutzer-ID.\n\ +Soll der ganze Schlüssel vollständig gelöscht werden? (j/N) " +es: "\nLa clave tiene más de un identificador de usuario.\n\ +¿Quieres suprimirla por completo (s/N)? " +fr: "\nLa clé a plus d'un nom d'utilisateur.\n\ +Voulez vous supprimier toute la clé (o/N)? " +muttde: "\nDer Schlüssel hat mehr als eine Benutzer-ID.\n\ +Soll der ganze Schlüssel vollständig gelöscht werden? (j/N) " + +"\nNo more user ID's\n" +de: "\nKeine weiteren Benutzer-IDs.\n" +es: "\nNo hay más identificadores de usuario\n" +fr: "\nPlus de noms d'utilisateur\n" +muttde: "\nKeine weiteren Benutzer-IDs.\n" + +"Remove \"%s\" (y/N)? " +de: "\"%s\" löschen? (j/N) " +es: "¿Suprimir \"%s\" (s/N)? " +fr: "Supprimer \"%s\" (o/N)? " +muttde: "\"%s\" löschen? (j/N) " + +"\nAre you sure you want this key removed (y/N)? " +de: "\nBist Du sicher, daß Du diesen Schlüssel löschen willst? (j/N) " +es: "\n¿Estás seguro de querer suprimir esta clave (s/N)? " +fr: "\nEtes vous sûr(e) de vouloir supprimer cette clé (o/N)? " +muttde: "\nBist Du sicher, daß Du diesen Schlüssel löschen willst? (j/N) " + +"\nUser ID removed from key ring.\n" +de: "\nDie Benutzer-ID wurde aus dem Schlüsselbund gelöscht.\n" +es: "\nIdentificador suprimido del anillo.\n" +fr: "\nNom d'utilisateur supprimé du fichier de clés.\n" +muttde: "\nDie Benutzer-ID wurde aus dem Schlüsselbund gelöscht.\n" + +"\nKey removed from key ring.\n" +de: "\nDer Schlüssel wurde aus dem Schlüsselbund gelöscht.\n" +es: "\nClave suprimida del anillo.\n" +fr: "\nClé supprimée du fichier de clés.\n" +muttde: "\nDer Schlüssel wurde aus dem Schlüsselbund gelöscht.\n" + +"\nKey or user ID is also present in secret keyring.\n\ +Do you also want to remove it from the secret keyring (y/N)? " +de: "\nDer Schlüssel oder die Benutzer-ID sind auch im privaten Schlüsselbund\n\ +enthalten. Sollen sie dort ebenfalls gelöscht werden? (j/N) " +es: "\nEl identificador se encuentra además en el anillo de\n\ +claves secretas. ¿Quieres borrarlo también de ahí (s/N)? " +fr: "\nLa clé ou le nom d'utilisateur est aussi dans le fichier de clés\n\ +secrètes. Voulez vous l'enlever du ficher de clés secrètes (o/N)? " +muttde: "\nDer Schlüssel oder die Benutzer-ID sind auch im privaten Schlüsselbund\n\ +enthalten. Sollen sie dort ebenfalls gelöscht werden? (j/N) " + +"\nExtracting from key ring: '%s'" +de: "\nExtrahieren aus dem Schlüsselbund: '%s'\n" +es: "\nExtrayendo del anillo de claves: '%s'" +fr: "\nExtraction du fichier de clés: '%s'" +muttde: "\nExtrahieren aus dem Schlüsselbund: '%s'\n" + +"Extract the above key into which file?" +de: "Dateiname dieses extrahierten Schlüssels?" +es: "¿En qué fichero se extrae la clave anterior?" +fr: "Extraire la clef suivant de quel fichier?" +muttde: "Dateiname dieses extrahierten Schlüssels?" + +"Key ID %s is already included in key ring '%s'.\n" +de: "Die Schlüssel-ID %s ist bereits im Schlüsselbund\n'%s' enthalten.\n" +es: "La clave %s ya está en el anillo '%s'.\n" +fr: "L'identificateur de clé %s est déjà présent\ +\ndans le fichier de clés '%s'.\n" +muttde: "Die Schlüssel-ID %s ist bereits im Schlüsselbund\n'%s' enthalten.\n" + +"\nKey extracted to file '%s'.\n" +de: "\nSchlüssel extrahiert in Datei '%s'.\n" +es: "\nClave extraída en el fichero '%s'.\n" +fr: "\nClé mise dans le fichier '%s'.\n" +muttde: "\nSchlüssel extrahiert in Datei '%s'.\n" + +"\nThis operation may not be performed on a secret keyring.\n\ +Defaulting to public keyring." +de: "\nDiese Operation kann mit einem privaten Schlüsselbund nicht ausgeführt\n\ +werden. Der öffentliche Schlüsselbund wird versucht." +es: "\nEsta operacion no puede realizarse sobre el anillo de \ +claves secretas.\nSe pasa al anillo de claves públicas." +fr: "\nCette operation ne peut pas être effectuée sur un fichier de clés\n\ +secrètes. Le fichier de clés publiques sera utilisé à la place." +muttde: "\nDiese Operation kann mit einem privaten Schlüsselbund nicht ausgeführt\n\ +werden. Der öffentliche Schlüsselbund wird versucht." + +"\nEditing userid \"%s\" in key ring: '%s'.\n" +de: "\nBearbeitung der Benutzer-ID \"%s\"\nim Schlüsselbund '%s'.\n" +es: "\nModificación del identificador \"%s\"\n\ +en el anillo: '%s'.\n" +fr: "\nModification du nom d'utilsateur \"%s\"\n\ +dans le fichier de clé: '%s'.\n" +muttde: "\nBearbeitung der Benutzer-ID \"%s\"\nim Schlüsselbund '%s'.\n" + +"\nCan't open public key ring file '%s'\n" +de: "\nFEHLER beim Öffnen des öffentlichen Schlüsselbunds '%s'.\n" +es: "\nNo puede abrirse el anillo de claves públicas '%s'\n" +fr: "\nOuverture du fichier de clés publiques '%s' impossible.\n" +muttde: "\nFEHLER beim Öffnen des öffentlichen Schlüsselbunds '%s'.\n" + +"\n\007File '%s' is not a public keyring.\n" +de: "\n\007Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n" +es: "\n\007El fichero '%s' no es un anillo de claves públicas.\n" +fr: "\n\007Le fichier '%s' n'est pas un fichier de clés publiques.\n" +mutt: "\nFile '%s' is not a public keyring.\n" +muttde: "\nDie Datei '%s' ist kein öffentlicher Schlüsselbund.\n" + +"\n\007This key has been revoked by its owner.\n" +de: "\n\007Dieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" +es: "\n\007Esta clave ha sido revocada por su propietario.\n" +fr: "\n\007Cette clé a été révoquée par son propriétaire.\n" +mutt: "\nThis key has been revoked by its owner.\n" +muttde: "\nDieser Schlüssel wurde von seinem Besitzer zurückgezogen.\n" + +"\nNo secret key available. Editing public key trust parameter.\n" +de: "\nKein privater Schlüssel vorhanden. Die 'Vertrauens-Einstellungen' des\n\ +öffentlichen Schlüssels werden bearbeitet.\n" +es: "\nNo hay clave secreta disponible. Modificando el parámetro \ +de confianza\n\ +de la clave pública.\n" +fr: "\nPas de clé secrète disponible. Modification du paramètre de\n\ +confiance de la clé publique.\n" +muttde: "\nKein privater Schlüssel vorhanden. Die 'Vertrauens-Einstellungen' des\n\ +öffentlichen Schlüssels werden bearbeitet.\n" + +"Current trust for this key's owner is: %s\n" +de: "\nAktuelles 'Vertrauen' zum Besitzer dieses Schlüssels: %s\n" +es: "La confianza actual en el propietario de esta clave es: %s\n" +fr: "Le niveau de confiance courant pour le propriétaire de\n\ +cette clé est: %s\n" +muttde: "\nAktuelles 'Vertrauen' zum Besitzer dieses Schlüssels: %s\n" + +"Public key ring updated.\n" +de: "\nDer öffentliche Schlüsselbund wurde aktualisiert.\n" +es: "Actualizado el anillo de claves públicas.\n" +fr: "Fichier de clés publiques modifié...\n" +muttde: "\nDer öffentliche Schlüsselbund wurde aktualisiert.\n" + +"\nCurrent user ID: %s" +de: "\nAktuelle Benutzer-ID: %s" +es: "\nIdentificador actual de usuario: %s" +fr: "\nNom d'utilisateur courant: %s" +muttde: "\nAktuelle Benutzer-ID: %s" + +"\nDo you want to add a new user ID (y/N)? " +de: "\nWillst Du eine neue Benutzer-ID hinzufügen? (j/N) " +es: "\n¿Quieres añadir un nuevo identificador de usuario (s/N)? " +fr: "\nVoulez-vous ajouter ce nouvel ID (o/N)?" +muttde: "\nWillst Du eine neue Benutzer-ID hinzufügen? (j/N) " + +"\nEnter the new user ID: " +de: "\nGib die neue Benutzer-ID ein: " +es: "\nIntroduzca el nuevo identificador: " +fr: "\nEntrez le nouveau nom d'utilisateur: " +muttde: "\nGib die neue Benutzer-ID ein: " + +"\nMake this user ID the primary user ID for this key (y/N)? " +de: "\nSoll dies die vorrangige Benutzer-ID für diesen Schlüssel werden? (j/N) " +es: "\n¿Se establece este identificador como primario para esta clave (s/N)? " +fr: "\nEtablir ce nom d'utilisateur comme nom principal pour cette clé \ +(o/N)? " +muttde: "\nSoll dies die vorrangige Benutzer-ID für diesen Schlüssel werden? (j/N) " + +"\nDo you want to change your pass phrase (y/N)? " +de: "\nWillst Du Dein Mantra ändern? (j/N) " +es: "\n¿Quieres cambiar la contraseña (s/N)? " +fr: "\nVoulez vous changer votre mot de passe (o/N)? " +muttde: "\nWillst Du Dein Mantra ändern? (j/N) " + +"(No changes will be made.)\n" +de: "\n(Es werden keine Änderungen vorgenommen.)\n" +es: "(No se efectuará ningún cambio.)\n" +fr: "(Aucun changement ne sera effectué.)\n" +muttde: "\n(Es werden keine Änderungen vorgenommen.)\n" + +"\n\007Unable to update secret key ring.\n" +de: "\n\007FEHLER beim Aktualisieren des privaten Schlüsselbunds.\n" +es: "\n\007No puede actualizarse el anillo de claves secretas.\n" +fr: "\n\007Impossible de modifier le fichier de clés secrètes.\n" +mutt: "\nUnable to update secret key ring.\n" +muttde: "\nFEHLER beim Aktualisieren des privaten Schlüsselbunds.\n" + +"\nSecret key ring updated...\n" +de: "\n\nDer private Schlüsselbund wurde aktualisiert.\n" +es: "\nActualizado el anillo de claves secretas ...\n" +fr: "\nFichier de clés secrètes modifié...\n" +muttde: "\n\nDer private Schlüsselbund wurde aktualisiert.\n" + +"\n\007Unable to update public key ring.\n" +de: "\n\007FEHLER beim Aktualisieren des öffentlichen Schlüsselbunds.\n" +es: "\n\007No puede actualizarse el anillo de claves públicas.\n" +fr: "\n\007Impossible de modifier le fichier de clés publiques.\n" +mutt: "\nUnable to update public key ring.\n" +muttde: "\nFEHLER beim Aktualisieren des öffentlichen Schlüsselbunds.\n" + +"(No need to update public key ring)\n" +de: "\n(Keine Änderung am öffentlichen Schlüsselbund notwendig.)\n" +es: "(No es necesario actualizar el anillo de claves públicas)\n" +fr: "(Pas besoin de modifier le fichier de clés publiques)\n" +muttde: "\n(Keine Änderung am öffentlichen Schlüsselbund notwendig.)\n" + +"\nDo you want to permanently revoke your public key\n\ +by issuing a secret key compromise certificate\n\ +for \"%s\" (y/N)? " +de: "\nWillst Du Deinen öffentlichen Schlüssel wirklich durch das Versenden\n\ +einer Widerrufs-Urkunde für \"%s\"\nzurückziehen, d.h. für ungültig erklären? (j/N) " +es: "\n¿Quieres revocar permanentemente tu clave pública\n\ +emitiendo un certificado de compromiso de clave secreta\n\ +para \"%s\" (s/N)? " +fr: "\nVoulez vous révoquer de façon permanente votre clé publique\n\ +en émettant un certificat de compromission de clé secrète\n\ +pour \"%s\" (o/N)? " +muttde: "\nWillst Du Deinen öffentlichen Schlüssel wirklich durch das Versenden\n\ +einer Widerrufs-Urkunde für \"%s\"\nzurückziehen, d.h. für ungültig erklären? (j/N) " + +"You can only disable keys on your public keyring.\n" +de: "Du kannst nur Schlüssel aus Deinem öffentlichen Schlüsselbund sperren.\n" +es: "Sólo puedes desactivar claves en el anillo de claves públicas.\n" +fr: "Vous ne pouvez inactiver des clés que sur votre fichier de clés\ +\npubliques.\n" +muttde: "Du kannst nur Schlüssel aus Deinem öffentlichen Schlüsselbund sperren.\n" + +"\nKey is already disabled.\n\ +Do you want to enable this key again (y/N)? " +de: "\nDieser Schlüssel ist schon gesperrt.\nMöchtest Du ihn wieder freigeben? (j/N) " +es: "\nLa clave ya está desactivada.\n\ +¿Quieres activarla otra vez (s/N)? " +fr: "\nLa clé est déjà inactivée.\n\ +Voulez vous réactiver cette clé (o/N)? " +muttde: "\nDieser Schlüssel ist schon gesperrt.\nMöchtest Du ihn wieder freigeben? (j/N) " + +"\nDisable this key (y/N)? " +de: "\nSoll dieser Schlüssel gesperrt werden? (j/N) " +es: "\n¿Desactivar esta clave (s/N)? " +fr: "Désactiver cette clé (o/N)? " +muttde: "\nSoll dieser Schlüssel gesperrt werden? (j/N) " + +"Pick your RSA key size:\n\ + 1) 1024 bits- User grade, fast but less secure\n\ + 2) 1535 bits- Regional CA grade, medium speed, good security\n\ + 3) 2048 bits- Root CA grade, slow, high security\n\ +Choose 1, 2, or 3, or enter desired number of bits (384...8192): " +de: "Wähle die Länge Deines RSA-Schlüssels aus:\ +\n 1) 1024 Bits: für Nutzer: schnell, aber nicht ganz so sicher\ +\n 2) 1535 Bits: für regionale CAs: mittelmäßig schnell, recht sicher\ +\n 3) 2048 Bits: für Root CAs: langsam, jedoch sehr sicher\ +\nAuswahl (1, 2, 3 oder die Länge des Schlüssels in Bits (384...8192)): " +es: "Elija un tamaño de clave RSA:\n\ + 1) 1024 bits- Nivel comercial bajo, r\0341pido pero menos seguro\n\ + 2) 1535 bits- Nivel comercial alto, velocidad media con buena seguridad\n\ + 3) 2048 bits- Nivel \"militar\", lento con alta seguridad\n\ +Escoge 1, 2, 3, o el número requerido de bits (384...8192): " +fr: "Choisissez la taille de votre clef RSA:\n\ + 1) 1024 bits- Niveau de base, rapide mais moins securitaire\n\ + 2) 1535 bits- Niveau de securité eleve - vitesse moyenne \n\ + 3) 2048 bits- Pour les militaires, les diplomates... les paranoiaques \n\ +Choisissez 1, 2, ou 3, ou entrez le nombre de bits desires (384...8192): " +muttde: "Wähle die Länge Deines RSA-Schlüssels aus:\ +\n 1) 1024 Bits: für Nutzer: schnell, aber nicht ganz so sicher\ +\n 2) 1535 Bits: für regionale CAs: mittelmäßig schnell, recht sicher\ +\n 3) 2048 Bits: für Root CAs: langsam, jedoch sehr sicher\ +\nAuswahl (1, 2, 3 oder die Länge des Schlüssels in Bits (384...8192)): " + +"Generating an RSA key with a %d-bit modulus.\n" +de: "Erzeugung eines RSA-Schlüssels mit einem %d-Bit-Modulus.\n" +es: "Generando una clave RSA con módulo de %d bits.\n" +fr: "Generation d'une clé RSA avec un module de %d bits.\n" +muttde: "Erzeugung eines RSA-Schlüssels mit einem %d-Bit-Modulus.\n" + +"\nYou need a user ID for your public key. The desired form for this\n\ +user ID is your name, followed by your E-mail address enclosed in\n\ +, if you have an E-mail address.\n\ +Form: Real Name (comment) (options)\n\ + Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ +Enter a user ID for your public key: \n" +de: "\nDu brauchst eine Benutzer-ID für Deinen öffentlichen Schlüssel. Das übliche\n\ +Format für diese Benutzer-ID ist Dein Realname, gefolgt von Deinem Usernamen\n\ +in , falls Du per E-Mail erreichbar bist.\n\ +Format: Bürgerlicher Name (Kommentar) (Optionen)\n\ + Freiwillige Optionen: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ +Gib die Benutzer-ID für Deinen öffentlichen Schlüssel ein:\n" +es: "\nNecesitas un identificador para tu clave pública. El formato preferido\n\ +consiste en tu nombre, seguido de tu dirección de correo electrónico,\n\ +si tienes, entre <ángulos>.\n\ +Form: Real Name (comment) (options)\n\ + Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ +Introduce un identificador de usuario para tu clave pública: \n" +fr: "\nIl vous faut un nom d'utilisateur pour votre clé publique. La forme\n\ +désirée pour ce nom d'utilisateur est votre nom, suivi de votre addresse\n\ +de courrier électronique entre , si vous en avez une.\n\ +Form: Real Name (comment) (options)\n\ + Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ +Entrez un nom d'utilisateur pour votre clé publique\n\ +(votre nom): " +muttde: "\nDu brauchst eine Benutzer-ID für Deinen öffentlichen Schlüssel. Das übliche\n\ +Format für diese Benutzer-ID ist Dein Realname, gefolgt von Deinem Usernamen\n\ +in , falls Du per E-Mail erreichbar bist.\n\ +Format: Bürgerlicher Name (Kommentar) (Optionen)\n\ + Freiwillige Optionen: ENCR, SIGN, EXPIRE:yyyy-mm-dd\n\ +Gib die Benutzer-ID für Deinen öffentlichen Schlüssel ein:\n" + +"Generating RSA key-pair with UserID \"%s\".\n" +de: "Erzeugung eines RSA-Schlüsselpaares mit der\nBenutzer-ID \"%s\".\n" +es: "Generando el par de claves RSA con identificador \"%s\".\n" +fr: "Génération d'une paire de clefs RSA de l'utilisateur '%s'.\n" +muttde: "Erzeugung eines RSA-Schlüsselpaares mit der\nBenutzer-ID \"%s\".\n" + +"\nYou need a pass phrase to protect your RSA secret key.\n\ +Your pass phrase can be any sentence or phrase and may have many\n\ +words, spaces, punctuation, or any other printable characters.\n" +de: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu schützen.\n\ +Dein Mantra kann jeder beliebige Satz oder Zeichenfolge sein und darf aus\n\ +vielen Worten, Leerzeichen oder anderen druckbaren Zeichen bestehen.\n" +es: "\nNecesitas una contraseña para proteger tu clave secreta RSA.\n\ +Puede ser cualquier expresión formada por varias palabras, espacios,\n\ +signos de puntuación o cualquier otro carácter imprimible.\n" +fr: "\nVous devez avoir un mot de passe pour protéger votre clé RSA \n\ +secrète. Votre mot de passe peut être n'importe quelle phrase ou portion\n\ +de phrase et peut avoir plusieurs mots, espaces, caractères de ponctuation\n\ +ou tout autre caractère imprimable.\n" +muttde: "\nDu brauchst ein Mantra, um Deinen privaten RSA-Schlüssel zu schützen.\n\ +Dein Mantra kann jeder beliebige Satz oder Zeichenfolge sein und darf aus\n\ +vielen Worten, Leerzeichen oder anderen druckbaren Zeichen bestehen.\n" + +"\nNote that key generation is a lengthy process.\n" +de: "\n\nBeachte, daß die Schlüsselerzeugung eine zeitaufwendige Sache ist.\n" +es: "\nTen en cuenta que la generación de claves es un proceso lento.\n" +fr: "\nNotez que la génération de clé est une procédure lente.\n" +muttde: "\n\nBeachte, daß die Schlüsselerzeugung eine zeitaufwendige Sache ist.\n" + +"Key generation stopped at user request.\n" +de: "Die Schlüsselerzeugung wurde durch den Benutzer abgebrochen!\n" +es: "Generación de claves interrumpida a petición del usuario.\n" +fr: "Le génération de la clef a été stoppée à la demande de l'utilisateur.\n" +muttde: "Die Schlüsselerzeugung wurde durch den Benutzer abgebrochen!\n" + +"\n\007Keygen failed!\n" +de: "\n\007FEHLER bei der Schlüssel-Erzeugung!\n" +es: "\n\007Error en la generación de claves\n" +fr: "\n\007Generation de clé non réussie!\n" +mutt: "\nKeygen failed!\n" +muttde: "\nFEHLER bei der Schlüssel-Erzeugung!\n" + +"Key ID %s\n" +de: "Schlüssel-ID: %s\n" +es: "Identificador de clave %s\n" +fr: "Identificateur de clé %s\n" +muttde: "Schlüssel-ID: %s\n" + +"Display secret components (y/N)?" +de: "Geheime Bestandteile anzeigen? (j/N) " +es: "¿Mostrar los componentes secretos (s/N)?" +fr: "Affichier les composantes secretes (o/N)?" +muttde: "Geheime Bestandteile anzeigen? (j/N) " + +"\007Key generation completed.\n" +de: "\n\007Die Erzeugung des Schlüssels ist beendet.\n" +es: "\007Finalizada la generación de claves.\n" +fr: "\007Génération de clé terminée.\n" +mutt: "Key generation completed.\n" +muttde: "\nDie Erzeugung des Schlüssels ist beendet.\n" + +"Type Bits/KeyID Date User ID\n" +de: "Typ Bits/KeyID Datum NutzerID\n" +es: "Tipo Bits/Clave Fecha Identificador\n" +fr: "Type Bits/Clef Date ID utilisateur\n" +muttde: "Typ Bits/KeyID Datum NutzerID\n" + +"\n\007File '%s' is not a text file; cannot display.\n" +de: "\n\007Die Datei '%s' ist keine Textdatei\n\ +und kann deshalb nicht angezeigt werden!\n" +es: "\n\007El fichero '%s' no es de texto; no puede mostrarse.\n" +fr: "\n\007Le fichier '%s' n'est pas un fichier de texte et ne peut être \ +visualisé\n" +mutt: "\nFile '%s' is not a text file; cannot display.\n" +muttde: "\nDie Datei '%s' ist keine Textdatei\n\ +und kann deshalb nicht angezeigt werden!\n" + +"\nDone...hit any key\r" +de: "\nFertig... Bitte drücke eine Taste.\r" +es: "\nFinalizado...pulse cualquier tecla\r" +fr: "\nTerminé... appuyez sur n'importe quelle touche \r" +muttde: "\nFertig... Bitte drücke eine Taste.\r" + +"-- More -- Space: next screen, Enter: next line\ +, 'B': back, 'Q': quit --\r" +de: "-- Weiter -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" +es: "-- más -- espacio: otra pantalla, enter: otra línea,\ + B: atrás, Q: salir\r" +fr: "- Plus - Espace: procahin écran , Chariot: prochaine ligne\ +, 'B': retour, 'Q': quitter - \r" +muttde: "-- Weiter -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" + +"More -- %d%% -- Space: next screen, Enter: next line\ +, 'B': back, 'Q': quit --\r" +de: "Weiter -- %d%% -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" +es: "Más -- %d%% -- espacio: otra pantalla, enter: otra línea,\ + B: atrás, Q: salir\r" +fr: "- Plus - %D%% - Espace: procahin écran , Chariot: prochaine ligne\ +, 'B': retour, 'Q': quitter - \r" +muttde: "Weiter -- %d%% -- Vorwärts: Leertaste oder Return; Rückwärts: 'B'; Ende: 'Q' --\r" + +"\nEnter pass phrase: " +de: "\nGib das Mantra ein: " +es: "\nIntroduce la contraseña: " +fr: "\nEntrez votre mot de passe: " +muttde: "\nGib das Mantra ein: " + +"\nEnter same pass phrase again: " +de: "\nWiederhole das Mantra: " +es: "\nEscríbela otra vez: " +fr: "\nEntrez le même mot de passe de nouveau: " +muttde: "\nWiederhole das Mantra: " + +"\n\007Error: Pass phrases were different. Try again." +de: "\n\007FEHLER: Die beiden Eingaben waren unterschiedlich! Bitte noch einmal." +es: "\n\007Error: Las contraseñas son diferentes. Prueba otra vez." +fr: "\n\007Erreur: Les mots de passe étaient différents. Essayez encore." +mutt: "\nError: Pass phrases were different. Try again." +muttde: "\nFEHLER: Die beiden Eingaben waren unterschiedlich! Bitte noch einmal." + +"\nStopped at user request\n" +de: "\nAbbruch durch Benutzer\n" +es: "\nInterrupción por petición del usuario\n" +fr: "\nArrêt par demande de l'utilisateur\n" +muttde: "\nAbbruch durch Benutzer\n" + +"Pretty Good Privacy(tm) %s - Public-key encryption for the masses.\n" +de: "Pretty Good Privacy(tm) %s - Public-key-Verschlüsselung für die Massen.\n" +es: "Pretty Good Privacy(tm) %s - Criptografía de clave pública para todos.\n" +fr: "Pretty Good Privacy(tm) %s - Cryptographie à clé publique pour tous.\n" +muttde: "Pretty Good Privacy(tm) %s - Public-key-Verschlüsselung für die Massen.\n" + +"(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." +de: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." +es: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." +fr: "( c ) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. " +muttde: "(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software." + +"Export of this software may be restricted by the U.S. government.\n" +de: "Der Export dieser Software aus den USA kann Beschränkungen unterliegen.\n" +es: "La exportación de este programa puede estar restringida por\n\ +el gobierno de los EE.UU." +fr: "L'exportation de ce logiciel peut être restreint par le \ +gouvernement des États-Unis" +muttde: "Der Export dieser Software aus den USA kann Beschränkungen unterliegen.\n" + +"International version - not for use in the USA. Does not use RSAREF.\n" +de: "Internationale Version - nicht in den USA verwenden! Benutzt nicht RSAREF.\n" +es: "Versión internacional - no apta para los EE.UU. No utiliza RSAREF.\n" +fr: "Version internationale - ne pas utiliser aux Etats-Unis. N'utilise pas le +RSAREF.\n" +muttde: "Internationale Version - nicht in den USA verwenden! Benutzt nicht RSAREF.\n" + +"Current time: %s\n" +de: "Aktuelles Datum und Uhrzeit: %s\n" +es: "Hora actual: %s\n" +fr: "Heure actuelle: %s\n" +muttde: "Aktuelles Datum und Uhrzeit: %s\n" + +"\007No configuration file found.\n" +de: "\007Keine Konfigurationsdatei gefunden!\n" +es: "\007No se encuentra el fichero de configuración.\n" +fr: "\007Fichier de configuration introuvable.\n" +mutt: "No configuration file found.\n" +muttde: "Keine Konfigurationsdatei gefunden!\n" + +"\007WARNING: Environmental variable TZ is not \ +defined, so GMT timestamps\n\ +may be wrong. See the PGP User's Guide to properly define TZ\n\ +in AUTOEXEC.BAT file.\n" +de: "\007WARNUNG: Die Umgebungsvariable TZ ist nicht definiert, daher könnten\n\ +die GMT-Zeitangaben falsch sein. Beachte den Abschnitt in der PGP-Anleitung\n\ +über das richtige Setzen von TZ in AUTOEXEC.BAT.\n\n" +es: "\007ADVERTENCIA: La variable TZ no está definida, por lo que\n\ +los sellos de fecha GMT pueden estar equivocados. Consulta la Guía del\n\ +usuario de PGP para definir adecuadamente TZ en AUTOEXEC.BAT.\n" +fr: "\007ATTENTION: La variable d'environnement TZ n'est pas définie, les\n\ +temps GMT peuvent donc êtres faussés. Voir le guide de l'utilisateur PGP pour\n\ +définir correctement TZ dans le fichier AUTOEXEC.BAT.\n" +mutt: "WARNING: Environmental variable TZ is not \ +defined, so GMT timestamps\n\ +may be wrong. See the PGP User's Guide to properly define TZ\n\ +in AUTOEXEC.BAT file.\n" +muttde: "WARNUNG: Die Umgebungsvariable TZ ist nicht definiert, daher könnten\n\ +die GMT-Zeitangaben falsch sein. Beachte den Abschnitt in der PGP-Anleitung\n\ +über das richtige Setzen von TZ in AUTOEXEC.BAT.\n\n" + +"\nFile %s wiped and deleted. " +de: "\nDie Datei '%s' wurde überschrieben und gelöscht." +es: "\nEl fichero %s ha sido borrado y destruido. " +fr: "\nFichier %s effacé et détruit. " +muttde: "\nDie Datei '%s' wurde überschrieben und gelöscht." + +"\n\007Error: Can't wipe out file '%s' - read only, maybe?\n" +de: "\n\007FEHLER: Die Datei '%s' kann nicht überschrieben werden.\n\ +Ist sie vielleicht schreibgeschützt?\n" +es: "\n\007Error: No puede eliminarse el fichero '%s' - \ +quizá sea sólo de lectura\n" +fr: "\n\007Erreur: Incapable de détruire le fichier '%s' - lectu4re seulement peut être?\n" +mutt: "\nError: Can't wipe out file '%s' - read only, maybe?\n" +muttde: "\nFEHLER: Die Datei '%s' kann nicht überschrieben werden.\n\ +Ist sie vielleicht schreibgeschützt?\n" + +"\n\007File '%s' does not exist.\n" +de: "\n\007Die Datei '%s' existiert nicht!\n" +es: "\n\007El fichero '%s' no existe.\n" +fr: "Le fichier '%s' n'existe pas. \n" +mutt: "\nFile '%s' does not exist.\n" +muttde: "\nDie Datei '%s' existiert nicht!\n" + +"\nFor details on licensing and distribution, see the PGP User's Guide.\ +\nFor other cryptography products and custom development services, contact:\ +\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, \ +phone +1 303 541-0140\n" +de: "\nInformationen über Lizenzen und Verteilung finden sich in der PGP-Anleitung.\ +\nInformationen über Verschlüsselungs-Produkte und Auftrags-Entwicklungen:\ +\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, Tel. +1-(303)-541-0140\n" +es: "\nInformación sobre licencia y distribución en la Guía del usuario de PGP.\ +\nMás información sobre otros productos y servicios criptográficos a medida:\ +\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, tel +1 303 541-0140\n" +fr: "\nConsulter le guide de l'utilisateur de PGP pour les détails de\n\ +license et de distribution. Pour d'autres produits de cryptographie\n\ +et services de développement personalisés, contacter: Philip Zimmermann,\n\ +3021 11th St, Boulder CO 80304 USA, téléphone +1 303 541-0140\n" +muttde: "\nInformationen über Lizenzen und Verteilung finden sich in der PGP-Anleitung.\ +\nInformationen über Verschlüsselungs-Produkte und Auftrags-Entwicklungen:\ +\nPhilip Zimmermann, 3021 11th St, Boulder CO 80304 USA, Tel. +1-(303)-541-0140\n" + +"@translator@" +de: "\nÜbersetzer:\ +\n Frank Pruefer ; Stand: 07.10.1997\ +\n (basierend auf der deutschen Übersetzung der LANGUAGE.TXT von\ +\n Marc Aurel <4-tea-2@bong.saar.de> vom 19.01.1994)\n" +es: "\nTraducido al castellano por Armando Ramos .\n" +fr: "\nTraduction française de Jean-loup Gailly et Yanik \ +Crépeau \n" +muttde: "\nÜbersetzer:\ +\n Frank Pruefer ; Stand: 07.10.1997\ +\n (basierend auf der deutschen Übersetzung der LANGUAGE.TXT von\ +\n Marc Aurel <4-tea-2@bong.saar.de> vom 19.01.1994)\n" + +"\nFor a usage summary, type: pgp -h\n" +de: "\nEine Übersicht der PGP-Befehle erhältst Du mit: pgp -h\n" +es: "\nPara ver un resumen de las instrucciones, escribe: pgp -h\n" +fr: "\nPour un sommaire d'utilisation, tapez: pgp -h\n" +mutt: " " +muttde: " " + +"File %s created containing %d random bytes.\n" +de: "\nDie Datei '%s', die %d Bytes Zufallszahlen enthält,\n\ +wurde erzeugt.\n" +es: "Generado el fichero %s con %d bytes aleatorios.\n" +fr: "Le fichier %s est créé et contient %d octets aléatoires" +muttde: "\nDie Datei '%s', die %d Bytes Zufallszahlen enthält,\n\ +wurde erzeugt.\n" + +"\007Invalid filename: '%s' too long\n" +de: "\007Ungültiger Dateiname: '%s' ist zu lang.\n" +es: "\007Nombre incorrecto: '%s' es demasiado largo\n" +fr: "\007Nom incalide: '%s' trop long\n" +mutt: "Invalid filename: '%s' too long\n" +muttde: "Ungültiger Dateiname: '%s' ist zu lang.\n" + +"\n\007Input file '%s' looks like it may have been created by PGP. " +de: "\n\007Die Eingabedatei '%s' könnte von PGP erzeugt worden sein." +es: "\n\007El fichero de entrada '%s' parece haber sido creado por PGP. " +fr: "\n\007Le fichier d'entrée '%s' semble avoir été créé par PGP. " +mutt: "\nInput file '%s' looks like it may have been created by PGP. " +muttde: "\nDie Eingabedatei '%s' könnte von PGP erzeugt worden sein." + +"\nIs it safe to assume that it was created by PGP (y/N)? " +de: "\nWurde diese von PGP erzeugt? (j/N) " +es: "\n¿Puede asumirse con seguridad que ha sido así (s/N)? " +fr: "\nEtes vous sûr qu'il a été créé par PGP (o/N)? " +muttde: "\nWurde diese von PGP erzeugt? (j/N) " + +"\nNote: '%s' is not a pure text file.\n\ +File will be treated as binary data.\n" +de: "\nHinweis: '%s' ist keine reine Textdatei.\n\ +Die Datei wird als Binärdatei behandelt.\n" +es: "\nNota: '%s' no es un fichero de texto puro.\n\ +Se tratará como datos binarios.\n" +fr: "Note: '%s' n'est pas un fichier texte. \n\ +Il sera traité comme données binaires" +muttde: "\nHinweis: '%s' ist keine reine Textdatei.\n\ +Die Datei wird als Binärdatei behandelt.\n" + +"\n\007Error: Only text files may be sent as display-only.\n" +de: "\n\007FEHLER: Nur Textdateien können \"nur zur Ansicht\" verschickt werden.\n" +es: "\n\007Error: Sólo los ficheros de texto pueden enviarse para mostrar.\n" +fr: "\n\007Erreur: seuls les fichiers de texte peuvent être envoyés\n\ +pour affichage exclusivement.\n" +mutt: "\nError: Only text files may be sent as display-only.\n" +muttde: "\nFEHLER: Nur Textdateien können \"nur zur Ansicht\" verschickt werden.\n" + +"\n\007Error: MacBinary failed!\n" +de: "\n\007FEHLER: MacBinary fehlgeschlagen!\n" +es: "\n\007Error: ha fallado MacBinary\n" +fr:"\n\007Erreur:MacBinary a échoué\n" +mutt: "\nError: MacBinary failed!\n" +muttde: "\nFEHLER: MacBinary fehlgeschlagen!\n" + +"\nA secret key is required to make a signature. " +de: "\nFür eine Unterschrift wird ein privater Schlüssel benötigt." +es: "\nSe necesita una clave secreta para generar la firma. " +fr: "\nUne clé secrète est nécessaire pour faire une signature. " +muttde: "\nFür eine Unterschrift wird ein privater Schlüssel benötigt." + +"\nYou specified no user ID to select your secret key,\n\ +so the default user ID and key will be the most recently\n\ +added key on your secret keyring.\n" +de: "\nDa Du keine Benutzer-ID für Deinen privaten Schlüssel angegeben hast,\n\ +wird der letzte zum privaten Schlüsselbund hinzugefügte Schlüssel benutzt.\n" +es: "\nNo has indicado ningún identificador para escoger la clave secreta,\n\ +por lo que el identificador y la clave por omisión serán los últimos\n\ +añadidos al anillo.\n" +fr: "\nVous n'avez pas spécifié de nom d'utilisateur pour sélectionner\n\ +votre clé secrète, donc le nom et la clé par défaut seront ceux les\n\ +plus récemment ajoutés à votre fichier de clés secrètes.\n" +muttde: "\nDa Du keine Benutzer-ID für Deinen privaten Schlüssel angegeben hast,\n\ +wird der letzte zum privaten Schlüsselbund hinzugefügte Schlüssel benutzt.\n" + +"\007Signature error\n" +de: "\n\007FEHLER beim Unterschreiben!\n" +es: "\007Error de firma\n" +fr: "\007Erreur de signature\n" +mutt: "Signature error\n" +muttde: "\nFEHLER beim Unterschreiben!\n" + +"\n\nRecipients' public key(s) will be used to encrypt. " +de: "\n\nVerschlüsselung mit Empfänger-Schlüssel(n).\n" +es: "\n\nSe utilizan las claves públicas de los destinatarios para encriptar. " +fr: "\n\nLa ou les clé(s) publique(s) du destinataire seront utilisées\ + pour chiffrer. " +muttde: "\n\nVerschlüsselung mit Empfänger-Schlüssel(n).\n" + +"\nA user ID is required to select the recipient's public key. " +de: "\nZur Auswahl des Empfänger-Schlüssels wird eine Benutzer-ID benötigt." +es: "\nSe necesita un identificador para encontrar la clave pública\n\ +del destinatario. " +fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\n\ +publique du destinataire. " +muttde: "\nZur Auswahl des Empfänger-Schlüssels wird eine Benutzer-ID benötigt." + +"\nEnter the recipient's user ID: " +de: "\nBenutzer-ID des Empfängers: " +es: "\nIntroduzca el identificador del destinatario: " +fr: "\nEntrez le nom d'utilisateur du destinataire: " +muttde: "\nBenutzer-ID des Empfängers: " + +"\007Encryption error\n" +de: "\n\007FEHLER beim Verschlüsseln!\n" +es: "\007Error en la encriptación\n" +fr: "\007Erreur de chiffrage\n" +mutt: "Encryption error\n" +muttde: "\nFEHLER beim Verschlüsseln!\n" + +"\nCiphertext file: %s\n" +de: "\nVerschlüsselte Datei: %s\n" +es: "\nFichero cifrado: %s\n" +fr: "\nFichier chiffré: %s\n" +muttde: "\nVerschlüsselte Datei: %s\n" + +"\nSignature file: %s\n" +de: "\nUnterschriftsdatei: %s\n" +es: "\nFichero de firma: %s\n" +fr: "\nFichier de signature: %s\n" +muttde: "\nUnterschriftsdatei: %s\n" + +"\n\007Error: Transport armor stripping failed for file %s\n" +de: "\n\007FEHLER beim Entfernen der Versandhülle von Datei '%s'.\n" +es: "\n\007Error: No se ha podido quitar la armadura de %s\n" +fr: "\n\007Erreur dans la suppression de la protection de transport pour\n\ +le fichier %s\n" +mutt: "\nError: Transport armor stripping failed for file %s\n" +muttde: "\nFEHLER beim Entfernen der Versandhülle von Datei '%s'.\n" + +"Stripped transport armor from '%s', producing '%s'.\n" +de: "\nDie Versandhülle von Datei '%s' wurde entfernt.\nAusgabedatei: %s\n" +es: "Quitada la armadura de '%s', produciendo '%s'.\n" +fr: "Protection de transport supprimée pour '%s', produisant '%s'.\n" +muttde: "\nDie Versandhülle von Datei '%s' wurde entfernt.\nAusgabedatei: %s\n" + +"\nLooking for next packet in '%s'...\n" +de: "\nSuche nach dem nächsten Paket in '%s'...\n" +es: "\nBuscando el siguiente paquete en '%s'...\n" +fr: "\nRecherche du prochain paquet dans '%s'...\n" +muttde: "\nSuche nach dem nächsten Paket in '%s'...\n" + +"\nFile is encrypted. Secret key is required to read it. " +de: "\nDie Datei ist verschlüsselt. Zum Lesen wird der private Schlüssel benötigt.\n" +es: "\nEl fichero está encriptado. Para leerlo se necesita la clave secreta. " +fr: "\nLe fichier est chiffré. La clé secrète est nécessaire pour le lire." +muttde: "\nDie Datei ist verschlüsselt. Zum Lesen wird der private Schlüssel benötigt.\n" + +"\nThis file has a signature, which will be left in place.\n" +de: "\nDiese Datei trägt eine Unterschrift, die nicht entfernt wird.\n" +es: "\nEste fichero tiene firma, que se deja en su sitio.\n" +fr: "\nCe fichier a une signature, qui sera gardée.\n" +muttde: "\nDiese Datei trägt eine Unterschrift, die nicht entfernt wird.\n" + +"\nFile has signature. Public key is required to check signature.\n" +de: "\nDiese Datei trägt eine Unterschrift.\n\ +Zur Überprüfung wird der öffentliche Schlüssel benötigt.\n" +es: "\nEl fichero tiene firma. Se necesita la clave pública para comprobarla.\n" +fr: "Ce fichier est signé. Une clef publique est nécessaire pour sa vérification.\n" +muttde: "\nDiese Datei trägt eine Unterschrift.\n\ +Zur Überprüfung wird der öffentliche Schlüssel benötigt.\n" + +"\nFile is conventionally encrypted. " +de: "\nDiese Datei ist konventionell verschlüsselt.\n" +es: "\nEl fichero ha sido encriptado convencionalmente. " +fr: "\nLe fichier est chiffré de manière conventionnelle. " +muttde: "\nDiese Datei ist konventionell verschlüsselt.\n" + +"\nFile contains key(s). Contents follow..." +de: "\nDiese Datei enthält einen oder mehrere Schlüssel. Hier kommt die Liste:\n" +es: "\nEl fichero contiene claves. Se muestran a continuación ..." +fr: "\nLe fichier contient une ou plusieurs clés. Le contenu suit..." +muttde: "\nDiese Datei enthält einen oder mehrere Schlüssel. Hier kommt die Liste:\n" + +"\nDo you want to add this keyfile to keyring '%s' (y/N)? " +de: "\nWillst Du die Schlüssel dieser Datei zum Schlüsselbund\n'%s' hinzufügen? (j/N) " +es: "\n¿Quieres añadir este fichero de claves al anillo '%s' (s/N)? " +fr: "\nVoulez vous ajouter ce fichier de clé au fichier '%s' (o/N)? " +muttde: "\nWillst Du die Schlüssel dieser Datei zum Schlüsselbund\n'%s' hinzufügen? (j/N) " + +"\007Keyring add error. " +de: "\n\007FEHLER beim Hinzufügen zum Schlüsselbund.\n" +es: "\007Error al añadir en el anillo. " +fr: "\007Erreur dans l'addition au fichier de clés. " +mutt: "Keyring add error. " +muttde: "\nFEHLER beim Hinzufügen zum Schlüsselbund.\n" + +"\007\nError: '%s' is not a ciphertext, signature, or key file.\n" +de: "\007\nFEHLER: Die Datei '%s' ist nicht verschlüsselt\n\ +und enthält weder eine Unterschrift noch einen oder mehrere Schlüssel.\n" +es: "\007\nError: '%s' no es un texto cifrado, una firma ni una clave.\n" +fr: "\007\nErreur: '%s' n'est pas un fichier chiffré, de signatures\ +\nou de clés.\n" +mutt: "\nError: '%s' is not a ciphertext, signature, or key file.\n" +muttde: "\nFEHLER: Die Datei '%s' ist nicht verschlüsselt\n\ +und enthält weder eine Unterschrift noch einen oder mehrere Schlüssel.\n" + +"\n\nThis message is marked \"For your eyes only\". Display now \ +(Y/n)? " +de: "\n\nDiese Nachricht ist als VERTRAULICH markiert! Jetzt anzeigen? (J/n) " +es: "\n\nEste mensaje está marcado como \"Sólo para tus ojos\".\ +¿Mostrar ahora (S/n)? " +fr: "\n\nCe message est marqué \"Pour vos yeux seulement\".\n\ +Afficher maintenant (O/n)? " +muttde: "\n\nDiese Nachricht ist als VERTRAULICH markiert! Jetzt anzeigen? (J/n) " + +"\n\nPlaintext message follows...\n" +de: "\n\nHier kommt die Nachricht im Klartext:\n" +es: "\n\nMensaje en claro a continuación...\n" +fr: "\n\nLe message en clair suit...\n" +muttde: "\n\nHier kommt die Nachricht im Klartext:\n" + +"Save this file permanently (y/N)? " +de: "Klartext sichern? (j/N) " +es: "¿Grabar este fichero de forma permanente (s/N)? " +fr: "Sauvegarde de ce fichier de manière permanente (o/N)? " +muttde: "Klartext sichern? (j/N) " + +"Enter filename to save file as: " +de: "Klartext sichern als: " +es: "Introduzca el nombre para el fichero: " +fr: "Entrez le nom du fichier de sauvegarde: " +muttde: "Klartext sichern als: " + +"Enter filename to save file as:" +de: "Gib den Namen ein, unter dem die Datei zu sichern ist:" +es: "Introduzca el nombre para el fichero:" +fr: "Donner le nom de fichier pour sauvegarder sous:" +muttde: "Gib den Namen ein, unter dem die Datei zu sichern ist:" + +"\nPlaintext filename: %s" +de: "\nDateiname des Klartextes: %s" +es: "\nNombre del fichero normal: %s" +fr: "\nNom du fichier en clair: %s" +muttde: "\nDateiname des Klartextes: %s" + +"\nPlaintext file '%s' looks like it contains a public key." +de: "\nDie Klartextdatei '%s' scheint einen\nöffentlichen Schlüssel zu enthalten." +es: "\nEl fichero normal '%s' parece contener una clave pública." +fr: "\nLe ficher en clair '%s' semble contenir une clé publique." +muttde: "\nDie Klartextdatei '%s' scheint einen\nöffentlichen Schlüssel zu enthalten." + +"\nPlaintext file '%s' looks like a %s file." +de: "\nDie Klartextdatei '%s' scheint eine %s-Datei zu sein." +es: "\nEl fichero normal '%s' parece un fichero %s." +fr: "\nLe fichier en clair '%s' semble être un fichier %s." +muttde: "\nDie Klartextdatei '%s' scheint eine %s-Datei zu sein." + +"\n\007Output file '%s' may contain more ciphertext or signature." +de: "\n\007Die Ausgabedatei '%s' könnte weiteren\n\ +verschlüsselten Text oder eine Unterschrift enthalten." +es: "\n\007El fichero de salida '%s' puede contener más texto \ +cifrado o una firma." +fr: "\n\007Le fichier de sortie '%s' peut contenir d'autre texte chiffré\n\ +ou signature." +mutt: "\nOutput file '%s' may contain more ciphertext or signature." +muttde: "\nDie Ausgabedatei '%s' könnte weiteren\n\ +verschlüsselten Text oder eine Unterschrift enthalten." + +"\a\nError: PGP User's Guide not found.\n\ +PGP looked for it in the following directories:\n" +de: "\a\nFEHLER: PGP-Benutzerhandbuch nicht gefunden!\n\ +PGP hat danach in den folgenden Verzeichnissen gesucht:\n" +es: "\a\nError: No se encuentra la Guía del usuario.\n\ +Se ha buscado en estos directorios:\n" +fr: "\n\aErreur: Le manuel d'utilisation de PGP est introuvable.\n\ +PGP a examiné les repertoires suivants:\n" +muttde: "\a\nFEHLER: PGP-Benutzerhandbuch nicht gefunden!\n\ +PGP hat danach in den folgenden Verzeichnissen gesucht:\n" + +"and the doc subdirectory of each of the above. Please put a copy of\n\ +both volumes of the User's Guide in one of these directories.\n\ +\n\ +Under NO CIRCUMSTANCES should PGP ever be distributed without the PGP\n\ +User's Guide, which is included in the standard distribution package.\n\ +If you got a copy of PGP without the manual, please inform whomever you\n\ +got it from that this is an incomplete package that should not be\n\ +distributed further.\n\ +\n\ +PGP will not generate a key without finding the User's Guide.\n\ +There is a simple way to override this restriction. See the\n\ +PGP User's Guide for details on how to do it.\n\ +\n" +de: "sowie jeweils im Unterverzeichnis 'DOC' der oben genannten Verzeichnisse.\n\ +Bitte lege eine Kopie beider Teile des Benutzerhandbuches (Dateien PGPDOC1.TXT\n\ +und PGPDOC2.TXT) in eines der genannten Verzeichnisse.\n\ +Unter GAR KEINEN UMSTÄNDEN sollte PGP jemals ohne das PGP-Benutzerhandbuch\n\ +ausgeliefert werden, das sich im Standard-Auslieferungspaket befindet. Wenn\n\ +Du eine Kopie von PGP ohne das Handbuch erhalten hast, dann informiere bitte\n\ +denjenigen, von dem Du sie bekommen hast, daß es sich um ein unvollständiges\n\ +Paket handelt, das künftig nicht mehr ausgeliefert werden sollte.\n\ +PGP generiert keine Schlüssel, ohne das Handbuch gefunden zu haben!\n\ +Im PGP-Handbuch steht übrigens auch, wie diese Einschränkung zu umgehen ist...\n" +es: "y el subdirectorio doc de cada uno de ellos. Pon una copia de\n\ +ambos volúmenes en uno de esos directorios.\n\ +\n\ +Bajo *ninguna circunstancia* debe distribuirse PGP sin la Guía del usuario,\n\ +incluida con la distribución habitual.\n\ +Si tienes una copia de PGP sin manual, informa a quien te la suministró de\n\ +que es un paquete incompleto que no debe seguir distribuyéndose.\n\ +\n\ +PGP no genera ninguna clave si no encuentra la Guía del usuario.\n\ +Hay una forma sencilla de saltarse esta restricción. Consulta la\n\ +Guía para ver cómo hacerlo.\n\ +\n" +fr: "et leur(s) sous-repertoire(s). Veuillez placer une copie des\n\ +deux (2) documents constituant le manuel d'utilisation dans l'un de\n\ +ces repertoires.\n\ +En aucune cinconstances PGP ne devrait etre distribué sans que les\n\ +documents constituant le manuel ne soit inclus avec le reste.\n\ +Si vous avez obtenu PGP sans les documents constituant le manuel\n\ +veuillez SVP en aviser votre fournisseur que PGP est incomplet et\n\ +que cette maniere de distribuer PGP doit cesser.\n\ +\n\ +PGP ne fonctionnera pas sans la presence des deux documents constituant le +manuel \n\ +La facon de circonvenir a cette restriction est de consulter le manuel\n\ +\n" +muttde: "sowie jeweils im Unterverzeichnis 'DOC' der oben genannten Verzeichnisse.\n\ +Bitte lege eine Kopie beider Teile des Benutzerhandbuches (Dateien PGPDOC1.TXT\n\ +und PGPDOC2.TXT) in eines der genannten Verzeichnisse.\n\ +Unter GAR KEINEN UMSTÄNDEN sollte PGP jemals ohne das PGP-Benutzerhandbuch\n\ +ausgeliefert werden, das sich im Standard-Auslieferungspaket befindet. Wenn\n\ +Du eine Kopie von PGP ohne das Handbuch erhalten hast, dann informiere bitte\n\ +denjenigen, von dem Du sie bekommen hast, daß es sich um ein unvollständiges\n\ +Paket handelt, das künftig nicht mehr ausgeliefert werden sollte.\n\ +PGP generiert keine Schlüssel, ohne das Handbuch gefunden zu haben!\n\ +Im PGP-Handbuch steht übrigens auch, wie diese Einschränkung zu umgehen ist...\n" + +"\007Keygen error. " +de: "\n\007FEHLER bei der Erzeugung des Schlüssels.\n" +es: "\007Error en la generación de claves. " +fr: "\007Erreur dans la génération de clé. " +mutt: "Keygen error. " +muttde: "\nFEHLER bei der Erzeugung des Schlüssels.\n" + +"\007Keyring check error.\n" +de: "\n\007FEHLER bei der Überprüfung des Schlüsselbunds.\n" +es: "\007Error en la comprobación del anillo.\n" +fr: "Erreur dans la vérification du trousseau de clef." +mutt: "Keyring check error.\n" +muttde: "\nFEHLER bei der Überprüfung des Schlüsselbunds.\n" + +"\007Maintenance pass error. " +de: "\n\007FEHLER beim Verwaltungsdurchgang.\n" +es: "\007Error en el proceso de mantenimiento. " +fr: "\007Erreur dans la passe de maintenance. " +mutt: "Maintenance pass error. " +muttde: "\nFEHLER beim Verwaltungsdurchgang.\n" + +"File '%s' is not a public keyring\n" +de: "Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n" +es: "El fichero '%s' no es un anillo de claves públicas\n" +fr: "Le fichier '%s' n'est pas un fichier de clés publiques\n" +muttde: "Die Datei '%s' ist kein öffentlicher Schlüsselbund.\n" + +"\nA user ID is required to select the public key you want to sign. " +de: "\nZur Auswahl des zu unterschreibenden Schlüssels wird\n\ +eine Benutzer-ID benötigt." +es: "\nSe necesita un identificador para elegir\n\ +la clave pública por firmar. " +fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\n\ +publique que vous voulez signer. " +muttde: "\nZur Auswahl des zu unterschreibenden Schlüssels wird\n\ +eine Benutzer-ID benötigt." + +"\nEnter the public key's user ID: " +de: "\nBenutzer-ID des öffentlichen Schlüssels: " +es: "\nIntroduzca el identificador de la clave pública: " +fr: "\nEntrez le nom d'utilisateur pour la clé publique: " +muttde: "\nBenutzer-ID des öffentlichen Schlüssels: " + +"\007Key signature error. " +de: "\n\007FEHLER beim Unterschreiben des Schlüssels.\n" +es: "\007Error en firma de clave. " +fr: "\007Erreur dans la signature de clé. " +mutt: "Key signature error. " +muttde: "\nFEHLER beim Unterschreiben des Schlüssels.\n" + +"\nA user ID is required to select the key you want to revoke or \ +disable. " +de: "\nZur Auswahl des zurückzuziehenden oder zu sperrenden Schlüssels wird\n\ +eine Benutzer-ID benötigt." +es: "\nSe necesita un identificador de usuario para elegir la clave \ +que quieras\n\revocar o desactivar. " +fr: "\nUn nom d'utilisateur est requis pour sélectionner la clé que vous\ +voulez révoquer ou inactiver. " +muttde: "\nZur Auswahl des zurückzuziehenden oder zu sperrenden Schlüssels wird\n\ +eine Benutzer-ID benötigt." + +"\nEnter user ID: " +de: "\nBenutzer-ID: " +es: "\nIntroduce el identificador: " +fr: "\nEntrez le nom d'utilisateur: " +muttde: "\nBenutzer-ID: " + +"\nA user ID is required to select the key you want to edit. " +de: "\nZur Auswahl des zu bearbeitenden Schlüssels wird eine Benutzer-ID benötigt." +es: "\nSe necesita el identificador de usuario para elegir la clave que \ +quieras\nmodificar. " +fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\ +vous voulez modifier. " +muttde: "\nZur Auswahl des zu bearbeitenden Schlüssels wird eine Benutzer-ID benötigt." + +"\nEnter the key's user ID: " +de: "\nBenutzer-ID des Schlüssels: " +es: "\nIntroduce el identificador: " +fr: "\nEntrez le nom d'utilisateur pour la clé: " +muttde: "\nBenutzer-ID des Schlüssels: " + +"\007Keyring edit error. " +de: "\n\007FEHLER beim Bearbeiten des Schlüsselbunds.\n" +es: "\007Error en la modificación del anillo. " +fr: "\007Erreur dans la modification du fichier de clés. " +mutt: "Keyring edit error. " +muttde: "\nFEHLER beim Bearbeiten des Schlüsselbunds.\n" + +"\n\007Key file '%s' does not exist.\n" +de: "\n\007Die Datei '%s' existiert nicht.\n" +es: "\n\007No existe el anillo de claves '%s.\n" +fr: "\n\007Le fichier de clés '%s' n'existe pas.\n" +mutt: "\nKey file '%s' does not exist.\n" +muttde: "\nDie Datei '%s' existiert nicht.\n" + +"\nA user ID is required to select the key you want to extract. " +de: "\nZur Auswahl des zu extrahierenden Schlüssels wird eine Benutzer-ID benötigt." +es: "\nSe necesita el identificador de usuario para elegir la clave que \ +quieras\n\extraer. " +fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\ +vous voulez extraire. " +muttde: "\nZur Auswahl des zu extrahierenden Schlüssels wird eine Benutzer-ID benötigt." + +"\007Keyring extract error. " +de: "\n\007FEHLER beim Extrahieren aus dem Schlüsselbund.\n" +es: "\007Error al extraer del anillo. " +fr: "\007Erreur dans l'extraction du fichier de clés. " +mutt: "Keyring extract error. " +muttde: "\nFEHLER beim Extrahieren aus dem Schlüsselbund.\n" + +"\nA user ID is required to select the public key you want to\n\ +remove certifying signatures from. " +de: "\nZur Auswahl des Schlüssels, von dem Beglaubigungen entfernt werden sollen,\n\ +wird eine Benutzer-ID benötigt." +es: "\nSe necesita el identificador de usuario para elegir la clave pública\n\ +de la que suprimir firmas. " +fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé\ + publique\n\ +pour laquelle vous voulez supprimer des signatures de certification. " +muttde: "\nZur Auswahl des Schlüssels, von dem Beglaubigungen entfernt werden sollen,\n\ +wird eine Benutzer-ID benötigt." + +"\nA user ID is required to select the key you want to remove. " +de: "\nZur Auswahl des zu löschenden Schlüssels wird eine Benutzer-ID benötigt." +es: "\nSe necesita el identificador de usuario para elegir la clave que \ +quieras\nsuprimir . " +fr: "\nUn nom d'utilisateur est nécessaire pour sélectionner la clé que\n\ +vous voulez supprimer. " +muttde: "\nZur Auswahl des zu löschenden Schlüssels wird eine Benutzer-ID benötigt." + +"\007Key signature remove error. " +de: "\n\007FEHLER beim Entfernen der Beglaubigung.\n" +es: "\007Error en la supresión de la firma de una clave. " +fr: "\007Erreur dans la suppression de signature d'une clé. " +mutt: "Key signature remove error. " +muttde: "\nFEHLER beim Entfernen der Beglaubigung.\n" + +"\007Keyring remove error. " +de: "\n\007FEHLER beim Löschen aus dem Schlüsselbund.\n" +es: "\007Error al suprimir del anillo. " +fr: "\007Erreur dans la suppression du fichier de clés. " +mutt: "Keyring remove error. " +muttde: "\nFEHLER beim Löschen aus dem Schlüsselbund.\n" + +"\007Keyring view error. " +de: "\n\007FEHLER beim Anzeigen des Schlüsselbunds.\n" +es: "\007Error al visualizar el anillo. " +fr: "\007Erreur dans la visualisation du fichier de clés. " +mutt: "Keyring view error. " +muttde: "\nFEHLER beim Anzeigen des Schlüsselbunds.\n" + +"For more detailed help, consult the PGP User's Guide.\n" +de: "Ausführlichere Hilfe findet sich in der PGP-Anleitung.\n" +es: "Para obtener más ayuda, consulta la Guía del usuario de PGP.\n" +fr: "Pour une aide plus détaillée, consultez le guide de l'utilisateur de +PGP.\n" +mutt: "\n" +muttde: "\n" + +"\nInvalid arguments.\n" +de: "\nUngültige Argumente!\n" +es: "\nArgumentos incorrectos.\n" +fr: "\nArguments invalides.\n" +muttde: "\nUngültige Argumente!\n" + +"\nUsage summary:\ +\nTo encrypt a plaintext file with recipent's public key, type:\ +\n pgp -e textfile her_userid [other userids] (produces textfile.pgp)\ +\nTo sign a plaintext file with your secret key:\ +\n pgp -s textfile [-u your_userid] (produces textfile.pgp)\ +\nTo sign a plaintext file with your secret key, and then encrypt it\ +\n with recipent's public key, producing a .pgp file:\ +\n pgp -es textfile her_userid [other userids] [-u your_userid]\ +\nTo encrypt with conventional encryption only:\ +\n pgp -c textfile\ +\nTo decrypt or check a signature for a ciphertext (.pgp) file:\ +\n pgp ciphertextfile [-o plaintextfile]\ +\nTo produce output in ASCII for email, add the -a option to other options.\ +\nTo generate your own unique public/secret key pair: pgp -kg\ +\nFor help on other key management functions, type: pgp -k\n" +de: "\nÜbersicht der PGP-Befehle:\ +\nVerschlüsseln eines Textes mit dem öffentlichen Schlüssel des Empfängers:\ +\n pgp -e {Text} {Benutzer-ID des Empfängers} (Ergebnis: {Text}.pgp)\ +\nUnterschreiben eines Textes mit Deinem privaten Schlüssel:\ +\n pgp -s {Text} [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ +\nUnterschreiben eines Textes mit Deinem privaten Schlüssel und anschließend\ +\nVerschlüsseln mit dem öffentlichen Schlüssel des Empfängers:\ +\n pgp -es {Text} {Benutzer-ID des Empfängers} [weitere Benutzer-IDs]\ +\n [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ +\nVerschlüsseln mit konventioneller Verschlüsselung:\ +\n pgp -c {Text}\ +\nEntschlüsseln oder Überprüfen der Unterschrift:\ +\n pgp {verschlüsselter Text} [-o {Klartext}]\ +\nVerpacken der Ausgabe in ASCII (für E-Mail): pgp {...} -a {...}\ +\nErzeugen eines eigenen Schlüssel-Paares: pgp -kg\ +\nHilfe zur Schlüsselverwaltung: pgp -k\n" +es: "\nResumen de las instrucciones:\ +\nEncriptar fichero normal con la clave pública del destinatario:\ +\n pgp -e ftexto su_identificador (produce ftexto.pgp)\ +\nFirmar un fichero de texto normal con tu clave secreta:\ +\n pgp -s ftexto [-u tu_identificador] (produce ftexto.pgp)\ +\nFirmar un fichero normal con tu clave secreta y después encriptarlo\ +\n con la clave pública del destinatario, produciendo un fichero .pgp:\ +\n pgp -es ftexto su_identificador [otros] [-u tu_identificador]\ +\nEncriptar sólo con cifrado convencional:\ +\n pgp -c ftexto\ +\nDesencriptar o comprobar la firma en un fichero cifrado (.pgp):\ +\n pgp fcifrado [-o fnormal]\ +\nProducir resultado en ASCII para correo electrónico: añadir la opción -a.\ +\nGenerar tu propio par único de claves pública/secreta: pgp -kg\ +\nAyuda sobre otras funciones de gestión de claves: pgp -k\n" +fr: "\nSommaire:\ +\nPour chiffrer un fichier en clair avec la clé publique du destinataire, \ +tapez:\ +\n pgp -e fichier son_nom [autres noms] (produit fichier.pgp)\ +\nPour signer un texte en clair avec votre clé secrète:\ +\n pgp -s fichier [-u votre_nom] (produit fichier.pgp)\ +\nPour signer un texte en clair avec votre clé secrète, puis le chiffrer\ +\n avec la clé publique du destinataire, produisant un fichier .pgp:\ +\n pgp -es fichier son_nom [autres noms] [-u votre_nom]\ +\nPour chiffrer de manière conventionelle seulement:\ +\n pgp -c fichier\ +\nPour déchiffrer ou vérifier une signature pour un fichier chiffré (.pgp):\ +\n pgp fichier_chiffré [-o fichier_en_clair]\ +\nPour produire une sortie en ASCII pour courrier électronique, ajouter\ +\nl'option -a aux autres options.\ +\nPour générer votre propre paire de clés publique/secrète:\ +\n pgp -kg\ +\nPour de l'aide sur les autres fonctions de gestion de clé, tapez: pgp -k\n" +muttde: "\nÜbersicht der PGP-Befehle:\ +\nVerschlüsseln eines Textes mit dem öffentlichen Schlüssel des Empfängers:\ +\n pgp -e {Text} {Benutzer-ID des Empfängers} (Ergebnis: {Text}.pgp)\ +\nUnterschreiben eines Textes mit Deinem privaten Schlüssel:\ +\n pgp -s {Text} [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ +\nUnterschreiben eines Textes mit Deinem privaten Schlüssel und anschließend\ +\nVerschlüsseln mit dem öffentlichen Schlüssel des Empfängers:\ +\n pgp -es {Text} {Benutzer-ID des Empfängers} [weitere Benutzer-IDs]\ +\n [-u {Deine Benutzer-ID}] (Ergebnis: {Text}.pgp)\ +\nVerschlüsseln mit konventioneller Verschlüsselung:\ +\n pgp -c {Text}\ +\nEntschlüsseln oder Überprüfen der Unterschrift:\ +\n pgp {verschlüsselter Text} [-o {Klartext}]\ +\nVerpacken der Ausgabe in ASCII (für E-Mail): pgp {...} -a {...}\ +\nErzeugen eines eigenen Schlüssel-Paares: pgp -kg\ +\nHilfe zur Schlüsselverwaltung: pgp -k\n" + +"\nKey management functions:\ +\nTo generate your own unique public/secret key pair:\ +\n pgp -kg\ +\nTo add a key file's contents to your public or secret key ring:\ +\n pgp -ka keyfile [keyring]\ +\nTo remove a key or a user ID from your public or secret key ring:\ +\n pgp -kr userid [keyring]\ +\nTo edit your user ID or pass phrase:\ +\n pgp -ke your_userid [keyring]\ +\nTo extract (copy) a key from your public or secret key ring:\ +\n pgp -kx userid keyfile [keyring]\ +\nTo view the contents of your public key ring:\ +\n pgp -kv[v] [userid] [keyring]\ +\nTo check signatures on your public key ring:\ +\n pgp -kc [userid] [keyring]\ +\nTo sign someone else's public key on your public key ring:\ +\n pgp -ks her_userid [-u your_userid] [keyring]\ +\nTo remove selected signatures from a userid on a keyring:\ +\n pgp -krs userid [keyring]\ +\n" +de: "\nSchlüssel-Verwaltung:\ +\nErzeugen eines eigenen, eindeutigen Schlüssel-Paares (privat/öffentlich):\ +\n pgp -kg\ +\nHinzufügen von Schlüsseln zum privaten oder öffentlichen Schlüsselbund:\ +\n pgp -ka {Datei mit Schlüsseln} [{Schlüsselbund}]\ +\nLöschen eines Schlüssels oder einer Benutzer-ID aus einem Schlüsselbund:\ +\n pgp -kr {Benutzer-ID} [{Schlüsselbund}]\ +\nÄndern Deiner Benutzer-ID oder Deines Mantras:\ +\n pgp -ke {Deine Benutzer-ID} [{Schlüsselbund}]\ +\nHerauskopieren eines Schlüssels aus einem Schlüsselbund:\ +\n pgp -kx {Benutzer-ID} {Ausgabe-Datei} [{Schlüsselbund}]\ +\nAnzeigen des Inhaltes des öffentlichen Schlüsselbunds:\ +\n pgp -kv[v] [{Benutzer-ID}] [{Schlüsselbund}]\ +\nÜberprüfen der Beglaubigungen im öffentlichen Schlüsselbund:\ +\n pgp -kc [{Benutzer-ID}] [{Schlüsselbund}]\ +\nBeglaubigen eines öffentlichen Schlüssels eines anderen Benutzers:\ +\n pgp -ks {seine Benutzer-ID} [-u {Deine Benutzer-ID}] [{Schlüsselbund}]\ +\nEntfernen ausgewählter Beglaubigungen von einem Schlüssel:\ +\n pgp -krs {Benutzer-ID} [{Schlüsselbund}]\n" +es: "\nFunciones para la gestión de claves:\ +\nGenerar tu propio par único de claves pública/secreta:\ +\n pgp -kg\ +\nAñadir contenido de fichero de clave al anillo de claves públicas o secretas:\ +\n pgp -ka fdclaves [anillo]\ +\nSuprimir una clave o identificador de usuario de un anillo de claves:\ +\n pgp -kr identificador [anillo]\ +\nModificar tu identificador de usuario o tu contraseña:\ +\n pgp -ke tu_identificador [anillo]\ +\nExtraer (copiar) una clave del anillo de claves públicas o secretas:\ +\n pgp -kx identificador fdclaves [anillo]\ +\nVisualizar el contenido del anillo de claves públicas:\ +\n pgp -kv[v] [identificador] [anillo]\ +\nComprobar las firmas del anillo de claves públicas:\ +\n pgp -kc [identificador] [anillo]\ +\nFirmar la clave pública de alguien en el anillo de claves correspondiente:\ +\n pgp -ks otro_identificador [-u tu_identificador] [anillo]\ +\nSuprimir ciertas firmas de un idusuario en un anillo:\ +\n pgp -krs identificador [anillo]\ +\n" +fr: "Fonctions de gestion des clés:\ +\nPour générer votre propre paire de clés publique/secrète:\ +\n pgp -kg\ +\nPour ajouter le contenu d'un fichier de clés à votre fichier de clés\ +\n public ou secret:\ +\n pgp -ka fichier_de_clés [votre_fichier_de_clés]\ +\nPour retirer une clé de votre fichier de clés public ou secret:\ +\n pgp -kr nom_d_utilisateur [fichier_de_clés]\ +\nPour extraire (copier) une clé de votre fichier de clés public ou secret:\ +\n pgp -kx nom_d_utilisateur fichier_de_la_clé [fichier_de_clés]\ +\nPour visualiser le contenu de votre fichier de clés:\ +\n pgp -kv[v] [nom_d_utilisateur] [ficher_de_clés]\ +\nPour vérifier les signatures sur votre fichier de clés publiques:\ +\n pgp -kc [nom_d_utilisateur] [ficher_de_clés]\ +\nPour signer la clé publique de quelqu'un d'autre sur votre fichier de\ +\n clés publiques:\ +\n pgp -ks son_nom votre_nom [fichier_de_clés]\ +\nPour enlever certaines signatures d'une personne sur un fichier de clés:\ +\n pgp -krs son_nom [fichier_de_clés]\n" +muttde: "\nSchlüssel-Verwaltung:\ +\nErzeugen eines eigenen, eindeutigen Schlüssel-Paares (privat/öffentlich):\ +\n pgp -kg\ +\nHinzufügen von Schlüsseln zum privaten oder öffentlichen Schlüsselbund:\ +\n pgp -ka {Datei mit Schlüsseln} [{Schlüsselbund}]\ +\nLöschen eines Schlüssels oder einer Benutzer-ID aus einem Schlüsselbund:\ +\n pgp -kr {Benutzer-ID} [{Schlüsselbund}]\ +\nÄndern Deiner Benutzer-ID oder Deines Mantras:\ +\n pgp -ke {Deine Benutzer-ID} [{Schlüsselbund}]\ +\nHerauskopieren eines Schlüssels aus einem Schlüsselbund:\ +\n pgp -kx {Benutzer-ID} {Ausgabe-Datei} [{Schlüsselbund}]\ +\nAnzeigen des Inhaltes des öffentlichen Schlüsselbunds:\ +\n pgp -kv[v] [{Benutzer-ID}] [{Schlüsselbund}]\ +\nÜberprüfen der Beglaubigungen im öffentlichen Schlüsselbund:\ +\n pgp -kc [{Benutzer-ID}] [{Schlüsselbund}]\ +\nBeglaubigen eines öffentlichen Schlüssels eines anderen Benutzers:\ +\n pgp -ks {seine Benutzer-ID} [-u {Deine Benutzer-ID}] [{Schlüsselbund}]\ +\nEntfernen ausgewählter Beglaubigungen von einem Schlüssel:\ +\n pgp -krs {Benutzer-ID} [{Schlüsselbund}]\n" + +"\nIncluding \"%s\"...\n" +de: "\nEmpfängerliste aus der Datei '%s' wird eingelesen...\n" +es: "\nIncluyendo \"%s\"...\n" +fr: "\nIncluant '%s'...\n" +muttde: "\nEmpfängerliste aus der Datei '%s' wird eingelesen...\n" + +"\nWe need to generate %u random bits. This is done by measuring the\ +\ntime intervals between your keystrokes. Please enter some random text\ +\non your keyboard until you hear the beep:\n" +de: "\nWir müssen %u zufällige Bits erzeugen. Dies wird durch Messung\ +\nder Abstände zwischen Deinen Anschlägen bewerkstelligt. Bitte gib\ +\nirgendwelchen beliebigen Text auf der Tastatur ein, bis es piepst:\n" +es: "\nNecesitamos generar %d bits aleatorios. Se hace midiendo los\ +\nintervalos de tiempo entre pulsaciones de tecla. Escribe\ +\ntexto al azar en el teclado hasta que oigas un pitido:\n" +fr: "\nNous devons générer %d bits aléatoires. Ceci est fait en mesurant\ +\nl'intervalle de temps entre les frappes de touches. Veuillez tapper du\ +\ntexte aléatoire sur votre clavier jusqu'à ce que vous entendiez le\ +\nsignal sonore:\n" +muttde: "\nWir müssen %u zufällige Bits erzeugen. Dies wird durch Messung\ +\nder Abstände zwischen Deinen Anschlägen bewerkstelligt. Bitte gib\ +\nirgendwelchen beliebigen Text auf der Tastatur ein, bis es piepst:\n" + +"\007 -Enough, thank you.\n" +de: "\007 -Danke, das genügt!\n" +es: "\007 -Es suficiente.\n" +fr: "\007 -Assez, merci.\n" +mutt: " -Enough, thank you.\n" +muttde: " -Danke, das genügt!\n" + +"\ +Uses the RSAREF(tm) Toolkit, which is copyright RSA Data Security, Inc.\n\ +Distributed by the Massachusetts Institute of Technology.\n" +de: "Benutzt das RSAREF(tm) Toolkit, (c) RSA Data Security, Inc.\n\ +Ausgeliefert vom Massachusetts Institute of Technology.\n" +es: "\ +Utiliza RSAREF(tm), copyright de RSA Data Security, Inc.\n\ +Distribuido por el Massachusetts Institute of Technology.\n" +fr: "Ce logiciel utilise RSAREF(tm) Toolkit, Copyright RSA Data Security, Inc\n\ +Distribué par le Massachusetts Institute of Technology.\n" +muttde: "Benutzt das RSAREF(tm) Toolkit, (c) RSA Data Security, Inc.\n\ +Ausgeliefert vom Massachusetts Institute of Technology.\n" + +"Out of memory" +de: "Zu wenig Speicher!" +es: "No queda memoria" +fr: "Mémoire insufisante" +muttde: "Zu wenig Speicher!" + +"\nOut of memory\n" +de: "\nZu wenig Speicher!\n" +es: "\nNo queda memoria\n" +fr: "\nMémoire insuffisante\n" +muttde: "\nZu wenig Speicher!\n" + +"\n\007Out of memory.\n" +de: "\n\007Zu wenig Speicher!\n" +es: "\n\007No queda memoria.\n" +fr: "\n\007Mémoire insuffisante.\n" +mutt: "\nOut of memory.\n" +muttde: "\nZu wenig Speicher!\n" + +"\nCompression/decompression error\n" +de: "\nFEHLER beim Packen/Entpacken!\n" +es: "\nError en compresión/descompresión\n" +fr: "\nErreur de compression/decompression\n" +muttde: "\nFEHLER beim Packen/Entpacken!\n" + +"\nERROR: unexpected end of compressed data input.\n" +de: "\nFEHLER: vorzeitiges Ende der ZIP-gepackten Eingangsdaten.\n" +es: "\nERROR: los datos comprimidos terminan antes de tiempo.\n" +fr: "\nERREUR: fin innopinée des données d'entrée compressées.\n" +muttde: "\nFEHLER: vorzeitiges Ende der ZIP-gepackten Eingangsdaten.\n" + +# The following 4 translations MUST be exactly 3 characters long! + +"pub" +de: "öff" +muttde: "öff" + +"sec" +de: "prv" +muttde: "prv" + +"sig" +de: "Unt" +es: "fir" +muttde: "Unt" + +"com" +de: "Wid" +muttde: "Wid" + +# IN-CH extentions. + +# translation must not change the string length +"rev" +de: "zur" +muttde: "zur" + +# translation must not change the string length +" Expire: %s%s" +de: " Verfall: %s%s" +muttde: " Verfall: %s%s" + +# translation must not change the string length +" no expire " +de: " kein Verfall " +muttde: " kein Verfall " + +"ENCRyption only\n" +de: "*** nur Verschlüsselung! ***\n" +muttde: "*** nur Verschlüsselung! ***\n" + +"Key ID %s is SIGN only. Decryption avoided.\n" +de: "Schlüssel ID %s ist nur zum Unterschreiben. Entschlüsselung verhindert.\n" +muttde: "Schlüssel ID %s ist nur zum Unterschreiben. Entschlüsselung verhindert.\n" + +"Key ID %s is not valid.\n" +de: "Schlüssel ID %s ist ungültig.\n" +muttde: "Schlüssel ID %s ist ungültig.\n" + +"Key is an ENCRyption only key.\n" +de: "Der Schlüssel ist nur zur Verschlüsselung.\n" +muttde: "Der Schlüssel ist nur zur Verschlüsselung.\n" + +"Key is a SIGNature only key.\n" +de: "Der Schlüssel ist nur für Unterschriften.\n" +muttde: "Der Schlüssel ist nur für Unterschriften.\n" + +"Key is out of use.\n" +de: "Der Schlüssel ist nicht mehr in Benutzung.\n" +muttde: "Der Schlüssel ist nicht mehr in Benutzung.\n" + +"SIGNature only\n" +de: "*** nur Unterschriften! ***\n" +muttde: "*** nur Unterschriften! ***\n" + +" Revoked by: " +de: " Zurückgezogen von: " +muttde: " Zurückgezogen von: " + +" Low Cert by: " +de: "Niedrige Beglaubigung von: " +muttde: "Niedrige Beglaubigung von: " + +"Medium Cert by: " +de: "Mittlere Beglaubigung von: " +muttde: "Mittlere Beglaubigung von: " + +" High Cert by: " +de: " Hohe Beglaubigung von: " +muttde: " Hohe Beglaubigung von: " + +" Unknown type: " +de: " Unbekannter Typ: " +muttde: " Unbekannter Typ: " + +"Try to obtain the corresponding SIGN key.\n" +de: "Es wird versucht, den zugehörigen Unterschriftsschlüssel zu verwenden.\n" +muttde: "Es wird versucht, den zugehörigen Unterschriftsschlüssel zu verwenden.\n" + +"\n\007Key cert is already revoked by user '%s'.\n" +de: "\n\007Die Unterschrift unter dem Schlüssel wurde bereits\n\ +von '%s' zurückgezogen.\n" +mutt: "\nKey cert is already revoked by user '%s'.\n" +muttde: "\nDie Unterschrift unter dem Schlüssel wurde bereits\n\ +von '%s' zurückgezogen.\n" + +"\n\007Key is not signed by user '%s'.\n" +de: "\n\007Der Schlüssel ist nicht von '%s' unterschrieben.\n" +mutt: "\nKey is not signed by user '%s'.\n" +muttde: "\nDer Schlüssel ist nicht von '%s' unterschrieben.\n" + +"\nKey signature certificate revoked.\n" +de: "\nDie Unterschrift unter dem Schlüssel wurde zurückgezogen.\n" +muttde: "\nDie Unterschrift unter dem Schlüssel wurde zurückgezogen.\n" + +"This key is already out of use.\n" +de: "Dieser Schlüssel ist bereits nicht mehr in Benutzung.\n" +muttde: "Dieser Schlüssel ist bereits nicht mehr in Benutzung.\n" + +"\007 Key ID %s is SIGN only. (protest against decryption)\n" +de: "\007Die Schlüssel-ID %s ist nur für Unterschriften.\n\ +Keine Entschlüsselung möglich!\n" +mutt: " Key ID %s is SIGN only. (protest against decryption)\n" +muttde: "Die Schlüssel-ID %s ist nur für Unterschriften.\n\ +Keine Entschlüsselung möglich!\n" + +"Signature was made after the key ID %s was expired.\n" +de: "Unterschrift wurde mit dem verfallen Schlüssel ID %s erstellt.\n" +muttde: "Unterschrift wurde mit dem verfallen Schlüssel ID %s erstellt.\n" + +"Signature was made before the key ID %s was valid.\n" +de: "Unterschrift wurde mit dem noch ungültigen Schlüssel ID %s erstellt.\n" +muttde: "Unterschrift wurde mit dem noch ungültigen Schlüssel ID %s erstellt.\n" + +"Signature was made using the ENCR key ID %s.\n" +de: "Unterschrift wurde mit dem Verschlüsselungsschlüssel ID %s erstellt.\n" +muttde: "Unterschrift wurde mit dem Verschlüsselungsschlüssel ID %s erstellt.\n" + +"Something goes wrong, may be an unlucky User ID?\n" +de: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID?\n" +muttde: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID?\n" + +"Something goes wrong, may be this userid '%s' is unlucky?\n" +de: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID '%s'?\n" +muttde: "Irgendwas ist schiefgegangen. Liegt's an der NutzerID '%s'?\n" + +"The compromise certificate might not be accepted on newer versions.\n\ +Revoke anyway? (y/N)" +de: "Das Widerrufszertifikat kann von neueren Versionen zurückgewiesen\ +werden.\nTrotzdem widerrufen? (j/N)" +muttde: "Das Widerrufszertifikat kann von neueren Versionen zurückgewiesen\ +werden.\nTrotzdem widerrufen? (j/N)" + +"The key for the userid '%s' is SIGN only.\nI'll try the corresponding ENCR key.\n" +de: "Schlüssel ID '%s' ist nur zum Unterschreiben.\n\ +Der zugehörige Verschlüsselungsschlüssel wird versucht.\n" +muttde: "Schlüssel ID '%s' ist nur zum Unterschreiben.\n\ +Der zugehörige Verschlüsselungsschlüssel wird versucht.\n" + +"The key for the userid '%s' is not valid, skipped.\n" +de: "Schlüssel ID '%s' ist ungültig.\nÜbersprungen.\n" +muttde: "Schlüssel ID '%s' ist ungültig.\nÜbersprungen.\n" + +"The user ID typed in has garbled options!\n" +de: "Die NutzerID enthält fehlerhafte Optionseinträge!\n" +muttde: "Die NutzerID enthält fehlerhafte Optionseinträge!\n" + +"This key is an ENCRyption only key.\n" +de: "Das ist ein Verschlüsselungsschlüssel.\n" +muttde: "Das ist ein Verschlüsselungsschlüssel.\n" + +"This key is too old to be revoked.\n" +de: "Der Schlüssel ist zu alt, um zurückgezogen zu werden.\n" +muttde: "Der Schlüssel ist zu alt, um zurückgezogen zu werden.\n" + +"This key is too old to be signed.\n" +de: "Der Schlüssel ist zu alt, um unterschrieben zu werden.\n" +muttde: "Der Schlüssel ist zu alt, um unterschrieben zu werden.\n" + +"This key will be generated in future. *oops*\n" +de: "Der Schlüssel wird in der Zukunft erstellt. *huch*\n" +muttde: "Der Schlüssel wird in der Zukunft erstellt. *huch*\n" + +"Your key is too old to sign with.\n" +de: "Der Schlüssel ist zu alt zum unterschreiben.\n" +muttde: "Der Schlüssel ist zu alt zum unterschreiben.\n" + +"Your key will be generated in future. *oops*\n" +de: "Dein Schlüssel wird in der Zukunft erstellt. *huch*\n" +muttde: "Dein Schlüssel wird in der Zukunft erstellt. *huch*\n" + +"\007**** Signed with an ENCRyption only key ****" +de: "\007**** Unterschr. mit einem Verschl.-Schlüssel ****" +mutt: "**** Signed with an ENCRyption only key ****" +muttde: "**** Unterschr. mit einem Verschl.-Schlüssel ****" + +"\007**** Signed with an invalid key ****" +de: "\007**** Unterschr. mit einem ungültigen Schlüssel ****" +mutt: "**** Signed with an invalid key ****" +muttde: "**** Unterschr. mit einem ungültigen Schlüssel ****" + +"\007**** Signed with a revoked key ****" +de: "\007**** Unterschr. mit einem zurückgez. Schlüssel ****" +mutt: "**** Signed with a revoked key ****" +muttde: "**** Unterschr. mit einem zurückgez. Schlüssel ****" + +"\n\nREAD CAREFULLY: How did you prove the users real identity ?\n\ + 0) What? I do not understand this question.\n\ + 1) No attempt made at all to identify the user with a real name.\n\ + 2) Some casual attempt made to identify user with his name.\n\ + 3) Heavy-duty identification efforts, photo ID, direct contact...\n" +de: "\n\nSORGFÄLTIG LESEN: Wie hast Du die Identität des Nutzers geprüft ?\n\ + 0) Bitte? Ich verstehe die Frage nicht.\n\ + 1) Keine Überprüfung des wirklichen Namens des Nutzers.\n\ + 2) Einige Bemühungen, die Person mit diesem Namen zu identifizieren.\n\ + 3) Große Identifizierungsaufwendungen, Ausweis, direkter Kontakt...\n" +muttde: "\n\nSORGFÄLTIG LESEN: Wie hast Du die Identität des Nutzers geprüft ?\n\ + 0) Bitte? Ich verstehe die Frage nicht.\n\ + 1) Keine Überprüfung des wirklichen Namens des Nutzers.\n\ + 2) Einige Bemühungen, die Person mit diesem Namen zu identifizieren.\n\ + 3) Große Identifizierungsaufwendungen, Ausweis, direkter Kontakt...\n" +$Id: language.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $ diff --git a/contrib/language50.txt b/contrib/language50.txt new file mode 100644 index 0000000..0d27721 --- /dev/null +++ b/contrib/language50.txt @@ -0,0 +1,1342 @@ +#This file contains the strings used by PGP. + +# $Id: language50.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $ + +[DIFFERENT_EXES] +us=\ +PGP is now invoked from different executables for different operations:\n\n\ +pgpe Encrypt (including Encrypt/Sign)\n\ +pgps Sign\n\ +pgpv Verify/Decrypt\n\ +pgpk Key management\n\ +pgpo PGP 2.6.2 command-line simulator (not yet implemented)\n\n\ +See each application's respective man page or the general PGP documentation\n\ +for more information.\n + +[CREATING_OUTPUT_FILE] +us=Creating output file %s\n + +#Untested +[COPYING_KEYFILE_AND_RUNNING_PGPK] +us=Copying key file to \"%s\", running pgpk to process it...\n\n +mutt= + +#Untested +[NEED_PASSPHRASE] +us=You need a passphrase to encrypt the file\n + +[MUST_SPECIFY_A_RECIPIENT] +us=You must specify at least one recipient for encryption!\n + +#Untested +[NEED_PASSPHRASE_AGAIN] +us=Enter same passphrase again\n + +#Untested +[PASSPHRASES_DIFFERENT] +us=Error: Passphrases were different. Try again.\n + +#Untested +[ZERO_LEN_PASSPHRASE] +us=Encryption error\n + +#Untested +[TREAT_AS_PGP] +us=This is a PGP File. Treat it as such? [y/N]\n + +#Untested +[PRIVATE_KEY_MISSING] +us=Cannot find a private key for signing: %s\n + +#Untested +[CANNOT_CONVERT_TO_PRIVATE_KEY] +us=Cannot convert to private key\n + +#Untested +[PRIVATE_KEY_CANNOT_SIGN] +us=Private Key cannot sign\n + +#Untested +[CANNOT_UNLOCK_PRIVATE_KEY] +us=Cannot unlock private key\n + +#Untested +[NO_KEYRINGS] +us=No keyrings to use + +#Untested +[NO_ENCRYPTION_KEYS_FOUND_FOR] +us=No encryption keys found for: %s\n + +#Untested +[CANNOT_FIND_KEY] +us=Cannot find key: %s\n + +#Untested +[CANNOT_ADD_MY_KEY] +us=Cannot add my key to set\n + +#Untested +[NO_VALID_RECIPIENTS] +us=No valid keys found for any recipients, exiting...\n + +#Untested +[USING_STDIN] +us=No files specified. Using stdin.\n\n +mutt= + +#Untested +[CANNOT_OPEN_INPUT_FILE] +us=Cannot open input file %s\n + +#Untested +[CANNOT_SETUP_PROCESSING_PIPELINE] +us=Cannot Setup Processing Pipeline\n + +#Untested +[UNRECOGNIZED_OPTION_STRING] +us=Unrecognized option %s\n + +#Untested +[UNRECOGNIZED_OPTION_STRING_DASH] +us=Unrecognized option -%s\n + +#Untested +[UNRECOGNIZED_OPTION_CHAR] +us=Unrecognized option -%c\n + +#Untested +[ARGS_INCOMPATABLE] +us="Cannot use -%c and -%c together\n" + +#Untested +[ONLY_ONE_OUTPUT_FILE] +us="Only one -o option allowed\n" + +#Untested +[ONLY_ONE_USERNAME] +us="Only one -u option allowed\n" + +#Untested +[NO_OUTPUT_FILENAME] +us=-o option requires an output file name argument\n + +[NO_RECIPIENT_SPECIFIED] +us=-r option requires a recipient name argument\n + +#Untested +[NO_USERID_SPECIFIED] +us=-u option requires a userid argument\n + +#Untested, and probably going away +[NO_PASSPHRASE_SPECIFIED_IN_BATCHMODE] +us=-z option requires a passphrase argument\n + +#Untested +[CANNOT_COMBINE_CONVENTIONAL_AND_PK] +us=Cannot combine -c and -r arguments\n + +#Untested +[PGPK_IS_SEPERATE] +us=pgpk is a seperate program, not a symlink to pgp!\n + +#Untested +[UNKNOWN_SYMLINK] +us=Invoked with unknown symlink\n + +#Untested +[PRIVATE_KEY_NEEDED_FOR_SIGNATURE] +us=A private key is required to make a signature.\n + +[ENTER_Y_OR_N] +us="Invalid response. Please enter Y or N [default %c]: \n" + +#Untested +[GENERIC_KEYRING_ERROR] +us="Error on keyring \"%s\": " + +#Untested +[UNABLE_TO_OPEN_DEFAULT_KEYRINGS] +us="Unable to open default keyrings: " + +#Untested +[UNABLE_TO_OPEN_KEYRING] +us="Unable to open keyring: " + +#Untested +[KEY_CORRUPTED] +us="Key Corrupted (%s): " + +#Untested +[NEED_SIG_FILE] +us="File to check signature against [%s]: " + +#untested +[GOOD_SIGNATURE] +us="Good signature made %s by key:\n" + +#untested +[BAD_SIGNATURE] +us="BAD signature made %s by key:\n" + +#untested +[ERROR_SIGNATURE] +us="Error %s checking signature: %s\n" + +#Untested +[UNKNOWN_SIGNATURE] +us="Signature by unknown keyid: " + +#untested +[ENTER_PASSPHRASE] +us="Enter pass phrase: " + +#Untested +[RANDOM_BITS_FROM_DEVICE] +us="\n\ +We need to generate %u random bits. This is done by reading\n\ +%s. Depending on your system, you may be able\n\ +to speed this process by typing on your keyboard and/or moving your mouse.\n" + +#Untested +[RANDOM_BITS_FROM_DEVICE_OLD_KERNEL] +us="\n\ +/dev/random detected; however, on Linux kernel versions < 1.3.33, it is not\n\ +cryptographically usable. If you wish to use /dev/random as an entropy\n\ +source, it is recommended that you upgrade your kernel version. If you feel\n\ +that you received this message in error, add ForceRandomDevice=1 to your\n\ +pgp.cfg file, but be warned that by doing so without know what you are\n\ +doing, you could compromise the security of your key.\n" + +#Untested +[RANDOM_BITS_FROM_KEYBOARD] +us="\n\ +We need to generate %u random bits. This is done by measuring the\n\ +time intervals between your keystrokes. Please enter some random text\n\ +on your keyboard until you hear the beep:\n" + +#Untested +[NO_INPUT_FILE_IN_BATCHMODE] +us="Cannot request input file in batchmode\n" + +#Untested +[UNABLE_TO_OPEN_FILE] +us="Unable to open file \"%s\"\n" + +#Untested +[UNABLE_TO_CREATE_READ_MODULE] +us="Unable to create file read module.\n" + +#Untested +[UNKNOWN_FILE_TYPE] +us="Unknown file type (clearsigned?). Assuming text\n" + +#Untested +[OPENING_FILE_WITH_TYPE] +us="Opening file \"%s\" type %s.\n" +mutt= + +#Untested +[ERROR_CLOSING_OLD_FILE] +us="Error closing old file: %d\n" + +#Untested +[NEED_PASSPHRASE_TO_DECRYPT_KEY] +us="Need a pass phrase to decrypt private key:\n" + +#Untested +[GOOD_PASSPHRASE] +us="Pass phrase is good.\n" + +#Untested +[BAD_PASSPHRASE] +us="Error: Bad pass phrase.\n\n" + +#Untested +[PASSPHRASE_INCORRECT] +us="Password Incorrect." + +#Untested +[TRY_AGAIN] +us=" Try Again." + +#Untested +[UNKNOWN_ESK] +us="Unknown ESK type: %d\n" + +#Untested +[CANNOT_DECRYPT] +us="Cannot decrypt message. It can only be decrypted by:\n" + +#Untested +[A_PASSPHRASE] +us=" A Pass Phrase\n" + +#Untested +[KEY_ID] +us=" Key ID " + +#Untested +[FORCE_OVERWRITE] +us="File \"%s\" already exists. Overwrite? [y/N] " + +#Untested +[UNABLE_TO_OVERWRITE_FILE] +us="Unable to overwrite file \"%s\"\n" + +#Untested +[RANDOM_DEVICE_NOT_DEFAULT] +us="Warning! Random device is something other than %s!\n\ +This MAY be a security hole.\n" + +#Untested +[RANDOM_DEVICE_WRITABLE] +us="Warning! %s is writable by users other than root!\n\ +This is probably OK, but you should have your sysadmin fix it.\n\ +Proceeding.\n" + +#Untested +[RANDOM_DEVICE_UNREADABLE] +us="\ +Warning! Random device %s found, but you can't read it!\n" + +#Untested +[BITS_AND_KEYID] +us="%6u bits, Key ID " + +#Untested +[KEY_NOT_FOUND] +us=Key not found: \"%s\"\n + +#Untested +[PGPERR_TROUBLE_BADTRUST_LONG] +us="Trust packet too long: %lu bytes long" + +#Untested +[PGPERR_TROUBLE_UNKPKTBYTE_LONG] +us="Unknown packet byte: %02X" + +#Untested +[PGPERR_TROUBLE_KEY2BIG_LONG] +us="Key grossly oversized: %lu bytes long" + +#Untested +[PGPERR_TROUBLE_NAME2BIG_LONG] +us="User ID too long: %lu bytes long" + +#Untested +[PGPERR_TROUBLE_SIG2BIG_LONG] +us="Signature grossly oversized: %lu bytes long" + +#Untested +[PGPERR_TROUBLE_DUPKEYID_LONG] +us="Duplicate keyID found. Two keys have the same keyID,\n\ +but they are different. This is highly suspicious. The first key +is:" + +#Untested +[PGPERR_TROUBLE_DUPKEY_LONG]: +us="A key was found twice in one keyring file. It is a duplicate of:\n" + +#Untested +[PGPERR_TROUBLE_DUPNAME_LONG] +us="A name was found twice in one keyring file. It is a duplicate of:\n" + +#Untested +[PGPERR_TROUBLE_BAREKEY_LONG] +us="A key was found twice in one keyring file. It is a duplicate of: " + +#Untested +[PGPERR_TROUBLE_VERSION_BUG_CUR_LONG] +us="This private key's version number appears to be incorrect.\n\ +PGP version 2.6 had a bug wherein it would improperly change the\n\ +version number of a private key generated by older versions of PGP\n\ +when it was edited. The private key in this key file has a version\n\ +byte that is different from a copy in another key file, and appears\n\ +to be improper. PGP will fix this by changing the version byte in\n\ +the private key to the previous value. The key with the problem +is:\n" + +#Untested +[PGPERR_TROUBLE_VERSION_BUG_PREV_LONG] +us="A previously seen private key's version number appears to be\n\ +incorrect. PGP version 2.6 had a bug wherein it would improperly\n\ +change the version byte of a private key generated by older versions\n\ +of PGP when it was edited. The public key in this key file has\n\ +a version byte that is different from a private key elsewhere,\n\ +which appears to be improper. PGP will fix this by changing the\n\ +version byte in the private key to the previous value. The key\n\ +with the problem is:\n" + +#Untested +[PGPERR_KEYIO_READING_LONG] +us="I/O error reading file: %s" + +#Untested +[PGPERR_KEYIO_FTELL_LONG] +us="I/O error during call to ftell(): %s" + +#Untested +[PGPERR_PRECEDING_ASSOCIATED_WITH] +us="The preceeding error was associated with: " + +#Untested +[NOT_PGP_KEYFILE] +us="File is not a PGP key file. Aborting.\n" + +#Untested +[FOLLOWING_KEYRING_PROBLEMS] +us="The following problems were encountered while reading the keyring:\n" + +#Untested +[OFFSET_DESCRIPTION] +us="Offset Description\n" + +#Untested +[UNKNOWN_SIGNATOR] +us=" (Unknown signator, can't be checked)\n" + +#Untested +[OPEN_PAREN_KEYID] +us=" (KeyID:" + +#Untested +[REVOKED] +us="*REVOKED*" + +#Untested +[ABOVE_KEY_REVOKED] +us="\ +WARNING: The above key has been revoked by its owner,\n\ +possibly because the private key was compromised.\n\ +You cannot use a revoked key for encryption.\n" + +#Untested +[ABOVE_KEY_DISABLED] +us="\ +WARNING: The above key has been disabled on your keyring. If you\n\ +wish to use it, use \"pgpk -d\" to reenable it.\n" + +[ABOVE_KEY_EXPIRED] +us="\ +WARNING: The above key is not valid for use after %s.\n" + +#Untested +[STILL_USE_EXPIRED_KEY] +us="\ +WARNING: This key is not valid for use after %s.\n\ +Do you still want to use it? [y/N] " + +#Untested +[PGP_NAMETRUST_UNKNOWN] +us="\ +WARNING: Because the following name has not been certified\n\ +by a trusted signature, it is not known with a high\n\ +degree of confidence that the above key belongs to:\n" + +#Untested +[PGP_NAMETRUST_UNTRUSTED] +us="WARNING: The above key is not trusted to belong to:\n" + +#Untested +[PGP_NAMETRUST_MARGINAL] +us="\ +WARNING: Because the following name is not certified with sufficient\n\ +trusted signatures, it is not known with high confidence that the\n\ +above key actually belongs to:\n" + +#Untested +[PGP_NEWTRUST_NOT_TRUSTED] +us="\n\ +WARNING: The above key is not trusted to belong to:\n" + +#Untested +[PGP_NEWTRUST_PARTIAL_TRUST] +us="\n\ +WARNING: Because the following name is not certified with sufficient\n\ +trusted signatures, there is an estimated 1/%-ld probability that\n\ +the above key may not belong to:\n" + +#Untested +[PGP_NEWTRUST_NOT_TRUSTED_SIGNING_KET] +us="\n\ +WARNING: The signing key is not trusted to belong to:\n" + +#Untested +[PREVIOUSLY_APPROVED_KEY] +us="\nBut you previously approved using the key with this name.\n" + +#Untested +[DO_YOU_WISH_TO_USE_UNTRUSTED_KEY] +us="\nDo you want to use the key with this name? [y/N] " + +#Untested +[DONT_TRUST_SIGS_FROM_REVOKED_KEYS] +us="\ +WARNING: The signing key has been revoked by its owner,\n\ +possibly because the private key was compromised.\n\ +A signature made by this key should not be trusted.\n" + +#Untested +[YOU_HAVE_DISABLED_SIGNING_KEY] +us="WARNING: You have disabled the signing key\n" + +#Untested +[KEY_HAS_EXPIRED] +us="WARNING: This key is not valid for use after %s.\n" + +#Untested +[PGP_NAMETRUST_UNTRUSTED_SIGNING_KEY] +us="\nWARNING: The signing key is not trusted to belong to:\n" + +[MESSAGE_IS_ENCRYPTED] +us="Message is encrypted.\n" + +[GETTING_KEY_FOR] +us="Getting key for %s.\n" + +[LOOKING_UP_HOST] +us="Looking up host %s\n" + +[ESTABLISHING_CONNECTION] +us="Establishing connection\n" + +[SENDING_REQUEST] +us="Sending request\n" + +[RECEIVING_DATA] +us="Receiving data\n" + +[CLEANING_UP] +us="Cleaning up\n" + +[COMPLETE] +us="Complete.\n" + +[ONE_KEY_RECEIVED] +us="One key received. Adding it to your keyring...\n" + +[MANY_KEYS_RECEIVED] +us="%li keys received. Adding them to your keyring...\n" + +[UNKNOWN_PROTOCOL] +us="Unknown protocol %s.\n" + +[SENDING_KEY] +us="Sending key \r" + +[RECEIVING_RESPONSE] +us="Receiving response \r" + +#Untested +[NO_KEYFILE_SPECIFIED] +us="-a argument requires a key file or URL to add to your keyring." + +#Untested +[UNABLE_TO_IMPORT_KEYFILE] +us="Unable to import keyfile \"%s\".\n" + +#Untested +[ADDING_KEYS] +us="Adding keys:\n\n" + +#Untested +[UNABLE_TO_CREATE_KEYLIST] +us="Unable to create keylist\n" + +#Untested +[NO_KEYS_TO_ADD] +us="No keys to add \n" + +#Untested +[KEYS_ADDED_SUCCESSFULLY] +us="Keys added successfully.\n" + +#Untested +[INVALID_SELECTION] +us="Invalid Selection. Please try again.\n" + +[TOO_MANY_MATCHES] +us="Too many matches; aborting!\n" + +[CHOOSE_ONE_ABOVE] +us="Choose one of the above: " + +[PLEASE_SELECT_A_USER_ID] +us="Please select a user ID %s:\n" + +[PLEASE_SELECT_A_USER_ID_WITH_SIG] +us="Please select a user ID with a signature %s:\n" + +[PLEASE_SELECT_A_KEY_WITH_USERID] +us="Please select a key with a userid %s:" + +[PLEASE_SELECT_A_KEY_WITH_SIG] +us="Please select a key with a signature %s:" + +[NO_USER_IDS_SELECTED] +us="No user IDs selected %s.\n" + +[PLEASE_SELECT_A_SIGNATURE] +us="Please select a signature %s:" + +[NO_SIGNATURES_SELECTED] +us="No signatures selected %s.\n" + +[NO_KEYS_SELECTED] +us="No keys selected %s.\n" + +[A_USERID_IS_REQUIRED] +us="A user ID is required to select the key you want %s.\n\ +Enter the key's user ID: " + +[UNABLE_TO_ORDER_KEYSET] +us="Unable to order keyset\n" + +[PLEASE_SELECT_A_KEY] +us="Please select a key %s:" + +[UNABLE_TO_CREATE_ITER] +us="Unable to create key iterator\n" + +[NO_HTTP_SEND] +us="HTTP cannot be used as a sending protocol at this time.\n" + +[UNKNOWN_PROTOCOL] +us="Unknown protocol %s.\n" + +[NO_KEYS_SELECTED_FOR_EXTRACTION] +us="No keys were selected for extraction.\n" + +[ENABLE_THIS_KEY] +us="\nEnable this key? [y/N] " + +[DISABLE_THIS_KEY] +us="\nDisable this key? [y/N] " + +[KEY_ENABLED] +us="\nKey enabled.\n" + +[KEY_DISABLED] +us="\nKey disabled.\n" + +[CANNOT_TRUST_INVALID_KEYS] +us="This key is not valid, and cannot be assigned trust\n" + +[DO_YOU_WISH_TO_CHANGE_INTRODUCER_RELIABITY] +us="Do you want to change your estimate of this key owner's reliability\n\ +as an introducer of other keys [y/N]? " + +[NO_CHANGES_MADE] +us="No changes made.\n" + +[DETERMINE_IN_YOUR_MIND] +us="\n"\ +"Make a determination in your own mind whether this key actually\n"\ +"belongs to the person whom you think it belongs to, based on available\n"\ +"evidence. If you think it does, then based on your estimate of\n"\ +"that person's integrity and competence in key management, answer\n"\ +"the following question:\n" + +[WOULD_YOU_TRUST_THIS_KEY_AND_OWNER] +us="\nWould you trust this key owner to act as an introducer and\n\ +certify other people's public keys to you?\n\ +(1=I don't know. 2=No. 3=Usually. 4=Yes, always? " + +[UNRECOGNIZED_RESPONSE] +us="Unrecognized response.\n" + +[UNABLE_TO_SET_TRUST] +us="Unable to set trust\n" + +[DESCRIBE_CONFIDENCE_AS_INTRODUCER] +us="\nDescribe the confidence you have in this person as an introducer.\n\ +What are the odds that this key owner is going to be wrong about\n\ +a key which she has signed as an introducer?\n" + +[CURRENTLY_INFINITE_TRUST] +us="(Currently she is listed as having essentially zero chance\ + of being wrong.)\n" + +[CURRENTLY_ZERO_TRUST] +us="(Currently he is listed as not having any confidence as an\ + introducer.)\n" + +[CURRENTLY_HAS_PERCENT_TRUST_START] +us="(Currently she is listed as having a one in " + +[CURRENTLY_HAS_PERCENT_TRUST_END] +us=" chance of being wrong.)\n" + +[ENTER_A_TRUST_RANGE] +us="Enter a number from 1 to 2 million" + +[OR_HIT_RETURN_TO_LEAVE_UNCHANGED] +us=", or hit return to leave unchanged." + +[WILL_BE_WRONG_TIME_TIME_IN] +us="\nShe will be wrong one time in: " + +[DO_YOU_WANT_THIS_KEY_AXIOMATIC] +us="\nDo you want to set this key as axiomatic [y/N]? " + +[PUBLIC_KEYRING_UPDATED] +us="Public keyring updated.\n" + +[NEED_OLD_PASSPHRASE] +us="Need old passphrase. " + +[NEED_NEW_PASSPHRASE] +us="Need new passphrase. " + +[ENTER_IT_A_SECOND_TIME] +us="Enter it a second time. " + +[PASSPHRASES_ARE_DIFFERENT] +us="Passphrases are different\n" + +[CHANGING_MASTER_KEY_PASSPHRASE] +us="Changing master key passphrase...\n" + +[PASSPHRASE_CHANGE_FAILED_MASTER] +us="Passphrase change failed for master key.\n" + +[CHANGING_SUBKEY_PASSPHRASE] +us="Changing subkey passphrase...\n" + +[PASSPHRASE_CHANGE_FAILED_SUBKEY] +us="Passphrase change failed for subkey.\n" + +[CONFIRM_NON_AXIOMATIC] +us="\nDo you want to unset this key as axiomatic [y/N]? " + +[CONFIRM_ADD_NEW_USERID] +us="\nDo you want to add a new user ID [y/N]? " + +[ENTER_NEW_USERID] +us="Enter the new user ID: " + +[NO_NAME_ENTERED] +us="No name entered.\n" + +[UNABLE_TO_ADD_NEW_USERID] +us="Unable to add new User ID (%d)\n" + +[CONFIRM_CHANGE_PASSPHRASE] +us="\nDo you want to change your pass phrase (y/N)? " + +[CHANGE_PASSPHRASE_FAILED] +us="Change passphrase failed (%d)\n" + +[CONFIRM_SET_DEFAULT_KEY] +us="\nDo want to set this as your default key [y/N]? " + +[KEYRINGS_UPDATED] +us="Keyrings updated.\n" + +[TO_BE_REMOVED_FRAGMENT] +us="to be removed" + +[SIGNATURE_FRAGMENT] +us="signature" + +[USERID_FRAGMENT] +us="user ID" + +[KEY_FRAGMENT] +us="key" + +[SELECTED_KEY_HAS_ONLY_ONE_USERID"] +us="Selected key has only one user ID; can't be selected %s\n" + +[FOLLOWING_OBJECT_HAS_BEEN_SELECTED] +us="\nThe following %s has been selected %s:\n" + +[UNABLE_TO_REMOVE_OBJECT] +us="Unable to remove object\n" + +[TO_BE_SIGNED_FRAGMENT] +us="to be signed" + +[VALIDITY_CERTIFICATION_WARNING] +us="\n\n\ +READ CAREFULLY: Based on your own direct first-hand knowledge, are\n\ +you absolutely certain that you are prepared to solemnly certify that\n\ +the above public key actually belongs to the user specified by the\n\ +above user ID [y/N]? " + +[KEY_SIGNING_CANCELED] +us="Key sign operation cancelled.\n" + +[KEY_SELECTED_FOR_SIGNING_IS] +us="Key selected for signing is:\n" + +[KEY_SIGN_OPERATION_FAILED] +us="Key sign operation failed\n" + +[KEY_SIG_CERT_ADDED] +us="Key signature certificate added.\n" + +[TO_BE_REVOKED_FRAGMENT] +us="to be revoked" + +[YOU_DONT_HAVE_THE_PRIVATE_KEY] +us="You don't have the private key corresponding to that key\n" + +[SIG_ALREADY_REVOKED] +us="That signature has already been revoked.\n\ +Are you sure you want to add another revocation certificate [y/N]? " + +[SIG_REVOCATION_CANCELLED] +us="Signature revocation cancelled.\n" + +[CONFIRM_REVOKE_KEY] +us="Do you want to permanently revoke your public key\n\ +by issuing a secret key compromise certificate on this key [y/N]? " + +[CONFIRM_REVOKE_SIG] +us="Do you want to revoke this signature [y/N]? " + +[REVOKE_CANCELLED] +us="Revoke cancelled.\n" + +[UNABLE_TO_GENERATE_REVOCATION_SIGNATURE] +us="Unable to generate revocation signature\n" + +[KEY_REVOCATION_CERT_ADDED] +us="Key revocation certificate added.\n" + +[SELECT_SIGNING_KEY] +us="Please select a key to sign with:" + +[UNABLE_TO_OPEN_KEYRING] +us="Unable to open keyring\n" + +[PGPINITAPP_FAILED] +us="pgpInitApp failed\n" + +[KEY_IS_ALREADY_REVOKED] +us="That key has already been revoked\n" + +[USE_FORCE_TO_ALLOW_OVERWRITING] +us="In batchmode, use +force to allow overwriting of output files\n" + +[INCONSISTENT_RECIPIENT_SET] +us="No algorithm available that all keys support.\n" + +[UNKNOWN_ERROR] +us="Unknown error code %i!\n" + +[VERIFY_REMOVE_KEY_PUBLIC_PRIVATE] +us="\nDo you wish to remove this key from your public and private \ +keyrings?\n[y/N]? " + +[UNABLE_TO_ITERATE_KEY] +us="Unable to iterate key!\n"; + +[CANCELED] +us="Canceled.\n" + +[REMOVED] +us="Removed.\n" + +[NEED_FILE_TO_SAVE] +us="Save file as [%s] " + +[PGP_NEWTRUST_NOT_TRUSTED_SIGNING_KEY] +us="WARNING: The signing key is not trusted to belong to:\n" + +[TO_DISABLE_OR_ENABLE] +us="to disable or enable" + +[TO_EDIT] +us="to edit" + +[SELECTED_KEY_HAS_ONLY_ONE_USERID] +us="Selected key has only one user ID, can't be selected %s\n" + +[NO_DEFAULT_PRIVATE_KEY] +us="No default private key\n" + +[MULTIPLE_RECIPIENTS_MATCHED] +us="WARNING: %i matches were found for recipient %s.\n\ +This may not be what you intended.\n" + +[ENOUGH_THANK_YOU] +us="\a -Enough, thank you.\n" + +[SEEDING_RANDPOOL_FROM_DEVICE] +us="Seeding entropy pool with up to %u bits from %s...\n" + +[COMPLETE_READ_NUM_BITS] +us="Complete. Read %u bits.\n" + +[RSA_AND_DH_RECIPS] +us="WARNING: You are encrypting to both RSA and Diffie-Hellman keys.\n\ +If the RSA user is still using PGP version 2.6.3 or earlier; 4.0; or 4.5,\n\ +she will not be able to decrypt this message.\n" + +[ONLY_ONE_USER_ALLOWED] +us=Specified operation may only be performed on one argument per execution.\n + +[CANNOT_DISABLE_AXIOMATIC_KEYS] +us=You cannot disable an axiomatic key. Use pgpk -e to change your\n\ +trust of this key, first.\n + +[RETRIEVING_URL] +us="Retreiving %s:/%s:%i%s\n" + +[ADD_THESE_KEYS] +us="\nAdd these keys to your keyring? [Y/n] " + +[ABORTED] +us="\nAborted.\n" + +[WARNING_NO_MRK] +us="A requested Message Recovery Key (MRK) for this key was not\ +found.\n" + +[MRK_FOUND] +us="Message Recovery Key (MRK) found. Will also encrypt this message\n\ +to Key ID %s.\n" + +#Everything from here down is automatically generated. + +[PGPERR_OK] +us="No errors\n" + +[PGPERR_GENERIC] +us="Generic error (should be changed)\n" + +[PGPERR_NOMEM] +us="Out of Memory\n" + +[PGPERR_BADPARAM] +us="Invalid Parameter\n" + +[PGPERR_NO_FILE] +us="Cannot open file\n" + +[PGPERR_NO_KEYBITS] +us="Internal keyring bits exhausted\n" + +[PGPERR_BAD_HASHNUM] +us="Unknown hash number\n" + +[PGPERR_BAD_CIPHERNUM] +us="Unknown cipher number\n" + +[PGPERR_BAD_KEYLEN] +us="Illegal key length for cipher\n" + +[PGPERR_SIZEADVISE] +us="SizeAdvise promise not kept\n" + +[PGPERR_CONFIG] +us="Error parsing configuration\n" + +[PGPERR_CONFIG_BADFUNC] +us="Invalid configuration function\n" + +[PGPERR_CONFIG_BADOPT] +us="Unknown configuration option\n" + +[PGPERR_STRING_NOT_FOUND] +us="Requested string not found\n" + +[PGPERR_STRING_NOT_IN_LANGUAGE] +us="Requested string not in language\n" + +[PGPERR_KEY_ISLOCKED] +us="Key requires passphrase to unlock\n" + +[PGPERR_KEY_UNUNLOCKABLE] +us="Key requires passphrase each time\n" + +[PGPERR_SIG_ERROR] +us="Error while processing signature\n" + +[PGPERR_ADDSIG_ERROR] +us="Cannot add signature\n" + +[PGPERR_CANNOT_DECRYPT] +us="Cannot decrypt message\n" + +[PGPERR_ADDESK_ERROR] +us="Cannot add encrypted session key\n" + +[PGPERR_UNK_STRING2KEY] +us="Don't know how to convert pass\n" + +[PGPERR_BAD_STRING2KEY] +us="Invalid conversion from pass\n" + +[PGPERR_ESK_BADTYPE] +us="Unknown encrypted session key type\n" + +[PGPERR_ESK_TOOSHORT] +us="Encrypted session key too short\n" + +[PGPERR_ESK_TOOLONG] +us="Encrypted session key too long\n" + +[PGPERR_ESK_BADVERSION] +us="Encrypted session key version\n" + +[PGPERR_ESK_BADALGORITHM] +us="Encrypted session key algorithm\n" + +[PGPERR_ESK_BITSWRONG] +us="Wrong number of bits in ESK\n" + +[PGPERR_ESK_NOKEY] +us="Can't find key to decrypt session key\n" + +[PGPERR_ESK_NODECRYPT] +us="Can't decrypt this session key\n" + +[PGPERR_ESK_BADPASS] +us="Passphrase incorrect\n" + +[PGPERR_SIG_BADTYPE] +us="Unknown signature type\n" + +[PGPERR_SIG_TOOSHORT] +us="Signature too short\n" + +[PGPERR_SIG_TOOLONG] +us="Signature too long\n" + +[PGPERR_SIG_BADVERSION] +us="Signature version unknown\n" + +[PGPERR_SIG_BADALGORITHM] +us="Signature algorithm unknown\n" + +[PGPERR_SIG_BITSWRONG] +us="Wrong number of bits in signature\n" + +[PGPERR_SIG_NOKEY] +us="Can't find necessary key to check sig\n" + +[PGPERR_SIG_BADEXTRA] +us="Invalid Extra Data for Signature\n" + +[PGPERR_NO_PUBKEY] +us="No public key found\n" + +[PGPERR_NO_SECKEY] +us="No secret key found\n" + +[PGPERR_UNKNOWN_KEYID] +us="No matching keyid found\n" + +[PGPERR_NO_RECOVERYKEY] +us="Requested message recovery key\n" + +[PGPERR_COMMIT_INVALID] +us="Invalid commit response\n" + +[PGPERR_CANNOT_HASH] +us="Cannot hash message\n" + +[PGPERR_UNBALANCED_SCOPE] +us="Unbalanced scope\n" + +[PGPERR_WRONG_SCOPE] +us="Data sent in wrong scope\n" + +[PGPERR_UI_INVALID] +us="Invalid UI Callback Object\n" + +[PGPERR_CB_INVALID] +us="Invalid Parser Callback\n" + +[PGPERR_INTERRUPTED] +us="Interrupted encrypt/decrypt\n" + +[PGPERR_PUBKEY_TOOSMALL] +us="Public Key too small for data\n" + +[PGPERR_PUBKEY_TOOBIG] +us="Public key is too big for this version\n" + +[PGPERR_PUBKEY_UNIMP] +us="Unimplemented public key operation\n" + +[PGPERR_RSA_CORRUPT] +us="Corrupt data decrypting RSA block\n" + +[PGPERR_PK_CORRUPT] +us="Corrupt data decrypting public\n" + +[PGPERR_CMD_TOOBIG] +us="Command to Buffer too big\n" + +[PGPERR_FIFO_READ] +us="Incomplete read from Fifo\n" + +[PGPERR_VRFYSIG_WRITE] +us="Data illegally written into\n" + +[PGPERR_VRFYSIG_BADANN] +us="Invalid annotation to signature\n" + +[PGPERR_ADDHDR_FLUSH] +us="Cannot flush buffer until size\n" + +[PGPERR_JOIN_BADANN] +us="Invalid annotation to join module\n" + +[PGPERR_RANDSEED_TOOSMALL] +us="Not enough data in randseed file\n" + +[PGPERR_ENV_LOWPRI] +us="Env Var not set: priority too low\n" + +[PGPERR_ENV_BADVAR] +us="Invalid environment variable\n" + +[PGPERR_CHARMAP_UNKNOWN] +us="Unknown Charset\n" + +[PGPERR_FILE_PERMISSIONS] +us="Unsufficient file permissions\n" + +[PGPERR_FILE_WRITELOCKED] +us="File already open for writing\n" + +[PGPERR_FILE_BADOP] +us="Invalid PgpFile Operation\n" + +[PGPERR_FILE_OPFAIL] +us="PgpFile Operation Failed\n" + +[PGPERR_IMMUTABLE] +us="Attempt to change an\n" + +[PGPERR_PARSEASC_INCOMPLETE] +us="Ascii Armor Input Incomplete\n" + +[PGPERR_PARSEASC_BADINPUT] +us="PGP text input is corrupted\n" + +[PGPERR_FILEFIFO_SEEK] +us="Temp-File Seek Error\n" + +[PGPERR_FILEFIFO_WRITE] +us="Temp-File Write Error\n" + +[PGPERR_FILEFIFO_READ] +us="Temp-File Read Error\n" + +[PGPERR_FILEIO_BADPKT] +us="Corrupted or bad packet in\n" + +[PGPERR_SYSTEM_PGPK] +us="Error Executing PGPK Program\n" + +[PGPERR_KEYIO_READING] +us="I/O error reading keyring\n" + +[PGPERR_KEYIO_WRITING] +us="I/O error writing keyring\n" + +[PGPERR_KEYIO_FTELL] +us="I/O error finding keyring position\n" + +[PGPERR_KEYIO_SEEKING] +us="I/O error seeking keyring\n" + +[PGPERR_KEYIO_OPENING] +us="I/O error opening keyring\n" + +[PGPERR_KEYIO_CLOSING] +us="I/O error closing keyring\n" + +[PGPERR_KEYIO_FLUSHING] +us="I/O error flushing keyring\n" + +[PGPERR_KEYIO_EOF] +us="Unexpected EOF fetching key packet\n" + +[PGPERR_KEYIO_BADPKT] +us="Bad data found where key\n" + +[PGPERR_KEYIO_BADFILE] +us="Not a keyring file\n" + +[PGPERR_TROUBLE_KEYSUBKEY] +us="Key matches subkey\n" + +[PGPERR_TROUBLE_SIGSUBKEY] +us="Signature by subkey\n" + +[PGPERR_TROUBLE_BADTRUST] +us="Trust packet malformed\n" + +[PGPERR_TROUBLE_UNKPKTBYTE] +us="Unknown packet byte in keyring\n" + +[PGPERR_TROUBLE_UNXSUBKEY] +us="Unexpected subkey (before key)\n" + +[PGPERR_TROUBLE_UNXNAME] +us="Unexpected name (before key)\n" + +[PGPERR_TROUBLE_UNXSIG] +us="Unexpected sig (before key)\n" + +[PGPERR_TROUBLE_UNXUNK] +us="Packet of unknown type in unexpected\n" + +[PGPERR_TROUBLE_UNXTRUST] +us="Unexpected trust packet\n" + +[PGPERR_TROUBLE_KEY2BIG] +us="Key grossly oversized\n" + +[PGPERR_TROUBLE_SEC2BIG] +us="Secret key grossly oversized\n" + +[PGPERR_TROUBLE_NAME2BIG] +us="Name grossly oversized\n" + +[PGPERR_TROUBLE_SIG2BIG] +us="Sig grossly oversized\n" + +[PGPERR_TROUBLE_UNK2BIG] +us="Packet of unknown type too large\n" + +[PGPERR_TROUBLE_DUPKEYID] +us="Duplicate KeyID, different keys\n" + +[PGPERR_TROUBLE_DUPKEY] +us="Duplicate key (in same keyring)\n" + +[PGPERR_TROUBLE_DUPSEC] +us="Duplicate secret (in same keyring)\n" + +[PGPERR_TROUBLE_DUPNAME] +us="Duplicate name (in same keyring)\n" + +[PGPERR_TROUBLE_DUPSIG] +us="Duplicate signature (in same keyring)\n" + +[PGPERR_TROUBLE_DUPUNK] +us="Duplicate unknown \"thing\" in keyring\n" + +[PGPERR_TROUBLE_BAREKEY] +us="Key found with no names\n" + +[PGPERR_TROUBLE_VERSION_BUG_PREV] +us="Bug introduced by legal_kludge\n" + +[PGPERR_TROUBLE_VERSION_BUG_CUR] +us="Bug introduced by legal_kludge\n" + +[PGPERR_TROUBLE_OLDSEC] +us="Passphrase is out of date\n" + +[PGPERR_TROUBLE_NEWSEC] +us="Passphrase is newer than another\n" + +[PGPERR_KEY_NO_RSA_ENCRYPT] +us="No RSA Encryption/Signature support\n" + +[PGPERR_KEY_NO_RSA_DECRYPT] +us="No RSA Decryption/Verification support\n" + +[PGPERR_KEY_NO_RSA] +us="No RSA key support\n" + +[PGPERR_KEY_LONG] +us="Key packet has trailing junk\n" + +[PGPERR_KEY_SHORT] +us="Key packet truncated\n" + +[PGPERR_KEY_VERSION] +us="Key version unknown\n" + +[PGPERR_KEY_PKALG] +us="Key algorithm unknown\n" + +[PGPERR_KEY_MODMPI] +us="Key modulus mis-formatted\n" + +[PGPERR_KEY_EXPMPI] +us="Key exponent mis-formatted\n" + +[PGPERR_KEY_MODEVEN] +us="RSA public modulus is even\n" + +[PGPERR_KEY_EXPEVEN] +us="RSA public exponent is even\n" + +[PGPERR_KEY_MPI] +us="Key component mis-formatted\n" + +[PGPERR_KEY_UNSUPP] +us="Key is not supported by this version of PGP\n" + +[PGPERR_SIG_LONG] +us="Signature packet has trailing junk\n" + +[PGPERR_SIG_SHORT] +us="Signature truncated\n" + +[PGPERR_SIG_MPI] +us="Signature integer mis-formatted\n" + +[PGPERR_SIG_PKALG] +us="Signature algorithm unknown\n" + +[PGPERR_SIG_EXTRALEN] +us="Bad signature extra material (not 5)\n" + +[PGPERR_SIG_VERSION] +us="Signature version unknown\n" + +[PGPERR_KEYDB_BADPASSPHRASE] +us="Bad passphrase\n" + +[PGPERR_KEYDB_KEYDBREADONLY] +us="Key database is read-only\n" + +[PGPERR_KEYDB_NEEDMOREBITS] +us="Insufficient random bits\n" + +[PGPERR_KEYDB_OBJECTREADONLY] +us="Object is read-only\n" + +[PGPERR_KEYDB_INVALIDPROPERTY] +us="Invalid property name\n" + +[PGPERR_KEYDB_BUFFERTOOSHORT] +us="Buffer too short\n" + +[PGPERR_KEYDB_CORRUPT] +us="Key database is corrupt\n" + +[PGPERR_KEYDB_VERSIONTOONEW] +us="Data is too new to be read\n" + +[PGPERR_KEYDB_IOERROR] +us="Input/output error\n" + +[PGPERR_KEYDB_VALUETOOLONG] +us="Value too long\n" + +[PGPERR_KEYDB_DUPLICATE_CERT] +us="Duplicate certification\n" + +[PGPERR_KEYDB_DUPLICATE_USERID] +us="Duplicate UserID\n" + +[PGPERR_KEYDB_CERTIFYINGKEY_DEAD] +us="Certifying key no longer\n" + +[PGPERR_KEYDB_OBJECT_DELETED] +us="Object has been deleted\n" +$Id: language50.txt,v 3.0 2002/01/24 12:11:17 roessler Exp $ diff --git a/contrib/patch.slang-1.2.2.keypad.1 b/contrib/patch.slang-1.2.2.keypad.1 new file mode 100644 index 0000000..93df4d7 --- /dev/null +++ b/contrib/patch.slang-1.2.2.keypad.1 @@ -0,0 +1,76 @@ +diff -ur slang.old/src/slcurses.c slang/src/slcurses.c +--- slang.old/src/slcurses.c Fri Apr 24 09:16:46 1998 ++++ slang/src/slcurses.c Sat Jul 4 07:30:31 1998 +@@ -134,7 +134,10 @@ + } + else if (ch == 0xFFFF) return ERR; + SLang_ungetkey (ch); +- return SLkp_getkey (); ++ if ((ch = SLkp_getkey ()) != SL_KEY_ERR) ++ return ch; ++ else ++ return SLang_getkey (); + } + return SLang_getkey (); + } +diff -ur slang.old/src/slkeymap.c slang/src/slkeymap.c +--- slang.old/src/slkeymap.c Fri Apr 24 09:16:47 1998 ++++ slang/src/slkeymap.c Sat Jul 4 07:41:42 1998 +@@ -343,6 +343,8 @@ + + SLang_Key_Type *SLang_do_key(SLKeyMap_List_Type *kml, int (*getkey)(void)) + { ++ unsigned char SLang_Undo_Buffer [SL_MAX_INPUT_BUFFER_LEN]; ++ int SLang_Undo_Len = 0; + register SLang_Key_Type *key, *next, *kmax; + unsigned int len; + unsigned char input_ch; +@@ -356,6 +358,7 @@ + return NULL; + + input_ch = (unsigned char) SLang_Last_Key_Char; ++ SLang_Undo_Buffer [SLang_Undo_Len++] = input_ch; + + key = (SLang_Key_Type *) &((kml->keymap)[input_ch]); + +@@ -372,7 +375,11 @@ + + key = kml->keymap + input_ch; + if (key->type == 0) ++ { ++ if (getkey == (int (*)(void)) SLang_getkey) ++ SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len); + return NULL; ++ } + } + + /* It appears to be a prefix character in a key sequence. */ +@@ -385,6 +392,7 @@ + { + SLang_Key_TimeOut_Flag = 1; + SLang_Last_Key_Char = (*getkey)(); ++ SLang_Undo_Buffer [SLang_Undo_Len++] = (unsigned char) SLang_Last_Key_Char; + SLang_Key_TimeOut_Flag = 0; + + len++; +@@ -458,6 +466,8 @@ + kmax = next; + } + ++ if (getkey == (int (*)(void)) SLang_getkey) ++ SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len); + return NULL; + } + +diff -ur slang.old/src/slkeypad.c slang/src/slkeypad.c +--- slang.old/src/slkeypad.c Fri Apr 24 09:16:47 1998 ++++ slang/src/slkeypad.c Sat Jul 4 07:30:31 1998 +@@ -110,7 +110,7 @@ + key = SLang_do_key (Keymap_List, (int (*)(void)) SLang_getkey); + if ((key == NULL) || (key->type != SLKEY_F_KEYSYM)) + { +- SLang_flush_input (); ++ /* SLang_flush_input (); */ + return SL_KEY_ERR; + } + diff --git a/contrib/pgp2.rc b/contrib/pgp2.rc new file mode 100644 index 0000000..e8150ca --- /dev/null +++ b/contrib/pgp2.rc @@ -0,0 +1,48 @@ +# -*-muttrc-*- +# +# PGP command formats for PGP 2. +# +# $Id: pgp2.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $ +# + +# +# Note: In order to be able to read your own messages, you'll have +# the +encrypttoself command line parameter to the pgp_encrypt_only_command +# and pgp_encrypt_sign_command variables. +# + +# decode application/pgp +set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgp +language=mutt +verbose=0 +batchmode -f" + +# verify a pgp/mime signature +set pgp_verify_command="pgp +language=mutt +verbose=0 +batchmode -t %s %f" + +# decrypt a pgp/mime attachment +set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -f" + +# create a pgp/mime signed attachment +set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -abfst %?a? -u %a?" + +# create a pgp/mime encrypted attachment +set pgp_encrypt_only_command="pgp +language=mutt +verbose=0 +batchmode -aeft %r < %f" + +# create a pgp/mime encrypted and signed attachment +set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp +language=mutt +verbose=0 +batchmode -aefts %?a?-u %a? %r" + +# import a key into the public key ring +set pgp_import_command="pgp -ka %f +language=mutt" + +# export a key from the public key ring +set pgp_export_command="pgp -kxaf +language=mutt %r" + +# verify a key +set pgp_verify_key_command="pgp -kcc +language=mutt %r" + +# read in the public key ring +set pgp_list_pubring_command="pgpring -2 %r" + +# read in the secret key ring +set pgp_list_secring_command="pgpring -s -2 %r" + +# pattern for good signature +set pgp_good_sign="Good signature" diff --git a/contrib/pgp5.rc b/contrib/pgp5.rc new file mode 100644 index 0000000..e0eaf18 --- /dev/null +++ b/contrib/pgp5.rc @@ -0,0 +1,44 @@ +# -*-muttrc-*- +# +# PGP command formats for PGP 5. +# +# $Id: pgp5.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $ +# + +# decode application/pgp +set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgpv +language=mutt +verbose=0 +batchmode -f --OutputInformationFD=0" + +# verify a pgp/mime signature +set pgp_verify_command="pgpv +language=mutt +verbose=0 +batchmode --OutputInformationFD=1 %f %s" + +# string that the verify command outputs if the signature is good +set pgp_good_sign = "Good signature" + +# decrypt a pgp/mime attachment +set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgpv +language=mutt +verbose=0 +batchmode --OutputInformationFD=2 -f" + +# create a pgp/mime signed attachment +set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgps +language=mutt +verbose=0 +batchmode -abft %?a? -u %a?" + +# create a pgp/mime encrypted attachment +set pgp_encrypt_only_command="pgpewrap pgpe +language=mutt +verbose=0 +batchmode +nobatchinvalidkeys=off -aft -- -r %r < %f" + +# create a pgp/mime encrypted and signed attachment +set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgpewrap pgpe +language=mutt +verbose=0 +batchmode +nobatchinvalidkeys=off -afts %?a? -u %a? -- -r %r" + +# import a key into the public key ring +set pgp_import_command="pgpk -a +language=mutt --OutputInformationFD=1 %f" + +# export a key from the public key ring +set pgp_export_command="pgpk -xa +language=mutt --OutputInformationFD=1 %r" + +# verify a key +set pgp_verify_key_command="pgpk -c +batchmode +language=mutt --OutputInformationFD=1 %r" + +# read in the public key ring +set pgp_list_pubring_command="pgpring -5 %r" + +# read in the secret key ring +set pgp_list_secring_command="pgpring -5 -s %r" + + diff --git a/contrib/pgp6.rc b/contrib/pgp6.rc new file mode 100644 index 0000000..5e05afd --- /dev/null +++ b/contrib/pgp6.rc @@ -0,0 +1,45 @@ +# -*-muttrc-*- +# +# PGP command formats for PGP 6. +# +# $Id: pgp6.rc,v 3.0 2002/01/24 12:11:17 roessler Exp $ +# + +# decode application/pgp +set pgp_decode_command="%?p?PGPPASSFD=0; export PGPPASSFD;? cat %?p?-? %f | pgp6 +compatible +verbose=0 +batchmode -f" + +# verify a pgp/mime signature +set pgp_verify_command="pgp6 +compatible +verbose=0 +batchmode -t %s %f" + +# decrypt a pgp/mime attachment +set pgp_decrypt_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +batchmode -f" + +# create a pgp/mime signed attachment +set pgp_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +batchmode -abfst %?a? -u %a?" + +# create a pgp/mime encrypted attachment +set pgp_encrypt_only_command="pgp6 +compatible +verbose=0 +encrypttoself +batchmode -aeft %r < %f" + +# create a pgp/mime encrypted and signed attachment +set pgp_encrypt_sign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +encrypttoself +batchmode +clearsig=off -aefts %?a? -u %a? %r" + +# import a key into the public key ring +set pgp_import_command="pgp6 +compatible -ka %f " + +# export a key from the public key ring +set pgp_export_command="pgp6 +compatible -kxaf %r" + +# verify a key +set pgp_verify_key_command="pgp6 +compatible -kcc %r" + +# read in the public key ring +set pgp_list_pubring_command="pgpring -5 %r" + +# read in the secret key ring +set pgp_list_secring_command="pgpring -s -5 %r" + +# create a clearsigned message +set pgp_clearsign_command="PGPPASSFD=0; export PGPPASSFD; cat - %f | pgp6 +compatible +verbose=0 +batchmode +clearsig -afst %?a? -u %a?" + +# fetch keys +set pgp_getkeys_command="pkspxycwrap %r" diff --git a/contrib/sample.mailcap b/contrib/sample.mailcap new file mode 100644 index 0000000..4d3c466 --- /dev/null +++ b/contrib/sample.mailcap @@ -0,0 +1,6 @@ +# $Id: sample.mailcap,v 3.0 2002/01/24 12:11:17 roessler Exp $ + +text/html; netscape -remote openURL\(%s\) +image/gif; xv %s +image/jpg; xv %s +application/pgp-keys; pgp -f < %s ; copiousoutput diff --git a/contrib/sample.muttrc b/contrib/sample.muttrc new file mode 100644 index 0000000..88f9b33 --- /dev/null +++ b/contrib/sample.muttrc @@ -0,0 +1,339 @@ +# $Id: sample.muttrc,v 3.3 2003/04/02 08:43:24 roessler Exp $ + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# ME's personal .muttrc (Mutt 0.92.5) +# +# The format of this file is one command per line. Everything after a pound +# sign (#) is a comment, unless a backward slash (\) precedes it. Note: In +# folder-hook and send-hook you need to account for two levels of dequoting +# (see manual). +# + +# Note: $folder should be set _before_ any other path vars where `+' or `=' +# is used because paths are expanded when parsed +# +#set folder=~/Mail # where i keep my mailboxes + +#set abort_unmodified=yes # automatically abort replies if I don't + # change the message +set alias_file=~/.mail_aliases # where I keep my aliases +#set allow_8bit # never do Q-P encoding on legal 8-bit chars +set arrow_cursor # use -> instead of hiliting the whole line +#set ascii_chars # use ASCII instead of ACS chars for threads +#set askbcc +#set askcc +#set attribution="On %d, %n wrote:" # how to attribute replies +set autoedit # go to the editor right away when composing +#set auto_tag # always operate on tagged messages +#set charset="iso-8859-1" # character set for your terminal +set noconfirmappend # don't ask me if i want to append to mailboxes +#set confirmcreate # prompt when creating new files +set copy=yes # always save a copy of outgoing messages +set delete=yes # purge deleted messages without asking +set edit_headers # let me edit the message header when composing +#set editor="emacs -nw" # editor to use when composing messages +#set bounce=yes # don't ask about bouncing messages, just do it +#set fast_reply # skip initial prompts when replying +#set fcc_attach # keep attachments in copies of sent messages? +#set force_name # fcc by recipient, create if mailbox doesn't exist +#set forward_decode # weed and MIME decode forwaded messages +#set forward_format="[%a: %s]" # subject to use when forwarding messages +#set forward_quote # quote the header and body of forward msgs +#set hdr_format="%4C %Z %{%m/%d} [%2N] %-15.15F (%4c) %s" +set hdr_format="%4C %Z %{%m/%d} %-15.15F (%4c) %s" # format of the index +#set hdrs # include `my_hdr' lines in outgoing messages +#set header # include message header when replying +set help # show the help lines +#set history=20 # number of lines of history to remember +#set hostname="mutt.org" # my DNS domain +set include # always include messages when replying +#set indent_string="> " # how to quote replied text +#set locale="C" # locale to use for printing time +#set mailcap_path="~/.mailcap:/usr/local/share/mailcap" +set nomark_old # i don't care about whether a message is old +set mail_check=10 # how often to poll for new mail +set mbox=+mbox # where to store read messages +#set menu_scroll # no implicit next-page/prev-page +#set metoo # remove my address when replying +set mime_forward # use message/rfc822 type to forward messages +set move=yes # don't ask about moving messages, just do it +#set pager=less # some people prefer an external pager +#set pager_context=3 # no. of lines of context to give when scrolling +#set pager_format="-%S- %-20.20f %s" # format of the pager status bar +set pager_index_lines=6 # how many index lines to show in the pager +#set pager_stop # don't move to the next message on next-page +#set pgp_strict_enc # use Q-P encoding when needed for PGP +set postponed=+postponed # mailbox to store postponed messages in +#set post_indent_string='---end quoted text---' +#set print=ask-yes # ask me if I really want to print messages +set print_command=/bin/false # how to print things (I like to save trees) +set noprompt_after # ask me for a command after the external pager exits +#set quote_regexp="^ *[a-zA-Z]*[>:#}]" # how to catch quoted text +set read_inc=25 # show progress when reading a mailbox +#set recall # prompt to recall postponed messages +set record=+outbox # default location to save outgoing mail +set reply_to # always use reply-to if present +#set reply_regexp="^(re:[ \t]*)+"# how to identify replies in the subject: +#set resolve # move to the next message when an action is performed +#set reverse_alias # attempt to look up my names for people +set reverse_name # use my address as it appears in the message + # i am replying to +set nosave_empty # remove files when no messages are left +#set save_name # save outgoing messages by recipient, if the +#set sendmail="/usr/lib/sendmail -oi -oem" # how to deliver mail +#set shell="/bin/zsh" # program to use for shell escapes +#set signature="~/.signature" # file which contains my signature + +# I subscribe to a lot of mailing lists, so this is _very_ useful. This +# groups messages on the same subject to make it easier to follow a +# discussion. Mutt will draw a nice tree showing how the discussion flows. +set sort=threads # primary sorting method + +#set sort_aux=reverse-date-received # how to sort subthreads +#set sort_aux=last-date # date of the last message in thread +set sort_browser=reverse-date # how to sort files in the dir browser +set spoolfile='~/mailbox' # where my new mail is located +#set status_format="-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b? %l]---(%s)-%>-(%P)---" +#set status_on_top # some people prefer the status bar on top +#set strict_threads # don't thread by subject +set tilde # virtual lines to pad blank lines in the pager +#set timeout=0 # timeout for prompt in the index menu +#set tmpdir=~/tmp # where to store temp files +#set to_chars=" +TCF" +#set use_8bitmime # enable the -B8BITMIME sendmail flag +set nouse_domain # don't qualify local addresses with $domain +#set use_from # always generate the `From:' header field +set use_mailcap=yes # always use a mailcap entry when found +set pgp_verify_sig=no # don't automatically verify message signatures +#set visual=vim # editor invoked by ~v in the builtin editor +#set nowait_key # prompt when a pipe returns normal status +set write_inc=25 # show progress while writing mailboxes + +# only enable the following IFF you have sendmail 8.8.x or you will not +# be able to send mail!!! +#set dsn_notify='failure,delay' # when to return an error message +#set dsn_return=hdrs # what to return in the error message + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Header fields I don't normally want to see +# +ignore * # this means "ignore all lines by default" + +# I do want to see these fields, though! +unignore from: subject to cc mail-followup-to \ + date x-mailer x-url # this shows how nicely wrap long lines + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Color definitions +# + +#color normal white default +color hdrdefault red default +color quoted brightblue default +color signature red default +color indicator brightyellow red +color error brightred default +color status yellow blue +color tree magenta default # the thread tree in the index menu +color tilde magenta default +color message brightcyan default +color markers brightcyan default +color attachment brightmagenta default +color search default green # how to hilite search patterns in the pager + +color header brightred default ^(From|Subject): +color body magenta default "(ftp|http)://[^ ]+" # point out URLs +color body magenta default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses +color underline brightgreen default + +# attributes when using a mono terminal +#mono header underline ^(From|Subject): +mono quoted bold + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Key bindings +# +# maps: +# alias alias menu +# attach attachment menu +# browser directory browser +# compose compose menu +# index message index +# pgp pgp menu +# postpone postponed message recall menu +# generic generic keymap for all of the above +# editor line editor +# pager text viewer +# + +bind generic "\e<" first-entry # emacs-like bindings for moving to top/bottom +bind generic \e> last-entry +bind generic { top-page +bind generic } bottom-page +bind generic \177 last-entry + +macro index \cb |urlview\n # simulate the old browse-url function + +macro index S s+spam\n +macro pager S s+spam\n + +#macro index \# /bug^M # search for bugs +#macro index "\"" ":set realname=\"real hairy macro\"^M:set ?realname^M" # and a comment to boot! +#macro index f1 :woohoo! + +bind pager G bottom # just like vi and less +#macro pager \Ck "|pgp -kaf^M" # a comment is valid here +#macro pager X "|morepgp^M" # pipe PGP message to a script + +#bind editor \cy eol # make ^Y jump to the end of the line + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# User Defined Headers +# + +#my_hdr X-Useless-Header: Look ma, it's a \# sign! # real comment +#my_hdr X-Operating-System: `uname -a` + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Specify default filename when saving messages +# +# save-hook [!] +# +# is provided as default when saving messages from + +#save-hook mutt- =mutt-mail +#save-hook aol\.com +spam +save-hook ^judge +diplomacy + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Multiple spool mailboxes +# +# mbox-hook [!] +# +# Read mail in is moved to when is +# closed. + +#mbox-hook =mutt-users.in =mutt-users +#mbox-hook +TEST +inbox + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Change settings based upon message recipient +# +# send-hook [!] +# +# is executed when sending mail to an address matching + +#send-hook mutt- 'set signature=~/.sigmutt; my_hdr From: Mutt User ' + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Specify where to save composed messages +# +# fcc-hook [!] +# +# is recipient(s), is where to save a copy + +#fcc-hook joe +joe +#fcc-hook bob +bob + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Change settings based on mailbox +# +# folder-hook [!] +# +# is executed when opening a mailbox matching + +#folder-hook . 'set sort=date-sent' +#folder-hook mutt 'set hdr_format="%4C %Z %02m/%02N %-20.20F (%4l) %s"' +#folder-hook =mutt my_hdr Revolution: \#9 # real comment + +#folder-hook . 'set reply_regexp="^re:[ \t]*"' + +# this mailing list prepends "[WM]" to all non reply subjects, so set +# $reply_regexp to ignore it +#folder-hook +wmaker 'set reply_regexp="^(re:[ \t]*)?\[WM\][ \t]*"' + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Aliases +# +# alias
[ ,
... ] + +#alias exam "\# to annoy michael" +#alias me Michael Elkins # me! +alias mutt-dev Mutt Development List # power users +alias mutt-users Mutt User List +alias mutt-announce Mutt Announcement List +alias wmaker WindowMaker Mailing List + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Mailboxes to watch for new mail +# +# mailboxes [ ... ] +# + +mailboxes ! +mutt-dev +mutt-users +open-pgp +wmaker +hurricane +vim +ietf \ + +drums +#mailboxes `echo $HOME/Mail/*` + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Specify the order of the headers to appear when displaying a message +# +# hdr_order [ ... ] +# + +unhdr_order * # forget the previous settings +hdr_order date from subject to cc + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Identify mailing lists I subscribe to +# +# lists [ ... ] + +lists mutt-dev mutt-users + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Automatically use entries from ~/.mailcap to view these MIME types +# +# auto_view [ ... ] + +auto_view application/x-gunzip +auto_view application/x-gzip + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# Scoring +# +# score +# +# 9999 and -9999 are special values which cause processing of hooks to stop +# at that entry. If you prefix the score with an equal sign (=), the score +# is assigned to the message and processing stops. + +#score '~f ^me@cs\.hmc\.edu$' 1000 +#score '~t mutt | ~c mutt' =500 +#score '~f aol\.com$' -9999 + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# +# I use Mutt on several different machines, so I put local config commands +# in a separate file so I can have the rest of the settings the same on all +# machines. +# + +source ~/.muttrc-local # config commands local to this site + +# EOF diff --git a/contrib/sample.muttrc-tlr b/contrib/sample.muttrc-tlr new file mode 100644 index 0000000..4e2959a --- /dev/null +++ b/contrib/sample.muttrc-tlr @@ -0,0 +1,279 @@ +# -*-muttrc-*- + +# +# Mutt configuration file of Thomas Roessler . +# +# Use and distribute freely. +# +# Note: This file doesn't contain any personal customization, i.e., +# using it won't make you send messages with my name in the header. +# +# Things to change: You probably want to change the "priv.rc" source +# command in the end of this file. Also, it's likely you want to have +# a look at the the $editor and $tmpdir variables. +# + +# +# MIME settings +# + +auto_view application/ms-tnef text/x-vcard +auto_view application/x-chess application/x-lotus-notes +auto_view text/html application/x-gzip application/x-gunzip +auto_view application/rtf application/x-rath +auto_view application/msword + +alternative_order application/pgp text/plain text/html text/enriched + +# +# Key bindings +# + +# +# A few of these may resemble Pine. ups. +# + +bind alias " " tag-entry +bind alias \n select-entry +bind alias \r select-entry + +bind attach i exit +bind attach n next-entry +bind attach p previous-entry +bind attach " " select-entry +bind attach y print-entry + +bind browser last-entry +bind browser first-entry + +bind editor "\e" kill-word +bind editor "\e" kill-word +bind editor "\e\t" complete-query +bind editor "\Ct" transpose-chars + +bind generic "\CV" next-page +bind generic "\Ca" first-entry +bind generic "\Ce" last-entry +bind generic "\eV" previous-page +bind generic "\ev" previous-page +bind generic + tag-entry +bind generic ^ first-entry +bind generic a tag-prefix +bind generic $ last-entry +bind generic q exit + +bind index ";" limit +bind index "\Ce" last-entry # override edit-type +bind index "\eV" previous-page # override collapse-something +bind index "\e<" collapse-thread +bind index "\eq" query +bind index $ last-entry +bind index * flag-message +bind index delete-message +bind index last-entry +bind index first-entry +bind index J next-entry +bind index K previous-entry +bind index Q quit +bind index R group-reply +bind index \em recall-message +bind index a tag-prefix +bind index m mail +bind index p previous-entry +bind index t create-alias +bind index x sync-mailbox +bind index y print-message +bind index n next-entry +bind index "\ev" previous-page + +bind pager "\Cn" next-line +bind pager "\Cp" previous-line +bind pager + tag-message +bind pager delete-message +bind pager next-line +bind pager bottom +bind pager top +bind pager previous-line +bind pager G group-reply +bind pager R group-reply +bind pager \em recall-message +bind pager t display-toggle-weed # like slrn +bind pager y print-message + +bind query i exit + +# make it feel like emacs + +macro generic "\ex" ":exec " +macro pager "\ex" ":exec " +macro generic "\eX" "\ex" +macro pager "\eX" "\ex" +macro index "~" ";~" + +# move messages to the pilot folder + +macro index "\ew" "+pilot\n" "Copy a message to the pilot folder." +macro pager "\ew" "+pilot\n" "Copy a message to the pilot folder." + +# for majordomo list owner and moderator jobs + +macro index "\ea" ":set nopipe_decode wait_key\n|approve\n:set nowait_key\n" +macro pager "\ea" ":set nopipe_decode wait_key\n|approve\n:set nowait_key\n" + +# emulate the old URL-browser key bindings. + +macro pager "\Cb" "| urlview -\n" +macro index "\Cb" "| urlview -\n" + +# permit limiting from the pager. + +macro pager ";" "" + +# emulate the old POP-feature bindings + +macro index G "!fetchmail\n" +macro pager G "!fetchmail\n" + +macro compose "\ee" "Fpgp -eatf " + + +# +# Colors +# + +# This is a tiny hack, so I can get different +# color schemes on the console and under X11. + +source ~/.mutt/colors.`if [ "$TERM" = "linux" ] ; then echo linux ; else echo default ; fi` + +mono index bold ~F +# mono body bold '\*[^*]+\*' +# mono body underline '_[^_]+_' + +# +# The header weed list +# + +ignore delivered-to +ignore content- errors-to in-reply-to mime-version +ignore lines precedence status +ignore nntp-posting-host path old-return-path received references +ignore priority >received >>received +ignore resent- return-path xref path +ignore x400 importance sensitivity autoforward original-encoded-information +ignore x- thread- + +ignore list- comments posted-to approved-by + +unignore x-spam x-url x-mailer + +hdr_order from to cc date subject reply-to mail-followup-to + +# +# Various settings +# + +set abort_nosubject=no # Let me send messages with an empty subject +set abort_unmodified=no # Let me send empty messages +set alias_file=~/.mutt/aliases # Where to store aliases +unset allow_8bit # Produce correct MIME +unset arrow_cursor # Use the bar cursor +set askcc # Ask me about CCs +unset bounce_delivered # Don't include Delivered-to with bounces +set charset=iso-8859-1 # The local character set +set confirmcreate # Ask me about creating new files +unset confirmappend # Don't ask me about appending to files +set delete=yes # Don't ask me whether or not I meant to delete messages +set display_filter="tr '\240\204\223\226' ' \"\"-'" # fix some funny characters +set edit_hdrs # I want to edit the headers. +set editor="/usr/bin/jed %s -f 'flower_mode();'" + # Invoke jed with mail_mode. This may + # or may not work for you. +set envelope_from # set messages' envelope-from header. +set fcc_clear # Store local copies of messages in the clear. +set folder=~/Mail # Where my mail folders go +set followup_to # Create Mail-Followup-To headers. +unset force_name # Don't create save folders which don't exist. +set forward_decode # Decode messages when forwarding. +set forward_decrypt # Decrypt messages when forwarding. +set nohelp # No help line. +set include=yes # Always include a copy when replying. +set mark_old # Distinguish between seen (but unread) and new messages +set mbox=+mbox # The (unused) mbox file. +unset metoo # Remove me from CC headers. +set mime_fwd=ask-no # Ask me whether or not to create a MIME-encapsulated forward +set move=no # Don't use mbox +set pager_stop # Don't fall through to the next message in the pager +set pager_index_lines=0 # The pager index is ugly. +set pgp_replyencrypt # Encrypt when replying to encrypted messages. +set pgp_replysignencrypted # Sign when replying to encrypted messages. +set pgp_show_unusable="no" # Don't display unusable keys. +set pgp_sort_keys="keyid" # Sort keys by key ID +set pgp_replysign # Sign when replying to signed messages. +set pgp_timeout=3600 # Forget the PGP passphrase after an hour. +set pipe_decode # Decode messages I pipe to commands, typically to patch(1). +set postponed=~/.mutt/postponed # Where to put postponed messages +set print=ask-no # Don't waste paper +set print_cmd="enscript -Email -2 -r -G" # Two columns, landscape, fancy header. +set print_split=yes # Invoke enscript once per message +set quit=yes # Don't ask me whether or not I want to quit. +set quote_regexp="^ *[a-zA-Z]*[>|][>:|]*" # Recognize quotes in the pager. +set read_inc=50 # Progress indicator when reading folders. +set recall=ask-no # When I say "compose", ask me whether I want to continue + # composing a postponed message. +set record="+archive/now" # Put copies of most outgoing messages to ~/Mail/archive/now +set reply_to=ask-yes # Ask me whether I want to honor users' reply-to headers. +set reverse_alias # Use aliases to display real names on the index. +set save_name # Save copies by name. Together with $record and $save_name, + # this means that when a folder exists, copies of outgoing + # messages are written to ~/Mail/, otherwise they go to + # ~/Mail/archive/now +set signature=~/.signature # Silly signature +set sig_dashes # Add dashes above my signature +set smart_wrap # Try to be smart when wrapping around lines in the pager +set sort=threads # sort by threads, +set sort_aux=date # then by date +unset strict_threads # don't be strict about threads +# set suspend=no # Don't suspend - I usually run mutt like this: "xterm -e mutt" +set tilde # Indicate empty lines in the pager. +set tmpdir=~/.tmp # Temporary files aren't stored in public places. +set to_chars=" +TCF " # Don't tag list mail in the index + +unset use_domain # Don't append a domain to addresses. + +set write_inc=50 # Progress indicator when writing folders. +set query_command="lbdbq %s" # Use the Little Brother's Database with the external + # query feature. +set sendmail_wait=-1 # Put sendmail (i.e., postfix) to the background. +set encode_from # "From " in the beginning of a line triggers quoted-printable +set nowait_key # Return immediately from external programs +set forw_format="[fwd] %s (from: %a)" # A different subject for forwarded messages +set nobeep # Shut up. ;-) +set reply_regexp="^((re([\\[0-9\\]+])*|aw):[ \t]*)+[ \t]*" # A regular expression to detect replies +set header # Include the message header when replying. +set ignore_list_reply_to # Ignore Reply-To headers pointing to mailing lists. +set index_format="%4C %Z %{%b %d} %-15.15L (%4c) %s" # Somewhat different index format, which works + # nicely with maildir folders. +set rfc2047_parameters # Sometimes, I get mails which use a bogus encoding for + # MIME parameters. Setting this shouldn't harm. +set text_flowed # Generate text/plain; format=flowed +unset use_ipv6 # Don't try to use IPv6 - it doesn't work here. +set keep_flagged # don't move flagged messages to mbox + +set status_format="-%r-+(%v) %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?]----%>-(%P)---" +set compose_format="--+(%v) Compose [Approx. msg size: %l Atts: %a]%>-" +set pager_format="-%Z- %C/%m: %.20n %> %s" + +set smileys="^$" + +# PGP command configuration +# source ~/.mutt/pgp2.rc +source ~/.mutt/gpg.rc + + +# source non-public stuff, (hooks, alternates, ...) +source ~/.mutt/priv.rc + +# source aliases +source ~/.mutt/aliases + diff --git a/contrib/smime.rc b/contrib/smime.rc new file mode 100644 index 0000000..635496b --- /dev/null +++ b/contrib/smime.rc @@ -0,0 +1,96 @@ +# -*-muttrc-*- +## The following options are only available if you have +## compiled in S/MIME support + +# If you compiled mutt with support for both PGP and S/MIME, PGP +# will be the default method unless the following option is set +set smime_is_default + +# Uncoment this if you don't want to set labels for certificates you add. +# unset smime_ask_cert_label + +# Passphrase expiration +set smime_timeout=300 + +# Global crypto options -- these affect PGP operations as well. +set crypt_autosign = yes +set crypt_replyencrypt = yes +set crypt_replysign = yes +set crypt_replysignencrypted = yes +set crypt_verify_sig = yes + +# Section A: Key Management. + +# The (default) keyfile for signing/decrypting. Uncomment the following +# line and replace the keyid with your own. +set smime_default_key="12345678.0" + +# Uncommen to make mutt ask what key to use when trying to decrypt a message. +# It will use the default key above (if that was set) else. +# unset smime_decrypt_use_default_key + +# Path to a file or directory with trusted certificates +set smime_ca_location="~/.smime/ca-bundle.crt" + +# Path to where all known certificates go. (must exist!) +set smime_certificates="~/.smime/certificates" + +# Path to where all private keys go. (must exist!) +set smime_keys="~/.smime/keys" + +# These are used to extract a certificate from a message. +# First generate a PKCS#7 structure from the message. +set smime_pk7out_command="openssl smime -verify -in %f -noverify -pk7out" + +# Extract the included certificate(s) from a PKCS#7 structure. +set smime_get_cert_command="openssl pkcs7 -print_certs -in %f" + +# Extract the signer's certificate only from a S/MIME signature (sender verification) +set smime_get_signer_cert_command="openssl smime -verify -in %f -noverify -signer %c -out /dev/null" + +# This is used to get the email address the certificate was issued to. +set smime_get_cert_email_command="openssl x509 -in %f -noout -email" + +# Add a certificate to the database using smime_keys. +set smime_import_cert_command="smime_keys add_cert %f" + + + +# Sction B: Outgoing messages + +# Algorithm to use for encryption. +# valid choices are rc2-40, rc2-64, rc2-128, des, des3 +set smime_encrypt_with="des3" + +# Encrypt a message. Input file is a MIME entity. +set smime_encrypt_command="openssl smime -encrypt -%a -outform DER -in %f %c" + +# Sign. +set smime_sign_command="openssl smime -sign -signer %c -inkey %k -passin stdin -in %f -certfile %i -outform DER" + + + +#Section C: Incoming messages + +# Decrypt a message. Output is a MIME entity. +set smime_decrypt_command="openssl smime -decrypt -passin stdin -inform DER -in %f -inkey %k -recip %c" + +# Verify a signature of type multipart/signed +set smime_verify_command="openssl smime -verify -inform DER -in %s %C -content %f" + +# Verify a signature of type application/x-pkcs7-mime +set smime_verify_opaque_command="openssl smime -verify -inform DER -in %s %C" + + + +# Section D: Alternatives + +# Sign. If you wish to NOT include the certificate your CA used in signing +# your public key, use this command instead. +# set smime_sign_command="openssl smime -sign -signer %c -inkey %k -passin stdin -in %f -outform DER" +# +# In order to verify the signature only and skip checking the certificate chain: +# +# set smime_verify_command="openssl smime -verify -inform DER -in %s -content %f -noverify" +# set smime_verify_opaque_command="openssl smime -verify -inform DER -in %s -noverify" +# diff --git a/contrib/smime_keys_test.pl b/contrib/smime_keys_test.pl new file mode 100644 index 0000000..79c555c --- /dev/null +++ b/contrib/smime_keys_test.pl @@ -0,0 +1,134 @@ +#! /usr/bin/perl -W + +# by Mike Schiraldi + +use strict; +use Expect; + +sub run ($;$ ); + +umask 077; # probably not necc. but can't hurt + +my $tmpdir = "/tmp/smime_keys_test-$$-" . time; + +mkdir $tmpdir or die; +chdir $tmpdir or die; + +open TMP, '>muttrc' or die; +print TMP <demoCA/serial' or die; +print OUT "01\n"; +close OUT; +open OUT, '>demoCA/index.txt' or die; +close OUT; + +# make the CA +run 'openssl req -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 7300 -nodes', + "\n\nx\n\nx\nx\n\n"; + +# trust it +run 'smime_keys add_root demoCA/cacert.pem', "root_CA\n"; + +# have the CA process the request +run 'openssl ca -batch -startdate 000101000000Z -enddate 200101000000Z -days 7300 ' . + '-policy policy_anything -out newcert.pem -infiles newreq.pem'; + +unlink 'newreq.pem' or die; + +# put it all in a .p12 bundle +run 'openssl pkcs12 -export -inkey user.key -in newcert.pem -out cert.p12 -CAfile demoCA/cacert.pem -chain', "pass1\n" x 2; +unlink 'newcert.pem' or die; +unlink 'demoCA/cacert.pem' or die; +unlink 'demoCA/index.txt' or die; +unlink 'demoCA/index.txt.old' or die; +unlink 'demoCA/serial' or die; +unlink 'demoCA/serial.old' or die; +unlink 'demoCA/newcerts/01.pem' or die; +unlink 'demoCA/private/cakey.pem' or die; +rmdir 'demoCA/certs' or die; +rmdir 'demoCA/crl' or die; +rmdir 'demoCA/private' or die; +rmdir 'demoCA/newcerts' or die; +rmdir 'demoCA' or die; + +# have smime_keys process it +run 'smime_keys add_p12 cert.p12', "pass1\n" . "pass2\n" x 2 . "old_label\n"; +unlink 'cert.p12' or die; + +# make sure it showed up +run 'smime_keys list > list'; + +open IN, 'list' or die; + eq "\n" or die; + =~ /^(.*)\: Issued for\: user\@smime\.mutt \"old_label\" \(Unverified\)\n/ or die; +close IN; + +my $keyid = $1; + +# see if we can rename it +run "smime_keys label $keyid", "new_label\n"; + +# make sure it worked +run 'smime_keys list > list'; + +open IN, 'list' or die; + eq "\n" or die; + =~ /^$keyid\: Issued for\: user\@smime\.mutt \"new_label\" \(Unverified\)\n/ or die; +close IN; + +unlink 'list' or die; + +# try signing something +run "openssl smime -sign -signer certificates/$keyid -inkey user.key -in /etc/passwd -certfile certificates/37adefc3.0 > signed"; +unlink 'user.key' or die; + +# verify it +run 'openssl smime -verify -out /dev/null -in signed -CAfile ca-bundle.crt'; +unlink 'signed' or die; + +# clean up +unlink 'ca-bundle.crt' or die; +unlink 'muttrc' or die; +unlink 'keys/.index' or die; +unlink 'certificates/.index' or die; +unlink or die; +unlink or die; +rmdir 'keys' or die; +rmdir 'certificates' or die; +chdir '/' or die; +rmdir $tmpdir or die; + + +sub run ($;$) { + my $cmd = shift or die; + my $input = shift; + + print "\n\nRunning [$cmd]\n"; + + my $exp = Expect->spawn ($cmd); + if (defined $input) { + print $exp $input; + } + $exp->soft_close; + $? and die "$cmd returned $?"; +} diff --git a/copy.c b/copy.c new file mode 100644 index 0000000..2bfcde7 --- /dev/null +++ b/copy.c @@ -0,0 +1,925 @@ +/* + * Copyright (C) 1996-2000,2002 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mailbox.h" +#include "mx.h" +#include "copy.h" +#include "rfc2047.h" +#include "mime.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#include +#include +#include +#include /* needed for SEEK_SET under SunOS 4.1.4 */ + +static int address_header_decode (char **str); +static int copy_delete_attach (BODY *b, FILE *fpin, FILE *fpout, char *date); + +/* Ok, the only reason for not merging this with mutt_copy_header() + * below is to avoid creating a HEADER structure in message_handler(). + */ +int +mutt_copy_hdr (FILE *in, FILE *out, long off_start, long off_end, int flags, + const char *prefix) +{ + int from = 0; + int this_is_from; + int ignore = 0; + char buf[STRING]; /* should be long enough to get most fields in one pass */ + char *nl; + LIST *t; + char **headers; + int hdr_count; + int x; + char *this_one = NULL; + int error; + + if (ftell (in) != off_start) + fseek (in, off_start, 0); + + buf[0] = '\n'; + buf[1] = 0; + + if ((flags & (CH_REORDER | CH_WEED | CH_MIME | CH_DECODE | CH_PREFIX | CH_WEED_DELIVERED)) == 0) + { + /* Without these flags to complicate things + * we can do a more efficient line to line copying + */ + while (ftell (in) < off_end) + { + nl = strchr (buf, '\n'); + + if ((fgets (buf, sizeof (buf), in)) == NULL) + break; + + /* Is it the begining of a header? */ + if (nl && buf[0] != ' ' && buf[0] != '\t') + { + ignore = 1; + if (!from && mutt_strncmp ("From ", buf, 5) == 0) + { + if ((flags & CH_FROM) == 0) + continue; + from = 1; + } + else if (flags & (CH_NOQFROM) && + ascii_strncasecmp (">From ", buf, 6) == 0) + continue; + + else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n')) + break; /* end of header */ + + if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) && + (ascii_strncasecmp ("Status:", buf, 7) == 0 || + ascii_strncasecmp ("X-Status:", buf, 9) == 0)) + continue; + if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) && + (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 || + ascii_strncasecmp ("Lines:", buf, 6) == 0)) + continue; + ignore = 0; + } + + if (!ignore && fputs (buf, out) == EOF) + return (-1); + } + return 0; + } + + hdr_count = 1; + x = 0; + error = FALSE; + + /* We are going to read and collect the headers in an array + * so we are able to do re-ordering. + * First count the number of entries in the array + */ + if (flags & CH_REORDER) + { + for (t = HeaderOrderList; t; t = t->next) + { + dprint(1, (debugfile, "Reorder list: %s\n", t->data)); + hdr_count++; + } + } + + dprint (1, (debugfile, "WEED is %s\n", (flags & CH_WEED) ? "Set" : "Not")); + + headers = safe_calloc (hdr_count, sizeof (char *)); + + /* Read all the headers into the array */ + while (ftell (in) < off_end) + { + nl = strchr (buf, '\n'); + + /* Read a line */ + if ((fgets (buf, sizeof (buf), in)) == NULL) + break; + + /* Is it the begining of a header? */ + if (nl && buf[0] != ' ' && buf[0] != '\t') + { + /* Do we have anything pending? */ + if (this_one) + { + if (flags & CH_DECODE) + { + if (!address_header_decode (&this_one)) + rfc2047_decode (&this_one); + } + + if (!headers[x]) + headers[x] = this_one; + else + { + safe_realloc (&headers[x], mutt_strlen (headers[x]) + + mutt_strlen (this_one) + sizeof (char)); + strcat (headers[x], this_one); /* __STRCAT_CHECKED__ */ + FREE (&this_one); + } + + this_one = NULL; + } + + ignore = 1; + this_is_from = 0; + if (!from && mutt_strncmp ("From ", buf, 5) == 0) + { + if ((flags & CH_FROM) == 0) + continue; + this_is_from = from = 1; + } + else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n')) + break; /* end of header */ + + /* note: CH_FROM takes precedence over header weeding. */ + if (!((flags & CH_FROM) && (flags & CH_FORCE_FROM) && this_is_from) && + (flags & CH_WEED) && + mutt_matches_ignore (buf, Ignore) && + !mutt_matches_ignore (buf, UnIgnore)) + continue; + if ((flags & CH_WEED_DELIVERED) && + ascii_strncasecmp ("Delivered-To:", buf, 13) == 0) + continue; + if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) && + (ascii_strncasecmp ("Status:", buf, 7) == 0 || + ascii_strncasecmp ("X-Status:", buf, 9) == 0)) + continue; + if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) && + (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 || + ascii_strncasecmp ("Lines:", buf, 6) == 0)) + continue; + if ((flags & CH_MIME) && + ((ascii_strncasecmp ("content-", buf, 8) == 0 && + (ascii_strncasecmp ("transfer-encoding:", buf + 8, 18) == 0 || + ascii_strncasecmp ("type:", buf + 8, 5) == 0)) || + ascii_strncasecmp ("mime-version:", buf, 13) == 0)) + continue; + + /* Find x -- the array entry where this header is to be saved */ + if (flags & CH_REORDER) + { + for (t = HeaderOrderList, x = 0 ; (t) ; t = t->next, x++) + { + if (!ascii_strncasecmp (buf, t->data, mutt_strlen (t->data))) + { + dprint(2, (debugfile, "Reorder: %s matches %s\n", t->data, buf)); + break; + } + } + } + + ignore = 0; + } /* If beginning of header */ + + if (!ignore) + { + dprint (2, (debugfile, "Reorder: x = %d; hdr_count = %d\n", x, hdr_count)); + if (!this_one) + this_one = safe_strdup (buf); + else + { + safe_realloc (&this_one, + mutt_strlen (this_one) + mutt_strlen (buf) + sizeof (char)); + strcat (this_one, buf); /* __STRCAT_CHECKED__ */ + } + } + } /* while (ftell (in) < off_end) */ + + /* Do we have anything pending? -- XXX, same code as in above in the loop. */ + if (this_one) + { + if (flags & CH_DECODE) + { + if (!address_header_decode (&this_one)) + rfc2047_decode (&this_one); + } + + if (!headers[x]) + headers[x] = this_one; + else + { + safe_realloc (&headers[x], mutt_strlen (headers[x]) + + mutt_strlen (this_one) + sizeof (char)); + strcat (headers[x], this_one); /* __STRCAT_CHECKED__ */ + FREE (&this_one); + } + + this_one = NULL; + } + + /* Now output the headers in order */ + for (x = 0; x < hdr_count; x++) + { + if (headers[x]) + { +#if 0 + if (flags & CH_DECODE) + rfc2047_decode (&headers[x]); +#endif + + /* We couldn't do the prefixing when reading because RFC 2047 + * decoding may have concatenated lines. + */ + if (flags & CH_PREFIX) + { + char *ch = headers[x]; + int print_prefix = 1; + + while (*ch) + { + if (print_prefix) + { + if (fputs (prefix, out) == EOF) + { + error = TRUE; + break; + } + print_prefix = 0; + } + + if (*ch == '\n' && ch[1]) + print_prefix = 1; + + if (putc (*ch++, out) == EOF) + { + error = TRUE; + break; + } + } + if (error) + break; + } + else + { + if (fputs (headers[x], out) == EOF) + { + error = TRUE; + break; + } + } + } + } + + /* Free in a separate loop to be sure that all headers are freed + * in case of error. */ + for (x = 0; x < hdr_count; x++) + FREE (&headers[x]); + FREE (&headers); + + if (error) + return (-1); + return (0); +} + +/* flags + CH_DECODE RFC2047 header decoding + CH_FROM retain the "From " message separator + CH_FORCE_FROM give CH_FROM precedence over CH_WEED + CH_MIME ignore MIME fields + CH_NOLEN don't write Content-Length: and Lines: + CH_NONEWLINE don't output a newline after the header + CH_NOSTATUS ignore the Status: and X-Status: + CH_PREFIX quote header with $indent_str + CH_REORDER output header in order specified by `hdr_order' + CH_TXTPLAIN generate text/plain MIME headers [hack alert.] + CH_UPDATE write new Status: and X-Status: + CH_UPDATE_LEN write new Content-Length: and Lines: + CH_XMIT ignore Lines: and Content-Length: + CH_WEED do header weeding + CH_NOQFROM ignore ">From " line + + prefix + string to use if CH_PREFIX is set + */ + +int +mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix) +{ + char buffer[SHORT_STRING]; + + if (mutt_copy_hdr (in, out, h->offset, h->content->offset, flags, prefix) == -1) + return (-1); + + if (flags & CH_TXTPLAIN) + { + char chsbuf[SHORT_STRING]; + fputs ("Mime-Version: 1.0\n", out); + fputs ("Content-Transfer-Encoding: 8bit\n", out); + fputs ("Content-Type: text/plain; charset=", out); + mutt_canonical_charset (chsbuf, sizeof (chsbuf), Charset ? Charset : "us-ascii"); + rfc822_cat(buffer, sizeof(buffer), chsbuf, MimeSpecials); + fputs(buffer, out); + fputc('\n', out); + + if (ferror (out) != 0 || feof (out) != 0) + return -1; + + } + + if (flags & CH_UPDATE) + { + if ((flags & CH_NOSTATUS) == 0) + { + if (h->old || h->read) + { + if (fputs ("Status: ", out) == EOF) + return (-1); + + if (h->read) + { + if (fputs ("RO", out) == EOF) + return (-1); + } + else if (h->old) + { + if (fputc ('O', out) == EOF) + return (-1); + } + + if (fputc ('\n', out) == EOF) + return (-1); + } + + if (h->flagged || h->replied) + { + if (fputs ("X-Status: ", out) == EOF) + return (-1); + + if (h->replied) + { + if (fputc ('A', out) == EOF) + return (-1); + } + + if (h->flagged) + { + if (fputc ('F', out) == EOF) + return (-1); + } + + if (fputc ('\n', out) == EOF) + return (-1); + } + } + } + + if (flags & CH_UPDATE_LEN && + (flags & CH_NOLEN) == 0) + { + fprintf (out, "Content-Length: %ld\n", h->content->length); + if (h->lines != 0 || h->content->length == 0) + fprintf (out, "Lines: %d\n", h->lines); + } + + if ((flags & CH_NONEWLINE) == 0) + { + if (flags & CH_PREFIX) + fputs(prefix, out); + if (fputc ('\n', out) == EOF) /* add header terminator */ + return (-1); + } + + if (ferror (out) || feof (out)) + return -1; + + return (0); +} + +/* Count the number of lines and bytes to be deleted in this body*/ +static int count_delete_lines (FILE *fp, BODY *b, long *length, size_t datelen) +{ + int dellines = 0; + long l; + int ch; + + if (b->deleted) + { + fseek (fp, b->offset, SEEK_SET); + for (l = b->length ; l ; l --) + { + ch = getc (fp); + if (ch == EOF) + break; + if (ch == '\n') + dellines ++; + } + dellines -= 3; + *length -= b->length - (84 + datelen); + /* Count the number of digits exceeding the first one to write the size */ + for (l = 10 ; b->length >= l ; l *= 10) + (*length) ++; + } + else + { + for (b = b->parts ; b ; b = b->next) + dellines += count_delete_lines (fp, b, length, datelen); + } + return dellines; +} + +/* make a copy of a message + * + * fpout where to write output + * fpin where to get input + * hdr header of message being copied + * body structure of message being copied + * flags + * M_CM_NOHEADER don't copy header + * M_CM_PREFIX quote header and body + * M_CM_DECODE decode message body to text/plain + * M_CM_DISPLAY displaying output to the user + * M_CM_PRINTING printing the message + * M_CM_UPDATE update structures in memory after syncing + * M_CM_DECODE_PGP used for decoding PGP messages + * M_CM_CHARCONV perform character set conversion + * chflags flags to mutt_copy_header() + */ + +int +_mutt_copy_message (FILE *fpout, FILE *fpin, HEADER *hdr, BODY *body, + int flags, int chflags) +{ + char prefix[SHORT_STRING]; + STATE s; + long new_offset = -1; + + if (flags & M_CM_PREFIX) + { + if (option (OPTTEXTFLOWED)) + strfcpy (prefix, ">", sizeof (prefix)); + else + _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), Context, hdr, 0); + } + + if ((flags & M_CM_NOHEADER) == 0) + { + if (flags & M_CM_PREFIX) + chflags |= CH_PREFIX; + + else if (hdr->attach_del && (chflags & CH_UPDATE_LEN)) + { + int new_lines; + long new_length = body->length; + char date[SHORT_STRING]; + + mutt_make_date (date, sizeof (date)); + date[5] = date[mutt_strlen (date) - 1] = '\"'; + + /* Count the number of lines and bytes to be deleted */ + fseek (fpin, body->offset, SEEK_SET); + new_lines = hdr->lines - + count_delete_lines (fpin, body, &new_length, mutt_strlen (date)); + + /* Copy the headers */ + if (mutt_copy_header (fpin, hdr, fpout, + chflags | CH_NOLEN | CH_NONEWLINE, NULL)) + return -1; + fprintf (fpout, "Content-Length: %ld\n", new_length); + if (new_lines <= 0) + new_lines = 0; + else + fprintf (fpout, "Lines: %d\n\n", new_lines); + if (ferror (fpout) || feof (fpout)) + return -1; + new_offset = ftell (fpout); + + /* Copy the body */ + fseek (fpin, body->offset, SEEK_SET); + if (copy_delete_attach (body, fpin, fpout, date)) + return -1; + +#ifdef DEBUG + { + long fail = ((ftell (fpout) - new_offset) - new_length); + + if (fail) + { + mutt_error ("The length calculation was wrong by %ld bytes", fail); + new_length += fail; + mutt_sleep (1); + } + } +#endif + + /* Update original message if we are sync'ing a mailfolder */ + if (flags & M_CM_UPDATE) + { + hdr->attach_del = 0; + hdr->lines = new_lines; + body->offset = new_offset; + + /* update the total size of the mailbox to reflect this deletion */ + Context->size -= body->length - new_length; + /* + * if the message is visible, update the visible size of the mailbox + * as well. + */ + if (Context->v2r[hdr->msgno] != -1) + Context->vsize -= body->length - new_length; + + body->length = new_length; + mutt_free_body (&body->parts); + } + + return 0; + } + + if (mutt_copy_header (fpin, hdr, fpout, chflags, + (chflags & CH_PREFIX) ? prefix : NULL) == -1) + return -1; + + new_offset = ftell (fpout); + } + + if (flags & M_CM_DECODE) + { + /* now make a text/plain version of the message */ + memset (&s, 0, sizeof (STATE)); + s.fpin = fpin; + s.fpout = fpout; + if (flags & M_CM_PREFIX) + s.prefix = prefix; + if (flags & M_CM_DISPLAY) + s.flags |= M_DISPLAY; + if (flags & M_CM_PRINTING) + s.flags |= M_PRINTING; + if (flags & M_CM_WEED) + s.flags |= M_WEED; + if (flags & M_CM_CHARCONV) + s.flags |= M_CHARCONV; + + if (WithCrypto && flags & M_CM_VERIFY) + s.flags |= M_VERIFY; + + mutt_body_handler (body, &s); + } + else if (WithCrypto + && (flags & M_CM_DECODE_CRYPT) && (hdr->security & ENCRYPT)) + { + BODY *cur; + FILE *fp; + + if ((WithCrypto & APPLICATION_PGP) + && (flags & M_CM_DECODE_PGP) && (hdr->security & APPLICATION_PGP) && + hdr->content->type == TYPEMULTIPART) + { + if (crypt_pgp_decrypt_mime (fpin, &fp, hdr->content, &cur)) + return (-1); + fputs ("Mime-Version: 1.0\n", fpout); + } + + if ((WithCrypto & APPLICATION_SMIME) + && (flags & M_CM_DECODE_SMIME) && (hdr->security & APPLICATION_SMIME) + && hdr->content->type == TYPEAPPLICATION) + { + if (crypt_smime_decrypt_mime (fpin, &fp, hdr->content, &cur)) + return (-1); + } + + mutt_write_mime_header (cur, fpout); + fputc ('\n', fpout); + + fseek (fp, cur->offset, 0); + if (mutt_copy_bytes (fp, fpout, cur->length) == -1) + { + fclose (fp); + mutt_free_body (&cur); + return (-1); + } + mutt_free_body (&cur); + fclose (fp); + } + else + { + fseek (fpin, body->offset, 0); + if (flags & M_CM_PREFIX) + { + int c; + size_t bytes = body->length; + + fputs(prefix, fpout); + + while((c = fgetc(fpin)) != EOF && bytes--) + { + fputc(c, fpout); + if(c == '\n') + { + fputs(prefix, fpout); + } + } + } + else if (mutt_copy_bytes (fpin, fpout, body->length) == -1) + return -1; + } + + if ((flags & M_CM_UPDATE) && (flags & M_CM_NOHEADER) == 0 + && new_offset != -1) + { + body->offset = new_offset; + mutt_free_body (&body->parts); + } + + return 0; +} + +int +mutt_copy_message (FILE *fpout, CONTEXT *src, HEADER *hdr, int flags, + int chflags) +{ + MESSAGE *msg; + int r; + + if ((msg = mx_open_message (src, hdr->msgno)) == NULL) + return -1; + if ((r = _mutt_copy_message (fpout, msg->fp, hdr, hdr->content, flags, chflags)) == 0 + && (ferror (fpout) || feof (fpout))) + { + dprint (1, (debugfile, "_mutt_copy_message failed to detect EOF!\n")); + r = -1; + } + mx_close_message (&msg); + return r; +} + +/* appends a copy of the given message to a mailbox + * + * dest destination mailbox + * fpin where to get input + * src source mailbox + * hdr message being copied + * body structure of message being copied + * flags mutt_copy_message() flags + * chflags mutt_copy_header() flags + */ + +int +_mutt_append_message (CONTEXT *dest, FILE *fpin, CONTEXT *src, HEADER *hdr, + BODY *body, int flags, int chflags) +{ + MESSAGE *msg; + int r; + + if ((msg = mx_open_new_message (dest, hdr, (src->magic == M_MBOX || src->magic == M_MMDF) ? 0 : M_ADD_FROM)) == NULL) + return -1; + if (dest->magic == M_MBOX || dest->magic == M_MMDF) + chflags |= CH_FROM | CH_FORCE_FROM; + chflags |= (dest->magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE); + r = _mutt_copy_message (msg->fp, fpin, hdr, body, flags, chflags); + if (mx_commit_message (msg, dest) != 0) + r = -1; + + mx_close_message (&msg); + return r; +} + +int +mutt_append_message (CONTEXT *dest, CONTEXT *src, HEADER *hdr, int cmflags, + int chflags) +{ + MESSAGE *msg; + int r; + + if ((msg = mx_open_message (src, hdr->msgno)) == NULL) + return -1; + r = _mutt_append_message (dest, msg->fp, src, hdr, hdr->content, cmflags, chflags); + mx_close_message (&msg); + return r; +} + +/* + * This function copies a message body, while deleting _in_the_copy_ + * any attachments which are marked for deletion. + * Nothing is changed in the original message -- this is left to the caller. + * + * The function will return 0 on success and -1 on failure. + */ +static int copy_delete_attach (BODY *b, FILE *fpin, FILE *fpout, char *date) +{ + BODY *part; + + for (part = b->parts ; part ; part = part->next) + { + if (part->deleted || part->parts) + { + /* Copy till start of this part */ + if (mutt_copy_bytes (fpin, fpout, part->hdr_offset - ftell (fpin))) + return -1; + + if (part->deleted) + { + fprintf (fpout, + "Content-Type: message/external-body; access-type=x-mutt-deleted;\n" + "\texpiration=%s; length=%ld\n" + "\n", date + 5, part->length); + if (ferror (fpout)) + return -1; + + /* Copy the original mime headers */ + if (mutt_copy_bytes (fpin, fpout, part->offset - ftell (fpin))) + return -1; + + /* Skip the deleted body */ + fseek (fpin, part->offset + part->length, SEEK_SET); + } + else + { + if (copy_delete_attach (part, fpin, fpout, date)) + return -1; + } + } + } + + /* Copy the last parts */ + if (mutt_copy_bytes (fpin, fpout, b->offset + b->length - ftell (fpin))) + return -1; + + return 0; +} + +/* + * This function is the equivalent of mutt_write_address_list(), + * but writes to a buffer instead of writing to a stream. + * mutt_write_address_list could be re-used if we wouldn't store + * all the decoded headers in a huge array, first. + * + * XXX - fix that. + */ + +static void format_address_header (char **h, ADDRESS *a) +{ + char buf[HUGE_STRING]; + char cbuf[STRING]; + char c2buf[STRING]; + + int l, linelen, buflen, count; + linelen = mutt_strlen (*h); + buflen = linelen + 3; + + + safe_realloc (h, buflen); + for (count = 0; a; a = a->next, count++) + { + ADDRESS *tmp = a->next; + a->next = NULL; + *buf = *cbuf = *c2buf = '\0'; + rfc822_write_address (buf, sizeof (buf), a, 0); + a->next = tmp; + + l = mutt_strlen (buf); + if (count && linelen + l > 74) + { + strcpy (cbuf, "\n\t"); /* __STRCPY_CHECKED__ */ + linelen = l + 8; + } + else + { + if (a->mailbox) + { + strcpy (cbuf, " "); /* __STRCPY_CHECKED__ */ + linelen++; + } + linelen += l; + } + if (!a->group && a->next && a->next->mailbox) + { + linelen++; + buflen++; + strcpy (c2buf, ","); /* __STRCPY_CHECKED__ */ + } + + buflen += l + mutt_strlen (cbuf) + mutt_strlen (c2buf); + safe_realloc (h, buflen); + strcat (*h, cbuf); /* __STRCAT_CHECKED__ */ + strcat (*h, buf); /* __STRCAT_CHECKED__ */ + strcat (*h, c2buf); /* __STRCAT_CHECKED__ */ + } + + /* Space for this was allocated in the beginning of this function. */ + strcat (*h, "\n"); /* __STRCAT_CHECKED__ */ +} + +static int address_header_decode (char **h) +{ + char *s = *h; + int l; + + ADDRESS *a = NULL; + + switch (tolower ((unsigned char) *s)) + { + case 'r': + { + if (ascii_strncasecmp (s, "return-path:", 12) == 0) + { + l = 12; + break; + } + else if (ascii_strncasecmp (s, "reply-to:", 9) == 0) + { + l = 9; + break; + } + return 0; + } + case 'f': + { + if (ascii_strncasecmp (s, "from:", 5)) + return 0; + l = 5; + break; + } + case 'c': + { + if (ascii_strncasecmp (s, "cc:", 3)) + return 0; + l = 3; + break; + + } + case 'b': + { + if (ascii_strncasecmp (s, "bcc:", 4)) + return 0; + l = 4; + break; + } + case 's': + { + if (ascii_strncasecmp (s, "sender:", 7)) + return 0; + l = 7; + break; + } + case 't': + { + if (ascii_strncasecmp (s, "to:", 3)) + return 0; + l = 3; + break; + } + case 'm': + { + if (ascii_strncasecmp (s, "mail-followup-to:", 17)) + return 0; + l = 17; + break; + } + default: return 0; + } + + if ((a = rfc822_parse_adrlist (a, s + l + 1)) == NULL) + return 0; + + mutt_addrlist_to_local (a); + rfc2047_decode_adrlist (a); + + *h = safe_calloc (1, l + 2); + + strfcpy (*h, s, l + 1); + + format_address_header (h, a); + + rfc822_free_address (&a); + + FREE (&s); + return 1; +} diff --git a/copy.h b/copy.h new file mode 100644 index 0000000..c03d5f8 --- /dev/null +++ b/copy.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* flags to _mutt_copy_message */ +#define M_CM_NOHEADER 1 /* don't copy the message header */ +#define M_CM_PREFIX (1<<1) /* quote the message */ +#define M_CM_DECODE (1<<2) /* decode the message body into text/plain */ +#define M_CM_DISPLAY (1<<3) /* output is displayed to the user */ +#define M_CM_UPDATE (1<<4) /* update structs on sync */ +#define M_CM_WEED (1<<5) /* weed message/rfc822 attachment headers */ +#define M_CM_CHARCONV (1<<6) /* perform character set conversions */ +#define M_CM_PRINTING (1<<7) /* printing the message - display light */ + + +#define M_CM_DECODE_PGP (1<<8) /* used for decoding PGP messages */ +#define M_CM_DECODE_SMIME (1<<9) /* used for decoding S/MIME messages */ +#define M_CM_DECODE_CRYPT (M_CM_DECODE_PGP | M_CM_DECODE_SMIME) + + +#define M_CM_VERIFY (1<<10) /* do signature verification */ + + + +int mutt_copy_hdr (FILE *, FILE *, long, long, int, const char *); + +int mutt_copy_header (FILE *, HEADER *, FILE *, int, const char *); + +int _mutt_copy_message (FILE *fpout, + FILE *fpin, + HEADER *hdr, + BODY *body, + int flags, + int chflags); + +int mutt_copy_message (FILE *fpout, + CONTEXT *src, + HEADER *hdr, + int flags, + int chflags); + +int _mutt_append_message (CONTEXT *dest, + FILE *fpin, + CONTEXT *src, + HEADER *hdr, + BODY *body, + int flags, + int chflags); + +int mutt_append_message (CONTEXT *dest, + CONTEXT *src, + HEADER *hdr, + int cmflags, + int chflags); diff --git a/crypt.c b/crypt.c new file mode 100644 index 0000000..5cc2cd8 --- /dev/null +++ b/crypt.c @@ -0,0 +1,927 @@ +/* + * Copyright (C) 1996,1997 Michael R. Elkins + * Copyright (C) 1999-2000 Thomas Roessler + * Copyright (C) 2001 Thomas Roessler + * Oliver Ehli + * Copyright (C) 2003 Werner Koch + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + + +#include "mutt.h" +#include "mutt_curses.h" +#include "mime.h" +#include "copy.h" +#include "mutt_crypt.h" +#include "pgp.h" + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LOCALE_H +#include +#endif + +#ifdef HAVE_SYS_TIME_H +# include +#endif + +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif + + +/* print the current time to avoid spoofing of the signature output */ +void crypt_current_time(STATE *s, char *app_name) +{ + time_t t; + char p[STRING], tmp[STRING]; + + if (!WithCrypto) + return; + + if (option (OPTCRYPTTIMESTAMP)) + { + t = time(NULL); + setlocale (LC_TIME, ""); + strftime (p, sizeof (p), _(" (current time: %c)"), localtime (&t)); + setlocale (LC_TIME, "C"); + } + else + *p = '\0'; + + snprintf (tmp, sizeof (tmp), _("[-- %s output follows%s --]\n"), NONULL(app_name), p); + state_attach_puts (tmp, s); +} + + + +void crypt_forget_passphrase (void) +{ + if ((WithCrypto & APPLICATION_PGP)) + crypt_pgp_void_passphrase (); + + if ((WithCrypto & APPLICATION_SMIME)) + crypt_smime_void_passphrase (); + + if (WithCrypto) + mutt_message _("Passphrase(s) forgotten."); +} + + +#if defined(HAVE_SETRLIMIT) && (!defined(DEBUG)) + +static void disable_coredumps (void) +{ + struct rlimit rl = {0, 0}; + static short done = 0; + + if (!done) + { + setrlimit (RLIMIT_CORE, &rl); + done = 1; + } +} + +#endif /* HAVE_SETRLIMIT */ + + +int crypt_valid_passphrase(int flags) +{ + time_t now = time (NULL); + +# if defined(HAVE_SETRLIMIT) &&(!defined(DEBUG)) + disable_coredumps (); +# endif + + if ((WithCrypto & APPLICATION_PGP) && (flags & APPLICATION_PGP)) + { + extern char PgpPass[STRING]; + extern time_t PgpExptime; + + if (pgp_use_gpg_agent()) + { + *PgpPass = 0; + return 1; /* handled by gpg-agent */ + } + + if (now < PgpExptime) return 1; /* just use the cached copy. */ + crypt_pgp_void_passphrase (); + + if (mutt_get_password (_("Enter PGP passphrase:"), + PgpPass, sizeof (PgpPass)) == 0) + { + PgpExptime = time (NULL) + PgpTimeout; + return (1); + } + else + PgpExptime = 0; + } + + if ((WithCrypto & APPLICATION_SMIME) && (flags & APPLICATION_SMIME)) + { + extern char SmimePass[STRING]; + extern time_t SmimeExptime; + + if (now < SmimeExptime) return (1); + crypt_smime_void_passphrase (); + + if (mutt_get_password (_("Enter SMIME passphrase:"), SmimePass, + sizeof (SmimePass)) == 0) + { + SmimeExptime = time (NULL) + SmimeTimeout; + return (1); + } + else + SmimeExptime = 0; + } + + return (0); +} + + + +int mutt_protect (HEADER *msg, HEADER *cur, char *keylist) +{ + BODY *pbody = NULL, *tmp_pbody = NULL; + BODY *tmp_smime_pbody = NULL; + BODY *tmp_pgp_pbody = NULL; + int traditional = 0; + int flags = (WithCrypto & APPLICATION_PGP)? msg->security: 0; + int i; + + if (!WithCrypto) + return -1; + + if ((msg->security & SIGN) && !crypt_valid_passphrase (msg->security)) + return (-1); + + if ((WithCrypto & APPLICATION_PGP) && (msg->security & APPLICATION_PGP)) + { + if ((msg->content->type == TYPETEXT) && + !ascii_strcasecmp (msg->content->subtype, "plain")) + { + if (cur && cur->security && option (OPTPGPAUTOTRAD) + && (option (OPTCRYPTREPLYENCRYPT) + || option (OPTCRYPTREPLYSIGN) + || option (OPTCRYPTREPLYSIGNENCRYPTED))) + { + if(mutt_is_application_pgp(cur->content)) + traditional = 1; + } + else + { + if ((i = query_quadoption (OPT_PGPTRADITIONAL, _("Create a traditional (inline) PGP message?"))) == -1) + return -1; + else if (i == M_YES) + traditional = 1; + } + } + if (traditional) + { + if (!isendwin ()) mutt_endwin _("Invoking PGP..."); + if (!(pbody = crypt_pgp_traditional_encryptsign (msg->content, flags, keylist))) + return -1; + + msg->content = pbody; + return 0; + } + } + + if (!isendwin ()) mutt_endwin (NULL); + + if ((WithCrypto & APPLICATION_SMIME)) + tmp_smime_pbody = msg->content; + if ((WithCrypto & APPLICATION_PGP)) + tmp_pgp_pbody = msg->content; + + if (msg->security & SIGN) + { + if ((WithCrypto & APPLICATION_SMIME) + && (msg->security & APPLICATION_SMIME)) + { + if (!(tmp_pbody = crypt_smime_sign_message (msg->content))) + return -1; + pbody = tmp_smime_pbody = tmp_pbody; + } + + if ((WithCrypto & APPLICATION_PGP) + && (msg->security & APPLICATION_PGP) + && (!(flags & ENCRYPT) || option (OPTPGPRETAINABLESIG))) + { + if (!(tmp_pbody = crypt_pgp_sign_message (msg->content))) + return -1; + + flags &= ~SIGN; + pbody = tmp_pgp_pbody = tmp_pbody; + } + + if (WithCrypto + && (msg->security & APPLICATION_SMIME) + && (msg->security & APPLICATION_PGP)) + { + /* here comes the draft ;-) */ + } + } + + + if (msg->security & ENCRYPT) + { + if ((WithCrypto & APPLICATION_SMIME) + && (msg->security & APPLICATION_SMIME)) + { + if (!(tmp_pbody = crypt_smime_build_smime_entity (tmp_smime_pbody, + keylist))) + { + /* signed ? free it! */ + return (-1); + } + /* free tmp_body if messages was signed AND encrypted ... */ + if (tmp_smime_pbody != msg->content && tmp_smime_pbody != tmp_pbody) + { + /* detatch and dont't delete msg->content, + which tmp_smime_pbody->parts after signing. */ + tmp_smime_pbody->parts = tmp_smime_pbody->parts->next; + msg->content->next = NULL; + mutt_free_body (&tmp_smime_pbody); + } + pbody = tmp_pbody; + } + + if ((WithCrypto & APPLICATION_PGP) + && (msg->security & APPLICATION_PGP)) + { + if (!(pbody = crypt_pgp_encrypt_message (tmp_pgp_pbody, keylist, + flags & SIGN))) + { + + /* did we perform a retainable signature? */ + if (flags != msg->security) + { + /* remove the outer multipart layer */ + tmp_pgp_pbody = mutt_remove_multipart (tmp_pgp_pbody); + /* get rid of the signature */ + mutt_free_body (&tmp_pgp_pbody->next); + } + + return (-1); + } + + /* destroy temporary signature envelope when doing retainable + * signatures. + */ + if (flags != msg->security) + { + tmp_pgp_pbody = mutt_remove_multipart (tmp_pgp_pbody); + mutt_free_body (&tmp_pgp_pbody->next); + } + } + } + + if(pbody) + msg->content = pbody; + + return 0; +} + + + + +int mutt_is_multipart_signed (BODY *b) +{ + char *p; + + if (!b || !(b->type == TYPEMULTIPART) || + !b->subtype || ascii_strcasecmp(b->subtype, "signed")) + return 0; + + if (!(p = mutt_get_parameter("protocol", b->parameter))) + return 0; + + if (!(ascii_strcasecmp (p, "multipart/mixed"))) + return SIGN; + + if ((WithCrypto & APPLICATION_PGP) + && !(ascii_strcasecmp (p, "application/pgp-signature"))) + return PGPSIGN; + + if ((WithCrypto & APPLICATION_SMIME) + && !(ascii_strcasecmp (p, "application/x-pkcs7-signature"))) + return SMIMESIGN; + if ((WithCrypto & APPLICATION_SMIME) + && !(ascii_strcasecmp (p, "application/pkcs7-signature"))) + return SMIMESIGN; + + return 0; +} + + +int mutt_is_multipart_encrypted (BODY *b) +{ + if ((WithCrypto & APPLICATION_PGP)) + { + char *p; + + if (!b || b->type != TYPEMULTIPART || + !b->subtype || ascii_strcasecmp (b->subtype, "encrypted") || + !(p = mutt_get_parameter ("protocol", b->parameter)) || + ascii_strcasecmp (p, "application/pgp-encrypted")) + return 0; + + return PGPENCRYPT; + } + + return 0; +} + + +int mutt_is_application_pgp (BODY *m) +{ + int t = 0; + char *p; + + if (m->type == TYPEAPPLICATION) + { + if (!ascii_strcasecmp (m->subtype, "pgp") || !ascii_strcasecmp (m->subtype, "x-pgp-message")) + { + if ((p = mutt_get_parameter ("x-action", m->parameter)) + && (!ascii_strcasecmp (p, "sign") || !ascii_strcasecmp (p, "signclear"))) + t |= PGPSIGN; + + if ((p = mutt_get_parameter ("format", m->parameter)) && + !ascii_strcasecmp (p, "keys-only")) + t |= PGPKEY; + + if(!t) t |= PGPENCRYPT; /* not necessarily correct, but... */ + } + + if (!ascii_strcasecmp (m->subtype, "pgp-signed")) + t |= PGPSIGN; + + if (!ascii_strcasecmp (m->subtype, "pgp-keys")) + t |= PGPKEY; + } + else if (m->type == TYPETEXT && ascii_strcasecmp ("plain", m->subtype) == 0) + { + if (((p = mutt_get_parameter ("x-mutt-action", m->parameter)) + || (p = mutt_get_parameter ("x-action", m->parameter)) + || (p = mutt_get_parameter ("action", m->parameter))) + && !ascii_strncasecmp ("pgp-sign", p, 8)) + t |= PGPSIGN; + else if (p && !ascii_strncasecmp ("pgp-encrypt", p, 11)) + t |= PGPENCRYPT; + else if (p && !ascii_strncasecmp ("pgp-keys", p, 7)) + t |= PGPKEY; + } + return t; +} + +int mutt_is_application_smime (BODY *m) +{ + char *t=NULL; + int len, complain=0; + + if ((m->type & TYPEAPPLICATION) && m->subtype) + { + /* S/MIME MIME types don't need x- anymore, see RFC2311 */ + if (!ascii_strcasecmp (m->subtype, "x-pkcs7-mime") || + !ascii_strcasecmp (m->subtype, "pkcs7-mime")) + { + if ((t = mutt_get_parameter ("smime-type", m->parameter))) + { + if (!ascii_strcasecmp (t, "enveloped-data")) + return SMIMEENCRYPT; + else if (!ascii_strcasecmp (t, "signed-data")) + return (SMIMESIGN|SMIMEOPAQUE); + else return 0; + } + /* Netscape 4.7 uses + * Content-Description: S/MIME Encrypted Message + * instead of Content-Type parameter + */ + if (!ascii_strcasecmp (m->description, "S/MIME Encrypted Message")) + return SMIMEENCRYPT; + complain = 1; + } + else if (ascii_strcasecmp (m->subtype, "octet-stream")) + return 0; + + t = mutt_get_parameter ("name", m->parameter); + + if (!t) t = m->d_filename; + if (!t) t = m->filename; + if (!t) + { + if (complain) + mutt_message (_("S/MIME messages with no hints on content are unsupported.")); + return 0; + } + + /* no .p7c, .p10 support yet. */ + + len = mutt_strlen (t) - 4; + if (len > 0 && *(t+len) == '.') + { + len++; + if (!ascii_strcasecmp ((t+len), "p7m")) +#if 0 + return SMIMEENCRYPT; +#else + /* Not sure if this is the correct thing to do, but + it's required for compatibility with Outlook */ + return (SMIMESIGN|SMIMEOPAQUE); +#endif + else if (!ascii_strcasecmp ((t+len), "p7s")) + return (SMIMESIGN|SMIMEOPAQUE); + } + } + + return 0; +} + + + + + + +int crypt_query (BODY *m) +{ + int t = 0; + + if (!WithCrypto) + return 0; + + if (!m) + return 0; + + if (m->type == TYPEAPPLICATION) + { + if ((WithCrypto & APPLICATION_PGP)) + t |= mutt_is_application_pgp(m); + + if ((WithCrypto & APPLICATION_SMIME)) + { + t |= mutt_is_application_smime(m); + if (t && m->goodsig) t |= GOODSIGN; + if (t && m->badsig) t |= BADSIGN; + } + } + else if ((WithCrypto & APPLICATION_PGP) && m->type == TYPETEXT) + { + t |= mutt_is_application_pgp (m); + if (t && m->goodsig) + t |= GOODSIGN; + } + + if (m->type == TYPEMULTIPART) + { + t |= mutt_is_multipart_encrypted(m); + t |= mutt_is_multipart_signed (m); + + if (t && m->goodsig) + t |= GOODSIGN; + } + + if (m->type == TYPEMULTIPART || m->type == TYPEMESSAGE) + { + BODY *p; + int u, v, w; + + u = m->parts ? 0xffffffff : 0; /* Bits set in all parts */ + w = 0; /* Bits set in any part */ + + for (p = m->parts; p; p = p->next) + { + v = crypt_query (p); + u &= v; w |= v; + } + t |= u | (w & ~GOODSIGN); + + if ((w & GOODSIGN) && !(u & GOODSIGN)) + t |= PARTSIGN; + } + + return t; +} + + + + +int crypt_write_signed(BODY *a, STATE *s, const char *tempfile) +{ + FILE *fp; + int c; + short hadcr; + size_t bytes; + + if (!WithCrypto) + return -1; + + if (!(fp = safe_fopen (tempfile, "w"))) + { + mutt_perror (tempfile); + return -1; + } + + fseek (s->fpin, a->hdr_offset, 0); + bytes = a->length + a->offset - a->hdr_offset; + hadcr = 0; + while (bytes > 0) + { + if ((c = fgetc (s->fpin)) == EOF) + break; + + bytes--; + + if (c == '\r') + hadcr = 1; + else + { + if (c == '\n' && !hadcr) + fputc ('\r', fp); + + hadcr = 0; + } + + fputc (c, fp); + + } + fclose (fp); + + return 0; +} + + + +void convert_to_7bit (BODY *a) +{ + if (!WithCrypto) + return; + + while (a) + { + if (a->type == TYPEMULTIPART) + { + if (a->encoding != ENC7BIT) + { + a->encoding = ENC7BIT; + convert_to_7bit(a->parts); + } + else if ((WithCrypto & APPLICATION_PGP) && option (OPTPGPSTRICTENC)) + convert_to_7bit (a->parts); + } + else if (a->type == TYPEMESSAGE && + mutt_strcasecmp(a->subtype, "delivery-status")) + { + if(a->encoding != ENC7BIT) + mutt_message_to_7bit (a, NULL); + } + else if (a->encoding == ENC8BIT) + a->encoding = ENCQUOTEDPRINTABLE; + else if (a->encoding == ENCBINARY) + a->encoding = ENCBASE64; + else if (a->content && a->encoding != ENCBASE64 && + (a->content->from || (a->content->space && + option (OPTPGPSTRICTENC)))) + a->encoding = ENCQUOTEDPRINTABLE; + a = a->next; + } +} + + + + +void crypt_extract_keys_from_messages (HEADER * h) +{ + int i; + char tempfname[_POSIX_PATH_MAX], *mbox; + ADDRESS *tmp = NULL; + FILE *fpout; + + if (!WithCrypto) + return; + + mutt_mktemp (tempfname); + if (!(fpout = safe_fopen (tempfname, "w"))) + { + mutt_perror (tempfname); + return; + } + + if ((WithCrypto & APPLICATION_PGP)) + set_option (OPTDONTHANDLEPGPKEYS); + + if (!h) + { + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]]->tagged) + { + mutt_parse_mime_message (Context, Context->hdrs[Context->v2r[i]]); + if (Context->hdrs[Context->v2r[i]]->security & ENCRYPT && + !crypt_valid_passphrase (Context->hdrs[Context->v2r[i]]->security)) + { + fclose (fpout); + break; + } + + if ((WithCrypto & APPLICATION_PGP) + && (Context->hdrs[Context->v2r[i]]->security & APPLICATION_PGP)) + { + mutt_copy_message (fpout, Context, Context->hdrs[Context->v2r[i]], + M_CM_DECODE|M_CM_CHARCONV, 0); + fflush(fpout); + + mutt_endwin (_("Trying to extract PGP keys...\n")); + crypt_pgp_invoke_import (tempfname); + } + + if ((WithCrypto & APPLICATION_SMIME) + && (Context->hdrs[Context->v2r[i]]->security & APPLICATION_SMIME)) + { + if (Context->hdrs[Context->v2r[i]]->security & ENCRYPT) + mutt_copy_message (fpout, Context, Context->hdrs[Context->v2r[i]], + M_CM_NOHEADER|M_CM_DECODE_CRYPT + |M_CM_DECODE_SMIME, 0); + else + mutt_copy_message (fpout, Context, + Context->hdrs[Context->v2r[i]], 0, 0); + fflush(fpout); + + if (Context->hdrs[Context->v2r[i]]->env->from) + tmp = mutt_expand_aliases (h->env->from); + else if (Context->hdrs[Context->v2r[i]]->env->sender) + tmp = mutt_expand_aliases (Context->hdrs[Context->v2r[i]] + ->env->sender); + mbox = tmp ? tmp->mailbox : NULL; + if (mbox) + { + mutt_endwin (_("Trying to extract S/MIME certificates...\n")); + crypt_smime_invoke_import (tempfname, mbox); + tmp = NULL; + } + } + + rewind (fpout); + } + } + } + else + { + mutt_parse_mime_message (Context, h); + if (!(h->security & ENCRYPT && !crypt_valid_passphrase (h->security))) + { + if ((WithCrypto & APPLICATION_PGP) + && (h->security & APPLICATION_PGP)) + { + mutt_copy_message (fpout, Context, h, M_CM_DECODE|M_CM_CHARCONV, 0); + fflush(fpout); + mutt_endwin (_("Trying to extract PGP keys...\n")); + crypt_pgp_invoke_import (tempfname); + } + + if ((WithCrypto & APPLICATION_SMIME) + && (h->security & APPLICATION_SMIME)) + { + if (h->security & ENCRYPT) + mutt_copy_message (fpout, Context, h, M_CM_NOHEADER + |M_CM_DECODE_CRYPT + |M_CM_DECODE_SMIME, 0); + else + mutt_copy_message (fpout, Context, h, 0, 0); + + fflush(fpout); + if (h->env->from) tmp = mutt_expand_aliases (h->env->from); + else if (h->env->sender) tmp = mutt_expand_aliases (h->env->sender); + mbox = tmp ? tmp->mailbox : NULL; + if (mbox) /* else ? */ + { + mutt_message (_("Trying to extract S/MIME certificates...\n")); + crypt_smime_invoke_import (tempfname, mbox); + } + } + } + } + + fclose (fpout); + if (isendwin()) + mutt_any_key_to_continue (NULL); + + mutt_unlink (tempfname); + + if ((WithCrypto & APPLICATION_PGP)) + unset_option (OPTDONTHANDLEPGPKEYS); +} + + + +int crypt_get_keys (HEADER *msg, char **keylist) +{ + /* Do a quick check to make sure that we can find all of the encryption + * keys if the user has requested this service. + */ + + if (!WithCrypto) + return 0; + + if ((WithCrypto & APPLICATION_PGP)) + set_option (OPTPGPCHECKTRUST); + + *keylist = NULL; + + if (msg->security & ENCRYPT) + { + if ((WithCrypto & APPLICATION_PGP) + && (msg->security & APPLICATION_PGP)) + { + if ((*keylist = crypt_pgp_findkeys (msg->env->to, msg->env->cc, + msg->env->bcc)) == NULL) + return (-1); + unset_option (OPTPGPCHECKTRUST); + } + if ((WithCrypto & APPLICATION_SMIME) + && (msg->security & APPLICATION_SMIME)) + { + if ((*keylist = crypt_smime_findkeys (msg->env->to, msg->env->cc, + msg->env->bcc)) == NULL) + return (-1); + } + } + + return (0); +} + + + +static void crypt_fetch_signatures (BODY ***signatures, BODY *a, int *n) +{ + if (!WithCrypto) + return; + + for (; a; a = a->next) + { + if (a->type == TYPEMULTIPART) + crypt_fetch_signatures (signatures, a->parts, n); + else + { + if((*n % 5) == 0) + safe_realloc (signatures, (*n + 6) * sizeof (BODY **)); + + (*signatures)[(*n)++] = a; + } + } +} + + +/* + * This routine verifies a "multipart/signed" body. + */ + +void mutt_signed_handler (BODY *a, STATE *s) +{ + char tempfile[_POSIX_PATH_MAX]; + char *protocol; + int protocol_major = TYPEOTHER; + char *protocol_minor = NULL; + + BODY *b = a; + BODY **signatures = NULL; + int sigcnt = 0; + int i; + short goodsig = 1; + + if (!WithCrypto) + return; + + protocol = mutt_get_parameter ("protocol", a->parameter); + a = a->parts; + + /* extract the protocol information */ + + if (protocol) + { + char major[STRING]; + char *t; + + if ((protocol_minor = strchr (protocol, '/'))) protocol_minor++; + + strfcpy (major, protocol, sizeof(major)); + if((t = strchr(major, '/'))) + *t = '\0'; + + protocol_major = mutt_check_mime_type (major); + } + + /* consistency check */ + + if (!(a && a->next && a->next->type == protocol_major && + !mutt_strcasecmp (a->next->subtype, protocol_minor))) + { + state_attach_puts (_("[-- Error: " + "Inconsistent multipart/signed structure! --]\n\n"), + s); + mutt_body_handler (a, s); + return; + } + + + if ((WithCrypto & APPLICATION_PGP) + && protocol_major == TYPEAPPLICATION + && !mutt_strcasecmp (protocol_minor, "pgp-signature")) + ; + else if ((WithCrypto & APPLICATION_SMIME) + && protocol_major == TYPEAPPLICATION + && !(mutt_strcasecmp (protocol_minor, "x-pkcs7-signature") + && mutt_strcasecmp (protocol_minor, "pkcs7-signature"))) + ; + else if (protocol_major == TYPEMULTIPART + && !mutt_strcasecmp (protocol_minor, "mixed")) + ; + else + { + state_printf (s, _("[-- Error: " + "Unknown multipart/signed protocol %s! --]\n\n"), + protocol); + mutt_body_handler (a, s); + return; + } + + if (s->flags & M_DISPLAY) + { + + crypt_fetch_signatures (&signatures, a->next, &sigcnt); + + if (sigcnt) + { + mutt_mktemp (tempfile); + if (crypt_write_signed (a, s, tempfile) == 0) + { + for (i = 0; i < sigcnt; i++) + { + if ((WithCrypto & APPLICATION_PGP) + && signatures[i]->type == TYPEAPPLICATION + && !mutt_strcasecmp (signatures[i]->subtype, "pgp-signature")) + { + if (crypt_pgp_verify_one (signatures[i], s, tempfile) != 0) + goodsig = 0; + + continue; + } + + if ((WithCrypto & APPLICATION_SMIME) + && signatures[i]->type == TYPEAPPLICATION + && (!mutt_strcasecmp(signatures[i]->subtype, "x-pkcs7-signature") + || !mutt_strcasecmp(signatures[i]->subtype, "pkcs7-signature"))) + { + if (crypt_smime_verify_one (signatures[i], s, tempfile) != 0) + goodsig = 0; + + continue; + } + + state_printf (s, _("[-- Warning: " + "We can't verify %s/%s signatures. --]\n\n"), + TYPE(signatures[i]), signatures[i]->subtype); + } + } + + mutt_unlink (tempfile); + + b->goodsig = goodsig; + b->badsig = !goodsig; + + /* Now display the signed body */ + state_attach_puts (_("[-- The following data is signed --]\n\n"), s); + + + FREE (&signatures); + } + else + state_attach_puts (_("[-- Warning: Can't find any signatures. --]\n\n"), s); + } + + mutt_body_handler (a, s); + + if (s->flags & M_DISPLAY && sigcnt) + state_attach_puts (_("\n[-- End of signed data --]\n"), s); +} + + diff --git a/cryptglue.c b/cryptglue.c new file mode 100644 index 0000000..ce81860 --- /dev/null +++ b/cryptglue.c @@ -0,0 +1,416 @@ +/* + * Copyright (C) 2003 Werner Koch + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + This file dispatches the generic crytpo functions to the implemented + backend or provides dummy stubs. Note, that some generic functions are + handled in crypt.c. +*/ + +#include "mutt.h" +#include "mutt_crypt.h" + +/* Make sure those macros are not defined. */ +#undef BFNC_PGP_VOID_PASSPHRASE +#undef BFNC_PGP_DECRYPT_MIME +#undef BFNC_PGP_APPLICATION_PGP_HANDLER +#undef BFNC_PGP_ENCRYPTED_HANDLER +#undef BFNC_PGP_INVOKE_GETKEYS +#undef BFNC_PGP_ASK_FOR_KEY +#undef BNFC_PGP_CHECK_TRADITIONAL +#undef BFNC_PGP_TRADITIONAL_ENCRYPTSIGN +#undef BFNC_PGP_FREE_KEY +#undef BFNC_PGP_MAKE_KEY_ATTACHMENT +#undef BFNC_PGP_FINDKEYS +#undef BFNC_PGP_SIGN_MESSAGE +#undef BFNC_PGP_ENCRYPT_MESSAGE +#undef BFNC_PGP_INVOKE_IMPORT +#undef BFNC_PGP_VERIFY_ONE +#undef BFNC_PGP_KEYID +#undef BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST + +#undef BFNC_SMIME_VOID_PASSPHRASE +#undef BFNC_SMIME_DECRYPT_MIME +#undef BFNC_SMIME_APPLICATION_SMIME_HANDLER +#undef BFNC_SMIME_GETKEYS +#undef BFNC_SMIME_VERIFY_SENDER +#undef BFNC_SMIME_ASK_FOR_KEY +#undef BFNC_SMIME_FINDKEYS +#undef BFNC_SMIME_SIGN_MESSAGE +#undef BFNC_SMIME_BUILD_SMIME_ENTITY +#undef BFNC_SMIME_INVOKE_IMPORT +#undef BFNC_SMIME_VERIFY_ONE + + +/* The PGP backend */ +#if defined (CRYPT_BACKEND_CLASSIC_PGP) +# include "pgp.h" +# define BFNC_PGP_VOID_PASSPHRASE pgp_void_passphrase +# define BFNC_PGP_DECRYPT_MIME pgp_decrypt_mime +# define BFNC_PGP_APPLICATION_PGP_HANDLER pgp_application_pgp_handler +# define BFNC_PGP_ENCRYPTED_HANDLER pgp_encrypted_handler +# define BFNC_PGP_INVOKE_GETKEYS pgp_invoke_getkeys +# define BFNC_PGP_ASK_FOR_KEY pgp_ask_for_key +# define BNFC_PGP_CHECK_TRADITIONAL pgp_check_traditional +# define BFNC_PGP_TRADITIONAL_ENCRYPTSIGN pgp_traditional_encryptsign +# define BFNC_PGP_FREE_KEY pgp_free_key +# define BFNC_PGP_MAKE_KEY_ATTACHMENT pgp_make_key_attachment +# define BFNC_PGP_FINDKEYS pgp_findKeys +# define BFNC_PGP_SIGN_MESSAGE pgp_sign_message +# define BFNC_PGP_ENCRYPT_MESSAGE pgp_encrypt_message +# define BFNC_PGP_INVOKE_IMPORT pgp_invoke_import +# define BFNC_PGP_VERIFY_ONE pgp_verify_one +# define BFNC_PGP_KEYID pgp_keyid +# define BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST \ + pgp_extract_keys_from_attachment_list + + +#elif defined (CRYPT_BACKEND_GPGME) +# include "crypt-gpgme.h" +# define BFNC_PGP_VOID_PASSPHRASE NULL /* not required */ +# define BFNC_PGP_DECRYPT_MIME gpg_pgp_decrypt_mime + +#endif /* PGP backend */ + + +/* The SMIME backend */ +#ifdef CRYPT_BACKEND_CLASSIC_SMIME +# include "smime.h" +# define BFNC_SMIME_VOID_PASSPHRASE smime_void_passphrase +# define BFNC_SMIME_DECRYPT_MIME smime_decrypt_mime +# define BFNC_SMIME_APPLICATION_SMIME_HANDLER smime_application_smime_handler +# define BFNC_SMIME_GETKEYS smime_getkeys +# define BFNC_SMIME_VERIFY_SENDER smime_verify_sender +# define BFNC_SMIME_ASK_FOR_KEY smime_ask_for_key +# define BFNC_SMIME_FINDKEYS smime_findKeys +# define BFNC_SMIME_SIGN_MESSAGE smime_sign_message +# define BFNC_SMIME_BUILD_SMIME_ENTITY smime_build_smime_entity +# define BFNC_SMIME_INVOKE_IMPORT smime_invoke_import +# define BFNC_SMIME_VERIFY_ONE smime_verify_one + +#elif defined (CRYPT_BACKEND_GPGME) + /* Already included above (gpgme supports both). */ +# define BFNC_SMIME_VOID_PASSPHRASE NULL /* not required */ + +#endif /* SMIME backend */ + + +/* + + Generic + +*/ + +/* Show a message that a backend will be invoked. */ +void crypt_invoke_message (int type) +{ +#if defined (CRYPT_BACKEND_CLASSIC_PGP) || defined(CRYPT_BACKEND_CLASSIC_SMIME) + if ((type & APPLICATION_PGP)) + mutt_message _("Invoking PGP..."); + if ((type & APPLICATION_SMIME)) + mutt_message _("Invoking OpenSSL..."); +#elif defined (CRYPT_BACKEND_GPGME) + if ((type & APPLICATION_PGP) || (type & APPLICATION_SMIME) ) + mutt_message _("Invoking GnuPG..."); +#endif +} + + + +/* + + PGP + +*/ + + +/* Reset a PGP passphrase */ +void crypt_pgp_void_passphrase (void) +{ +#ifdef BFNC_PGP_VOID_PASSPHRASE + BFNC_PGP_VOID_PASSPHRASE (); +#endif +} + +/* Decrypt a PGP/MIME message. */ +int crypt_pgp_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d) +{ +#ifdef BFNC_PGP_DECRYPT_MIME + return BFNC_PGP_DECRYPT_MIME (a, b, c, d); +#else + return -1; /* error */ +#endif +} + +/* MIME handler for the application/pgp content-type. */ +void crypt_pgp_application_pgp_handler (BODY *m, STATE *s) +{ +#ifdef BFNC_PGP_APPLICATION_PGP_HANDLER + BFNC_PGP_APPLICATION_PGP_HANDLER (m, s); +#endif +} + +/* MIME handler for an PGP/MIME encrypted message. */ +void crypt_pgp_encrypted_handler (BODY *a, STATE *s) +{ +#ifdef BFNC_PGP_ENCRYPTED_HANDLER + BFNC_PGP_ENCRYPTED_HANDLER (a, s); +#endif +} + +/* fixme: needs documentation. */ +void crypt_pgp_invoke_getkeys (ADDRESS *addr) +{ +#ifdef BFNC_PGP_INVOKE_GETKEYS + BFNC_PGP_INVOKE_GETKEYS (addr); +#endif +} + +/* Ask for a PGP key. */ +pgp_key_t crypt_pgp_ask_for_key (char *tag, char *whatfor, + short abilities, pgp_ring_t keyring) +{ +#ifdef BFNC_PGP_ASK_FOR_KEY + return BFNC_PGP_ASK_FOR_KEY (tag, whatfor, abilities, keyring); +#else + return NULL; +#endif +} + + +/* Check for a traditional PGP message in body B. */ +int crypt_pgp_check_traditional (FILE *fp, BODY *b, int tagged_only) +{ +#ifdef BNFC_PGP_CHECK_TRADITIONAL + return BNFC_PGP_CHECK_TRADITIONAL (fp, b, tagged_only); +#else + return 0; /* no */ +#endif +} + +/* fixme: needs documentation. */ +BODY *crypt_pgp_traditional_encryptsign (BODY *a, int flags, char *keylist) +{ +#ifdef BFNC_PGP_TRADITIONAL_ENCRYPTSIGN + return BFNC_PGP_TRADITIONAL_ENCRYPTSIGN (a, flags, keylist); +#else + return NULL; +#endif +} + +/* Release pgp key KPP. */ +void crypt_pgp_free_key (pgp_key_t *kpp) +{ +#ifdef BFNC_PGP_FREE_KEY + BFNC_PGP_FREE_KEY (kpp); +#endif +} + + +/* Generate a PGP public key attachment. */ +BODY *crypt_pgp_make_key_attachment (char *tempf) +{ +#ifdef BFNC_PGP_MAKE_KEY_ATTACHMENT + return BFNC_PGP_MAKE_KEY_ATTACHMENT (tempf); +#else + return NULL; /* error */ +#endif +} + +/* This routine attempts to find the keyids of the recipients of a + message. It returns NULL if any of the keys can not be found. */ +char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc) +{ +#ifdef BFNC_PGP_FINDKEYS + return BFNC_PGP_FINDKEYS (to, cc, bcc); +#else + return NULL; +#endif +} + +/* Create a new body with a PGP signed message from A. */ +BODY *crypt_pgp_sign_message (BODY *a) +{ +#ifdef BFNC_PGP_SIGN_MESSAGE + return BFNC_PGP_SIGN_MESSAGE (a); +#else + return NULL; +#endif +} + +/* Warning: A is no longer freed in this routine, you need to free it + later. This is necessary for $fcc_attach. */ +BODY *crypt_pgp_encrypt_message (BODY *a, char *keylist, int sign) +{ +#ifdef BFNC_PGP_ENCRYPT_MESSAGE + return BFNC_PGP_ENCRYPT_MESSAGE (a, keylist, sign); +#else + return NULL; +#endif +} + +/* Invoke the PGP command to import a key. */ +void crypt_pgp_invoke_import (const char *fname) +{ +#ifdef BFNC_PGP_INVOKE_IMPORT + BFNC_PGP_INVOKE_IMPORT (fname); +#endif +} + +/* fixme: needs documentation */ +int crypt_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf) +{ +#ifdef BFNC_PGP_VERIFY_ONE + return BFNC_PGP_VERIFY_ONE (sigbdy, s, tempf); +#else + return -1; +#endif +} + + +/* Access the keyID in K. */ +char *crypt_pgp_keyid (pgp_key_t k) +{ +#ifdef BFNC_PGP_KEYID + return pgp_keyid (k); +#else + return "?"; +#endif +} + +/* fixme: needs documentation */ +void crypt_pgp_extract_keys_from_attachment_list (FILE *fp, int tag, BODY *top) +{ +#ifdef BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST + BFNC_PGP_EXTRACT_KEYS_FROM_ATTACHMENT_LIST (fp, tag, top); +#endif +} + + + +/* + + S/MIME + +*/ + + +/* Reset an SMIME passphrase */ +void crypt_smime_void_passphrase (void) +{ +#ifdef BFNC_SMIME_VOID_PASSPHRASE + BFNC_SMIME_VOID_PASSPHRASE (); +#endif +} + + +/* Decrypt am S/MIME message. */ +int crypt_smime_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d) +{ +#ifdef BFNC_SMIME_DECRYPT_MIME + return BFNC_SMIME_DECRYPT_MIME (a, b, c, d); +#else + return -1; /* error */ +#endif +} + +/* MIME handler for the application/smime content-type. */ +void crypt_smime_application_smime_handler (BODY *m, STATE *s) +{ +#ifdef BFNC_SMIME_APPLICATION_SMIME_HANDLER + BFNC_SMIME_APPLICATION_SMIME_HANDLER (m, s); +#endif +} + +/* fixme: Needs documentation. */ +void crypt_smime_getkeys (ENVELOPE *env) +{ +#ifdef BFNC_SMIME_GETKEYS + BFNC_SMIME_GETKEYS (env); +#endif +} + +/* Check that the sender matches. */ +int crypt_smime_verify_sender(HEADER *h) +{ +#ifdef BFNC_SMIME_VERIFY_SENDER + return BFNC_SMIME_VERIFY_SENDER (h); +#else + return 1; /* yes */ +#endif +} + +/* Ask for an SMIME key. */ +char *crypt_smime_ask_for_key (char *prompt, char *mailbox, short public) +{ +#ifdef BFNC_SMIME_ASK_FOR_KEY + return BFNC_SMIME_ASK_FOR_KEY (prompt, mailbox, public); +#else + return NULL; /* error */ +#endif +} + + +/* This routine attempts to find the keyids of the recipients of a + message. It returns NULL if any of the keys can not be found. */ +char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc) +{ +#ifdef BFNC_SMIME_FINDKEYS + return BFNC_SMIME_FINDKEYS (to, cc, bcc); +#else + return NULL; +#endif +} + +/* fixme: Needs documentation. */ +BODY *crypt_smime_sign_message (BODY *a) +{ +#ifdef BFNC_SMIME_SIGN_MESSAGE + return BFNC_SMIME_SIGN_MESSAGE (a); +#else + return NULL; +#endif +} + +/* fixme: needs documentation. */ +BODY *crypt_smime_build_smime_entity (BODY *a, char *certlist) +{ +#ifdef BFNC_SMIME_BUILD_SMIME_ENTITY + return BFNC_SMIME_BUILD_SMIME_ENTITY (a, certlist); +#else + return NULL; +#endif +} + +/* Add a certificate and update index file (externally). */ +void crypt_smime_invoke_import (char *infile, char *mailbox) +{ +#ifdef BFNC_SMIME_INVOKE_IMPORT + BFNC_SMIME_INVOKE_IMPORT (infile, mailbox); +#endif +} + +/* fixme: needs documentation */ +int crypt_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf) +{ +#ifdef BFNC_SMIME_VERIFY_ONE + return BFNC_SMIME_VERIFY_ONE (sigbdy, s, tempf); +#else + return -1; +#endif +} diff --git a/curs_lib.c b/curs_lib.c new file mode 100644 index 0000000..0f38f05 --- /dev/null +++ b/curs_lib.c @@ -0,0 +1,712 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mutt_curses.h" +#include "pager.h" +#include "mbyte.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LANGINFO_YESEXPR +#include +#endif + +/* not possible to unget more than one char under some curses libs, and it + * is impossible to unget function keys in SLang, so roll our own input + * buffering routines. + */ +size_t UngetCount = 0; +static size_t UngetBufLen = 0; +static event_t *KeyEvent; + +void mutt_refresh (void) +{ + /* don't refresh when we are waiting for a child. */ + if (option (OPTKEEPQUIET)) + return; + + /* don't refresh in the middle of macros unless necessary */ + if (UngetCount && !option (OPTFORCEREFRESH)) + return; + + /* else */ + refresh (); +} + +event_t mutt_getch (void) +{ + int ch; + event_t err = {-1, OP_NULL }, ret; + + if (!option(OPTUNBUFFEREDINPUT) && UngetCount) + return (KeyEvent[--UngetCount]); + + SigInt = 0; + + mutt_allow_interrupt (1); +#ifdef KEY_RESIZE + /* ncurses 4.2 sends this when the screen is resized */ + ch = KEY_RESIZE; + while (ch == KEY_RESIZE) +#endif /* KEY_RESIZE */ + ch = getch (); + mutt_allow_interrupt (0); + + if (SigInt) + mutt_query_exit (); + + if(ch == ERR) + return err; + + if ((ch & 0x80) && option (OPTMETAKEY)) + { + /* send ALT-x as ESC-x */ + ch &= ~0x80; + mutt_ungetch (ch, 0); + ret.ch = '\033'; + ret.op = 0; + return ret; + } + + ret.ch = ch; + ret.op = 0; + return (ch == ctrl ('G') ? err : ret); +} + +int _mutt_get_field (/* const */ char *field, char *buf, size_t buflen, int complete, int multiple, char ***files, int *numfiles) +{ + int ret; + int x, y; + + ENTER_STATE *es = mutt_new_enter_state(); + + do + { + CLEARLINE (LINES-1); + addstr (field); + mutt_refresh (); + getyx (stdscr, y, x); + ret = _mutt_enter_string (buf, buflen, y, x, complete, multiple, files, numfiles, es); + } + while (ret == 1); + CLEARLINE (LINES-1); + mutt_free_enter_state (&es); + + return (ret); +} + +int mutt_get_password (char *msg, char *buf, size_t buflen) +{ + int rc; + + CLEARLINE (LINES-1); + addstr (msg); + set_option (OPTUNBUFFEREDINPUT); + rc = mutt_enter_string (buf, buflen, LINES - 1, mutt_strlen (msg), M_PASS); + unset_option (OPTUNBUFFEREDINPUT); + CLEARLINE (LINES-1); + return (rc); +} + +void mutt_clear_error (void) +{ + Errorbuf[0] = 0; + if (!option(OPTNOCURSES)) + CLEARLINE (LINES-1); +} + +void mutt_edit_file (const char *editor, const char *data) +{ + char cmd[LONG_STRING]; + + mutt_endwin (NULL); + mutt_expand_file_fmt (cmd, sizeof (cmd), editor, data); + if (mutt_system (cmd) == -1) + mutt_error (_("Error running \"%s\"!"), cmd); + keypad (stdscr, TRUE); + clearok (stdscr, TRUE); +} + +int mutt_yesorno (const char *msg, int def) +{ + event_t ch; + char *yes = _("yes"); + char *no = _("no"); + char *answer_string; + size_t answer_string_len; + +#ifdef HAVE_LANGINFO_YESEXPR + char *expr; + regex_t reyes; + regex_t reno; + int reyes_ok; + int reno_ok; + char answer[2]; + + answer[1] = 0; + + reyes_ok = (expr = nl_langinfo (YESEXPR)) && expr[0] == '^' && + !regcomp (&reyes, expr, REG_NOSUB|REG_EXTENDED); + reno_ok = (expr = nl_langinfo (NOEXPR)) && expr[0] == '^' && + !regcomp (&reno, expr, REG_NOSUB|REG_EXTENDED); +#endif + + CLEARLINE(LINES-1); + + /* + * In order to prevent the default answer to the question to wrapped + * around the screen in the even the question is wider than the screen, + * ensure there is enough room for the answer and truncate the question + * to fit. + */ + answer_string = safe_malloc (COLS + 1); + snprintf (answer_string, COLS + 1, " ([%s]/%s): ", def == M_YES ? yes : no, def == M_YES ? no : yes); + answer_string_len = strlen (answer_string); + printw ("%.*s%s", COLS - answer_string_len, msg, answer_string); + FREE (&answer_string); + + FOREVER + { + mutt_refresh (); + ch = mutt_getch (); + if (CI_is_return (ch.ch)) + break; + if (ch.ch == -1) + { + def = -1; + break; + } + +#ifdef HAVE_LANGINFO_YESEXPR + answer[0] = ch.ch; + if (reyes_ok ? + (regexec (& reyes, answer, 0, 0, 0) == 0) : +#else + if ( +#endif + (tolower (ch.ch) == 'y')) + { + def = M_YES; + break; + } + else if ( +#ifdef HAVE_LANGINFO_YESEXPR + reno_ok ? + (regexec (& reno, answer, 0, 0, 0) == 0) : +#endif + (tolower (ch.ch) == 'n')) + { + def = M_NO; + break; + } + else + { + BEEP(); + } + } + +#ifdef HAVE_LANGINFO_YESEXPR + if (reyes_ok) + regfree (& reyes); + if (reno_ok) + regfree (& reno); +#endif + + if (def != -1) + { + addstr ((char *) (def == M_YES ? yes : no)); + mutt_refresh (); + } + return (def); +} + +/* this function is called when the user presses the abort key */ +void mutt_query_exit (void) +{ + mutt_flushinp (); + curs_set (1); + if (Timeout) + timeout (-1); /* restore blocking operation */ + if (mutt_yesorno (_("Exit Mutt?"), M_YES) == M_YES) + { + endwin (); + exit (1); + } + mutt_clear_error(); + mutt_curs_set (-1); + SigInt = 0; +} + +void mutt_curses_error (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + vsnprintf (Errorbuf, sizeof (Errorbuf), fmt, ap); + va_end (ap); + + dprint (1, (debugfile, "%s\n", Errorbuf)); + mutt_format_string (Errorbuf, sizeof (Errorbuf), + 0, COLS-2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); + + if (!option (OPTKEEPQUIET)) + { + BEEP (); + SETCOLOR (MT_COLOR_ERROR); + mvaddstr (LINES-1, 0, Errorbuf); + clrtoeol (); + SETCOLOR (MT_COLOR_NORMAL); + mutt_refresh (); + } + + set_option (OPTMSGERR); +} + +void mutt_curses_message (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + vsnprintf (Errorbuf, sizeof (Errorbuf), fmt, ap); + va_end (ap); + + mutt_format_string (Errorbuf, sizeof (Errorbuf), + 0, COLS-2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); + + if (!option (OPTKEEPQUIET)) + { + SETCOLOR (MT_COLOR_MESSAGE); + mvaddstr (LINES - 1, 0, Errorbuf); + clrtoeol (); + SETCOLOR (MT_COLOR_NORMAL); + mutt_refresh (); + } + + unset_option (OPTMSGERR); +} + +void mutt_show_error (void) +{ + if (option (OPTKEEPQUIET)) + return; + + SETCOLOR (option (OPTMSGERR) ? MT_COLOR_ERROR : MT_COLOR_MESSAGE); + CLEARLINE (LINES-1); + addstr (Errorbuf); + SETCOLOR (MT_COLOR_NORMAL); +} + +void mutt_endwin (const char *msg) +{ + if (!option (OPTNOCURSES)) + { + CLEARLINE (LINES - 1); + + attrset (A_NORMAL); + mutt_refresh (); + endwin (); + } + + if (msg && *msg) + { + puts (msg); + fflush (stdout); + } +} + +void mutt_perror (const char *s) +{ + char *p = strerror (errno); + + dprint (1, (debugfile, "%s: %s (errno = %d)\n", s, + p ? p : "unknown error", errno)); + mutt_error ("%s: %s (errno = %d)", s, p ? p : _("unknown error"), errno); +} + +int mutt_any_key_to_continue (const char *s) +{ + struct termios t; + struct termios old; + int f, ch; + + f = open ("/dev/tty", O_RDONLY); + tcgetattr (f, &t); + memcpy ((void *)&old, (void *)&t, sizeof(struct termios)); /* save original state */ + t.c_lflag &= ~(ICANON | ECHO); + t.c_cc[VMIN] = 1; + t.c_cc[VTIME] = 0; + tcsetattr (f, TCSADRAIN, &t); + fflush (stdout); + if (s) + fputs (s, stdout); + else + fputs (_("Press any key to continue..."), stdout); + fflush (stdout); + ch = fgetc (stdin); + fflush (stdin); + tcsetattr (f, TCSADRAIN, &old); + close (f); + fputs ("\r\n", stdout); + mutt_clear_error (); + return (ch); +} + +int mutt_do_pager (const char *banner, + const char *tempfile, + int do_color, + pager_t *info) +{ + int rc; + + if (!Pager || mutt_strcmp (Pager, "builtin") == 0) + rc = mutt_pager (banner, tempfile, do_color, info); + else + { + char cmd[STRING]; + + mutt_endwin (NULL); + mutt_expand_file_fmt (cmd, sizeof(cmd), Pager, tempfile); + if (mutt_system (cmd) == -1) + { + mutt_error (_("Error running \"%s\"!"), cmd); + rc = -1; + } + else + rc = 0; + mutt_unlink (tempfile); + } + + return rc; +} + +int _mutt_enter_fname (const char *prompt, char *buf, size_t blen, int *redraw, int buffy, int multiple, char ***files, int *numfiles) +{ + event_t ch; + + mvaddstr (LINES-1, 0, (char *) prompt); + addstr (_(" ('?' for list): ")); + if (buf[0]) + addstr (buf); + clrtoeol (); + mutt_refresh (); + + ch = mutt_getch(); + if (ch.ch == -1) + { + CLEARLINE (LINES-1); + return (-1); + } + else if (ch.ch == '?') + { + mutt_refresh (); + buf[0] = 0; + _mutt_select_file (buf, blen, M_SEL_FOLDER | (multiple ? M_SEL_MULTI : 0), + files, numfiles); + *redraw = REDRAW_FULL; + } + else + { + char *pc = safe_malloc (mutt_strlen (prompt) + 3); + + sprintf (pc, "%s: ", prompt); /* __SPRINTF_CHECKED__ */ + mutt_ungetch (ch.op ? 0 : ch.ch, ch.op ? ch.op : 0); + if (_mutt_get_field (pc, buf, blen, (buffy ? M_EFILE : M_FILE) | M_CLEAR, multiple, files, numfiles) + != 0) + buf[0] = 0; + MAYBE_REDRAW (*redraw); + FREE (&pc); + } + + return 0; +} + +void mutt_ungetch (int ch, int op) +{ + event_t tmp; + + tmp.ch = ch; + tmp.op = op; + + if (UngetCount >= UngetBufLen) + safe_realloc (&KeyEvent, (UngetBufLen += 128) * sizeof(event_t)); + + KeyEvent[UngetCount++] = tmp; +} + +void mutt_flushinp (void) +{ + UngetCount = 0; + flushinp (); +} + +#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET)) +/* The argument can take 3 values: + * -1: restore the value of the last call + * 0: make the cursor invisible + * 1: make the cursor visible + */ +void mutt_curs_set (int cursor) +{ + static int SavedCursor = 1; + + if (cursor < 0) + cursor = SavedCursor; + else + SavedCursor = cursor; + + if (curs_set (cursor) == ERR) { + if (cursor == 1) /* cnorm */ + curs_set (2); /* cvvis */ + } +} +#endif + +int mutt_multi_choice (char *prompt, char *letters) +{ + event_t ch; + int choice; + char *p; + + mvaddstr (LINES - 1, 0, prompt); + clrtoeol (); + FOREVER + { + mutt_refresh (); + ch = mutt_getch (); + if (ch.ch == -1 || CI_is_return (ch.ch)) + { + choice = -1; + break; + } + else + { + p = strchr (letters, ch.ch); + if (p) + { + choice = p - letters + 1; + break; + } + else if (ch.ch <= '9' && ch.ch > '0') + { + choice = ch.ch - '0'; + if (choice <= mutt_strlen (letters)) + break; + } + } + BEEP (); + } + CLEARLINE (LINES - 1); + mutt_refresh (); + return choice; +} + +/* + * addwch would be provided by an up-to-date curses library + */ + +int mutt_addwch (wchar_t wc) +{ + char buf[MB_LEN_MAX*2]; + mbstate_t mbstate; + size_t n1, n2; + + memset (&mbstate, 0, sizeof (mbstate)); + if ((n1 = wcrtomb (buf, wc, &mbstate)) == (size_t)(-1) || + (n2 = wcrtomb (buf + n1, 0, &mbstate)) == (size_t)(-1)) + return -1; /* ERR */ + else + return addstr (buf); +} + + +/* + * This formats a string, a bit like + * snprintf (dest, destlen, "%-*.*s", min_width, max_width, s), + * except that the widths refer to the number of character cells + * when printed. + */ + +void mutt_format_string (char *dest, size_t destlen, + int min_width, int max_width, + int right_justify, char m_pad_char, + const char *s, size_t n, + int arboreal) +{ + char *p; + int w; + size_t k, k2; + char scratch[MB_LEN_MAX]; + + --destlen; + p = dest; + for (; n; s+=1, n-=1) + { + w = 1; + k2 = 1; + if (w > max_width) + break; + min_width -= w; + max_width -= w; + strncpy (p, s, k2); + p += k2; + destlen -= k2; + } + w = (int)destlen < min_width ? destlen : min_width; + if (w <= 0) + *p = '\0'; + else if (right_justify) + { + p[w] = '\0'; + while (--p >= dest) + p[w] = *p; + while (--w >= 0) + dest[w] = m_pad_char; + } + else + { + while (--w >= 0) + *p++ = m_pad_char; + *p = '\0'; + } +} + +/* + * This formats a string rather like + * snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + * snprintf (dest, destlen, fmt, s); + * except that the numbers in the conversion specification refer to + * the number of character cells when printed. + */ + +static void mutt_format_s_x (char *dest, + size_t destlen, + const char *prefix, + const char *s, + int arboreal) +{ + int right_justify = 1; + char *p; + int min_width; + int max_width = INT_MAX; + + if (*prefix == '-') + ++prefix, right_justify = 0; + min_width = strtol (prefix, &p, 10); + if (*p == '.') + { + prefix = p + 1; + max_width = strtol (prefix, &p, 10); + if (p <= prefix) + max_width = INT_MAX; + } + + mutt_format_string (dest, destlen, min_width, max_width, + right_justify, ' ', s, mutt_strlen (s), arboreal); +} + +void mutt_format_s (char *dest, + size_t destlen, + const char *prefix, + const char *s) +{ + mutt_format_s_x (dest, destlen, prefix, s, 0); +} + +void mutt_format_s_tree (char *dest, + size_t destlen, + const char *prefix, + const char *s) +{ + mutt_format_s_x (dest, destlen, prefix, s, 1); +} + +/* + * mutt_paddstr (n, s) is almost equivalent to + * mutt_format_string (bigbuf, big, n, n, 0, ' ', s, big, 0), addstr (bigbuf) + */ + +void mutt_paddstr (int n, const char *s) +{ + wchar_t wc; + int w; + size_t k; + size_t len = mutt_strlen (s); + mbstate_t mbstate; + + memset (&mbstate, 0, sizeof (mbstate)); + for (; len && (k = mbrtowc (&wc, s, len, &mbstate)); s += k, len -= k) + { + if (k == (size_t)(-1) || k == (size_t)(-2)) + { + k = (k == (size_t)(-1)) ? 1 : len; + wc = replacement_char (); + } + if (!IsWPrint (wc)) + wc = '?'; + w = wcwidth (wc); + if (w >= 0) + { + if (w > n) + break; + addnstr ((char *)s, k); + n -= w; + } + } + while (n-- > 0) + addch (' '); +} + +/* + * mutt_strwidth is like mutt_strlen except that it returns the width + * refering to the number of characters cells. + */ + +int mutt_strwidth (const char *s) +{ + wchar_t wc; + int w; + size_t k, n; + mbstate_t mbstate; + + if (!s) return 0; + + n = mutt_strlen (s); + + memset (&mbstate, 0, sizeof (mbstate)); + for (w=0; n && (k = mbrtowc (&wc, s, n, &mbstate)); s += k, n -= k) + { + if (k == (size_t)(-1) || k == (size_t)(-2)) + { + k = (k == (size_t)(-1)) ? 1 : n; + wc = replacement_char (); + } + if (!IsWPrint (wc)) + wc = '?'; + w += wcwidth (wc); + } + return w; +} diff --git a/curs_main.c b/curs_main.c new file mode 100644 index 0000000..fb85a50 --- /dev/null +++ b/curs_main.c @@ -0,0 +1,2385 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mx.h" +#include "mutt_menu.h" +#include "mailbox.h" +#include "mapping.h" +#include "sort.h" +#include "buffy.h" +#include "mx.h" + +#ifdef USE_POP +#include "pop.h" +#endif + +#ifdef USE_IMAP +#include "imap_private.h" +#endif + +#include "mutt_crypt.h" + +#ifdef USE_NNTP +#include "nntp.h" +#endif + + +#include +#include +#include +#include +#include +#include +#include + +static const char *No_mailbox_is_open = N_("No mailbox is open."); +static const char *There_are_no_messages = N_("There are no messages."); +static const char *Mailbox_is_read_only = N_("Mailbox is read-only."); +static const char *Function_not_permitted_in_attach_message_mode = N_("Function not permitted in attach-message mode."); +static const char *No_visible = N_("No visible messages."); + +#define CHECK_MSGCOUNT if (!Context) \ + { \ + mutt_flushinp (); \ + mutt_error _(No_mailbox_is_open); \ + break; \ + } \ + else if (!Context->msgcount) \ + { \ + mutt_flushinp (); \ + mutt_error _(There_are_no_messages); \ + break; \ + } + +#define CHECK_VISIBLE if (Context && menu->current >= Context->vcount) \ + {\ + mutt_flushinp (); \ + mutt_error _(No_visible); \ + break; \ + } + + +#define CHECK_READONLY if (Context->readonly) \ + { \ + mutt_flushinp (); \ + mutt_error _(Mailbox_is_read_only); \ + break; \ + } + +#ifdef USE_IMAP +/* the error message returned here could be better. */ +#define CHECK_IMAP_ACL(aclbit) if (Context->magic == M_IMAP) \ + if (mutt_bit_isset (((IMAP_DATA *)Context->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)Context->data)->rights,aclbit)){ \ + mutt_flushinp(); \ + mutt_error ("Operation not permitted by the IMAP ACL for this mailbox"); \ + break; \ + } +#endif + +#define CHECK_ATTACH if(option(OPTATTACHMSG)) \ + {\ + mutt_flushinp (); \ + mutt_error _(Function_not_permitted_in_attach_message_mode); \ + break; \ + } + +#define CURHDR Context->hdrs[Context->v2r[menu->current]] +#define OLDHDR Context->hdrs[Context->v2r[menu->oldcurrent]] +#define UNREAD(h) mutt_thread_contains_unread (Context, h) + +extern const char *ReleaseDate; +extern size_t UngetCount; + +void index_make_entry (char *s, size_t l, MUTTMENU *menu, int num) +{ + format_flag flag = M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR | M_FORMAT_INDEX; + int edgemsgno, reverse = Sort & SORT_REVERSE; + HEADER *h = Context->hdrs[Context->v2r[num]]; + THREAD *tmp; + + if ((Sort & SORT_MASK) == SORT_THREADS && h->tree) + { + flag |= M_FORMAT_TREE; /* display the thread tree */ + if (h->display_subject) + flag |= M_FORMAT_FORCESUBJ; + else + { + if (reverse) + { + if (menu->top + menu->pagelen > menu->max) + edgemsgno = Context->v2r[menu->max - 1]; + else + edgemsgno = Context->v2r[menu->top + menu->pagelen - 1]; + } + else + edgemsgno = Context->v2r[menu->top]; + + for (tmp = h->thread->parent; tmp; tmp = tmp->parent) + { + if (!tmp->message) + continue; + + /* if no ancestor is visible on current screen, provisionally force + * subject... */ + if (reverse ? tmp->message->msgno > edgemsgno : tmp->message->msgno < edgemsgno) + { + flag |= M_FORMAT_FORCESUBJ; + break; + } + else if (tmp->message->virtual >= 0) + break; + } + if (flag & M_FORMAT_FORCESUBJ) + { + for (tmp = h->thread->prev; tmp; tmp = tmp->prev) + { + if (!tmp->message) + continue; + + /* ...but if a previous sibling is available, don't force it */ + if (reverse ? tmp->message->msgno > edgemsgno : tmp->message->msgno < edgemsgno) + break; + else if (tmp->message->virtual >= 0) + { + flag &= ~M_FORMAT_FORCESUBJ; + break; + } + } + } + } + } + + _mutt_make_string (s, l, NONULL (HdrFmt), Context, h, flag); +} + +int index_color (int index_no) +{ + HEADER *h = Context->hdrs[Context->v2r[index_no]]; + + if (h->pair) + return h->pair; + + mutt_set_header_color (Context, h); + return h->pair; +} + +static int ci_next_undeleted (int msgno) +{ + int i; + + for (i=msgno+1; i < Context->vcount; i++) + if (! Context->hdrs[Context->v2r[i]]->deleted) + return (i); + return (-1); +} + +static int ci_previous_undeleted (int msgno) +{ + int i; + + for (i=msgno-1; i>=0; i--) + if (! Context->hdrs[Context->v2r[i]]->deleted) + return (i); + return (-1); +} + +/* Return the index of the first new message, or failing that, the first + * unread message. + */ +static int ci_first_message (void) +{ + int old = -1, i; + + if (Context && Context->msgcount) + { + for (i=0; i < Context->vcount; i++) + { + if (! Context->hdrs[Context->v2r[i]]->read && + ! Context->hdrs[Context->v2r[i]]->deleted) + { + if (! Context->hdrs[Context->v2r[i]]->old) + return (i); + else if (old == -1) + old = i; + } + } + if (old != -1) + return (old); + + /* If Sort is reverse and not threaded, the latest message is first. + * If Sort is threaded, the latest message is first iff exactly one + * of Sort and SortAux are reverse. + */ + if (((Sort & SORT_REVERSE) && (Sort & SORT_MASK) != SORT_THREADS) || + ((Sort & SORT_MASK) == SORT_THREADS && + ((Sort ^ SortAux) & SORT_REVERSE))) + return 0; + else + return (Context->vcount ? Context->vcount - 1 : 0); + } + return 0; +} + +/* This should be in mx.c, but it only gets used here. */ +static int mx_toggle_write (CONTEXT *ctx) +{ + if (!ctx) + return -1; + + if (ctx->readonly) + { + mutt_error _("Cannot toggle write on a readonly mailbox!"); + return -1; + } + + if (ctx->dontwrite) + { + ctx->dontwrite = 0; + mutt_message _("Changes to folder will be written on folder exit."); + } + else + { + ctx->dontwrite = 1; + mutt_message _("Changes to folder will not be written."); + } + + return 0; +} + +static void update_index (MUTTMENU *menu, CONTEXT *ctx, int check, + int oldcount, int index_hint) +{ + /* store pointers to the newly added messages */ + HEADER **save_new = NULL; + int j; + + /* take note of the current message */ + if (oldcount) + { + if (menu->current < Context->vcount) + menu->oldcurrent = index_hint; + else + oldcount = 0; /* invalid message number! */ + } + + /* We are in a limited view. Check if the new message(s) satisfy + * the limit criteria. If they do, set their virtual msgno so that + * they will be visible in the limited view */ + if (Context->pattern) + { +#define THIS_BODY Context->hdrs[j]->content + if (oldcount || check == M_REOPENED) + { + for (j = (check == M_REOPENED) ? 0 : oldcount; j < Context->msgcount; j++) + { + if (mutt_pattern_exec (Context->limit_pattern, + M_MATCH_FULL_ADDRESS, + Context, Context->hdrs[j])) + { + Context->hdrs[j]->virtual = Context->vcount; + Context->v2r[Context->vcount] = j; + Context->hdrs[j]->limited = 1; + Context->vcount++; + Context->vsize += THIS_BODY->length + THIS_BODY->offset - THIS_BODY->hdr_offset; + } + } + } +#undef THIS_BODY + } + + /* save the list of new messages */ + if (oldcount && check != M_REOPENED + && ((Sort & SORT_MASK) == SORT_THREADS)) + { + save_new = (HEADER **) safe_malloc (sizeof (HEADER *) * (Context->msgcount - oldcount)); + for (j = oldcount; j < Context->msgcount; j++) + save_new[j-oldcount] = Context->hdrs[j]; + } + + /* if the mailbox was reopened, need to rethread from scratch */ + mutt_sort_headers (Context, (check == M_REOPENED)); + + /* uncollapse threads with new mail */ + if ((Sort & SORT_MASK) == SORT_THREADS) + { + if (check == M_REOPENED) + { + THREAD *h, *j; + + Context->collapsed = 0; + + for (h = Context->tree; h; h = h->next) + { + for (j = h; !j->message; j = j->child) + ; + mutt_uncollapse_thread (Context, j->message); + } + mutt_set_virtual (Context); + } + else if (oldcount) + { + for (j = 0; j < Context->msgcount - oldcount; j++) + { + int k; + + for (k = 0; k < Context->msgcount; k++) + { + HEADER *h = Context->hdrs[k]; + if (h == save_new[j] && (!Context->pattern || h->limited)) + mutt_uncollapse_thread (Context, h); + } + } + FREE (&save_new); + mutt_set_virtual (Context); + } + } + + menu->current = -1; + if (oldcount) + { + /* restore the current message to the message it was pointing to */ + for (j = 0; j < Context->vcount; j++) + { + if (Context->hdrs[Context->v2r[j]]->index == menu->oldcurrent) + { + menu->current = j; + break; + } + } + } + + if (menu->current < 0) + menu->current = ci_first_message (); + +} + +static void resort_index (MUTTMENU *menu) +{ + int i; + HEADER *current = CURHDR; + + menu->current = -1; + mutt_sort_headers (Context, 0); + /* Restore the current message */ + + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]] == current) + { + menu->current = i; + break; + } + } + + if ((Sort & SORT_MASK) == SORT_THREADS && menu->current < 0) + menu->current = mutt_parent_message (Context, current); + + if (menu->current < 0) + menu->current = ci_first_message (); + + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; +} + +struct mapping_t IndexHelp[] = { + { N_("Quit"), OP_QUIT }, + { N_("Del"), OP_DELETE }, + { N_("Undel"), OP_UNDELETE }, + { N_("Save"), OP_SAVE }, + { N_("Mail"), OP_MAIL }, + { N_("Reply"), OP_REPLY }, + { N_("Group"), OP_GROUP_REPLY }, + { N_("Help"), OP_HELP }, + { NULL } +}; + +#ifdef USE_NNTP +struct mapping_t IndexNewsHelp[] = { + { N_("Quit"), OP_QUIT }, + { N_("Del"), OP_DELETE }, + { N_("Undel"), OP_UNDELETE }, + { N_("Save"), OP_SAVE }, + { N_("Post"), OP_POST }, + { N_("Followup"), OP_FOLLOWUP }, + { N_("Catchup"), OP_CATCHUP }, + { N_("Help"), OP_HELP }, + { NULL } +}; +#endif + +/* This function handles the message index window as well as commands returned + * from the pager (MENU_PAGER). + */ +int mutt_index_menu (void) +{ + char buf[LONG_STRING], helpstr[SHORT_STRING]; + int flags; + int op = OP_NULL; + int done = 0; /* controls when to exit the "event" loop */ + int i = 0, j; + int tag = 0; /* has the tag-prefix command been pressed? */ + int newcount = -1; + int oldcount = -1; + int rc = -1; + MUTTMENU *menu; + char *cp; /* temporary variable. */ + int index_hint; /* used to restore cursor position */ + int do_buffy_notify = 1; + int close = 0; /* did we OP_QUIT or OP_EXIT out of this menu? */ + int attach_msg = option(OPTATTACHMSG); + + menu = mutt_new_menu (); + menu->menu = MENU_MAIN; + menu->offset = 1; + menu->pagelen = LINES - 3; + menu->make_entry = index_make_entry; + menu->color = index_color; + menu->current = ci_first_message (); + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MAIN, +#ifdef USE_NNTP + (Context && (Context->magic == M_NNTP)) ? IndexNewsHelp : +#endif + IndexHelp); + + if (!attach_msg) + mutt_buffy_check(1); /* force the buffy check after we enter the folder */ + + FOREVER + { + tag = 0; /* clear the tag-prefix */ + + menu->max = Context ? Context->vcount : 0; + oldcount = Context ? Context->msgcount : 0; + + /* check if we need to resort the index because just about + * any 'op' below could do mutt_enter_command(), either here or + * from any new menu launched, and change $sort/$sort_aux + */ + if (option (OPTNEEDRESORT) && Context && Context->msgcount) + resort_index (menu); + + if (option (OPTREDRAWTREE) && Context && Context->msgcount && (Sort & SORT_MASK) == SORT_THREADS) + { + mutt_draw_tree (Context); + menu->redraw |= REDRAW_STATUS; + unset_option (OPTREDRAWTREE); + } + + if (Context && !attach_msg) + { + int check; + /* check for new mail in the mailbox. If nonzero, then something has + * changed about the file (either we got new mail or the file was + * modified underneath us.) + */ + +#ifdef USE_IMAP + imap_allow_reopen (Context); +#endif + + index_hint = (Context->vcount && menu->current >= 0 && menu->current < Context->vcount) ? CURHDR->index : 0; + + if ((check = mx_check_mailbox (Context, &index_hint, 0)) < 0) + { + if (!Context->path) + { + /* fatal error occurred */ + FREE (&Context); + menu->redraw = REDRAW_FULL; + } + + set_option (OPTSEARCHINVALID); + } + else if (check == M_NEW_MAIL || check == M_REOPENED || check == M_FLAGS) + { + update_index (menu, Context, check, oldcount, index_hint); + + /* notify the user of new mail */ + if (check == M_REOPENED) + mutt_error _("Mailbox was externally modified. Flags may be wrong."); + else if (check == M_NEW_MAIL) + { + mutt_message _("New mail in this mailbox."); + if (option (OPTBEEPNEW)) + beep (); + } else if (check == M_FLAGS) + mutt_message _("Mailbox was externally modified."); + + /* avoid the message being overwritten by buffy */ + do_buffy_notify = 0; + + menu->redraw = REDRAW_FULL; + menu->max = Context->vcount; + + set_option (OPTSEARCHINVALID); + } + } + +#ifdef USE_IMAP + imap_keepalive (); + imap_disallow_reopen (Context); +#endif + + if (!attach_msg) + { + /* check for new mail in the incoming folders */ + oldcount = newcount; + if ((newcount = mutt_buffy_check (0)) != oldcount) + menu->redraw |= REDRAW_STATUS; + if (do_buffy_notify) + { + if (mutt_buffy_notify () && option (OPTBEEPNEW)) + beep (); + } + else + do_buffy_notify = 1; + } + + if (op != -1) + mutt_curs_set (0); + + if (menu->redraw & REDRAW_FULL) + { + menu_redraw_full (menu); + mutt_show_error (); + } + + if (menu->menu == MENU_MAIN) + { + if (Context && Context->hdrs && !(menu->current >= Context->vcount)) + { + menu_check_recenter (menu); + + if (menu->redraw & REDRAW_INDEX) + { + menu_redraw_index (menu); + menu->redraw |= REDRAW_STATUS; + } + else if (menu->redraw & (REDRAW_MOTION_RESYNCH | REDRAW_MOTION)) + menu_redraw_motion (menu); + else if (menu->redraw & REDRAW_CURRENT) + menu_redraw_current (menu); + } + + if (menu->redraw & REDRAW_STATUS) + { + menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); + CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); + SETCOLOR (MT_COLOR_STATUS); + mutt_paddstr (COLS, buf); + SETCOLOR (MT_COLOR_NORMAL); + menu->redraw &= ~REDRAW_STATUS; + } + + menu->redraw = 0; + if (menu->current < menu->max) + menu->oldcurrent = menu->current; + else + menu->oldcurrent = -1; + + if (option (OPTARROWCURSOR)) + move (menu->current - menu->top + menu->offset, 2); + else + move (menu->current - menu->top + menu->offset, COLS - 1); + mutt_refresh (); + + op = km_dokey (MENU_MAIN); + + dprint(4, (debugfile, "mutt_index_menu[%d]: Got op %d\n", __LINE__, op)); + +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + if (SigWinch) + { + mutt_flushinp (); + mutt_resize_screen (); + menu->redraw = REDRAW_FULL; + menu->menu = MENU_MAIN; + SigWinch = 0; + menu->top = 0; /* so we scroll the right amount */ + /* + * force a real complete redraw. clrtobot() doesn't seem to be able + * to handle every case without this. + */ + clearok(stdscr,TRUE); + continue; + } +#endif + + if (op == -1) + continue; /* either user abort or timeout */ + + mutt_curs_set (1); + + /* special handling for the tag-prefix function */ + if (op == OP_TAG_PREFIX) + { + if (!Context) + { + mutt_error _("No mailbox is open."); + continue; + } + + if (!Context->tagged) + { + mutt_error _("No tagged messages."); + continue; + } + tag = 1; + + /* give visual indication that the next command is a tag- command */ + mvaddstr (LINES - 1, 0, "tag-"); + clrtoeol (); + + /* get the real command */ + if ((op = km_dokey (MENU_MAIN)) == OP_TAG_PREFIX) + { + /* abort tag sequence */ + CLEARLINE (LINES-1); + continue; + } + } + else if (option (OPTAUTOTAG) && Context && Context->tagged) + tag = 1; + + if (op == OP_TAG_PREFIX_COND) + { + if (!Context) + { + mutt_error _("No mailbox is open."); + continue; + } + + if (!Context->tagged) + { + event_t tmp; + while(UngetCount>0) + { + tmp=mutt_getch(); + if(tmp.op==OP_END_COND)break; + } + mutt_message _("Nothing to do."); + continue; + } + tag = 1; + + /* give visual indication that the next command is a tag- command */ + mvaddstr (LINES - 1, 0, "tag-"); + clrtoeol (); + + /* get the real command */ + if ((op = km_dokey (MENU_MAIN)) == OP_TAG_PREFIX) + { + /* abort tag sequence */ + CLEARLINE (LINES-1); + continue; + } + } + + mutt_clear_error (); + } + else + { + if (menu->current < menu->max) + menu->oldcurrent = menu->current; + else + menu->oldcurrent = -1; + + mutt_curs_set (1); /* fallback from the pager */ + } + +#ifdef USE_NNTP + unset_option (OPTNEWS); /* for any case */ +#endif + switch (op) + { + + /* ---------------------------------------------------------------------- + * movement commands + */ + + case OP_BOTTOM_PAGE: + menu_bottom_page (menu); + break; + case OP_FIRST_ENTRY: + menu_first_entry (menu); + break; + case OP_MIDDLE_PAGE: + menu_middle_page (menu); + break; + case OP_HALF_UP: + menu_half_up (menu); + break; + case OP_HALF_DOWN: + menu_half_down (menu); + break; + case OP_NEXT_LINE: + menu_next_line (menu); + break; + case OP_PREV_LINE: + menu_prev_line (menu); + break; + case OP_NEXT_PAGE: + menu_next_page (menu); + break; + case OP_PREV_PAGE: + menu_prev_page (menu); + break; + case OP_LAST_ENTRY: + menu_last_entry (menu); + break; + case OP_TOP_PAGE: + menu_top_page (menu); + break; + case OP_CURRENT_TOP: + menu_current_top (menu); + break; + case OP_CURRENT_MIDDLE: + menu_current_middle (menu); + break; + case OP_CURRENT_BOTTOM: + menu_current_bottom (menu); + break; + +#ifdef USE_NNTP + case OP_GET_MESSAGE: + case OP_GET_PARENT: + CHECK_MSGCOUNT; + if (Context->magic == M_NNTP) + { + HEADER *h; + + if (op == OP_GET_MESSAGE) + { + buf[0] = 0; + if (mutt_get_field (_("Enter Message-Id: "), buf, sizeof (buf), 0) != 0 + || !buf[0]) + break; + } + else + { + LIST *ref = CURHDR->env->references; + if (!ref) + { + mutt_error _("Article has no parent reference!"); + break; + } + strfcpy (buf, ref->data, sizeof (buf)); + } + if (!Context->id_hash) + Context->id_hash = mutt_make_id_hash (Context); + if ((h = hash_find (Context->id_hash, buf))) + { + if (h->virtual != -1) + { + menu->current = h->virtual; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else if (h->collapsed) + { + mutt_uncollapse_thread (Context, h); + mutt_set_virtual (Context); + menu->current = h->virtual; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + mutt_error _("Message not visible in limited view."); + } + else + { + if (nntp_check_msgid (Context, buf) == 0) + { + h = Context->hdrs[Context->msgcount-1]; + mutt_sort_headers (Context, 0); + menu->current = h->virtual; + menu->redraw = REDRAW_FULL; + } + else + mutt_error (_("Article %s not found on server"), buf); + } + } + break; + + case OP_GET_CHILDREN: + case OP_RECONSTRUCT_THREAD: + CHECK_MSGCOUNT; + if (Context->magic == M_NNTP) + { + HEADER *h; + int old = CURHDR->index, i; + + if (!CURHDR->env->message_id) + { + mutt_error _("No Message-Id. Unable to perform operation"); + break; + } + + if (!Context->id_hash) + Context->id_hash = mutt_make_id_hash (Context); + strfcpy (buf, CURHDR->env->message_id, sizeof (buf)); + + if (op == OP_RECONSTRUCT_THREAD) + { + LIST *ref = CURHDR->env->references; + while (ref) + { + nntp_check_msgid (Context, ref->data); + /* the last msgid in References is the root message */ + if (!ref->next) + strfcpy (buf, ref->data, sizeof (buf)); + ref = ref->next; + } + } + mutt_message _("Check for children of message..."); + if (nntp_check_children (Context, buf) == 0) + { + mutt_sort_headers (Context, (op == OP_RECONSTRUCT_THREAD)); + h = hash_find (Context->id_hash, buf); + /* if the root message was retrieved, move to it */ + if (h) + menu->current = h->virtual; + else /* try to restore old position */ + for (i = 0; i < Context->msgcount; i++) + if (Context->hdrs[i]->index == old) + { + menu->current = Context->hdrs[i]->virtual; + /* As an added courtesy, recenter the menu + * with the current entry at the middle of the screen */ + menu_check_recenter (menu); + menu_current_middle (menu); + } + } + menu->redraw = REDRAW_FULL; + mutt_clear_error (); + } + break; +#endif + + case OP_JUMP: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (isdigit (LastKey)) mutt_ungetch (LastKey, 0); + buf[0] = 0; + if (mutt_get_field (_("Jump to message: "), buf, sizeof (buf), 0) != 0 + || !buf[0]) + break; + + if (! isdigit ((unsigned char) buf[0])) + { + mutt_error _("Argument must be a message number."); + break; + } + + i = atoi (buf); + if (i > 0 && i <= Context->msgcount) + { + for (j = i-1; j < Context->msgcount; j++) + { + if (Context->hdrs[j]->virtual != -1) + break; + } + if (j >= Context->msgcount) + { + for (j = i-2; j >= 0; j--) + { + if (Context->hdrs[j]->virtual != -1) + break; + } + } + + if (j >= 0) + { + menu->current = Context->hdrs[j]->virtual; + if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("That message is not visible."); + } + else + mutt_error _("Invalid message number."); + + break; + + /* -------------------------------------------------------------------- + * `index' specific commands + */ + + case OP_MAIN_DELETE_PATTERN: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + CHECK_ATTACH; + mutt_pattern_func (M_DELETE, _("Delete messages matching: ")); + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + break; + +#ifdef USE_POP + case OP_MAIN_FETCH_MAIL: + + CHECK_ATTACH; + pop_fetch_mail (); + menu->redraw = REDRAW_FULL; + break; +#endif /* USE_POP */ + + case OP_HELP: + + mutt_help (MENU_MAIN); + menu->redraw = REDRAW_FULL; + break; + + case OP_MAIN_SHOW_LIMIT: + CHECK_MSGCOUNT; + if (!Context->pattern) + mutt_message _("No limit pattern is in effect."); + else + { + char buf[STRING]; + /* i18n: ask for a limit to apply */ + snprintf (buf, sizeof(buf), _("Limit: %s"),Context->pattern); + mutt_message ("%s", buf); + } + break; + + case OP_MAIN_LIMIT: + case OP_TOGGLE_READ: + + CHECK_MSGCOUNT; + menu->oldcurrent = (Context->vcount && menu->current >= 0 && menu->current < Context->vcount) ? + CURHDR->index : -1; + if (op == OP_TOGGLE_READ) + { + char buf[LONG_STRING]; + + if (!Context->pattern || strncmp (Context->pattern, "!~R!~D~s", 8) != 0) + { + snprintf (buf, sizeof (buf), "!~R!~D~s%s", + Context->pattern ? Context->pattern : ".*"); + set_option (OPTHIDEREAD); + } + else + { + strfcpy (buf, Context->pattern + 8, sizeof(buf)); + if (!*buf || strncmp (buf, ".*", 2) == 0) + snprintf (buf, sizeof(buf), "~A"); + unset_option (OPTHIDEREAD); + } + FREE (&Context->pattern); + Context->pattern = safe_strdup (buf); + } + if ((op == OP_TOGGLE_READ && mutt_pattern_func (M_LIMIT, NULL) == 0) || + mutt_pattern_func (M_LIMIT, _("Limit to messages matching: ")) == 0) + { + if (menu->oldcurrent >= 0) + { + /* try to find what used to be the current message */ + menu->current = -1; + for (i = 0; i < Context->vcount; i++) + if (Context->hdrs[Context->v2r[i]]->index == menu->oldcurrent) + { + menu->current = i; + break; + } + if (menu->current < 0) menu->current = 0; + } + else + menu->current = 0; + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + if ((Sort & SORT_MASK) == SORT_THREADS) + mutt_draw_tree (Context); + menu->redraw = REDRAW_FULL; + } + break; + + case OP_QUIT: + + close = op; + if (attach_msg) + { + done = 1; + break; + } + + if (query_quadoption (OPT_QUIT, _("Quit Mutt?")) == M_YES) + { + int check; + + oldcount = Context ? Context->msgcount : 0; + + if (!Context || (check = mx_close_mailbox (Context, &index_hint)) == 0) + done = 1; + else + { + if (check == M_NEW_MAIL || check == M_REOPENED) + update_index (menu, Context, check, oldcount, index_hint); + + menu->redraw = REDRAW_FULL; /* new mail arrived? */ + set_option (OPTSEARCHINVALID); + } + } + break; + + case OP_REDRAW: + + clearok (stdscr, TRUE); + menu->redraw = REDRAW_FULL; + break; + + case OP_SEARCH: + case OP_SEARCH_REVERSE: + case OP_SEARCH_NEXT: + case OP_SEARCH_OPPOSITE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if ((menu->current = mutt_search_command (menu->current, op)) == -1) + menu->current = menu->oldcurrent; + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_SORT: + case OP_SORT_REVERSE: + + if (mutt_select_sort ((op == OP_SORT_REVERSE)) == 0) + { + if (Context && Context->msgcount) + { + resort_index (menu); + set_option (OPTSEARCHINVALID); + } + } + break; + + case OP_TAG: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (tag && !option (OPTAUTOTAG)) + { + for (j = 0; j < Context->vcount; j++) + mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], M_TAG, 0); + menu->redraw = REDRAW_STATUS | REDRAW_INDEX; + } + else + { + mutt_set_flag (Context, CURHDR, M_TAG, !CURHDR->tagged); + menu->redraw = REDRAW_STATUS; + if (option (OPTRESOLVE) && menu->current < Context->vcount - 1) + { + menu->current++; + menu->redraw |= REDRAW_MOTION_RESYNCH; + } + else + menu->redraw |= REDRAW_CURRENT; + } + break; + + case OP_MAIN_TAG_PATTERN: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + mutt_pattern_func (M_TAG, _("Tag messages matching: ")); + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + break; + + case OP_MAIN_UNDELETE_PATTERN: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + if (mutt_pattern_func (M_UNDELETE, _("Undelete messages matching: ")) == 0) + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + break; + + case OP_MAIN_UNTAG_PATTERN: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (mutt_pattern_func (M_UNTAG, _("Untag messages matching: ")) == 0) + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + break; + + /* -------------------------------------------------------------------- + * The following operations can be performed inside of the pager. + */ + +#ifdef USE_IMAP + case OP_MAIN_IMAP_FETCH: + if (Context->magic == M_IMAP) + imap_check_mailbox (Context, &index_hint, 1); + break; +#endif + + case OP_MAIN_SYNC_FOLDER: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + { + int oldvcount = Context->vcount; + int oldcount = Context->msgcount; + int dcount = 0; + int check; + + /* calculate the number of messages _above_ the cursor, + * so we can keep the cursor on the current message + */ + for (j = 0; j <= menu->current; j++) + { + if (Context->hdrs[Context->v2r[j]]->deleted) + dcount++; + } + + if ((check = mx_sync_mailbox (Context, &index_hint)) == 0) + { + if (Context->vcount != oldvcount) + menu->current -= dcount; + set_option (OPTSEARCHINVALID); + } + else if (check == M_NEW_MAIL || check == M_REOPENED) + update_index (menu, Context, check, oldcount, index_hint); + + /* + * do a sanity check even if mx_sync_mailbox failed. + */ + + if (menu->current < 0 || menu->current >= Context->vcount) + menu->current = ci_first_message (); + } + + /* check for a fatal error, or all messages deleted */ + if (!Context->path) + FREE (&Context); + + /* if we were in the pager, redisplay the message */ + if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_FULL; + break; + + case OP_MAIN_CHANGE_FOLDER: + case OP_MAIN_CHANGE_FOLDER_READONLY: +#ifdef USE_NNTP + case OP_MAIN_CHANGE_GROUP: + case OP_MAIN_CHANGE_GROUP_READONLY: +#endif + + if (attach_msg || option (OPTREADONLY) || +#ifdef USE_NNTP + op == OP_MAIN_CHANGE_GROUP_READONLY || +#endif + op == OP_MAIN_CHANGE_FOLDER_READONLY) + flags = M_READONLY; + else + flags = 0; + + if (flags) + cp = _("Open mailbox in read-only mode"); + else + cp = _("Open mailbox"); + + buf[0] = '\0'; +#ifdef USE_NNTP + unset_option (OPTNEWS); + if (op == OP_MAIN_CHANGE_GROUP || + op == OP_MAIN_CHANGE_GROUP_READONLY) + { + set_option (OPTNEWS); + if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer))) + break; + if (flags) + cp = _("Open newsgroup in read-only mode"); + else + cp = _("Open newsgroup"); + nntp_buffy (buf); + } + else +#endif + mutt_buffy (buf, sizeof (buf)); + + if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) + break; + if (!buf[0]) + { + CLEARLINE (LINES-1); + break; + } + +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + unset_option (OPTNEWS); + nntp_expand_path (buf, sizeof (buf), &CurrentNewsSrv->conn->account); + } + else +#endif + mutt_expand_path (buf, sizeof (buf)); + if (mx_get_magic (buf) <= 0) + { + mutt_error (_("%s is not a mailbox."), buf); + break; + } + + if (Context) + { + int check; + + mutt_str_replace (&LastFolder, Context->path); + oldcount = Context ? Context->msgcount : 0; + + if ((check = mx_close_mailbox (Context, &index_hint)) != 0) + { + if (check == M_NEW_MAIL || check == M_REOPENED) + update_index (menu, Context, check, oldcount, index_hint); + + set_option (OPTSEARCHINVALID); + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + break; + } + FREE (&Context); + } + + mutt_sleep (0); + + /* Set CurrentMenu to MENU_MAIN before executing any folder + * hooks so that all the index menu functions are available to + * the exec command. + */ + + CurrentMenu = MENU_MAIN; + mutt_folder_hook (buf); + + if ((Context = mx_open_mailbox (buf, flags, NULL)) != NULL) + { + menu->current = ci_first_message (); + } + else + menu->current = 0; + +#ifdef USE_NNTP + /* mutt_buffy_check() must be done with mail-reader mode! */ + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MAIN, + (Context && (Context->magic == M_NNTP)) ? IndexNewsHelp : IndexHelp); +#endif + mutt_clear_error (); + mutt_buffy_check(1); /* force the buffy check after we have changed + the folder */ + menu->redraw = REDRAW_FULL; + set_option (OPTSEARCHINVALID); + break; + + case OP_DISPLAY_MESSAGE: + case OP_DISPLAY_HEADERS: /* don't weed the headers */ + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + /* + * toggle the weeding of headers so that a user can press the key + * again while reading the message. + */ + if (op == OP_DISPLAY_HEADERS) + toggle_option (OPTWEED); + + unset_option (OPTNEEDRESORT); + + if ((Sort & SORT_MASK) == SORT_THREADS && CURHDR->collapsed) + { + mutt_uncollapse_thread (Context, CURHDR); + mutt_set_virtual (Context); + if (option (OPTUNCOLLAPSEJUMP)) + menu->current = mutt_thread_next_unread (Context, CURHDR); + } + + if ((op = mutt_display_message (CURHDR)) == -1) + { + unset_option (OPTNEEDRESORT); + break; + } + + menu->menu = MENU_PAGER; + menu->oldcurrent = menu->current; + continue; + + case OP_EXIT: + + close = op; + if (menu->menu == MENU_MAIN && attach_msg) + { + done = 1; + break; + } + + if ((menu->menu == MENU_MAIN) + && (query_quadoption (OPT_QUIT, + _("Exit Mutt without saving?")) == M_YES)) + { + if (Context) + { + mx_fastclose_mailbox (Context); + FREE (&Context); + } + done = 1; + } + break; + + case OP_EDIT_TYPE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_ATTACH; + mutt_edit_content_type (CURHDR, CURHDR->content, NULL); + /* if we were in the pager, redisplay the message */ + if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_CURRENT; + break; + + case OP_MAIN_NEXT_UNDELETED: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (menu->current >= Context->vcount - 1) + { + if (menu->menu == MENU_MAIN) + mutt_error _("You are on the last message."); + break; + } + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + if (menu->menu == MENU_MAIN) + mutt_error _("No undeleted messages."); + } + else if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_NEXT_ENTRY: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (menu->current >= Context->vcount - 1) + { + if (menu->menu == MENU_MAIN) + mutt_error _("You are on the last message."); + break; + } + menu->current++; + if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_MAIN_PREV_UNDELETED: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (menu->current < 1) + { + mutt_error _("You are on the first message."); + break; + } + if ((menu->current = ci_previous_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + if (menu->menu == MENU_MAIN) + mutt_error _("No undeleted messages."); + } + else if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_PREV_ENTRY: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (menu->current < 1) + { + if (menu->menu == MENU_MAIN) mutt_error _("You are on the first message."); + break; + } + menu->current--; + if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_DECRYPT_COPY: + case OP_DECRYPT_SAVE: + if (!WithCrypto) + break; + /* fall thru */ + case OP_COPY_MESSAGE: + case OP_SAVE: + case OP_DECODE_COPY: + case OP_DECODE_SAVE: + CHECK_MSGCOUNT; + CHECK_VISIBLE; + if (mutt_save_message (tag ? NULL : CURHDR, + (op == OP_DECRYPT_SAVE) || + (op == OP_SAVE) || (op == OP_DECODE_SAVE), + (op == OP_DECODE_SAVE) || (op == OP_DECODE_COPY), + (op == OP_DECRYPT_SAVE) || (op == OP_DECRYPT_COPY) || + 0, + &menu->redraw) == 0 && + (op == OP_SAVE || op == OP_DECODE_SAVE || op == OP_DECRYPT_SAVE) + ) + { + if (tag) + menu->redraw |= REDRAW_INDEX; + else if (option (OPTRESOLVE)) + { + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + menu->redraw |= REDRAW_CURRENT; + } + else + menu->redraw |= REDRAW_MOTION_RESYNCH; + } + else + menu->redraw |= REDRAW_CURRENT; + } + break; + + case OP_MAIN_NEXT_NEW: + case OP_MAIN_NEXT_UNREAD: + case OP_MAIN_PREV_NEW: + case OP_MAIN_PREV_UNREAD: + case OP_MAIN_NEXT_NEW_THEN_UNREAD: + case OP_MAIN_PREV_NEW_THEN_UNREAD: + + { + int first_unread = -1; + int first_new = -1; + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + + i = menu->current; + menu->current = -1; + for (j = 0; j != Context->vcount; j++) + { +#define CURHDRi Context->hdrs[Context->v2r[i]] + if (op == OP_MAIN_NEXT_NEW || op == OP_MAIN_NEXT_UNREAD || op == OP_MAIN_NEXT_NEW_THEN_UNREAD) + { + i++; + if (i > Context->vcount - 1) + { + mutt_message _("Search wrapped to top."); + i = 0; + } + } + else + { + i--; + if (i < 0) + { + mutt_message _("Search wrapped to bottom."); + i = Context->vcount - 1; + } + } + + if (CURHDRi->collapsed && (Sort & SORT_MASK) == SORT_THREADS) + { + if (UNREAD (CURHDRi) && first_unread == -1) + first_unread = i; + if (UNREAD (CURHDRi) == 1 && first_new == -1) + first_new = i; + } + else if ((!CURHDRi->deleted && !CURHDRi->read)) + { + if (first_unread == -1) + first_unread = i; + if ((!CURHDRi->old) && first_new == -1) + first_new = i; + } + + if ((op == OP_MAIN_NEXT_UNREAD || op == OP_MAIN_PREV_UNREAD) && + first_unread != -1) + break; + if ((op == OP_MAIN_NEXT_NEW || op == OP_MAIN_PREV_NEW || + op == OP_MAIN_NEXT_NEW_THEN_UNREAD || op == OP_MAIN_PREV_NEW_THEN_UNREAD) + && first_new != -1) + break; + } +#undef CURHDRi + if ((op == OP_MAIN_NEXT_NEW || op == OP_MAIN_PREV_NEW || + op == OP_MAIN_NEXT_NEW_THEN_UNREAD || op == OP_MAIN_PREV_NEW_THEN_UNREAD) + && first_new != -1) + menu->current = first_new; + else if ((op == OP_MAIN_NEXT_UNREAD || op == OP_MAIN_PREV_UNREAD || + op == OP_MAIN_NEXT_NEW_THEN_UNREAD || op == OP_MAIN_PREV_NEW_THEN_UNREAD) + && first_unread != -1) + menu->current = first_unread; + + if (menu->current == -1) + { + menu->current = menu->oldcurrent; + mutt_error ("%s%s.", (op == OP_MAIN_NEXT_NEW || op == OP_MAIN_PREV_NEW) ? _("No new messages") : _("No unread messages"), + Context->pattern ? _(" in this limited view") : ""); + } + else if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + } + case OP_FLAG_MESSAGE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_POP + if (Context->magic == M_POP) + { + mutt_flushinp (); + mutt_error _("Can't change 'important' flag on POP server."); + break; + } +#endif + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_WRITE); +#endif + +#ifdef USE_NNTP + if (Context->magic == M_NNTP) + { + mutt_flushinp (); + mutt_error _("Can't change 'important' flag on NNTP server."); + break; + } +#endif + + if (tag) + { + for (j = 0; j < Context->vcount; j++) + { + if (Context->hdrs[Context->v2r[j]]->tagged) + mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], + M_FLAG, !Context->hdrs[Context->v2r[j]]->flagged); + } + + menu->redraw |= REDRAW_INDEX; + } + else + { + mutt_set_flag (Context, CURHDR, M_FLAG, !CURHDR->flagged); + if (option (OPTRESOLVE)) + { + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + menu->redraw = REDRAW_CURRENT; + } + else + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + } + menu->redraw |= REDRAW_STATUS; + break; + + case OP_TOGGLE_NEW: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_SEEN); +#endif + + if (tag) + { + for (j = 0; j < Context->vcount; j++) + { + if (Context->hdrs[Context->v2r[j]]->tagged) + { + if (Context->hdrs[Context->v2r[j]]->read || + Context->hdrs[Context->v2r[j]]->old) + mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], M_NEW, 1); + else + mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], M_READ, 1); + } + } + menu->redraw = REDRAW_STATUS | REDRAW_INDEX; + } + else + { + if (CURHDR->read || CURHDR->old) + mutt_set_flag (Context, CURHDR, M_NEW, 1); + else + mutt_set_flag (Context, CURHDR, M_READ, 1); + + if (option (OPTRESOLVE)) + { + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + menu->redraw = REDRAW_CURRENT; + } + else + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + menu->redraw |= REDRAW_STATUS; + } + break; + + case OP_TOGGLE_WRITE: + + CHECK_MSGCOUNT; + if (mx_toggle_write (Context) == 0) + menu->redraw |= REDRAW_STATUS; + break; + + case OP_MAIN_NEXT_THREAD: + case OP_MAIN_NEXT_SUBTHREAD: + case OP_MAIN_PREV_THREAD: + case OP_MAIN_PREV_SUBTHREAD: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + switch (op) + { + case OP_MAIN_NEXT_THREAD: + menu->current = mutt_next_thread (CURHDR); + break; + + case OP_MAIN_NEXT_SUBTHREAD: + menu->current = mutt_next_subthread (CURHDR); + break; + + case OP_MAIN_PREV_THREAD: + menu->current = mutt_previous_thread (CURHDR); + break; + + case OP_MAIN_PREV_SUBTHREAD: + menu->current = mutt_previous_subthread (CURHDR); + break; + } + + if (menu->current < 0) + { + menu->current = menu->oldcurrent; + if (op == OP_MAIN_NEXT_THREAD || op == OP_MAIN_NEXT_SUBTHREAD) + mutt_error _("No more threads."); + else + mutt_error _("You are on the first thread."); + } + else if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_MAIN_PARENT_MESSAGE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + + if ((menu->current = mutt_parent_message (Context, CURHDR)) < 0) + { + menu->current = menu->oldcurrent; + } + else if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw = REDRAW_MOTION; + break; + + case OP_MAIN_SET_FLAG: + case OP_MAIN_CLEAR_FLAG: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +/* #ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_WRITE); +#endif */ + + if (mutt_change_flag (tag ? NULL : CURHDR, (op == OP_MAIN_SET_FLAG)) == 0) + { + menu->redraw = REDRAW_STATUS; + if (tag) + menu->redraw |= REDRAW_INDEX; + else if (option (OPTRESOLVE)) + { + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + menu->redraw |= REDRAW_CURRENT; + } + else + menu->redraw |= REDRAW_MOTION_RESYNCH; + } + else + menu->redraw |= REDRAW_CURRENT; + } + break; + + case OP_MAIN_COLLAPSE_THREAD: + CHECK_MSGCOUNT; + CHECK_VISIBLE; + + if ((Sort & SORT_MASK) != SORT_THREADS) + { + mutt_error _("Threading is not enabled."); + break; + } + + if (CURHDR->collapsed) + { + menu->current = mutt_uncollapse_thread (Context, CURHDR); + mutt_set_virtual (Context); + if (option (OPTUNCOLLAPSEJUMP)) + menu->current = mutt_thread_next_unread (Context, CURHDR); + } + else if (option (OPTCOLLAPSEUNREAD) || !UNREAD (CURHDR)) + { + menu->current = mutt_collapse_thread (Context, CURHDR); + mutt_set_virtual (Context); + } + else + { + mutt_error _("Thread contains unread messages."); + break; + } + + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + + break; + + case OP_MAIN_COLLAPSE_ALL: + CHECK_MSGCOUNT; + CHECK_VISIBLE; + + if ((Sort & SORT_MASK) != SORT_THREADS) + { + mutt_error _("Threading is not enabled."); + break; + } + + { + HEADER *h, *base; + THREAD *thread, *top; + int final; + + if (CURHDR->collapsed) + final = mutt_uncollapse_thread (Context, CURHDR); + else if (option (OPTCOLLAPSEUNREAD) || !UNREAD (CURHDR)) + final = mutt_collapse_thread (Context, CURHDR); + else + final = CURHDR->virtual; + + base = Context->hdrs[Context->v2r[final]]; + + top = Context->tree; + Context->collapsed = !Context->collapsed; + while ((thread = top) != NULL) + { + while (!thread->message) + thread = thread->child; + h = thread->message; + + if (h->collapsed != Context->collapsed) + { + if (h->collapsed) + mutt_uncollapse_thread (Context, h); + else if (option (OPTCOLLAPSEUNREAD) || !UNREAD (h)) + mutt_collapse_thread (Context, h); + } + top = top->next; + } + + mutt_set_virtual (Context); + for (j = 0; j < Context->vcount; j++) + { + if (Context->hdrs[Context->v2r[j]]->index == base->index) + { + menu->current = j; + break; + } + } + + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + break; + + /* -------------------------------------------------------------------- + * These functions are invoked directly from the internal-pager + */ + + case OP_BOUNCE_MESSAGE: + + CHECK_ATTACH; + CHECK_MSGCOUNT; + CHECK_VISIBLE; + ci_bounce_message (tag ? NULL : CURHDR, &menu->redraw); + break; + + case OP_CREATE_ALIAS: + + mutt_create_alias (Context && Context->vcount ? CURHDR->env : NULL, NULL); + MAYBE_REDRAW (menu->redraw); + menu->redraw |= REDRAW_CURRENT; + break; + + case OP_QUERY: + CHECK_ATTACH; + mutt_query_menu (NULL, 0); + MAYBE_REDRAW (menu->redraw); + break; + + case OP_PURGE_MESSAGE: + case OP_DELETE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + if (tag) + { + mutt_tag_set_flag (M_DELETE, 1); + mutt_tag_set_flag (M_PURGED, (op != OP_PURGE_MESSAGE) ? 0 : 1); + if (option (OPTDELETEUNTAG)) + mutt_tag_set_flag (M_TAG, 0); + menu->redraw = REDRAW_INDEX; + } + else + { + mutt_set_flag (Context, CURHDR, M_DELETE, 1); + mutt_set_flag (Context, CURHDR, M_PURGED, + (op != OP_PURGE_MESSAGE) ? 0 : 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, CURHDR, M_TAG, 0); + if (option (OPTRESOLVE)) + { + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + { + menu->current = menu->oldcurrent; + menu->redraw = REDRAW_CURRENT; + } + else if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + else + menu->redraw |= REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + } + menu->redraw |= REDRAW_STATUS; + break; + + case OP_DELETE_THREAD: + case OP_DELETE_SUBTHREAD: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + rc = mutt_thread_set_flag (CURHDR, M_DELETE, 1, + op == OP_DELETE_THREAD ? 0 : 1); + + if (rc != -1) + { + if (option (OPTDELETEUNTAG)) + mutt_thread_set_flag (CURHDR, M_TAG, 0, + op == OP_DELETE_THREAD ? 0 : 1); + if (option (OPTRESOLVE)) + if ((menu->current = ci_next_undeleted (menu->current)) == -1) + menu->current = menu->oldcurrent; + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + break; + +#ifdef USE_NNTP + case OP_CATCHUP: + if (Context && Context->magic == M_NNTP) + { + if (mutt_newsgroup_catchup (CurrentNewsSrv, + ((NNTP_DATA *)Context->data)->group)) + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + break; +#endif + + case OP_DISPLAY_ADDRESS: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + mutt_display_address (CURHDR->env); + break; + + case OP_ENTER_COMMAND: + + CurrentMenu = MENU_MAIN; + mutt_enter_command (); + mutt_check_rescore (Context); + if (option (OPTFORCEREDRAWINDEX)) + menu->redraw = REDRAW_FULL; + unset_option (OPTFORCEREDRAWINDEX); + unset_option (OPTFORCEREDRAWPAGER); + break; + + case OP_EDIT_MESSAGE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + CHECK_ATTACH; + +#ifdef USE_POP + if (Context->magic == M_POP) + { + mutt_flushinp (); + mutt_error _("Can't edit message on POP server."); + break; + } +#endif + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_INSERT); +#endif + +#ifdef USE_NNTP + if (Context->magic == M_NNTP) + { + mutt_flushinp (); + mutt_error _("Can't edit message on newsserver."); + break; + } +#endif + + mutt_edit_message (Context, tag ? NULL : CURHDR); + menu->redraw = REDRAW_FULL; + + break; + + case OP_FORWARD_MESSAGE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_ATTACH; + ci_send_message (SENDFORWARD, NULL, NULL, Context, tag ? NULL : CURHDR); + menu->redraw = REDRAW_FULL; + break; + + + case OP_FORGET_PASSPHRASE: + crypt_forget_passphrase (); + break; + + case OP_GROUP_REPLY: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_ATTACH; + ci_send_message (SENDREPLY|SENDGROUPREPLY, NULL, NULL, Context, tag ? NULL : CURHDR); + menu->redraw = REDRAW_FULL; + break; + + case OP_LIST_REPLY: + + CHECK_ATTACH; + CHECK_MSGCOUNT; + CHECK_VISIBLE; + ci_send_message (SENDREPLY|SENDLISTREPLY, NULL, NULL, Context, tag ? NULL : CURHDR); + menu->redraw = REDRAW_FULL; + break; + + case OP_MAIL: + + CHECK_ATTACH; + ci_send_message (0, NULL, NULL, Context, NULL); + menu->redraw = REDRAW_FULL; + break; + + case OP_MAIL_KEY: + if (!(WithCrypto & APPLICATION_PGP)) + break; + CHECK_ATTACH; + ci_send_message (SENDKEY, NULL, NULL, NULL, NULL); + menu->redraw = REDRAW_FULL; + break; + + + case OP_EXTRACT_KEYS: + if (!WithCrypto) + break; + CHECK_MSGCOUNT; + CHECK_VISIBLE; + crypt_extract_keys_from_messages(tag ? NULL : CURHDR); + menu->redraw = REDRAW_FULL; + break; + + + case OP_CHECK_TRADITIONAL: + if (!(WithCrypto & APPLICATION_PGP)) + break; + CHECK_MSGCOUNT; + CHECK_VISIBLE; + mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw); + if (menu->menu == MENU_PAGER) + { + op = OP_DISPLAY_MESSAGE; + continue; + } + break; + + case OP_PIPE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + mutt_pipe_message (tag ? NULL : CURHDR); + MAYBE_REDRAW (menu->redraw); + break; + + case OP_PRINT: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + mutt_print_message (tag ? NULL : CURHDR); + break; + + case OP_MAIN_READ_THREAD: + case OP_MAIN_READ_SUBTHREAD: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_SEEN); +#endif + + rc = mutt_thread_set_flag (CURHDR, M_READ, 1, + op == OP_MAIN_READ_THREAD ? 0 : 1); + + if (rc != -1) + { + if (option (OPTRESOLVE)) + { + if ((menu->current = (op == OP_MAIN_READ_THREAD ? + mutt_next_thread (CURHDR) : mutt_next_subthread (CURHDR))) == -1) + menu->current = menu->oldcurrent; + } + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + break; + + case OP_RECALL_MESSAGE: + + CHECK_ATTACH; + ci_send_message (SENDPOSTPONED, NULL, NULL, Context, NULL); + menu->redraw = REDRAW_FULL; + break; + + case OP_RESEND: + + CHECK_ATTACH; + CHECK_MSGCOUNT; + CHECK_VISIBLE; + + if (tag) + { + for (j = 0; j < Context->vcount; j++) + { + if (Context->hdrs[Context->v2r[j]]->tagged) + mutt_resend_message (NULL, Context, Context->hdrs[Context->v2r[j]]); + } + } + else + mutt_resend_message (NULL, Context, CURHDR); + + menu->redraw = REDRAW_FULL; + break; + +#ifdef USE_NNTP + case OP_POST: + case OP_FOLLOWUP: + case OP_FORWARD_TO_GROUP: + + CHECK_ATTACH; + if (op != OP_FOLLOWUP || !CURHDR->env->followup_to || + mutt_strcasecmp (CURHDR->env->followup_to, "poster") || + query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES) + { + if (Context && Context->magic == M_NNTP && + !((NNTP_DATA *)Context->data)->allowed && + query_quadoption (OPT_TOMODERATED, _("Posting to this group not allowed, may be moderated. Continue?")) != M_YES) + break; + if (op == OP_POST) + ci_send_message (SENDNEWS, NULL, NULL, Context, NULL); + else + { + CHECK_MSGCOUNT; + if (op == OP_FOLLOWUP) + ci_send_message (SENDNEWS|SENDREPLY, NULL, NULL, Context, + tag ? NULL : CURHDR); + else + ci_send_message (SENDNEWS|SENDFORWARD, NULL, NULL, Context, + tag ? NULL : CURHDR); + } + menu->redraw = REDRAW_FULL; + break; + } +#endif + + case OP_REPLY: + + CHECK_ATTACH; + CHECK_MSGCOUNT; + CHECK_VISIBLE; + ci_send_message (SENDREPLY, NULL, NULL, Context, tag ? NULL : CURHDR); + menu->redraw = REDRAW_FULL; + break; + + case OP_SHELL_ESCAPE: + + mutt_shell_escape (); + MAYBE_REDRAW (menu->redraw); + break; + + case OP_TAG_THREAD: + case OP_TAG_SUBTHREAD: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + rc = mutt_thread_set_flag (CURHDR, M_TAG, !CURHDR->tagged, + op == OP_TAG_THREAD ? 0 : 1); + + if (rc != -1) + { + if (option (OPTRESOLVE)) + { + menu->current = mutt_next_thread (CURHDR); + + if (menu->current == -1) + menu->current = menu->oldcurrent; + } + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + break; + + case OP_UNDELETE: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + if (tag) + { + mutt_tag_set_flag (M_DELETE, 0); + mutt_tag_set_flag (M_PURGED, 0); + menu->redraw = REDRAW_INDEX; + } + else + { + mutt_set_flag (Context, CURHDR, M_DELETE, 0); + mutt_set_flag (Context, CURHDR, M_PURGED, 0); + if (option (OPTRESOLVE) && menu->current < Context->vcount - 1) + { + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + } + menu->redraw |= REDRAW_STATUS; + break; + + case OP_UNDELETE_THREAD: + case OP_UNDELETE_SUBTHREAD: + + CHECK_MSGCOUNT; + CHECK_VISIBLE; + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + rc = mutt_thread_set_flag (CURHDR, M_DELETE, 0, + op == OP_UNDELETE_THREAD ? 0 : 1) + + mutt_thread_set_flag (CURHDR, M_PURGED, 0, + op == OP_UNDELETE_THREAD ? 0 : 1); + + if (rc > -1) + { + if (option (OPTRESOLVE)) + { + if (op == OP_UNDELETE_THREAD) + menu->current = mutt_next_thread (CURHDR); + else + menu->current = mutt_next_subthread (CURHDR); + + if (menu->current == -1) + menu->current = menu->oldcurrent; + } + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + break; + + case OP_VERSION: + mutt_version (); + break; + + case OP_BUFFY_LIST: + mutt_buffy_list (); + break; + + case OP_VIEW_ATTACHMENTS: + CHECK_MSGCOUNT; + CHECK_VISIBLE; + mutt_view_attachments (CURHDR); + if (CURHDR->attach_del) + Context->changed = 1; + menu->redraw = REDRAW_FULL; + break; + + case OP_END_COND: + break; + + case OP_WHAT_KEY: + mutt_what_key(); + break; + + default: + if (menu->menu == MENU_MAIN) + km_error_key (MENU_MAIN); + } + + if (menu->menu == MENU_PAGER) + { + menu->menu = MENU_MAIN; + menu->redraw = REDRAW_FULL; +#if 0 + set_option (OPTWEED); /* turn header weeding back on. */ +#endif + } + + if (done) break; + } + +#ifdef USE_IMAP + /* Close all open IMAP connections */ + if (!attach_msg) + imap_logout_all (); +#endif +#ifdef USE_NNTP + /* Close all open NNTP connections */ + if (!attach_msg) + nntp_logout_all (); +#endif + + mutt_menuDestroy (&menu); + return (close); +} + +void mutt_set_header_color (CONTEXT *ctx, HEADER *curhdr) +{ + COLOR_LINE *color; + + if (!curhdr) + return; + + for (color = ColorIndexList; color; color = color->next) + if (mutt_pattern_exec (color->color_pattern, M_MATCH_FULL_ADDRESS, ctx, curhdr)) + { + curhdr->pair = color->pair; + return; + } + curhdr->pair = ColorDefs[MT_COLOR_NORMAL]; +} diff --git a/cvslog2changelog.pl b/cvslog2changelog.pl new file mode 100644 index 0000000..6f083ef --- /dev/null +++ b/cvslog2changelog.pl @@ -0,0 +1,120 @@ +#!/usr/bin/perl + +# use Data::Dumper; + +%Authors = (roessler => 'Thomas Roessler ', + me => 'Michael Elkins '); + +@Changes = (); +$change = {}; + +while (<>) { + chomp $_; + if ($_ =~ /^Working file: (.*)$/) { + $workfile = $1; + $change->{workfile} = $workfile; + $change->{logmsg} = ''; + $change->{author} = ''; + $change->{revision} = ''; + +# print STDERR "workfile: ", $workfile, "\n"; + + } + elsif ($_ =~ /^(=======|------)/) { + if ($change->{revision}) { + + # Some beautifications: Date, author. + if ($change->{author} =~ /^(.*?)\s?\<(.*)\>/) { + $change->{author} = "$1 <$2>"; + } + $change->{date} =~ s!/!-!g; + + # Record the change. + push @Changes, $change unless $change->{logmsg} =~ /^#/; + $change = {}; + $change->{workfile} = $workfile; + $change->{logmsg} = ''; + $change->{author} = ''; + } + } elsif ($_ =~ /^revision ([0-9.]*)/) { + $change->{revision} = $1; + } elsif ($_ =~ /^date: ([^; ]*) ([^; ]*); author: ([^;]*);/) { + $change->{date} = $1; + $change->{hour} = $2; + $change->{author} = $Authors{$3} ? $Authors{$3} : $3; + $change->{committed} = $3; + } elsif ($_ =~ /^From: (.*)$/) { + $change->{author} = $1; + } elsif ($change->{revision}) { + if ($change->{logmsg} || $_) { + $change->{logmsg} .= $_ . "\n"; + } + } +} + +# print Dumper @Changes; + +undef $last_logmsg; undef $last_author; undef $last_date; undef $last_hour; undef $last_comm; +$files = []; + +for my $k (sort {($b->{date} cmp $a->{date}) || ($b->{hour} cmp $a->{hour}) || ($a->{author} cmp $b->{author}) || ($a->{workfile} cmp $b->{workfile})} @Changes) { + + if (!($last_date eq $k->{date}) || !($last_author eq $k->{author}) || + !($last_comm eq $k->{committed})) { + if (@$files) { + &print_entry ($files, $last_logmsg); + $files = []; + } + &print_header ($k->{author}, $k->{committed}, $k->{date}, $k->{hour}); + } + + if (@$files && !($last_logmsg eq $k->{logmsg})) { + &print_entry ($files, $last_logmsg); + $files = []; + } + + + $last_comm = $k->{committed}; + $last_logmsg = $k->{logmsg}; + $last_author = $k->{author}; + $last_date = $k->{date}; + $last_hour = $k->{hour}; + + push @$files, $k->{workfile}; +} + +if (@$files) { + &print_entry ($files, $last_logmsg); +} + +sub print_header { + my $author = shift; + my $committed = shift; + my $date = shift; + my $hour = shift; + + print $date, " ", $hour, " ", $author, " (", $committed, ")\n\n"; +} + +sub print_entry { + my $files = shift; + my $logmsg = shift; + + + print "\t* "; + my $c = ''; + + for my $f (@$files) { + print $c, $f; + $c = ', ' unless $c; + } + + print ": "; + + my $t = ''; + for my $l (split ('\n', $logmsg)) { + print $t, $l, "\n"; + $t = "\t" unless $t; + } + print "\n"; +} diff --git a/date.c b/date.c new file mode 100644 index 0000000..cc8e4e3 --- /dev/null +++ b/date.c @@ -0,0 +1,186 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include + +/* returns the seconds east of UTC given `g' and its corresponding gmtime() + representation */ +static time_t compute_tz (time_t g, struct tm *utc) +{ + struct tm *lt = localtime (&g); + time_t t; + int yday; + + t = (((lt->tm_hour - utc->tm_hour) * 60) + (lt->tm_min - utc->tm_min)) * 60; + + if ((yday = (lt->tm_yday - utc->tm_yday))) + { + /* This code is optimized to negative timezones (West of Greenwich) */ + if (yday == -1 || /* UTC passed midnight before localtime */ + yday > 1) /* UTC passed new year before localtime */ + t -= 24 * 60 * 60; + else + t += 24 * 60 * 60; + } + + return t; +} + +/* Returns the local timezone in seconds east of UTC for the time t, + * or for the current time if t is zero. + */ +time_t mutt_local_tz (time_t t) +{ + struct tm *ptm; + struct tm utc; + + if (!t) + t = time (NULL); + ptm = gmtime (&t); + /* need to make a copy because gmtime/localtime return a pointer to + static memory (grr!) */ + memcpy (&utc, ptm, sizeof (utc)); + return (compute_tz (t, &utc)); +} + +/* converts struct tm to time_t, but does not take the local timezone into + account unless ``local'' is nonzero */ +time_t mutt_mktime (struct tm *t, int local) +{ + time_t g; + + static int AccumDaysPerMonth[12] = { + 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 + }; + + /* Compute the number of days since January 1 in the same year */ + g = AccumDaysPerMonth [t->tm_mon % 12]; + + /* The leap years are 1972 and every 4. year until 2096, + * but this algoritm will fail after year 2099 */ + g += t->tm_mday; + if ((t->tm_year % 4) || t->tm_mon < 2) + g--; + t->tm_yday = g; + + /* Compute the number of days since January 1, 1970 */ + g += (t->tm_year - 70) * 365; + g += (t->tm_year - 69) / 4; + + /* Compute the number of hours */ + g *= 24; + g += t->tm_hour; + + /* Compute the number of minutes */ + g *= 60; + g += t->tm_min; + + /* Compute the number of seconds */ + g *= 60; + g += t->tm_sec; + + if (local) + g -= compute_tz (g, t); + + return (g); +} + +/* Return 1 if month is February of leap year, else 0 */ +static int isLeapYearFeb (struct tm *tm) +{ + if (tm->tm_mon == 1) + { + int y = tm->tm_year + 1900; + return (((y & 3) == 0) && (((y % 100) != 0) || ((y % 400) == 0))); + } + return (0); +} + +void mutt_normalize_time (struct tm *tm) +{ + static char DaysPerMonth[12] = { + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 + }; + int nLeap; + + while (tm->tm_sec < 0) + { + tm->tm_sec += 60; + tm->tm_min--; + } + while (tm->tm_sec >= 60) + { + tm->tm_sec -= 60; + tm->tm_min++; + } + while (tm->tm_min < 0) + { + tm->tm_min += 60; + tm->tm_hour--; + } + while (tm->tm_min >= 60) + { + tm->tm_min -= 60; + tm->tm_hour++; + } + while (tm->tm_hour < 0) + { + tm->tm_hour += 24; + tm->tm_mday--; + } + while (tm->tm_hour >= 24) + { + tm->tm_hour -= 24; + tm->tm_mday++; + } + /* use loops on NNNdwmy user input values? */ + while (tm->tm_mon < 0) + { + tm->tm_mon += 12; + tm->tm_year--; + } + while (tm->tm_mon >= 12) + { + tm->tm_mon -= 12; + tm->tm_year++; + } + while (tm->tm_mday <= 0) + { + if (tm->tm_mon) + tm->tm_mon--; + else + { + tm->tm_mon = 11; + tm->tm_year--; + } + tm->tm_mday += DaysPerMonth[tm->tm_mon] + isLeapYearFeb (tm); + } + while (tm->tm_mday > (DaysPerMonth[tm->tm_mon] + + (nLeap = isLeapYearFeb (tm)))) + { + tm->tm_mday -= DaysPerMonth[tm->tm_mon] + nLeap; + if (tm->tm_mon < 11) + tm->tm_mon++; + else + { + tm->tm_mon = 0; + tm->tm_year++; + } + } +} diff --git a/depcomp b/depcomp new file mode 100644 index 0000000..51606f8 --- /dev/null +++ b/depcomp @@ -0,0 +1,464 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 Free Software Foundation, Inc. + +# 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, 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., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. This file always lives in the current directory. + # Also, the AIX compiler puts `$object:' at the start of each line; + # $object doesn't have directory information. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Must come before tru64. + + # Intel's C compiler understands `-MD -MF file'. However + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..09165a2 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,169 @@ +# $Id: Makefile.in,v 3.2 2002/12/07 14:15:01 roessler Exp $ + +SHELL = /bin/sh + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +libdir = @libdir@ +mandir = @mandir@ +srcdir = @srcdir@ +docdir = @docdir@ +includedir = @includedir@ +top_srcdir=@top_srcdir@ +top_builddir = .. +VPATH = @srcdir@ +@SET_MAKE@ + +INSTALL = @INSTALL@ +CC = @CC@ +CPP = @CPP@ +XCPPFLAGS = -I. @CPPFLAGS@ +CFLAGS = @CFLAGS@ $(XCPPFLAGS) +LDFLAGS = @LDFLAGS@ +subdir = doc + +CPPFLAGS = @CPPFLAGS@ + +DEFS = -DSYSCONFDIR=\"$(sysconfdir)\" -DBINDIR=\"$(bindir)\" -DHAVE_CONFIG_H=1 +INCLUDES = -I. -I.. -I$(includedir) -I$(top_srcdir) + +MAKEDOC_CPP = $(CPP) $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C + +DISTFILES = Makefile.in dotlock.man \ + muttbug.man \ + mutt.man \ + PGP-Notes.txt \ + applying-patches.txt \ + devel-notes.txt \ + manual.txt \ + muttrc.man.head \ + muttrc.man.tail \ + muttrc.man \ + mbox.man \ + manual.sgml.head \ + manual.sgml.tail \ + manual.sgml \ + manual.html \ + stamp-doc-sgml \ + stamp-doc-man \ + instdoc.sh.in \ + patch-notes.txt \ + smime-notes.txt + +srcdir_DOCFILES = PGP-Notes.txt applying-patches.txt \ + devel-notes.txt patch-notes.txt smime-notes.txt + + +topsrcdir_DOCFILES = COPYRIGHT GPL INSTALL ChangeLog \ + ChangeLog.old \ + README NEWS TODO README.SECURITY README.SSL + +all: muttrc.man try-html try-txt + +try-html: ../makedoc + test -f manual.html || $(MAKE) manual.html || cp $(srcdir)/manual*.html ./ + +try-txt: ../makedoc + test -f manual.txt || $(MAKE) manual.txt || cp $(srcdir)/manual.txt ./ + +install: all instdoc + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/man1 + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/man5 + ./instdoc $(srcdir)/mutt.man $(DESTDIR)$(mandir)/man1/mutt.1 + ./instdoc $(srcdir)/muttbug.man $(DESTDIR)$(mandir)/man1/flea.1 + echo ".so $(mandir)/man1/flea.1" > $(DESTDIR)$(mandir)/man1/muttbug.1 + ./instdoc $(srcdir)/dotlock.man \ + $(DESTDIR)$(mandir)/man1/mutt_dotlock.1 + ./instdoc muttrc.man $(DESTDIR)$(mandir)/man5/muttrc.5 + ./instdoc $(srcdir)/mbox.man $(DESTDIR)$(mandir)/man5/mbox.5 + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir) + for f in $(srcdir_DOCFILES) ; do \ + $(INSTALL) -m 644 $(srcdir)/$$f $(DESTDIR)$(docdir) ; \ + done + for f in $(topsrcdir_DOCFILES) ; do \ + $(INSTALL) -m 644 $(top_srcdir)/$$f $(DESTDIR)$(docdir) ; \ + done + $(INSTALL) -m 644 manual.txt $(DESTDIR)$(docdir) || true + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(docdir)/html + for file in manual*.html ; do \ + $(INSTALL) -m 644 $$file $(DESTDIR)$(docdir)/html/ || true ;\ + done + +uninstall: + -rm -f $(DESTDIR)$(mandir)/man1/mutt.1 + -rm -f $(DESTDIR)$(mandir)/man1/mutt_dotlock.1 + -rm -f $(DESTDIR)$(mandir)/man5/muttrc.5 + -rm -rf $(DESTDIR)$(docdir) + +check: +manual.txt: manual.sgml + if sgml2txt -c latin manual ; then \ + uniq < manual.txt | expand > _manual.txt ; \ + rm manual.txt ; \ + mv _manual.txt manual.txt ;\ + fi + +manual.html: manual.sgml + sgml2html manual || true + +manual.ps: manual.sgml + sgml2latex --output=ps manual || true + +clean: + rm -f *~ *.html *.orig *.rej stamp-doc-sgml stamp-doc-man *.ps + +clean-real: + rm -f manual.txt + +maintainer-clean: clean clean-real distclean + +distclean: clean + rm -f Makefile + +Makefile: Makefile.in ../config.status + cd .. \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +instdoc: instdoc.sh + cat instdoc.sh > instdoc + chmod a+x instdoc + +instdoc.sh: instdoc.sh.in ../config.status + cd .. \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: Makefile $(DISTFILES) + for file in $(DISTFILES) ; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + for file in $(srcdir)/manual-*.html ; do \ + ln $$file $(distdir) 2> /dev/null \ + || cp -p $$file $(distdir) ; \ + done + +../makedoc: $(top_srcdir)/makedoc.c + (cd .. && $(MAKE) makedoc) + +# hack around autoconf mixing up patterns. +at = @ + +update-doc: ../makedoc stamp-doc-sgml stamp-doc-man manual.txt manual.html + +muttrc.man stamp-doc-man: ../makedoc $(top_srcdir)/init.h muttrc.man.head muttrc.man.tail + $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -m | \ + cat $(srcdir)/muttrc.man.head - $(srcdir)/muttrc.man.tail\ + > muttrc.man + touch stamp-doc-man + +manual.sgml stamp-doc-sgml: ../makedoc $(top_srcdir)/init.h manual.sgml.head manual.sgml.tail $(top_srcdir)/VERSION + ( sed -e "s/$(at)VERSION$(at)/`cat $(top_srcdir)/VERSION`/" $(srcdir)/manual.sgml.head ;\ + $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -s ) | \ + cat - $(srcdir)/manual.sgml.tail > manual.sgml + touch stamp-doc-sgml + diff --git a/doc/PGP-Notes.txt b/doc/PGP-Notes.txt new file mode 100644 index 0000000..c45d8c2 --- /dev/null +++ b/doc/PGP-Notes.txt @@ -0,0 +1,271 @@ +$Id: PGP-Notes.txt,v 3.0 2002/01/24 13:35:07 roessler Exp $ + + USING PGP FROM WITHIN MUTT + + +WARNING: The configuration interface has completely changed as of + 0.96.3! + + + + USERS' GUIDE + + +How do I use mutt with PGP, PGP5, or GnuPG? +------------------------------------------- + +Go to the contrib subdirectory of the source tree. You'll find +three files there, pgp2.rc, pgp5.rc, and gpg.rc. These files +contain ready-to-use configurations for using mutt with pgp2, pgp5, +and gpg. + +Include one of these files with your ~/.muttrc, and things should +work out fine. + +You may wish to verify that all paths and the language parameters +given to the PGP binaries match your needs. + + + +Frequently Asked Questions and Tips +----------------------------------- + +Q: "People are sending PGP messages which mutt doesn't + recognize. What can I do?" + +The new way is to leave headers alone and use mutt's +check-traditional-pgp function, which can detect PGP messages at +run-time, and adjust content-types. + +The old way is to configure your mail filter so it fixes headers: + +Add the following lines to your ~/.procmailrc (you are +using procmail, aren't you?): + + ------------------------------ + +## +## PGP +## + +:0 +* !^Content-Type: message/ +* !^Content-Type: multipart/ +* !^Content-Type: application/pgp +{ + :0 fBw + * ^-----BEGIN PGP MESSAGE----- + * ^-----END PGP MESSAGE----- + | formail \ + -i "Content-Type: application/pgp; format=text; x-action=encrypt" + + :0 fBw + * ^-----BEGIN PGP SIGNED MESSAGE----- + * ^-----BEGIN PGP SIGNATURE----- + * ^-----END PGP SIGNATURE----- + | formail \ + -i "Content-Type: application/pgp; format=text; x-action=sign" +} + + + ------------------------------ + +For users of maildrop, "Mark Weinem" + suggests the following recipe: + + ------------------------------ + +BPGPM="-----BEGIN PGP MESSAGE-----" +EPGPM="-----END PGP MESSAGE-----" +BPGPS="-----BEGIN PGP SIGNATURE-----" +EPGPS="-----END PGP SIGNATURE-----" + +if (!/^Content-Type: message/ && !/^Content-Type: multipart/ \ + && !/^Content-Type: application\/pgp/) +{ +if (/^$BPGPM/:b && /^$EPGPM/:b) + xfilter "reformail -A 'Content-Type: application/pgp; format=text; \ + x-action=encrypt'" + +if (/^$BPGPS/:b && /^$EPGPS/:b) + xfilter "reformail -A 'Content-Type: application/pgp; format=text; \ + x-action=sign'" +} + + ------------------------------ + + + +Q: "I don't like that PGP/MIME stuff, but want to use the + old way of PGP-signing my mails. Can't you include + that with mutt?" + +The old answer to this question used to be this: + + No. Application/pgp is not really suited to a world with MIME, + non-textual body parts and similar things. Anyway, if you really + want to generate these old-style attachments, include the + following macro in your ~/.muttrc (line breaks for readability, + this is actually one line): + + macro compose S "Fpgp +verbose=0 -fast + +clearsig=on\ny^T^Uapplication/pgp; format=text; + x-action=sign\n" + + +There's a new answer, though: Set the $pgp_create_traditional +configuration variable (it's a quad-option) to something different +from "no" (that's the default). Mutt will then try to use +application/pgp whereever it makes sense. In particular, it does +not make any sense with multiparts, or non-ASCII or non-text bodies. +In all other cases, PGP/MIME is used unconditionally. + +Note that application/pgp is still strongly deprecated. + + + +Q: "I don't like all the ^Gs and various other verbosity + PGP is presenting me with." + +Roland Rosenfeld has found a quite +elegant solution to this problem: PGP has some pretty good foreign +language support. So we just introduce a language called "mutt" +which contains empty strings for the messages we don't want to see. +To use this, copy either language.txt or language50.txt (depending +on what PGP version you are using) to your $PGPPATH. Make sure the +PGP command formats pass "+language=pgp" to all the PGP binaries +(but not to pgpring!). + +For PGP 2.6, a German version called "muttde" is available +as well. + + +Q: "My PGP signatures are being invalidated. BTW, I'm using Courier + MTA." + +The author of the Courier MTA believes that the standard specifying +multipart/signed is broken. For that reason, he has choosen to +implement his MTA in a way which does not assure that +multipart/signed body parts are left untouched. + +We suggest that you abandon courier and change to sendmail, postfix, +or exim. + + + + BACKGROUND + + +Auxiliary Programs +------------------ + +Mutt needs two auxiliary programs for its PGP support: pgpewrap and +pgpring. + + +1. pgpring + +pgpring is a key ring dumper. It extracts information from PGP's +binary key ring and emits it in an (almost) readable output format +understood by mutt's key selection routines. This output format +mimics the one used by the GNU Privacy Guard (GPG). + +You'll need this program with PGP 2 and PGP 5. + +Command line options: + + -k Dump the contents of the key ring specified + as an argument to -k. + + -2, -5 Use the default key ring for PGP 2 or 5, + respectively. + + -s Dump the secret key ring. + + + +2. pgpewrap + +This is a little C program which does some command line munging: The +first argument is a command to be executed. When pgpewrap +encounters a "--" (dash-dash) argument, it will interpret the next +argument as a prefix which is put in front of all following +arguments. + +Example: + + pgpewrap pgpe file -- -r a b c + +will execute: + + pgpe file -r a -r b -r c + +This script is needed with PGP 5 and with GPG, since their command +line interfaces can't be properly served by mutt's format mechanism. + + + +The Configuration Interface +--------------------------- + +As usual within mutt, the configuration interface for the PGP +commands relies on printf-like formats. For all PGP commands, the +following %-sequences are defined. + + %p The empty string when no passphrase is needed, + the string "PGPPASSFD=0" if one is needed. + + This is mostly used in conditional % sequences. + + %f Most PGP commands operate on a single file or a file + containing a message. %f expands to this file's name. + + %s When verifying signatures, there is another temporary file + containing the detached signature. %s expands to this + file's name. + + %a In "signing" contexts, this expands to the value of the + configuration variable $pgp_sign_as. You probably need to + use this within a conditional % sequence. + + %r In many contexts, mutt passes key IDs to pgp. %r expands to + a list of key IDs. + +The following command formats are defined: + + $pgp_decode_command Decode application/pgp messages. This + command operates with and without pass phrases. + + $pgp_verify_command Verify a PGP/MIME signature. + + $pgp_decrypt_command Decrypt a PGP/MIME encrypted MIME body. + This command always gets a pass phrase. + + $pgp_sign_command Sign a PGP/MIME body. This command always + gets a pass phrase. + + + $pgp_encrypt_sign_command Encrypt and sign a MIME body. This + command always gets a pass phrase. + + $pgp_encrypt_only_command Encrypt a MIME body, but don't sign it. + + $pgp_import_command Import PGP keys from a file. + + $pgp_export_command Export PGP keys to a file. The output must + be ASCII armored. + + $pgp_verify_key_command Check a public key. This is used from the + key selection menu. + + $pgp_list_secring_command List the secret keys matching some hints + given in %r. + + $pgp_list_pubring_command List the public keys matching some hints + given in %r. + +The passphrase is always passed on stdin; all commands must send +their output to stdout and stderr. + + + diff --git a/doc/applying-patches.txt b/doc/applying-patches.txt new file mode 100644 index 0000000..5379ee5 --- /dev/null +++ b/doc/applying-patches.txt @@ -0,0 +1,25 @@ +Subject: Applying patches +From: Thomas Roessler +Date: Thu, 8 Oct 1998 14:32:53 +0200 + +When applying patches to mutt, you may encounter strange error +messages spit out by programs like aclocal, autoconf, automake. +This will happen if your machine has a partial build environment +(see devel-notes.txt for a description of what's needed for mutt +development): Mutt has detected changes to some of the "meta source +files" like configure.in and tries to rebuild other files such as +aclocal.m4 or Makefile.in based on these changes; this will fail if +your build environment is not complete. + +If you encounter this kind of problem, touching the following files +after applying patches may help: + + Makefile.in + config.h.in + configure + aclocal.m4 + +After doing so, simply type "make"; the dependencies should take +care of the necessary other re-building (this may quite well include +a re-running of ./configure). +$Id: applying-patches.txt,v 3.0 2002/01/24 13:35:07 roessler Exp $ diff --git a/doc/devel-notes.txt b/doc/devel-notes.txt new file mode 100644 index 0000000..616e7f0 --- /dev/null +++ b/doc/devel-notes.txt @@ -0,0 +1,178 @@ +Subject: Developers' notes +From: Thomas Roessler +Date: Tue, 9 May 2000 19:48:08 +0200 + + +Required tools +-------------- + +If you are planning to hack on mutt, please subscribe to the +mutt-dev mailinglist (mutt-dev@mutt.org, contact +majordomo@mutt.org). Announcements about recent development +versions go to that mailing list, as go technical discussions and +patches. + +You'll need several GNU development utilities for working on mutt: + +- automake + +- autoconf + +- autoheader + +- The i18n stuff requires GNU gettext. See intl/VERSION for the + version we are currently relying on. Please note that using + gettext-0.10 will most probably not work - get the latest test + release from alpha.gnu.org, it's the recommended version of + gettext anyway. + + If you are experiencing problems with unknown "dcgettext" symbols, + the autoconf/automake macros from your gettext package are broken. + Apply the following patch to that macro file (usually found under + /usr/share/aclocal/gettext.m4): + +--- gettext.m4.bak Thu Jul 2 18:46:08 1998 ++++ gettext.m4 Mon Oct 5 23:32:54 1998 +@@ -46,12 +46,13 @@ + + if test "$gt_cv_func_gettext_libc" != "yes"; then + AC_CHECK_LIB(intl, bindtextdomain, +- [AC_CACHE_CHECK([for gettext in libintl], +- gt_cv_func_gettext_libintl, +- [AC_CHECK_LIB(intl, gettext, +- gt_cv_func_gettext_libintl=yes, +- gt_cv_func_gettext_libintl=no)], ++ [AC_CHECK_LIB(intl, gettext, ++ gt_cv_func_gettext_libintl=yes, + gt_cv_func_gettext_libintl=no)]) ++ fi ++ ++ if test "$gt_cv_func_gettext_libintl" = "yes" ; then ++ LIBS="-lintl $LIBS" + fi + + if test "$gt_cv_func_gettext_libc" = "yes" \ + + +- GNU make may be needed for the dependency tricks + + +Getting started from CVS +------------------------ + +Once you've checked out a copy of the source from CVS, you'll need to +run the script called 'prepare' that is in the root directory. The +script does all the automake/autoconf magic that needs to be done with +a fresh checkout. + + +A word about warnings +--------------------- + +Mutt's default build process sets some pretty restrictive compiler +flags which may lead to lots of warnings. Generally, warnings are +something which should be eliminated. + +Nevertheless, the code in intl/ is said to generate some warnings with +the compiler settings we usually rely upon. This code is not +maintained by the mutt developpers, so please redirect any comments to +the GNU gettext library's developpers. + + +Style Guide +----------- + +- global functions should have the prefix "mutt_". All + other functions should be declared "static". + +- avoid global vars where possible. If one is required, + try to contain it to a single source file and declare it + "static". Global vars should have the first letter of + each word capitilized, and no underscores should be used + (e.g., MailGid, LastFolder, MailDir). + +- re-use code as much as possible. There are a lot of + "library" functions. One of the biggest causes of bloat + in ELM and PINE is the tremendous duplication of code... + Help keep Mutt small! + +- when adding new options, make the old behaviour the + default. + +- try to keep mutt as portable as possible. + + +Documentation +------------- + +Please document your changes. Note that there are several places +where you may have to add documentation: + +- doc/manual.sgml.{head,tail} contain The Manual. + +- doc/muttrc.man.{head,tail} contain an abriged version of The + Manual in nroff format (see man(7)), which deals with + configuration file commands. + +Configuration _variables_ are documented directly in init.h. Note +that this includes documentation for possibly added format flags! + +The parts of The Manual and the muttrc manual page dealing with +these variables, and the global Muttrc, are generated automatically +from that documentation. To start this process, type "make +update-doc" in the top-level source directory. + +Note that you may have to update the makedoc utility (makedoc.c) +when adding new data types to init.h. + +More precisely, variable name, type, and default value are directly +extracted from the initializer for the MuttVars array. Documentation +is exepected in special comments which _follow_ the initializer. +For a line to be included with the documentation, it must (after, +possibly, some white space) begin with with either "/**" or "**". +Any following white space is ignored. The rest of the line is +expected to be plain text, with some formatting instructions roughly +similar to [ntg]roff: + + - \fI switches to italics + + - \fB switches to boldface + + - \fP switches to normal display + + - \(as can be used to represent an asterisk (*). This is intended + to help avoiding character sequences such as /* or */ inside + comments. + + - \(rs can be used to represent a backslash (\). This is intended + to help avoiding poblems when trying to represent any of the \ + sequences used by makedoc. + + - .dl on a line starts a "definition list" environment (name taken + from HTML) where terms and definitions alternate. + + - .dt marks a term in a definition list. + + - .dd marks a definition in a definition list. + + - .de on a line finishes a definition list environment. + + - .ts on a line starts a "verbose tscreen" environment (name taken from + SGML). Please try to keep lines inside such an environment + short; a length of abut 40 characters should be ok. This is + necessary to avoid a really bad-looking muttrc (5) manual page. + + - .te on a line finishes this environment. + + - .pp on a line starts a paragraph. + + - $word will be converted to a reference to word, where appropriate. + Note that $$word is possible as well. + Use $$$ to get a literal $ without making a reference. + + - '. ' in the beginning of a line expands to two space characters. + This is used to protect indentations in tables. + +Do _not_ use any other SGML or nroff formatting instructions here! + +$Id: devel-notes.txt,v 3.0 2002/01/24 13:35:07 roessler Exp $ diff --git a/doc/dotlock.man b/doc/dotlock.man new file mode 100644 index 0000000..e8a4ce6 --- /dev/null +++ b/doc/dotlock.man @@ -0,0 +1,150 @@ +.\" -*-nroff-*- +.\" +.\" +.\" Copyright (C) 1996-8 Michael R. Elkins +.\" Copyright (C) 1998-9 Thomas Roessler +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +.\" +.TH dotlock 1 "AUGUST 1999" Unix "User Manuals" +.SH NAME +mutt_dotlock \- Lock mail spool files. +.SH SYNOPSIS +.PP +.B mutt_dotlock +[-t|-f|-u|-d] [-p] [-r \fIretries\fP] \fIfile\fP +.SH DESCRIPTION +.PP +.B mutt_dotlock +implements the traditional mail spool file locking method: +To lock \fIfile\fP, a file named \fIfile\fP.lock is +created. The program operates with group mail privileges +if necessary. +.SH OPTIONS +.PP +.IP "-t" +Just try. +.B mutt_dotlock +won't actually lock a file, but inform the invoking +process if it's at all possible to lock \fIfile\fP. +.IP "-f" +Force the lock. If another process holds a lock on +\fIfile\fP longer than a certain amount of time, +.B mutt_dotlock +will break that lock by removing the lockfile. +.IP "-u" +Unlock. +.B mutt_dotlock +will remove \fIfile\fP.lock. +.IP "-d" +Delete. +.B mutt_dotlock +will lock \fIfile\fP, remove it if it has length 0, and afterwards +remove \fIfile\fP.lock. +.IP "-p" +Use privileges. If given this option, +.B mutt_dotlock +will operate with group mail privileges when creating and +deleting lock files. +.IP "-r \fIretries\fP" +This command line option tells +.B mutt_dotlock +to try locking +\fIretries\fP times before giving up or (if invoked with +the +.B -f +command line option) break a lock. The default value is 5. +.B mutt_dotlock +waits one second between successive locking attempts. +.SH FILES +.PP +.IP "\fIfile\fP.lock" +The lock file +.B mutt_dotlock +generates. +.SH SEE ALSO +.PP +.BR fcntl (2), +.BR flock (2), +.BR lockfile (1), +.BR mutt (1) +.SH DIAGNOSTICS +.PP +.B mutt_dotlock +gives all diagnostics in its return values: +.TP +.B "0 \- DL_EX_OK" +The program was successful. +.TP +.B "1 \- DL_EX_ERROR" +An unspecified error such as bad command line parameters, +lack of system memory and the like has occured. +.TP +.B "3 \- DL_EX_EXIST" +The +user wants to lock a file which has been locked by +another process already. If +.B mutt_dotlock +is invoked with the +.B -f +command line option, +.B mutt_dotlock +won't generate this error, but break other processes' +locks. +.TP +.B "4 \- DL_EX_NEED_RPIVS" +This return value only occurs if +.B mutt_dotlock +has been invoked +with the +.B -t +command line option. It means that +.B mutt_dotlock +will have to use its group mail privileges to lock +\fIfile\fP. +.TP +.B "5 \- DL_EX_IMPOSSIBLE" +This return value only occurs if +.B mutt_dotlock +has been invoked with the +.B -t +command line option. It means that +.B mutt_dotlock +is unable to lock \fIfile\fP even with group mail +privileges. +.SH NOTES +.PP +.B mutt_dotlock +tries to implement an NFS-safe dotlocking method which was +borrowed from +.B lockfile +(1). +.PP +If the user can't open \fIfile\fP for reading with his +normal privileges, +.B mutt_dotlock +will return the +.B DL_EX_ERROR +exit value to avoid certain attacks against other users' +spool files. The code carefully avoids race conditions +when checking permissions; for details of all this see the +comments in dotlock.c. +.SH HISTORY +.PP +.B mutt_dotlock +is part of the Mutt mail user agent package. It has been +created to avoid running mutt with group mail privileges. +.SH AUTHOR +Thomas Roessler diff --git a/doc/instdoc.sh b/doc/instdoc.sh new file mode 100644 index 0000000..301f493 --- /dev/null +++ b/doc/instdoc.sh @@ -0,0 +1,24 @@ +#!/bin/sh -- + +prefix=/usr/local +exec_prefix=${prefix} +bindir=${exec_prefix}/bin +libdir=${exec_prefix}/lib +mandir=${prefix}/man +srcdir=. +docdir=/usr/local/doc/mutt +includedir=${prefix}/include +top_srcdir=.. +top_builddir=.. + +SOURCE="$1" +TARGET="$2" + + +rm -f "$TARGET" + +sed -e "s;/usr/local/bin/;$bindir/;g" \ + -e "s;/usr/local/doc/mutt/;$docdir/;g" \ + "$SOURCE" > $TARGET + +chmod 644 "$TARGET" diff --git a/doc/instdoc.sh.in b/doc/instdoc.sh.in new file mode 100644 index 0000000..a853f1f --- /dev/null +++ b/doc/instdoc.sh.in @@ -0,0 +1,24 @@ +#!/bin/sh -- + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +libdir=@libdir@ +mandir=@mandir@ +srcdir=@srcdir@ +docdir=@docdir@ +includedir=@includedir@ +top_srcdir=@top_srcdir@ +top_builddir=.. + +SOURCE="$1" +TARGET="$2" + + +rm -f "$TARGET" + +sed -e "s;/usr/local/bin/;$bindir/;g" \ + -e "s;/usr/local/doc/mutt/;$docdir/;g" \ + "$SOURCE" > $TARGET + +chmod 644 "$TARGET" diff --git a/doc/manual.sgml b/doc/manual.sgml new file mode 100644 index 0000000..0e71676 --- /dev/null +++ b/doc/manual.sgml @@ -0,0 +1,7400 @@ + + +
+ +The Mutt E-Mail Client +<author>by Michael Elkins <htmlurl url="mailto:me@cs.hmc.edu" name="<me@cs.hmc.edu>"> +<date>version 1.5.6 +<abstract> +``All mail clients suck. This one just sucks less.'' -me, circa 1995 +</abstract> + +<toc> + +<sect>Introduction +<p> +<bf/Mutt/ is a small but very powerful text-based MIME mail client. Mutt is +highly configurable, and is well suited to the mail power user with advanced +features like key bindings, keyboard macros, mail threading, regular +expression searches and a powerful pattern matching language for selecting +groups of messages. + +<sect1>Mutt Home Page +<p> +<htmlurl url="http://www.mutt.org/" +name="http://www.mutt.org/"> + +<sect1>Mailing Lists +<p> +To subscribe to one of the following mailing lists, send a message with the +word <em/subscribe/ in the body to +<tt/list-name/<em/-request/<tt/@mutt.org/. + +<itemize> +<item><htmlurl url="mailto:mutt-announce-request@mutt.org" +name="mutt-announce@mutt.org"> -- low traffic list for announcements +<item><htmlurl url="mailto:mutt-users-request@mutt.org" +name="mutt-users@mutt.org"> -- help, bug reports and feature requests +<item><htmlurl url="mailto:mutt-dev-request@mutt.org" name="mutt-dev@mutt.org"> -- development mailing list +</itemize> + +<bf/Note:/ all messages posted to <em/mutt-announce/ are automatically +forwarded to <em/mutt-users/, so you do not need to be subscribed to both +lists. + +<sect1>Software Distribution Sites +<p> +<itemize> +<item><htmlurl url="ftp://ftp.mutt.org/mutt/" +name="ftp://ftp.mutt.org/mutt/"> +</itemize> +<p> +For a list of mirror sites, please refer to <htmlurl +url="http://www.mutt.org/download.html" +name="http://www.mutt.org/download.html">. + +<sect1>IRC +<p> +Visit channel <em/#mutt/ on <htmlurl +url="http://www.openprojects.net" name="OpenProjects.Net +(www.openprojects.net)"> to chat with other people interested in Mutt. + +<sect1>USENET +<p> +See the newsgroup <htmlurl url="news:comp.mail.mutt" name="comp.mail.mutt">. + +<sect1>Copyright +<p> +Mutt is Copyright (C) 1996-2000 Michael R. Elkins +<me@cs.hmc.edu> and others + +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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + +<sect>Getting Started +<p> + +This section is intended as a brief overview of how to use Mutt. There are +many other features which are described elsewhere in the manual. There +is even more information available in the Mutt FAQ and various web +pages. See the <htmlurl url="http://www.mutt.org/mutt/" +name="Mutt Page"> for more details. + +The keybindings described in this section are the defaults as distributed. +Your local system administrator may have altered the defaults for your site. +You can always type ``?'' in any menu to display the current bindings. + +The first thing you need to do is invoke mutt, simply by typing mutt +at the command line. There are various command-line options, see +either the mutt man page or the <ref id="commandline" name="reference">. + +<sect1>Moving Around in Menus +<p> + +Information is presented in menus, very similar to ELM. Here is a table +showing the common keys used to navigate menus in Mutt. + +<tscreen><verb> +j or Down next-entry move to the next entry +k or Up previous-entry move to the previous entry +z or PageDn page-down go to the next page +Z or PageUp page-up go to the previous page += or Home first-entry jump to the first entry +* or End last-entry jump to the last entry +q quit exit the current menu +? help list all keybindings for the current menu +</verb></tscreen> + +<sect1>Editing Input Fields<label id="editing"> +<p> +Mutt has a builtin line editor which is used as the primary way to input +textual data such as email addresses or filenames. The keys used to move +around while editing are very similar to those of Emacs. + +<tscreen><verb> +^A or <Home> bol move to the start of the line +^B or <Left> backward-char move back one char +Esc B backward-word move back one word +^D or <Delete> delete-char delete the char under the cursor +^E or <End> eol move to the end of the line +^F or <Right> forward-char move forward one char +Esc F forward-word move forward one word +<Tab> complete complete filename or alias +^T complete-query complete address with query +^K kill-eol delete to the end of the line +ESC d kill-eow delete to the end ot the word +^W kill-word kill the word in front of the cursor +^U kill-line delete entire line +^V quote-char quote the next typed key +<Up> history-up recall previous string from history +<Down> history-down recall next string from history +<BackSpace> backspace kill the char in front of the cursor +Esc u upcase-word convert word to upper case +Esc l downcase-word convert word to lower case +Esc c capitalize-word capitalize the word +^G n/a abort +<Return> n/a finish editing +</verb></tscreen> + +You can remap the <em/editor/ functions using the <ref id="bind" name="bind"> +command. For example, to make the <em/Delete/ key delete the character in +front of the cursor rather than under, you could use + +<tt/bind editor <delete> backspace/ + +<sect1>Reading Mail - The Index and Pager +<p> + +Similar to many other mail clients, there are two modes in which mail is +read in Mutt. The first is the index of messages in the mailbox, which is +called the ``index'' in Mutt. The second mode is the display of the +message contents. This is called the ``pager.'' + +The next few sections describe the functions provided in each of these +modes. + +<sect2>The Message Index +<p> + +<tscreen><verb> +c change to a different mailbox +ESC c change to a folder in read-only mode +C copy the current message to another mailbox +ESC C decode a message and copy it to a folder +ESC s decode a message and save it to a folder +D delete messages matching a pattern +d delete the current message +F mark as important +l show messages matching a pattern +N mark message as new +o change the current sort method +O reverse sort the mailbox +q save changes and exit +s save-message +T tag messages matching a pattern +t toggle the tag on a message +ESC t toggle tag on entire message thread +U undelete messages matching a pattern +u undelete-message +v view-attachments +x abort changes and exit +<Return> display-message +<Tab> jump to the next new message +@ show the author's full e-mail address +$ save changes to mailbox +/ search +ESC / search-reverse +^L clear and redraw the screen +^T untag messages matching a pattern +</verb></tscreen> + +<sect3>Status Flags +<p> + +In addition to who sent the message and the subject, a short summary of +the disposition of each message is printed beside the message number. +Zero or more of the following ``flags'' may appear, which mean: + +<p> +<descrip> +<tag/D/ message is deleted (is marked for deletion) +<tag/d/ message have attachments marked for deletion +<tag/K/ contains a PGP public key +<tag/N/ message is new +<tag/O/ message is old +<tag/P/ message is PGP encrypted +<tag/r/ message has been replied to +<tag/S/ message is signed, and the signature is succesfully verified +<tag/s/ message is signed +<tag/!/ message is flagged +<tag/*/ message is tagged +</descrip> + +Some of the status flags can be turned on or off using +<itemize> +<item><bf/set-flag/ (default: w) +<item><bf/clear-flag/ (default: W) +</itemize> + +<p> +Furthermore, the following flags reflect who the message is addressed +to. They can be customized with the +<ref id="to_chars" name="$to_chars"> variable. + +<p> +<descrip> +<tag/+/ message is to you and you only +<tag/T/ message is to you, but also to or cc'ed to others +<tag/C/ message is cc'ed to you +<tag/F/ message is from you +<tag/L/ message is sent to a subscribed mailing list +</descrip> + +<sect2>The Pager +<p> + +By default, Mutt uses its builtin pager to display the body of messages. +The pager is very similar to the Unix program <em/less/ though not nearly as +featureful. + +<tscreen><verb> +<Return> go down one line +<Space> display the next page (or next message if at the end of a message) +- go back to the previous page +n search for next match +S skip beyond quoted text +T toggle display of quoted text +? show keybindings +/ search for a regular expression (pattern) +ESC / search backwards for a regular expression +\ toggle search pattern coloring +^ jump to the top of the message +</verb></tscreen> + +In addition, many of the functions from the <em/index/ are available in +the pager, such as <em/delete-message/ or <em/copy-message/ (this is one +advantage over using an external pager to view messages). + +Also, the internal pager supports a couple other advanced features. For +one, it will accept and translate the ``standard'' nroff sequences for +bold and underline. These sequences are a series of either the letter, +backspace (^H), the letter again for bold or the letter, backspace, +``_'' for denoting underline. Mutt will attempt to display these +in bold and underline respectively if your terminal supports them. If +not, you can use the bold and underline <ref id="color" name="color"> +objects to specify a color or mono attribute for them. + +Additionally, the internal pager supports the ANSI escape sequences for +character attributes. Mutt translates them into the correct color and +character settings. The sequences Mutt supports are: + +<p> +<tscreen><verb> +ESC [ Ps;Ps;Ps;...;Ps m +where Ps = +0 All Attributes Off +1 Bold on +4 Underline on +5 Blink on +7 Reverse video on +3x Foreground color is x +4x Background color is x + +Colors are +0 black +1 red +2 green +3 yellow +4 blue +5 magenta +6 cyan +7 white +</verb></tscreen> + +Mutt uses these attributes for handling text/enriched messages, and they +can also be used by an external <ref id="auto_view" name="autoview"> +script for highlighting purposes. <bf/Note:/ If you change the colors for your +display, for example by changing the color associated with color2 for +your xterm, then that color will be used instead of green. + +<sect2>Threaded Mode<label id="threads"> +<p> +When the mailbox is <ref id="sort" name="sorted"> by <em/threads/, there are +a few additional functions available in the <em/index/ and <em/pager/ modes. + +<tscreen><verb> +^D delete-thread delete all messages in the current thread +^U undelete-thread undelete all messages in the current thread +^N next-thread jump to the start of the next thread +^P previous-thread jump to the start of the previous thread +^R read-thread mark the current thread as read +ESC d delete-subthread delete all messages in the current subthread +ESC u undelete-subthread undelete all messages in the current subthread +ESC n next-subthread jump to the start of the next subthread +ESC p previous-subthread jump to the start of the previous subthread +ESC r read-subthread mark the current subthread as read +ESC t tag-thread toggle the tag on the current thread +ESC v collapse-thread toggle collapse for the current thread +ESC V collapse-all toggle collapse for all threads +P parent-message jump to parent message in thread +</verb></tscreen> + +<bf/Note:/ Collapsing a thread displays only the first message +in the thread and hides the others. This is useful when threads +contain so many messages that you can only see a handful of threads on +the screen. See %M in <ref id="index_format"name="$index_format">. +For example, you could use "%?M?(#%03M)&(%4l)?" in <ref +id="index_format"name="$index_format"> to optionally +display the number of hidden messages if the thread is collapsed. + +See also: <ref id="strict_threads" name="$strict_threads">. + +<sect2>Miscellaneous Functions +<p><bf/create-alias/<label id="create-alias"> (default: a)<newline> + +Creates a new alias based upon the current message (or prompts for a +new one). Once editing is complete, an <ref id="alias" name="alias"> +command is added to the file specified by the <ref id="alias_file" +name="$alias_file"> variable for future use. <bf/Note:/ +Specifying an <ref id="alias_file" name="$alias_file"> +does not add the aliases specified there-in, you must also <ref +id="source" name="source"> the file. + +<p><bf/check-traditional-pgp/<label id="check-traditional-pgp"> (default: ESC P)<newline> + +This function will search the current message for content signed or +encrypted with PGP the "traditional" way, that is, without proper +MIME tagging. Technically, this function will temporarily change +the MIME content types of the body parts containing PGP data; this +is similar to the <ref id="edit-type" name="edit-type"> function's +effect. + + +<p><bf/display-toggle-weed/<label id="display-toggle-weed"> (default: h)<newline> + +Toggles the weeding of message header fields specified by <ref id="ignore" +name="ignore"> commands. + +<p><bf/edit/<label id="edit"> (default: e)<newline> + +This command (available in the ``index'' and ``pager'') allows you to +edit the raw current message as it's present in the mail folder. +After you have finished editing, the changed message will be +appended to the current folder, and the original message will be +marked for deletion. + +<p><bf/edit-type/<label id="edit-type"><newline> +(default: ^E on the attachment menu, and in the pager and index menus; ^T on the +compose menu) + +This command is used to temporarily edit an attachment's content +type to fix, for instance, bogus character set parameters. When +invoked from the index or from the pager, you'll have the +opportunity to edit the top-level attachment's content type. On the +<ref id="attach_menu" name="attachment menu">, you can change any +attachment's content type. These changes are not persistent, and get +lost upon changing folders. + +Note that this command is also available on the <ref +id="compose_menu" name="compose menu">. There, it's used to +fine-tune the properties of attachments you are going to send. + +<p><bf/enter-command/<label id="enter-command"> (default: ``:'')<newline> + +This command is used to execute any command you would normally put in a +configuration file. A common use is to check the settings of variables, or +in conjunction with <ref id="macro" name="macros"> to change settings on the +fly. + +<p><bf/extract-keys/<label id="extract-keys"> (default: ^K)<newline> + +This command extracts PGP public keys from the current or tagged +message(s) and adds them to your PGP public key ring. + +<p><bf/forget-passphrase/<label id="forget-passphrase"> (default: +^F)<newline> + +This command wipes the passphrase(s) from memory. It is useful, if +you misspelled the passphrase. + +<p><bf/list-reply/<label id="list-reply"> (default: L)<newline> + +Reply to the current or tagged message(s) by extracting any addresses which +match the addresses given by the <ref id="lists" name="lists or subscribe"> +commands, but also honor any <tt/Mail-Followup-To/ header(s) if the +<ref id="honor_followup_to" name="$honor_followup_to"> +configuration variable is set. Using this when replying to messages posted +to mailing lists helps avoid duplicate copies being sent to the author of +the message you are replying to. + +<bf/pipe-message/<label id="pipe-message"> (default: |)<newline> + +Asks for an external Unix command and pipes the current or +tagged message(s) to it. The variables <ref id="pipe_decode" +name="$pipe_decode">, <ref id="pipe_split" +name="$pipe_split">, <ref id="pipe_sep" +name="$pipe_sep"> and <ref id="wait_key" +name="$wait_key"> control the exact behaviour of this +function. + +<bf/resend-message/<label id="resend-message"> (default: ESC e)<newline> + +With resend-message, mutt takes the current message as a template for a +new message. This function is best described as "recall from arbitrary +folders". It can conveniently be used to forward MIME messages while +preserving the original mail structure. Note that the amount of headers +included here depends on the value of the <ref id="weed" name="$weed"> +variable. + +This function is also available from the attachment menu. You can use this +to easily resend a message which was included with a bounce message +as a message/rfc822 body part. + +<bf/shell-escape/<label id="shell-escape"> (default: !)<newline> + +Asks for an external Unix command and executes it. The <ref +id="wait_key" name="$wait_key"> can be used to control +whether Mutt will wait for a key to be pressed when the command returns +(presumably to let the user read the output of the command), based on +the return status of the named command. + +<bf/toggle-quoted/<label id="toggle-quoted"> (default: T)<newline> + +The <em/pager/ uses the <ref id="quote_regexp" +name="$quote_regexp"> variable to detect quoted text when +displaying the body of the message. This function toggles the display +of the quoted material in the message. It is particularly useful when +are interested in just the response and there is a large amount of +quoted text in the way. + +<bf/skip-quoted/<label id="skip-quoted"> (default: S)<newline> + +This function will go to the next line of non-quoted text which come +after a line of quoted text in the internal pager. + +<sect1>Sending Mail +<p> + +The following bindings are available in the <em/index/ for sending +messages. + +<tscreen><verb> +m compose compose a new message +r reply reply to sender +g group-reply reply to all recipients +L list-reply reply to mailing list address +f forward forward message +b bounce bounce (remail) message +ESC k mail-key mail a PGP public key to someone +</verb></tscreen> + +Bouncing a message sends the message as is to the recipient you +specify. Forwarding a message allows you to add comments or +modify the message you are forwarding. These items are discussed +in greater detail in the next chapter <ref id="forwarding_mail" +name="``Forwarding and Bouncing Mail''">. + +Mutt will then enter the <em/compose/ menu and prompt you for the +recipients to place on the ``To:'' header field. Next, it will ask +you for the ``Subject:'' field for the message, providing a default if +you are replying to or forwarding a message. See also <ref id="askcc" +name="$askcc">, <ref id="askbcc" name="$askbcc">, <ref +id="autoedit" name="$autoedit">, <ref id="bounce" +name="$bounce">, and <ref id="fast_reply" +name="$fast_reply"> for changing how Mutt asks these +questions. + +Mutt will then automatically start your <ref id="editor" +name="$editor"> on the message body. If the <ref id="edit_headers" +name="$edit_headers"> variable is set, the headers will be at +the top of the message in your editor. Any messages you are replying +to will be added in sort order to the message, with appropriate <ref +id="attribution" name="$attribution">, <ref id="indent_string" +name="$indent_string"> and <ref id="post_indent_string" +name="$post_indent_string">. When forwarding a +message, if the <ref id="mime_forward" name="$mime_forward"> +variable is unset, a copy of the forwarded message will be included. If +you have specified a <ref id="signature" name="$signature">, it +will be appended to the message. + +Once you have finished editing the body of your mail message, you are +returned to the <em/compose/ menu. The following options are available: + +<tscreen><verb> +a attach-file attach a file +A attach-message attach message(s) to the message +ESC k attach-key attach a PGP public key +d edit-description edit description on attachment +D detach-file detach a file +t edit-to edit the To field +ESC f edit-from edit the From field +r edit-reply-to edit the Reply-To field +c edit-cc edit the Cc field +b edit-bcc edit the Bcc field +y send-message send the message +s edit-subject edit the Subject +S smime-menu select S/MIME options +f edit-fcc specify an ``Fcc'' mailbox +p pgp-menu select PGP options +P postpone-message postpone this message until later +q quit quit (abort) sending the message +w write-fcc write the message to a folder +i ispell check spelling (if available on your system) +^F forget-passphrase wipe passphrase(s) from memory +</verb></tscreen> + +<bf/Note:/ The attach-message function will prompt you for a folder to +attach messages from. You can now tag messages in that folder and they +will be attached to the message you are sending. Note that certain +operations like composing a new mail, replying, forwarding, etc. are +not permitted when you are in that folder. The %r in <ref +id="status_format" name="$status_format"> will change to +a 'A' to indicate that you are in attach-message mode. + +<sect2>Editing the message header +<p> +When editing the header of your outgoing message, there are a couple of +special features available. + +If you specify<newline> +<tt/Fcc:/ <em/filename/<newline> +Mutt will pick up <em/filename/ +just as if you had used the <em/edit-fcc/ function in the <em/compose/ menu. + +You can also attach files to your message by specifying<newline> +<tt/Attach:/ <em/filename/ [ <em/description/ ]<newline> +where <em/filename/ is the file to attach and <em/description/ is an +optional string to use as the description of the attached file. + +When replying to messages, if you remove the <em/In-Reply-To:/ field from +the header field, Mutt will not generate a <em/References:/ field, which +allows you to create a new message thread. + +Also see <ref id="edit_headers" name="edit_headers">. + +<sect2>Using Mutt with PGP + +<p> +If you want to use PGP, you can specify + +<tt/Pgp:/ [ <tt/E/ | <tt/S/ | <tt/S<id/> ] <newline> + +``E'' encrypts, ``S'' signs and +``S<id>'' signs with the given key, setting <ref +id="pgp_sign_as" name="$pgp_sign_as"> permanently. + +If you have told mutt to PGP encrypt a message, it will guide you +through a key selection process when you try to send the message. +Mutt will not ask you any questions about keys which have a +certified user ID matching one of the message recipients' mail +addresses. However, there may be situations in which there are +several keys, weakly certified user ID fields, or where no matching +keys can be found. + +In these cases, you are dropped into a menu with a list of keys from +which you can select one. When you quit this menu, or mutt can't +find any matching keys, you are prompted for a user ID. You can, as +usually, abort this prompt using <tt/^G/. When you do so, mutt will +return to the compose screen. + +Once you have successfully finished the key selection, the message +will be encrypted using the selected public keys, and sent out. + +Most fields of the entries in the key selection menu (see also <ref +id="pgp_entry_format" name="$pgp_entry_format">) +have obvious meanings. But some explanations on the capabilities, flags, +and validity fields are in order. + +The flags sequence (%f) will expand to one of the following flags: +<tscreen><verb> +R The key has been revoked and can't be used. +X The key is expired and can't be used. +d You have marked the key as disabled. +c There are unknown critical self-signature + packets. +</verb></tscreen> + +The capabilities field (%c) expands to a two-character sequence +representing a key's capabilities. The first character gives +the key's encryption capabilities: A minus sign (<bf/-/) means +that the key cannot be used for encryption. A dot (<bf/./) means that +it's marked as a signature key in one of the user IDs, but may +also be used for encryption. The letter <bf/e/ indicates that +this key can be used for encryption. + +The second character indicates the key's signing capabilities. Once +again, a ``<bf/-/'' implies ``not for signing'', ``<bf/./'' implies +that the key is marked as an encryption key in one of the user-ids, and +``<bf/s/'' denotes a key which can be used for signing. + +Finally, the validity field (%t) indicates how well-certified a user-id +is. A question mark (<bf/?/) indicates undefined validity, a minus +character (<bf/-/) marks an untrusted association, a space character +means a partially trusted association, and a plus character (<bf/+/) +indicates complete validity. + +<sect2>Sending anonymous messages via mixmaster. + +<p> +You may also have configured mutt to co-operate with Mixmaster, an +anonymous remailer. Mixmaster permits you to send your messages +anonymously using a chain of remailers. Mixmaster support in mutt is for +mixmaster version 2.04 (beta 45 appears to be the latest) and 2.03. +It does not support earlier versions or the later so-called version 3 betas, +of which the latest appears to be called 2.9b23. + +To use it, you'll have to obey certain restrictions. Most +important, you cannot use the <tt/Cc/ and <tt/Bcc/ headers. To tell +Mutt to use mixmaster, you have to select a remailer chain, using +the mix function on the compose menu. + +The chain selection screen is divided into two parts. In the +(larger) upper part, you get a list of remailers you may use. In +the lower part, you see the currently selected chain of remailers. + +You can navigate in the chain using the <tt/chain-prev/ and +<tt/chain-next/ functions, which are by default bound to the left +and right arrows and to the <tt/h/ and <tt/l/ keys (think vi +keyboard bindings). To insert a remailer at the current chain +position, use the <tt/insert/ function. To append a remailer behind +the current chain position, use <tt/select-entry/ or <tt/append/. +You can also delete entries from the chain, using the corresponding +function. Finally, to abandon your changes, leave the menu, or +<tt/accept/ them pressing (by default) the <tt/Return/ key. + +Note that different remailers do have different capabilities, +indicated in the %c entry of the remailer menu lines (see +<ref id="mix_entry_format" +name="$mix_entry_format">). Most important is +the ``middleman'' capability, indicated by a capital ``M'': This +means that the remailer in question cannot be used as the final +element of a chain, but will only forward messages to other +mixmaster remailers. For details on the other capabilities, please +have a look at the mixmaster documentation. + +<sect1>Forwarding and Bouncing Mail<label id="forwarding_mail"> +<p> + +Bouncing and forwarding let you send an existing message to recipients +that you specify. Bouncing a message uses the <ref id="sendmail" +name="sendmail"> command to send a copy to alternative addresses as if +they were the message's original recipients. Forwarding a message, on +the other hand, allows you to modify the message before it is resent +(for example, by adding your own comments). + +The following keys are bound by default: + +<tscreen><verb> +f forward forward message +b bounce bounce (remail) message +</verb></tscreen> + +Forwarding can be done by including the original message in the new +message's body (surrounded by indicating lines) or including it as a MIME +attachment, depending on the value of the <ref id="mime_forward" +name="$mime_forward"> variable. Decoding of attachments, +like in the pager, can be controlled by the <ref id="forward_decode" +name="$forward_decode"> and <ref id="mime_forward_decode" +name="$mime_forward_decode"> variables, +respectively. The desired forwarding format may depend on the content, +therefore <em/$mime_forward/ is a quadoption which, for +example, can be set to ``ask-no''. + +The inclusion of headers is controlled by the current setting of the +<ref id="weed" name="$weed"> variable, unless <ref +id="mime_forward" name="mime_forward"> is set. + +Editing the message to forward follows the same procedure as sending or +replying to a message does. + +<sect1>Postponing Mail<label id="postponing_mail"> +<p> + +At times it is desirable to delay sending a message that you have +already begun to compose. When the <em/postpone-message/ function is +used in the <em/compose/ menu, the body of your message and attachments +are stored in the mailbox specified by the <ref id="postponed" +name="$postponed"> variable. This means that you can recall the +message even if you exit Mutt and then restart it at a later time. + +Once a message is postponed, there are several ways to resume it. From the +command line you can use the ``-p'' option, or if you <em/compose/ a new +message from the <em/index/ or <em/pager/ you will be prompted if postponed +messages exist. If multiple messages are currently postponed, the +<em/postponed/ menu will pop up and you can select which message you would +like to resume. + +<bf/Note:/ If you postpone a reply to a message, the reply setting of +the message is only updated when you actually finish the message and +send it. Also, you must be in the same folder with the message you +replied to for the status of the message to be updated. + +See also the <ref id="postpone" name="$postpone"> quad-option. + +<sect1>Reading news via NNTP<label id="reading_news"> +<p> + +If compiled with ``--enable-nntp'' option, Mutt can read news from newsserver +via NNTP. You can open a newsgroup with function ``change-newsgroup'' +(default: i). Default newsserver can be obtained from <em/NNTPSERVER/ +environment variable. Like other news readers, info about subscribed +newsgroups is saved in file by <ref id="newsrc" name="$newsrc"> +variable. Article headers are cached and can be loaded from file when +newsgroup entered instead loading from newsserver. + +<sect>Configuration +<p> + +While the default configuration (or ``preferences'') make Mutt +usable right out of the box, it is often desirable to tailor Mutt to +suit your own tastes. When Mutt is first invoked, it will attempt to +read the ``system'' configuration file (defaults set by your local +system administrator), unless the ``-n'' <ref id="commandline" +name="command line"> option is specified. This file is typically +<tt>/usr/local/share/mutt/Muttrc</tt> or <tt>/etc/Muttrc</tt>. Mutt +will next look for a file named <tt>.muttrc</tt> in your home +directory. If this file does not exist and your home directory has +a subdirectory named <tt/.mutt/, mutt try to load a file named +<tt>.mutt/muttrc</tt>. + +<tt>.muttrc</tt> is the file where you will usually place your <ref + id="commands" name="commands"> to configure Mutt. + +In addition, mutt supports version specific configuration files that are +parsed instead of the default files as explained above. For instance, if +your system has a <tt/Muttrc-0.88/ file in the system configuration +directory, and you are running version 0.88 of mutt, this file will be +sourced instead of the <tt/Muttrc/ file. The same is true of the user +configuration file, if you have a file <tt/.muttrc-0.88.6/ in your home +directory, when you run mutt version 0.88.6, it will source this file +instead of the default <tt/.muttrc/ file. The version number is the +same which is visible using the ``-v'' <ref id="commandline" +name="command line"> switch or using the <tt/show-version/ key (default: +V) from the index menu. + +<sect1>Syntax of Initialization Files<label id="muttrc-syntax"> +<p> + +An initialization file consists of a series of <ref id="commands" +name="commands">. Each line of the file may contain one or more commands. +When multiple commands are used, they must be separated by a semicolon (;). +<tscreen><verb> +set realname='Mutt user' ; ignore x- +</verb></tscreen> +The hash mark, or pound sign +(``#''), is used as a ``comment'' character. You can use it to +annotate your initialization file. All text after the comment character +to the end of the line is ignored. For example, + +<tscreen><verb> +my_hdr X-Disclaimer: Why are you listening to me? # This is a comment +</verb></tscreen> + +Single quotes (') and double quotes (&dquot;) can be used to quote strings +which contain spaces or other special characters. The difference between +the two types of quotes is similar to that of many popular shell programs, +namely that a single quote is used to specify a literal string (one that is +not interpreted for shell variables or quoting with a backslash [see +next paragraph]), while double quotes indicate a string for which +should be evaluated. For example, backtics are evaluated inside of double +quotes, but <bf/not/ for single quotes. + +\ quotes the next character, just as in shells such as bash and zsh. +For example, if want to put quotes ``&dquot;'' inside of a string, you can use +``\'' to force the next character to be a literal instead of interpreted +character. +<tscreen><verb> +set realname="Michael \"MuttDude\" Elkins" +</verb></tscreen> + +``\\'' means to insert a literal ``\'' into the line. +``\n'' and ``\r'' have their usual C meanings of linefeed and +carriage-return, respectively. + +A \ at the end of a line can be used to split commands over +multiple lines, provided that the split points don't appear in the +middle of command names. + +It is also possible to substitute the output of a Unix command in an +initialization file. This is accomplished by enclosing the command in +backquotes (``). For example, +<tscreen><verb> +my_hdr X-Operating-System: `uname -a` +</verb></tscreen> +The output of the Unix command ``uname -a'' will be substituted before the +line is parsed. Note that since initialization files are line oriented, only +the first line of output from the Unix command will be substituted. + +UNIX environments can be accessed like the way it is done in shells like +sh and bash: Prepend the name of the environment by a ``$''. For +example, +<tscreen><verb> +set record=+sent_on_$HOSTNAME +</verb></tscreen> + +The commands understood by mutt are explained in the next paragraphs. +For a complete list, see the <ref id="commands" name="command reference">. + +<sect1>Defining/Using aliases<label id="alias"> +<p> + +Usage: <tt/alias/ <em/key/ <em/address/ [ , <em/address/, ... ] + +It's usually very cumbersome to remember or type out the address of someone +you are communicating with. Mutt allows you to create ``aliases'' which map +a short string to a full address. + +<bf/Note:/ if you want to create an alias for a group (by specifying more than +one address), you <bf/must/ separate the addresses with a comma (``,''). + +To remove an alias or aliases (``*'' means all aliases): + +<tt/unalias/ [ * | <em/key/ <em/.../ ] + +<tscreen><verb> +alias muttdude me@cs.hmc.edu (Michael Elkins) +alias theguys manny, moe, jack +</verb></tscreen> + +Unlike other mailers, Mutt doesn't require aliases to be defined +in a special file. The <tt/alias/ command can appear anywhere in +a configuration file, as long as this file is <ref id="source" +name="sourced">. Consequently, you can have multiple alias files, or +you can have all aliases defined in your muttrc. + +On the other hand, the <ref id="create-alias" name="create-alias"> +function can use only one file, the one pointed to by the <ref +id="alias_file" name="$alias_file"> variable (which is +<tt>˜/.muttrc</tt> by default). This file is not special either, +in the sense that Mutt will happily append aliases to any file, but in +order for the new aliases to take effect you need to explicitly <ref +id="source" name="source"> this file too. + +For example: + +<tscreen><verb> +source /usr/local/share/Mutt.aliases +source ~/.mail_aliases +set alias_file=~/.mail_aliases +</verb></tscreen> + +To use aliases, you merely use the alias at any place in mutt where mutt +prompts for addresses, such as the <em/To:/ or <em/Cc:/ prompt. You can +also enter aliases in your editor at the appropriate headers if you have the +<ref id="edit_headers" name="$edit_headers"> variable set. + +In addition, at the various address prompts, you can use the tab character +to expand a partial alias to the full alias. If there are multiple matches, +mutt will bring up a menu with the matching aliases. In order to be +presented with the full list of aliases, you must hit tab with out a partial +alias, such as at the beginning of the prompt or after a comma denoting +multiple addresses. + +In the alias menu, you can select as many aliases as you want with the +<em/select-entry/ key (default: RET), and use the <em/exit/ key +(default: q) to return to the address prompt. + +<sect1>Changing the default key bindings<label id="bind"> +<p> +Usage: <tt/bind/ <em/map/ <em/key/ <em/function/ + +This command allows you to change the default key bindings (operation +invoked when pressing a key). + +<em/map/ specifies in which menu the binding belongs. The currently +defined maps are: + +<descrip> +<tag/generic/ +This is not a real menu, but is used as a fallback for all of the other +menus except for the pager and editor modes. If a key is not defined in +another menu, Mutt will look for a binding to use in this menu. This allows +you to bind a key to a certain function in multiple menus instead of having +multiple bind statements to accomplish the same task. +<tag/alias/ +The alias menu is the list of your personal aliases as defined in your +muttrc. It is the mapping from a short alias name to the full email +address(es) of the recipient(s). +<tag/attach/ +The attachment menu is used to access the attachments on received messages. +<tag/browser/ +The browser is used for both browsing the local directory structure, and for +listing all of your incoming mailboxes. +<tag/editor/ +The editor is the line-based editor the user enters text data. +<tag/index/ +The index is the list of messages contained in a mailbox. +<tag/compose/ +The compose menu is the screen used when sending a new message. +<tag/pager/ +The pager is the mode used to display message/attachment data, and help +listings. +<tag/pgp/ +The pgp menu is used to select the OpenPGP keys used for encrypting outgoing +messages. +<tag/postpone/ +The postpone menu is similar to the index menu, except is used when +recalling a message the user was composing, but saved until later. +</descrip> + +<em/key/ is the key (or key sequence) you wish to bind. To specify a +control character, use the sequence <em/\Cx/, where <em/x/ is the +letter of the control character (for example, to specify control-A use +``\Ca''). Note that the case of <em/x/ as well as <em/\C/ is +ignored, so that <em/\CA, \Ca, \cA/ and <em/\ca/ are all +equivalent. An alternative form is to specify the key as a three digit +octal number prefixed with a ``\'' (for example <em/\177/ is +equivalent to <em/\c?/). + +In addition, <em/key/ may consist of: + +<tscreen><verb> +\t tab +<tab> tab +\r carriage return +\n newline +\e escape +<esc> escape +<up> up arrow +<down> down arrow +<left> left arrow +<right> right arrow +<pageup> Page Up +<pagedown> Page Down +<backspace> Backspace +<delete> Delete +<insert> Insert +<enter> Enter +<return> Return +<home> Home +<end> End +<space> Space bar +<f1> function key 1 +<f10> function key 10 +</verb></tscreen> + +<em/key/ does not need to be enclosed in quotes unless it contains a +space (`` ''). + +<em/function/ specifies which action to take when <em/key/ is pressed. +For a complete list of functions, see the <ref id="functions" +name="reference">. The special function <tt/noop/ unbinds the specified key +sequence. + +<sect1>Defining aliases for character sets <label id="charset-hook"> +<p> +Usage: <tt/charset-hook/ <em/alias/ <em/charset/<newline> +Usage: <tt/iconv-hook/ <em/charset/ <em/local-charset/ + +The <tt/charset-hook/ command defines an alias for a character set. +This is useful to properly display messages which are tagged with a +character set name not known to mutt. + +The <tt/iconv-hook/ command defines a system-specific name for a +character set. This is helpful when your systems character +conversion library insists on using strange, system-specific names +for character sets. + + +<sect1>Setting variables based upon mailbox<label id="folder-hook"> +<p> +Usage: <tt/folder-hook/ [!]<em/regexp/ <em/command/ + +It is often desirable to change settings based on which mailbox you are +reading. The folder-hook command provides a method by which you can execute +any configuration command. <em/regexp/ is a regular expression specifying +in which mailboxes to execute <em/command/ before loading. If a mailbox +matches multiple folder-hook's, they are executed in the order given in the +muttrc. + +<bf/Note:/ if you use the ``!'' shortcut for <ref id="spoolfile" +name="$spoolfile"> at the beginning of the pattern, you must place it +inside of double or single quotes in order to distinguish it from the +logical <em/not/ operator for the expression. + +Note that the settings are <em/not/ restored when you leave the mailbox. +For example, a command action to perform is to change the sorting method +based upon the mailbox being read: + +<tscreen><verb> +folder-hook mutt set sort=threads +</verb></tscreen> + +However, the sorting method is not restored to its previous value when +reading a different mailbox. To specify a <em/default/ command, use the +pattern ``.'': + +<p> +<tscreen><verb> +folder-hook . set sort=date-sent +</verb></tscreen> + +<sect1>Keyboard macros<label id="macro"> +<p> +Usage: <tt/macro/ <em/menu/ <em/key/ <em/sequence/ [ <em/description/ ] + +Macros are useful when you would like a single key to perform a series of +actions. When you press <em/key/ in menu <em/menu/, Mutt will behave as if +you had typed <em/sequence/. So if you have a common sequence of commands +you type, you can create a macro to execute those commands with a single +key. + +<em/key/ and <em/sequence/ are expanded by the same rules as the <ref +id="bind" name="key bindings">. There are some additions however. The +first is that control characters in <em/sequence/ can also be specified +as <em/ˆx/. In order to get a caret (`ˆ'') you need to use +<em/ˆˆ/. Secondly, to specify a certain key such as <em/up/ +or to invoke a function directly, you can use the format +<em/<key name>/ and <em/<function name>/. For a listing of key +names see the section on <ref id="bind" name="key bindings">. Functions +are listed in the <ref id="functions" name="function reference">. + +The advantage with using function names directly is that the macros will +work regardless of the current key bindings, so they are not dependent on +the user having particular key definitions. This makes them more robust +and portable, and also facilitates defining of macros in files used by more +than one user (eg. the system Muttrc). + +Optionally you can specify a descriptive text after <em/sequence/, +which is shown in the help screens. + +<bf/Note:/ Macro definitions (if any) listed in the help screen(s), are +silently truncated at the screen width, and are not wrapped. + +<sect1>Using color and mono video attributes<label id="color"> +<p> +Usage: <tt/color/ <em/object/ <em/foreground/ <em/background/ [ <em/regexp/ ]<newline> +Usage: <tt/color/ index <em/foreground/ <em/background/ <em/pattern/<newline> +Usage: <tt/uncolor/ index <em/pattern/ [ <em/pattern/ ... ]<newline> + +If your terminal supports color, you can spice up Mutt by creating your own +color scheme. To define the color of an object (type of information), you +must specify both a foreground color <bf/and/ a background color (it is not +possible to only specify one or the other). + +<em/object/ can be one of: + +<itemize> +<item>attachment +<item>body (match <em/regexp/ in the body of messages) +<item>bold (hiliting bold patterns in the body of messages) +<item>error (error messages printed by Mutt) +<item>header (match <em/regexp/ in the message header) +<item>hdrdefault (default color of the message header in the pager) +<item>index (match <em/pattern/ in the message index) +<item>indicator (arrow or bar used to indicate the current item in a menu) +<item>markers (the ``+'' markers at the beginning of wrapped lines in the pager) +<item>message (informational messages) +<item>normal +<item>quoted (text matching <ref id="quote_regexp" +name="$quote_regexp"> in the body of a message) +<item>quoted1, quoted2, ..., quoted<bf/N/ (higher levels of quoting) +<item>search (hiliting of words in the pager) +<item>signature +<item>status (mode lines used to display info about the mailbox or message) +<item>tilde (the ``˜'' used to pad blank lines in the pager) +<item>tree (thread tree drawn in the message index and attachment menu) +<item>underline (hiliting underlined patterns in the body of messages) +</itemize> + +<em/foreground/ and <em/background/ can be one of the following: + +<itemize> +<item>white +<item>black +<item>green +<item>magenta +<item>blue +<item>cyan +<item>yellow +<item>red +<item>default +<item>color<em/x/ +</itemize> + +<em/foreground/ can optionally be prefixed with the keyword <tt/bright/ to make +the foreground color boldfaced (e.g., <tt/brightred/). + +If your terminal supports it, the special keyword <em/default/ can be +used as a transparent color. The value <em/brightdefault/ is also valid. +If Mutt is linked against the <em/S-Lang/ library, you also need to set +the <em/COLORFGBG/ environment variable to the default colors of your +terminal for this to work; for example (for Bourne-like shells): + +<tscreen><verb> +set COLORFGBG="green;black" +export COLORFGBG +</verb></tscreen> + +<bf/Note:/ The <em/S-Lang/ library requires you to use the <em/lightgray/ +and <em/brown/ keywords instead of <em/white/ and <em/yellow/ when +setting this variable. + +<bf/Note:/ The uncolor command can be applied to the index object only. It +removes entries from the list. You <bf/must/ specify the same pattern +specified in the color command for it to be removed. The pattern ``*'' is +a special token which means to clear the color index list of all entries. + +Mutt also recognizes the keywords <em/color0/, <em/color1/, …, +<em/color/<bf/N-1/ (<bf/N/ being the number of colors supported +by your terminal). This is useful when you remap the colors for your +display (for example by changing the color associated with <em/color2/ +for your xterm), since color names may then lose their normal meaning. + +If your terminal does not support color, it is still possible change the video +attributes through the use of the ``mono'' command: + +Usage: <tt/mono/ <em/<object> <attribute>/ [ <em/regexp/ ]<newline> +Usage: <tt/mono/ index <em/attribute/ <em/pattern/<newline> +Usage: <tt/unmono/ index <em/pattern/ [ <em/pattern/ ... ]<newline> + +where <em/attribute/ is one of the following: + +<itemize> +<item>none +<item>bold +<item>underline +<item>reverse +<item>standout +</itemize> + +<sect1>Ignoring (weeding) unwanted message headers<label id="ignore"> +<p> +Usage: <tt/[un]ignore/ <em/pattern/ [ <em/pattern/ ... ] + +Messages often have many header fields added by automatic processing systems, +or which may not seem useful to display on the screen. This command allows +you to specify header fields which you don't normally want to see. + +You do not need to specify the full header field name. For example, +``ignore content-'' will ignore all header fields that begin with the pattern +``content-''. ``ignore *'' will ignore all headers. + +To remove a previously added token from the list, use the ``unignore'' command. +The ``unignore'' command will make Mutt display headers with the given pattern. +For example, if you do ``ignore x-'' it is possible to ``unignore x-mailer''. + +``unignore *'' will remove all tokens from the ignore list. + +For example: +<tscreen><verb> +# Sven's draconian header weeding +ignore * +unignore from date subject to cc +unignore organization organisation x-mailer: x-newsreader: x-mailing-list: +unignore posted-to: +</verb></tscreen> + +<sect1>Alternative addresses<label id="alternates"> +<p> +Usage: <tt/[un]alternates/ <em/regexp/ [ <em/regexp/ ... ]<newline> + +With various functions, mutt will treat messages differently, +depending on whether you sent them or whether you received them from +someone else. For instance, when replying to a message that you +sent to a different party, mutt will automatically suggest to send +the response to the original message's recipients -- responding to +yourself won't make much sense in many cases. (See <ref +id="reply_to" name="$reply_to">.) + +Many users receive e-mail under a number of different addresses. To +fully use mutt's features here, the program must be able to +recognize what e-mail addresses you receive mail under. That's the +purpose of the <tt/alternates/ command: It takes a list of regular +expressions, each of which can identify an address under which you +receive e-mail. + +To remove a regular expression from this list, use the +<tt/unalternates/ command. + +<sect1>Mailing lists<label id="lists"> +<p> +Usage: <tt/[un]lists/ <em/regexp/ [ <em/regexp/ ... ]<newline> +Usage: <tt/[un]subscribe/ <em/regexp/ [ <em/regexp/ ... ] + +Mutt has a few nice features for <ref id="using_lists" name="handling +mailing lists">. In order to take advantage of them, you must +specify which addresses belong to mailing lists, and which mailing +lists you are subscribed to. Once you have done this, the <ref +id="list-reply" name="list-reply"> function will work for all known lists. +Additionally, when you send a message to a subscribed list, mutt will +add a Mail-Followup-To header to tell other users' mail user agents +not to send copies of replies to your personal address. Note that +the Mail-Followup-To header is a non-standard extension which is not +supported by all mail user agents. Adding it is not bullet-proof against +receiving personal CCs of list messages. Also note that the generation +of the Mail-Followup-To header is controlled by the <ref id="followup_to" +name="$followup_to"> configuration variable. + +More precisely, Mutt maintains lists of patterns for the addresses +of known and subscribed mailing lists. Every subscribed mailing +list is known. To mark a mailing list as known, use the ``lists'' +command. To mark it as subscribed, use ``subscribe''. + +You can use regular expressions with both commands. To mark all +messages sent to a specific bug report's address on mutt's bug +tracking system as list mail, for instance, you could say +``subscribe [0-9]*@bugs.guug.de''. Often, it's sufficient to just +give a portion of the list's e-mail address. + +Specify as much of the address as you need to to remove ambiguity. For +example, if you've subscribed to the Mutt mailing list, you will receive mail +addresssed to <em/mutt-users@mutt.org/. So, to tell Mutt that this is a +mailing list, you could add ``lists mutt-users'' to your +initialization file. To tell mutt that you are subscribed to it, +add ``subscribe mutt-users'' to your initialization file instead. +If you also happen to get mail from someone whose address is +<em/mutt-users@example.com/, you could use ``lists mutt-users@mutt.org'' +or ``subscribe mutt-users@mutt.org'' to +match only mail from the actual list. + +The ``unlists'' command is used to remove a token from the list of +known and subscribed mailing-lists. Use ``unlists *'' to remove all +tokens. + +To remove a mailing list from the list of subscribed mailing lists, +but keep it on the list of known mailing lists, use ``unsubscribe''. + +<sect1>Using Multiple spool mailboxes<label id="mbox-hook"> +<p> +Usage: <tt/mbox-hook/ [!]<em/pattern/ <em/mailbox/ + +This command is used to move read messages from a specified mailbox to a +different mailbox automatically when you quit or change folders. +<em/pattern/ is a regular expression specifying the mailbox to treat as a +``spool'' mailbox and <em/mailbox/ specifies where mail should be saved when +read. + +Unlike some of the other <em/hook/ commands, only the <em/first/ matching +pattern is used (it is not possible to save read mail in more than a single +mailbox). + +<sect1>Defining mailboxes which receive mail<label id="mailboxes"> +<p> +Usage: <tt/[un]mailboxes/ [!]<em/filename/ [ <em/filename/ ... ] + +This command specifies folders which can receive mail and +which will be checked for new messages. By default, the +main menu status bar displays how many of these folders have +new messages. +<p> +When changing folders, pressing <em/space/ will cycle +through folders with new mail. +<p> +Pressing TAB in the directory browser will bring up a menu showing the files +specified by the <tt/mailboxes/ command, and indicate which contain new +messages. Mutt will automatically enter this mode when invoked from the +command line with the <tt/-y/ option. + +The ``unmailboxes'' command is used to remove a token from the list +of folders which receive mail. Use ``unmailboxes *'' to remove all +tokens. + +<p> +<bf/Note:/ new mail is detected by comparing the last modification time to +the last access time. Utilities like <tt/biff/ or <tt/frm/ or any other +program which accesses the mailbox might cause Mutt to never detect new mail +for that mailbox if they do not properly reset the access time. Backup +tools are another common reason for updated access times. +<p> + +<bf/Note:/ the filenames in the <tt/mailboxes/ command are resolved when +the command is executed, so if these names contain <ref id="shortcuts" +name="shortcut characters"> (such as ``='' and ``!''), any variable +definition that affect these characters (like <ref id="folder" +name="$folder"> and <ref id="spoolfile" name="$spoolfile">) +should be executed before the <tt/mailboxes/ command. + +<sect1>User defined headers<label id="my_hdr"> +<p> +Usage:<newline> +<tt/my_hdr/ <em/string/<newline> +<tt/unmy_hdr/ <em/field/ [ <em/field/ ... ] + +The ``my_hdr'' command allows you to create your own header +fields which will be added to every message you send. + +For example, if you would like to add an ``Organization:'' header field to +all of your outgoing messages, you can put the command + +<quote> +my_hdr Organization: A Really Big Company, Anytown, USA +</quote> + +in your <tt/.muttrc/. + +<bf/Note:/ space characters are <em/not/ allowed between the keyword and +the colon (``:''). The standard for electronic mail (RFC822) says that +space is illegal there, so Mutt enforces the rule. + +If you would like to add a header field to a single message, you should +either set the <ref id="edit_headers" name="edit_headers"> variable, +or use the <em/edit-headers/ function (default: ``E'') in the send-menu so +that you can edit the header of your message along with the body. + +To remove user defined header fields, use the ``unmy_hdr'' +command. You may specify an asterisk (``*'') to remove all header +fields, or the fields to remove. For example, to remove all ``To'' and +``Cc'' header fields, you could use: + +<quote> +unmy_hdr to cc +</quote> + +<sect1>Defining the order of headers when viewing messages<label id="hdr_order"> +<p> +Usage: <tt/hdr_order/ <em/header1/ <em/header2/ <em/header3/ + +With this command, you can specify an order in which mutt will attempt +to present headers to you when viewing messages. + +``unhdr_order *'' will clear all previous headers from the order list, +thus removing the header order effects set by the system-wide startup +file. + +<tscreen><verb> +hdr_order From Date: From: To: Cc: Subject: +</verb></tscreen> + +<sect1>Specify default save filename<label id="save-hook"> +<p> +Usage: <tt/save-hook/ [!]<em/pattern/ <em/filename/ + +This command is used to override the default filename used when saving +messages. <em/filename/ will be used as the default filename if the message is +<em/From:/ an address matching <em/regexp/ or if you are the author and the +message is addressed <em/to:/ something matching <em/regexp/. + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/. + +Examples: + +<tscreen><verb> +save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins +save-hook aol\\.com$ +spam +</verb></tscreen> + +Also see the <ref id="fcc-save-hook" name="fcc-save-hook"> command. + +<sect1>Specify default Fcc: mailbox when composing<label id="fcc-hook"> +<p> +Usage: <tt/fcc-hook/ [!]<em/pattern/ <em/mailbox/ + +This command is used to save outgoing mail in a mailbox other than +<ref id="record" name="$record">. Mutt searches the initial list of +message recipients for the first matching <em/regexp/ and uses <em/mailbox/ +as the default Fcc: mailbox. If no match is found the message will be saved +to <ref id="record" name="$record"> mailbox. + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/. + +Example: <tt/fcc-hook aol.com$ +spammers/ + +The above will save a copy of all messages going to the aol.com domain to +the `+spammers' mailbox by default. Also see the <ref id="fcc-save-hook" +name="fcc-save-hook"> command. + +<sect1>Specify default save filename and default Fcc: mailbox at once<label +id="fcc-save-hook"> +<p> +Usage: <tt/fcc-save-hook/ [!]<em/pattern/ <em/mailbox/ + +This command is a shortcut, equivalent to doing both a <ref id="fcc-hook" name="fcc-hook"> +and a <ref id="save-hook" name="save-hook"> with its arguments. + +<sect1>Change settings based upon message recipients<label id="send-hook"><label id="reply-hook"> +<p> +Usage: <tt/reply-hook/ [!]<em/pattern/ <em/command/<newline> +Usage: <tt/send-hook/ [!]<em/pattern/ <em/command/ + +These commands can be used to execute arbitrary configuration commands based +upon recipients of the message. <em/pattern/ is a regular expression +matching the desired address. <em/command/ is executed when <em/regexp/ +matches recipients of the message. + +<tt/reply-hook/ is matched against the message you are <em/replying/ +<bf/to/, instead of the message you are <em/sending/. <tt/send-hook/ is +matched against all messages, both <em/new/ and <em/replies/. <bf/Note:/ +<tt/reply-hook/s are matched <bf/before/ the <tt/send-hook/, <bf/regardless/ +of the order specified in the users's configuration file. + +For each type of <tt/send-hook/ or <tt/reply-hook/, When multiple matches +occur, commands are executed in the order they are specified in the muttrc +(for that type of hook). + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/. + +Example: <tt/send-hook mutt &dquot;set mime_forward signature=''&dquot;/ + +Another typical use for this command is to change the values of the +<ref id="attribution" name="$attribution">, <ref id="signature" +name="$signature"> and <ref id="locale" name="$locale"> +variables in order to change the language of the attributions and +signatures based upon the recipients. + +<bf/Note:/ the send-hook's are only executed ONCE after getting the initial +list of recipients. Adding a recipient after replying or editing the +message will NOT cause any send-hook to be executed. Also note that +my_hdr commands which modify recipient headers, or the message's +subject, don't have any effect on the current message when executed +from a send-hook. + +<sect1>Change settings before formatting a message<label id="message-hook"> +<p> +Usage: <tt/message-hook/ [!]<em/pattern/ <em/command/ + +This command can be used to execute arbitrary configuration commands +before viewing or formatting a message based upon information about the message. +<em/command/ is executed if the <em/pattern/ matches the message to be +displayed. When multiple matches occur, commands are executed in the order +they are specified in the muttrc. + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for +information on the exact format of <em/pattern/. + +Example: +<tscreen><verb> +message-hook ~A 'set pager=builtin' +message-hook '~f freshmeat-news' 'set pager="less \"+/^ subject: .*\""' +</verb></tscreen> + +<sect1>Choosing the cryptographic key of the recipient<label id="crypt-hook"> +<p> +Usage: <tt/crypt-hook/ <em/pattern/ <em/keyid/ + +When encrypting messages with PGP or OpenSSL, you may want to associate a certain +key with a given e-mail address automatically, either because the +recipient's public key can't be deduced from the destination address, +or because, for some reasons, you need to override the key Mutt would +normally use. The crypt-hook command provides a method by which you can +specify the ID of the public key to be used when encrypting messages to +a certain recipient. + +The meaning of "key id" is to be taken broadly in this context: You +can either put a numerical key ID here, an e-mail address, or even +just a real name. + +<sect1>Adding key sequences to the keyboard buffer<label id="push"> +<p> +Usage: <tt/push/ <em/string/ + +This command adds the named string to the keyboard buffer. The string may +contain control characters, key names and function names like the sequence +string in the <ref id="macro" name="macro"> command. You may use it to +automatically run a sequence of commands at startup, or when entering +certain folders. + +<sect1>Executing functions<label id="exec"> +<p> +Usage: <tt/exec/ <em/function/ [ <em/function/ ... ] + +This command can be used to execute any function. Functions are +listed in the <ref id="functions" name="function reference">. +``exec function'' is equivalent to ``push <function>''. + +<sect1>Message Scoring<label id="score-command"> +<p> +Usage: <tt/score/ <em/pattern/ <em/value/<newline> +Usage: <tt/unscore/ <em/pattern/ [ <em/pattern/ ... ] + +The <tt/score/ commands adds <em/value/ to a message's score if <em/pattern/ +matches it. <em/pattern/ is a string in the format described in the <ref +id="patterns" name="patterns"> section (note: For efficiency reasons, patterns +which scan information not available in the index, such as <tt>˜b</tt>, +<tt>˜B</tt> or <tt>˜h</tt>, may not be used). <em/value/ is a +positive or negative integer. A message's final score is the sum total of all +matching <tt/score/ entries. However, you may optionally prefix <em/value/ with +an equal sign (=) to cause evaluation to stop at a particular entry if there is +a match. Negative final scores are rounded up to 0. + +The <tt/unscore/ command removes score entries from the list. You <bf/must/ +specify the same pattern specified in the <tt/score/ command for it to be +removed. The pattern ``*'' is a special token which means to clear the list +of all score entries. + +<sect1>Setting variables<label id="set"> +<p> +Usage: <tt/set/ [no|inv]<em/variable/[=<em/value/] [ <em/variable/ ... ]<newline> +Usage: <tt/toggle/ <em/variable/ [<em/variable/ ... ]<newline> +Usage: <tt/unset/ <em/variable/ [<em/variable/ ... ]<newline> +Usage: <tt/reset/ <em/variable/ [<em/variable/ ... ] + +This command is used to set (and unset) <ref id="variables" +name="configuration variables">. There are four basic types of variables: +boolean, number, string and quadoption. <em/boolean/ variables can be +<em/set/ (true) or <em/unset/ (false). <em/number/ variables can be +assigned a positive integer value. + +<em/string/ variables consist of any number of printable characters. +<em/strings/ must be enclosed in quotes if they contain spaces or tabs. You +may also use the ``C'' escape sequences <bf/\n/ and <bf/\t/ for +newline and tab, respectively. + +<em/quadoption/ variables are used to control whether or not to be prompted +for certain actions, or to specify a default action. A value of <em/yes/ +will cause the action to be carried out automatically as if you had answered +yes to the question. Similarly, a value of <em/no/ will cause the the +action to be carried out as if you had answered ``no.'' A value of +<em/ask-yes/ will cause a prompt with a default answer of ``yes'' and +<em/ask-no/ will provide a default answer of ``no.'' + +Prefixing a variable with ``no'' will unset it. Example: <tt/set noaskbcc/. + +For <em/boolean/ variables, you may optionally prefix the variable name with +<tt/inv/ to toggle the value (on or off). This is useful when writing +macros. Example: <tt/set invsmart_wrap/. + +The <tt/toggle/ command automatically prepends the <tt/inv/ prefix to all +specified variables. + +The <tt/unset/ command automatically prepends the <tt/no/ prefix to all +specified variables. + +Using the enter-command function in the <em/index/ menu, you can query the +value of a variable by prefixing the name of the variable with a question +mark: + +<tscreen><verb> +set ?allow_8bit +</verb></tscreen> + +The question mark is actually only required for boolean and quadoption +variables. + +The <tt/reset/ command resets all given variables to the compile time +defaults (hopefully mentioned in this manual). If you use the command +<tt/set/ and prefix the variable with ``&'' this has the same +behavior as the reset command. + +With the <tt/reset/ command there exists the special variable ``all'', +which allows you to reset all variables to their system defaults. + +<sect1>Reading initialization commands from another file<label id="source"> +<p> +Usage: <tt/source/ <em/filename/ [ <em/filename/ ... ] + +This command allows the inclusion of initialization commands +from other files. For example, I place all of my aliases in +<tt>˜/.mail_aliases</tt> so that I can make my +<tt>˜/.muttrc</tt> readable and keep my aliases private. + +If the filename begins with a tilde (``˜''), it will be expanded to the +path of your home directory. + +If the filename ends with a vertical bar (|), then <em/filename/ is +considered to be an executable program from which to read input (eg. +<tt/source ~/bin/myscript|/). + +<sect1>Removing hooks<label id="unhook"> +<p> +Usage: <tt/unhook/ [ * | <em/hook-type/ ] + +This command permits you to flush hooks you have previously defined. +You can either remove all hooks by giving the ``*'' character as an +argument, or you can remove all hooks of a specific type by saying +something like <tt/unhook send-hook/. + +<sect>Advanced Usage + +<sect1>Regular Expressions<label id="regexp"> +<p> +All string patterns in Mutt including those in more complex +<ref id="patterns" name="patterns"> must be specified +using regular expressions (regexp) in the ``POSIX extended'' syntax (which +is more or less the syntax used by egrep and GNU awk). For your +convenience, we have included below a brief description of this syntax. + +The search is case sensitive if the pattern contains at least one upper +case letter, and case insensitive otherwise. Note that ``\'' +must be quoted if used for a regular expression in an initialization +command: ``\\''. + +A regular expression is a pattern that describes a set of strings. +Regular expressions are constructed analogously to arithmetic +expressions, by using various operators to combine smaller expressions. + +Note that the regular expression can be enclosed/delimited by either &dquot; +or ' which is useful if the regular expression includes a white-space +character. See <ref id="muttrc-syntax" name="Syntax of Initialization Files"> +for more information on &dquot; and ' delimiter processing. To match a +literal &dquot; or ' you must preface it with \ (backslash). + +The fundamental building blocks are the regular expressions that match +a single character. Most characters, including all letters and digits, +are regular expressions that match themselves. Any metacharacter with +special meaning may be quoted by preceding it with a backslash. + +The period ``.'' matches any single character. The caret ``ˆ'' and +the dollar sign ``&dollar'' are metacharacters that respectively match +the empty string at the beginning and end of a line. + +A list of characters enclosed by ``['' and ``]'' matches any +single character in that list; if the first character of the list +is a caret ``ˆ'' then it matches any character <bf/not/ in the +list. For example, the regular expression <bf/[0123456789]/ +matches any single digit. A range of ASCII characters may be specified +by giving the first and last characters, separated by a hyphen +``‐''. Most metacharacters lose their special meaning inside +lists. To include a literal ``]'' place it first in the list. +Similarly, to include a literal ``ˆ'' place it anywhere but first. +Finally, to include a literal hyphen ``‐'' place it last. + +Certain named classes of characters are predefined. Character classes +consist of ``[:'', a keyword denoting the class, and ``:]''. +The following classes are defined by the POSIX standard: + +<descrip> +<tag/[:alnum:]/ +Alphanumeric characters. +<tag/[:alpha:]/ +Alphabetic characters. +<tag/[:blank:]/ +Space or tab characters. +<tag/[:cntrl:]/ +Control characters. +<tag/[:digit:]/ +Numeric characters. +<tag/[:graph:]/ +Characters that are both printable and visible. (A space is printable, +but not visible, while an ``a'' is both.) +<tag/[:lower:]/ +Lower-case alphabetic characters. +<tag/[:print:]/ +Printable characters (characters that are not control characters.) +<tag/[:punct:]/ +Punctuation characters (characters that are not letter, digits, control +characters, or space characters). +<tag/[:space:]/ +Space characters (such as space, tab and formfeed, to name a few). +<tag/[:upper:]/ +Upper-case alphabetic characters. +<tag/[:xdigit:]/ +Characters that are hexadecimal digits. +</descrip> + +A character class is only valid in a regular expression inside the +brackets of a character list. Note that the brackets in these +class names are part of the symbolic names, and must be included +in addition to the brackets delimiting the bracket list. For +example, <bf/[[:digit:]]/ is equivalent to +<bf/[0-9]/. + +Two additional special sequences can appear in character lists. These +apply to non-ASCII character sets, which can have single symbols (called +collating elements) that are represented with more than one character, +as well as several characters that are equivalent for collating or +sorting purposes: + +<descrip> +<tag/Collating Symbols/ +A collating symbol is a multi-character collating element enclosed in +``[.'' and ``.]''. For example, if ``ch'' is a collating +element, then <bf/[[.ch.]]/ is a regexp that matches +this collating element, while <bf/[ch]/ is a regexp that +matches either ``c'' or ``h''. +<tag/Equivalence Classes/ +An equivalence class is a locale-specific name for a list of +characters that are equivalent. The name is enclosed in ``[='' +and ``=]''. For example, the name ``e'' might be used to +represent all of ``è'' ``é'' and ``e''. In this case, +<bf/[[=e=]]/ is a regexp that matches any of +``è'', ``é'' and ``e''. +</descrip> + +A regular expression matching a single character may be followed by one +of several repetition operators: + +<descrip> +<tag/?/ +The preceding item is optional and matched at most once. +<tag/*/ +The preceding item will be matched zero or more times. +<tag/+/ +The preceding item will be matched one or more times. +<tag/{n}/ +The preceding item is matched exactly <em/n/ times. +<tag/{n,}/ +The preceding item is matched <em/n/ or more times. +<tag/{,m}/ +The preceding item is matched at most <em/m/ times. +<tag/{n,m}/ +The preceding item is matched at least <em/n/ times, but no more than +<em/m/ times. +</descrip> + +Two regular expressions may be concatenated; the resulting regular +expression matches any string formed by concatenating two substrings +that respectively match the concatenated subexpressions. + +Two regular expressions may be joined by the infix operator ``|''; +the resulting regular expression matches any string matching either +subexpression. + +Repetition takes precedence over concatenation, which in turn takes +precedence over alternation. A whole subexpression may be enclosed in +parentheses to override these precedence rules. + +<bf/Note:/ If you compile Mutt with the GNU <em/rx/ package, the +following operators may also be used in regular expressions: + +<descrip> +<tag/\\y/ +Matches the empty string at either the beginning or the end of a word. +<tag/\\B/ +Matches the empty string within a word. +<tag/\\</ +Matches the empty string at the beginning of a word. +<tag/\\>/ +Matches the empty string at the end of a word. +<tag/\\w/ +Matches any word-constituent character (letter, digit, or underscore). +<tag/\\W/ +Matches any character that is not word-constituent. +<tag/\\`/ +Matches the empty string at the beginning of a buffer (string). +<tag/\\'/ +Matches the empty string at the end of a buffer. +</descrip> + +Please note however that these operators are not defined by POSIX, so +they may or may not be available in stock libraries on various systems. + +<sect1>Patterns<label id="patterns"> +<p> +Many of Mutt's commands allow you to specify a pattern to match +(limit, tag-pattern, delete-pattern, etc.). There are several ways to select +messages: + +<tscreen><verb> +~A all messages +~b EXPR messages which contain EXPR in the message body +~B EXPR messages which contain EXPR in the whole message +~c USER messages carbon-copied to USER +~C EXPR message is either to: or cc: EXPR +~D deleted messages +~d [MIN]-[MAX] messages with ``date-sent'' in a Date range +~E expired messages +~e EXPR message which contains EXPR in the ``Sender'' field +~F flagged messages +~f USER messages originating from USER +~g cryptographically signed messages +~G cryptographically encrypted messages +~h EXPR messages which contain EXPR in the message header +~k message contains PGP key material +~i ID message which match ID in the ``Message-ID'' field +~L EXPR message is either originated or received by EXPR +~l message is addressed to a known mailing list +~m [MIN]-[MAX] message in the range MIN to MAX *) +~n [MIN]-[MAX] messages with a score in the range MIN to MAX *) +~N new messages +~O old messages +~p message is addressed to you (consults alternates) +~P message is from you (consults alternates) +~Q messages which have been replied to +~R read messages +~r [MIN]-[MAX] messages with ``date-received'' in a Date range +~S superseded messages +~s SUBJECT messages having SUBJECT in the ``Subject'' field. +~T tagged messages +~t USER messages addressed to USER +~U unread messages +~v message is part of a collapsed thread. +~V cryptographically verified messages +~x EXPR messages which contain EXPR in the `References' field +~y EXPR messages which contain EXPR in the `X-Label' field +~z [MIN]-[MAX] messages with a size in the range MIN to MAX *) +~= duplicated messages (see $duplicate_threads) +</verb></tscreen> + +Where EXPR, USER, ID, and SUBJECT are +<ref id="regexp" name="regular expressions">. Special attention has to be +made when using regular expressions inside of patterns. Specifically, +Mutt's parser for these patterns will strip one level of backslash (\), +which is normally used for quoting. If it is your intention to use a +backslash in the regular expression, you will need to use two backslashes +instead (\\). + +*) The forms <tt/<[MAX]/, <tt/>[MIN]/, +<tt/[MIN]-/ and <tt/-[MAX]/ +are allowed, too. + +<sect2>Pattern Modifier +<p> + +Note that patterns matching 'lists' of addresses (notably c,C,p,P and t) +match if there is at least one match in the whole list. If you want to +make sure that all elements of that list match, you need to prefix your +pattern with ^. +This example matches all mails which only has recipients from Germany. + +<tscreen><verb> +^~C \.de$ +</verb></tscreen> + +<sect2>Complex Patterns +<p> + +Logical AND is performed by specifying more than one criterion. For +example: + +<tscreen><verb> +~t mutt ~f elkins +</verb></tscreen> + +would select messages which contain the word ``mutt'' in the list of +recipients <bf/and/ that have the word ``elkins'' in the ``From'' header +field. + +Mutt also recognizes the following operators to create more complex search +patterns: + +<itemize> +<item>! -- logical NOT operator +<item>| -- logical OR operator +<item>() -- logical grouping operator +</itemize> + +Here is an example illustrating a complex search pattern. This pattern will +select all messages which do not contain ``mutt'' in the ``To'' or ``Cc'' +field and which are from ``elkins''. + +<tscreen><verb> +!(~t mutt|~c mutt) ~f elkins +</verb></tscreen> + +Here is an example using white space in the regular expression (note +the ' and &dquot; delimiters). For this to match, the mail's subject must +match the ``^Junk +From +Me$'' and it must be from either ``Jim +Somebody'' +or ``Ed +SomeoneElse'': + +<tscreen><verb> + '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")' +</verb></tscreen> + +Note that if a regular expression contains parenthesis, or a veritical bar +("|"), you <bf/must/ enclose the expression in double or single quotes since +those characters are also used to separate different parts of Mutt's +pattern language. For example, + +<tscreen><verb> +~f "me@(mutt\.org|cs\.hmc\.edu)" +</verb></tscreen> + +Without the quotes, the parenthesis would truncate the regular expression +to simply <em/me@/, which is probably not what you want. + +<sect2>Searching by Date +<p> +Mutt supports two types of dates, <em/absolute/ and <em/relative/. + +<bf/Absolute/. Dates <bf/must/ be in DD/MM/YY format (month and year are +optional, defaulting to the current month and year). An example of a valid +range of dates is: + +<tscreen><verb> +Limit to messages matching: ~d 20/1/95-31/10 +</verb></tscreen> + +If you omit the minimum (first) date, and just specify ``-DD/MM/YY'', all +messages <em/before/ the given date will be selected. If you omit the maximum +(second) date, and specify ``DD/MM/YY-'', all messages <em/after/ the given +date will be selected. If you specify a single date with no dash (``-''), +only messages sent on the given date will be selected. + +<bf/Error Margins/. You can add error margins to absolute dates. +An error margin is a sign (+ or -), followed by a digit, followed by +one of the following units: +<verb> +y years +m months +w weeks +d days +</verb> +As a special case, you can replace the sign by a ``*'' character, +which is equivalent to giving identical plus and minus error margins. + +Example: To select any messages two weeks around January 15, 2001, +you'd use the following pattern: +<tscreen><verb> +Limit to messages matching: ~d 15/1/2001*2w +</verb></tscreen> + + +<bf/Relative/. This type of date is relative to the current date, and may +be specified as: +<itemize> +<item>><em/offset/ (messages older than <em/offset/ units) +<item><<em/offset/ (messages newer than <em/offset/ units) +<item>=<em/offset/ (messages exactly <em/offset/ units old) +</itemize> + +<em/offset/ is specified as a positive number with one of the following +units: +<verb> +y years +m months +w weeks +d days +</verb> + +Example: to select messages less than 1 month old, you would use +<tscreen><verb> +Limit to messages matching: ~d <1m +</verb></tscreen> + + + +<bf/Note:/ all dates used when searching are relative to the +<bf/local/ time zone, so unless you change the setting of your <ref +id="index_format" name="$index_format"> to include a +<tt/%[...]/ format, these are <bf/not/ the dates shown +in the main index. + +<sect1>Using Tags +<p> + +Sometimes it is desirable to perform an operation on a group of +messages all at once rather than one at a time. An example might be +to save messages to a mailing list to a separate folder, or to +delete all messages with a given subject. To tag all messages +matching a pattern, use the tag-pattern function, which is bound to +``shift-T'' by default. Or you can select individual messages by +hand using the ``tag-message'' function, which is bound to ``t'' by +default. See <ref id="patterns" name="patterns"> for Mutt's pattern +matching syntax. + +Once you have tagged the desired messages, you can use the +``tag-prefix'' operator, which is the ``;'' (semicolon) key by default. +When the ``tag-prefix'' operator is used, the <bf/next/ operation will +be applied to all tagged messages if that operation can be used in that +manner. If the <ref id="auto_tag" name="$auto_tag"> +variable is set, the next operation applies to the tagged messages +automatically, without requiring the ``tag-prefix''. + +<sect1>Using Hooks<label id="hooks"> +<p> +A <em/hook/ is a concept borrowed from the EMACS editor which allows you to +execute arbitrary commands before performing some operation. For example, +you may wish to tailor your configuration based upon which mailbox you are +reading, or to whom you are sending mail. In the Mutt world, a <em/hook/ +consists of a <ref id="regexp" name="regular expression"> or +<ref id="patterns" name="pattern"> along with a +configuration option/command. See +<itemize> +<item><ref id="folder-hook" name="folder-hook"> +<item><ref id="send-hook" name="send-hook"> +<item><ref id="message-hook" name="message-hook"> +<item><ref id="save-hook" name="save-hook"> +<item><ref id="mbox-hook" name="mbox-hook"> +<item><ref id="fcc-hook" name="fcc-hook"> +<item><ref id="fcc-save-hook" name="fcc-save-hook"> +</itemize> +for specific details on each type of <em/hook/ available. + +<bf/Note:/ if a hook changes configuration settings, these changes remain +effective until the end of the current mutt session. As this is generally +not desired, a default hook needs to be added before all other hooks to +restore configuration defaults. Here is an example with send-hook and the +my_hdr directive: + +<tscreen><verb> +send-hook . 'unmy_hdr From:' +send-hook ~Cb@b.b my_hdr from: c@c.c +</verb></tscreen> + +<sect2>Message Matching in Hooks<label id="pattern_hook"> +<p> +Hooks that act upon messages (<tt/send-hook, save-hook, fcc-hook, +message-hook/) are evaluated in a slightly different manner. For the other +types of hooks, a <ref id="regexp" name="regular expression"> is +sufficient. But in dealing with messages a finer grain of control is +needed for matching since for different purposes you want to match +different criteria. + +Mutt allows the use of the <ref id="patterns" name="search pattern"> +language for matching messages in hook commands. This works in +exactly the same way as it would when <em/limiting/ or +<em/searching/ the mailbox, except that you are restricted to those +operators which match information mutt extracts from the header of +the message (i.e. from, to, cc, date, subject, etc.). + +For example, if you wanted to set your return address based upon sending +mail to a specific address, you could do something like: +<tscreen><verb> +send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>' +</verb></tscreen> +which would execute the given command when sending mail to +<em/me@cs.hmc.edu/. + +However, it is not required that you write the pattern to match using the +full searching language. You can still specify a simple <em/regular +expression/ like the other hooks, in which case Mutt will translate your +pattern into the full language, using the translation specified by the +<ref id="default_hook" name="$default_hook"> variable. The +pattern is translated at the time the hook is declared, so the value of +<ref id="default_hook" name="$default_hook"> that is in effect +at that time will be used. + +<sect1>External Address Queries<label id="query"> +<p> +Mutt supports connecting to external directory databases such as LDAP, +ph/qi, bbdb, or NIS through a wrapper script which connects to mutt +using a simple interface. Using the <ref id="query_command" +name="$query_command"> variable, you specify the wrapper +command to use. For example: + +<tscreen><verb> +set query_command = "mutt_ldap_query.pl '%s'" +</verb></tscreen> + +The wrapper script should accept the query on the command-line. It +should return a one line message, then each matching response on a +single line, each line containing a tab separated address then name then +some other optional information. On error, or if there are no matching +addresses, return a non-zero exit code and a one line error message. + +An example multiple response output: +<tscreen><verb> +Searching database ... 20 entries ... 3 matching: +me@cs.hmc.edu Michael Elkins mutt dude +blong@fiction.net Brandon Long mutt and more +roessler@guug.de Thomas Roessler mutt pgp +</verb></tscreen> + +There are two mechanisms for accessing the query function of mutt. One +is to do a query from the index menu using the query function (default: Q). +This will prompt for a query, then bring up the query menu which will +list the matching responses. From the query menu, you can select +addresses to create aliases, or to mail. You can tag multiple messages +to mail, start a new query, or have a new query appended to the current +responses. + +The other mechanism for accessing the query function is for address +completion, similar to the alias completion. In any prompt for address +entry, you can use the complete-query function (default: ^T) to run a +query based on the current address you have typed. Like aliases, mutt +will look for what you have typed back to the last space or comma. If +there is a single response for that query, mutt will expand the address +in place. If there are multiple responses, mutt will activate the query +menu. At the query menu, you can select one or more addresses to be +added to the prompt. + +<sect1>Mailbox Formats +<p> +Mutt supports reading and writing of four different mailbox formats: +mbox, MMDF, MH and Maildir. The mailbox type is autodetected, so there +is no need to use a flag for different mailbox types. When creating new +mailboxes, Mutt uses the default specified with the <ref id="mbox_type" +name="$mbox_type"> variable. + +<bf/mbox/. This is the most widely used mailbox format for UNIX. All +messages are stored in a single file. Each message has a line of the form: + +<tscreen><verb> +From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST +</verb></tscreen> + +to denote the start of a new message (this is often referred to as the +``From_'' line). + +<bf/MMDF/. This is a variant of the <em/mbox/ format. Each message is +surrounded by lines containing ``^A^A^A^A'' (four control-A's). + +<bf/MH/. A radical departure from <em/mbox/ and <em/MMDF/, a mailbox +consists of a directory and each message is stored in a separate file. +The filename indicates the message number (however, this is may not +correspond to the message number Mutt displays). Deleted messages are +renamed with a comma (,) prepended to the filename. <bf/Note:/ Mutt +detects this type of mailbox by looking for either <tt/.mh_sequences/ +or <tt/.xmhcache/ (needed to distinguish normal directories from MH +mailboxes). + +<bf/Maildir/. The newest of the mailbox formats, used by the Qmail MTA (a +replacement for sendmail). Similar to <em/MH/, except that it adds three +subdirectories of the mailbox: <em/tmp/, <em/new/ and <em/cur/. Filenames +for the messages are chosen in such a way they are unique, even when two +programs are writing the mailbox over NFS, which means that no file locking +is needed. + +<sect1>Mailbox Shortcuts<label id="shortcuts"> +<p> +There are a number of built in shortcuts which refer to specific mailboxes. +These shortcuts can be used anywhere you are prompted for a file or mailbox +path. + +<itemize> +<item>! -- refers to your <ref id="spoolfile" name="$spoolfile"> (incoming) mailbox +<item>> -- refers to your <ref id="mbox" name="$mbox"> file +<item>< -- refers to your <ref id="record" name="$record"> file +<item>- or !! -- refers to the file you've last visited +<item>˜ -- refers to your home directory +<item>= or + -- refers to your <ref id="folder" name="$folder"> directory +<item>@<em/alias/ -- refers to the <ref id="save-hook" +name="default save folder"> as determined by the address of the alias +</itemize> + +<sect1>Handling Mailing Lists<label id="using_lists"> +<p> + +Mutt has a few configuration options that make dealing with large +amounts of mail easier. The first thing you must do is to let Mutt +know what addresses you consider to be mailing lists (technically +this does not have to be a mailing list, but that is what it is most +often used for), and what lists you are subscribed to. This is +accomplished through the use of the <ref id="lists" +name="lists and subscribe"> commands in your muttrc. + +Now that Mutt knows what your mailing lists are, it can do several +things, the first of which is the ability to show the name of a list +through which you received a message (i.e., of a subscribed list) in +the <em/index/ menu display. This is useful to distinguish between +personal and list mail in the same mailbox. In the <ref id="index_format" +name="$index_format"> variable, the escape ``%L'' +will return the string ``To <list>'' when ``list'' appears in the +``To'' field, and ``Cc <list>'' when it appears in the ``Cc'' +field (otherwise it returns the name of the author). + +Often times the ``To'' and ``Cc'' fields in mailing list messages +tend to get quite large. Most people do not bother to remove the +author of the message they are reply to from the list, resulting in +two or more copies being sent to that person. The ``list-reply'' +function, which by default is bound to ``L'' in the <em/index/ menu +and <em/pager/, helps reduce the clutter by only replying to the +known mailing list addresses instead of all recipients (except as +specified by <tt/Mail-Followup-To/, see below). + +Mutt also supports the <tt/Mail-Followup-To/ header. When you send +a message to a list of recipients which includes one or several +subscribed mailing lists, and if the <ref id="followup_to" +name="$followup_to"> option is set, mutt will generate +a Mail-Followup-To header which contains all the recipients to whom +you send this message, but not your address. This indicates that +group-replies or list-replies (also known as ``followups'') to this +message should only be sent to the original recipients of the +message, and not separately to you - you'll receive your copy through +one of the mailing lists you are subscribed to. + +Conversely, when group-replying or list-replying to a message which +has a <tt/Mail-Followup-To/ header, mutt will respect this header if +the <ref id="honor_followup_to" +name="$honor_followup_to"> configuration +variable is set. Using list-reply will in this case also make sure +that the reply goes to the mailing list, even if it's not specified +in the list of recipients in the <tt/Mail-Followup-To/. + +Note that, when header editing is enabled, you can create a +<tt/Mail-Followup-To/ header manually. Mutt will only auto-generate +this header if it doesn't exist when you send the message. + + +The other method some mailing list admins use is to generate a +``Reply-To'' field which points back to the mailing list address rather +than the author of the message. This can create problems when trying +to reply directly to the author in private, since most mail clients +will automatically reply to the address given in the ``Reply-To'' +field. Mutt uses the <ref id="reply_to" name="$reply_to"> +variable to help decide which address to use. If set, you will be +prompted as to whether or not you would like to use the address given in +the ``Reply-To'' field, or reply directly to the address given in the +``From'' field. When unset, the ``Reply-To'' field will be used when +present. + +The ``X-Label:'' header field can be used to further identify mailing +lists or list subject matter (or just to annotate messages +individually). The <ref id="index_format" +name="$index_format"> variable's ``%y'' and +``%Y'' escapes can be used to expand ``X-Label:'' fields in the +index, and Mutt's pattern-matcher can match regular expressions to +``X-Label:'' fields with the ``~y'' selector. ``X-Label:'' is not a +standard message header field, but it can easily be inserted by procmail +and other mail filtering agents. + +Lastly, Mutt has the ability to <ref id="sort" name="sort"> the mailbox into +<ref id="threads" name="threads">. A thread is a group of messages which all relate to the same +subject. This is usually organized into a tree-like structure where a +message and all of its replies are represented graphically. If you've ever +used a threaded news client, this is the same concept. It makes dealing +with large volume mailing lists easier because you can easily delete +uninteresting threads and quickly find topics of value. + +<sect1>Delivery Status Notification (DSN) Support +<p> +RFC1894 defines a set of MIME content types for relaying information +about the status of electronic mail messages. These can be thought of as +``return receipts.'' Berkeley sendmail 8.8.x currently has some command +line options in which the mail client can make requests as to what type +of status messages should be returned. + +To support this, there are two variables. <ref id="dsn_notify" +name="$dsn_notify"> is used to request receipts for +different results (such as failed message, message delivered, etc.). +<ref id="dsn_return" name="$dsn_return"> requests how much +of your message should be returned with the receipt (headers or full +message). Refer to the man page on sendmail for more details on DSN. + +<sect1>POP3 Support (OPTIONAL) +<p> + +If Mutt was compiled with POP3 support (by running the <em/configure/ +script with the <em/--enable-pop/ flag), it has the ability to work +with mailboxes located on a remote POP3 server and fetch mail for local +browsing. + +You can access the remote POP3 mailbox by selecting the folder +<tt>pop://popserver/</tt>. + +You can select an alternative port by specifying it with the server, ie: +<tt>pop://popserver:port/</tt>. + +You can also specify different username for each folder, ie: +<tt>pop://username@popserver[:port]/</tt>. + +Polling for new mail is more expensive over POP3 than locally. For this +reason the frequency at which Mutt will check for mail remotely can be +controlled by the +<ref id="pop_checkinterval" name="$pop_checkinterval"> +variable, which defaults to every 60 seconds. + +If Mutt was compiled with SSL support (by running the <em/configure/ +script with the <em/--with-ssl/ flag), connections to POP3 servers +can be encrypted. This naturally requires that the server supports +SSL encrypted connections. To access a folder with POP3/SSL, you should +use pops: prefix, ie: +<tt>pops://[username@]popserver[:port]/</tt>. + +Another way to access your POP3 mail is the <em/fetch-mail/ function +(default: G). It allows to connect to <ref id="pop_host" +name="pop_host">, fetch all your new mail and place it in the +local <ref id="spoolfile" name="spoolfile">. After this +point, Mutt runs exactly as if the mail had always been local. + +<bf/Note:/ If you only need to fetch all messages to local mailbox +you should consider using a specialized program, such as <htmlurl +url="http://www.ccil.org/~esr/fetchmail" name="fetchmail"> + +<sect1>IMAP Support (OPTIONAL) +<p> + +If Mutt was compiled with IMAP support (by running the <em/configure/ +script with the <em/--enable-imap/ flag), it has the ability to work +with folders located on a remote IMAP server. + +You can access the remote inbox by selecting the folder +<tt>imap://imapserver/INBOX</tt>, where <tt/imapserver/ is the name of the +IMAP server and <tt/INBOX/ is the special name for your spool mailbox on +the IMAP server. If you want to access another mail folder at the IMAP +server, you should use <tt>imap://imapserver/path/to/folder</tt> where +<tt>path/to/folder</tt> is the path of the folder you want to access. + +You can select an alternative port by specifying it with the server, ie: +<tt>imap://imapserver:port/INBOX</tt>. + +You can also specify different username for each folder, ie: +<tt>imap://username@imapserver[:port]/INBOX</tt>. + +If Mutt was compiled with SSL support (by running the <em/configure/ +script with the <em/--with-ssl/ flag), connections to IMAP servers +can be encrypted. This naturally requires that the server supports +SSL encrypted connections. To access a folder with IMAP/SSL, you should +use <tt>imaps://[username@]imapserver[:port]/path/to/folder</tt> as your +folder path. + +Pine-compatible notation is also supported, ie +<tt>{[username@]imapserver[:port][/ssl]}path/to/folder</tt> + +Note that not all servers use / as the hierarchy separator. Mutt should +correctly notice which separator is being used by the server and convert +paths accordingly. + +When browsing folders on an IMAP server, you can toggle whether to look +at only the folders you are subscribed to, or all folders with the +<em/toggle-subscribed/ command. See also the +<ref id="imap_list_subscribed" +name="$imap_list_subscribed"> variable. + +Polling for new mail on an IMAP server can cause noticeable delays. So, you'll +want to carefully tune the +<ref id="mail_check" name="$mail_check"> +and +<ref id="timeout" name="$timeout"> +variables. Personally I use +<tscreen><verb> +set mail_check=90 +set timeout=15 +</verb></tscreen> +with relatively good results over my slow modem line. + +Note that if you are using mbox as the mail store on UW servers prior to +v12.250, the server has been reported to disconnect a client if another client +selects the same folder. + +<sect2>The Folder Browser +<p> + +As of version 1.2, mutt supports browsing mailboxes on an IMAP +server. This is mostly the same as the local file browser, with the +following differences: +<itemize> +<item>In lieu of file permissions, mutt displays the string "IMAP", + possibly followed by the symbol "+", indicating + that the entry contains both messages and subfolders. On + Cyrus-like servers folders will often contain both messages and + subfolders. +<item>For the case where an entry can contain both messages and + subfolders, the selection key (bound to <tt>enter</tt> by default) + will choose to descend into the subfolder view. If you wish to view + the messages in that folder, you must use <tt>view-file</tt> instead + (bound to <tt>space</tt> by default). +<item>You can delete mailboxes with the <tt>delete-mailbox</tt> + command (bound to <tt>d</tt> by default. You may also + <tt>subscribe</tt> and <tt>unsubscribe</tt> to mailboxes (normally + these are bound to <tt>s</tt> and <tt>u</tt>, respectively). +</itemize> + +<sect2>Authentication +<p> + +Mutt supports four authentication methods with IMAP servers: SASL, +GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add +NTLM authentication for you poor exchange users out there, but it has +yet to be integrated into the main tree). There is also support for +the pseudo-protocol ANONYMOUS, which allows you to log in to a public +IMAP server without having an account. To use ANONYMOUS, simply make +your username blank or "anonymous". +<p> +SASL is a special super-authenticator, which selects among several protocols +(including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the most secure +method available on your host and the server. Using some of these methods +(including DIGEST-MD5 and possibly GSSAPI), your entire session will be +encrypted and invisible to those teeming network snoops. It is the best +option if you have it. To use it, you must have the Cyrus SASL library +installed on your system and compile mutt with the <em/--with-sasl/ flag. +<p> +Mutt will try whichever methods are compiled in and available on the server, +in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN. + +There are a few variables which control authentication: +<itemize> +<item><ref id="imap_user" name="$imap_user"> - controls + the username under which you request authentication on the IMAP server, + for all authenticators. This is overridden by an explicit username in + the mailbox path (ie by using a mailbox name of the form + <tt/{user@host}/). +<item><ref id="imap_pass" name="$imap_pass"> - a + password which you may preset, used by all authentication methods where + a password is needed. +<item><ref id="imap_authenticators" + name="$imap_authenticators"> - a colon-delimited list of IMAP + authentication methods to try, in the order you wish to try them. If + specified, this overrides mutt's default (attempt everything, in the order + listed above). +</itemize> + +<sect1>Managing multiple IMAP/POP accounts (OPTIONAL)<label id="account-hook"> +<p> + +If you happen to have accounts on multiple IMAP and/or POP servers, +you may find managing all the authentication settings inconvenient and +error-prone. The account-hook command may help. This hook works like +folder-hook but is invoked whenever you access a remote mailbox +(including inside the folder browser), not just when you open the +mailbox. +<p> +Some examples: + +<tscreen><verb> +account-hook . 'unset imap_user; unset imap_pass; unset tunnel' +account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo' +account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"' +</verb></tscreen> + +<sect1>Start a WWW Browser on URLs (EXTERNAL)<label id="urlview"> +<p> +If a message contains URLs (<em/unified ressource locator/ = address in the +WWW space like <em>http://www.mutt.org/</em>), it is efficient to get +a menu with all the URLs and start a WWW browser on one of them. This +functionality is provided by the external urlview program which can be +retrieved at <htmlurl url="ftp://ftp.mutt.org/mutt/contrib/" +name="ftp://ftp.mutt.org/mutt/contrib/"> and the configuration commands: +<tscreen><verb> +macro index \cb |urlview\n +macro pager \cb |urlview\n +</verb></tscreen> + +<sect>Mutt's MIME Support +<p> +Quite a bit of effort has been made to make Mutt the premier text-mode +MIME MUA. Every effort has been made to provide the functionality that +the discerning MIME user requires, and the conformance to the standards +wherever possible. When configuring Mutt for MIME, there are two extra +types of configuration files which Mutt uses. One is the +<tt/mime.types/ file, which contains the mapping of file extensions to +IANA MIME types. The other is the <tt/mailcap/ file, which specifies +the external commands to use for handling specific MIME types. + +<sect1>Using MIME in Mutt +<p> +There are three areas/menus in Mutt which deal with MIME, they are the +pager (while viewing a message), the attachment menu and the compose +menu. + +<sect2>Viewing MIME messages in the pager +<p> +When you select a message from the index and view it in the pager, Mutt +decodes the message to a text representation. Mutt internally supports +a number of MIME types, including <tt>text/plain, text/enriched, +message/rfc822, and message/news</tt>. In addition, the export +controlled version of Mutt recognizes a variety of PGP MIME types, +including PGP/MIME and application/pgp. + +Mutt will denote attachments with a couple lines describing them. +These lines are of the form: +<tscreen><verb> +[-- Attachment #1: Description --] +[-- Type: text/plain, Encoding: 7bit, Size: 10000 --] +</verb></tscreen> +Where the <tt/Description/ is the description or filename given for the +attachment, and the <tt/Encoding/ is one of +<tt>7bit/8bit/quoted-printable/base64/binary</tt>. + +If Mutt cannot deal with a MIME type, it will display a message like: +<tscreen><verb> +[-- image/gif is unsupported (use 'v' to view this part) --] +</verb></tscreen> + +<sect2>The Attachment Menu<label id="attach_menu"> +<p> +The default binding for <tt/view-attachments/ is `v', which displays the +attachment menu for a message. The attachment menu displays a list of +the attachments in a message. From the attachment menu, you can save, +print, pipe, delete, and view attachments. You can apply these +operations to a group of attachments at once, by tagging the attachments +and by using the ``tag-prefix'' operator. You can also reply to the +current message from this menu, and only the current attachment (or the +attachments tagged) will be quoted in your reply. You can view +attachments as text, or view them using the mailcap viewer definition. + +Finally, you can apply the usual message-related functions (like +<ref id="resend-message" name="resend-message">, and the reply +and forward functions) to attachments of type <tt>message/rfc822</tt>. + +See the help on the attachment menu for more information. + +<sect2>The Compose Menu<label id="compose_menu"> +<p> +The compose menu is the menu you see before you send a message. It +allows you to edit the recipient list, the subject, and other aspects +of your message. It also contains a list of the attachments of your +message, including the main body. From this menu, you can print, copy, +filter, pipe, edit, compose, review, and rename an attachment or a +list of tagged attachments. You can also modifying the attachment +information, notably the type, encoding and description. + +Attachments appear as follows: +<verb> +- 1 [text/plain, 7bit, 1K] /tmp/mutt-euler-8082-0 <no description> + 2 [applica/x-gunzip, base64, 422K] ~/src/mutt-0.85.tar.gz <no description> +</verb> + +The '-' denotes that Mutt will delete the file after sending (or +postponing, or cancelling) the message. It can be toggled with the +<tt/toggle-unlink/ command (default: u). The next field is the MIME +content-type, and can be changed with the <tt/edit-type/ command +(default: ^T). The next field is the encoding for the attachment, +which allows a binary message to be encoded for transmission on 7bit +links. It can be changed with the <tt/edit-encoding/ command +(default: ^E). The next field is the size of the attachment, +rounded to kilobytes or megabytes. The next field is the filename, +which can be changed with the <tt/rename-file/ command (default: R). +The final field is the description of the attachment, and can be +changed with the <tt/edit-description/ command (default: d). + +<sect1>MIME Type configuration with <tt/mime.types/ +<p> +When you add an attachment to your mail message, Mutt searches your +personal mime.types file at <tt>${HOME}/.mime.types</tt>, and then +the system mime.types file at <tt>/usr/local/share/mutt/mime.types</tt> or +<tt>/etc/mime.types</tt> + +The mime.types file consist of lines containing a MIME type and a space +separated list of extensions. For example: +<tscreen><verb> +application/postscript ps eps +application/pgp pgp +audio/x-aiff aif aifc aiff +</verb></tscreen> +A sample <tt/mime.types/ file comes with the Mutt distribution, and +should contain most of the MIME types you are likely to use. + +If Mutt can not determine the mime type by the extension of the file you +attach, it will look at the file. If the file is free of binary +information, Mutt will assume that the file is plain text, and mark it +as <tt>text/plain</tt>. If the file contains binary information, then Mutt will +mark it as <tt>application/octet-stream</tt>. You can change the MIME +type that Mutt assigns to an attachment by using the <tt/edit-type/ +command from the compose menu (default: ^T). The MIME type is actually a +major mime type followed by the sub-type, separated by a '/'. 6 major +types: application, text, image, video, audio, and model have been approved +after various internet discussions. Mutt recognises all of these if the +appropriate entry is found in the mime.types file. It also recognises other +major mime types, such as the chemical type that is widely used in the +molecular modelling community to pass molecular data in various forms to +various molecular viewers. Non-recognised mime types should only be used +if the recipient of the message is likely to be expecting such attachments. + +<sect1>MIME Viewer configuration with <tt/mailcap/ +<p> +Mutt supports RFC 1524 MIME Configuration, in particular the Unix +specific format specified in Appendix A of RFC 1524. This file format +is commonly referred to as the mailcap format. Many MIME compliant +programs utilize the mailcap format, allowing you to specify handling +for all MIME types in one place for all programs. Programs known to +use this format include Netscape, XMosaic, lynx and metamail. + +In order to handle various MIME types that Mutt can not handle +internally, Mutt parses a series of external configuration files to +find an external handler. The default search string for these files +is a colon delimited list set to +<tscreen><verb> +${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap +</verb></tscreen> +where <tt/$HOME/ is your home directory. + +In particular, the metamail distribution will install a mailcap file, +usually as <tt>/usr/local/etc/mailcap</tt>, which contains some baseline +entries. + +<sect2>The Basics of the mailcap file +<p> +A mailcap file consists of a series of lines which are comments, blank, +or definitions. + +A comment line consists of a # character followed by anything you want. + +A blank line is blank. + +A definition line consists of a content type, a view command, and any +number of optional fields. Each field of a definition line is divided +by a semicolon ';' character. + +The content type is specified in the MIME standard type/subtype method. +For example, +<tt>text/plain, text/html, image/gif, </tt> +etc. In addition, the mailcap format includes two formats for +wildcards, one using the special '*' subtype, the other is the implicit +wild, where you only include the major type. For example, <tt>image/*</tt>, or +<tt>video,</tt> will match all image types and video types, +respectively. + +The view command is a Unix command for viewing the type specified. There +are two different types of commands supported. The default is to send +the body of the MIME message to the command on stdin. You can change +this behaviour by using %s as a parameter to your view command. +This will cause Mutt to save the body of the MIME message to a temporary +file, and then call the view command with the %s replaced by +the name of the temporary file. In both cases, Mutt will turn over the +terminal to the view program until the program quits, at which time Mutt +will remove the temporary file if it exists. + +So, in the simplest form, you can send a text/plain message to the +external pager more on stdin: +<tscreen><verb> +text/plain; more +</verb></tscreen> +Or, you could send the message as a file: +<tscreen><verb> +text/plain; more %s +</verb></tscreen> +Perhaps you would like to use lynx to interactively view a text/html +message: +<tscreen><verb> +text/html; lynx %s +</verb></tscreen> +In this case, lynx does not support viewing a file from stdin, so you +must use the %s syntax. +<bf/Note:/ <em>Some older versions of lynx contain a bug where they +will check the mailcap file for a viewer for text/html. They will find +the line which calls lynx, and run it. This causes lynx to continuously +spawn itself to view the object.</em> + +On the other hand, maybe you don't want to use lynx interactively, you +just want to have it convert the text/html to text/plain, then you can +use: +<tscreen><verb> +text/html; lynx -dump %s | more +</verb></tscreen> + +Perhaps you wish to use lynx to view text/html files, and a pager on +all other text formats, then you would use the following: +<tscreen><verb> +text/html; lynx %s +text/*; more +</verb></tscreen> +This is the simplest form of a mailcap file. + +<sect2>Secure use of mailcap +<p> +The interpretion of shell meta-characters embedded in MIME parameters +can lead to security problems in general. Mutt tries to quote parameters +in expansion of %s syntaxes properly, and avoids risky characters by +substituting them, see the <ref id="mailcap_sanitize" +name="mailcap_sanitize"> variable. + +Although mutt's procedures to invoke programs with mailcap seem to be +safe, there are other applications parsing mailcap, maybe taking less care +of it. Therefore you should pay attention to the following rules: + +<em/Keep the %-expandos away from shell quoting./ +Don't quote them with single or double quotes. Mutt does this for +you, the right way, as should any other program which interprets +mailcap. Don't put them into backtick expansions. Be highly careful +with eval statements, and avoid them if possible at all. Trying to fix +broken behaviour with quotes introduces new leaks - there is no +alternative to correct quoting in the first place. + +If you have to use the %-expandos' values in context where you need +quoting or backtick expansions, put that value into a shell variable +and reference the shell variable where necessary, as in the following +example (using <tt/$charset/ inside the backtick expansion is safe, +since it is not itself subject to any further expansion): + +<tscreen><verb> +text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \ + && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1 +</verb></tscreen> + +<sect2>Advanced mailcap Usage +<p> + +<sect3>Optional Fields +<p> +In addition to the required content-type and view command fields, you +can add semi-colon ';' separated fields to set flags and other options. +Mutt recognizes the following optional fields: +<descrip> +<tag/copiousoutput/ +This flag tells Mutt that the command passes possibly large amounts of +text on stdout. This causes Mutt to invoke a pager (either the internal +pager or the external pager defined by the pager variable) on the output +of the view command. Without this flag, Mutt assumes that the command +is interactive. One could use this to replace the pipe to <tt>more</tt> +in the <tt>lynx -dump</tt> example in the Basic section: +<tscreen><verb> +text/html; lynx -dump %s ; copiousoutput +</verb></tscreen> +This will cause lynx to format the text/html output as text/plain +and Mutt will use your standard pager to display the results. +<tag/needsterminal/ +Mutt uses this flag when viewing attachments with <ref id="auto_view" +name="autoview">, in order to decide whether it should honor the setting +of the <ref id="wait_key" name="$wait_key"> variable or +not. When an attachment is viewed using an interactive program, and the +corresponding mailcap entry has a <em/needsterminal/ flag, Mutt will use +<ref id="wait_key" name="$wait_key"> and the exit status +of the program to decide if it will ask you to press a key after the +external program has exited. In all other situations it will not prompt +you for a key. +<tag>compose=<command></tag> +This flag specifies the command to use to create a new attachment of a +specific MIME type. Mutt supports this from the compose menu. +<tag>composetyped=<command></tag> +This flag specifies the command to use to create a new attachment of a +specific MIME type. This command differs from the compose command in +that mutt will expect standard MIME headers on the data. This can be +used to specify parameters, filename, description, etc. for a new +attachment. Mutt supports this from the compose menu. +<tag>print=<command></tag> +This flag specifies the command to use to print a specific MIME type. +Mutt supports this from the attachment and compose menus. +<tag>edit=<command></tag> +This flag specifies the command to use to edit a specific MIME type. +Mutt supports this from the compose menu, and also uses it to compose +new attachments. Mutt will default to the defined editor for text +attachments. +<tag>nametemplate=<template></tag> +This field specifies the format for the file denoted by %s in the +command fields. Certain programs will require a certain file extension, +for instance, to correctly view a file. For instance, lynx will only +interpret a file as <tt>text/html</tt> if the file ends in <tt/.html/. +So, you would specify lynx as a <tt>text/html</tt> viewer with a line in +the mailcap file like: +<tscreen><verb> +text/html; lynx %s; nametemplate=%s.html +</verb></tscreen> +<tag>test=<command></tag> +This field specifies a command to run to test whether this mailcap +entry should be used. The command is defined with the command expansion +rules defined in the next section. If the command returns 0, then the +test passed, and Mutt uses this entry. If the command returns non-zero, +then the test failed, and Mutt continues searching for the right entry. +<bf/Note:/ <em>the content-type must match before Mutt performs the test.</em> +For example: +<tscreen><verb> +text/html; netscape -remote 'openURL(%s)' ; test=RunningX +text/html; lynx %s +</verb></tscreen> +In this example, Mutt will run the program RunningX which will return 0 +if the X Window manager is running, and non-zero if it isn't. If +RunningX returns 0, then Mutt will call netscape to display the +text/html object. If RunningX doesn't return 0, then Mutt will go on +to the next entry and use lynx to display the text/html object. +</descrip> + +<sect3>Search Order +<p> +When searching for an entry in the mailcap file, Mutt will search for +the most useful entry for its purpose. For instance, if you are +attempting to print an <tt>image/gif</tt>, and you have the following +entries in your mailcap file, Mutt will search for an entry with the +print command: +<tscreen><verb> +image/*; xv %s +image/gif; ; print= anytopnm %s | pnmtops | lpr; \ + nametemplate=%s.gif +</verb></tscreen> +Mutt will skip the <tt>image/*</tt> entry and use the <tt>image/gif</tt> +entry with the print command. + +In addition, you can use this with <ref id="auto_view" name="Autoview"> +to denote two commands for viewing an attachment, one to be viewed +automatically, the other to be viewed interactively from the attachment +menu. In addition, you can then use the test feature to determine which +viewer to use interactively depending on your environment. +<tscreen><verb> +text/html; netscape -remote 'openURL(%s)' ; test=RunningX +text/html; lynx %s; nametemplate=%s.html +text/html; lynx -dump %s; nametemplate=%s.html; copiousoutput +</verb></tscreen> +For <ref id="auto_view" name="Autoview">, Mutt will choose the third +entry because of the copiousoutput tag. For interactive viewing, Mutt +will run the program RunningX to determine if it should use the first +entry. If the program returns non-zero, Mutt will use the second entry +for interactive viewing. + +<sect3>Command Expansion +<p> +The various commands defined in the mailcap files are passed to the +<tt>/bin/sh</tt> shell using the system() function. Before the +command is passed to <tt>/bin/sh -c</tt>, it is parsed to expand +various special parameters with information from Mutt. The keywords +Mutt expands are: +<descrip> +<tag/%s/ +As seen in the basic mailcap section, this variable is expanded +to a filename specified by the calling program. This file contains +the body of the message to view/print/edit or where the composing +program should place the results of composition. In addition, the +use of this keyword causes Mutt to not pass the body of the message +to the view/print/edit program on stdin. +<tag/%t/ +Mutt will expand %t to the text representation of the content +type of the message in the same form as the first parameter of the +mailcap definition line, ie <tt>text/html</tt> or +<tt>image/gif</tt>. +<tag>%{<parameter>}</tag> +Mutt will expand this to the value of the specified parameter +from the Content-Type: line of the mail message. For instance, if +Your mail message contains: +<tscreen><verb> +Content-Type: text/plain; charset=iso-8859-1 +</verb></tscreen> +then Mutt will expand %{charset} to iso-8859-1. The default metamail +mailcap file uses this feature to test the charset to spawn an xterm +using the right charset to view the message. +<tag>\%</tag> +This will be replaced by a % +</descrip> +Mutt does not currently support the %F and %n keywords +specified in RFC 1524. The main purpose of these parameters is for +multipart messages, which is handled internally by Mutt. + +<sect2>Example mailcap files +<p> +This mailcap file is fairly simple and standard: +<code> +# I'm always running X :) +video/*; xanim %s > /dev/null +image/*; xv %s > /dev/null + +# I'm always running netscape (if my computer had more memory, maybe) +text/html; netscape -remote 'openURL(%s)' +</code> + +This mailcap file shows quite a number of examples: + +<code> +# Use xanim to view all videos Xanim produces a header on startup, +# send that to /dev/null so I don't see it +video/*; xanim %s > /dev/null + +# Send html to a running netscape by remote +text/html; netscape -remote 'openURL(%s)'; test=RunningNetscape + +# If I'm not running netscape but I am running X, start netscape on the +# object +text/html; netscape %s; test=RunningX + +# Else use lynx to view it as text +text/html; lynx %s + +# This version would convert the text/html to text/plain +text/html; lynx -dump %s; copiousoutput + +# I use enscript to print text in two columns to a page +text/*; more %s; print=enscript -2Gr %s + +# Netscape adds a flag to tell itself to view jpegs internally +image/jpeg;xv %s; x-mozilla-flags=internal + +# Use xv to view images if I'm running X +# In addition, this uses the \ to extend the line and set my editor +# for images +image/*;xv %s; test=RunningX; \ + edit=xpaint %s + +# Convert images to text using the netpbm tools +image/*; (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm | +pbmtoascii -1x2 ) 2>&1 ; copiousoutput + +# Send excel spreadsheets to my NT box +application/ms-excel; open.pl %s +</code> + +<sect1>MIME Autoview<label id="auto_view"> +<p> +In addition to explicitly telling Mutt to view an attachment with the +MIME viewer defined in the mailcap file, Mutt has support for +automatically viewing MIME attachments while in the pager. + +To work, you must define a viewer in the mailcap file which uses the +<tt/copiousoutput/ option to denote that it is non-interactive. +Usually, you also use the entry to convert the attachment to a text +representation which you can view in the pager. + +You then use the <tt/auto_view/ muttrc command to list the +content-types that you wish to view automatically. + +For instance, if you set auto_view to: +<tscreen><verb> +auto_view text/html application/x-gunzip application/postscript image/gif application/x-tar-gz +</verb></tscreen> + +Mutt could use the following mailcap entries to automatically view +attachments of these types. +<tscreen><verb> +text/html; lynx -dump %s; copiousoutput; nametemplate=%s.html +image/*; anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput +application/x-gunzip; gzcat; copiousoutput +application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput +application/postscript; ps2ascii %s; copiousoutput +</verb></tscreen> + +``unauto_view'' can be used to remove previous entries from the autoview list. +This can be used with message-hook to autoview messages based on size, etc. +``unauto_view *'' will remove all previous entries. + +<sect1>MIME Multipart/Alternative<label id="alternative_order"> +<p> +Mutt has some heuristics for determining which attachment of a +multipart/alternative type to display. First, mutt will check the +alternative_order list to determine if one of the available types +is preferred. The alternative_order list consists of a number of +mimetypes in order, including support for implicit and explicit +wildcards, for example: +<tscreen><verb> +alternative_order text/enriched text/plain text application/postscript image/* +</verb></tscreen> + +Next, mutt will check if any of the types have a defined +<ref id="auto_view" name="auto_view">, and use that. Failing +that, Mutt will look for any text type. As a last attempt, mutt will +look for any type it knows how to handle. + +To remove a MIME type from the <tt/alternative_order/ list, use the +<tt/unalternative_order/ command. + +<sect1>MIME Lookup<label id="mime_lookup"> +<p> +Mutt's mime_lookup list specifies a list of mime-types that should not +be treated according to their mailcap entry. This option is designed to +deal with binary types such as application/octet-stream. When an attachment's +mime-type is listed in mime_lookup, then the extension of the filename will +be compared to the list of extensions in the mime.types file. The mime-type +associated with this extension will then be used to process the attachment +according to the rules in the mailcap file and according to any other configuration +options (such as auto_view) specified. Common usage would be: +<tscreen><verb> +mime-lookup application/octet-stream application/X-Lotus-Manuscript +</verb></tscreen> + +In addition, the unmime_lookup command may be used to disable this feature +for any particular mime-type if it had been set, for example, in a global +muttrc. + +<sect>Reference +<sect1>Command line options<label id="commandline"> +<p> +Running <tt/mutt/ with no arguments will make Mutt attempt to read your spool +mailbox. However, it is possible to read other mailboxes and +to send messages from the command line as well. + +<tscreen><verb> +-A expand an alias +-a attach a file to a message +-b specify a blind carbon-copy (BCC) address +-c specify a carbon-copy (Cc) address +-e specify a config command to be run after initilization files are read +-f specify a mailbox to load +-F specify an alternate file to read initialization commands +-h print help on command line options +-H specify a draft file from which to read a header and body +-i specify a file to include in a message composition +-m specify a default mailbox type +-n do not read the system Muttrc +-p recall a postponed message +-Q query a configuration variable +-R open mailbox in read-only mode +-s specify a subject (enclose in quotes if it contains spaces) +-v show version number and compile-time definitions +-x simulate the mailx(1) compose mode +-y show a menu containing the files specified by the mailboxes command +-z exit immediately if there are no messages in the mailbox +-Z open the first folder with new message,exit immediately if none +</verb></tscreen> + +To read messages in a mailbox + +<tt/mutt/ [ -nz ] [ -F <em/muttrc/ ] [ -m <em/type/ ] [ -f <em/mailbox/ ] + +To compose a new message + +<tt/mutt/ [ -n ] [ -F <em/muttrc/ ] [ -a <em/file/ ] [ -c <em/address/ ] [ -i <em/filename/ ] [ -s <em/subject/ ] <em/address/ [ <em/address/ ... ] + +Mutt also supports a ``batch'' mode to send prepared messages. Simply redirect +input from the file you wish to send. For example, + +<tt>mutt -s &dquot;data set for run #2&dquot; professor@bigschool.edu +< ˜/run2.dat</tt> + +This command will send a message to ``professor@bigschool.edu'' with a subject +of ``data set for run #2''. In the body of the message will be the contents +of the file ``˜/run2.dat''. + +<sect1>Configuration Commands<label id="commands"> +<p> +The following are the commands understood by mutt. + +<itemize> +<item> +<tt><ref id="account-hook" name="account-hook"></tt> <em/pattern/ <em/command/ +<item> +<tt><ref id="alias" name="alias"></tt> <em/key/ <em/address/ [ , <em/address/, ... ] +<item> +<tt><ref id="alias" name="unalias"></tt> [ * | <em/key/ ... ] +<item> +<tt><ref id="alternates" name="alternates"></tt> <em/regexp/ [ <em/regexp/ ... ] +<item> +<tt><ref id="alternates" name="unalternates"></tt> [ * | <em/regexp/ ... ] +<item> +<tt><ref id="alternative_order" name="alternative_order"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="alternative_order" name="unalternative_order"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="auto_view" name="auto_view"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="auto_view" name="unauto_view"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="bind" name="bind"></tt> <em/map/ <em/key/ <em/function/ +<item> +<tt><ref id="charset-hook" name="charset-hook"></tt> <em/alias/ <em/charset/ +<item> +<tt><ref id="color" name="color"></tt> <em/object/ <em/foreground/ <em/background/ [ <em/regexp/ ] +<item> +<tt><ref id="color" name="uncolor"></tt> <em/index/ <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="exec" name="exec"></tt> <em/function/ [ <em/function/ ... ] +<item> +<tt><ref id="fcc-hook" name="fcc-hook"></tt> <em/pattern/ <em/mailbox/ +<item> +<tt><ref id="fcc-save-hook" name="fcc-save-hook"></tt> <em/pattern/ <em/mailbox/ +<item> +<tt><ref id="folder-hook" name="folder-hook"></tt> <em/pattern/ <em/command/ +<item> +<tt><ref id="hdr_order" name="hdr_order"></tt> <em/header/ [ <em/header/ ... ] +<item> +<tt><ref id="hdr_order" name="unhdr_order"></tt> <em/header/ [ <em/header/ ... ] +<item> +<tt><ref id="charset-hook" name="iconv-hook"></tt> <em/charset/ <em/local-charset/ +<item> +<tt><ref id="ignore" name="ignore"></tt> <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="ignore" name="unignore"></tt> <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="lists" name="lists"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="lists" name="unlists"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="macro" name="macro"></tt> <em/menu/ <em/key/ <em/sequence/ [ <em/description/ ] +<item> +<tt><ref id="mailboxes" name="mailboxes"></tt> <em/filename/ [ <em/filename/ ... ] +<item> +<tt><ref id="mbox-hook" name="mbox-hook"></tt> <em/pattern/ <em/mailbox/ +<item> +<tt><ref id="message-hook" name="message-hook"></tt> <em/pattern/ <em/command/ +<item> +<tt><ref id="mime_lookup" name="mime_lookup"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="mime_lookup" name="unmime_lookup"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="color" name="mono"></tt> <em/object attribute/ [ <em/regexp/ ] +<item> +<tt><ref id="color" name="unmono"></tt> <em/index/ <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="my_hdr" name="my_hdr"></tt> <em/string/ +<item> +<tt><ref id="my_hdr" name="unmy_hdr"></tt> <em/field/ [ <em/field/ ... ] +<item> +<tt><ref id="crypt-hook" name="crypt-hook"></tt> <em/pattern/ <em/key-id/ +<item> +<tt><ref id="push" name="push"></tt> <em/string/ +<item> +<tt><ref id="set" name="reset"></tt> <em/variable/ [<em/variable/ ... ] +<item> +<tt><ref id="save-hook" name="save-hook"></tt> <em/regexp/ <em/filename/ +<item> +<tt><ref id="score-command" name="score"></tt> <em/pattern/ <em/value/ +<item> +<tt><ref id="score-command" name="unscore"></tt> <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="send-hook" name="send-hook"></tt> <em/regexp/ <em/command/ +<item> +<tt><ref id="set" name="set"></tt> [no|inv]<em/variable/[=<em/value/] [ <em/variable/ ... ] +<item> +<tt><ref id="set" name="unset"></tt> <em/variable/ [<em/variable/ ... ] +<item> +<tt><ref id="source" name="source"></tt> <em/filename/ +<item> +<tt><ref id="lists" name="subscribe"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="lists" name="unsubscribe"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="set" name="toggle"></tt> <em/variable/ [<em/variable/ ... ] +<item> +<tt><ref id="unhook" name="unhook"></tt> <em/hook-type/ +</itemize> + +<sect1>Configuration variables<label id="variables"> +<p> + + +<sect2>abort_nosubject<label id="abort_nosubject"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +If set to <em>yes</em>, when composing messages and no subject is given +at the subject prompt, composition will be aborted. If set to +<em>no</em>, composing messages with no subject given at the subject +prompt will never be aborted. + + +<sect2>abort_unmodified<label id="abort_unmodified"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +If set to <em>yes</em>, composition will automatically abort after +editing the message body if no changes are made to the file (this +check only happens after the <em>first</em> edit of the file). When set +to <em>no</em>, composition will never be aborted. + + +<sect2>alias_file<label id="alias_file"> +<p> +Type: path<newline> +Default: &dquot;˜/.muttrc&dquot; + +<p> +The default file in which to save aliases created by the +``<ref id="create-alias" name="create-alias">'' function. +<p> +<bf>Note:</bf> Mutt will not automatically source this file; you must +explicitly use the ``<ref id="source" name="source">'' command for it to be executed. + + +<sect2>alias_format<label id="alias_format"> +<p> +Type: string<newline> +Default: &dquot;%4n %2f %t %-10a %r&dquot; + +<p> +Specifies the format of the data displayed for the `alias' menu. The +following printf(3)-style sequences are available: +<p> + +<descrip> +<tag>%a </tag>alias name +<tag>%f </tag>flags - currently, a &dquot;d&dquot; for an alias marked for deletion +<tag>%n </tag>index number +<tag>%r </tag>address which alias expands to +<tag>%t </tag>character which indicates if the alias is tagged for inclusion +</descrip> + + +<sect2>allow_8bit<label id="allow_8bit"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether 8-bit data is converted to 7-bit using either Quoted- +Printable or Base64 encoding when sending mail. + + +<sect2>allow_ansi<label id="allow_ansi"> +<p> +Type: boolean<newline> +Default: no + +<p> +Controls whether ANSI color codes in messages (and color tags in +rich text messages) are to be interpreted. +Messages containing these codes are rare, but if this option is set, +their text will be colored accordingly. Note that this may override +your color choices, and even present a security problem, since a +message could include a line like &dquot;[-- PGP output follows ...&dquot; and +give it the same color as your attachment color. + + +<sect2>arrow_cursor<label id="arrow_cursor"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, an arrow (``->'') will be used to indicate the current entry +in menus instead of highlighting the whole line. On slow network or modem +links this will make response faster because there is less that has to +be redrawn on the screen when moving to the next or previous entries +in the menu. + + +<sect2>ascii_chars<label id="ascii_chars"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, Mutt will use plain ASCII characters when displaying thread +and attachment trees, instead of the default <em>ACS</em> characters. + + +<sect2>askbcc<label id="askbcc"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients +before editing an outgoing message. + + +<sect2>askcc<label id="askcc"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, Mutt will prompt you for carbon-copy (Cc) recipients before +editing the body of an outgoing message. + + +<sect2>ask_follow_up<label id="ask_follow_up"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, Mutt will prompt you for follow-up groups before editing +the body of an outgoing message. + + +<sect2>ask_x_comment_to<label id="ask_x_comment_to"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, Mutt will prompt you for x-comment-to field before editing +the body of an outgoing message. + + +<sect2>attach_format<label id="attach_format"> +<p> +Type: string<newline> +Default: &dquot;%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] &dquot; + +<p> +This variable describes the format of the `attachment' menu. The +following printf-style sequences are understood: +<p> + +<descrip> +<tag>%C </tag>charset +<tag>%c </tag>reqiures charset conversion (n or c) +<tag>%D </tag>deleted flag +<tag>%d </tag>description +<tag>%e </tag>MIME content-transfer-encoding +<tag>%f </tag>filename +<tag>%I </tag>disposition (I=inline, A=attachment) +<tag>%m </tag>major MIME type +<tag>%M </tag>MIME subtype +<tag>%n </tag>attachment number +<tag>%s </tag>size +<tag>%t </tag>tagged flag +<tag>%T </tag>graphic tree characters +<tag>%u </tag>unlink (=to delete) flag +<tag>%>X </tag>right justify the rest of the string and pad with character &dquot;X&dquot; +<tag>%|X </tag>pad to the end of the line with character &dquot;X&dquot; +</descrip> + + +<sect2>attach_sep<label id="attach_sep"> +<p> +Type: string<newline> +Default: &dquot;\n&dquot; + +<p> +The separator to add between attachments when operating (saving, +printing, piping, etc) on a list of tagged attachments. + + +<sect2>attach_split<label id="attach_split"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If this variable is unset, when operating (saving, printing, piping, +etc) on a list of tagged attachments, Mutt will concatenate the +attachments and will operate on them as a single attachment. The +``<ref id="attach_sep" name="$attach_sep">'' separator is added after each attachment. When set, +Mutt will operate on the attachments one by one. + + +<sect2>attribution<label id="attribution"> +<p> +Type: string<newline> +Default: &dquot;On %d, %n wrote:&dquot; + +<p> +This is the string that will precede a message which has been included +in a reply. For a full listing of defined printf()-like sequences see +the section on ``<ref id="index_format" name="$index_format">''. + + +<sect2>autoedit<label id="autoedit"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set along with ``<ref id="edit_headers" name="$edit_headers">'', Mutt will skip the initial +send-menu and allow you to immediately begin editing the body of your +message. The send-menu may still be accessed once you have finished +editing the body of your message. +<p> +Also see ``<ref id="fast_reply" name="$fast_reply">''. + + +<sect2>auto_tag<label id="auto_tag"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, functions in the <em>index</em> menu which affect a message +will be applied to all tagged messages (if there are any). When +unset, you must first use the tag-prefix function (default: &dquot;;&dquot;) to +make the next function apply to all tagged messages. + + +<sect2>beep<label id="beep"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When this variable is set, mutt will beep when an error occurs. + + +<sect2>beep_new<label id="beep_new"> +<p> +Type: boolean<newline> +Default: no + +<p> +When this variable is set, mutt will beep whenever it prints a message +notifying you of new mail. This is independent of the setting of the +``<ref id="beep" name="$beep">'' variable. + + +<sect2>bounce<label id="bounce"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether you will be asked to confirm bouncing messages. +If set to <em>yes</em> you don't get asked if you want to bounce a +message. Setting this variable to <em>no</em> is not generally useful, +and thus not recommended, because you are unable to bounce messages. + + +<sect2>bounce_delivered<label id="bounce_delivered"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When this variable is set, mutt will include Delivered-To headers when +bouncing messages. Postfix users may wish to unset this variable. + + +<sect2>catchup_newsgroup<label id="catchup_newsgroup"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +If this variable is <em>set</em>, Mutt will mark all articles in newsgroup +as read when you quit the newsgroup (catchup newsgroup). + + +<sect2>charset<label id="charset"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Character set your terminal uses to display and enter textual data. + + +<sect2>check_new<label id="check_new"> +<p> +Type: boolean<newline> +Default: yes + +<p> +<bf>Note:</bf> this option only affects <em>maildir</em> and <em>MH</em> style +mailboxes. +<p> +When <em>set</em>, Mutt will check for new mail delivered while the +mailbox is open. Especially with MH mailboxes, this operation can +take quite some time since it involves scanning the directory and +checking each file to see if it has already been looked at. If +<em>check_new</em> is <em>unset</em>, no check for new mail is performed +while the mailbox is open. + + +<sect2>collapse_unread<label id="collapse_unread"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When <em>unset</em>, Mutt will not collapse a thread if it contains any +unread messages. + + +<sect2>uncollapse_jump<label id="uncollapse_jump"> +<p> +Type: boolean<newline> +Default: no + +<p> +When <em>set</em>, Mutt will jump to the next unread message, if any, +when the current thread is <em>un</em>collapsed. + + +<sect2>compose_format<label id="compose_format"> +<p> +Type: string<newline> +Default: &dquot;-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-&dquot; + +<p> +Controls the format of the status line displayed in the \fCompose +menu. This string is similar to ``<ref id="status_format" name="$status_format">'', but has its own +set of printf()-like sequences: +<p> + +<descrip> +<tag>%a </tag>total number of attachments +<tag>%h </tag>local hostname +<tag>%l </tag>approximate size (in bytes) of the current message +<tag>%v </tag>Mutt version string +</descrip> + +<p> +See the text describing the ``<ref id="status_format" name="$status_format">'' option for more +information on how to set ``<ref id="compose_format" name="$compose_format">''. + + +<sect2>confirmappend<label id="confirmappend"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, Mutt will prompt for confirmation when appending messages to +an existing mailbox. + + +<sect2>confirmcreate<label id="confirmcreate"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, Mutt will prompt for confirmation when saving messages to a +mailbox which does not yet exist before creating it. + + +<sect2>connect_timeout<label id="connect_timeout"> +<p> +Type: number<newline> +Default: 30 + +<p> +Causes Mutt to timeout a network connection (for IMAP or POP) after this +many seconds if the connection is not able to be established. A negative +value causes Mutt to wait indefinitely for the connection to succeed. + + +<sect2>content_type<label id="content_type"> +<p> +Type: string<newline> +Default: &dquot;text/plain&dquot; + +<p> +Sets the default Content-Type for the body of newly composed messages. + + +<sect2>copy<label id="copy"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +This variable controls whether or not copies of your outgoing messages +will be saved for later references. Also see ``<ref id="record" name="$record">'', +``<ref id="save_name" name="$save_name">'', ``<ref id="force_name" name="$force_name">'' and ``<ref id="fcc-hook" name="fcc-hook">''. + + +<sect2>crypt_autopgp<label id="crypt_autopgp"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable controls whether or not mutt may automatically enable +PGP encryption/signing for messages. See also ``<ref id="crypt_autoencrypt" name="$crypt_autoencrypt">'', +``<ref id="crypt_replyencrypt" name="$crypt_replyencrypt">'', +``<ref id="crypt_autosign" name="$crypt_autosign">'', ``<ref id="crypt_replysign" name="$crypt_replysign">'' and ``<ref id="smime_is_default" name="$smime_is_default">''. + + +<sect2>crypt_autosmime<label id="crypt_autosmime"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable controls whether or not mutt may automatically enable +S/MIME encryption/signing for messages. See also ``<ref id="crypt_autoencrypt" name="$crypt_autoencrypt">'', +``<ref id="crypt_replyencrypt" name="$crypt_replyencrypt">'', +``<ref id="crypt_autosign" name="$crypt_autosign">'', ``<ref id="crypt_replysign" name="$crypt_replysign">'' and ``<ref id="smime_is_default" name="$smime_is_default">''. + + +<sect2>date_format<label id="date_format"> +<p> +Type: string<newline> +Default: &dquot;!%a, %b %d, %Y at %I:%M:%S%p %Z&dquot; + +<p> +This variable controls the format of the date printed by the ``%d'' +sequence in ``<ref id="index_format" name="$index_format">''. This is passed to the <em>strftime</em> +call to process the date. See the man page for <em>strftime(3)</em> for +the proper syntax. +<p> +Unless the first character in the string is a bang (``!''), the month +and week day names are expanded according to the locale specified in +the variable ``<ref id="locale" name="$locale">''. If the first character in the string is a +bang, the bang is discarded, and the month and week day names in the +rest of the string are expanded in the <em>C</em> locale (that is in US +English). + + +<sect2>default_hook<label id="default_hook"> +<p> +Type: string<newline> +Default: &dquot;˜f %s !˜P | (˜P ˜C %s)&dquot; + +<p> +This variable controls how send-hooks, message-hooks, save-hooks, +and fcc-hooks will +be interpreted if they are specified with only a simple regexp, +instead of a matching pattern. The hooks are expanded when they are +declared, so a hook will be interpreted according to the value of this +variable at the time the hook is declared. The default value matches +if the message is either from a user matching the regular expression +given, or if it is from you (if the from address matches +``alternates'') and is to or cc'ed to a user matching the given +regular expression. + + +<sect2>delete<label id="delete"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether or not messages are really deleted when closing or +synchronizing a mailbox. If set to <em>yes</em>, messages marked for +deleting will automatically be purged without prompting. If set to +<em>no</em>, messages marked for deletion will be kept in the mailbox. + + +<sect2>delete_untag<label id="delete_untag"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If this option is <em>set</em>, mutt will untag messages when marking them +for deletion. This applies when you either explicitly delete a message, +or when you save it to another folder. + + +<sect2>digest_collapse<label id="digest_collapse"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If this option is <em>set</em>, mutt's revattach menu will not show the subparts of +individual messages in a digest. To see these subparts, press 'v' on that menu. + + +<sect2>display_filter<label id="display_filter"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +When set, specifies a command used to filter messages. When a message +is viewed it is passed as standard input to <ref id="display_filter" name="$display_filter">, and the +filtered message is read from the standard output. + + +<sect2>dotlock_program<label id="dotlock_program"> +<p> +Type: path<newline> +Default: &dquot;/usr/local/bin/mutt_dotlock&dquot; + +<p> +Contains the path of the mutt_dotlock (8) binary to be used by +mutt. + + +<sect2>dsn_notify<label id="dsn_notify"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +<bf>Note:</bf> you should not enable this unless you are using Sendmail +8.8.x or greater. +<p> +This variable sets the request for when notification is returned. The +string consists of a comma separated list (no spaces!) of one or more +of the following: <em>never</em>, to never request notification, +<em>failure</em>, to request notification on transmission failure, +<em>delay</em>, to be notified of message delays, <em>success</em>, to be +notified of successful transmission. +<p> +Example: set dsn_notify=&dquot;failure,delay&dquot; + + +<sect2>dsn_return<label id="dsn_return"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +<bf>Note:</bf> you should not enable this unless you are using Sendmail +8.8.x or greater. +<p> +This variable controls how much of your message is returned in DSN +messages. It may be set to either <em>hdrs</em> to return just the +message header, or <em>full</em> to return the full message. +<p> +Example: set dsn_return=hdrs + + +<sect2>duplicate_threads<label id="duplicate_threads"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable controls whether mutt, when sorting by threads, threads +messages with the same message-id together. If it is set, it will indicate +that it thinks they are duplicates of each other with an equals sign +in the thread diagram. + + +<sect2>edit_headers<label id="edit_headers"> +<p> +Type: boolean<newline> +Default: no + +<p> +This option allows you to edit the header of your outgoing messages +along with the body of your message. + + +<sect2>editor<label id="editor"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +This variable specifies which editor is used by mutt. +It defaults to the value of the VISUAL, or EDITOR, environment +variable, or to the string &dquot;vi&dquot; if neither of those are set. + + +<sect2>encode_from<label id="encode_from"> +<p> +Type: boolean<newline> +Default: no + +<p> +When <em>set</em>, mutt will quoted-printable encode messages when +they contain the string &dquot;From &dquot; in the beginning of a line. +Useful to avoid the tampering certain mail delivery and transport +agents tend to do with messages. + + +<sect2>envelope_from<label id="envelope_from"> +<p> +Type: boolean<newline> +Default: no + +<p> +When <em>set</em>, mutt will try to derive the message's <em>envelope</em> +sender from the &dquot;From:&dquot; header. Note that this information is passed +to sendmail command using the &dquot;-f&dquot; command line switch, so don't set this +option if you are using that switch in <ref id="sendmail" name="$sendmail"> yourself, +or if the sendmail on your machine doesn't support that command +line switch. + + +<sect2>escape<label id="escape"> +<p> +Type: string<newline> +Default: &dquot;˜&dquot; + +<p> +Escape character to use for functions in the builtin editor. + + +<sect2>fast_reply<label id="fast_reply"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, the initial prompt for recipients and subject are skipped +when replying to messages, and the initial prompt for subject is +skipped when forwarding messages. +<p> +<bf>Note:</bf> this variable has no effect when the ``<ref id="autoedit" name="$autoedit">'' +variable is set. + + +<sect2>fcc_attach<label id="fcc_attach"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable controls whether or not attachments on outgoing messages +are saved along with the main body of your message. + + +<sect2>fcc_clear<label id="fcc_clear"> +<p> +Type: boolean<newline> +Default: no + +<p> +When this variable is set, FCCs will be stored unencrypted and +unsigned, even when the actual message is encrypted and/or +signed. +(PGP only) + + +<sect2>folder<label id="folder"> +<p> +Type: path<newline> +Default: &dquot;˜/Mail&dquot; + +<p> +Specifies the default location of your mailboxes. A `+' or `=' at the +beginning of a pathname will be expanded to the value of this +variable. Note that if you change this variable from the default +value you need to make sure that the assignment occurs <em>before</em> +you use `+' or `=' for any other variables since expansion takes place +during the `set' command. + + +<sect2>folder_format<label id="folder_format"> +<p> +Type: string<newline> +Default: &dquot;%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f&dquot; + +<p> +This variable allows you to customize the file browser display to your +personal taste. This string is similar to ``<ref id="index_format" name="$index_format">'', but has +its own set of printf()-like sequences: +<p> + +<descrip> +<tag>%C </tag>current file number +<tag>%d </tag>date/time folder was last modified +<tag>%f </tag>filename +<tag>%F </tag>file permissions +<tag>%g </tag>group name (or numeric gid, if missing) +<tag>%l </tag>number of hard links +<tag>%N </tag>N if folder has new mail, blank otherwise +<tag>%s </tag>size in bytes +<tag>%t </tag>* if the file is tagged, blank otherwise +<tag>%u </tag>owner name (or numeric uid, if missing) +<tag>%>X </tag>right justify the rest of the string and pad with character &dquot;X&dquot; +<tag>%|X </tag>pad to the end of the line with character &dquot;X&dquot; +</descrip> + + +<sect2>followup_to<label id="followup_to"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether or not the <em>Mail-Followup-To</em> header field is +generated when sending mail. When <em>set</em>, Mutt will generate this +field when you are replying to a known mailing list, specified with +the ``subscribe'' or ``<ref id="lists" name="lists">'' commands. +<p> +This field has two purposes. First, preventing you from +receiving duplicate copies of replies to messages which you send +to mailing lists, and second, ensuring that you do get a reply +separately for any messages sent to known lists to which you are +not subscribed. The header will contain only the list's address +for subscribed lists, and both the list address and your own +email address for unsubscribed lists. Without this header, a +group reply to your message sent to a subscribed list will be +sent to both the list and your address, resulting in two copies +of the same email for you. + + +<sect2>followup_to_poster<label id="followup_to_poster"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +If this variable is <em>set</em> and the keyword &dquot;poster&dquot; is present in +<em>Followup-To</em> header, follow-up to newsgroup function is not +permitted. The message will be mailed to the submitter of the +message via mail. + + +<sect2>force_name<label id="force_name"> +<p> +Type: boolean<newline> +Default: no + +<p> +This variable is similar to ``<ref id="save_name" name="$save_name">'', except that Mutt will +store a copy of your outgoing message by the username of the address +you are sending to even if that mailbox does not exist. +<p> +Also see the ``<ref id="record" name="$record">'' variable. + + +<sect2>forward_decode<label id="forward_decode"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls the decoding of complex MIME messages into text/plain when +forwarding a message. The message header is also RFC2047 decoded. +This variable is only used, if ``<ref id="mime_forward" name="$mime_forward">'' is <em>unset</em>, +otherwise ``<ref id="mime_forward_decode" name="$mime_forward_decode">'' is used instead. + + +<sect2>forward_edit<label id="forward_edit"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +This quadoption controls whether or not the user is automatically +placed in the editor when forwarding messages. For those who always want +to forward with no modification, use a setting of ``no''. + + +<sect2>forward_format<label id="forward_format"> +<p> +Type: string<newline> +Default: &dquot;[%a: %s]&dquot; + +<p> +This variable controls the default subject when forwarding a message. +It uses the same format sequences as the ``<ref id="index_format" name="$index_format">'' variable. + + +<sect2>forward_quote<label id="forward_quote"> +<p> +Type: boolean<newline> +Default: no + +<p> +When <em>set</em> forwarded messages included in the main body of the +message (when ``<ref id="mime_forward" name="$mime_forward">'' is <em>unset</em>) will be quoted using +``<ref id="indent_string" name="$indent_string">''. + + +<sect2>from<label id="from"> +<p> +Type: e-mail address<newline> +Default: &dquot;&dquot; + +<p> +When set, this variable contains a default from address. It +can be overridden using my_hdr (including from send-hooks) and +``<ref id="reverse_name" name="$reverse_name">''. This variable is ignored if ``<ref id="use_from" name="$use_from">'' +is unset. +<p> +Defaults to the contents of the environment variable EMAIL. + + +<sect2>gecos_mask<label id="gecos_mask"> +<p> +Type: regular expression<newline> +Default: &dquot;^[^,]*&dquot; + +<p> +A regular expression used by mutt to parse the GECOS field of a password +entry when expanding the alias. By default the regular expression is set +to &dquot;^[^,]*&dquot; which will return the string up to the first &dquot;,&dquot; encountered. +If the GECOS field contains a string like &dquot;lastname, firstname&dquot; then you +should set the gecos_mask=&dquot;.*&dquot;. +<p> +This can be useful if you see the following behavior: you address a e-mail +to user ID stevef whose full name is Steve Franklin. If mutt expands +stevef to &dquot;Franklin&dquot; stevef@foo.bar then you should set the gecos_mask to +a regular expression that will match the whole name so mutt will expand +&dquot;Franklin&dquot; to &dquot;Franklin, Steve&dquot;. + + +<sect2>group_index_format<label id="group_index_format"> +<p> +Type: string<newline> +Default: &dquot;%4C %M%N %5s %-45.45f %d&dquot; + +<p> +This variable allows you to customize the newsgroup browser display to +your personal taste. This string is similar to ``<ref id="index_format" name="index_format">'', but +has its own set of printf()-like sequences: +<p> + +<tscreen><verb> +%C current newsgroup number +%d description of newsgroup (becomes from server) +%f newsgroup name +%M - if newsgroup not allowed for direct post (moderated for example) +%N N if newsgroup is new, u if unsubscribed, blank otherwise +%n number of new articles in newsgroup +%s number of unread articles in newsgroup +%>X right justify the rest of the string and pad with character "X" +%|X pad to the end of the line with character "X" + +</verb></tscreen> + +<sect2>hdrs<label id="hdrs"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When unset, the header fields normally added by the ``<ref id="my_hdr" name="my_hdr">'' +command are not created. This variable <em>must</em> be unset before +composing a new message or replying in order to take effect. If set, +the user defined header fields are added to every new message. + + +<sect2>header<label id="header"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, this variable causes Mutt to include the header +of the message you are replying to into the edit buffer. +The ``<ref id="weed" name="$weed">'' setting applies. + + +<sect2>help<label id="help"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, help lines describing the bindings for the major functions +provided by each menu are displayed on the first line of the screen. +<p> +<bf>Note:</bf> The binding will not be displayed correctly if the +function is bound to a sequence rather than a single keystroke. Also, +the help line may not be updated if a binding is changed while Mutt is +running. Since this variable is primarily aimed at new users, neither +of these should present a major problem. + + +<sect2>hidden_host<label id="hidden_host"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, mutt will skip the host name part of ``<ref id="hostname" name="$hostname">'' variable +when adding the domain part to addresses. This variable does not +affect the generation of Message-IDs, and it will not lead to the +cut-off of first-level domains. + + +<sect2>hide_limited<label id="hide_limited"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, mutt will not show the presence of messages that are hidden +by limiting, in the thread tree. + + +<sect2>hide_missing<label id="hide_missing"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, mutt will not show the presence of missing messages in the +thread tree. + + +<sect2>hide_top_limited<label id="hide_top_limited"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, mutt will not show the presence of messages that are hidden +by limiting, at the top of threads in the thread tree. Note that when +<ref id="hide_missing" name="$hide_missing"> is set, this option will have no effect. + + +<sect2>hide_top_missing<label id="hide_top_missing"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, mutt will not show the presence of missing messages at the +top of threads in the thread tree. Note that when <ref id="hide_limited" name="$hide_limited"> is +set, this option will have no effect. + + +<sect2>history<label id="history"> +<p> +Type: number<newline> +Default: 10 + +<p> +This variable controls the size (in number of strings remembered) of +the string history buffer. The buffer is cleared each time the +variable is set. + + +<sect2>honor_followup_to<label id="honor_followup_to"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +This variable controls whether or not a Mail-Followup-To header is +honored when group-replying to a message. + + +<sect2>hostname<label id="hostname"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Specifies the hostname to use after the ``@'' in local e-mail +addresses. This overrides the compile time definition obtained from +/etc/resolv.conf. + + +<sect2>ignore_list_reply_to<label id="ignore_list_reply_to"> +<p> +Type: boolean<newline> +Default: no + +<p> +Affects the behaviour of the <em>reply</em> function when replying to +messages from mailing lists. When set, if the ``Reply-To:'' field is +set to the same value as the ``To:'' field, Mutt assumes that the +``Reply-To:'' field was set by the mailing list to automate responses +to the list, and will ignore this field. To direct a response to the +mailing list when this option is set, use the <em>list-reply</em> +function; <em>group-reply</em> will reply to both the sender and the +list. + + +<sect2>imap_authenticators<label id="imap_authenticators"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This is a colon-delimited list of authentication methods mutt may +attempt to use to log in to an IMAP server, in the order mutt should +try them. Authentication methods are either 'login' or the right +side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', +'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this +parameter is unset (the default) mutt will try all available methods, +in order from most-secure to least-secure. +<p> +Example: set imap_authenticators=&dquot;gssapi:cram-md5:login&dquot; +<p> +<bf>Note:</bf> Mutt will only fall back to other authentication methods if +the previous methods are unavailable. If a method is available but +authentication fails, mutt will not connect to the IMAP server. + + +<sect2>imap_delim_chars<label id="imap_delim_chars"> +<p> +Type: string<newline> +Default: &dquot;/.&dquot; + +<p> +This contains the list of characters which you would like to treat +as folder separators for displaying IMAP paths. In particular it +helps in using the '=' shortcut for your <em>folder</em> variable. + + +<sect2>imap_force_ssl<label id="imap_force_ssl"> +<p> +Type: boolean<newline> +Default: no + +<p> +If this variable is set, Mutt will always use SSL when +connecting to IMAP servers. + + +<sect2>imap_home_namespace<label id="imap_home_namespace"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +You normally want to see your personal folders alongside +your INBOX in the IMAP browser. If you see something else, you may set +this variable to the IMAP path to your folders. + + +<sect2>imap_keepalive<label id="imap_keepalive"> +<p> +Type: number<newline> +Default: 900 + +<p> +This variable specifies the maximum amount of time in seconds that mutt +will wait before polling open IMAP connections, to prevent the server +from closing them before mutt has finished with them. The default is +well within the RFC-specified minimum amount of time (30 minutes) before +a server is allowed to do this, but in practice the RFC does get +violated every now and then. Reduce this number if you find yourself +getting disconnected from your IMAP server due to inactivity. + + +<sect2>imap_list_subscribed<label id="imap_list_subscribed"> +<p> +Type: boolean<newline> +Default: no + +<p> +This variable configures whether IMAP folder browsing will look for +only subscribed folders or all folders. This can be toggled in the +IMAP browser with the <em>toggle-subscribed</em> function. + + +<sect2>imap_pass<label id="imap_pass"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Specifies the password for your IMAP account. If unset, Mutt will +prompt you for your password when you invoke the fetch-mail function. +<bf>Warning</bf>: you should only use this option when you are on a +fairly secure machine, because the superuser can read your muttrc even +if you are the only one who can read the file. + + +<sect2>imap_passive<label id="imap_passive"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, mutt will not open new IMAP connections to check for new +mail. Mutt will only check for new mail over existing IMAP +connections. This is useful if you don't want to be prompted to +user/password pairs on mutt invocation, or if opening the connection +is slow. + + +<sect2>imap_peek<label id="imap_peek"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, mutt will avoid implicitly marking your mail as read whenever +you fetch a message from the server. This is generally a good thing, +but can make closing an IMAP folder somewhat slower. This option +exists to appease speed freaks. + + +<sect2>imap_servernoise<label id="imap_servernoise"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, mutt will display warning messages from the IMAP +server as error messages. Since these messages are often +harmless, or generated due to configuration problems on the +server which are out of the users' hands, you may wish to suppress +them at some point. + + +<sect2>imap_user<label id="imap_user"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Your login name on the IMAP server. +<p> +This variable defaults to your user name on the local machine. + + +<sect2>implicit_autoview<label id="implicit_autoview"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set to ``yes'', mutt will look for a mailcap entry with the +copiousoutput flag set for <em>every</em> MIME attachment it doesn't have +an internal viewer defined for. If such an entry is found, mutt will +use the viewer defined in that entry to convert the body part to text +form. + + +<sect2>include<label id="include"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether or not a copy of the message(s) you are replying to +is included in your reply. + + +<sect2>indent_string<label id="indent_string"> +<p> +Type: string<newline> +Default: &dquot;> &dquot; + +<p> +Specifies the string to prepend to each line of text quoted in a +message to which you are replying. You are strongly encouraged not to +change this value, as it tends to agitate the more fanatical netizens. + + +<sect2>index_format<label id="index_format"> +<p> +Type: string<newline> +Default: &dquot;%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s&dquot; + +<p> +This variable allows you to customize the message index display to +your personal taste. +<p> +``Format strings'' are similar to the strings used in the ``C'' +function printf to format output (see the man page for more detail). +The following sequences are defined in Mutt: +<p> + +<descrip> +<tag>%a </tag>address of the author +<tag>%A </tag>reply-to address (if present; otherwise: address of author) +<tag>%b </tag>filename of the original message folder (think mailBox) +<tag>%B </tag>the list to which the letter was sent, or else the folder name (%b). +<tag>%c </tag>number of characters (bytes) in the message +<tag>%C </tag>current message number +<tag>%d </tag>date and time of the message in the format specified by +``date_format'' converted to sender's time zone +<tag>%D </tag>date and time of the message in the format specified by +``date_format'' converted to the local time zone +<tag>%e </tag>current message number in thread +<tag>%E </tag>number of messages in current thread +<tag>%f </tag>entire From: line (address + real name) +<tag>%F </tag>author name, or recipient name if the message is from you +<tag>%g </tag>newsgroup name (if compiled with nntp support) +<tag>%i </tag>message-id of the current message +<tag>%l </tag>number of lines in the message (does not work with maildir, +mh, and possibly IMAP folders) +<tag>%L </tag>If an address in the To or CC header field matches an address +defined by the users ``subscribe'' command, this displays +&dquot;To <list-name>&dquot;, otherwise the same as %F. +<tag>%m </tag>total number of message in the mailbox +<tag>%M </tag>number of hidden messages if the thread is collapsed. +<tag>%N </tag>message score +<tag>%n </tag>author's real name (or address if missing) +<tag>%O </tag>(_O_riginal save folder) Where mutt would formerly have +stashed the message: list name or recipient name if no list +<tag>%s </tag>subject of the message +<tag>%S </tag>status of the message (N/D/d/!/r/*) +<tag>%t </tag>`to:' field (recipients) +<tag>%T </tag>the appropriate character from the <ref id="to_chars" name="$to_chars"> string +<tag>%u </tag>user (login) name of the author +<tag>%v </tag>first name of the author, or the recipient if the message is from you +<tag>%W </tag>name of organization of author (`organization:' field) +<tag>%y </tag>`x-label:' field, if present +<tag>%Y </tag>`x-label' field, if present, and (1) not at part of a thread tree, +(2) at the top of a thread, or (3) `x-label' is different from +preceding message's `x-label'. +<tag>%Z </tag>message status flags +<tag>%{fmt} </tag>the date and time of the message is converted to sender's +time zone, and ``fmt'' is expanded by the library function +``strftime''; a leading bang disables locales +<tag>%[fmt] </tag>the date and time of the message is converted to the local +time zone, and ``fmt'' is expanded by the library function +``strftime''; a leading bang disables locales +<tag>%(fmt) </tag>the local date and time when the message was received. +``fmt'' is expanded by the library function ``strftime''; +a leading bang disables locales +<tag>%<fmt> </tag>the current local time. ``fmt'' is expanded by the library +function ``strftime''; a leading bang disables locales. +<tag>%>X </tag>right justify the rest of the string and pad with character &dquot;X&dquot; +<tag>%|X </tag>pad to the end of the line with character &dquot;X&dquot; +</descrip> + +<p> +See also: ``<ref id="to_chars" name="$to_chars">''. + + +<sect2>inews<label id="inews"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +If set, specifies the program and arguments used to deliver news posted +by Mutt. Otherwise, mutt posts article using current connection to +news server. The following printf-style sequence is understood: +<p> + +<tscreen><verb> +%s newsserver name + +</verb></tscreen><p> +Example: set inews=&dquot;/usr/local/bin/inews -hS&dquot; + + +<sect2>ispell<label id="ispell"> +<p> +Type: path<newline> +Default: &dquot;/sw/bin/ispell&dquot; + +<p> +How to invoke ispell (GNU's spell-checking software). + + +<sect2>keep_flagged<label id="keep_flagged"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, read messages marked as flagged will not be moved +from your spool mailbox to your ``<ref id="mbox" name="$mbox">'' mailbox, or as a result of +a ``<ref id="mbox-hook" name="mbox-hook">'' command. + + +<sect2>locale<label id="locale"> +<p> +Type: string<newline> +Default: &dquot;C&dquot; + +<p> +The locale used by <em>strftime(3)</em> to format dates. Legal values are +the strings your system accepts for the locale variable <em>LC_TIME</em>. + + +<sect2>list_reply<label id="list_reply"> +<p> +Type: quadoption<newline> +Default: no + +<p> +When set, address replies to the mailing list the original message came +from (instead to the author only). Setting this option to ``ask-yes'' or +``ask-no'' will ask if you really intended to reply to the author only. + + +<sect2>mail_check<label id="mail_check"> +<p> +Type: number<newline> +Default: 5 + +<p> +This variable configures how often (in seconds) mutt should look for +new mail. + + +<sect2>mailcap_path<label id="mailcap_path"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This variable specifies which files to consult when attempting to +display MIME bodies not directly supported by Mutt. + + +<sect2>mailcap_sanitize<label id="mailcap_sanitize"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, mutt will restrict possible characters in mailcap % expandos +to a well-defined set of safe characters. This is the safe setting, +but we are not sure it doesn't break some more advanced MIME stuff. +<p> +<bf>DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE +DOING!</bf> + + +<sect2>maildir_trash<label id="maildir_trash"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, messages marked as deleted will be saved with the maildir +(T)rashed flag instead of unlinked. <bf>NOTE:</bf> this only applies +to maildir-style mailboxes. Setting it will have no effect on other +mailbox types. + + +<sect2>mark_old<label id="mark_old"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether or not mutt marks <em>new</em> <bf>unread</bf> +messages as <em>old</em> if you exit a mailbox without reading them. +With this option set, the next time you start mutt, the messages +will show up with an &dquot;O&dquot; next to them in the index menu, +indicating that they are old. + + +<sect2>markers<label id="markers"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls the display of wrapped lines in the internal pager. If set, a +``+'' marker is displayed at the beginning of wrapped lines. Also see +the ``<ref id="smart_wrap" name="$smart_wrap">'' variable. + + +<sect2>mask<label id="mask"> +<p> +Type: regular expression<newline> +Default: &dquot;!^\.[^.]&dquot; + +<p> +A regular expression used in the file browser, optionally preceded by +the <em>not</em> operator ``!''. Only files whose names match this mask +will be shown. The match is always case-sensitive. + + +<sect2>mbox<label id="mbox"> +<p> +Type: path<newline> +Default: &dquot;˜/mbox&dquot; + +<p> +This specifies the folder into which read mail in your ``<ref id="spoolfile" name="$spoolfile">'' +folder will be appended. + + +<sect2>mbox_type<label id="mbox_type"> +<p> +Type: folder magic<newline> +Default: mbox + +<p> +The default mailbox type used when creating new folders. May be any of +mbox, MMDF, MH and Maildir. + + +<sect2>metoo<label id="metoo"> +<p> +Type: boolean<newline> +Default: no + +<p> +If unset, Mutt will remove your address (see the ``alternates'' +command) from the list of recipients when replying to a message. + + +<sect2>menu_scroll<label id="menu_scroll"> +<p> +Type: boolean<newline> +Default: no + +<p> +When <em>set</em>, menus will be scrolled up or down one line when you +attempt to move across a screen boundary. If <em>unset</em>, the screen +is cleared and the next or previous page of the menu is displayed +(useful for slow links to avoid many redraws). + + +<sect2>meta_key<label id="meta_key"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, forces Mutt to interpret keystrokes with the high bit (bit 8) +set as if the user had pressed the ESC key and whatever key remains +after having the high bit removed. For example, if the key pressed +has an ASCII value of 0xf4, then this is treated as if the user had +pressed ESC then ``x''. This is because the result of removing the +high bit from ``0xf4'' is ``0x74'', which is the ASCII character +``x''. + + +<sect2>mh_purge<label id="mh_purge"> +<p> +Type: boolean<newline> +Default: no + +<p> +When unset, mutt will mimic mh's behaviour and rename deleted messages +to <em>,<old file name></em> in mh folders instead of really deleting +them. If the variable is set, the message files will simply be +deleted. + + +<sect2>mh_seq_flagged<label id="mh_seq_flagged"> +<p> +Type: string<newline> +Default: &dquot;flagged&dquot; + +<p> +The name of the MH sequence used for flagged messages. + + +<sect2>mh_seq_replied<label id="mh_seq_replied"> +<p> +Type: string<newline> +Default: &dquot;replied&dquot; + +<p> +The name of the MH sequence used to tag replied messages. + + +<sect2>mh_seq_unseen<label id="mh_seq_unseen"> +<p> +Type: string<newline> +Default: &dquot;unseen&dquot; + +<p> +The name of the MH sequence used for unseen messages. + + +<sect2>mime_forward<label id="mime_forward"> +<p> +Type: quadoption<newline> +Default: no + +<p> +When set, the message you are forwarding will be attached as a +separate MIME part instead of included in the main body of the +message. This is useful for forwarding MIME messages so the receiver +can properly view the message as it was delivered to you. If you like +to switch between MIME and not MIME from mail to mail, set this +variable to ask-no or ask-yes. +<p> +Also see ``<ref id="forward_decode" name="$forward_decode">'' and ``<ref id="mime_forward_decode" name="$mime_forward_decode">''. + + +<sect2>mime_forward_decode<label id="mime_forward_decode"> +<p> +Type: boolean<newline> +Default: no + +<p> +Controls the decoding of complex MIME messages into text/plain when +forwarding a message while ``<ref id="mime_forward" name="$mime_forward">'' is <em>set</em>. Otherwise +``<ref id="forward_decode" name="$forward_decode">'' is used instead. + + +<sect2>mime_forward_rest<label id="mime_forward_rest"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +When forwarding multiple attachments of a MIME message from the recvattach +menu, attachments which cannot be decoded in a reasonable manner will +be attached to the newly composed message if this option is set. + + +<sect2>mime_subject<label id="mime_subject"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If <em>unset</em>, 8-bit ``subject:'' line in article header will not be +encoded according to RFC2047 to base64. This is useful when message +is Usenet article, because MIME for news is nonstandard feature. + + +<sect2>mix_entry_format<label id="mix_entry_format"> +<p> +Type: string<newline> +Default: &dquot;%4n %c %-16s %a&dquot; + +<p> +This variable describes the format of a remailer line on the mixmaster +chain selection screen. The following printf-like sequences are +supported: +<p> + +<descrip> +<tag>%n </tag>The running number on the menu. +<tag>%c </tag>Remailer capabilities. +<tag>%s </tag>The remailer's short name. +<tag>%a </tag>The remailer's e-mail address. +</descrip> + + +<sect2>mixmaster<label id="mixmaster"> +<p> +Type: path<newline> +Default: &dquot;mixmaster&dquot; + +<p> +This variable contains the path to the Mixmaster binary on your +system. It is used with various sets of parameters to gather the +list of known remailers, and to finally send a message through the +mixmaster chain. + + +<sect2>move<label id="move"> +<p> +Type: quadoption<newline> +Default: ask-no + +<p> +Controls whether you will be asked to confirm moving read messages +from your spool mailbox to your ``<ref id="mbox" name="$mbox">'' mailbox, or as a result of +a ``<ref id="mbox-hook" name="mbox-hook">'' command. + + +<sect2>message_format<label id="message_format"> +<p> +Type: string<newline> +Default: &dquot;%s&dquot; + +<p> +This is the string displayed in the ``attachment'' menu for +attachments of type message/rfc822. For a full listing of defined +printf()-like sequences see the section on ``<ref id="index_format" name="$index_format">''. + + +<sect2>narrow_tree<label id="narrow_tree"> +<p> +Type: boolean<newline> +Default: no + +<p> +This variable, when set, makes the thread tree narrower, allowing +deeper threads to fit on the screen. + + +<sect2>news_cache_dir<label id="news_cache_dir"> +<p> +Type: path<newline> +Default: &dquot;˜/.mutt&dquot; + +<p> +This variable pointing to directory where Mutt will save cached news +articles headers in. If <em>unset</em>, headers will not be saved at all +and will be reloaded each time when you enter to newsgroup. + + +<sect2>news_server<label id="news_server"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This variable specifies domain name or address of NNTP server. It +defaults to the newsserver specified in the environment variable +$NNTPSERVER or contained in the file /etc/nntpserver. You can also +specify username and an alternative port for each newsserver, ie: +<p> +[nntp[s]://][username[:password]@]newsserver[:port] + + +<sect2>newsrc<label id="newsrc"> +<p> +Type: path<newline> +Default: &dquot;˜/.newsrc&dquot; + +<p> +The file, containing info about subscribed newsgroups - names and +indexes of read articles. The following printf-style sequence +is understood: +<p> + +<tscreen><verb> +%s newsserver name + +</verb></tscreen> + +<sect2>nntp_context<label id="nntp_context"> +<p> +Type: number<newline> +Default: 1000 + +<p> +This variable defines number of articles which will be in index when +newsgroup entered. If active newsgroup have more articles than this +number, oldest articles will be ignored. Also controls how many +articles headers will be saved in cache when you quit newsgroup. + + +<sect2>nntp_load_description<label id="nntp_load_description"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable controls whether or not descriptions for each newsgroup +must be loaded when newsgroup is added to list (first time list +loading or new newsgroup adding). + + +<sect2>nntp_user<label id="nntp_user"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Your login name on the NNTP server. If <em>unset</em> and NNTP server requires +authentification, Mutt will prompt you for your account name when you +connect to newsserver. + + +<sect2>nntp_pass<label id="nntp_pass"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Your password for NNTP account. + + +<sect2>nntp_poll<label id="nntp_poll"> +<p> +Type: number<newline> +Default: 60 + +<p> +The time in seconds until any operations on newsgroup except post new +article will cause recheck for new news. If set to 0, Mutt will +recheck newsgroup on each operation in index (stepping, read article, +etc.). + + +<sect2>nntp_reconnect<label id="nntp_reconnect"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether or not Mutt will try to reconnect to newsserver when +connection lost. + + +<sect2>pager<label id="pager"> +<p> +Type: path<newline> +Default: &dquot;builtin&dquot; + +<p> +This variable specifies which pager you would like to use to view +messages. builtin means to use the builtin pager, otherwise this +variable should specify the pathname of the external pager you would +like to use. +<p> +Using an external pager may have some disadvantages: Additional +keystrokes are necessary because you can't call mutt functions +directly from the pager, and screen resizes cause lines longer than +the screen width to be badly formatted in the help menu. + + +<sect2>pager_context<label id="pager_context"> +<p> +Type: number<newline> +Default: 0 + +<p> +This variable controls the number of lines of context that are given +when displaying the next or previous page in the internal pager. By +default, Mutt will display the line after the last one on the screen +at the top of the next page (0 lines of context). + + +<sect2>pager_format<label id="pager_format"> +<p> +Type: string<newline> +Default: &dquot;-%Z- %C/%m: %-20.20n %s&dquot; + +<p> +This variable controls the format of the one-line message ``status'' +displayed before each message in either the internal or an external +pager. The valid sequences are listed in the ``<ref id="index_format" name="$index_format">'' +section. + + +<sect2>pager_index_lines<label id="pager_index_lines"> +<p> +Type: number<newline> +Default: 0 + +<p> +Determines the number of lines of a mini-index which is shown when in +the pager. The current message, unless near the top or bottom of the +folder, will be roughly one third of the way down this mini-index, +giving the reader the context of a few messages before and after the +message. This is useful, for example, to determine how many messages +remain to be read in the current thread. One of the lines is reserved +for the status bar from the index, so a <em>pager_index_lines</em> of 6 +will only show 5 lines of the actual index. A value of 0 results in +no index being shown. If the number of messages in the current folder +is less than <em>pager_index_lines</em>, then the index will only use as +many lines as it needs. + + +<sect2>pager_stop<label id="pager_stop"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, the internal-pager will <bf>not</bf> move to the next message +when you are at the end of a message and invoke the <em>next-page</em> +function. + + +<sect2>crypt_autosign<label id="crypt_autosign"> +<p> +Type: boolean<newline> +Default: no + +<p> +Setting this variable will cause Mutt to always attempt to +cryptographically sign outgoing messages. This can be overridden +by use of the <em>pgp-menu</em>, when signing is not required or +encryption is requested as well. If ``<ref id="smime_is_default" name="$smime_is_default">'' is set, +then OpenSSL is used instead to create S/MIME messages and settings can +be overridden by use of the <em>smime-menu</em>. +(Crypto only) + + +<sect2>crypt_autoencrypt<label id="crypt_autoencrypt"> +<p> +Type: boolean<newline> +Default: no + +<p> +Setting this variable will cause Mutt to always attempt to PGP +encrypt outgoing messages. This is probably only useful in +connection to the <em>send-hook</em> command. It can be overridden +by use of the <em>pgp-menu</em>, when encryption is not required or +signing is requested as well. IF ``<ref id="smime_is_default" name="$smime_is_default">'' is set, +then OpenSSL is used instead to create S/MIME messages and +settings can be overridden by use of the <em>smime-menu</em>. +(Crypto only) + + +<sect2>pgp_ignore_subkeys<label id="pgp_ignore_subkeys"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead, +the principal key will inherit the subkeys' capabilities. Unset this +if you want to play interesting key selection games. +(PGP only) + + +<sect2>crypt_replyencrypt<label id="crypt_replyencrypt"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, automatically PGP or OpenSSL encrypt replies to messages which are +encrypted. +(Crypto only) + + +<sect2>crypt_replysign<label id="crypt_replysign"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, automatically PGP or OpenSSL sign replies to messages which are +signed. +<p> +<bf>Note:</bf> this does not work on messages that are encrypted +<bf>and</bf> signed! +(Crypto only) + + +<sect2>crypt_replysignencrypted<label id="crypt_replysignencrypted"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, automatically PGP or OpenSSL sign replies to messages +which are encrypted. This makes sense in combination with +``<ref id="crypt_replyencrypt" name="$crypt_replyencrypt">'', because it allows you to sign all +messages which are automatically encrypted. This works around +the problem noted in ``<ref id="crypt_replysign" name="$crypt_replysign">'', that mutt is not able +to find out whether an encrypted message is also signed. +(Crypto only) + + +<sect2>crypt_timestamp<label id="crypt_timestamp"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, mutt will include a time stamp in the lines surrounding +PGP or S/MIME output, so spoofing such lines is more difficult. +If you are using colors to mark these lines, and rely on these, +you may unset this setting. +(Crypto only) + + +<sect2>pgp_use_gpg_agent<label id="pgp_use_gpg_agent"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, mutt will use a possibly-running gpg-agent process. +(PGP only) + + +<sect2>crypt_verify_sig<label id="crypt_verify_sig"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +If ``yes'', always attempt to verify PGP or S/MIME signatures. +If ``ask'', ask whether or not to verify the signature. +If ``no'', never attempt to verify cryptographic signatures. +(Crypto only) + + +<sect2>smime_is_default<label id="smime_is_default"> +<p> +Type: boolean<newline> +Default: no + +<p> +The default behaviour of mutt is to use PGP on all auto-sign/encryption +operations. To override and to use OpenSSL instead this must be set. +However, this has no effect while replying, since mutt will automatically +select the same application that was used to sign/encrypt the original +message. (Note that this variable can be overridden by unsetting <ref id="crypt_autosmime" name="$crypt_autosmime">.) +(S/MIME only) + + +<sect2>smime_ask_cert_label<label id="smime_ask_cert_label"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This flag controls whether you want to be asked to enter a label +for a certificate about to be added to the database or not. It is +set by default. +(S/MIME only) + + +<sect2>smime_decrypt_use_default_key<label id="smime_decrypt_use_default_key"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set (default) this tells mutt to use the default key for decryption. Otherwise, +if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address +to determine the key to use. It will ask you to supply a key, if it can't find one. +(S/MIME only) + + +<sect2>pgp_entry_format<label id="pgp_entry_format"> +<p> +Type: string<newline> +Default: &dquot;%4n %t%f %4l/0x%k %-4a %2c %u&dquot; + +<p> +This variable allows you to customize the PGP key selection menu to +your personal taste. This string is similar to ``<ref id="index_format" name="$index_format">'', but +has its own set of printf()-like sequences: +<p> + +<descrip> +<tag>%n </tag>number +<tag>%k </tag>key id +<tag>%u </tag>user id +<tag>%a </tag>algorithm +<tag>%l </tag>key length +<tag>%f </tag>flags +<tag>%c </tag>capabilities +<tag>%t </tag>trust/validity of the key-uid association +<tag>%[<s>] </tag>date of the key where <s> is an strftime(3) expression +</descrip> + +<p> +(PGP only) + + +<sect2>pgp_good_sign<label id="pgp_good_sign"> +<p> +Type: regular expression<newline> +Default: &dquot;&dquot; + +<p> +If you assign a text to this variable, then a PGP signature is only +considered verified if the output from <ref id="pgp_verify_command" name="$pgp_verify_command"> contains +the text. Use this variable if the exit code from the command is 0 +even for bad signatures. +(PGP only) + + +<sect2>pgp_check_exit<label id="pgp_check_exit"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, mutt will check the exit code of the PGP subprocess when +signing or encrypting. A non-zero exit code means that the +subprocess failed. +(PGP only) + + +<sect2>pgp_long_ids<label id="pgp_long_ids"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs. +(PGP only) + + +<sect2>pgp_retainable_sigs<label id="pgp_retainable_sigs"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, signed and encrypted messages will consist of nested +multipart/signed and multipart/encrypted body parts. +<p> +This is useful for applications like encrypted and signed mailing +lists, where the outer layer (multipart/encrypted) can be easily +removed, while the inner multipart/signed part is retained. +(PGP only) + + +<sect2>pgp_show_unusable<label id="pgp_show_unusable"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, mutt will display non-usable keys on the PGP key selection +menu. This includes keys which have been revoked, have expired, or +have been marked as ``disabled'' by the user. +(PGP only) + + +<sect2>pgp_sign_as<label id="pgp_sign_as"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +If you have more than one key pair, this option allows you to specify +which of your private keys to use. It is recommended that you use the +keyid form to specify your key (e.g., ``0x00112233''). +(PGP only) + + +<sect2>pgp_strict_enc<label id="pgp_strict_enc"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, Mutt will automatically encode PGP/MIME signed messages as +<em>quoted-printable</em>. Please note that unsetting this variable may +lead to problems with non-verifyable PGP signatures, so only change +this if you know what you are doing. +(PGP only) + + +<sect2>pgp_timeout<label id="pgp_timeout"> +<p> +Type: number<newline> +Default: 300 + +<p> +The number of seconds after which a cached passphrase will expire if +not used. +(PGP only) + + +<sect2>pgp_sort_keys<label id="pgp_sort_keys"> +<p> +Type: sort order<newline> +Default: address + +<p> +Specifies how the entries in the `pgp keys' menu are sorted. The +following are legal values: +<p> + +<descrip> +<tag>address </tag>sort alphabetically by user id +<tag>keyid </tag>sort alphabetically by key id +<tag>date </tag>sort by key creation date +<tag>trust </tag>sort by the trust of the key +</descrip> + +<p> +If you prefer reverse order of the above values, prefix it with +`reverse-'. +(PGP only) + + +<sect2>pgp_create_traditional<label id="pgp_create_traditional"> +<p> +Type: quadoption<newline> +Default: no + +<p> +This option controls whether Mutt generates old-style inline PGP +encrypted or signed messages. +<p> +Note that PGP/MIME will be used automatically for messages which have +a character set different from us-ascii, or which consist of more than +a single MIME part. +<p> +Also note that using the old-style PGP message format is <bf>strongly</bf> +<bf>deprecated</bf>. +(PGP only) + + +<sect2>pgp_auto_traditional<label id="pgp_auto_traditional"> +<p> +Type: boolean<newline> +Default: no + +<p> +This option causes Mutt to generate an old-style inline PGP +encrypted or signed message when replying to an old-style +message, and a PGP/MIME message when replying to a PGP/MIME +message. Note that this option is only meaningful when using +``<ref id="crypt_replyencrypt" name="$crypt_replyencrypt">'', ``<ref id="crypt_replysign" name="$crypt_replysign">'', or +``<ref id="crypt_replysignencrypted" name="$crypt_replysignencrypted">''. +<p> +Also note that PGP/MIME will be used automatically for messages +which have a character set different from us-ascii, or which +consist of more than a single MIME part. +<p> +This option overrides ``<ref id="pgp_create_traditional" name="$pgp_create_traditional">'' +(PGP only) + + +<sect2>pgp_decode_command<label id="pgp_decode_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This format strings specifies a command which is used to decode +application/pgp attachments. +<p> +The PGP command formats have their own set of printf-like sequences: +<p> + +<descrip> +<tag>%p </tag>Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty +string otherwise. Note: This may be used with a %? construct. +<tag>%f </tag>Expands to the name of a file containing a message. +<tag>%s </tag>Expands to the name of a file containing the signature part + of a multipart/signed attachment when verifying it. +<tag>%a </tag>The value of <ref id="pgp_sign_as" name="$pgp_sign_as">. +<tag>%r </tag>One or more key IDs. +</descrip> + +<p> +For examples on how to configure these formats for the various versions +of PGP which are floating around, see the pgp*.rc and gpg.rc files in +the samples/ subdirectory which has been installed on your system +alongside the documentation. +(PGP only) + + +<sect2>pgp_getkeys_command<label id="pgp_getkeys_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is invoked whenever mutt will need public key information. +%r is the only printf-like sequence used with this format. +(PGP only) + + +<sect2>pgp_verify_command<label id="pgp_verify_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to verify PGP signatures. +(PGP only) + + +<sect2>pgp_decrypt_command<label id="pgp_decrypt_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to decrypt a PGP encrypted message. +(PGP only) + + +<sect2>pgp_clearsign_command<label id="pgp_clearsign_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This format is used to create a old-style &dquot;clearsigned&dquot; PGP +message. Note that the use of this format is <bf>strongly</bf> +<bf>deprecated</bf>. +(PGP only) + + +<sect2>pgp_sign_command<label id="pgp_sign_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to create the detached PGP signature for a +multipart/signed PGP/MIME body part. +(PGP only) + + +<sect2>pgp_encrypt_sign_command<label id="pgp_encrypt_sign_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to both sign and encrypt a body part. +(PGP only) + + +<sect2>pgp_encrypt_only_command<label id="pgp_encrypt_only_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to encrypt a body part without signing it. +(PGP only) + + +<sect2>pgp_import_command<label id="pgp_import_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to import a key from a message into +the user's public key ring. +(PGP only) + + +<sect2>pgp_export_command<label id="pgp_export_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to export a public key from the user's +key ring. +(PGP only) + + +<sect2>pgp_verify_key_command<label id="pgp_verify_key_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to verify key information from the key selection +menu. +(PGP only) + + +<sect2>pgp_list_secring_command<label id="pgp_list_secring_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to list the secret key ring's contents. The +output format must be analogous to the one used by +gpg --list-keys --with-colons. +<p> +This format is also generated by the pgpring utility which comes +with mutt. +(PGP only) + + +<sect2>pgp_list_pubring_command<label id="pgp_list_pubring_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to list the public key ring's contents. The +output format must be analogous to the one used by +gpg --list-keys --with-colons. +<p> +This format is also generated by the pgpring utility which comes +with mutt. +(PGP only) + + +<sect2>forward_decrypt<label id="forward_decrypt"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls the handling of encrypted messages when forwarding a message. +When set, the outer layer of encryption is stripped off. This +variable is only used if ``<ref id="mime_forward" name="$mime_forward">'' is <em>set</em> and +``<ref id="mime_forward_decode" name="$mime_forward_decode">'' is <em>unset</em>. +(PGP only) + + +<sect2>smime_timeout<label id="smime_timeout"> +<p> +Type: number<newline> +Default: 300 + +<p> +The number of seconds after which a cached passphrase will expire if +not used. +(S/MIME only) + + +<sect2>smime_encrypt_with<label id="smime_encrypt_with"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This sets the algorithm that should be used for encryption. +Valid choices are &dquot;des&dquot;, &dquot;des3&dquot;, &dquot;rc2-40&dquot;, &dquot;rc2-64&dquot;, &dquot;rc2-128&dquot;. +If unset &dquot;3des&dquot; (TripleDES) is used. +(S/MIME only) + + +<sect2>smime_keys<label id="smime_keys"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +Since there is no pubring/secring as with PGP, mutt has to handle +storage ad retrieval of keys/certs by itself. This is very basic right now, +and stores keys and certificates in two different directories, both +named as the hash-value retrieved from OpenSSL. There is an index file +which contains mailbox-address keyid pair, and which can be manually +edited. This one points to the location of the private keys. +(S/MIME only) + + +<sect2>smime_ca_location<label id="smime_ca_location"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +This variable contains the name of either a directory, or a file which +contains trusted certificates for use with OpenSSL. +(S/MIME only) + + +<sect2>smime_certificates<label id="smime_certificates"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +Since there is no pubring/secring as with PGP, mutt has to handle +storage and retrieval of keys by itself. This is very basic right +now, and keys and certificates are stored in two different +directories, both named as the hash-value retrieved from +OpenSSL. There is an index file which contains mailbox-address +keyid pairs, and which can be manually edited. This one points to +the location of the certificates. +(S/MIME only) + + +<sect2>smime_decrypt_command<label id="smime_decrypt_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This format string specifies a command which is used to decrypt +application/x-pkcs7-mime attachments. +<p> +The OpenSSL command formats have their own set of printf-like sequences +similar to PGP's: +<p> + +<descrip> +<tag>%f </tag>Expands to the name of a file containing a message. +<tag>%s </tag>Expands to the name of a file containing the signature part + of a multipart/signed attachment when verifying it. +<tag>%k </tag>The key-pair specified with <ref id="smime_default_key" name="$smime_default_key"> +<tag>%c </tag>One or more certificate IDs. +<tag>%a </tag>The algorithm used for encryption. +<tag>%C </tag>CA location: Depending on whether <ref id="smime_ca_location" name="$smime_ca_location"> + points to a directory or file, this expands to + &dquot;-CApath <ref id="smime_ca_location" name="$smime_ca_location">&dquot; or &dquot;-CAfile <ref id="smime_ca_location" name="$smime_ca_location">&dquot;. +</descrip> + +<p> +For examples on how to configure these formats, see the smime.rc in +the samples/ subdirectory which has been installed on your system +alongside the documentation. +(S/MIME only) + + +<sect2>smime_verify_command<label id="smime_verify_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to verify S/MIME signatures of type multipart/signed. +(S/MIME only) + + +<sect2>smime_verify_opaque_command<label id="smime_verify_opaque_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to verify S/MIME signatures of type +application/x-pkcs7-mime. +(S/MIME only) + + +<sect2>smime_sign_command<label id="smime_sign_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to created S/MIME signatures of type +multipart/signed, which can be read by all mail clients. +(S/MIME only) + + +<sect2>smime_sign_opaque_command<label id="smime_sign_opaque_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to created S/MIME signatures of type +application/x-pkcs7-signature, which can only be handled by mail +clients supporting the S/MIME extension. +(S/MIME only) + + +<sect2>smime_encrypt_command<label id="smime_encrypt_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to create encrypted S/MIME messages. +(S/MIME only) + + +<sect2>smime_pk7out_command<label id="smime_pk7out_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to extract PKCS7 structures of S/MIME signatures, +in order to extract the public X509 certificate(s). +(S/MIME only) + + +<sect2>smime_get_cert_command<label id="smime_get_cert_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to extract X509 certificates from a PKCS7 structure. +(S/MIME only) + + +<sect2>smime_get_signer_cert_command<label id="smime_get_signer_cert_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to extract only the signers X509 certificate from a S/MIME +signature, so that the certificate's owner may get compared to the email's +'From'-field. +(S/MIME only) + + +<sect2>smime_import_cert_command<label id="smime_import_cert_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to import a certificate via smime_keys. +(S/MIME only) + + +<sect2>smime_get_cert_email_command<label id="smime_get_cert_email_command"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This command is used to extract the mail address(es) used for storing +X509 certificates, and for verification purposes (to check whether the +certificate was issued for the sender's mailbox). +(S/MIME only) + + +<sect2>smime_default_key<label id="smime_default_key"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This is the default key-pair to use for signing. This must be set to the +keyid (the hash-value that OpenSSL generates) to work properly +(S/MIME only) + + +<sect2>smtp_auth_username<label id="smtp_auth_username"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Defines the username to use with SMTP AUTH. Setting this variable will +cause mutt to attempt to use SMTP AUTH when sending. + + +<sect2>smtp_auth_password<label id="smtp_auth_password"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Defines the password to use with SMTP AUTH. If ``<ref id="smtp_auth_username" name="$smtp_auth_username">'' +is set, but this variable is not, you will be prompted for a password +when sending. + + +<sect2>smtp_host<label id="smtp_host"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Defines the SMTP host which will be used to deliver mail, as opposed +to invoking the sendmail binary. Setting this variable overrides the +value of ``<ref id="sendmail" name="$sendmail">'', and any associated variables. + + +<sect2>smtp_port<label id="smtp_port"> +<p> +Type: number<newline> +Default: 25 + +<p> +Defines the port that the SMTP host is listening on for mail delivery. +Must be specified as a number. +<p> +Defaults to 25, the standard SMTP port, but RFC 2476-compliant SMTP +servers will probably desire 587, the mail submission port. + + +<sect2>ssl_starttls<label id="ssl_starttls"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +If set (the default), mutt will attempt to use STARTTLS on servers +advertising the capability. When unset, mutt will not attempt to +use STARTTLS regardless of the server's capabilities. + + +<sect2>certificate_file<label id="certificate_file"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +This variable specifies the file where the certificates you trust +are saved. When an unknown certificate is encountered, you are asked +if you accept it or not. If you accept it, the certificate can also +be saved in this file and further connections are automatically +accepted. +<p> +You can also manually add CA certificates in this file. Any server +certificate that is signed with one of these CA certificates are +also automatically accepted. +<p> +Example: set certificate_file=˜/.mutt/certificates + + +<sect2>ssl_usesystemcerts<label id="ssl_usesystemcerts"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set to <em>yes</em>, mutt will use CA certificates in the +system-wide certificate store when checking if server certificate +is signed by a trusted CA. + + +<sect2>entropy_file<label id="entropy_file"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +The file which includes random data that is used to initialize SSL +library functions. + + +<sect2>ssl_use_sslv2<label id="ssl_use_sslv2"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variables specifies whether to attempt to use SSLv2 in the +SSL authentication process. + + +<sect2>ssl_use_sslv3<label id="ssl_use_sslv3"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variables specifies whether to attempt to use SSLv3 in the +SSL authentication process. + + +<sect2>ssl_use_tlsv1<label id="ssl_use_tlsv1"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variables specifies whether to attempt to use TLSv1 in the +SSL authentication process. + + +<sect2>pipe_split<label id="pipe_split"> +<p> +Type: boolean<newline> +Default: no + +<p> +Used in connection with the <em>pipe-message</em> command and the ``tag- +prefix'' operator. If this variable is unset, when piping a list of +tagged messages Mutt will concatenate the messages and will pipe them +as a single folder. When set, Mutt will pipe the messages one by one. +In both cases the messages are piped in the current sorted order, +and the ``<ref id="pipe_sep" name="$pipe_sep">'' separator is added after each message. + + +<sect2>pipe_decode<label id="pipe_decode"> +<p> +Type: boolean<newline> +Default: no + +<p> +Used in connection with the <em>pipe-message</em> command. When unset, +Mutt will pipe the messages without any preprocessing. When set, Mutt +will weed headers and will attempt to PGP/MIME decode the messages +first. + + +<sect2>pipe_sep<label id="pipe_sep"> +<p> +Type: string<newline> +Default: &dquot;\n&dquot; + +<p> +The separator to add between messages when piping a list of tagged +messages to an external Unix command. + + +<sect2>pop_authenticators<label id="pop_authenticators"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This is a colon-delimited list of authentication methods mutt may +attempt to use to log in to an POP server, in the order mutt should +try them. Authentication methods are either 'user', 'apop' or any +SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'. +This parameter is case-insensitive. If this parameter is unset +(the default) mutt will try all available methods, in order from +most-secure to least-secure. +<p> +Example: set pop_authenticators=&dquot;digest-md5:apop:user&dquot; + + +<sect2>pop_auth_try_all<label id="pop_auth_try_all"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, Mutt will try all available methods. When unset, Mutt will +only fall back to other authentication methods if the previous +methods are unavailable. If a method is available but authentication +fails, Mutt will not connect to the POP server. + + +<sect2>pop_checkinterval<label id="pop_checkinterval"> +<p> +Type: number<newline> +Default: 60 + +<p> +This variable configures how often (in seconds) POP should look for +new mail. + + +<sect2>pop_delete<label id="pop_delete"> +<p> +Type: quadoption<newline> +Default: ask-no + +<p> +If set, Mutt will delete successfully downloaded messages from the POP +server when using the fetch-mail function. When unset, Mutt will +download messages but also leave them on the POP server. + + +<sect2>pop_host<label id="pop_host"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +The name of your POP server for the fetch-mail function. You +can also specify an alternative port, username and password, ie: +<p> +[pop[s]://][username[:password]@]popserver[:port] + + +<sect2>pop_last<label id="pop_last"> +<p> +Type: boolean<newline> +Default: no + +<p> +If this variable is set, mutt will try to use the &dquot;LAST&dquot; POP command +for retrieving only unread messages from the POP server when using +the fetch-mail function. + + +<sect2>pop_reconnect<label id="pop_reconnect"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether or not Mutt will try to reconnect to POP server when +connection lost. + + +<sect2>pop_user<label id="pop_user"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Your login name on the POP server. +<p> +This variable defaults to your user name on the local machine. + + +<sect2>pop_pass<label id="pop_pass"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Specifies the password for your POP account. If unset, Mutt will +prompt you for your password when you open POP mailbox. +<bf>Warning</bf>: you should only use this option when you are on a +fairly secure machine, because the superuser can read your muttrc +even if you are the only one who can read the file. + + +<sect2>post_indent_string<label id="post_indent_string"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Similar to the ``<ref id="attribution" name="$attribution">'' variable, Mutt will append this +string after the inclusion of a message which is being replied to. + + +<sect2>post_moderated<label id="post_moderated"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +If set to <em>yes</em>, Mutt will post article to newsgroup that have +not permissions to posting (e.g. moderated). <bf>Note:</bf> if newsserver +does not support posting to that newsgroup or totally read-only, that +posting will not have an effect. + + +<sect2>postpone<label id="postpone"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether or not messages are saved in the ``<ref id="postponed" name="$postponed">'' +mailbox when you elect not to send immediately. + + +<sect2>postponed<label id="postponed"> +<p> +Type: path<newline> +Default: &dquot;˜/postponed&dquot; + +<p> +Mutt allows you to indefinitely ``<ref id="postpone" name="postpone"> sending a message'' which +you are editing. When you choose to postpone a message, Mutt saves it +in the mailbox specified by this variable. Also see the ``<ref id="postpone" name="$postpone">'' +variable. + + +<sect2>preconnect<label id="preconnect"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +If set, a shell command to be executed if mutt fails to establish +a connection to the server. This is useful for setting up secure +connections, e.g. with ssh(1). If the command returns a nonzero +status, mutt gives up opening the server. Example: +<p> +preconnect=&dquot;ssh -f -q -L 1234:mailhost.net:143 mailhost.net +sleep 20 < /dev/null > /dev/null&dquot; +<p> +Mailbox 'foo' on mailhost.net can now be reached +as '{localhost:1234}foo'. +<p> +NOTE: For this example to work, you must be able to log in to the +remote machine without having to enter a password. + + +<sect2>print<label id="print"> +<p> +Type: quadoption<newline> +Default: ask-no + +<p> +Controls whether or not Mutt asks for confirmation before printing. +This is useful for people (like me) who accidentally hit ``p'' often. + + +<sect2>print_command<label id="print_command"> +<p> +Type: path<newline> +Default: &dquot;lpr&dquot; + +<p> +This specifies the command pipe that should be used to print messages. + + +<sect2>print_decode<label id="print_decode"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Used in connection with the print-message command. If this +option is set, the message is decoded before it is passed to the +external command specified by <ref id="print_command" name="$print_command">. If this option +is unset, no processing will be applied to the message when +printing it. The latter setting may be useful if you are using +some advanced printer filter which is able to properly format +e-mail messages for printing. + + +<sect2>print_split<label id="print_split"> +<p> +Type: boolean<newline> +Default: no + +<p> +Used in connection with the print-message command. If this option +is set, the command specified by <ref id="print_command" name="$print_command"> is executed once for +each message which is to be printed. If this option is unset, +the command specified by <ref id="print_command" name="$print_command"> is executed only once, and +all the messages are concatenated, with a form feed as the message +separator. +<p> +Those who use the <bf>enscript</bf>(1) program's mail-printing mode will +most likely want to set this option. + + +<sect2>prompt_after<label id="prompt_after"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If you use an <em>external</em> ``<ref id="pager" name="$pager">'', setting this variable will +cause Mutt to prompt you for a command when the pager exits rather +than returning to the index menu. If unset, Mutt will return to the +index menu when the external pager exits. + + +<sect2>query_command<label id="query_command"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +This specifies the command that mutt will use to make external address +queries. The string should contain a %s, which will be substituted +with the query string the user types. See ``<ref id="query" name="query">'' for more +information. + + +<sect2>quit<label id="quit"> +<p> +Type: quadoption<newline> +Default: yes + +<p> +This variable controls whether ``quit'' and ``exit'' actually quit +from mutt. If it set to yes, they do quit, if it is set to no, they +have no effect, and if it is set to ask-yes or ask-no, you are +prompted for confirmation when you try to quit. + + +<sect2>quote_empty<label id="quote_empty"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether or not empty lines will be quoted using +``<ref id="indent_string" name="indent_string">''. + + +<sect2>quote_quoted<label id="quote_quoted"> +<p> +Type: boolean<newline> +Default: no + +<p> +Controls how quoted lines will be quoted. If set, one quote +character will be added to the end of existing prefix. Otherwise, +quoted lines will be prepended by ``<ref id="indent_string" name="indent_string">''. + + +<sect2>quote_regexp<label id="quote_regexp"> +<p> +Type: regular expression<newline> +Default: &dquot;^([ \t]*[|>:}#])+&dquot; + +<p> +A regular expression used in the internal-pager to determine quoted +sections of text in the body of a message. +<p> +<bf>Note:</bf> In order to use the <em>quoted</em><bf>x</bf> patterns in the +internal pager, you need to set this to a regular expression that +matches <em>exactly</em> the quote characters at the beginning of quoted +lines. + + +<sect2>read_inc<label id="read_inc"> +<p> +Type: number<newline> +Default: 10 + +<p> +If set to a value greater than 0, Mutt will display which message it +is currently on when reading a mailbox. The message is printed after +<em>read_inc</em> messages have been read (e.g., if set to 25, Mutt will +print a message when it reads message 25, and then again when it gets +to message 50). This variable is meant to indicate progress when +reading large mailboxes which may take some time. +When set to 0, only a single message will appear before the reading +the mailbox. +<p> +Also see the ``<ref id="write_inc" name="$write_inc">'' variable. + + +<sect2>read_only<label id="read_only"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, all folders are opened in read-only mode. + + +<sect2>realname<label id="realname"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +This variable specifies what &dquot;real&dquot; or &dquot;personal&dquot; name should be used +when sending messages. +<p> +By default, this is the GECOS field from /etc/passwd. Note that this +variable will <em>not</em> be used when the user has set a real name +in the <ref id="from" name="$from"> variable. + + +<sect2>recall<label id="recall"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +Controls whether or not you are prompted to recall postponed messages +when composing a new message. Also see ``<ref id="postponed" name="$postponed">''. +<p> +Setting this variable to ``yes'' is not generally useful, and thus not +recommended. + + +<sect2>record<label id="record"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +This specifies the file into which your outgoing messages should be +appended. (This is meant as the primary method for saving a copy of +your messages, but another way to do this is using the ``<ref id="my_hdr" name="my_hdr">'' +command to create a <em>Bcc:</em> field with your email address in it.) +<p> +The value of <em><ref id="record" name="$record"></em> is overridden by the ``<ref id="force_name" name="$force_name">'' and +``<ref id="save_name" name="$save_name">'' variables, and the ``<ref id="fcc-hook" name="fcc-hook">'' command. + + +<sect2>reply_regexp<label id="reply_regexp"> +<p> +Type: regular expression<newline> +Default: &dquot;^(re([\[0-9\]+])*|aw):[ \t]*&dquot; + +<p> +A regular expression used to recognize reply messages when threading +and replying. The default value corresponds to the English &dquot;Re:&dquot; and +the German &dquot;Aw:&dquot;. + + +<sect2>reply_self<label id="reply_self"> +<p> +Type: boolean<newline> +Default: no + +<p> +If unset and you are replying to a message sent by you, Mutt will +assume that you want to reply to the recipients of that message rather +than to yourself. + + +<sect2>reply_to<label id="reply_to"> +<p> +Type: quadoption<newline> +Default: ask-yes + +<p> +If set, Mutt will ask you if you want to use the address listed in the +Reply-To: header field when replying to a message. If you answer no, +it will use the address in the From: header field instead. This +option is useful for reading a mailing list that sets the Reply-To: +header field to the list address and you want to send a private +message to the author of a message. + + +<sect2>resolve<label id="resolve"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, the cursor will be automatically advanced to the next +(possibly undeleted) message whenever a command that modifies the +current message is executed. + + +<sect2>reverse_alias<label id="reverse_alias"> +<p> +Type: boolean<newline> +Default: no + +<p> +This variable controls whether or not Mutt will display the &dquot;personal&dquot; +name from your aliases in the index menu if it finds an alias that +matches the message's sender. For example, if you have the following +alias: +<p> + +<tscreen><verb> +alias juser abd30425@somewhere.net (Joe User) + +</verb></tscreen><p> +and then you receive mail which contains the following header: +<p> + +<tscreen><verb> +From: abd30425@somewhere.net + +</verb></tscreen><p> +It would be displayed in the index menu as ``Joe User'' instead of +``abd30425@somewhere.net.'' This is useful when the person's e-mail +address is not human friendly (like CompuServe addresses). + + +<sect2>reverse_name<label id="reverse_name"> +<p> +Type: boolean<newline> +Default: no + +<p> +It may sometimes arrive that you receive mail to a certain machine, +move the messages to another machine, and reply to some the messages +from there. If this variable is set, the default <em>From:</em> line of +the reply messages is built using the address where you received the +messages you are replying to. If the variable is unset, the +<em>From:</em> line will use your address on the current machine. + + +<sect2>reverse_realname<label id="reverse_realname"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable fine-tunes the behaviour of the <ref id="reverse_name" name="reverse_name"> feature. +When it is set, mutt will use the address from incoming messages as-is, +possibly including eventual real names. When it is unset, mutt will +override any such real names with the setting of the <ref id="realname" name="realname"> variable. + + +<sect2>rfc2047_parameters<label id="rfc2047_parameters"> +<p> +Type: boolean<newline> +Default: no + +<p> +When this variable is set, Mutt will decode RFC-2047-encoded MIME +parameters. You want to set this variable when mutt suggests you +to save attachments to files named like this: +=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?= +<p> +When this variable is set interactively, the change doesn't have +the desired effect before you have changed folders. +<p> +Note that this use of RFC 2047's encoding is explicitly, +prohibited by the standard, but nevertheless encountered in the +wild. +Also note that setting this parameter will <em>not</em> have the effect +that mutt <em>generates</em> this kind of encoding. Instead, mutt will +unconditionally use the encoding specified in RFC 2231. + + +<sect2>save_address<label id="save_address"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, mutt will take the sender's full address when choosing a +default folder for saving a mail. If ``<ref id="save_name" name="$save_name">'' or ``<ref id="force_name" name="$force_name">'' +is set too, the selection of the fcc folder will be changed as well. + + +<sect2>save_empty<label id="save_empty"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When unset, mailboxes which contain no saved messages will be removed +when closed (the exception is ``<ref id="spoolfile" name="$spoolfile">'' which is never removed). +If set, mailboxes are never removed. +<p> +<bf>Note:</bf> This only applies to mbox and MMDF folders, Mutt does not +delete MH and Maildir directories. + + +<sect2>save_name<label id="save_name"> +<p> +Type: boolean<newline> +Default: no + +<p> +This variable controls how copies of outgoing messages are saved. +When set, a check is made to see if a mailbox specified by the +recipient address exists (this is done by searching for a mailbox in +the ``<ref id="folder" name="$folder">'' directory with the <em>username</em> part of the +recipient address). If the mailbox exists, the outgoing message will +be saved to that mailbox, otherwise the message is saved to the +``<ref id="record" name="$record">'' mailbox. +<p> +Also see the ``<ref id="force_name" name="$force_name">'' variable. + + +<sect2>score<label id="score"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When this variable is <em>unset</em>, scoring is turned off. This can +be useful to selectively disable scoring for certain folders when the +``<ref id="score_threshold_delete" name="$score_threshold_delete">'' variable and friends are used. + + +<sect2>score_threshold_delete<label id="score_threshold_delete"> +<p> +Type: number<newline> +Default: -1 + +<p> +Messages which have been assigned a score equal to or lower than the value +of this variable are automatically marked for deletion by mutt. Since +mutt scores are always greater than or equal to zero, the default setting +of this variable will never mark a message for deletion. + + +<sect2>score_threshold_flag<label id="score_threshold_flag"> +<p> +Type: number<newline> +Default: 9999 + +<p> +Messages which have been assigned a score greater than or equal to this +variable's value are automatically marked &dquot;flagged&dquot;. + + +<sect2>score_threshold_read<label id="score_threshold_read"> +<p> +Type: number<newline> +Default: -1 + +<p> +Messages which have been assigned a score equal to or lower than the value +of this variable are automatically marked as read by mutt. Since +mutt scores are always greater than or equal to zero, the default setting +of this variable will never mark a message read. + + +<sect2>send_charset<label id="send_charset"> +<p> +Type: string<newline> +Default: &dquot;us-ascii:iso-8859-1:utf-8&dquot; + +<p> +A list of character sets for outgoing messages. Mutt will use the +first character set into which the text can be converted exactly. +If your ``<ref id="charset" name="$charset">'' is not iso-8859-1 and recipients may not +understand UTF-8, it is advisable to include in the list an +appropriate widely used standard character set (such as +iso-8859-2, koi8-r or iso-2022-jp) either instead of or after +&dquot;iso-8859-1&dquot;. + + +<sect2>sendmail<label id="sendmail"> +<p> +Type: path<newline> +Default: &dquot;/sw/sbin/sendmail -oem -oi&dquot; + +<p> +Specifies the program and arguments used to deliver mail sent by Mutt. +Mutt expects that the specified program interprets additional +arguments as recipient addresses. + + +<sect2>sendmail_wait<label id="sendmail_wait"> +<p> +Type: number<newline> +Default: 0 + +<p> +Specifies the number of seconds to wait for the ``<ref id="sendmail" name="$sendmail">'' process +to finish before giving up and putting delivery in the background. +<p> +Mutt interprets the value of this variable as follows: + +<descrip> +<tag>>0 </tag>number of seconds to wait for sendmail to finish before continuing +<tag>0 </tag>wait forever for sendmail to finish +<tag><0 </tag>always put sendmail in the background without waiting +</descrip> + +<p> +Note that if you specify a value other than 0, the output of the child +process will be put in a temporary file. If there is some error, you +will be informed as to where to find the output. + + +<sect2>shell<label id="shell"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +Command to use when spawning a subshell. By default, the user's login +shell from /etc/passwd is used. + + +<sect2>save_unsubscribed<label id="save_unsubscribed"> +<p> +Type: boolean<newline> +Default: no + +<p> +When <em>set</em>, info about unsubscribed newsgroups will be saved into +``newsrc'' file and into cache. + + +<sect2>show_new_news<label id="show_new_news"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If <em>set</em>, newsserver will be asked for new newsgroups on entering +the browser. Otherwise, it will be done only once for a newsserver. +Also controls whether or not number of new articles of subscribed +newsgroups will be then checked. + + +<sect2>show_only_unread<label id="show_only_unread"> +<p> +Type: boolean<newline> +Default: no + +<p> +If <em>set</em>, only subscribed newsgroups that contain unread articles +will be displayed in browser. + + +<sect2>sig_dashes<label id="sig_dashes"> +<p> +Type: boolean<newline> +Default: yes + +<p> +If set, a line containing ``-- '' will be inserted before your +``<ref id="signature" name="$signature">''. It is <bf>strongly</bf> recommended that you not unset +this variable unless your ``signature'' contains just your name. The +reason for this is because many software packages use ``-- \n'' to +detect your signature. For example, Mutt has the ability to highlight +the signature in a different color in the builtin pager. + + +<sect2>sig_on_top<label id="sig_on_top"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, the signature will be included before any quoted or forwarded +text. It is <bf>strongly</bf> recommended that you do not set this variable +unless you really know what you are doing, and are prepared to take +some heat from netiquette guardians. + + +<sect2>signature<label id="signature"> +<p> +Type: path<newline> +Default: &dquot;˜/.signature&dquot; + +<p> +Specifies the filename of your signature, which is appended to all +outgoing messages. If the filename ends with a pipe (``|''), it is +assumed that filename is a shell command and input should be read from +its stdout. + + +<sect2>simple_search<label id="simple_search"> +<p> +Type: string<newline> +Default: &dquot;˜f %s | ˜s %s&dquot; + +<p> +Specifies how Mutt should expand a simple search into a real search +pattern. A simple search is one that does not contain any of the ˜ +operators. See ``<ref id="patterns" name="patterns">'' for more information on search patterns. +<p> +For example, if you simply type joe at a search or limit prompt, Mutt +will automatically expand it to the value specified by this variable. +For the default value it would be: +<p> +˜f joe | ˜s joe + + +<sect2>smart_wrap<label id="smart_wrap"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls the display of lines longer than the screen width in the +internal pager. If set, long lines are wrapped at a word boundary. If +unset, lines are simply wrapped at the screen edge. Also see the +``<ref id="markers" name="$markers">'' variable. + + +<sect2>smileys<label id="smileys"> +<p> +Type: regular expression<newline> +Default: &dquot;(>From )|(:[-^]?[][)(><}{|/DP])&dquot; + +<p> +The <em>pager</em> uses this variable to catch some common false +positives of ``<ref id="quote_regexp" name="$quote_regexp">'', most notably smileys in the beginning +of a line + + +<sect2>sleep_time<label id="sleep_time"> +<p> +Type: number<newline> +Default: 1 + +<p> +Specifies time, in seconds, to pause while displaying certain informational +messages, while moving from folder to folder and after expunging +messages from the current folder. The default is to pause one second, so +a value of zero for this option suppresses the pause. + + +<sect2>sort<label id="sort"> +<p> +Type: sort order<newline> +Default: date + +<p> +Specifies how to sort messages in the <em>index</em> menu. Valid values +are: +<p> + +<tscreen><verb> + date or date-sent + date-received + from + mailbox-order (unsorted) + score + size + subject + threads + to + +</verb></tscreen><p> +You may optionally use the reverse- prefix to specify reverse sorting +order (example: set sort=reverse-date-sent). + + +<sect2>sort_alias<label id="sort_alias"> +<p> +Type: sort order<newline> +Default: alias + +<p> +Specifies how the entries in the `alias' menu are sorted. The +following are legal values: +<p> + +<tscreen><verb> + address (sort alphabetically by email address) + alias (sort alphabetically by alias name) + unsorted (leave in order specified in .muttrc) + +</verb></tscreen> + +<sect2>sort_aux<label id="sort_aux"> +<p> +Type: sort order<newline> +Default: date + +<p> +When sorting by threads, this variable controls how threads are sorted +in relation to other threads, and how the branches of the thread trees +are sorted. This can be set to any value that ``<ref id="sort" name="$sort">'' can, except +threads (in that case, mutt will just use date-sent). You can also +specify the last- prefix in addition to the reverse- prefix, but last- +must come after reverse-. The last- prefix causes messages to be +sorted against its siblings by which has the last descendant, using +the rest of sort_aux as an ordering. For instance, set sort_aux=last- +date-received would mean that if a new message is received in a +thread, that thread becomes the last one displayed (or the first, if +you have set sort=reverse-threads.) Note: For reversed ``<ref id="sort" name="$sort">'' +order <ref id="sort_aux" name="$sort_aux"> is reversed again (which is not the right thing to do, +but kept to not break any existing configuration setting). + + +<sect2>sort_browser<label id="sort_browser"> +<p> +Type: sort order<newline> +Default: subject + +<p> +Specifies how to sort entries in the file browser. By default, the +entries are sorted alphabetically. Valid values: +<p> + +<tscreen><verb> + alpha (alphabetically) + date + size + unsorted + +</verb></tscreen><p> +You may optionally use the reverse- prefix to specify reverse sorting +order (example: set sort_browser=reverse-date). + + +<sect2>sort_re<label id="sort_re"> +<p> +Type: boolean<newline> +Default: yes + +<p> +This variable is only useful when sorting by threads with +``<ref id="strict_threads" name="$strict_threads">'' unset. In that case, it changes the heuristic +mutt uses to thread messages by subject. With sort_re set, mutt will +only attach a message as the child of another message by subject if +the subject of the child message starts with a substring matching the +setting of ``<ref id="reply_regexp" name="$reply_regexp">''. With sort_re unset, mutt will attach +the message whether or not this is the case, as long as the +non-``<ref id="reply_regexp" name="$reply_regexp">'' parts of both messages are identical. + + +<sect2>spoolfile<label id="spoolfile"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +If your spool mailbox is in a non-default place where Mutt cannot find +it, you can specify its location with this variable. Mutt will +automatically set this variable to the value of the environment +variable $MAIL if it is not set. + + +<sect2>status_chars<label id="status_chars"> +<p> +Type: string<newline> +Default: &dquot;-*%A&dquot; + +<p> +Controls the characters used by the &dquot;%r&dquot; indicator in +``<ref id="status_format" name="$status_format">''. The first character is used when the mailbox is +unchanged. The second is used when the mailbox has been changed, and +it needs to be resynchronized. The third is used if the mailbox is in +read-only mode, or if the mailbox will not be written when exiting +that mailbox (You can toggle whether to write changes to a mailbox +with the toggle-write operation, bound by default to &dquot;%&dquot;). The fourth +is used to indicate that the current folder has been opened in attach- +message mode (Certain operations like composing a new mail, replying, +forwarding, etc. are not permitted in this mode). + + +<sect2>status_format<label id="status_format"> +<p> +Type: string<newline> +Default: &dquot;-%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)---&dquot; + +<p> +Controls the format of the status line displayed in the <em>index</em> +menu. This string is similar to ``<ref id="index_format" name="$index_format">'', but has its own +set of printf()-like sequences: +<p> + +<descrip> +<tag>%b </tag>number of mailboxes with new mail * +<tag>%d </tag>number of deleted messages * +<tag>%f </tag>the full pathname of the current mailbox +<tag>%F </tag>number of flagged messages * +<tag>%h </tag>local hostname +<tag>%l </tag>size (in bytes) of the current mailbox * +<tag>%L </tag>size (in bytes) of the messages shown +(i.e., which match the current limit) * +<tag>%m </tag>the number of messages in the mailbox * +<tag>%M </tag>the number of messages shown (i.e., which match the current limit) * +<tag>%n </tag>number of new messages in the mailbox * +<tag>%o </tag>number of old unread messages +<tag>%p </tag>number of postponed messages * +<tag>%P </tag>percentage of the way through the index +<tag>%r </tag>modified/read-only/won't-write/attach-message indicator, +according to <ref id="status_chars" name="$status_chars"> +<tag>%s </tag>current sorting mode (<ref id="sort" name="$sort">) +<tag>%S </tag>current aux sorting method (<ref id="sort_aux" name="$sort_aux">) +<tag>%t </tag>number of tagged messages * +<tag>%u </tag>number of unread messages * +<tag>%v </tag>Mutt version string +<tag>%V </tag>currently active limit pattern, if any * +<tag>%>X </tag>right justify the rest of the string and pad with &dquot;X&dquot; +<tag>%|X </tag>pad to the end of the line with &dquot;X&dquot; +</descrip> + +<p> +* = can be optionally printed if nonzero +<p> +Some of the above sequences can be used to optionally print a string +if their value is nonzero. For example, you may only want to see the +number of flagged messages if such messages exist, since zero is not +particularly meaningful. To optionally print a string based upon one +of the above sequences, the following construct is used +<p> +%?<sequence_char>?<optional_string>? +<p> +where <em>sequence_char</em> is a character from the table above, and +<em>optional_string</em> is the string you would like printed if +<em>status_char</em> is nonzero. <em>optional_string</em> <bf>may</bf> contain +other sequence as well as normal text, but you may <bf>not</bf> nest +optional strings. +<p> +Here is an example illustrating how to optionally print the number of +new messages in a mailbox: +%?n?%n new messages.? +<p> +Additionally you can switch between two strings, the first one, if a +value is zero, the second one, if the value is nonzero, by using the +following construct: +%?<sequence_char>?<if_string>&<else_string>? +<p> +You can additionally force the result of any printf-like sequence to +be lowercase by prefixing the sequence character with an underscore +(_) sign. For example, if you want to display the local hostname in +lowercase, you would use: +%_h +<p> +If you prefix the sequence character with a colon (:) character, mutt +will replace any dots in the expansion by underscores. This might be helpful +with IMAP folders that don't like dots in folder names. + + +<sect2>status_on_top<label id="status_on_top"> +<p> +Type: boolean<newline> +Default: no + +<p> +Setting this variable causes the ``status bar'' to be displayed on +the first line of the screen rather than near the bottom. + + +<sect2>strict_threads<label id="strict_threads"> +<p> +Type: boolean<newline> +Default: no + +<p> +If set, threading will only make use of the ``In-Reply-To'' and +``References'' fields when you ``<ref id="sort" name="$sort">'' by message threads. By +default, messages with the same subject are grouped together in +``pseudo threads.'' This may not always be desirable, such as in a +personal mailbox where you might have several unrelated messages with +the subject ``hi'' which will get grouped together. + + +<sect2>suspend<label id="suspend"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When <em>unset</em>, mutt won't stop when the user presses the terminal's +<em>susp</em> key, usually ``control-Z''. This is useful if you run mutt +inside an xterm using a command like xterm -e mutt. + + +<sect2>text_flowed<label id="text_flowed"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, mutt will generate text/plain; format=flowed attachments. +This format is easier to handle for some mailing software, and generally +just looks like ordinary text. To actually make use of this format's +features, you'll need support in your editor. +<p> +Note that <ref id="indent_string" name="$indent_string"> is ignored when this option is set. + + +<sect2>thread_received<label id="thread_received"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, mutt uses the date received rather than the date sent +to thread messages by subject. + + +<sect2>thorough_search<label id="thorough_search"> +<p> +Type: boolean<newline> +Default: no + +<p> +Affects the <em>˜b</em> and <em>˜h</em> search operations described in +section ``<ref id="patterns" name="patterns">'' above. If set, the headers and attachments of +messages to be searched are decoded before searching. If unset, +messages are searched as they appear in the folder. + + +<sect2>tilde<label id="tilde"> +<p> +Type: boolean<newline> +Default: no + +<p> +When set, the internal-pager will pad blank lines to the bottom of the +screen with a tilde (˜). + + +<sect2>timeout<label id="timeout"> +<p> +Type: number<newline> +Default: 600 + +<p> +This variable controls the <em>number of seconds</em> Mutt will wait +for a key to be pressed in the main menu before timing out and +checking for new mail. A value of zero or less will cause Mutt +to never time out. + + +<sect2>tmpdir<label id="tmpdir"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +This variable allows you to specify where Mutt will place its +temporary files needed for displaying and composing messages. If +this variable is not set, the environment variable TMPDIR is +used. If TMPDIR is not set then &dquot;/tmp&dquot; is used. + + +<sect2>to_chars<label id="to_chars"> +<p> +Type: string<newline> +Default: &dquot; +TCFL&dquot; + +<p> +Controls the character used to indicate mail addressed to you. The +first character is the one used when the mail is NOT addressed to your +address (default: space). The second is used when you are the only +recipient of the message (default: +). The third is when your address +appears in the TO header field, but you are not the only recipient of +the message (default: T). The fourth character is used when your +address is specified in the CC header field, but you are not the only +recipient. The fifth character is used to indicate mail that was sent +by <em>you</em>. The sixth character is used to indicate when a mail +was sent to a mailing-list you subscribe to (default: L). + + +<sect2>trash<label id="trash"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +If set, this variable specifies the path of the trash folder where the +mails marked for deletion will be moved, instead of being irremediably +purged. +<p> +NOTE: When you delete a message in the trash folder, it is really +deleted, so that you have a way to clean the trash. + + +<sect2>tunnel<label id="tunnel"> +<p> +Type: string<newline> +Default: &dquot;&dquot; + +<p> +Setting this variable will cause mutt to open a pipe to a command +instead of a raw socket. You may be able to use this to set up +preauthenticated connections to your IMAP/POP3 server. Example: +<p> +tunnel=&dquot;ssh -q mailhost.net /usr/local/libexec/imapd&dquot; +<p> +NOTE: For this example to work you must be able to log in to the remote +machine without having to enter a password. + + +<sect2>use_8bitmime<label id="use_8bitmime"> +<p> +Type: boolean<newline> +Default: no + +<p> +<bf>Warning:</bf> do not set this variable unless you are using a version +of sendmail which supports the -B8BITMIME flag (such as sendmail +8.8.x) or you may not be able to send mail. +<p> +When <em>set</em>, Mutt will invoke ``<ref id="sendmail" name="$sendmail">'' with the -B8BITMIME +flag when sending 8-bit messages to enable ESMTP negotiation. + + +<sect2>use_domain<label id="use_domain"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, Mutt will qualify all local addresses (ones without the +@host portion) with the value of ``<ref id="hostname" name="$hostname">''. If <em>unset</em>, no +addresses will be qualified. + + +<sect2>use_from<label id="use_from"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When <em>set</em>, Mutt will generate the `From:' header field when +sending messages. If <em>unset</em>, no `From:' header field will be +generated unless the user explicitly sets one using the ``<ref id="my_hdr" name="my_hdr">'' +command. + + +<sect2>use_ipv6<label id="use_ipv6"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When <em>set</em>, Mutt will look for IPv6 addresses of hosts it tries to +contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. +Normally, the default should work. + + +<sect2>user_agent<label id="user_agent"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When <em>set</em>, mutt will add a &dquot;User-Agent&dquot; header to outgoing +messages, indicating which version of mutt was used for composing +them. + + +<sect2>visual<label id="visual"> +<p> +Type: path<newline> +Default: &dquot;&dquot; + +<p> +Specifies the visual editor to invoke when the <em>˜v</em> command is +given in the builtin editor. + + +<sect2>wait_key<label id="wait_key"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether Mutt will ask you to press a key after <em>shell- +escape</em>, <em>pipe-message</em>, <em>pipe-entry</em>, <em>print-message</em>, +and <em>print-entry</em> commands. +<p> +It is also used when viewing attachments with ``<ref id="auto_view" name="auto_view">'', provided +that the corresponding mailcap entry has a <em>needsterminal</em> flag, +and the external program is interactive. +<p> +When set, Mutt will always ask for a key. When unset, Mutt will wait +for a key only if the external command returned a non-zero status. + + +<sect2>weed<label id="weed"> +<p> +Type: boolean<newline> +Default: yes + +<p> +When set, mutt will weed headers when when displaying, forwarding, +printing, or replying to messages. + + +<sect2>wrap_search<label id="wrap_search"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether searches wrap around the end of the mailbox. +<p> +When set, searches will wrap around the first (or last) message. When +unset, searches will not wrap. + + +<sect2>wrapmargin<label id="wrapmargin"> +<p> +Type: number<newline> +Default: 0 + +<p> +Controls the size of the margin remaining at the right side of +the terminal when mutt's pager does smart wrapping. + + +<sect2>write_inc<label id="write_inc"> +<p> +Type: number<newline> +Default: 10 + +<p> +When writing a mailbox, a message will be printed every +<em>write_inc</em> messages to indicate progress. If set to 0, only a +single message will be displayed before writing a mailbox. +<p> +Also see the ``<ref id="read_inc" name="$read_inc">'' variable. + + +<sect2>write_bcc<label id="write_bcc"> +<p> +Type: boolean<newline> +Default: yes + +<p> +Controls whether mutt writes out the Bcc header when preparing +messages to be sent. Exim users may wish to use this. + + +<sect2>x_comment_to<label id="x_comment_to"> +<p> +Type: boolean<newline> +Default: no + +<p> +If <em>set</em>, Mutt will add ``X-Comment-To:'' field (that contains full +name of original article author) to article that followuped to newsgroup. + + +<sect1>Functions<label id="functions"> +<p> +The following is the list of available functions listed by the mapping +in which they are available. The default key setting is given, and an +explanation of what the function does. The key bindings of these +functions can be changed with the <ref name="bind" id="bind"> +command. + +<sect2>generic +<p> + +The <em/generic/ menu is not a real menu, but specifies common functions +(such as movement) available in all menus except for <em/pager/ and +<em/editor/. Changing settings for this menu will affect the default +bindings for all menus (except as noted). + +<verb> +bottom-page L move to the bottom of the page +current-bottom not bound move current entry to bottom of page +current-middle not bound move current entry to middle of page +current-top not bound move current entry to top of page +enter-command : enter a muttrc command +exit q exit this menu +first-entry = move to the first entry +half-down ] scroll down 1/2 page +half-up [ scroll up 1/2 page +help ? this screen +jump number jump to an index number +last-entry * move to the last entry +middle-page M move to the middle of the page +next-entry j move to the next entry +next-line > scroll down one line +next-page z move to the next page +previous-entry k move to the previous entry +previous-line < scroll up one line +previous-page Z move to the previous page +refresh ^L clear and redraw the screen +search / search for a regular expression +search-next n search for next match +search-opposite not bound search for next match in opposite direction +search-reverse ESC / search backwards for a regular expression +select-entry RET select the current entry +shell-escape ! run a program in a subshell +tag-entry t toggle the tag on the current entry +tag-prefix ; apply next command to tagged entries +top-page H move to the top of the page +</verb> +<sect2>index +<p> +<verb> +bounce-message b remail a message to another user +change-folder c open a different folder +change-folder-readonly ESC c open a different folder in read only mode +check-traditional-pgp ESC P check for classic pgp +clear-flag W clear a status flag from a message +copy-message C copy a message to a file/mailbox +create-alias a create an alias from a message sender +decode-copy ESC C decode a message and copy it to a file/mailbox +decode-save ESC s decode a message and save it to a file/mailbox +delete-message d delete the current entry +delete-pattern D delete messages matching a pattern +delete-subthread ESC d delete all messages in subthread +delete-thread ^D delete all messages in thread +display-address @ display full address of sender +display-toggle-weed h display message and toggle header weeding +display-message RET display a message +edit e edit the current message +edit-type ^E edit the current message's Content-Type +exit x exit without saving changes +extract-keys ^K extract PGP public keys +fetch-mail G retrieve mail from POP server +flag-message F toggle a message's 'important' flag +forget-passphrase ^F wipe PGP passphrase from memory +forward-message f forward a message with comments +group-reply g reply to all recipients +limit l show only messages matching a pattern +list-reply L reply to specified mailing list +mail m compose a new mail message +mail-key ESC k mail a PGP public key +next-new TAB jump to the next new message +next-subthread ESC n jump to the next subthread +next-thread ^N jump to the next thread +next-undeleted j move to the next undeleted message +next-unread not bound jump to the next unread message +parent-message P jump to parent message in thread +pipe-message | pipe message/attachment to a shell command +previous-new ESC TAB jump to the previous new message +previous-page Z move to the previous page +previous-subthread ESC p jump to previous subthread +previous-thread ^P jump to previous thread +previous-undeleted k move to the last undelete message +previous-unread not bound jump to the previous unread message +print-message p print the current entry +query Q query external program for addresses +quit q save changes to mailbox and quit +read-subthread ESC r mark the current subthread as read +read-thread ^R mark the current thread as read +recall-message R recall a postponed message +reply r reply to a message +resend-message ESC e resend message and preserve MIME structure +save-message s save message/attachment to a file +set-flag w set a status flag on a message +show-version V show the Mutt version number and date +show-limit ESC l show currently active limit pattern, if any +sort-mailbox o sort messages +sort-reverse O sort messages in reverse order +sync-mailbox $ save changes to mailbox +tag-pattern T tag messages matching a pattern +tag-thread ESC t tag/untag all messages in the current thread +toggle-new N toggle a message's 'new' flag +toggle-write % toggle whether the mailbox will be rewritten +undelete-message u undelete the current entry +undelete-pattern U undelete messages matching a pattern +undelete-subthread ESC u undelete all messages in subthread +undelete-thread ^U undelete all messages in thread +untag-pattern ^T untag messages matching a pattern +view-attachments v show MIME attachments +</verb> +<sect2>pager +<p> +<verb> +bottom not bound jump to the bottom of the message +bounce-message b remail a message to another user +change-folder c open a different folder +change-folder-readonly ESC c open a different folder in read only mode +check-traditional-pgp ESC P check for classic pgp +copy-message C copy a message to a file/mailbox +create-alias a create an alias from a message sender +decode-copy ESC C decode a message and copy it to a file/mailbox +decode-save ESC s decode a message and save it to a file/mailbox +delete-message d delete the current entry +delete-subthread ESC d delete all messages in subthread +delete-thread ^D delete all messages in thread +display-address @ display full address of sender +display-toggle-weed h display message and toggle header weeding +edit e edit the current message +edit-type ^E edit the current message's Content-Type +enter-command : enter a muttrc command +exit i return to the main-menu +extract-keys ^K extract PGP public keys +flag-message F toggle a message's 'important' flag +forget-passphrase ^F wipe PGP passphrase from memory +forward-message f forward a message with comments +group-reply g reply to all recipients +half-up not bound move up one-half page +half-down not bound move down one-half page +help ? this screen +list-reply L reply to specified mailing list +mail m compose a new mail message +mail-key ESC k mail a PGP public key +mark-as-new N toggle a message's 'new' flag +next-line RET scroll down one line +next-entry J move to the next entry +next-new TAB jump to the next new message +next-page move to the next page +next-subthread ESC n jump to the next subthread +next-thread ^N jump to the next thread +next-undeleted j move to the next undeleted message +next-unread not bound jump to the next unread message +parent-message P jump to parent message in thread +pipe-message | pipe message/attachment to a shell command +previous-line BackSpace scroll up one line +previous-entry K move to the previous entry +previous-new not bound jump to the previous new message +previous-page - move to the previous page +previous-subthread ESC p jump to previous subthread +previous-thread ^P jump to previous thread +previous-undeleted k move to the last undelete message +previous-unread not bound jump to the previous unread message +print-message p print the current entry +quit Q save changes to mailbox and quit +read-subthread ESC r mark the current subthread as read +read-thread ^R mark the current thread as read +recall-message R recall a postponed message +redraw-screen ^L clear and redraw the screen +reply r reply to a message +save-message s save message/attachment to a file +search / search for a regular expression +search-next n search for next match +search-opposite not bound search for next match in opposite direction +search-reverse ESC / search backwards for a regular expression +search-toggle \ toggle search pattern coloring +shell-escape ! invoke a command in a subshell +show-version V show the Mutt version number and date +skip-quoted S skip beyond quoted text +sync-mailbox $ save changes to mailbox +tag-message t tag a message +toggle-quoted T toggle display of quoted text +top ^ jump to the top of the message +undelete-message u undelete the current entry +undelete-subthread ESC u undelete all messages in subthread +undelete-thread ^U undelete all messages in thread +view-attachments v show MIME attachments +</verb> +<sect2>alias +<p> +<verb> +search / search for a regular expression +search-next n search for next match +search-reverse ESC / search backwards for a regular expression +</verb> +<sect2>query +<p> +<verb> +create-alias a create an alias from a message sender +mail m compose a new mail message +query Q query external program for addresses +query-append A append new query results to current results +search / search for a regular expression +search-next n search for next match +search-opposite not bound search for next match in opposite direction +search-reverse ESC / search backwards for a regular expression +</verb> +<sect2>attach +<p> +<verb> +bounce-message b remail a message to another user +collapse-parts v toggle display of subparts +delete-entry d delete the current entry +display-toggle-weed h display message and toggle header weeding +edit-type ^E edit the current entry's Content-Type +extract-keys ^K extract PGP public keys +forward-message f forward a message with comments +group-reply g reply to all recipients +list-reply L reply to specified mailing list +pipe-entry | pipe message/attachment to a shell command +print-entry p print the current entry +reply r reply to a message +resend-message ESC e resend message and preserve MIME structure +save-entry s save message/attachment to a file +undelete-entry u undelete the current entry +view-attach RET view attachment using mailcap entry if necessary +view-mailcap m force viewing of attachment using mailcap +view-text T view attachment as text +</verb> +<sect2>compose +<p> +<verb> +attach-file a attach a file(s) to this message +attach-message A attach message(s) to this message +attach-key ESC k attach a PGP public key +copy-file C save message/attachment to a file +detach-file D delete the current entry +display-toggle-weed h display message and toggle header weeding +edit-bcc b edit the BCC list +edit-cc c edit the CC list +edit-description d edit attachment description +edit-encoding ^E edit attachment transfer-encoding +edit-fcc f enter a file to save a copy of this message in +edit-from ESC f edit the from: field +edit-file ^X e edit the file to be attached +edit-headers E edit the message with headers +edit e edit the message +edit-mime m edit attachment using mailcap entry +edit-reply-to r edit the Reply-To field +edit-subject s edit the subject of this message +edit-to t edit the TO list +edit-type ^T edit attachment type +filter-entry F filter attachment through a shell command +forget-passphrase ^F wipe PGP passphrase from memory +ispell i run ispell on the message +new-mime n compose new attachment using mailcap entry +pgp-menu p show PGP options +pipe-entry | pipe message/attachment to a shell command +postpone-message P save this message to send later +print-entry l print the current entry +rename-file R rename/move an attached file +send-message y send the message +toggle-unlink u toggle whether to delete file after sending it +view-attach RET view attachment using mailcap entry if necessary +write-fcc w write the message to a folder +</verb> +<sect2>postpone +<p> +<verb> +delete-entry d delete the current entry +undelete-entry u undelete the current entry +</verb> +<sect2>browser +<p> +<verb> +change-dir c change directories +check-new TAB check mailboxes for new mail +enter-mask m enter a file mask +search / search for a regular expression +search-next n search for next match +search-reverse ESC / search backwards for a regular expression +select-new N select a new file in this directory +sort o sort messages +sort-reverse O sort messages in reverse order +toggle-mailboxes TAB toggle whether to browse mailboxes or all files +view-file SPACE view file +subscribe s subscribe to current mailbox (IMAP Only) +unsubscribe u unsubscribe to current mailbox (IMAP Only) +toggle-subscribed T toggle view all/subscribed mailboxes (IMAP Only) +</verb> +<sect2>pgp +<p> +<verb> +view-name % view the key's user id +verify-key c verify a PGP public key +</verb> +<sect2>editor +<p> +<verb> +backspace BackSpace delete the char in front of the cursor +backward-char ^B move the cursor one character to the left +backward-word ESC b move the cursor to the previous word +bol ^A jump to the beginning of the line +buffy-cycle Space cycle among incoming mailboxes +capitalize-word ESC c uppercase the first character in the word +complete TAB complete filename or alias +complete-query ^T complete address with query +delete-char ^D delete the char under the cursor +downcase-word ESC l lowercase all characters in current word +eol ^E jump to the end of the line +forward-char ^F move the cursor one character to the right +forward-word ESC f move the cursor to the next word +history-down not bound scroll down through the history list +history-up not bound scroll up through the history list +kill-eol ^K delete chars from cursor to end of line +kill-eow ESC d delete chars from cursor to end of word +kill-line ^U delete all chars on the line +kill-word ^W delete the word in front of the cursor +quote-char ^V quote the next typed key +transpose-chars not bound transpose character under cursor with previous +upcase-word ESC u uppercase all characters in current word +</verb> + +<sect>Miscellany +<p> + +<sect1>Acknowledgements +<p> +Kari Hurtta +<htmlurl url="mailto:kari.hurtta@fmi.fi" name="<kari.hurtta@fmi.fi>"> +co-developed the original MIME parsing code back in the ELM-ME days. + +The following people have been very helpful to the development of Mutt: + +Vikas Agnihotri <htmlurl url="mailto:vikasa@writeme.com" name="<vikasa@writeme.com>">,<newline> +Francois Berjon <htmlurl url="mailto:Francois.Berjon@aar.alcatel-alsthom.fr" name="<Francois.Berjon@aar.alcatel-alsthom.fr>">,<newline> +Aric Blumer <htmlurl url="mailto:aric@fore.com" name="<aric@fore.com>">,<newline> +John Capo <htmlurl url="mailto:jc@irbs.com" name="<jc@irbs.com>">,<newline> +David Champion <htmlurl url="mailto:dgc@uchicago.edu" name="<dgc@uchicago.edu">,<newline> +Brendan Cully <htmlurl url="mailto:brendan@kublai.com" name="<brendan@kublai.com>">,<newline> +Liviu Daia <htmlurl url="mailto:daia@stoilow.imar.ro" name="<daia@stoilow.imar.ro>">,<newline> +Thomas E. Dickey <htmlurl url="mailto:dickey@herndon4.his.com" name="<dickey@herndon4.his.com>">,<newline> +David DeSimone <htmlurl url="mailto:fox@convex.hp.com" name="<fox@convex.hp.com>">,<newline> +Nickolay N. Dudorov <htmlurl url="mailto:nnd@wint.itfs.nsk.su" name="<nnd@wint.itfs.nsk.su>">,<newline> +Ruslan Ermilov <htmlurl url="mailto:ru@freebsd.org" name="<ru@freebsd.org>">,<newline> +Edmund Grimley Evans <htmlurl url="mailto:edmundo@rano.org" name="<edmundo@rano.org">,<newline> +Michael Finken <htmlurl url="mailto:finken@conware.de" name="<finken@conware.de>">,<newline> +Sven Guckes <htmlurl url="mailto:guckes@math.fu-berlin.de" name="<guckes@math.fu-berlin.de>">,<newline> +Lars Hecking <htmlurl url="mailto:lhecking@nmrc.ie" name="<lhecking@nmrc.ie>">,<newline> +Mark Holloman <htmlurl url="mailto:holloman@nando.net" name="<holloman@nando.net>">,<newline> +Andreas Holzmann <htmlurl url="mailto:holzmann@fmi.uni-passau.de" name="<holzmann@fmi.uni-passau.de>">,<newline> +Marco d'Itri <htmlurl url="mailto:md@linux.it" name="<md@linux.it>">,<newline> +Björn Jacke <htmlurl url="mailto:bjacke@suse.com" name="<bjacke@suse.com>">,<newline> +Byrial Jensen <htmlurl url="mailto:byrial@image.dk" name="<byrial@image.dk>">,<newline> +David Jeske <htmlurl url="mailto:jeske@igcom.net" name="<jeske@igcom.net>">,<newline> +Christophe Kalt <htmlurl url="mailto:kalt@hugo.int-evry.fr" name="<kalt@hugo.int-evry.fr>">,<newline> +Tommi Komulainen <htmlurl url="mailto:Tommi.Komulainen@iki.fi" name="<Tommi.Komulainen@iki.fi>">,<newline> +Felix von Leitner (a.k.a ``Fefe'') <htmlurl url="mailto:leitner@math.fu-berlin.de" name="<leitner@math.fu-berlin.de>">,<newline> +Brandon Long <htmlurl url="mailto:blong@fiction.net" name="<blong@fiction.net>">,<newline> +Jimmy Mäkelä <htmlurl url="mailto:jmy@flashback.net" name="<jmy@flashback.net>">,<newline> +Lars Marowsky-Bree <htmlurl url="mailto:lmb@pointer.in-minden.de" name="<lmb@pointer.in-minden.de>">,<newline> +Thomas ``Mike'' Michlmayr <htmlurl url="mailto:mike@cosy.sbg.ac.at" name="<mike@cosy.sbg.ac.at>">,<newline> +Andrew W. Nosenko <htmlurl url="mailto:awn@bcs.zp.ua" name="<awn@bcs.zp.ua>">,<newline> +David O'Brien <htmlurl url="mailto:obrien@Nuxi.cs.ucdavis.edu" name="<obrien@Nuxi.cs.ucdavis.edu>">,<newline> +Clint Olsen <htmlurl url="mailto:olsenc@ichips.intel.com" name="<olsenc@ichips.intel.com>">,<newline> +Park Myeong Seok <htmlurl url="mailto:pms@romance.kaist.ac.kr" name="<pms@romance.kaist.ac.kr>">,<newline> +Thomas Parmelan <htmlurl url="mailto:tom@ankh.fr.eu.org" name="<tom@ankh.fr.eu.org>">,<newline> +Ollivier Robert <htmlurl url="mailto:roberto@keltia.freenix.fr" name="<roberto@keltia.freenix.fr>">,<newline> +Thomas Roessler <htmlurl url="mailto:roessler@does-not-exist.org" name="<roessler@does-not-exist.org>">,<newline> +Roland Rosenfeld <htmlurl url="roland@spinnaker.de" name="<roland@spinnaker.de>">,<newline> +TAKIZAWA Takashi <htmlurl url="taki@luna.email.ne.jp" name="<taki@luna.email.ne.jp>">,<newline> +Allain Thivillon <htmlurl url="mailto:Allain.Thivillon@alma.fr" name="<Allain.Thivillon@alma.fr>">,<newline> +Gero Treuner <htmlurl url="mailto:gero@faveve.uni-stuttgart.de" name="<gero@faveve.uni-stuttgart.de>">,<newline> +Vsevolod Volkov <htmlurl url="mailto:vvv@lucky.net" name="<vvv@lucky.net>">,<newline> +Ken Weinert <htmlurl url="mailto:kenw@ihs.com" name="<kenw@ihs.com>"> + +<sect1>About this document +<p> +This document was written in SGML, and then rendered using the +<htmlurl url="http://www.sgmltools.org/" name="sgml-tools"> package. + +</article> diff --git a/doc/manual.sgml.head b/doc/manual.sgml.head new file mode 100644 index 0000000..8ad8d3b --- /dev/null +++ b/doc/manual.sgml.head @@ -0,0 +1,3079 @@ +<!doctype linuxdoc system> + +<article> + +<title>The Mutt E-Mail Client +<author>by Michael Elkins <htmlurl url="mailto:me@cs.hmc.edu" name="<me@cs.hmc.edu>"> +<date>version @VERSION@ +<abstract> +``All mail clients suck. This one just sucks less.'' -me, circa 1995 +</abstract> + +<toc> + +<sect>Introduction +<p> +<bf/Mutt/ is a small but very powerful text-based MIME mail client. Mutt is +highly configurable, and is well suited to the mail power user with advanced +features like key bindings, keyboard macros, mail threading, regular +expression searches and a powerful pattern matching language for selecting +groups of messages. + +<sect1>Mutt Home Page +<p> +<htmlurl url="http://www.mutt.org/" +name="http://www.mutt.org/"> + +<sect1>Mailing Lists +<p> +To subscribe to one of the following mailing lists, send a message with the +word <em/subscribe/ in the body to +<tt/list-name/<em/-request/<tt/@mutt.org/. + +<itemize> +<item><htmlurl url="mailto:mutt-announce-request@mutt.org" +name="mutt-announce@mutt.org"> -- low traffic list for announcements +<item><htmlurl url="mailto:mutt-users-request@mutt.org" +name="mutt-users@mutt.org"> -- help, bug reports and feature requests +<item><htmlurl url="mailto:mutt-dev-request@mutt.org" name="mutt-dev@mutt.org"> -- development mailing list +</itemize> + +<bf/Note:/ all messages posted to <em/mutt-announce/ are automatically +forwarded to <em/mutt-users/, so you do not need to be subscribed to both +lists. + +<sect1>Software Distribution Sites +<p> +<itemize> +<item><htmlurl url="ftp://ftp.mutt.org/mutt/" +name="ftp://ftp.mutt.org/mutt/"> +</itemize> +<p> +For a list of mirror sites, please refer to <htmlurl +url="http://www.mutt.org/download.html" +name="http://www.mutt.org/download.html">. + +<sect1>IRC +<p> +Visit channel <em/#mutt/ on <htmlurl +url="http://www.openprojects.net" name="OpenProjects.Net +(www.openprojects.net)"> to chat with other people interested in Mutt. + +<sect1>USENET +<p> +See the newsgroup <htmlurl url="news:comp.mail.mutt" name="comp.mail.mutt">. + +<sect1>Copyright +<p> +Mutt is Copyright (C) 1996-2000 Michael R. Elkins +<me@cs.hmc.edu> and others + +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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + +<sect>Getting Started +<p> + +This section is intended as a brief overview of how to use Mutt. There are +many other features which are described elsewhere in the manual. There +is even more information available in the Mutt FAQ and various web +pages. See the <htmlurl url="http://www.mutt.org/mutt/" +name="Mutt Page"> for more details. + +The keybindings described in this section are the defaults as distributed. +Your local system administrator may have altered the defaults for your site. +You can always type ``?'' in any menu to display the current bindings. + +The first thing you need to do is invoke mutt, simply by typing mutt +at the command line. There are various command-line options, see +either the mutt man page or the <ref id="commandline" name="reference">. + +<sect1>Moving Around in Menus +<p> + +Information is presented in menus, very similar to ELM. Here is a table +showing the common keys used to navigate menus in Mutt. + +<tscreen><verb> +j or Down next-entry move to the next entry +k or Up previous-entry move to the previous entry +z or PageDn page-down go to the next page +Z or PageUp page-up go to the previous page += or Home first-entry jump to the first entry +* or End last-entry jump to the last entry +q quit exit the current menu +? help list all keybindings for the current menu +</verb></tscreen> + +<sect1>Editing Input Fields<label id="editing"> +<p> +Mutt has a builtin line editor which is used as the primary way to input +textual data such as email addresses or filenames. The keys used to move +around while editing are very similar to those of Emacs. + +<tscreen><verb> +^A or <Home> bol move to the start of the line +^B or <Left> backward-char move back one char +Esc B backward-word move back one word +^D or <Delete> delete-char delete the char under the cursor +^E or <End> eol move to the end of the line +^F or <Right> forward-char move forward one char +Esc F forward-word move forward one word +<Tab> complete complete filename or alias +^T complete-query complete address with query +^K kill-eol delete to the end of the line +ESC d kill-eow delete to the end ot the word +^W kill-word kill the word in front of the cursor +^U kill-line delete entire line +^V quote-char quote the next typed key +<Up> history-up recall previous string from history +<Down> history-down recall next string from history +<BackSpace> backspace kill the char in front of the cursor +Esc u upcase-word convert word to upper case +Esc l downcase-word convert word to lower case +Esc c capitalize-word capitalize the word +^G n/a abort +<Return> n/a finish editing +</verb></tscreen> + +You can remap the <em/editor/ functions using the <ref id="bind" name="bind"> +command. For example, to make the <em/Delete/ key delete the character in +front of the cursor rather than under, you could use + +<tt/bind editor <delete> backspace/ + +<sect1>Reading Mail - The Index and Pager +<p> + +Similar to many other mail clients, there are two modes in which mail is +read in Mutt. The first is the index of messages in the mailbox, which is +called the ``index'' in Mutt. The second mode is the display of the +message contents. This is called the ``pager.'' + +The next few sections describe the functions provided in each of these +modes. + +<sect2>The Message Index +<p> + +<tscreen><verb> +c change to a different mailbox +ESC c change to a folder in read-only mode +C copy the current message to another mailbox +ESC C decode a message and copy it to a folder +ESC s decode a message and save it to a folder +D delete messages matching a pattern +d delete the current message +F mark as important +l show messages matching a pattern +N mark message as new +o change the current sort method +O reverse sort the mailbox +q save changes and exit +s save-message +T tag messages matching a pattern +t toggle the tag on a message +ESC t toggle tag on entire message thread +U undelete messages matching a pattern +u undelete-message +v view-attachments +x abort changes and exit +<Return> display-message +<Tab> jump to the next new message +@ show the author's full e-mail address +$ save changes to mailbox +/ search +ESC / search-reverse +^L clear and redraw the screen +^T untag messages matching a pattern +</verb></tscreen> + +<sect3>Status Flags +<p> + +In addition to who sent the message and the subject, a short summary of +the disposition of each message is printed beside the message number. +Zero or more of the following ``flags'' may appear, which mean: + +<p> +<descrip> +<tag/D/ message is deleted (is marked for deletion) +<tag/d/ message have attachments marked for deletion +<tag/K/ contains a PGP public key +<tag/N/ message is new +<tag/O/ message is old +<tag/P/ message is PGP encrypted +<tag/r/ message has been replied to +<tag/S/ message is signed, and the signature is succesfully verified +<tag/s/ message is signed +<tag/!/ message is flagged +<tag/*/ message is tagged +</descrip> + +Some of the status flags can be turned on or off using +<itemize> +<item><bf/set-flag/ (default: w) +<item><bf/clear-flag/ (default: W) +</itemize> + +<p> +Furthermore, the following flags reflect who the message is addressed +to. They can be customized with the +<ref id="to_chars" name="$to_chars"> variable. + +<p> +<descrip> +<tag/+/ message is to you and you only +<tag/T/ message is to you, but also to or cc'ed to others +<tag/C/ message is cc'ed to you +<tag/F/ message is from you +<tag/L/ message is sent to a subscribed mailing list +</descrip> + +<sect2>The Pager +<p> + +By default, Mutt uses its builtin pager to display the body of messages. +The pager is very similar to the Unix program <em/less/ though not nearly as +featureful. + +<tscreen><verb> +<Return> go down one line +<Space> display the next page (or next message if at the end of a message) +- go back to the previous page +n search for next match +S skip beyond quoted text +T toggle display of quoted text +? show keybindings +/ search for a regular expression (pattern) +ESC / search backwards for a regular expression +\ toggle search pattern coloring +^ jump to the top of the message +</verb></tscreen> + +In addition, many of the functions from the <em/index/ are available in +the pager, such as <em/delete-message/ or <em/copy-message/ (this is one +advantage over using an external pager to view messages). + +Also, the internal pager supports a couple other advanced features. For +one, it will accept and translate the ``standard'' nroff sequences for +bold and underline. These sequences are a series of either the letter, +backspace (^H), the letter again for bold or the letter, backspace, +``_'' for denoting underline. Mutt will attempt to display these +in bold and underline respectively if your terminal supports them. If +not, you can use the bold and underline <ref id="color" name="color"> +objects to specify a color or mono attribute for them. + +Additionally, the internal pager supports the ANSI escape sequences for +character attributes. Mutt translates them into the correct color and +character settings. The sequences Mutt supports are: + +<p> +<tscreen><verb> +ESC [ Ps;Ps;Ps;...;Ps m +where Ps = +0 All Attributes Off +1 Bold on +4 Underline on +5 Blink on +7 Reverse video on +3x Foreground color is x +4x Background color is x + +Colors are +0 black +1 red +2 green +3 yellow +4 blue +5 magenta +6 cyan +7 white +</verb></tscreen> + +Mutt uses these attributes for handling text/enriched messages, and they +can also be used by an external <ref id="auto_view" name="autoview"> +script for highlighting purposes. <bf/Note:/ If you change the colors for your +display, for example by changing the color associated with color2 for +your xterm, then that color will be used instead of green. + +<sect2>Threaded Mode<label id="threads"> +<p> +When the mailbox is <ref id="sort" name="sorted"> by <em/threads/, there are +a few additional functions available in the <em/index/ and <em/pager/ modes. + +<tscreen><verb> +^D delete-thread delete all messages in the current thread +^U undelete-thread undelete all messages in the current thread +^N next-thread jump to the start of the next thread +^P previous-thread jump to the start of the previous thread +^R read-thread mark the current thread as read +ESC d delete-subthread delete all messages in the current subthread +ESC u undelete-subthread undelete all messages in the current subthread +ESC n next-subthread jump to the start of the next subthread +ESC p previous-subthread jump to the start of the previous subthread +ESC r read-subthread mark the current subthread as read +ESC t tag-thread toggle the tag on the current thread +ESC v collapse-thread toggle collapse for the current thread +ESC V collapse-all toggle collapse for all threads +P parent-message jump to parent message in thread +</verb></tscreen> + +<bf/Note:/ Collapsing a thread displays only the first message +in the thread and hides the others. This is useful when threads +contain so many messages that you can only see a handful of threads on +the screen. See %M in <ref id="index_format"name="$index_format">. +For example, you could use "%?M?(#%03M)&(%4l)?" in <ref +id="index_format"name="$index_format"> to optionally +display the number of hidden messages if the thread is collapsed. + +See also: <ref id="strict_threads" name="$strict_threads">. + +<sect2>Miscellaneous Functions +<p><bf/create-alias/<label id="create-alias"> (default: a)<newline> + +Creates a new alias based upon the current message (or prompts for a +new one). Once editing is complete, an <ref id="alias" name="alias"> +command is added to the file specified by the <ref id="alias_file" +name="$alias_file"> variable for future use. <bf/Note:/ +Specifying an <ref id="alias_file" name="$alias_file"> +does not add the aliases specified there-in, you must also <ref +id="source" name="source"> the file. + +<p><bf/check-traditional-pgp/<label id="check-traditional-pgp"> (default: ESC P)<newline> + +This function will search the current message for content signed or +encrypted with PGP the "traditional" way, that is, without proper +MIME tagging. Technically, this function will temporarily change +the MIME content types of the body parts containing PGP data; this +is similar to the <ref id="edit-type" name="edit-type"> function's +effect. + + +<p><bf/display-toggle-weed/<label id="display-toggle-weed"> (default: h)<newline> + +Toggles the weeding of message header fields specified by <ref id="ignore" +name="ignore"> commands. + +<p><bf/edit/<label id="edit"> (default: e)<newline> + +This command (available in the ``index'' and ``pager'') allows you to +edit the raw current message as it's present in the mail folder. +After you have finished editing, the changed message will be +appended to the current folder, and the original message will be +marked for deletion. + +<p><bf/edit-type/<label id="edit-type"><newline> +(default: ^E on the attachment menu, and in the pager and index menus; ^T on the +compose menu) + +This command is used to temporarily edit an attachment's content +type to fix, for instance, bogus character set parameters. When +invoked from the index or from the pager, you'll have the +opportunity to edit the top-level attachment's content type. On the +<ref id="attach_menu" name="attachment menu">, you can change any +attachment's content type. These changes are not persistent, and get +lost upon changing folders. + +Note that this command is also available on the <ref +id="compose_menu" name="compose menu">. There, it's used to +fine-tune the properties of attachments you are going to send. + +<p><bf/enter-command/<label id="enter-command"> (default: ``:'')<newline> + +This command is used to execute any command you would normally put in a +configuration file. A common use is to check the settings of variables, or +in conjunction with <ref id="macro" name="macros"> to change settings on the +fly. + +<p><bf/extract-keys/<label id="extract-keys"> (default: ^K)<newline> + +This command extracts PGP public keys from the current or tagged +message(s) and adds them to your PGP public key ring. + +<p><bf/forget-passphrase/<label id="forget-passphrase"> (default: +^F)<newline> + +This command wipes the passphrase(s) from memory. It is useful, if +you misspelled the passphrase. + +<p><bf/list-reply/<label id="list-reply"> (default: L)<newline> + +Reply to the current or tagged message(s) by extracting any addresses which +match the addresses given by the <ref id="lists" name="lists or subscribe"> +commands, but also honor any <tt/Mail-Followup-To/ header(s) if the +<ref id="honor_followup_to" name="$honor_followup_to"> +configuration variable is set. Using this when replying to messages posted +to mailing lists helps avoid duplicate copies being sent to the author of +the message you are replying to. + +<bf/pipe-message/<label id="pipe-message"> (default: |)<newline> + +Asks for an external Unix command and pipes the current or +tagged message(s) to it. The variables <ref id="pipe_decode" +name="$pipe_decode">, <ref id="pipe_split" +name="$pipe_split">, <ref id="pipe_sep" +name="$pipe_sep"> and <ref id="wait_key" +name="$wait_key"> control the exact behaviour of this +function. + +<bf/resend-message/<label id="resend-message"> (default: ESC e)<newline> + +With resend-message, mutt takes the current message as a template for a +new message. This function is best described as "recall from arbitrary +folders". It can conveniently be used to forward MIME messages while +preserving the original mail structure. Note that the amount of headers +included here depends on the value of the <ref id="weed" name="$weed"> +variable. + +This function is also available from the attachment menu. You can use this +to easily resend a message which was included with a bounce message +as a message/rfc822 body part. + +<bf/shell-escape/<label id="shell-escape"> (default: !)<newline> + +Asks for an external Unix command and executes it. The <ref +id="wait_key" name="$wait_key"> can be used to control +whether Mutt will wait for a key to be pressed when the command returns +(presumably to let the user read the output of the command), based on +the return status of the named command. + +<bf/toggle-quoted/<label id="toggle-quoted"> (default: T)<newline> + +The <em/pager/ uses the <ref id="quote_regexp" +name="$quote_regexp"> variable to detect quoted text when +displaying the body of the message. This function toggles the display +of the quoted material in the message. It is particularly useful when +are interested in just the response and there is a large amount of +quoted text in the way. + +<bf/skip-quoted/<label id="skip-quoted"> (default: S)<newline> + +This function will go to the next line of non-quoted text which come +after a line of quoted text in the internal pager. + +<sect1>Sending Mail +<p> + +The following bindings are available in the <em/index/ for sending +messages. + +<tscreen><verb> +m compose compose a new message +r reply reply to sender +g group-reply reply to all recipients +L list-reply reply to mailing list address +f forward forward message +b bounce bounce (remail) message +ESC k mail-key mail a PGP public key to someone +</verb></tscreen> + +Bouncing a message sends the message as is to the recipient you +specify. Forwarding a message allows you to add comments or +modify the message you are forwarding. These items are discussed +in greater detail in the next chapter <ref id="forwarding_mail" +name="``Forwarding and Bouncing Mail''">. + +Mutt will then enter the <em/compose/ menu and prompt you for the +recipients to place on the ``To:'' header field. Next, it will ask +you for the ``Subject:'' field for the message, providing a default if +you are replying to or forwarding a message. See also <ref id="askcc" +name="$askcc">, <ref id="askbcc" name="$askbcc">, <ref +id="autoedit" name="$autoedit">, <ref id="bounce" +name="$bounce">, and <ref id="fast_reply" +name="$fast_reply"> for changing how Mutt asks these +questions. + +Mutt will then automatically start your <ref id="editor" +name="$editor"> on the message body. If the <ref id="edit_headers" +name="$edit_headers"> variable is set, the headers will be at +the top of the message in your editor. Any messages you are replying +to will be added in sort order to the message, with appropriate <ref +id="attribution" name="$attribution">, <ref id="indent_string" +name="$indent_string"> and <ref id="post_indent_string" +name="$post_indent_string">. When forwarding a +message, if the <ref id="mime_forward" name="$mime_forward"> +variable is unset, a copy of the forwarded message will be included. If +you have specified a <ref id="signature" name="$signature">, it +will be appended to the message. + +Once you have finished editing the body of your mail message, you are +returned to the <em/compose/ menu. The following options are available: + +<tscreen><verb> +a attach-file attach a file +A attach-message attach message(s) to the message +ESC k attach-key attach a PGP public key +d edit-description edit description on attachment +D detach-file detach a file +t edit-to edit the To field +ESC f edit-from edit the From field +r edit-reply-to edit the Reply-To field +c edit-cc edit the Cc field +b edit-bcc edit the Bcc field +y send-message send the message +s edit-subject edit the Subject +S smime-menu select S/MIME options +f edit-fcc specify an ``Fcc'' mailbox +p pgp-menu select PGP options +P postpone-message postpone this message until later +q quit quit (abort) sending the message +w write-fcc write the message to a folder +i ispell check spelling (if available on your system) +^F forget-passphrase wipe passphrase(s) from memory +</verb></tscreen> + +<bf/Note:/ The attach-message function will prompt you for a folder to +attach messages from. You can now tag messages in that folder and they +will be attached to the message you are sending. Note that certain +operations like composing a new mail, replying, forwarding, etc. are +not permitted when you are in that folder. The %r in <ref +id="status_format" name="$status_format"> will change to +a 'A' to indicate that you are in attach-message mode. + +<sect2>Editing the message header +<p> +When editing the header of your outgoing message, there are a couple of +special features available. + +If you specify<newline> +<tt/Fcc:/ <em/filename/<newline> +Mutt will pick up <em/filename/ +just as if you had used the <em/edit-fcc/ function in the <em/compose/ menu. + +You can also attach files to your message by specifying<newline> +<tt/Attach:/ <em/filename/ [ <em/description/ ]<newline> +where <em/filename/ is the file to attach and <em/description/ is an +optional string to use as the description of the attached file. + +When replying to messages, if you remove the <em/In-Reply-To:/ field from +the header field, Mutt will not generate a <em/References:/ field, which +allows you to create a new message thread. + +Also see <ref id="edit_headers" name="edit_headers">. + +<sect2>Using Mutt with PGP + +<p> +If you want to use PGP, you can specify + +<tt/Pgp:/ [ <tt/E/ | <tt/S/ | <tt/S<id/> ] <newline> + +``E'' encrypts, ``S'' signs and +``S<id>'' signs with the given key, setting <ref +id="pgp_sign_as" name="$pgp_sign_as"> permanently. + +If you have told mutt to PGP encrypt a message, it will guide you +through a key selection process when you try to send the message. +Mutt will not ask you any questions about keys which have a +certified user ID matching one of the message recipients' mail +addresses. However, there may be situations in which there are +several keys, weakly certified user ID fields, or where no matching +keys can be found. + +In these cases, you are dropped into a menu with a list of keys from +which you can select one. When you quit this menu, or mutt can't +find any matching keys, you are prompted for a user ID. You can, as +usually, abort this prompt using <tt/^G/. When you do so, mutt will +return to the compose screen. + +Once you have successfully finished the key selection, the message +will be encrypted using the selected public keys, and sent out. + +Most fields of the entries in the key selection menu (see also <ref +id="pgp_entry_format" name="$pgp_entry_format">) +have obvious meanings. But some explanations on the capabilities, flags, +and validity fields are in order. + +The flags sequence (%f) will expand to one of the following flags: +<tscreen><verb> +R The key has been revoked and can't be used. +X The key is expired and can't be used. +d You have marked the key as disabled. +c There are unknown critical self-signature + packets. +</verb></tscreen> + +The capabilities field (%c) expands to a two-character sequence +representing a key's capabilities. The first character gives +the key's encryption capabilities: A minus sign (<bf/-/) means +that the key cannot be used for encryption. A dot (<bf/./) means that +it's marked as a signature key in one of the user IDs, but may +also be used for encryption. The letter <bf/e/ indicates that +this key can be used for encryption. + +The second character indicates the key's signing capabilities. Once +again, a ``<bf/-/'' implies ``not for signing'', ``<bf/./'' implies +that the key is marked as an encryption key in one of the user-ids, and +``<bf/s/'' denotes a key which can be used for signing. + +Finally, the validity field (%t) indicates how well-certified a user-id +is. A question mark (<bf/?/) indicates undefined validity, a minus +character (<bf/-/) marks an untrusted association, a space character +means a partially trusted association, and a plus character (<bf/+/) +indicates complete validity. + +<sect2>Sending anonymous messages via mixmaster. + +<p> +You may also have configured mutt to co-operate with Mixmaster, an +anonymous remailer. Mixmaster permits you to send your messages +anonymously using a chain of remailers. Mixmaster support in mutt is for +mixmaster version 2.04 (beta 45 appears to be the latest) and 2.03. +It does not support earlier versions or the later so-called version 3 betas, +of which the latest appears to be called 2.9b23. + +To use it, you'll have to obey certain restrictions. Most +important, you cannot use the <tt/Cc/ and <tt/Bcc/ headers. To tell +Mutt to use mixmaster, you have to select a remailer chain, using +the mix function on the compose menu. + +The chain selection screen is divided into two parts. In the +(larger) upper part, you get a list of remailers you may use. In +the lower part, you see the currently selected chain of remailers. + +You can navigate in the chain using the <tt/chain-prev/ and +<tt/chain-next/ functions, which are by default bound to the left +and right arrows and to the <tt/h/ and <tt/l/ keys (think vi +keyboard bindings). To insert a remailer at the current chain +position, use the <tt/insert/ function. To append a remailer behind +the current chain position, use <tt/select-entry/ or <tt/append/. +You can also delete entries from the chain, using the corresponding +function. Finally, to abandon your changes, leave the menu, or +<tt/accept/ them pressing (by default) the <tt/Return/ key. + +Note that different remailers do have different capabilities, +indicated in the %c entry of the remailer menu lines (see +<ref id="mix_entry_format" +name="$mix_entry_format">). Most important is +the ``middleman'' capability, indicated by a capital ``M'': This +means that the remailer in question cannot be used as the final +element of a chain, but will only forward messages to other +mixmaster remailers. For details on the other capabilities, please +have a look at the mixmaster documentation. + +<sect1>Forwarding and Bouncing Mail<label id="forwarding_mail"> +<p> + +Bouncing and forwarding let you send an existing message to recipients +that you specify. Bouncing a message uses the <ref id="sendmail" +name="sendmail"> command to send a copy to alternative addresses as if +they were the message's original recipients. Forwarding a message, on +the other hand, allows you to modify the message before it is resent +(for example, by adding your own comments). + +The following keys are bound by default: + +<tscreen><verb> +f forward forward message +b bounce bounce (remail) message +</verb></tscreen> + +Forwarding can be done by including the original message in the new +message's body (surrounded by indicating lines) or including it as a MIME +attachment, depending on the value of the <ref id="mime_forward" +name="$mime_forward"> variable. Decoding of attachments, +like in the pager, can be controlled by the <ref id="forward_decode" +name="$forward_decode"> and <ref id="mime_forward_decode" +name="$mime_forward_decode"> variables, +respectively. The desired forwarding format may depend on the content, +therefore <em/$mime_forward/ is a quadoption which, for +example, can be set to ``ask-no''. + +The inclusion of headers is controlled by the current setting of the +<ref id="weed" name="$weed"> variable, unless <ref +id="mime_forward" name="mime_forward"> is set. + +Editing the message to forward follows the same procedure as sending or +replying to a message does. + +<sect1>Postponing Mail<label id="postponing_mail"> +<p> + +At times it is desirable to delay sending a message that you have +already begun to compose. When the <em/postpone-message/ function is +used in the <em/compose/ menu, the body of your message and attachments +are stored in the mailbox specified by the <ref id="postponed" +name="$postponed"> variable. This means that you can recall the +message even if you exit Mutt and then restart it at a later time. + +Once a message is postponed, there are several ways to resume it. From the +command line you can use the ``-p'' option, or if you <em/compose/ a new +message from the <em/index/ or <em/pager/ you will be prompted if postponed +messages exist. If multiple messages are currently postponed, the +<em/postponed/ menu will pop up and you can select which message you would +like to resume. + +<bf/Note:/ If you postpone a reply to a message, the reply setting of +the message is only updated when you actually finish the message and +send it. Also, you must be in the same folder with the message you +replied to for the status of the message to be updated. + +See also the <ref id="postpone" name="$postpone"> quad-option. + +<sect1>Reading news via NNTP<label id="reading_news"> +<p> + +If compiled with ``--enable-nntp'' option, Mutt can read news from newsserver +via NNTP. You can open a newsgroup with function ``change-newsgroup'' +(default: i). Default newsserver can be obtained from <em/NNTPSERVER/ +environment variable. Like other news readers, info about subscribed +newsgroups is saved in file by <ref id="newsrc" name="$newsrc"> +variable. Article headers are cached and can be loaded from file when +newsgroup entered instead loading from newsserver. + +<sect>Configuration +<p> + +While the default configuration (or ``preferences'') make Mutt +usable right out of the box, it is often desirable to tailor Mutt to +suit your own tastes. When Mutt is first invoked, it will attempt to +read the ``system'' configuration file (defaults set by your local +system administrator), unless the ``-n'' <ref id="commandline" +name="command line"> option is specified. This file is typically +<tt>/usr/local/share/mutt/Muttrc</tt> or <tt>/etc/Muttrc</tt>. Mutt +will next look for a file named <tt>.muttrc</tt> in your home +directory. If this file does not exist and your home directory has +a subdirectory named <tt/.mutt/, mutt try to load a file named +<tt>.mutt/muttrc</tt>. + +<tt>.muttrc</tt> is the file where you will usually place your <ref + id="commands" name="commands"> to configure Mutt. + +In addition, mutt supports version specific configuration files that are +parsed instead of the default files as explained above. For instance, if +your system has a <tt/Muttrc-0.88/ file in the system configuration +directory, and you are running version 0.88 of mutt, this file will be +sourced instead of the <tt/Muttrc/ file. The same is true of the user +configuration file, if you have a file <tt/.muttrc-0.88.6/ in your home +directory, when you run mutt version 0.88.6, it will source this file +instead of the default <tt/.muttrc/ file. The version number is the +same which is visible using the ``-v'' <ref id="commandline" +name="command line"> switch or using the <tt/show-version/ key (default: +V) from the index menu. + +<sect1>Syntax of Initialization Files<label id="muttrc-syntax"> +<p> + +An initialization file consists of a series of <ref id="commands" +name="commands">. Each line of the file may contain one or more commands. +When multiple commands are used, they must be separated by a semicolon (;). +<tscreen><verb> +set realname='Mutt user' ; ignore x- +</verb></tscreen> +The hash mark, or pound sign +(``#''), is used as a ``comment'' character. You can use it to +annotate your initialization file. All text after the comment character +to the end of the line is ignored. For example, + +<tscreen><verb> +my_hdr X-Disclaimer: Why are you listening to me? # This is a comment +</verb></tscreen> + +Single quotes (') and double quotes (&dquot;) can be used to quote strings +which contain spaces or other special characters. The difference between +the two types of quotes is similar to that of many popular shell programs, +namely that a single quote is used to specify a literal string (one that is +not interpreted for shell variables or quoting with a backslash [see +next paragraph]), while double quotes indicate a string for which +should be evaluated. For example, backtics are evaluated inside of double +quotes, but <bf/not/ for single quotes. + +\ quotes the next character, just as in shells such as bash and zsh. +For example, if want to put quotes ``&dquot;'' inside of a string, you can use +``\'' to force the next character to be a literal instead of interpreted +character. +<tscreen><verb> +set realname="Michael \"MuttDude\" Elkins" +</verb></tscreen> + +``\\'' means to insert a literal ``\'' into the line. +``\n'' and ``\r'' have their usual C meanings of linefeed and +carriage-return, respectively. + +A \ at the end of a line can be used to split commands over +multiple lines, provided that the split points don't appear in the +middle of command names. + +It is also possible to substitute the output of a Unix command in an +initialization file. This is accomplished by enclosing the command in +backquotes (``). For example, +<tscreen><verb> +my_hdr X-Operating-System: `uname -a` +</verb></tscreen> +The output of the Unix command ``uname -a'' will be substituted before the +line is parsed. Note that since initialization files are line oriented, only +the first line of output from the Unix command will be substituted. + +UNIX environments can be accessed like the way it is done in shells like +sh and bash: Prepend the name of the environment by a ``$''. For +example, +<tscreen><verb> +set record=+sent_on_$HOSTNAME +</verb></tscreen> + +The commands understood by mutt are explained in the next paragraphs. +For a complete list, see the <ref id="commands" name="command reference">. + +<sect1>Defining/Using aliases<label id="alias"> +<p> + +Usage: <tt/alias/ <em/key/ <em/address/ [ , <em/address/, ... ] + +It's usually very cumbersome to remember or type out the address of someone +you are communicating with. Mutt allows you to create ``aliases'' which map +a short string to a full address. + +<bf/Note:/ if you want to create an alias for a group (by specifying more than +one address), you <bf/must/ separate the addresses with a comma (``,''). + +To remove an alias or aliases (``*'' means all aliases): + +<tt/unalias/ [ * | <em/key/ <em/.../ ] + +<tscreen><verb> +alias muttdude me@cs.hmc.edu (Michael Elkins) +alias theguys manny, moe, jack +</verb></tscreen> + +Unlike other mailers, Mutt doesn't require aliases to be defined +in a special file. The <tt/alias/ command can appear anywhere in +a configuration file, as long as this file is <ref id="source" +name="sourced">. Consequently, you can have multiple alias files, or +you can have all aliases defined in your muttrc. + +On the other hand, the <ref id="create-alias" name="create-alias"> +function can use only one file, the one pointed to by the <ref +id="alias_file" name="$alias_file"> variable (which is +<tt>˜/.muttrc</tt> by default). This file is not special either, +in the sense that Mutt will happily append aliases to any file, but in +order for the new aliases to take effect you need to explicitly <ref +id="source" name="source"> this file too. + +For example: + +<tscreen><verb> +source /usr/local/share/Mutt.aliases +source ~/.mail_aliases +set alias_file=~/.mail_aliases +</verb></tscreen> + +To use aliases, you merely use the alias at any place in mutt where mutt +prompts for addresses, such as the <em/To:/ or <em/Cc:/ prompt. You can +also enter aliases in your editor at the appropriate headers if you have the +<ref id="edit_headers" name="$edit_headers"> variable set. + +In addition, at the various address prompts, you can use the tab character +to expand a partial alias to the full alias. If there are multiple matches, +mutt will bring up a menu with the matching aliases. In order to be +presented with the full list of aliases, you must hit tab with out a partial +alias, such as at the beginning of the prompt or after a comma denoting +multiple addresses. + +In the alias menu, you can select as many aliases as you want with the +<em/select-entry/ key (default: RET), and use the <em/exit/ key +(default: q) to return to the address prompt. + +<sect1>Changing the default key bindings<label id="bind"> +<p> +Usage: <tt/bind/ <em/map/ <em/key/ <em/function/ + +This command allows you to change the default key bindings (operation +invoked when pressing a key). + +<em/map/ specifies in which menu the binding belongs. The currently +defined maps are: + +<descrip> +<tag/generic/ +This is not a real menu, but is used as a fallback for all of the other +menus except for the pager and editor modes. If a key is not defined in +another menu, Mutt will look for a binding to use in this menu. This allows +you to bind a key to a certain function in multiple menus instead of having +multiple bind statements to accomplish the same task. +<tag/alias/ +The alias menu is the list of your personal aliases as defined in your +muttrc. It is the mapping from a short alias name to the full email +address(es) of the recipient(s). +<tag/attach/ +The attachment menu is used to access the attachments on received messages. +<tag/browser/ +The browser is used for both browsing the local directory structure, and for +listing all of your incoming mailboxes. +<tag/editor/ +The editor is the line-based editor the user enters text data. +<tag/index/ +The index is the list of messages contained in a mailbox. +<tag/compose/ +The compose menu is the screen used when sending a new message. +<tag/pager/ +The pager is the mode used to display message/attachment data, and help +listings. +<tag/pgp/ +The pgp menu is used to select the OpenPGP keys used for encrypting outgoing +messages. +<tag/postpone/ +The postpone menu is similar to the index menu, except is used when +recalling a message the user was composing, but saved until later. +</descrip> + +<em/key/ is the key (or key sequence) you wish to bind. To specify a +control character, use the sequence <em/\Cx/, where <em/x/ is the +letter of the control character (for example, to specify control-A use +``\Ca''). Note that the case of <em/x/ as well as <em/\C/ is +ignored, so that <em/\CA, \Ca, \cA/ and <em/\ca/ are all +equivalent. An alternative form is to specify the key as a three digit +octal number prefixed with a ``\'' (for example <em/\177/ is +equivalent to <em/\c?/). + +In addition, <em/key/ may consist of: + +<tscreen><verb> +\t tab +<tab> tab +\r carriage return +\n newline +\e escape +<esc> escape +<up> up arrow +<down> down arrow +<left> left arrow +<right> right arrow +<pageup> Page Up +<pagedown> Page Down +<backspace> Backspace +<delete> Delete +<insert> Insert +<enter> Enter +<return> Return +<home> Home +<end> End +<space> Space bar +<f1> function key 1 +<f10> function key 10 +</verb></tscreen> + +<em/key/ does not need to be enclosed in quotes unless it contains a +space (`` ''). + +<em/function/ specifies which action to take when <em/key/ is pressed. +For a complete list of functions, see the <ref id="functions" +name="reference">. The special function <tt/noop/ unbinds the specified key +sequence. + +<sect1>Defining aliases for character sets <label id="charset-hook"> +<p> +Usage: <tt/charset-hook/ <em/alias/ <em/charset/<newline> +Usage: <tt/iconv-hook/ <em/charset/ <em/local-charset/ + +The <tt/charset-hook/ command defines an alias for a character set. +This is useful to properly display messages which are tagged with a +character set name not known to mutt. + +The <tt/iconv-hook/ command defines a system-specific name for a +character set. This is helpful when your systems character +conversion library insists on using strange, system-specific names +for character sets. + + +<sect1>Setting variables based upon mailbox<label id="folder-hook"> +<p> +Usage: <tt/folder-hook/ [!]<em/regexp/ <em/command/ + +It is often desirable to change settings based on which mailbox you are +reading. The folder-hook command provides a method by which you can execute +any configuration command. <em/regexp/ is a regular expression specifying +in which mailboxes to execute <em/command/ before loading. If a mailbox +matches multiple folder-hook's, they are executed in the order given in the +muttrc. + +<bf/Note:/ if you use the ``!'' shortcut for <ref id="spoolfile" +name="$spoolfile"> at the beginning of the pattern, you must place it +inside of double or single quotes in order to distinguish it from the +logical <em/not/ operator for the expression. + +Note that the settings are <em/not/ restored when you leave the mailbox. +For example, a command action to perform is to change the sorting method +based upon the mailbox being read: + +<tscreen><verb> +folder-hook mutt set sort=threads +</verb></tscreen> + +However, the sorting method is not restored to its previous value when +reading a different mailbox. To specify a <em/default/ command, use the +pattern ``.'': + +<p> +<tscreen><verb> +folder-hook . set sort=date-sent +</verb></tscreen> + +<sect1>Keyboard macros<label id="macro"> +<p> +Usage: <tt/macro/ <em/menu/ <em/key/ <em/sequence/ [ <em/description/ ] + +Macros are useful when you would like a single key to perform a series of +actions. When you press <em/key/ in menu <em/menu/, Mutt will behave as if +you had typed <em/sequence/. So if you have a common sequence of commands +you type, you can create a macro to execute those commands with a single +key. + +<em/key/ and <em/sequence/ are expanded by the same rules as the <ref +id="bind" name="key bindings">. There are some additions however. The +first is that control characters in <em/sequence/ can also be specified +as <em/ˆx/. In order to get a caret (`ˆ'') you need to use +<em/ˆˆ/. Secondly, to specify a certain key such as <em/up/ +or to invoke a function directly, you can use the format +<em/<key name>/ and <em/<function name>/. For a listing of key +names see the section on <ref id="bind" name="key bindings">. Functions +are listed in the <ref id="functions" name="function reference">. + +The advantage with using function names directly is that the macros will +work regardless of the current key bindings, so they are not dependent on +the user having particular key definitions. This makes them more robust +and portable, and also facilitates defining of macros in files used by more +than one user (eg. the system Muttrc). + +Optionally you can specify a descriptive text after <em/sequence/, +which is shown in the help screens. + +<bf/Note:/ Macro definitions (if any) listed in the help screen(s), are +silently truncated at the screen width, and are not wrapped. + +<sect1>Using color and mono video attributes<label id="color"> +<p> +Usage: <tt/color/ <em/object/ <em/foreground/ <em/background/ [ <em/regexp/ ]<newline> +Usage: <tt/color/ index <em/foreground/ <em/background/ <em/pattern/<newline> +Usage: <tt/uncolor/ index <em/pattern/ [ <em/pattern/ ... ]<newline> + +If your terminal supports color, you can spice up Mutt by creating your own +color scheme. To define the color of an object (type of information), you +must specify both a foreground color <bf/and/ a background color (it is not +possible to only specify one or the other). + +<em/object/ can be one of: + +<itemize> +<item>attachment +<item>body (match <em/regexp/ in the body of messages) +<item>bold (hiliting bold patterns in the body of messages) +<item>error (error messages printed by Mutt) +<item>header (match <em/regexp/ in the message header) +<item>hdrdefault (default color of the message header in the pager) +<item>index (match <em/pattern/ in the message index) +<item>indicator (arrow or bar used to indicate the current item in a menu) +<item>markers (the ``+'' markers at the beginning of wrapped lines in the pager) +<item>message (informational messages) +<item>normal +<item>quoted (text matching <ref id="quote_regexp" +name="$quote_regexp"> in the body of a message) +<item>quoted1, quoted2, ..., quoted<bf/N/ (higher levels of quoting) +<item>search (hiliting of words in the pager) +<item>signature +<item>status (mode lines used to display info about the mailbox or message) +<item>tilde (the ``˜'' used to pad blank lines in the pager) +<item>tree (thread tree drawn in the message index and attachment menu) +<item>underline (hiliting underlined patterns in the body of messages) +</itemize> + +<em/foreground/ and <em/background/ can be one of the following: + +<itemize> +<item>white +<item>black +<item>green +<item>magenta +<item>blue +<item>cyan +<item>yellow +<item>red +<item>default +<item>color<em/x/ +</itemize> + +<em/foreground/ can optionally be prefixed with the keyword <tt/bright/ to make +the foreground color boldfaced (e.g., <tt/brightred/). + +If your terminal supports it, the special keyword <em/default/ can be +used as a transparent color. The value <em/brightdefault/ is also valid. +If Mutt is linked against the <em/S-Lang/ library, you also need to set +the <em/COLORFGBG/ environment variable to the default colors of your +terminal for this to work; for example (for Bourne-like shells): + +<tscreen><verb> +set COLORFGBG="green;black" +export COLORFGBG +</verb></tscreen> + +<bf/Note:/ The <em/S-Lang/ library requires you to use the <em/lightgray/ +and <em/brown/ keywords instead of <em/white/ and <em/yellow/ when +setting this variable. + +<bf/Note:/ The uncolor command can be applied to the index object only. It +removes entries from the list. You <bf/must/ specify the same pattern +specified in the color command for it to be removed. The pattern ``*'' is +a special token which means to clear the color index list of all entries. + +Mutt also recognizes the keywords <em/color0/, <em/color1/, …, +<em/color/<bf/N-1/ (<bf/N/ being the number of colors supported +by your terminal). This is useful when you remap the colors for your +display (for example by changing the color associated with <em/color2/ +for your xterm), since color names may then lose their normal meaning. + +If your terminal does not support color, it is still possible change the video +attributes through the use of the ``mono'' command: + +Usage: <tt/mono/ <em/<object> <attribute>/ [ <em/regexp/ ]<newline> +Usage: <tt/mono/ index <em/attribute/ <em/pattern/<newline> +Usage: <tt/unmono/ index <em/pattern/ [ <em/pattern/ ... ]<newline> + +where <em/attribute/ is one of the following: + +<itemize> +<item>none +<item>bold +<item>underline +<item>reverse +<item>standout +</itemize> + +<sect1>Ignoring (weeding) unwanted message headers<label id="ignore"> +<p> +Usage: <tt/[un]ignore/ <em/pattern/ [ <em/pattern/ ... ] + +Messages often have many header fields added by automatic processing systems, +or which may not seem useful to display on the screen. This command allows +you to specify header fields which you don't normally want to see. + +You do not need to specify the full header field name. For example, +``ignore content-'' will ignore all header fields that begin with the pattern +``content-''. ``ignore *'' will ignore all headers. + +To remove a previously added token from the list, use the ``unignore'' command. +The ``unignore'' command will make Mutt display headers with the given pattern. +For example, if you do ``ignore x-'' it is possible to ``unignore x-mailer''. + +``unignore *'' will remove all tokens from the ignore list. + +For example: +<tscreen><verb> +# Sven's draconian header weeding +ignore * +unignore from date subject to cc +unignore organization organisation x-mailer: x-newsreader: x-mailing-list: +unignore posted-to: +</verb></tscreen> + +<sect1>Alternative addresses<label id="alternates"> +<p> +Usage: <tt/[un]alternates/ <em/regexp/ [ <em/regexp/ ... ]<newline> + +With various functions, mutt will treat messages differently, +depending on whether you sent them or whether you received them from +someone else. For instance, when replying to a message that you +sent to a different party, mutt will automatically suggest to send +the response to the original message's recipients -- responding to +yourself won't make much sense in many cases. (See <ref +id="reply_to" name="$reply_to">.) + +Many users receive e-mail under a number of different addresses. To +fully use mutt's features here, the program must be able to +recognize what e-mail addresses you receive mail under. That's the +purpose of the <tt/alternates/ command: It takes a list of regular +expressions, each of which can identify an address under which you +receive e-mail. + +To remove a regular expression from this list, use the +<tt/unalternates/ command. + +<sect1>Mailing lists<label id="lists"> +<p> +Usage: <tt/[un]lists/ <em/regexp/ [ <em/regexp/ ... ]<newline> +Usage: <tt/[un]subscribe/ <em/regexp/ [ <em/regexp/ ... ] + +Mutt has a few nice features for <ref id="using_lists" name="handling +mailing lists">. In order to take advantage of them, you must +specify which addresses belong to mailing lists, and which mailing +lists you are subscribed to. Once you have done this, the <ref +id="list-reply" name="list-reply"> function will work for all known lists. +Additionally, when you send a message to a subscribed list, mutt will +add a Mail-Followup-To header to tell other users' mail user agents +not to send copies of replies to your personal address. Note that +the Mail-Followup-To header is a non-standard extension which is not +supported by all mail user agents. Adding it is not bullet-proof against +receiving personal CCs of list messages. Also note that the generation +of the Mail-Followup-To header is controlled by the <ref id="followup_to" +name="$followup_to"> configuration variable. + +More precisely, Mutt maintains lists of patterns for the addresses +of known and subscribed mailing lists. Every subscribed mailing +list is known. To mark a mailing list as known, use the ``lists'' +command. To mark it as subscribed, use ``subscribe''. + +You can use regular expressions with both commands. To mark all +messages sent to a specific bug report's address on mutt's bug +tracking system as list mail, for instance, you could say +``subscribe [0-9]*@bugs.guug.de''. Often, it's sufficient to just +give a portion of the list's e-mail address. + +Specify as much of the address as you need to to remove ambiguity. For +example, if you've subscribed to the Mutt mailing list, you will receive mail +addresssed to <em/mutt-users@mutt.org/. So, to tell Mutt that this is a +mailing list, you could add ``lists mutt-users'' to your +initialization file. To tell mutt that you are subscribed to it, +add ``subscribe mutt-users'' to your initialization file instead. +If you also happen to get mail from someone whose address is +<em/mutt-users@example.com/, you could use ``lists mutt-users@mutt.org'' +or ``subscribe mutt-users@mutt.org'' to +match only mail from the actual list. + +The ``unlists'' command is used to remove a token from the list of +known and subscribed mailing-lists. Use ``unlists *'' to remove all +tokens. + +To remove a mailing list from the list of subscribed mailing lists, +but keep it on the list of known mailing lists, use ``unsubscribe''. + +<sect1>Using Multiple spool mailboxes<label id="mbox-hook"> +<p> +Usage: <tt/mbox-hook/ [!]<em/pattern/ <em/mailbox/ + +This command is used to move read messages from a specified mailbox to a +different mailbox automatically when you quit or change folders. +<em/pattern/ is a regular expression specifying the mailbox to treat as a +``spool'' mailbox and <em/mailbox/ specifies where mail should be saved when +read. + +Unlike some of the other <em/hook/ commands, only the <em/first/ matching +pattern is used (it is not possible to save read mail in more than a single +mailbox). + +<sect1>Defining mailboxes which receive mail<label id="mailboxes"> +<p> +Usage: <tt/[un]mailboxes/ [!]<em/filename/ [ <em/filename/ ... ] + +This command specifies folders which can receive mail and +which will be checked for new messages. By default, the +main menu status bar displays how many of these folders have +new messages. +<p> +When changing folders, pressing <em/space/ will cycle +through folders with new mail. +<p> +Pressing TAB in the directory browser will bring up a menu showing the files +specified by the <tt/mailboxes/ command, and indicate which contain new +messages. Mutt will automatically enter this mode when invoked from the +command line with the <tt/-y/ option. + +The ``unmailboxes'' command is used to remove a token from the list +of folders which receive mail. Use ``unmailboxes *'' to remove all +tokens. + +<p> +<bf/Note:/ new mail is detected by comparing the last modification time to +the last access time. Utilities like <tt/biff/ or <tt/frm/ or any other +program which accesses the mailbox might cause Mutt to never detect new mail +for that mailbox if they do not properly reset the access time. Backup +tools are another common reason for updated access times. +<p> + +<bf/Note:/ the filenames in the <tt/mailboxes/ command are resolved when +the command is executed, so if these names contain <ref id="shortcuts" +name="shortcut characters"> (such as ``='' and ``!''), any variable +definition that affect these characters (like <ref id="folder" +name="$folder"> and <ref id="spoolfile" name="$spoolfile">) +should be executed before the <tt/mailboxes/ command. + +<sect1>User defined headers<label id="my_hdr"> +<p> +Usage:<newline> +<tt/my_hdr/ <em/string/<newline> +<tt/unmy_hdr/ <em/field/ [ <em/field/ ... ] + +The ``my_hdr'' command allows you to create your own header +fields which will be added to every message you send. + +For example, if you would like to add an ``Organization:'' header field to +all of your outgoing messages, you can put the command + +<quote> +my_hdr Organization: A Really Big Company, Anytown, USA +</quote> + +in your <tt/.muttrc/. + +<bf/Note:/ space characters are <em/not/ allowed between the keyword and +the colon (``:''). The standard for electronic mail (RFC822) says that +space is illegal there, so Mutt enforces the rule. + +If you would like to add a header field to a single message, you should +either set the <ref id="edit_headers" name="edit_headers"> variable, +or use the <em/edit-headers/ function (default: ``E'') in the send-menu so +that you can edit the header of your message along with the body. + +To remove user defined header fields, use the ``unmy_hdr'' +command. You may specify an asterisk (``*'') to remove all header +fields, or the fields to remove. For example, to remove all ``To'' and +``Cc'' header fields, you could use: + +<quote> +unmy_hdr to cc +</quote> + +<sect1>Defining the order of headers when viewing messages<label id="hdr_order"> +<p> +Usage: <tt/hdr_order/ <em/header1/ <em/header2/ <em/header3/ + +With this command, you can specify an order in which mutt will attempt +to present headers to you when viewing messages. + +``unhdr_order *'' will clear all previous headers from the order list, +thus removing the header order effects set by the system-wide startup +file. + +<tscreen><verb> +hdr_order From Date: From: To: Cc: Subject: +</verb></tscreen> + +<sect1>Specify default save filename<label id="save-hook"> +<p> +Usage: <tt/save-hook/ [!]<em/pattern/ <em/filename/ + +This command is used to override the default filename used when saving +messages. <em/filename/ will be used as the default filename if the message is +<em/From:/ an address matching <em/regexp/ or if you are the author and the +message is addressed <em/to:/ something matching <em/regexp/. + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/. + +Examples: + +<tscreen><verb> +save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins +save-hook aol\\.com$ +spam +</verb></tscreen> + +Also see the <ref id="fcc-save-hook" name="fcc-save-hook"> command. + +<sect1>Specify default Fcc: mailbox when composing<label id="fcc-hook"> +<p> +Usage: <tt/fcc-hook/ [!]<em/pattern/ <em/mailbox/ + +This command is used to save outgoing mail in a mailbox other than +<ref id="record" name="$record">. Mutt searches the initial list of +message recipients for the first matching <em/regexp/ and uses <em/mailbox/ +as the default Fcc: mailbox. If no match is found the message will be saved +to <ref id="record" name="$record"> mailbox. + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/. + +Example: <tt/fcc-hook aol.com$ +spammers/ + +The above will save a copy of all messages going to the aol.com domain to +the `+spammers' mailbox by default. Also see the <ref id="fcc-save-hook" +name="fcc-save-hook"> command. + +<sect1>Specify default save filename and default Fcc: mailbox at once<label +id="fcc-save-hook"> +<p> +Usage: <tt/fcc-save-hook/ [!]<em/pattern/ <em/mailbox/ + +This command is a shortcut, equivalent to doing both a <ref id="fcc-hook" name="fcc-hook"> +and a <ref id="save-hook" name="save-hook"> with its arguments. + +<sect1>Change settings based upon message recipients<label id="send-hook"><label id="reply-hook"> +<p> +Usage: <tt/reply-hook/ [!]<em/pattern/ <em/command/<newline> +Usage: <tt/send-hook/ [!]<em/pattern/ <em/command/ + +These commands can be used to execute arbitrary configuration commands based +upon recipients of the message. <em/pattern/ is a regular expression +matching the desired address. <em/command/ is executed when <em/regexp/ +matches recipients of the message. + +<tt/reply-hook/ is matched against the message you are <em/replying/ +<bf/to/, instead of the message you are <em/sending/. <tt/send-hook/ is +matched against all messages, both <em/new/ and <em/replies/. <bf/Note:/ +<tt/reply-hook/s are matched <bf/before/ the <tt/send-hook/, <bf/regardless/ +of the order specified in the users's configuration file. + +For each type of <tt/send-hook/ or <tt/reply-hook/, When multiple matches +occur, commands are executed in the order they are specified in the muttrc +(for that type of hook). + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for information on the exact format of <em/pattern/. + +Example: <tt/send-hook mutt &dquot;set mime_forward signature=''&dquot;/ + +Another typical use for this command is to change the values of the +<ref id="attribution" name="$attribution">, <ref id="signature" +name="$signature"> and <ref id="locale" name="$locale"> +variables in order to change the language of the attributions and +signatures based upon the recipients. + +<bf/Note:/ the send-hook's are only executed ONCE after getting the initial +list of recipients. Adding a recipient after replying or editing the +message will NOT cause any send-hook to be executed. Also note that +my_hdr commands which modify recipient headers, or the message's +subject, don't have any effect on the current message when executed +from a send-hook. + +<sect1>Change settings before formatting a message<label id="message-hook"> +<p> +Usage: <tt/message-hook/ [!]<em/pattern/ <em/command/ + +This command can be used to execute arbitrary configuration commands +before viewing or formatting a message based upon information about the message. +<em/command/ is executed if the <em/pattern/ matches the message to be +displayed. When multiple matches occur, commands are executed in the order +they are specified in the muttrc. + +See <ref id="pattern_hook" name="Message Matching in Hooks"> for +information on the exact format of <em/pattern/. + +Example: +<tscreen><verb> +message-hook ~A 'set pager=builtin' +message-hook '~f freshmeat-news' 'set pager="less \"+/^ subject: .*\""' +</verb></tscreen> + +<sect1>Choosing the cryptographic key of the recipient<label id="crypt-hook"> +<p> +Usage: <tt/crypt-hook/ <em/pattern/ <em/keyid/ + +When encrypting messages with PGP or OpenSSL, you may want to associate a certain +key with a given e-mail address automatically, either because the +recipient's public key can't be deduced from the destination address, +or because, for some reasons, you need to override the key Mutt would +normally use. The crypt-hook command provides a method by which you can +specify the ID of the public key to be used when encrypting messages to +a certain recipient. + +The meaning of "key id" is to be taken broadly in this context: You +can either put a numerical key ID here, an e-mail address, or even +just a real name. + +<sect1>Adding key sequences to the keyboard buffer<label id="push"> +<p> +Usage: <tt/push/ <em/string/ + +This command adds the named string to the keyboard buffer. The string may +contain control characters, key names and function names like the sequence +string in the <ref id="macro" name="macro"> command. You may use it to +automatically run a sequence of commands at startup, or when entering +certain folders. + +<sect1>Executing functions<label id="exec"> +<p> +Usage: <tt/exec/ <em/function/ [ <em/function/ ... ] + +This command can be used to execute any function. Functions are +listed in the <ref id="functions" name="function reference">. +``exec function'' is equivalent to ``push <function>''. + +<sect1>Message Scoring<label id="score-command"> +<p> +Usage: <tt/score/ <em/pattern/ <em/value/<newline> +Usage: <tt/unscore/ <em/pattern/ [ <em/pattern/ ... ] + +The <tt/score/ commands adds <em/value/ to a message's score if <em/pattern/ +matches it. <em/pattern/ is a string in the format described in the <ref +id="patterns" name="patterns"> section (note: For efficiency reasons, patterns +which scan information not available in the index, such as <tt>˜b</tt>, +<tt>˜B</tt> or <tt>˜h</tt>, may not be used). <em/value/ is a +positive or negative integer. A message's final score is the sum total of all +matching <tt/score/ entries. However, you may optionally prefix <em/value/ with +an equal sign (=) to cause evaluation to stop at a particular entry if there is +a match. Negative final scores are rounded up to 0. + +The <tt/unscore/ command removes score entries from the list. You <bf/must/ +specify the same pattern specified in the <tt/score/ command for it to be +removed. The pattern ``*'' is a special token which means to clear the list +of all score entries. + +<sect1>Setting variables<label id="set"> +<p> +Usage: <tt/set/ [no|inv]<em/variable/[=<em/value/] [ <em/variable/ ... ]<newline> +Usage: <tt/toggle/ <em/variable/ [<em/variable/ ... ]<newline> +Usage: <tt/unset/ <em/variable/ [<em/variable/ ... ]<newline> +Usage: <tt/reset/ <em/variable/ [<em/variable/ ... ] + +This command is used to set (and unset) <ref id="variables" +name="configuration variables">. There are four basic types of variables: +boolean, number, string and quadoption. <em/boolean/ variables can be +<em/set/ (true) or <em/unset/ (false). <em/number/ variables can be +assigned a positive integer value. + +<em/string/ variables consist of any number of printable characters. +<em/strings/ must be enclosed in quotes if they contain spaces or tabs. You +may also use the ``C'' escape sequences <bf/\n/ and <bf/\t/ for +newline and tab, respectively. + +<em/quadoption/ variables are used to control whether or not to be prompted +for certain actions, or to specify a default action. A value of <em/yes/ +will cause the action to be carried out automatically as if you had answered +yes to the question. Similarly, a value of <em/no/ will cause the the +action to be carried out as if you had answered ``no.'' A value of +<em/ask-yes/ will cause a prompt with a default answer of ``yes'' and +<em/ask-no/ will provide a default answer of ``no.'' + +Prefixing a variable with ``no'' will unset it. Example: <tt/set noaskbcc/. + +For <em/boolean/ variables, you may optionally prefix the variable name with +<tt/inv/ to toggle the value (on or off). This is useful when writing +macros. Example: <tt/set invsmart_wrap/. + +The <tt/toggle/ command automatically prepends the <tt/inv/ prefix to all +specified variables. + +The <tt/unset/ command automatically prepends the <tt/no/ prefix to all +specified variables. + +Using the enter-command function in the <em/index/ menu, you can query the +value of a variable by prefixing the name of the variable with a question +mark: + +<tscreen><verb> +set ?allow_8bit +</verb></tscreen> + +The question mark is actually only required for boolean and quadoption +variables. + +The <tt/reset/ command resets all given variables to the compile time +defaults (hopefully mentioned in this manual). If you use the command +<tt/set/ and prefix the variable with ``&'' this has the same +behavior as the reset command. + +With the <tt/reset/ command there exists the special variable ``all'', +which allows you to reset all variables to their system defaults. + +<sect1>Reading initialization commands from another file<label id="source"> +<p> +Usage: <tt/source/ <em/filename/ [ <em/filename/ ... ] + +This command allows the inclusion of initialization commands +from other files. For example, I place all of my aliases in +<tt>˜/.mail_aliases</tt> so that I can make my +<tt>˜/.muttrc</tt> readable and keep my aliases private. + +If the filename begins with a tilde (``˜''), it will be expanded to the +path of your home directory. + +If the filename ends with a vertical bar (|), then <em/filename/ is +considered to be an executable program from which to read input (eg. +<tt/source ~/bin/myscript|/). + +<sect1>Removing hooks<label id="unhook"> +<p> +Usage: <tt/unhook/ [ * | <em/hook-type/ ] + +This command permits you to flush hooks you have previously defined. +You can either remove all hooks by giving the ``*'' character as an +argument, or you can remove all hooks of a specific type by saying +something like <tt/unhook send-hook/. + +<sect>Advanced Usage + +<sect1>Regular Expressions<label id="regexp"> +<p> +All string patterns in Mutt including those in more complex +<ref id="patterns" name="patterns"> must be specified +using regular expressions (regexp) in the ``POSIX extended'' syntax (which +is more or less the syntax used by egrep and GNU awk). For your +convenience, we have included below a brief description of this syntax. + +The search is case sensitive if the pattern contains at least one upper +case letter, and case insensitive otherwise. Note that ``\'' +must be quoted if used for a regular expression in an initialization +command: ``\\''. + +A regular expression is a pattern that describes a set of strings. +Regular expressions are constructed analogously to arithmetic +expressions, by using various operators to combine smaller expressions. + +Note that the regular expression can be enclosed/delimited by either &dquot; +or ' which is useful if the regular expression includes a white-space +character. See <ref id="muttrc-syntax" name="Syntax of Initialization Files"> +for more information on &dquot; and ' delimiter processing. To match a +literal &dquot; or ' you must preface it with \ (backslash). + +The fundamental building blocks are the regular expressions that match +a single character. Most characters, including all letters and digits, +are regular expressions that match themselves. Any metacharacter with +special meaning may be quoted by preceding it with a backslash. + +The period ``.'' matches any single character. The caret ``ˆ'' and +the dollar sign ``&dollar'' are metacharacters that respectively match +the empty string at the beginning and end of a line. + +A list of characters enclosed by ``['' and ``]'' matches any +single character in that list; if the first character of the list +is a caret ``ˆ'' then it matches any character <bf/not/ in the +list. For example, the regular expression <bf/[0123456789]/ +matches any single digit. A range of ASCII characters may be specified +by giving the first and last characters, separated by a hyphen +``‐''. Most metacharacters lose their special meaning inside +lists. To include a literal ``]'' place it first in the list. +Similarly, to include a literal ``ˆ'' place it anywhere but first. +Finally, to include a literal hyphen ``‐'' place it last. + +Certain named classes of characters are predefined. Character classes +consist of ``[:'', a keyword denoting the class, and ``:]''. +The following classes are defined by the POSIX standard: + +<descrip> +<tag/[:alnum:]/ +Alphanumeric characters. +<tag/[:alpha:]/ +Alphabetic characters. +<tag/[:blank:]/ +Space or tab characters. +<tag/[:cntrl:]/ +Control characters. +<tag/[:digit:]/ +Numeric characters. +<tag/[:graph:]/ +Characters that are both printable and visible. (A space is printable, +but not visible, while an ``a'' is both.) +<tag/[:lower:]/ +Lower-case alphabetic characters. +<tag/[:print:]/ +Printable characters (characters that are not control characters.) +<tag/[:punct:]/ +Punctuation characters (characters that are not letter, digits, control +characters, or space characters). +<tag/[:space:]/ +Space characters (such as space, tab and formfeed, to name a few). +<tag/[:upper:]/ +Upper-case alphabetic characters. +<tag/[:xdigit:]/ +Characters that are hexadecimal digits. +</descrip> + +A character class is only valid in a regular expression inside the +brackets of a character list. Note that the brackets in these +class names are part of the symbolic names, and must be included +in addition to the brackets delimiting the bracket list. For +example, <bf/[[:digit:]]/ is equivalent to +<bf/[0-9]/. + +Two additional special sequences can appear in character lists. These +apply to non-ASCII character sets, which can have single symbols (called +collating elements) that are represented with more than one character, +as well as several characters that are equivalent for collating or +sorting purposes: + +<descrip> +<tag/Collating Symbols/ +A collating symbol is a multi-character collating element enclosed in +``[.'' and ``.]''. For example, if ``ch'' is a collating +element, then <bf/[[.ch.]]/ is a regexp that matches +this collating element, while <bf/[ch]/ is a regexp that +matches either ``c'' or ``h''. +<tag/Equivalence Classes/ +An equivalence class is a locale-specific name for a list of +characters that are equivalent. The name is enclosed in ``[='' +and ``=]''. For example, the name ``e'' might be used to +represent all of ``è'' ``é'' and ``e''. In this case, +<bf/[[=e=]]/ is a regexp that matches any of +``è'', ``é'' and ``e''. +</descrip> + +A regular expression matching a single character may be followed by one +of several repetition operators: + +<descrip> +<tag/?/ +The preceding item is optional and matched at most once. +<tag/*/ +The preceding item will be matched zero or more times. +<tag/+/ +The preceding item will be matched one or more times. +<tag/{n}/ +The preceding item is matched exactly <em/n/ times. +<tag/{n,}/ +The preceding item is matched <em/n/ or more times. +<tag/{,m}/ +The preceding item is matched at most <em/m/ times. +<tag/{n,m}/ +The preceding item is matched at least <em/n/ times, but no more than +<em/m/ times. +</descrip> + +Two regular expressions may be concatenated; the resulting regular +expression matches any string formed by concatenating two substrings +that respectively match the concatenated subexpressions. + +Two regular expressions may be joined by the infix operator ``|''; +the resulting regular expression matches any string matching either +subexpression. + +Repetition takes precedence over concatenation, which in turn takes +precedence over alternation. A whole subexpression may be enclosed in +parentheses to override these precedence rules. + +<bf/Note:/ If you compile Mutt with the GNU <em/rx/ package, the +following operators may also be used in regular expressions: + +<descrip> +<tag/\\y/ +Matches the empty string at either the beginning or the end of a word. +<tag/\\B/ +Matches the empty string within a word. +<tag/\\</ +Matches the empty string at the beginning of a word. +<tag/\\>/ +Matches the empty string at the end of a word. +<tag/\\w/ +Matches any word-constituent character (letter, digit, or underscore). +<tag/\\W/ +Matches any character that is not word-constituent. +<tag/\\`/ +Matches the empty string at the beginning of a buffer (string). +<tag/\\'/ +Matches the empty string at the end of a buffer. +</descrip> + +Please note however that these operators are not defined by POSIX, so +they may or may not be available in stock libraries on various systems. + +<sect1>Patterns<label id="patterns"> +<p> +Many of Mutt's commands allow you to specify a pattern to match +(limit, tag-pattern, delete-pattern, etc.). There are several ways to select +messages: + +<tscreen><verb> +~A all messages +~b EXPR messages which contain EXPR in the message body +~B EXPR messages which contain EXPR in the whole message +~c USER messages carbon-copied to USER +~C EXPR message is either to: or cc: EXPR +~D deleted messages +~d [MIN]-[MAX] messages with ``date-sent'' in a Date range +~E expired messages +~e EXPR message which contains EXPR in the ``Sender'' field +~F flagged messages +~f USER messages originating from USER +~g cryptographically signed messages +~G cryptographically encrypted messages +~h EXPR messages which contain EXPR in the message header +~k message contains PGP key material +~i ID message which match ID in the ``Message-ID'' field +~L EXPR message is either originated or received by EXPR +~l message is addressed to a known mailing list +~m [MIN]-[MAX] message in the range MIN to MAX *) +~n [MIN]-[MAX] messages with a score in the range MIN to MAX *) +~N new messages +~O old messages +~p message is addressed to you (consults alternates) +~P message is from you (consults alternates) +~Q messages which have been replied to +~R read messages +~r [MIN]-[MAX] messages with ``date-received'' in a Date range +~S superseded messages +~s SUBJECT messages having SUBJECT in the ``Subject'' field. +~T tagged messages +~t USER messages addressed to USER +~U unread messages +~v message is part of a collapsed thread. +~V cryptographically verified messages +~x EXPR messages which contain EXPR in the `References' field +~y EXPR messages which contain EXPR in the `X-Label' field +~z [MIN]-[MAX] messages with a size in the range MIN to MAX *) +~= duplicated messages (see $duplicate_threads) +</verb></tscreen> + +Where EXPR, USER, ID, and SUBJECT are +<ref id="regexp" name="regular expressions">. Special attention has to be +made when using regular expressions inside of patterns. Specifically, +Mutt's parser for these patterns will strip one level of backslash (\), +which is normally used for quoting. If it is your intention to use a +backslash in the regular expression, you will need to use two backslashes +instead (\\). + +*) The forms <tt/<[MAX]/, <tt/>[MIN]/, +<tt/[MIN]-/ and <tt/-[MAX]/ +are allowed, too. + +<sect2>Pattern Modifier +<p> + +Note that patterns matching 'lists' of addresses (notably c,C,p,P and t) +match if there is at least one match in the whole list. If you want to +make sure that all elements of that list match, you need to prefix your +pattern with ^. +This example matches all mails which only has recipients from Germany. + +<tscreen><verb> +^~C \.de$ +</verb></tscreen> + +<sect2>Complex Patterns +<p> + +Logical AND is performed by specifying more than one criterion. For +example: + +<tscreen><verb> +~t mutt ~f elkins +</verb></tscreen> + +would select messages which contain the word ``mutt'' in the list of +recipients <bf/and/ that have the word ``elkins'' in the ``From'' header +field. + +Mutt also recognizes the following operators to create more complex search +patterns: + +<itemize> +<item>! -- logical NOT operator +<item>| -- logical OR operator +<item>() -- logical grouping operator +</itemize> + +Here is an example illustrating a complex search pattern. This pattern will +select all messages which do not contain ``mutt'' in the ``To'' or ``Cc'' +field and which are from ``elkins''. + +<tscreen><verb> +!(~t mutt|~c mutt) ~f elkins +</verb></tscreen> + +Here is an example using white space in the regular expression (note +the ' and &dquot; delimiters). For this to match, the mail's subject must +match the ``^Junk +From +Me$'' and it must be from either ``Jim +Somebody'' +or ``Ed +SomeoneElse'': + +<tscreen><verb> + '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")' +</verb></tscreen> + +Note that if a regular expression contains parenthesis, or a veritical bar +("|"), you <bf/must/ enclose the expression in double or single quotes since +those characters are also used to separate different parts of Mutt's +pattern language. For example, + +<tscreen><verb> +~f "me@(mutt\.org|cs\.hmc\.edu)" +</verb></tscreen> + +Without the quotes, the parenthesis would truncate the regular expression +to simply <em/me@/, which is probably not what you want. + +<sect2>Searching by Date +<p> +Mutt supports two types of dates, <em/absolute/ and <em/relative/. + +<bf/Absolute/. Dates <bf/must/ be in DD/MM/YY format (month and year are +optional, defaulting to the current month and year). An example of a valid +range of dates is: + +<tscreen><verb> +Limit to messages matching: ~d 20/1/95-31/10 +</verb></tscreen> + +If you omit the minimum (first) date, and just specify ``-DD/MM/YY'', all +messages <em/before/ the given date will be selected. If you omit the maximum +(second) date, and specify ``DD/MM/YY-'', all messages <em/after/ the given +date will be selected. If you specify a single date with no dash (``-''), +only messages sent on the given date will be selected. + +<bf/Error Margins/. You can add error margins to absolute dates. +An error margin is a sign (+ or -), followed by a digit, followed by +one of the following units: +<verb> +y years +m months +w weeks +d days +</verb> +As a special case, you can replace the sign by a ``*'' character, +which is equivalent to giving identical plus and minus error margins. + +Example: To select any messages two weeks around January 15, 2001, +you'd use the following pattern: +<tscreen><verb> +Limit to messages matching: ~d 15/1/2001*2w +</verb></tscreen> + + +<bf/Relative/. This type of date is relative to the current date, and may +be specified as: +<itemize> +<item>><em/offset/ (messages older than <em/offset/ units) +<item><<em/offset/ (messages newer than <em/offset/ units) +<item>=<em/offset/ (messages exactly <em/offset/ units old) +</itemize> + +<em/offset/ is specified as a positive number with one of the following +units: +<verb> +y years +m months +w weeks +d days +</verb> + +Example: to select messages less than 1 month old, you would use +<tscreen><verb> +Limit to messages matching: ~d <1m +</verb></tscreen> + + + +<bf/Note:/ all dates used when searching are relative to the +<bf/local/ time zone, so unless you change the setting of your <ref +id="index_format" name="$index_format"> to include a +<tt/%[...]/ format, these are <bf/not/ the dates shown +in the main index. + +<sect1>Using Tags +<p> + +Sometimes it is desirable to perform an operation on a group of +messages all at once rather than one at a time. An example might be +to save messages to a mailing list to a separate folder, or to +delete all messages with a given subject. To tag all messages +matching a pattern, use the tag-pattern function, which is bound to +``shift-T'' by default. Or you can select individual messages by +hand using the ``tag-message'' function, which is bound to ``t'' by +default. See <ref id="patterns" name="patterns"> for Mutt's pattern +matching syntax. + +Once you have tagged the desired messages, you can use the +``tag-prefix'' operator, which is the ``;'' (semicolon) key by default. +When the ``tag-prefix'' operator is used, the <bf/next/ operation will +be applied to all tagged messages if that operation can be used in that +manner. If the <ref id="auto_tag" name="$auto_tag"> +variable is set, the next operation applies to the tagged messages +automatically, without requiring the ``tag-prefix''. + +<sect1>Using Hooks<label id="hooks"> +<p> +A <em/hook/ is a concept borrowed from the EMACS editor which allows you to +execute arbitrary commands before performing some operation. For example, +you may wish to tailor your configuration based upon which mailbox you are +reading, or to whom you are sending mail. In the Mutt world, a <em/hook/ +consists of a <ref id="regexp" name="regular expression"> or +<ref id="patterns" name="pattern"> along with a +configuration option/command. See +<itemize> +<item><ref id="folder-hook" name="folder-hook"> +<item><ref id="send-hook" name="send-hook"> +<item><ref id="message-hook" name="message-hook"> +<item><ref id="save-hook" name="save-hook"> +<item><ref id="mbox-hook" name="mbox-hook"> +<item><ref id="fcc-hook" name="fcc-hook"> +<item><ref id="fcc-save-hook" name="fcc-save-hook"> +</itemize> +for specific details on each type of <em/hook/ available. + +<bf/Note:/ if a hook changes configuration settings, these changes remain +effective until the end of the current mutt session. As this is generally +not desired, a default hook needs to be added before all other hooks to +restore configuration defaults. Here is an example with send-hook and the +my_hdr directive: + +<tscreen><verb> +send-hook . 'unmy_hdr From:' +send-hook ~Cb@b.b my_hdr from: c@c.c +</verb></tscreen> + +<sect2>Message Matching in Hooks<label id="pattern_hook"> +<p> +Hooks that act upon messages (<tt/send-hook, save-hook, fcc-hook, +message-hook/) are evaluated in a slightly different manner. For the other +types of hooks, a <ref id="regexp" name="regular expression"> is +sufficient. But in dealing with messages a finer grain of control is +needed for matching since for different purposes you want to match +different criteria. + +Mutt allows the use of the <ref id="patterns" name="search pattern"> +language for matching messages in hook commands. This works in +exactly the same way as it would when <em/limiting/ or +<em/searching/ the mailbox, except that you are restricted to those +operators which match information mutt extracts from the header of +the message (i.e. from, to, cc, date, subject, etc.). + +For example, if you wanted to set your return address based upon sending +mail to a specific address, you could do something like: +<tscreen><verb> +send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>' +</verb></tscreen> +which would execute the given command when sending mail to +<em/me@cs.hmc.edu/. + +However, it is not required that you write the pattern to match using the +full searching language. You can still specify a simple <em/regular +expression/ like the other hooks, in which case Mutt will translate your +pattern into the full language, using the translation specified by the +<ref id="default_hook" name="$default_hook"> variable. The +pattern is translated at the time the hook is declared, so the value of +<ref id="default_hook" name="$default_hook"> that is in effect +at that time will be used. + +<sect1>External Address Queries<label id="query"> +<p> +Mutt supports connecting to external directory databases such as LDAP, +ph/qi, bbdb, or NIS through a wrapper script which connects to mutt +using a simple interface. Using the <ref id="query_command" +name="$query_command"> variable, you specify the wrapper +command to use. For example: + +<tscreen><verb> +set query_command = "mutt_ldap_query.pl '%s'" +</verb></tscreen> + +The wrapper script should accept the query on the command-line. It +should return a one line message, then each matching response on a +single line, each line containing a tab separated address then name then +some other optional information. On error, or if there are no matching +addresses, return a non-zero exit code and a one line error message. + +An example multiple response output: +<tscreen><verb> +Searching database ... 20 entries ... 3 matching: +me@cs.hmc.edu Michael Elkins mutt dude +blong@fiction.net Brandon Long mutt and more +roessler@guug.de Thomas Roessler mutt pgp +</verb></tscreen> + +There are two mechanisms for accessing the query function of mutt. One +is to do a query from the index menu using the query function (default: Q). +This will prompt for a query, then bring up the query menu which will +list the matching responses. From the query menu, you can select +addresses to create aliases, or to mail. You can tag multiple messages +to mail, start a new query, or have a new query appended to the current +responses. + +The other mechanism for accessing the query function is for address +completion, similar to the alias completion. In any prompt for address +entry, you can use the complete-query function (default: ^T) to run a +query based on the current address you have typed. Like aliases, mutt +will look for what you have typed back to the last space or comma. If +there is a single response for that query, mutt will expand the address +in place. If there are multiple responses, mutt will activate the query +menu. At the query menu, you can select one or more addresses to be +added to the prompt. + +<sect1>Mailbox Formats +<p> +Mutt supports reading and writing of four different mailbox formats: +mbox, MMDF, MH and Maildir. The mailbox type is autodetected, so there +is no need to use a flag for different mailbox types. When creating new +mailboxes, Mutt uses the default specified with the <ref id="mbox_type" +name="$mbox_type"> variable. + +<bf/mbox/. This is the most widely used mailbox format for UNIX. All +messages are stored in a single file. Each message has a line of the form: + +<tscreen><verb> +From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST +</verb></tscreen> + +to denote the start of a new message (this is often referred to as the +``From_'' line). + +<bf/MMDF/. This is a variant of the <em/mbox/ format. Each message is +surrounded by lines containing ``^A^A^A^A'' (four control-A's). + +<bf/MH/. A radical departure from <em/mbox/ and <em/MMDF/, a mailbox +consists of a directory and each message is stored in a separate file. +The filename indicates the message number (however, this is may not +correspond to the message number Mutt displays). Deleted messages are +renamed with a comma (,) prepended to the filename. <bf/Note:/ Mutt +detects this type of mailbox by looking for either <tt/.mh_sequences/ +or <tt/.xmhcache/ (needed to distinguish normal directories from MH +mailboxes). + +<bf/Maildir/. The newest of the mailbox formats, used by the Qmail MTA (a +replacement for sendmail). Similar to <em/MH/, except that it adds three +subdirectories of the mailbox: <em/tmp/, <em/new/ and <em/cur/. Filenames +for the messages are chosen in such a way they are unique, even when two +programs are writing the mailbox over NFS, which means that no file locking +is needed. + +<sect1>Mailbox Shortcuts<label id="shortcuts"> +<p> +There are a number of built in shortcuts which refer to specific mailboxes. +These shortcuts can be used anywhere you are prompted for a file or mailbox +path. + +<itemize> +<item>! -- refers to your <ref id="spoolfile" name="$spoolfile"> (incoming) mailbox +<item>> -- refers to your <ref id="mbox" name="$mbox"> file +<item>< -- refers to your <ref id="record" name="$record"> file +<item>- or !! -- refers to the file you've last visited +<item>˜ -- refers to your home directory +<item>= or + -- refers to your <ref id="folder" name="$folder"> directory +<item>@<em/alias/ -- refers to the <ref id="save-hook" +name="default save folder"> as determined by the address of the alias +</itemize> + +<sect1>Handling Mailing Lists<label id="using_lists"> +<p> + +Mutt has a few configuration options that make dealing with large +amounts of mail easier. The first thing you must do is to let Mutt +know what addresses you consider to be mailing lists (technically +this does not have to be a mailing list, but that is what it is most +often used for), and what lists you are subscribed to. This is +accomplished through the use of the <ref id="lists" +name="lists and subscribe"> commands in your muttrc. + +Now that Mutt knows what your mailing lists are, it can do several +things, the first of which is the ability to show the name of a list +through which you received a message (i.e., of a subscribed list) in +the <em/index/ menu display. This is useful to distinguish between +personal and list mail in the same mailbox. In the <ref id="index_format" +name="$index_format"> variable, the escape ``%L'' +will return the string ``To <list>'' when ``list'' appears in the +``To'' field, and ``Cc <list>'' when it appears in the ``Cc'' +field (otherwise it returns the name of the author). + +Often times the ``To'' and ``Cc'' fields in mailing list messages +tend to get quite large. Most people do not bother to remove the +author of the message they are reply to from the list, resulting in +two or more copies being sent to that person. The ``list-reply'' +function, which by default is bound to ``L'' in the <em/index/ menu +and <em/pager/, helps reduce the clutter by only replying to the +known mailing list addresses instead of all recipients (except as +specified by <tt/Mail-Followup-To/, see below). + +Mutt also supports the <tt/Mail-Followup-To/ header. When you send +a message to a list of recipients which includes one or several +subscribed mailing lists, and if the <ref id="followup_to" +name="$followup_to"> option is set, mutt will generate +a Mail-Followup-To header which contains all the recipients to whom +you send this message, but not your address. This indicates that +group-replies or list-replies (also known as ``followups'') to this +message should only be sent to the original recipients of the +message, and not separately to you - you'll receive your copy through +one of the mailing lists you are subscribed to. + +Conversely, when group-replying or list-replying to a message which +has a <tt/Mail-Followup-To/ header, mutt will respect this header if +the <ref id="honor_followup_to" +name="$honor_followup_to"> configuration +variable is set. Using list-reply will in this case also make sure +that the reply goes to the mailing list, even if it's not specified +in the list of recipients in the <tt/Mail-Followup-To/. + +Note that, when header editing is enabled, you can create a +<tt/Mail-Followup-To/ header manually. Mutt will only auto-generate +this header if it doesn't exist when you send the message. + + +The other method some mailing list admins use is to generate a +``Reply-To'' field which points back to the mailing list address rather +than the author of the message. This can create problems when trying +to reply directly to the author in private, since most mail clients +will automatically reply to the address given in the ``Reply-To'' +field. Mutt uses the <ref id="reply_to" name="$reply_to"> +variable to help decide which address to use. If set, you will be +prompted as to whether or not you would like to use the address given in +the ``Reply-To'' field, or reply directly to the address given in the +``From'' field. When unset, the ``Reply-To'' field will be used when +present. + +The ``X-Label:'' header field can be used to further identify mailing +lists or list subject matter (or just to annotate messages +individually). The <ref id="index_format" +name="$index_format"> variable's ``%y'' and +``%Y'' escapes can be used to expand ``X-Label:'' fields in the +index, and Mutt's pattern-matcher can match regular expressions to +``X-Label:'' fields with the ``~y'' selector. ``X-Label:'' is not a +standard message header field, but it can easily be inserted by procmail +and other mail filtering agents. + +Lastly, Mutt has the ability to <ref id="sort" name="sort"> the mailbox into +<ref id="threads" name="threads">. A thread is a group of messages which all relate to the same +subject. This is usually organized into a tree-like structure where a +message and all of its replies are represented graphically. If you've ever +used a threaded news client, this is the same concept. It makes dealing +with large volume mailing lists easier because you can easily delete +uninteresting threads and quickly find topics of value. + +<sect1>Delivery Status Notification (DSN) Support +<p> +RFC1894 defines a set of MIME content types for relaying information +about the status of electronic mail messages. These can be thought of as +``return receipts.'' Berkeley sendmail 8.8.x currently has some command +line options in which the mail client can make requests as to what type +of status messages should be returned. + +To support this, there are two variables. <ref id="dsn_notify" +name="$dsn_notify"> is used to request receipts for +different results (such as failed message, message delivered, etc.). +<ref id="dsn_return" name="$dsn_return"> requests how much +of your message should be returned with the receipt (headers or full +message). Refer to the man page on sendmail for more details on DSN. + +<sect1>POP3 Support (OPTIONAL) +<p> + +If Mutt was compiled with POP3 support (by running the <em/configure/ +script with the <em/--enable-pop/ flag), it has the ability to work +with mailboxes located on a remote POP3 server and fetch mail for local +browsing. + +You can access the remote POP3 mailbox by selecting the folder +<tt>pop://popserver/</tt>. + +You can select an alternative port by specifying it with the server, ie: +<tt>pop://popserver:port/</tt>. + +You can also specify different username for each folder, ie: +<tt>pop://username@popserver[:port]/</tt>. + +Polling for new mail is more expensive over POP3 than locally. For this +reason the frequency at which Mutt will check for mail remotely can be +controlled by the +<ref id="pop_checkinterval" name="$pop_checkinterval"> +variable, which defaults to every 60 seconds. + +If Mutt was compiled with SSL support (by running the <em/configure/ +script with the <em/--with-ssl/ flag), connections to POP3 servers +can be encrypted. This naturally requires that the server supports +SSL encrypted connections. To access a folder with POP3/SSL, you should +use pops: prefix, ie: +<tt>pops://[username@]popserver[:port]/</tt>. + +Another way to access your POP3 mail is the <em/fetch-mail/ function +(default: G). It allows to connect to <ref id="pop_host" +name="pop_host">, fetch all your new mail and place it in the +local <ref id="spoolfile" name="spoolfile">. After this +point, Mutt runs exactly as if the mail had always been local. + +<bf/Note:/ If you only need to fetch all messages to local mailbox +you should consider using a specialized program, such as <htmlurl +url="http://www.ccil.org/~esr/fetchmail" name="fetchmail"> + +<sect1>IMAP Support (OPTIONAL) +<p> + +If Mutt was compiled with IMAP support (by running the <em/configure/ +script with the <em/--enable-imap/ flag), it has the ability to work +with folders located on a remote IMAP server. + +You can access the remote inbox by selecting the folder +<tt>imap://imapserver/INBOX</tt>, where <tt/imapserver/ is the name of the +IMAP server and <tt/INBOX/ is the special name for your spool mailbox on +the IMAP server. If you want to access another mail folder at the IMAP +server, you should use <tt>imap://imapserver/path/to/folder</tt> where +<tt>path/to/folder</tt> is the path of the folder you want to access. + +You can select an alternative port by specifying it with the server, ie: +<tt>imap://imapserver:port/INBOX</tt>. + +You can also specify different username for each folder, ie: +<tt>imap://username@imapserver[:port]/INBOX</tt>. + +If Mutt was compiled with SSL support (by running the <em/configure/ +script with the <em/--with-ssl/ flag), connections to IMAP servers +can be encrypted. This naturally requires that the server supports +SSL encrypted connections. To access a folder with IMAP/SSL, you should +use <tt>imaps://[username@]imapserver[:port]/path/to/folder</tt> as your +folder path. + +Pine-compatible notation is also supported, ie +<tt>{[username@]imapserver[:port][/ssl]}path/to/folder</tt> + +Note that not all servers use / as the hierarchy separator. Mutt should +correctly notice which separator is being used by the server and convert +paths accordingly. + +When browsing folders on an IMAP server, you can toggle whether to look +at only the folders you are subscribed to, or all folders with the +<em/toggle-subscribed/ command. See also the +<ref id="imap_list_subscribed" +name="$imap_list_subscribed"> variable. + +Polling for new mail on an IMAP server can cause noticeable delays. So, you'll +want to carefully tune the +<ref id="mail_check" name="$mail_check"> +and +<ref id="timeout" name="$timeout"> +variables. Personally I use +<tscreen><verb> +set mail_check=90 +set timeout=15 +</verb></tscreen> +with relatively good results over my slow modem line. + +Note that if you are using mbox as the mail store on UW servers prior to +v12.250, the server has been reported to disconnect a client if another client +selects the same folder. + +<sect2>The Folder Browser +<p> + +As of version 1.2, mutt supports browsing mailboxes on an IMAP +server. This is mostly the same as the local file browser, with the +following differences: +<itemize> +<item>In lieu of file permissions, mutt displays the string "IMAP", + possibly followed by the symbol "+", indicating + that the entry contains both messages and subfolders. On + Cyrus-like servers folders will often contain both messages and + subfolders. +<item>For the case where an entry can contain both messages and + subfolders, the selection key (bound to <tt>enter</tt> by default) + will choose to descend into the subfolder view. If you wish to view + the messages in that folder, you must use <tt>view-file</tt> instead + (bound to <tt>space</tt> by default). +<item>You can delete mailboxes with the <tt>delete-mailbox</tt> + command (bound to <tt>d</tt> by default. You may also + <tt>subscribe</tt> and <tt>unsubscribe</tt> to mailboxes (normally + these are bound to <tt>s</tt> and <tt>u</tt>, respectively). +</itemize> + +<sect2>Authentication +<p> + +Mutt supports four authentication methods with IMAP servers: SASL, +GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add +NTLM authentication for you poor exchange users out there, but it has +yet to be integrated into the main tree). There is also support for +the pseudo-protocol ANONYMOUS, which allows you to log in to a public +IMAP server without having an account. To use ANONYMOUS, simply make +your username blank or "anonymous". +<p> +SASL is a special super-authenticator, which selects among several protocols +(including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the most secure +method available on your host and the server. Using some of these methods +(including DIGEST-MD5 and possibly GSSAPI), your entire session will be +encrypted and invisible to those teeming network snoops. It is the best +option if you have it. To use it, you must have the Cyrus SASL library +installed on your system and compile mutt with the <em/--with-sasl/ flag. +<p> +Mutt will try whichever methods are compiled in and available on the server, +in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN. + +There are a few variables which control authentication: +<itemize> +<item><ref id="imap_user" name="$imap_user"> - controls + the username under which you request authentication on the IMAP server, + for all authenticators. This is overridden by an explicit username in + the mailbox path (ie by using a mailbox name of the form + <tt/{user@host}/). +<item><ref id="imap_pass" name="$imap_pass"> - a + password which you may preset, used by all authentication methods where + a password is needed. +<item><ref id="imap_authenticators" + name="$imap_authenticators"> - a colon-delimited list of IMAP + authentication methods to try, in the order you wish to try them. If + specified, this overrides mutt's default (attempt everything, in the order + listed above). +</itemize> + +<sect1>Managing multiple IMAP/POP accounts (OPTIONAL)<label id="account-hook"> +<p> + +If you happen to have accounts on multiple IMAP and/or POP servers, +you may find managing all the authentication settings inconvenient and +error-prone. The account-hook command may help. This hook works like +folder-hook but is invoked whenever you access a remote mailbox +(including inside the folder browser), not just when you open the +mailbox. +<p> +Some examples: + +<tscreen><verb> +account-hook . 'unset imap_user; unset imap_pass; unset tunnel' +account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo' +account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"' +</verb></tscreen> + +<sect1>Start a WWW Browser on URLs (EXTERNAL)<label id="urlview"> +<p> +If a message contains URLs (<em/unified ressource locator/ = address in the +WWW space like <em>http://www.mutt.org/</em>), it is efficient to get +a menu with all the URLs and start a WWW browser on one of them. This +functionality is provided by the external urlview program which can be +retrieved at <htmlurl url="ftp://ftp.mutt.org/mutt/contrib/" +name="ftp://ftp.mutt.org/mutt/contrib/"> and the configuration commands: +<tscreen><verb> +macro index \cb |urlview\n +macro pager \cb |urlview\n +</verb></tscreen> + +<sect>Mutt's MIME Support +<p> +Quite a bit of effort has been made to make Mutt the premier text-mode +MIME MUA. Every effort has been made to provide the functionality that +the discerning MIME user requires, and the conformance to the standards +wherever possible. When configuring Mutt for MIME, there are two extra +types of configuration files which Mutt uses. One is the +<tt/mime.types/ file, which contains the mapping of file extensions to +IANA MIME types. The other is the <tt/mailcap/ file, which specifies +the external commands to use for handling specific MIME types. + +<sect1>Using MIME in Mutt +<p> +There are three areas/menus in Mutt which deal with MIME, they are the +pager (while viewing a message), the attachment menu and the compose +menu. + +<sect2>Viewing MIME messages in the pager +<p> +When you select a message from the index and view it in the pager, Mutt +decodes the message to a text representation. Mutt internally supports +a number of MIME types, including <tt>text/plain, text/enriched, +message/rfc822, and message/news</tt>. In addition, the export +controlled version of Mutt recognizes a variety of PGP MIME types, +including PGP/MIME and application/pgp. + +Mutt will denote attachments with a couple lines describing them. +These lines are of the form: +<tscreen><verb> +[-- Attachment #1: Description --] +[-- Type: text/plain, Encoding: 7bit, Size: 10000 --] +</verb></tscreen> +Where the <tt/Description/ is the description or filename given for the +attachment, and the <tt/Encoding/ is one of +<tt>7bit/8bit/quoted-printable/base64/binary</tt>. + +If Mutt cannot deal with a MIME type, it will display a message like: +<tscreen><verb> +[-- image/gif is unsupported (use 'v' to view this part) --] +</verb></tscreen> + +<sect2>The Attachment Menu<label id="attach_menu"> +<p> +The default binding for <tt/view-attachments/ is `v', which displays the +attachment menu for a message. The attachment menu displays a list of +the attachments in a message. From the attachment menu, you can save, +print, pipe, delete, and view attachments. You can apply these +operations to a group of attachments at once, by tagging the attachments +and by using the ``tag-prefix'' operator. You can also reply to the +current message from this menu, and only the current attachment (or the +attachments tagged) will be quoted in your reply. You can view +attachments as text, or view them using the mailcap viewer definition. + +Finally, you can apply the usual message-related functions (like +<ref id="resend-message" name="resend-message">, and the reply +and forward functions) to attachments of type <tt>message/rfc822</tt>. + +See the help on the attachment menu for more information. + +<sect2>The Compose Menu<label id="compose_menu"> +<p> +The compose menu is the menu you see before you send a message. It +allows you to edit the recipient list, the subject, and other aspects +of your message. It also contains a list of the attachments of your +message, including the main body. From this menu, you can print, copy, +filter, pipe, edit, compose, review, and rename an attachment or a +list of tagged attachments. You can also modifying the attachment +information, notably the type, encoding and description. + +Attachments appear as follows: +<verb> +- 1 [text/plain, 7bit, 1K] /tmp/mutt-euler-8082-0 <no description> + 2 [applica/x-gunzip, base64, 422K] ~/src/mutt-0.85.tar.gz <no description> +</verb> + +The '-' denotes that Mutt will delete the file after sending (or +postponing, or cancelling) the message. It can be toggled with the +<tt/toggle-unlink/ command (default: u). The next field is the MIME +content-type, and can be changed with the <tt/edit-type/ command +(default: ^T). The next field is the encoding for the attachment, +which allows a binary message to be encoded for transmission on 7bit +links. It can be changed with the <tt/edit-encoding/ command +(default: ^E). The next field is the size of the attachment, +rounded to kilobytes or megabytes. The next field is the filename, +which can be changed with the <tt/rename-file/ command (default: R). +The final field is the description of the attachment, and can be +changed with the <tt/edit-description/ command (default: d). + +<sect1>MIME Type configuration with <tt/mime.types/ +<p> +When you add an attachment to your mail message, Mutt searches your +personal mime.types file at <tt>${HOME}/.mime.types</tt>, and then +the system mime.types file at <tt>/usr/local/share/mutt/mime.types</tt> or +<tt>/etc/mime.types</tt> + +The mime.types file consist of lines containing a MIME type and a space +separated list of extensions. For example: +<tscreen><verb> +application/postscript ps eps +application/pgp pgp +audio/x-aiff aif aifc aiff +</verb></tscreen> +A sample <tt/mime.types/ file comes with the Mutt distribution, and +should contain most of the MIME types you are likely to use. + +If Mutt can not determine the mime type by the extension of the file you +attach, it will look at the file. If the file is free of binary +information, Mutt will assume that the file is plain text, and mark it +as <tt>text/plain</tt>. If the file contains binary information, then Mutt will +mark it as <tt>application/octet-stream</tt>. You can change the MIME +type that Mutt assigns to an attachment by using the <tt/edit-type/ +command from the compose menu (default: ^T). The MIME type is actually a +major mime type followed by the sub-type, separated by a '/'. 6 major +types: application, text, image, video, audio, and model have been approved +after various internet discussions. Mutt recognises all of these if the +appropriate entry is found in the mime.types file. It also recognises other +major mime types, such as the chemical type that is widely used in the +molecular modelling community to pass molecular data in various forms to +various molecular viewers. Non-recognised mime types should only be used +if the recipient of the message is likely to be expecting such attachments. + +<sect1>MIME Viewer configuration with <tt/mailcap/ +<p> +Mutt supports RFC 1524 MIME Configuration, in particular the Unix +specific format specified in Appendix A of RFC 1524. This file format +is commonly referred to as the mailcap format. Many MIME compliant +programs utilize the mailcap format, allowing you to specify handling +for all MIME types in one place for all programs. Programs known to +use this format include Netscape, XMosaic, lynx and metamail. + +In order to handle various MIME types that Mutt can not handle +internally, Mutt parses a series of external configuration files to +find an external handler. The default search string for these files +is a colon delimited list set to +<tscreen><verb> +${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap +</verb></tscreen> +where <tt/$HOME/ is your home directory. + +In particular, the metamail distribution will install a mailcap file, +usually as <tt>/usr/local/etc/mailcap</tt>, which contains some baseline +entries. + +<sect2>The Basics of the mailcap file +<p> +A mailcap file consists of a series of lines which are comments, blank, +or definitions. + +A comment line consists of a # character followed by anything you want. + +A blank line is blank. + +A definition line consists of a content type, a view command, and any +number of optional fields. Each field of a definition line is divided +by a semicolon ';' character. + +The content type is specified in the MIME standard type/subtype method. +For example, +<tt>text/plain, text/html, image/gif, </tt> +etc. In addition, the mailcap format includes two formats for +wildcards, one using the special '*' subtype, the other is the implicit +wild, where you only include the major type. For example, <tt>image/*</tt>, or +<tt>video,</tt> will match all image types and video types, +respectively. + +The view command is a Unix command for viewing the type specified. There +are two different types of commands supported. The default is to send +the body of the MIME message to the command on stdin. You can change +this behaviour by using %s as a parameter to your view command. +This will cause Mutt to save the body of the MIME message to a temporary +file, and then call the view command with the %s replaced by +the name of the temporary file. In both cases, Mutt will turn over the +terminal to the view program until the program quits, at which time Mutt +will remove the temporary file if it exists. + +So, in the simplest form, you can send a text/plain message to the +external pager more on stdin: +<tscreen><verb> +text/plain; more +</verb></tscreen> +Or, you could send the message as a file: +<tscreen><verb> +text/plain; more %s +</verb></tscreen> +Perhaps you would like to use lynx to interactively view a text/html +message: +<tscreen><verb> +text/html; lynx %s +</verb></tscreen> +In this case, lynx does not support viewing a file from stdin, so you +must use the %s syntax. +<bf/Note:/ <em>Some older versions of lynx contain a bug where they +will check the mailcap file for a viewer for text/html. They will find +the line which calls lynx, and run it. This causes lynx to continuously +spawn itself to view the object.</em> + +On the other hand, maybe you don't want to use lynx interactively, you +just want to have it convert the text/html to text/plain, then you can +use: +<tscreen><verb> +text/html; lynx -dump %s | more +</verb></tscreen> + +Perhaps you wish to use lynx to view text/html files, and a pager on +all other text formats, then you would use the following: +<tscreen><verb> +text/html; lynx %s +text/*; more +</verb></tscreen> +This is the simplest form of a mailcap file. + +<sect2>Secure use of mailcap +<p> +The interpretion of shell meta-characters embedded in MIME parameters +can lead to security problems in general. Mutt tries to quote parameters +in expansion of %s syntaxes properly, and avoids risky characters by +substituting them, see the <ref id="mailcap_sanitize" +name="mailcap_sanitize"> variable. + +Although mutt's procedures to invoke programs with mailcap seem to be +safe, there are other applications parsing mailcap, maybe taking less care +of it. Therefore you should pay attention to the following rules: + +<em/Keep the %-expandos away from shell quoting./ +Don't quote them with single or double quotes. Mutt does this for +you, the right way, as should any other program which interprets +mailcap. Don't put them into backtick expansions. Be highly careful +with eval statements, and avoid them if possible at all. Trying to fix +broken behaviour with quotes introduces new leaks - there is no +alternative to correct quoting in the first place. + +If you have to use the %-expandos' values in context where you need +quoting or backtick expansions, put that value into a shell variable +and reference the shell variable where necessary, as in the following +example (using <tt/$charset/ inside the backtick expansion is safe, +since it is not itself subject to any further expansion): + +<tscreen><verb> +text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \ + && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1 +</verb></tscreen> + +<sect2>Advanced mailcap Usage +<p> + +<sect3>Optional Fields +<p> +In addition to the required content-type and view command fields, you +can add semi-colon ';' separated fields to set flags and other options. +Mutt recognizes the following optional fields: +<descrip> +<tag/copiousoutput/ +This flag tells Mutt that the command passes possibly large amounts of +text on stdout. This causes Mutt to invoke a pager (either the internal +pager or the external pager defined by the pager variable) on the output +of the view command. Without this flag, Mutt assumes that the command +is interactive. One could use this to replace the pipe to <tt>more</tt> +in the <tt>lynx -dump</tt> example in the Basic section: +<tscreen><verb> +text/html; lynx -dump %s ; copiousoutput +</verb></tscreen> +This will cause lynx to format the text/html output as text/plain +and Mutt will use your standard pager to display the results. +<tag/needsterminal/ +Mutt uses this flag when viewing attachments with <ref id="auto_view" +name="autoview">, in order to decide whether it should honor the setting +of the <ref id="wait_key" name="$wait_key"> variable or +not. When an attachment is viewed using an interactive program, and the +corresponding mailcap entry has a <em/needsterminal/ flag, Mutt will use +<ref id="wait_key" name="$wait_key"> and the exit status +of the program to decide if it will ask you to press a key after the +external program has exited. In all other situations it will not prompt +you for a key. +<tag>compose=<command></tag> +This flag specifies the command to use to create a new attachment of a +specific MIME type. Mutt supports this from the compose menu. +<tag>composetyped=<command></tag> +This flag specifies the command to use to create a new attachment of a +specific MIME type. This command differs from the compose command in +that mutt will expect standard MIME headers on the data. This can be +used to specify parameters, filename, description, etc. for a new +attachment. Mutt supports this from the compose menu. +<tag>print=<command></tag> +This flag specifies the command to use to print a specific MIME type. +Mutt supports this from the attachment and compose menus. +<tag>edit=<command></tag> +This flag specifies the command to use to edit a specific MIME type. +Mutt supports this from the compose menu, and also uses it to compose +new attachments. Mutt will default to the defined editor for text +attachments. +<tag>nametemplate=<template></tag> +This field specifies the format for the file denoted by %s in the +command fields. Certain programs will require a certain file extension, +for instance, to correctly view a file. For instance, lynx will only +interpret a file as <tt>text/html</tt> if the file ends in <tt/.html/. +So, you would specify lynx as a <tt>text/html</tt> viewer with a line in +the mailcap file like: +<tscreen><verb> +text/html; lynx %s; nametemplate=%s.html +</verb></tscreen> +<tag>test=<command></tag> +This field specifies a command to run to test whether this mailcap +entry should be used. The command is defined with the command expansion +rules defined in the next section. If the command returns 0, then the +test passed, and Mutt uses this entry. If the command returns non-zero, +then the test failed, and Mutt continues searching for the right entry. +<bf/Note:/ <em>the content-type must match before Mutt performs the test.</em> +For example: +<tscreen><verb> +text/html; netscape -remote 'openURL(%s)' ; test=RunningX +text/html; lynx %s +</verb></tscreen> +In this example, Mutt will run the program RunningX which will return 0 +if the X Window manager is running, and non-zero if it isn't. If +RunningX returns 0, then Mutt will call netscape to display the +text/html object. If RunningX doesn't return 0, then Mutt will go on +to the next entry and use lynx to display the text/html object. +</descrip> + +<sect3>Search Order +<p> +When searching for an entry in the mailcap file, Mutt will search for +the most useful entry for its purpose. For instance, if you are +attempting to print an <tt>image/gif</tt>, and you have the following +entries in your mailcap file, Mutt will search for an entry with the +print command: +<tscreen><verb> +image/*; xv %s +image/gif; ; print= anytopnm %s | pnmtops | lpr; \ + nametemplate=%s.gif +</verb></tscreen> +Mutt will skip the <tt>image/*</tt> entry and use the <tt>image/gif</tt> +entry with the print command. + +In addition, you can use this with <ref id="auto_view" name="Autoview"> +to denote two commands for viewing an attachment, one to be viewed +automatically, the other to be viewed interactively from the attachment +menu. In addition, you can then use the test feature to determine which +viewer to use interactively depending on your environment. +<tscreen><verb> +text/html; netscape -remote 'openURL(%s)' ; test=RunningX +text/html; lynx %s; nametemplate=%s.html +text/html; lynx -dump %s; nametemplate=%s.html; copiousoutput +</verb></tscreen> +For <ref id="auto_view" name="Autoview">, Mutt will choose the third +entry because of the copiousoutput tag. For interactive viewing, Mutt +will run the program RunningX to determine if it should use the first +entry. If the program returns non-zero, Mutt will use the second entry +for interactive viewing. + +<sect3>Command Expansion +<p> +The various commands defined in the mailcap files are passed to the +<tt>/bin/sh</tt> shell using the system() function. Before the +command is passed to <tt>/bin/sh -c</tt>, it is parsed to expand +various special parameters with information from Mutt. The keywords +Mutt expands are: +<descrip> +<tag/%s/ +As seen in the basic mailcap section, this variable is expanded +to a filename specified by the calling program. This file contains +the body of the message to view/print/edit or where the composing +program should place the results of composition. In addition, the +use of this keyword causes Mutt to not pass the body of the message +to the view/print/edit program on stdin. +<tag/%t/ +Mutt will expand %t to the text representation of the content +type of the message in the same form as the first parameter of the +mailcap definition line, ie <tt>text/html</tt> or +<tt>image/gif</tt>. +<tag>%{<parameter>}</tag> +Mutt will expand this to the value of the specified parameter +from the Content-Type: line of the mail message. For instance, if +Your mail message contains: +<tscreen><verb> +Content-Type: text/plain; charset=iso-8859-1 +</verb></tscreen> +then Mutt will expand %{charset} to iso-8859-1. The default metamail +mailcap file uses this feature to test the charset to spawn an xterm +using the right charset to view the message. +<tag>\%</tag> +This will be replaced by a % +</descrip> +Mutt does not currently support the %F and %n keywords +specified in RFC 1524. The main purpose of these parameters is for +multipart messages, which is handled internally by Mutt. + +<sect2>Example mailcap files +<p> +This mailcap file is fairly simple and standard: +<code> +# I'm always running X :) +video/*; xanim %s > /dev/null +image/*; xv %s > /dev/null + +# I'm always running netscape (if my computer had more memory, maybe) +text/html; netscape -remote 'openURL(%s)' +</code> + +This mailcap file shows quite a number of examples: + +<code> +# Use xanim to view all videos Xanim produces a header on startup, +# send that to /dev/null so I don't see it +video/*; xanim %s > /dev/null + +# Send html to a running netscape by remote +text/html; netscape -remote 'openURL(%s)'; test=RunningNetscape + +# If I'm not running netscape but I am running X, start netscape on the +# object +text/html; netscape %s; test=RunningX + +# Else use lynx to view it as text +text/html; lynx %s + +# This version would convert the text/html to text/plain +text/html; lynx -dump %s; copiousoutput + +# I use enscript to print text in two columns to a page +text/*; more %s; print=enscript -2Gr %s + +# Netscape adds a flag to tell itself to view jpegs internally +image/jpeg;xv %s; x-mozilla-flags=internal + +# Use xv to view images if I'm running X +# In addition, this uses the \ to extend the line and set my editor +# for images +image/*;xv %s; test=RunningX; \ + edit=xpaint %s + +# Convert images to text using the netpbm tools +image/*; (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm | +pbmtoascii -1x2 ) 2>&1 ; copiousoutput + +# Send excel spreadsheets to my NT box +application/ms-excel; open.pl %s +</code> + +<sect1>MIME Autoview<label id="auto_view"> +<p> +In addition to explicitly telling Mutt to view an attachment with the +MIME viewer defined in the mailcap file, Mutt has support for +automatically viewing MIME attachments while in the pager. + +To work, you must define a viewer in the mailcap file which uses the +<tt/copiousoutput/ option to denote that it is non-interactive. +Usually, you also use the entry to convert the attachment to a text +representation which you can view in the pager. + +You then use the <tt/auto_view/ muttrc command to list the +content-types that you wish to view automatically. + +For instance, if you set auto_view to: +<tscreen><verb> +auto_view text/html application/x-gunzip application/postscript image/gif application/x-tar-gz +</verb></tscreen> + +Mutt could use the following mailcap entries to automatically view +attachments of these types. +<tscreen><verb> +text/html; lynx -dump %s; copiousoutput; nametemplate=%s.html +image/*; anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput +application/x-gunzip; gzcat; copiousoutput +application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput +application/postscript; ps2ascii %s; copiousoutput +</verb></tscreen> + +``unauto_view'' can be used to remove previous entries from the autoview list. +This can be used with message-hook to autoview messages based on size, etc. +``unauto_view *'' will remove all previous entries. + +<sect1>MIME Multipart/Alternative<label id="alternative_order"> +<p> +Mutt has some heuristics for determining which attachment of a +multipart/alternative type to display. First, mutt will check the +alternative_order list to determine if one of the available types +is preferred. The alternative_order list consists of a number of +mimetypes in order, including support for implicit and explicit +wildcards, for example: +<tscreen><verb> +alternative_order text/enriched text/plain text application/postscript image/* +</verb></tscreen> + +Next, mutt will check if any of the types have a defined +<ref id="auto_view" name="auto_view">, and use that. Failing +that, Mutt will look for any text type. As a last attempt, mutt will +look for any type it knows how to handle. + +To remove a MIME type from the <tt/alternative_order/ list, use the +<tt/unalternative_order/ command. + +<sect1>MIME Lookup<label id="mime_lookup"> +<p> +Mutt's mime_lookup list specifies a list of mime-types that should not +be treated according to their mailcap entry. This option is designed to +deal with binary types such as application/octet-stream. When an attachment's +mime-type is listed in mime_lookup, then the extension of the filename will +be compared to the list of extensions in the mime.types file. The mime-type +associated with this extension will then be used to process the attachment +according to the rules in the mailcap file and according to any other configuration +options (such as auto_view) specified. Common usage would be: +<tscreen><verb> +mime-lookup application/octet-stream application/X-Lotus-Manuscript +</verb></tscreen> + +In addition, the unmime_lookup command may be used to disable this feature +for any particular mime-type if it had been set, for example, in a global +muttrc. + +<sect>Reference +<sect1>Command line options<label id="commandline"> +<p> +Running <tt/mutt/ with no arguments will make Mutt attempt to read your spool +mailbox. However, it is possible to read other mailboxes and +to send messages from the command line as well. + +<tscreen><verb> +-A expand an alias +-a attach a file to a message +-b specify a blind carbon-copy (BCC) address +-c specify a carbon-copy (Cc) address +-e specify a config command to be run after initilization files are read +-f specify a mailbox to load +-F specify an alternate file to read initialization commands +-h print help on command line options +-H specify a draft file from which to read a header and body +-i specify a file to include in a message composition +-m specify a default mailbox type +-n do not read the system Muttrc +-p recall a postponed message +-Q query a configuration variable +-R open mailbox in read-only mode +-s specify a subject (enclose in quotes if it contains spaces) +-v show version number and compile-time definitions +-x simulate the mailx(1) compose mode +-y show a menu containing the files specified by the mailboxes command +-z exit immediately if there are no messages in the mailbox +-Z open the first folder with new message,exit immediately if none +</verb></tscreen> + +To read messages in a mailbox + +<tt/mutt/ [ -nz ] [ -F <em/muttrc/ ] [ -m <em/type/ ] [ -f <em/mailbox/ ] + +To compose a new message + +<tt/mutt/ [ -n ] [ -F <em/muttrc/ ] [ -a <em/file/ ] [ -c <em/address/ ] [ -i <em/filename/ ] [ -s <em/subject/ ] <em/address/ [ <em/address/ ... ] + +Mutt also supports a ``batch'' mode to send prepared messages. Simply redirect +input from the file you wish to send. For example, + +<tt>mutt -s &dquot;data set for run #2&dquot; professor@bigschool.edu +< ˜/run2.dat</tt> + +This command will send a message to ``professor@bigschool.edu'' with a subject +of ``data set for run #2''. In the body of the message will be the contents +of the file ``˜/run2.dat''. + +<sect1>Configuration Commands<label id="commands"> +<p> +The following are the commands understood by mutt. + +<itemize> +<item> +<tt><ref id="account-hook" name="account-hook"></tt> <em/pattern/ <em/command/ +<item> +<tt><ref id="alias" name="alias"></tt> <em/key/ <em/address/ [ , <em/address/, ... ] +<item> +<tt><ref id="alias" name="unalias"></tt> [ * | <em/key/ ... ] +<item> +<tt><ref id="alternates" name="alternates"></tt> <em/regexp/ [ <em/regexp/ ... ] +<item> +<tt><ref id="alternates" name="unalternates"></tt> [ * | <em/regexp/ ... ] +<item> +<tt><ref id="alternative_order" name="alternative_order"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="alternative_order" name="unalternative_order"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="auto_view" name="auto_view"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="auto_view" name="unauto_view"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="bind" name="bind"></tt> <em/map/ <em/key/ <em/function/ +<item> +<tt><ref id="charset-hook" name="charset-hook"></tt> <em/alias/ <em/charset/ +<item> +<tt><ref id="color" name="color"></tt> <em/object/ <em/foreground/ <em/background/ [ <em/regexp/ ] +<item> +<tt><ref id="color" name="uncolor"></tt> <em/index/ <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="exec" name="exec"></tt> <em/function/ [ <em/function/ ... ] +<item> +<tt><ref id="fcc-hook" name="fcc-hook"></tt> <em/pattern/ <em/mailbox/ +<item> +<tt><ref id="fcc-save-hook" name="fcc-save-hook"></tt> <em/pattern/ <em/mailbox/ +<item> +<tt><ref id="folder-hook" name="folder-hook"></tt> <em/pattern/ <em/command/ +<item> +<tt><ref id="hdr_order" name="hdr_order"></tt> <em/header/ [ <em/header/ ... ] +<item> +<tt><ref id="hdr_order" name="unhdr_order"></tt> <em/header/ [ <em/header/ ... ] +<item> +<tt><ref id="charset-hook" name="iconv-hook"></tt> <em/charset/ <em/local-charset/ +<item> +<tt><ref id="ignore" name="ignore"></tt> <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="ignore" name="unignore"></tt> <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="lists" name="lists"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="lists" name="unlists"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="macro" name="macro"></tt> <em/menu/ <em/key/ <em/sequence/ [ <em/description/ ] +<item> +<tt><ref id="mailboxes" name="mailboxes"></tt> <em/filename/ [ <em/filename/ ... ] +<item> +<tt><ref id="mbox-hook" name="mbox-hook"></tt> <em/pattern/ <em/mailbox/ +<item> +<tt><ref id="message-hook" name="message-hook"></tt> <em/pattern/ <em/command/ +<item> +<tt><ref id="mime_lookup" name="mime_lookup"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="mime_lookup" name="unmime_lookup"></tt> <em/mimetype/ [ <em/mimetype/ ... ] +<item> +<tt><ref id="color" name="mono"></tt> <em/object attribute/ [ <em/regexp/ ] +<item> +<tt><ref id="color" name="unmono"></tt> <em/index/ <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="my_hdr" name="my_hdr"></tt> <em/string/ +<item> +<tt><ref id="my_hdr" name="unmy_hdr"></tt> <em/field/ [ <em/field/ ... ] +<item> +<tt><ref id="crypt-hook" name="crypt-hook"></tt> <em/pattern/ <em/key-id/ +<item> +<tt><ref id="push" name="push"></tt> <em/string/ +<item> +<tt><ref id="set" name="reset"></tt> <em/variable/ [<em/variable/ ... ] +<item> +<tt><ref id="save-hook" name="save-hook"></tt> <em/regexp/ <em/filename/ +<item> +<tt><ref id="score-command" name="score"></tt> <em/pattern/ <em/value/ +<item> +<tt><ref id="score-command" name="unscore"></tt> <em/pattern/ [ <em/pattern/ ... ] +<item> +<tt><ref id="send-hook" name="send-hook"></tt> <em/regexp/ <em/command/ +<item> +<tt><ref id="set" name="set"></tt> [no|inv]<em/variable/[=<em/value/] [ <em/variable/ ... ] +<item> +<tt><ref id="set" name="unset"></tt> <em/variable/ [<em/variable/ ... ] +<item> +<tt><ref id="source" name="source"></tt> <em/filename/ +<item> +<tt><ref id="lists" name="subscribe"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="lists" name="unsubscribe"></tt> <em/address/ [ <em/address/ ... ] +<item> +<tt><ref id="set" name="toggle"></tt> <em/variable/ [<em/variable/ ... ] +<item> +<tt><ref id="unhook" name="unhook"></tt> <em/hook-type/ +</itemize> + +<sect1>Configuration variables<label id="variables"> +<p> + diff --git a/doc/manual.sgml.tail b/doc/manual.sgml.tail new file mode 100644 index 0000000..0e86a6f --- /dev/null +++ b/doc/manual.sgml.tail @@ -0,0 +1,388 @@ +<sect1>Functions<label id="functions"> +<p> +The following is the list of available functions listed by the mapping +in which they are available. The default key setting is given, and an +explanation of what the function does. The key bindings of these +functions can be changed with the <ref name="bind" id="bind"> +command. + +<sect2>generic +<p> + +The <em/generic/ menu is not a real menu, but specifies common functions +(such as movement) available in all menus except for <em/pager/ and +<em/editor/. Changing settings for this menu will affect the default +bindings for all menus (except as noted). + +<verb> +bottom-page L move to the bottom of the page +current-bottom not bound move current entry to bottom of page +current-middle not bound move current entry to middle of page +current-top not bound move current entry to top of page +enter-command : enter a muttrc command +exit q exit this menu +first-entry = move to the first entry +half-down ] scroll down 1/2 page +half-up [ scroll up 1/2 page +help ? this screen +jump number jump to an index number +last-entry * move to the last entry +middle-page M move to the middle of the page +next-entry j move to the next entry +next-line > scroll down one line +next-page z move to the next page +previous-entry k move to the previous entry +previous-line < scroll up one line +previous-page Z move to the previous page +refresh ^L clear and redraw the screen +search / search for a regular expression +search-next n search for next match +search-opposite not bound search for next match in opposite direction +search-reverse ESC / search backwards for a regular expression +select-entry RET select the current entry +shell-escape ! run a program in a subshell +tag-entry t toggle the tag on the current entry +tag-prefix ; apply next command to tagged entries +top-page H move to the top of the page +</verb> +<sect2>index +<p> +<verb> +bounce-message b remail a message to another user +change-folder c open a different folder +change-folder-readonly ESC c open a different folder in read only mode +check-traditional-pgp ESC P check for classic pgp +clear-flag W clear a status flag from a message +copy-message C copy a message to a file/mailbox +create-alias a create an alias from a message sender +decode-copy ESC C decode a message and copy it to a file/mailbox +decode-save ESC s decode a message and save it to a file/mailbox +delete-message d delete the current entry +delete-pattern D delete messages matching a pattern +delete-subthread ESC d delete all messages in subthread +delete-thread ^D delete all messages in thread +display-address @ display full address of sender +display-toggle-weed h display message and toggle header weeding +display-message RET display a message +edit e edit the current message +edit-type ^E edit the current message's Content-Type +exit x exit without saving changes +extract-keys ^K extract PGP public keys +fetch-mail G retrieve mail from POP server +flag-message F toggle a message's 'important' flag +forget-passphrase ^F wipe PGP passphrase from memory +forward-message f forward a message with comments +group-reply g reply to all recipients +limit l show only messages matching a pattern +list-reply L reply to specified mailing list +mail m compose a new mail message +mail-key ESC k mail a PGP public key +next-new TAB jump to the next new message +next-subthread ESC n jump to the next subthread +next-thread ^N jump to the next thread +next-undeleted j move to the next undeleted message +next-unread not bound jump to the next unread message +parent-message P jump to parent message in thread +pipe-message | pipe message/attachment to a shell command +previous-new ESC TAB jump to the previous new message +previous-page Z move to the previous page +previous-subthread ESC p jump to previous subthread +previous-thread ^P jump to previous thread +previous-undeleted k move to the last undelete message +previous-unread not bound jump to the previous unread message +print-message p print the current entry +query Q query external program for addresses +quit q save changes to mailbox and quit +read-subthread ESC r mark the current subthread as read +read-thread ^R mark the current thread as read +recall-message R recall a postponed message +reply r reply to a message +resend-message ESC e resend message and preserve MIME structure +save-message s save message/attachment to a file +set-flag w set a status flag on a message +show-version V show the Mutt version number and date +show-limit ESC l show currently active limit pattern, if any +sort-mailbox o sort messages +sort-reverse O sort messages in reverse order +sync-mailbox $ save changes to mailbox +tag-pattern T tag messages matching a pattern +tag-thread ESC t tag/untag all messages in the current thread +toggle-new N toggle a message's 'new' flag +toggle-write % toggle whether the mailbox will be rewritten +undelete-message u undelete the current entry +undelete-pattern U undelete messages matching a pattern +undelete-subthread ESC u undelete all messages in subthread +undelete-thread ^U undelete all messages in thread +untag-pattern ^T untag messages matching a pattern +view-attachments v show MIME attachments +</verb> +<sect2>pager +<p> +<verb> +bottom not bound jump to the bottom of the message +bounce-message b remail a message to another user +change-folder c open a different folder +change-folder-readonly ESC c open a different folder in read only mode +check-traditional-pgp ESC P check for classic pgp +copy-message C copy a message to a file/mailbox +create-alias a create an alias from a message sender +decode-copy ESC C decode a message and copy it to a file/mailbox +decode-save ESC s decode a message and save it to a file/mailbox +delete-message d delete the current entry +delete-subthread ESC d delete all messages in subthread +delete-thread ^D delete all messages in thread +display-address @ display full address of sender +display-toggle-weed h display message and toggle header weeding +edit e edit the current message +edit-type ^E edit the current message's Content-Type +enter-command : enter a muttrc command +exit i return to the main-menu +extract-keys ^K extract PGP public keys +flag-message F toggle a message's 'important' flag +forget-passphrase ^F wipe PGP passphrase from memory +forward-message f forward a message with comments +group-reply g reply to all recipients +half-up not bound move up one-half page +half-down not bound move down one-half page +help ? this screen +list-reply L reply to specified mailing list +mail m compose a new mail message +mail-key ESC k mail a PGP public key +mark-as-new N toggle a message's 'new' flag +next-line RET scroll down one line +next-entry J move to the next entry +next-new TAB jump to the next new message +next-page move to the next page +next-subthread ESC n jump to the next subthread +next-thread ^N jump to the next thread +next-undeleted j move to the next undeleted message +next-unread not bound jump to the next unread message +parent-message P jump to parent message in thread +pipe-message | pipe message/attachment to a shell command +previous-line BackSpace scroll up one line +previous-entry K move to the previous entry +previous-new not bound jump to the previous new message +previous-page - move to the previous page +previous-subthread ESC p jump to previous subthread +previous-thread ^P jump to previous thread +previous-undeleted k move to the last undelete message +previous-unread not bound jump to the previous unread message +print-message p print the current entry +quit Q save changes to mailbox and quit +read-subthread ESC r mark the current subthread as read +read-thread ^R mark the current thread as read +recall-message R recall a postponed message +redraw-screen ^L clear and redraw the screen +reply r reply to a message +save-message s save message/attachment to a file +search / search for a regular expression +search-next n search for next match +search-opposite not bound search for next match in opposite direction +search-reverse ESC / search backwards for a regular expression +search-toggle \ toggle search pattern coloring +shell-escape ! invoke a command in a subshell +show-version V show the Mutt version number and date +skip-quoted S skip beyond quoted text +sync-mailbox $ save changes to mailbox +tag-message t tag a message +toggle-quoted T toggle display of quoted text +top ^ jump to the top of the message +undelete-message u undelete the current entry +undelete-subthread ESC u undelete all messages in subthread +undelete-thread ^U undelete all messages in thread +view-attachments v show MIME attachments +</verb> +<sect2>alias +<p> +<verb> +search / search for a regular expression +search-next n search for next match +search-reverse ESC / search backwards for a regular expression +</verb> +<sect2>query +<p> +<verb> +create-alias a create an alias from a message sender +mail m compose a new mail message +query Q query external program for addresses +query-append A append new query results to current results +search / search for a regular expression +search-next n search for next match +search-opposite not bound search for next match in opposite direction +search-reverse ESC / search backwards for a regular expression +</verb> +<sect2>attach +<p> +<verb> +bounce-message b remail a message to another user +collapse-parts v toggle display of subparts +delete-entry d delete the current entry +display-toggle-weed h display message and toggle header weeding +edit-type ^E edit the current entry's Content-Type +extract-keys ^K extract PGP public keys +forward-message f forward a message with comments +group-reply g reply to all recipients +list-reply L reply to specified mailing list +pipe-entry | pipe message/attachment to a shell command +print-entry p print the current entry +reply r reply to a message +resend-message ESC e resend message and preserve MIME structure +save-entry s save message/attachment to a file +undelete-entry u undelete the current entry +view-attach RET view attachment using mailcap entry if necessary +view-mailcap m force viewing of attachment using mailcap +view-text T view attachment as text +</verb> +<sect2>compose +<p> +<verb> +attach-file a attach a file(s) to this message +attach-message A attach message(s) to this message +attach-key ESC k attach a PGP public key +copy-file C save message/attachment to a file +detach-file D delete the current entry +display-toggle-weed h display message and toggle header weeding +edit-bcc b edit the BCC list +edit-cc c edit the CC list +edit-description d edit attachment description +edit-encoding ^E edit attachment transfer-encoding +edit-fcc f enter a file to save a copy of this message in +edit-from ESC f edit the from: field +edit-file ^X e edit the file to be attached +edit-headers E edit the message with headers +edit e edit the message +edit-mime m edit attachment using mailcap entry +edit-reply-to r edit the Reply-To field +edit-subject s edit the subject of this message +edit-to t edit the TO list +edit-type ^T edit attachment type +filter-entry F filter attachment through a shell command +forget-passphrase ^F wipe PGP passphrase from memory +ispell i run ispell on the message +new-mime n compose new attachment using mailcap entry +pgp-menu p show PGP options +pipe-entry | pipe message/attachment to a shell command +postpone-message P save this message to send later +print-entry l print the current entry +rename-file R rename/move an attached file +send-message y send the message +toggle-unlink u toggle whether to delete file after sending it +view-attach RET view attachment using mailcap entry if necessary +write-fcc w write the message to a folder +</verb> +<sect2>postpone +<p> +<verb> +delete-entry d delete the current entry +undelete-entry u undelete the current entry +</verb> +<sect2>browser +<p> +<verb> +change-dir c change directories +check-new TAB check mailboxes for new mail +enter-mask m enter a file mask +search / search for a regular expression +search-next n search for next match +search-reverse ESC / search backwards for a regular expression +select-new N select a new file in this directory +sort o sort messages +sort-reverse O sort messages in reverse order +toggle-mailboxes TAB toggle whether to browse mailboxes or all files +view-file SPACE view file +subscribe s subscribe to current mailbox (IMAP Only) +unsubscribe u unsubscribe to current mailbox (IMAP Only) +toggle-subscribed T toggle view all/subscribed mailboxes (IMAP Only) +</verb> +<sect2>pgp +<p> +<verb> +view-name % view the key's user id +verify-key c verify a PGP public key +</verb> +<sect2>editor +<p> +<verb> +backspace BackSpace delete the char in front of the cursor +backward-char ^B move the cursor one character to the left +backward-word ESC b move the cursor to the previous word +bol ^A jump to the beginning of the line +buffy-cycle Space cycle among incoming mailboxes +capitalize-word ESC c uppercase the first character in the word +complete TAB complete filename or alias +complete-query ^T complete address with query +delete-char ^D delete the char under the cursor +downcase-word ESC l lowercase all characters in current word +eol ^E jump to the end of the line +forward-char ^F move the cursor one character to the right +forward-word ESC f move the cursor to the next word +history-down not bound scroll down through the history list +history-up not bound scroll up through the history list +kill-eol ^K delete chars from cursor to end of line +kill-eow ESC d delete chars from cursor to end of word +kill-line ^U delete all chars on the line +kill-word ^W delete the word in front of the cursor +quote-char ^V quote the next typed key +transpose-chars not bound transpose character under cursor with previous +upcase-word ESC u uppercase all characters in current word +</verb> + +<sect>Miscellany +<p> + +<sect1>Acknowledgements +<p> +Kari Hurtta +<htmlurl url="mailto:kari.hurtta@fmi.fi" name="<kari.hurtta@fmi.fi>"> +co-developed the original MIME parsing code back in the ELM-ME days. + +The following people have been very helpful to the development of Mutt: + +Vikas Agnihotri <htmlurl url="mailto:vikasa@writeme.com" name="<vikasa@writeme.com>">,<newline> +Francois Berjon <htmlurl url="mailto:Francois.Berjon@aar.alcatel-alsthom.fr" name="<Francois.Berjon@aar.alcatel-alsthom.fr>">,<newline> +Aric Blumer <htmlurl url="mailto:aric@fore.com" name="<aric@fore.com>">,<newline> +John Capo <htmlurl url="mailto:jc@irbs.com" name="<jc@irbs.com>">,<newline> +David Champion <htmlurl url="mailto:dgc@uchicago.edu" name="<dgc@uchicago.edu">,<newline> +Brendan Cully <htmlurl url="mailto:brendan@kublai.com" name="<brendan@kublai.com>">,<newline> +Liviu Daia <htmlurl url="mailto:daia@stoilow.imar.ro" name="<daia@stoilow.imar.ro>">,<newline> +Thomas E. Dickey <htmlurl url="mailto:dickey@herndon4.his.com" name="<dickey@herndon4.his.com>">,<newline> +David DeSimone <htmlurl url="mailto:fox@convex.hp.com" name="<fox@convex.hp.com>">,<newline> +Nickolay N. Dudorov <htmlurl url="mailto:nnd@wint.itfs.nsk.su" name="<nnd@wint.itfs.nsk.su>">,<newline> +Ruslan Ermilov <htmlurl url="mailto:ru@freebsd.org" name="<ru@freebsd.org>">,<newline> +Edmund Grimley Evans <htmlurl url="mailto:edmundo@rano.org" name="<edmundo@rano.org">,<newline> +Michael Finken <htmlurl url="mailto:finken@conware.de" name="<finken@conware.de>">,<newline> +Sven Guckes <htmlurl url="mailto:guckes@math.fu-berlin.de" name="<guckes@math.fu-berlin.de>">,<newline> +Lars Hecking <htmlurl url="mailto:lhecking@nmrc.ie" name="<lhecking@nmrc.ie>">,<newline> +Mark Holloman <htmlurl url="mailto:holloman@nando.net" name="<holloman@nando.net>">,<newline> +Andreas Holzmann <htmlurl url="mailto:holzmann@fmi.uni-passau.de" name="<holzmann@fmi.uni-passau.de>">,<newline> +Marco d'Itri <htmlurl url="mailto:md@linux.it" name="<md@linux.it>">,<newline> +Björn Jacke <htmlurl url="mailto:bjacke@suse.com" name="<bjacke@suse.com>">,<newline> +Byrial Jensen <htmlurl url="mailto:byrial@image.dk" name="<byrial@image.dk>">,<newline> +David Jeske <htmlurl url="mailto:jeske@igcom.net" name="<jeske@igcom.net>">,<newline> +Christophe Kalt <htmlurl url="mailto:kalt@hugo.int-evry.fr" name="<kalt@hugo.int-evry.fr>">,<newline> +Tommi Komulainen <htmlurl url="mailto:Tommi.Komulainen@iki.fi" name="<Tommi.Komulainen@iki.fi>">,<newline> +Felix von Leitner (a.k.a ``Fefe'') <htmlurl url="mailto:leitner@math.fu-berlin.de" name="<leitner@math.fu-berlin.de>">,<newline> +Brandon Long <htmlurl url="mailto:blong@fiction.net" name="<blong@fiction.net>">,<newline> +Jimmy Mäkelä <htmlurl url="mailto:jmy@flashback.net" name="<jmy@flashback.net>">,<newline> +Lars Marowsky-Bree <htmlurl url="mailto:lmb@pointer.in-minden.de" name="<lmb@pointer.in-minden.de>">,<newline> +Thomas ``Mike'' Michlmayr <htmlurl url="mailto:mike@cosy.sbg.ac.at" name="<mike@cosy.sbg.ac.at>">,<newline> +Andrew W. Nosenko <htmlurl url="mailto:awn@bcs.zp.ua" name="<awn@bcs.zp.ua>">,<newline> +David O'Brien <htmlurl url="mailto:obrien@Nuxi.cs.ucdavis.edu" name="<obrien@Nuxi.cs.ucdavis.edu>">,<newline> +Clint Olsen <htmlurl url="mailto:olsenc@ichips.intel.com" name="<olsenc@ichips.intel.com>">,<newline> +Park Myeong Seok <htmlurl url="mailto:pms@romance.kaist.ac.kr" name="<pms@romance.kaist.ac.kr>">,<newline> +Thomas Parmelan <htmlurl url="mailto:tom@ankh.fr.eu.org" name="<tom@ankh.fr.eu.org>">,<newline> +Ollivier Robert <htmlurl url="mailto:roberto@keltia.freenix.fr" name="<roberto@keltia.freenix.fr>">,<newline> +Thomas Roessler <htmlurl url="mailto:roessler@does-not-exist.org" name="<roessler@does-not-exist.org>">,<newline> +Roland Rosenfeld <htmlurl url="roland@spinnaker.de" name="<roland@spinnaker.de>">,<newline> +TAKIZAWA Takashi <htmlurl url="taki@luna.email.ne.jp" name="<taki@luna.email.ne.jp>">,<newline> +Allain Thivillon <htmlurl url="mailto:Allain.Thivillon@alma.fr" name="<Allain.Thivillon@alma.fr>">,<newline> +Gero Treuner <htmlurl url="mailto:gero@faveve.uni-stuttgart.de" name="<gero@faveve.uni-stuttgart.de>">,<newline> +Vsevolod Volkov <htmlurl url="mailto:vvv@lucky.net" name="<vvv@lucky.net>">,<newline> +Ken Weinert <htmlurl url="mailto:kenw@ihs.com" name="<kenw@ihs.com>"> + +<sect1>About this document +<p> +This document was written in SGML, and then rendered using the +<htmlurl url="http://www.sgmltools.org/" name="sgml-tools"> package. + +</article> diff --git a/doc/manual.txt b/doc/manual.txt new file mode 100644 index 0000000..6b1b1e9 --- /dev/null +++ b/doc/manual.txt @@ -0,0 +1,7016 @@ + The Mutt E-Mail Client + by Michael Elkins <me@cs.hmc.edu> + version 1.5.6 + + ``All mail clients suck. This one just sucks less.'' -me, circa 1995 + ______________________________________________________________________ + + Table of Contents + + 1. Introduction + + 1.1 Mutt Home Page + 1.2 Mailing Lists + 1.3 Software Distribution Sites + 1.4 IRC + 1.5 USENET + 1.6 Copyright + + 2. Getting Started + + 2.1 Moving Around in Menus + 2.2 Editing Input Fields + 2.3 Reading Mail - The Index and Pager + 2.3.1 The Message Index + 2.3.1.1 Status Flags + 2.3.2 The Pager + 2.3.3 Threaded Mode + 2.3.4 Miscellaneous Functions + 2.4 Sending Mail + 2.4.1 Editing the message header + 2.4.2 Using Mutt with PGP + 2.4.3 Sending anonymous messages via mixmaster. + 2.5 Forwarding and Bouncing Mail + 2.6 Postponing Mail + 2.7 Reading news via NNTP + + 3. Configuration + + 3.1 Syntax of Initialization Files + 3.2 Defining/Using aliases + 3.3 Changing the default key bindings + 3.4 Defining aliases for character sets + 3.5 Setting variables based upon mailbox + 3.6 Keyboard macros + 3.7 Using color and mono video attributes + 3.8 Ignoring (weeding) unwanted message headers + 3.9 Alternative addresses + 3.10 Mailing lists + 3.11 Using Multiple spool mailboxes + 3.12 Defining mailboxes which receive mail + 3.13 User defined headers + 3.14 Defining the order of headers when viewing messages + 3.15 Specify default save filename + 3.16 Specify default Fcc: mailbox when composing + 3.17 Specify default save filename and default Fcc: mailbox at once + 3.18 Change settings based upon message recipients + 3.19 Change settings before formatting a message + 3.20 Choosing the cryptographic key of the recipient + 3.21 Adding key sequences to the keyboard buffer + 3.22 Executing functions + 3.23 Message Scoring + 3.24 Setting variables + 3.25 Reading initialization commands from another file + 3.26 Removing hooks + + 4. Advanced Usage + + 4.1 Regular Expressions + 4.2 Patterns + 4.2.1 Pattern Modifier + 4.2.2 Complex Patterns + 4.2.3 Searching by Date + 4.3 Using Tags + 4.4 Using Hooks + 4.4.1 Message Matching in Hooks + 4.5 External Address Queries + 4.6 Mailbox Formats + 4.7 Mailbox Shortcuts + 4.8 Handling Mailing Lists + 4.9 Delivery Status Notification (DSN) Support + 4.10 POP3 Support (OPTIONAL) + 4.11 IMAP Support (OPTIONAL) + 4.11.1 The Folder Browser + 4.11.2 Authentication + 4.12 Managing multiple IMAP/POP accounts (OPTIONAL) + 4.13 Start a WWW Browser on URLs (EXTERNAL) + + 5. Mutt's MIME Support + + 5.1 Using MIME in Mutt + 5.1.1 Viewing MIME messages in the pager + 5.1.2 The Attachment Menu + 5.1.3 The Compose Menu + 5.2 MIME Type configuration with + 5.3 MIME Viewer configuration with + 5.3.1 The Basics of the mailcap file + 5.3.2 Secure use of mailcap + 5.3.3 Advanced mailcap Usage + 5.3.3.1 Optional Fields + 5.3.3.2 Search Order + 5.3.3.3 Command Expansion + 5.3.4 Example mailcap files + 5.4 MIME Autoview + 5.5 MIME Multipart/Alternative + 5.6 MIME Lookup + + 6. Reference + + 6.1 Command line options + 6.2 Configuration Commands + 6.3 Configuration variables + 6.3.1 abort_nosubject + 6.3.2 abort_unmodified + 6.3.3 alias_file + 6.3.4 alias_format + 6.3.5 allow_8bit + 6.3.6 allow_ansi + 6.3.7 arrow_cursor + 6.3.8 ascii_chars + 6.3.9 askbcc + 6.3.10 askcc + 6.3.11 ask_follow_up + 6.3.12 ask_x_comment_to + 6.3.13 attach_format + 6.3.14 attach_sep + 6.3.15 attach_split + 6.3.16 attribution + 6.3.17 autoedit + 6.3.18 auto_tag + 6.3.19 beep + 6.3.20 beep_new + 6.3.21 bounce + 6.3.22 bounce_delivered + 6.3.23 catchup_newsgroup + 6.3.24 charset + 6.3.25 check_new + 6.3.26 collapse_unread + 6.3.27 uncollapse_jump + 6.3.28 compose_format + 6.3.29 confirmappend + 6.3.30 confirmcreate + 6.3.31 connect_timeout + 6.3.32 content_type + 6.3.33 copy + 6.3.34 crypt_autopgp + 6.3.35 crypt_autosmime + 6.3.36 date_format + 6.3.37 default_hook + 6.3.38 delete + 6.3.39 delete_untag + 6.3.40 digest_collapse + 6.3.41 display_filter + 6.3.42 dotlock_program + 6.3.43 dsn_notify + 6.3.44 dsn_return + 6.3.45 duplicate_threads + 6.3.46 edit_headers + 6.3.47 editor + 6.3.48 encode_from + 6.3.49 envelope_from + 6.3.50 escape + 6.3.51 fast_reply + 6.3.52 fcc_attach + 6.3.53 fcc_clear + 6.3.54 folder + 6.3.55 folder_format + 6.3.56 followup_to + 6.3.57 followup_to_poster + 6.3.58 force_name + 6.3.59 forward_decode + 6.3.60 forward_edit + 6.3.61 forward_format + 6.3.62 forward_quote + 6.3.63 from + 6.3.64 gecos_mask + 6.3.65 group_index_format + 6.3.66 hdrs + 6.3.67 header + 6.3.68 help + 6.3.69 hidden_host + 6.3.70 hide_limited + 6.3.71 hide_missing + 6.3.72 hide_top_limited + 6.3.73 hide_top_missing + 6.3.74 history + 6.3.75 honor_followup_to + 6.3.76 hostname + 6.3.77 ignore_list_reply_to + 6.3.78 imap_authenticators + 6.3.79 imap_delim_chars + 6.3.80 imap_force_ssl + 6.3.81 imap_home_namespace + 6.3.82 imap_keepalive + 6.3.83 imap_list_subscribed + 6.3.84 imap_pass + 6.3.85 imap_passive + 6.3.86 imap_peek + 6.3.87 imap_servernoise + 6.3.88 imap_user + 6.3.89 implicit_autoview + 6.3.90 include + 6.3.91 indent_string + 6.3.92 index_format + 6.3.93 inews + 6.3.94 ispell + 6.3.95 keep_flagged + 6.3.96 locale + 6.3.97 mail_check + 6.3.98 mailcap_path + 6.3.99 mailcap_sanitize + 6.3.100 maildir_trash + 6.3.101 mark_old + 6.3.102 markers + 6.3.103 mask + 6.3.104 mbox + 6.3.105 mbox_type + 6.3.106 metoo + 6.3.107 menu_scroll + 6.3.108 meta_key + 6.3.109 mh_purge + 6.3.110 mh_seq_flagged + 6.3.111 mh_seq_replied + 6.3.112 mh_seq_unseen + 6.3.113 mime_forward + 6.3.114 mime_forward_decode + 6.3.115 mime_forward_rest + 6.3.116 mime_subject + 6.3.117 mix_entry_format + 6.3.118 mixmaster + 6.3.119 move + 6.3.120 message_format + 6.3.121 narrow_tree + 6.3.122 news_cache_dir + 6.3.123 news_server + 6.3.124 newsrc + 6.3.125 nntp_context + 6.3.126 nntp_load_description + 6.3.127 nntp_user + 6.3.128 nntp_pass + 6.3.129 nntp_poll + 6.3.130 nntp_reconnect + 6.3.131 pager + 6.3.132 pager_context + 6.3.133 pager_format + 6.3.134 pager_index_lines + 6.3.135 pager_stop + 6.3.136 crypt_autosign + 6.3.137 crypt_autoencrypt + 6.3.138 pgp_ignore_subkeys + 6.3.139 crypt_replyencrypt + 6.3.140 crypt_replysign + 6.3.141 crypt_replysignencrypted + 6.3.142 crypt_timestamp + 6.3.143 pgp_use_gpg_agent + 6.3.144 crypt_verify_sig + 6.3.145 smime_is_default + 6.3.146 smime_ask_cert_label + 6.3.147 smime_decrypt_use_default_key + 6.3.148 pgp_entry_format + 6.3.149 pgp_good_sign + 6.3.150 pgp_check_exit + 6.3.151 pgp_long_ids + 6.3.152 pgp_retainable_sigs + 6.3.153 pgp_show_unusable + 6.3.154 pgp_sign_as + 6.3.155 pgp_strict_enc + 6.3.156 pgp_timeout + 6.3.157 pgp_sort_keys + 6.3.158 pgp_create_traditional + 6.3.159 pgp_auto_traditional + 6.3.160 pgp_decode_command + 6.3.161 pgp_getkeys_command + 6.3.162 pgp_verify_command + 6.3.163 pgp_decrypt_command + 6.3.164 pgp_clearsign_command + 6.3.165 pgp_sign_command + 6.3.166 pgp_encrypt_sign_command + 6.3.167 pgp_encrypt_only_command + 6.3.168 pgp_import_command + 6.3.169 pgp_export_command + 6.3.170 pgp_verify_key_command + 6.3.171 pgp_list_secring_command + 6.3.172 pgp_list_pubring_command + 6.3.173 forward_decrypt + 6.3.174 smime_timeout + 6.3.175 smime_encrypt_with + 6.3.176 smime_keys + 6.3.177 smime_ca_location + 6.3.178 smime_certificates + 6.3.179 smime_decrypt_command + 6.3.180 smime_verify_command + 6.3.181 smime_verify_opaque_command + 6.3.182 smime_sign_command + 6.3.183 smime_sign_opaque_command + 6.3.184 smime_encrypt_command + 6.3.185 smime_pk7out_command + 6.3.186 smime_get_cert_command + 6.3.187 smime_get_signer_cert_command + 6.3.188 smime_import_cert_command + 6.3.189 smime_get_cert_email_command + 6.3.190 smime_default_key + 6.3.191 ssl_starttls + 6.3.192 certificate_file + 6.3.193 ssl_usesystemcerts + 6.3.194 entropy_file + 6.3.195 ssl_use_sslv2 + 6.3.196 ssl_use_sslv3 + 6.3.197 ssl_use_tlsv1 + 6.3.198 pipe_split + 6.3.199 pipe_decode + 6.3.200 pipe_sep + 6.3.201 pop_authenticators + 6.3.202 pop_auth_try_all + 6.3.203 pop_checkinterval + 6.3.204 pop_delete + 6.3.205 pop_host + 6.3.206 pop_last + 6.3.207 pop_reconnect + 6.3.208 pop_user + 6.3.209 pop_pass + 6.3.210 post_indent_string + 6.3.211 post_moderated + 6.3.212 postpone + 6.3.213 postponed + 6.3.214 preconnect + 6.3.215 print + 6.3.216 print_command + 6.3.217 print_decode + 6.3.218 print_split + 6.3.219 prompt_after + 6.3.220 query_command + 6.3.221 quit + 6.3.222 quote_regexp + 6.3.223 read_inc + 6.3.224 read_only + 6.3.225 realname + 6.3.226 recall + 6.3.227 record + 6.3.228 reply_regexp + 6.3.229 reply_self + 6.3.230 reply_to + 6.3.231 resolve + 6.3.232 reverse_alias + 6.3.233 reverse_name + 6.3.234 reverse_realname + 6.3.235 rfc2047_parameters + 6.3.236 save_address + 6.3.237 save_empty + 6.3.238 save_name + 6.3.239 score + 6.3.240 score_threshold_delete + 6.3.241 score_threshold_flag + 6.3.242 score_threshold_read + 6.3.243 send_charset + 6.3.244 sendmail + 6.3.245 sendmail_wait + 6.3.246 shell + 6.3.247 save_unsubscribed + 6.3.248 show_new_news + 6.3.249 show_only_unread + 6.3.250 sig_dashes + 6.3.251 sig_on_top + 6.3.252 signature + 6.3.253 simple_search + 6.3.254 smart_wrap + 6.3.255 smileys + 6.3.256 sleep_time + 6.3.257 sort + 6.3.258 sort_alias + 6.3.259 sort_aux + 6.3.260 sort_browser + 6.3.261 sort_re + 6.3.262 spoolfile + 6.3.263 status_chars + 6.3.264 status_format + 6.3.265 status_on_top + 6.3.266 strict_threads + 6.3.267 suspend + 6.3.268 text_flowed + 6.3.269 thread_received + 6.3.270 thorough_search + 6.3.271 tilde + 6.3.272 timeout + 6.3.273 tmpdir + 6.3.274 to_chars + 6.3.275 tunnel + 6.3.276 use_8bitmime + 6.3.277 use_domain + 6.3.278 use_from + 6.3.279 use_ipv6 + 6.3.280 user_agent + 6.3.281 visual + 6.3.282 wait_key + 6.3.283 weed + 6.3.284 wrap_search + 6.3.285 wrapmargin + 6.3.286 write_inc + 6.3.287 write_bcc + 6.3.288 x_comment_to + 6.4 Functions + 6.4.1 generic + 6.4.2 index + 6.4.3 pager + 6.4.4 alias + 6.4.5 query + 6.4.6 attach + 6.4.7 compose + 6.4.8 postpone + 6.4.9 browser + 6.4.10 pgp + 6.4.11 editor + + 7. Miscellany + + 7.1 Acknowledgements + 7.2 About this document + + ______________________________________________________________________ + + 11.. IInnttrroodduuccttiioonn + + MMuutttt is a small but very powerful text-based MIME mail client. Mutt + is highly configurable, and is well suited to the mail power user with + advanced features like key bindings, keyboard macros, mail threading, + regular expression searches and a powerful pattern matching language + for selecting groups of messages. + + 11..11.. MMuutttt HHoommee PPaaggee + + http://www.mutt.org/ + + 11..22.. MMaaiilliinngg LLiissttss + + To subscribe to one of the following mailing lists, send a message + with the word _s_u_b_s_c_r_i_b_e in the body to list-name_-_r_e_q_u_e_s_t@mutt.org. + + · mutt-announce@mutt.org -- low traffic list for announcements + + · mutt-users@mutt.org -- help, bug reports and feature requests + + · mutt-dev@mutt.org -- development mailing list + + NNoottee:: all messages posted to _m_u_t_t_-_a_n_n_o_u_n_c_e are automatically forwarded + to _m_u_t_t_-_u_s_e_r_s, so you do not need to be subscribed to both lists. + + 11..33.. SSooffttwwaarree DDiissttrriibbuuttiioonn SSiitteess + + · ftp://ftp.mutt.org/mutt/ + + For a list of mirror sites, please refer to + http://www.mutt.org/download.html. + + 11..44.. IIRRCC + + Visit channel _#_m_u_t_t on OpenProjects.Net (www.openprojects.net) to chat + with other people interested in Mutt. + + 11..55.. UUSSEENNEETT + + See the newsgroup comp.mail.mutt. + + 11..66.. CCooppyyrriigghhtt + + Mutt is Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu> and + others + + 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + + 22.. GGeettttiinngg SSttaarrtteedd + + This section is intended as a brief overview of how to use Mutt. + There are many other features which are described elsewhere in the + manual. There is even more information available in the Mutt FAQ and + various web pages. See the Mutt Page for more details. + + The keybindings described in this section are the defaults as + distributed. Your local system administrator may have altered the + defaults for your site. You can always type ``?'' in any menu to + display the current bindings. + + The first thing you need to do is invoke mutt, simply by typing mutt + at the command line. There are various command-line options, see + either the mutt man page or the ``reference''. + + 22..11.. MMoovviinngg AArroouunndd iinn MMeennuuss + + Information is presented in menus, very similar to ELM. Here is a + table showing the common keys used to navigate menus in Mutt. + + j or Down next-entry move to the next entry + k or Up previous-entry move to the previous entry + z or PageDn page-down go to the next page + Z or PageUp page-up go to the previous page + = or Home first-entry jump to the first entry + * or End last-entry jump to the last entry + q quit exit the current menu + ? help list all keybindings for the current menu + + 22..22.. EEddiittiinngg IInnppuutt FFiieellddss + + Mutt has a builtin line editor which is used as the primary way to + input textual data such as email addresses or filenames. The keys + used to move around while editing are very similar to those of Emacs. + + ^A or <Home> bol move to the start of the line + ^B or <Left> backward-char move back one char + Esc B backward-word move back one word + ^D or <Delete> delete-char delete the char under the cursor + ^E or <End> eol move to the end of the line + ^F or <Right> forward-char move forward one char + Esc F forward-word move forward one word + <Tab> complete complete filename or alias + ^T complete-query complete address with query + ^K kill-eol delete to the end of the line + ESC d kill-eow delete to the end ot the word + ^W kill-word kill the word in front of the cursor + ^U kill-line delete entire line + ^V quote-char quote the next typed key + <Up> history-up recall previous string from history + <Down> history-down recall next string from history + <BackSpace> backspace kill the char in front of the cursor + Esc u upcase-word convert word to upper case + Esc l downcase-word convert word to lower case + Esc c capitalize-word capitalize the word + ^G n/a abort + <Return> n/a finish editing + + You can remap the _e_d_i_t_o_r functions using the ``bind'' command. For + example, to make the _D_e_l_e_t_e key delete the character in front of the + cursor rather than under, you could use + + bind editor <delete> backspace + + 22..33.. RReeaaddiinngg MMaaiill -- TThhee IInnddeexx aanndd PPaaggeerr + + Similar to many other mail clients, there are two modes in which mail + is read in Mutt. The first is the index of messages in the mailbox, + which is called the ``index'' in Mutt. The second mode is the display + of the message contents. This is called the ``pager.'' + + The next few sections describe the functions provided in each of these + modes. + + 22..33..11.. TThhee MMeessssaaggee IInnddeexx + + c change to a different mailbox + ESC c change to a folder in read-only mode + C copy the current message to another mailbox + ESC C decode a message and copy it to a folder + ESC s decode a message and save it to a folder + D delete messages matching a pattern + d delete the current message + F mark as important + l show messages matching a pattern + N mark message as new + o change the current sort method + O reverse sort the mailbox + q save changes and exit + s save-message + T tag messages matching a pattern + t toggle the tag on a message + ESC t toggle tag on entire message thread + U undelete messages matching a pattern + u undelete-message + v view-attachments + x abort changes and exit + <Return> display-message + <Tab> jump to the next new message + @ show the author's full e-mail address + $ save changes to mailbox + / search + ESC / search-reverse + ^L clear and redraw the screen + ^T untag messages matching a pattern + + 22..33..11..11.. SSttaattuuss FFllaaggss + + In addition to who sent the message and the subject, a short summary + of the disposition of each message is printed beside the message + number. Zero or more of the following ``flags'' may appear, which + mean: + + DD message is deleted (is marked for deletion) + + dd message have attachments marked for deletion + + KK contains a PGP public key + + NN message is new + + OO message is old + + PP message is PGP encrypted + + rr message has been replied to + + SS message is signed, and the signature is succesfully verified + + ss message is signed + + !! message is flagged + + ** message is tagged + + Some of the status flags can be turned on or off using + + · sseett--ffllaagg (default: w) + + · cclleeaarr--ffllaagg (default: W) + + Furthermore, the following flags reflect who the message is addressed + to. They can be customized with the ``$to_chars'' variable. + + ++ message is to you and you only + + TT message is to you, but also to or cc'ed to others + + CC message is cc'ed to you + + FF message is from you + + LL message is sent to a subscribed mailing list + + 22..33..22.. TThhee PPaaggeerr + + By default, Mutt uses its builtin pager to display the body of + messages. The pager is very similar to the Unix program _l_e_s_s though + not nearly as featureful. + + <Return> go down one line + <Space> display the next page (or next message if at the end of a message) + - go back to the previous page + n search for next match + S skip beyond quoted text + T toggle display of quoted text + ? show keybindings + / search for a regular expression (pattern) + ESC / search backwards for a regular expression + \ toggle search pattern coloring + ^ jump to the top of the message + + In addition, many of the functions from the _i_n_d_e_x are available in the + pager, such as _d_e_l_e_t_e_-_m_e_s_s_a_g_e or _c_o_p_y_-_m_e_s_s_a_g_e (this is one advantage + over using an external pager to view messages). + + Also, the internal pager supports a couple other advanced features. + For one, it will accept and translate the ``standard'' nroff sequences + for bold and underline. These sequences are a series of either the + letter, backspace (^H), the letter again for bold or the letter, + backspace, ``_'' for denoting underline. Mutt will attempt to display + these in bold and underline respectively if your terminal supports + them. If not, you can use the bold and underline ``color'' objects to + specify a color or mono attribute for them. + + Additionally, the internal pager supports the ANSI escape sequences + for character attributes. Mutt translates them into the correct color + and character settings. The sequences Mutt supports are: + + ESC [ Ps;Ps;Ps;...;Ps m + where Ps = + 0 All Attributes Off + 1 Bold on + 4 Underline on + 5 Blink on + 7 Reverse video on + 3x Foreground color is x + 4x Background color is x + + Colors are + 0 black + 1 red + 2 green + 3 yellow + 4 blue + 5 magenta + 6 cyan + 7 white + + Mutt uses these attributes for handling text/enriched messages, and + they can also be used by an external ``autoview'' script for + highlighting purposes. NNoottee:: If you change the colors for your + display, for example by changing the color associated with color2 for + your xterm, then that color will be used instead of green. + + 22..33..33.. TThhrreeaaddeedd MMooddee + + When the mailbox is ``sorted'' by _t_h_r_e_a_d_s, there are a few additional + functions available in the _i_n_d_e_x and _p_a_g_e_r modes. + + ^D delete-thread delete all messages in the current thread + ^U undelete-thread undelete all messages in the current thread + ^N next-thread jump to the start of the next thread + ^P previous-thread jump to the start of the previous thread + ^R read-thread mark the current thread as read + ESC d delete-subthread delete all messages in the current subthread + ESC u undelete-subthread undelete all messages in the current subthread + ESC n next-subthread jump to the start of the next subthread + ESC p previous-subthread jump to the start of the previous subthread + ESC r read-subthread mark the current subthread as read + ESC t tag-thread toggle the tag on the current thread + ESC v collapse-thread toggle collapse for the current thread + ESC V collapse-all toggle collapse for all threads + P parent-message jump to parent message in thread + + NNoottee:: Collapsing a thread displays only the first message in the + thread and hides the others. This is useful when threads contain so + many messages that you can only see a handful of threads on the + screen. See %M in ``$index_format''. For example, you could use + "%?M?(#%03M)&(%4l)?" in ``$index_format'' to optionally display the + number of hidden messages if the thread is collapsed. + + See also: ``$strict_threads''. + + 22..33..44.. MMiisscceellllaanneeoouuss FFuunnccttiioonnss + + ccrreeaattee--aalliiaass (default: a) + + Creates a new alias based upon the current message (or prompts for a + new one). Once editing is complete, an ``alias'' command is added to + the file specified by the ``$alias_file'' variable for future use. + NNoottee:: Specifying an ``$alias_file'' does not add the aliases specified + there-in, you must also ``source'' the file. + + cchheecckk--ttrraaddiittiioonnaall--ppggpp (default: ESC P) + + This function will search the current message for content signed or + encrypted with PGP the "traditional" way, that is, without proper MIME + tagging. Technically, this function will temporarily change the MIME + content types of the body parts containing PGP data; this is similar + to the ``edit-type'' function's effect. + + ddiissppllaayy--ttooggggllee--wweeeedd (default: h) + + Toggles the weeding of message header fields specified by ``ignore'' + commands. + + eeddiitt (default: e) + + This command (available in the ``index'' and ``pager'') allows you to + edit the raw current message as it's present in the mail folder. + After you have finished editing, the changed message will be appended + to the current folder, and the original message will be marked for + deletion. + + eeddiitt--ttyyppee + (default: ^E on the attachment menu, and in the pager and index menus; + ^T on the compose menu) + + This command is used to temporarily edit an attachment's content type + to fix, for instance, bogus character set parameters. When invoked + from the index or from the pager, you'll have the opportunity to edit + the top-level attachment's content type. On the ``attachment menu'', + you can change any attachment's content type. These changes are not + persistent, and get lost upon changing folders. + + Note that this command is also available on the ``compose menu''. + There, it's used to fine-tune the properties of attachments you are + going to send. + + eenntteerr--ccoommmmaanndd (default: ``:'') + + This command is used to execute any command you would normally put in + a configuration file. A common use is to check the settings of + variables, or in conjunction with ``macros'' to change settings on the + fly. + + eexxttrraacctt--kkeeyyss (default: ^K) + + This command extracts PGP public keys from the current or tagged + message(s) and adds them to your PGP public key ring. + + ffoorrggeett--ppaasssspphhrraassee (default: ^F) + + This command wipes the passphrase(s) from memory. It is useful, if you + misspelled the passphrase. + + lliisstt--rreeppllyy (default: L) + + Reply to the current or tagged message(s) by extracting any addresses + which match the addresses given by the ``lists or subscribe'' + commands, but also honor any Mail-Followup-To header(s) if the + ``$honor_followup_to'' configuration variable is set. Using this when + replying to messages posted to mailing lists helps avoid duplicate + copies being sent to the author of the message you are replying to. + + ppiippee--mmeessssaaggee (default: |) + + Asks for an external Unix command and pipes the current or tagged + message(s) to it. The variables ``$pipe_decode'', ``$pipe_split'', + ``$pipe_sep'' and ``$wait_key'' control the exact behaviour of this + function. + + rreesseenndd--mmeessssaaggee (default: ESC e) + + With resend-message, mutt takes the current message as a template for + a new message. This function is best described as "recall from + arbitrary folders". It can conveniently be used to forward MIME + messages while preserving the original mail structure. Note that the + amount of headers included here depends on the value of the ``$weed'' + variable. + + This function is also available from the attachment menu. You can use + this to easily resend a message which was included with a bounce + message as a message/rfc822 body part. + + sshheellll--eessccaappee (default: !) + + Asks for an external Unix command and executes it. The ``$wait_key'' + can be used to control whether Mutt will wait for a key to be pressed + when the command returns (presumably to let the user read the output + of the command), based on the return status of the named command. + + ttooggggllee--qquuootteedd (default: T) + + The _p_a_g_e_r uses the ``$quote_regexp'' variable to detect quoted text + when displaying the body of the message. This function toggles the + display of the quoted material in the message. It is particularly + useful when are interested in just the response and there is a large + amount of quoted text in the way. + + sskkiipp--qquuootteedd (default: S) + + This function will go to the next line of non-quoted text which come + after a line of quoted text in the internal pager. + + 22..44.. SSeennddiinngg MMaaiill + + The following bindings are available in the _i_n_d_e_x for sending + messages. + + m compose compose a new message + r reply reply to sender + g group-reply reply to all recipients + L list-reply reply to mailing list address + f forward forward message + b bounce bounce (remail) message + ESC k mail-key mail a PGP public key to someone + + Bouncing a message sends the message as is to the recipient you + specify. Forwarding a message allows you to add comments or modify + the message you are forwarding. These items are discussed in greater + detail in the next chapter ````Forwarding and Bouncing Mail''''. + + Mutt will then enter the _c_o_m_p_o_s_e menu and prompt you for the + recipients to place on the ``To:'' header field. Next, it will ask + you for the ``Subject:'' field for the message, providing a default if + you are replying to or forwarding a message. See also ``$askcc'', + ``$askbcc'', ``$autoedit'', ``$bounce'', and ``$fast_reply'' for + changing how Mutt asks these questions. + + Mutt will then automatically start your ``$editor'' on the message + body. If the ``$edit_headers'' variable is set, the headers will be + at the top of the message in your editor. Any messages you are + replying to will be added in sort order to the message, with + appropriate ``$attribution'', ``$indent_string'' and + ``$post_indent_string''. When forwarding a message, if the + ``$mime_forward'' variable is unset, a copy of the forwarded message + will be included. If you have specified a ``$signature'', it will be + appended to the message. + + Once you have finished editing the body of your mail message, you are + returned to the _c_o_m_p_o_s_e menu. The following options are available: + + a attach-file attach a file + A attach-message attach message(s) to the message + ESC k attach-key attach a PGP public key + d edit-description edit description on attachment + D detach-file detach a file + t edit-to edit the To field + ESC f edit-from edit the From field + r edit-reply-to edit the Reply-To field + c edit-cc edit the Cc field + b edit-bcc edit the Bcc field + y send-message send the message + s edit-subject edit the Subject + S smime-menu select S/MIME options + f edit-fcc specify an ``Fcc'' mailbox + p pgp-menu select PGP options + P postpone-message postpone this message until later + q quit quit (abort) sending the message + w write-fcc write the message to a folder + i ispell check spelling (if available on your system) + ^F forget-passphrase wipe passphrase(s) from memory + + NNoottee:: The attach-message function will prompt you for a folder to + attach messages from. You can now tag messages in that folder and they + will be attached to the message you are sending. Note that certain + operations like composing a new mail, replying, forwarding, etc. are + not permitted when you are in that folder. The %r in + ``$status_format'' will change to a 'A' to indicate that you are in + attach-message mode. + + 22..44..11.. EEddiittiinngg tthhee mmeessssaaggee hheeaaddeerr + + When editing the header of your outgoing message, there are a couple + of special features available. + + If you specify + Fcc: _f_i_l_e_n_a_m_e + Mutt will pick up _f_i_l_e_n_a_m_e just as if you had used the _e_d_i_t_-_f_c_c + function in the _c_o_m_p_o_s_e menu. + + You can also attach files to your message by specifying + Attach: _f_i_l_e_n_a_m_e [ _d_e_s_c_r_i_p_t_i_o_n ] + where _f_i_l_e_n_a_m_e is the file to attach and _d_e_s_c_r_i_p_t_i_o_n is an optional + string to use as the description of the attached file. + + When replying to messages, if you remove the _I_n_-_R_e_p_l_y_-_T_o_: field from + the header field, Mutt will not generate a _R_e_f_e_r_e_n_c_e_s_: field, which + allows you to create a new message thread. + + Also see ``edit_headers''. + + 22..44..22.. UUssiinngg MMuutttt wwiitthh PPGGPP + + If you want to use PGP, you can specify + + Pgp: [ E | S | S<id> ] + + ``E'' encrypts, ``S'' signs and ``S<id>'' signs with the given key, + setting ``$pgp_sign_as'' permanently. + + If you have told mutt to PGP encrypt a message, it will guide you + through a key selection process when you try to send the message. + Mutt will not ask you any questions about keys which have a certified + user ID matching one of the message recipients' mail addresses. + However, there may be situations in which there are several keys, + weakly certified user ID fields, or where no matching keys can be + found. + + In these cases, you are dropped into a menu with a list of keys from + which you can select one. When you quit this menu, or mutt can't find + any matching keys, you are prompted for a user ID. You can, as + usually, abort this prompt using ^G. When you do so, mutt will return + to the compose screen. + + Once you have successfully finished the key selection, the message + will be encrypted using the selected public keys, and sent out. + + Most fields of the entries in the key selection menu (see also + ``$pgp_entry_format'') have obvious meanings. But some explanations + on the capabilities, flags, and validity fields are in order. + + The flags sequence (%f) will expand to one of the following flags: + + R The key has been revoked and can't be used. + X The key is expired and can't be used. + d You have marked the key as disabled. + c There are unknown critical self-signature + packets. + + The capabilities field (%c) expands to a two-character sequence + representing a key's capabilities. The first character gives the + key's encryption capabilities: A minus sign (--) means that the key + cannot be used for encryption. A dot (..) means that it's marked as a + signature key in one of the user IDs, but may also be used for + encryption. The letter ee indicates that this key can be used for + encryption. + + The second character indicates the key's signing capabilities. Once + again, a ``--'' implies ``not for signing'', ``..'' implies that the key + is marked as an encryption key in one of the user-ids, and ``ss'' + denotes a key which can be used for signing. + + Finally, the validity field (%t) indicates how well-certified a user- + id is. A question mark (??) indicates undefined validity, a minus + character (--) marks an untrusted association, a space character means + a partially trusted association, and a plus character (++) indicates + complete validity. + + 22..44..33.. SSeennddiinngg aannoonnyymmoouuss mmeessssaaggeess vviiaa mmiixxmmaasstteerr.. + + You may also have configured mutt to co-operate with Mixmaster, an + anonymous remailer. Mixmaster permits you to send your messages + anonymously using a chain of remailers. Mixmaster support in mutt is + for mixmaster version 2.04 (beta 45 appears to be the latest) and + 2.03. It does not support earlier versions or the later so-called + version 3 betas, of which the latest appears to be called 2.9b23. + + To use it, you'll have to obey certain restrictions. Most important, + you cannot use the Cc and Bcc headers. To tell Mutt to use mixmaster, + you have to select a remailer chain, using the mix function on the + compose menu. + + The chain selection screen is divided into two parts. In the (larger) + upper part, you get a list of remailers you may use. In the lower + part, you see the currently selected chain of remailers. + + You can navigate in the chain using the chain-prev and chain-next + functions, which are by default bound to the left and right arrows and + to the h and l keys (think vi keyboard bindings). To insert a + remailer at the current chain position, use the insert function. To + append a remailer behind the current chain position, use select-entry + or append. You can also delete entries from the chain, using the + corresponding function. Finally, to abandon your changes, leave the + menu, or accept them pressing (by default) the Return key. + + Note that different remailers do have different capabilities, + indicated in the %c entry of the remailer menu lines (see + ``$mix_entry_format''). Most important is the ``middleman'' + capability, indicated by a capital ``M'': This means that the remailer + in question cannot be used as the final element of a chain, but will + only forward messages to other mixmaster remailers. For details on + the other capabilities, please have a look at the mixmaster + documentation. + + 22..55.. FFoorrwwaarrddiinngg aanndd BBoouunncciinngg MMaaiill + + Bouncing and forwarding let you send an existing message to recipients + that you specify. Bouncing a message uses the ``sendmail'' command to + send a copy to alternative addresses as if they were the message's + original recipients. Forwarding a message, on the other hand, allows + you to modify the message before it is resent (for example, by adding + your own comments). + The following keys are bound by default: + + f forward forward message + b bounce bounce (remail) message + + Forwarding can be done by including the original message in the new + message's body (surrounded by indicating lines) or including it as a + MIME attachment, depending on the value of the ``$mime_forward'' + variable. Decoding of attachments, like in the pager, can be + controlled by the ``$forward_decode'' and ``$mime_forward_decode'' + variables, respectively. The desired forwarding format may depend on + the content, therefore _$_m_i_m_e___f_o_r_w_a_r_d is a quadoption which, for + example, can be set to ``ask-no''. + + The inclusion of headers is controlled by the current setting of the + ``$weed'' variable, unless ``mime_forward'' is set. + + Editing the message to forward follows the same procedure as sending + or replying to a message does. + + 22..66.. PPoossttppoonniinngg MMaaiill + + At times it is desirable to delay sending a message that you have + already begun to compose. When the _p_o_s_t_p_o_n_e_-_m_e_s_s_a_g_e function is used + in the _c_o_m_p_o_s_e menu, the body of your message and attachments are + stored in the mailbox specified by the ``$postponed'' variable. This + means that you can recall the message even if you exit Mutt and then + restart it at a later time. + + Once a message is postponed, there are several ways to resume it. + From the command line you can use the ``-p'' option, or if you _c_o_m_p_o_s_e + a new message from the _i_n_d_e_x or _p_a_g_e_r you will be prompted if + postponed messages exist. If multiple messages are currently + postponed, the _p_o_s_t_p_o_n_e_d menu will pop up and you can select which + message you would like to resume. + + NNoottee:: If you postpone a reply to a message, the reply setting of the + message is only updated when you actually finish the message and send + it. Also, you must be in the same folder with the message you replied + to for the status of the message to be updated. + + See also the ``$postpone'' quad-option. + + 22..77.. RReeaaddiinngg nneewwss vviiaa NNNNTTPP + + If compiled with ``--enable-nntp'' option, Mutt can read news from + newsserver via NNTP. You can open a newsgroup with function ``change- + newsgroup'' (default: i). Default newsserver can be obtained from + _N_N_T_P_S_E_R_V_E_R environment variable. Like other news readers, info about + subscribed newsgroups is saved in file by ``$newsrc'' variable. + Article headers are cached and can be loaded from file when newsgroup + entered instead loading from newsserver. + + 33.. CCoonnffiigguurraattiioonn + + While the default configuration (or ``preferences'') make Mutt usable + right out of the box, it is often desirable to tailor Mutt to suit + your own tastes. When Mutt is first invoked, it will attempt to read + the ``system'' configuration file (defaults set by your local system + administrator), unless the ``-n'' ``command line'' option is + specified. This file is typically /usr/local/share/mutt/Muttrc or + /etc/Muttrc. Mutt will next look for a file named .muttrc in your home + directory. If this file does not exist and your home directory has a + subdirectory named .mutt, mutt try to load a file named .mutt/muttrc. + + .muttrc is the file where you will usually place your ``commands'' to + configure Mutt. + + In addition, mutt supports version specific configuration files that + are parsed instead of the default files as explained above. For + instance, if your system has a Muttrc-0.88 file in the system + configuration directory, and you are running version 0.88 of mutt, + this file will be sourced instead of the Muttrc file. The same is + true of the user configuration file, if you have a file .muttrc-0.88.6 + in your home directory, when you run mutt version 0.88.6, it will + source this file instead of the default .muttrc file. The version + number is the same which is visible using the ``-v'' ``command line'' + switch or using the show-version key (default: V) from the index menu. + + 33..11.. SSyynnttaaxx ooff IInniittiiaalliizzaattiioonn FFiilleess + + An initialization file consists of a series of ``commands''. Each + line of the file may contain one or more commands. When multiple + commands are used, they must be separated by a semicolon (;). + + set realname='Mutt user' ; ignore x- + + The hash mark, or pound sign (``#''), is used as a ``comment'' charac­ + ter. You can use it to annotate your initialization file. All text + after the comment character to the end of the line is ignored. For + example, + + my_hdr X-Disclaimer: Why are you listening to me? # This is a comment + + Single quotes (') and double quotes (") can be used to quote strings + which contain spaces or other special characters. The difference + between the two types of quotes is similar to that of many popular + shell programs, namely that a single quote is used to specify a + literal string (one that is not interpreted for shell variables or + quoting with a backslash [see next paragraph]), while double quotes + indicate a string for which should be evaluated. For example, + backtics are evaluated inside of double quotes, but nnoott for single + quotes. + + \ quotes the next character, just as in shells such as bash and zsh. + For example, if want to put quotes ``"'' inside of a string, you can + use ``\'' to force the next character to be a literal instead of + interpreted character. + + set realname="Michael \"MuttDude\" Elkins" + + ``\\'' means to insert a literal ``\'' into the line. ``\n'' and + ``\r'' have their usual C meanings of linefeed and carriage-return, + respectively. + + A \ at the end of a line can be used to split commands over multiple + lines, provided that the split points don't appear in the middle of + command names. + + It is also possible to substitute the output of a Unix command in an + initialization file. This is accomplished by enclosing the command in + backquotes (``). For example, + + my_hdr X-Operating-System: `uname -a` + + The output of the Unix command ``uname -a'' will be substituted before + the line is parsed. Note that since initialization files are line + oriented, only the first line of output from the Unix command will be + substituted. + + UNIX environments can be accessed like the way it is done in shells + like sh and bash: Prepend the name of the environment by a ``$''. For + example, + + set record=+sent_on_$HOSTNAME + + The commands understood by mutt are explained in the next paragraphs. + For a complete list, see the ``command reference''. + + 33..22.. DDeeffiinniinngg//UUssiinngg aalliiaasseess + + Usage: alias _k_e_y _a_d_d_r_e_s_s [ , _a_d_d_r_e_s_s, ... ] + + It's usually very cumbersome to remember or type out the address of + someone you are communicating with. Mutt allows you to create + ``aliases'' which map a short string to a full address. + + NNoottee:: if you want to create an alias for a group (by specifying more + than one address), you mmuusstt separate the addresses with a comma + (``,''). + + To remove an alias or aliases (``*'' means all aliases): + + unalias [ * | _k_e_y _._._. ] + + alias muttdude me@cs.hmc.edu (Michael Elkins) + alias theguys manny, moe, jack + + Unlike other mailers, Mutt doesn't require aliases to be defined in a + special file. The alias command can appear anywhere in a + configuration file, as long as this file is ``sourced''. + Consequently, you can have multiple alias files, or you can have all + aliases defined in your muttrc. + + On the other hand, the ``create-alias'' function can use only one + file, the one pointed to by the ``$alias_file'' variable (which is + ~/.muttrc by default). This file is not special either, in the sense + that Mutt will happily append aliases to any file, but in order for + the new aliases to take effect you need to explicitly ``source'' this + file too. + + For example: + + source /usr/local/share/Mutt.aliases + source ~/.mail_aliases + set alias_file=~/.mail_aliases + + To use aliases, you merely use the alias at any place in mutt where + mutt prompts for addresses, such as the _T_o_: or _C_c_: prompt. You can + also enter aliases in your editor at the appropriate headers if you + have the ``$edit_headers'' variable set. + + In addition, at the various address prompts, you can use the tab + character to expand a partial alias to the full alias. If there are + multiple matches, mutt will bring up a menu with the matching aliases. + In order to be presented with the full list of aliases, you must hit + tab with out a partial alias, such as at the beginning of the prompt + or after a comma denoting multiple addresses. + + In the alias menu, you can select as many aliases as you want with the + _s_e_l_e_c_t_-_e_n_t_r_y key (default: RET), and use the _e_x_i_t key (default: q) to + return to the address prompt. + + 33..33.. CChhaannggiinngg tthhee ddeeffaauulltt kkeeyy bbiinnddiinnggss + + Usage: bind _m_a_p _k_e_y _f_u_n_c_t_i_o_n + + This command allows you to change the default key bindings (operation + invoked when pressing a key). + + _m_a_p specifies in which menu the binding belongs. The currently + defined maps are: + + ggeenneerriicc + This is not a real menu, but is used as a fallback for all of + the other menus except for the pager and editor modes. If a key + is not defined in another menu, Mutt will look for a binding to + use in this menu. This allows you to bind a key to a certain + function in multiple menus instead of having multiple bind + statements to accomplish the same task. + + aalliiaass + The alias menu is the list of your personal aliases as defined + in your muttrc. It is the mapping from a short alias name to + the full email address(es) of the recipient(s). + + aattttaacchh + The attachment menu is used to access the attachments on + received messages. + + bbrroowwsseerr + The browser is used for both browsing the local directory + structure, and for listing all of your incoming mailboxes. + + eeddiittoorr + The editor is the line-based editor the user enters text data. + + iinnddeexx + The index is the list of messages contained in a mailbox. + + ccoommppoossee + The compose menu is the screen used when sending a new message. + + ppaaggeerr + The pager is the mode used to display message/attachment data, + and help listings. + + ppggpp + The pgp menu is used to select the OpenPGP keys used for + encrypting outgoing messages. + + ppoossttppoonnee + The postpone menu is similar to the index menu, except is used + when recalling a message the user was composing, but saved until + later. + + _k_e_y is the key (or key sequence) you wish to bind. To specify a + control character, use the sequence _\_C_x, where _x is the letter of the + control character (for example, to specify control-A use ``\Ca''). + Note that the case of _x as well as _\_C is ignored, so that _\_C_A_, _\_C_a_, + _\_c_A and _\_c_a are all equivalent. An alternative form is to specify the + key as a three digit octal number prefixed with a ``\'' (for example + _\_1_7_7 is equivalent to _\_c_?). + + In addition, _k_e_y may consist of: + + \t tab + <tab> tab + \r carriage return + \n newline + \e escape + <esc> escape + <up> up arrow + <down> down arrow + <left> left arrow + <right> right arrow + <pageup> Page Up + <pagedown> Page Down + <backspace> Backspace + <delete> Delete + <insert> Insert + <enter> Enter + <return> Return + <home> Home + <end> End + <space> Space bar + <f1> function key 1 + <f10> function key 10 + + _k_e_y does not need to be enclosed in quotes unless it contains a space + (`` ''). + + _f_u_n_c_t_i_o_n specifies which action to take when _k_e_y is pressed. For a + complete list of functions, see the ``reference''. The special + function noop unbinds the specified key sequence. + + 33..44.. DDeeffiinniinngg aalliiaasseess ffoorr cchhaarraacctteerr sseettss + + Usage: charset-hook _a_l_i_a_s _c_h_a_r_s_e_t + Usage: iconv-hook _c_h_a_r_s_e_t _l_o_c_a_l_-_c_h_a_r_s_e_t + + The charset-hook command defines an alias for a character set. This + is useful to properly display messages which are tagged with a + character set name not known to mutt. + + The iconv-hook command defines a system-specific name for a character + set. This is helpful when your systems character conversion library + insists on using strange, system-specific names for character sets. + + 33..55.. SSeettttiinngg vvaarriiaabblleess bbaasseedd uuppoonn mmaaiillbbooxx + + Usage: folder-hook [!]_r_e_g_e_x_p _c_o_m_m_a_n_d + + It is often desirable to change settings based on which mailbox you + are reading. The folder-hook command provides a method by which you + can execute any configuration command. _r_e_g_e_x_p is a regular expression + specifying in which mailboxes to execute _c_o_m_m_a_n_d before loading. If a + mailbox matches multiple folder-hook's, they are executed in the order + given in the muttrc. + + NNoottee:: if you use the ``!'' shortcut for ``$spoolfile'' at the + beginning of the pattern, you must place it inside of double or single + quotes in order to distinguish it from the logical _n_o_t operator for + the expression. + + Note that the settings are _n_o_t restored when you leave the mailbox. + For example, a command action to perform is to change the sorting + method based upon the mailbox being read: + + folder-hook mutt set sort=threads + + However, the sorting method is not restored to its previous value when + reading a different mailbox. To specify a _d_e_f_a_u_l_t command, use the + pattern ``.'': + + folder-hook . set sort=date-sent + + 33..66.. KKeeyybbooaarrdd mmaaccrrooss + + Usage: macro _m_e_n_u _k_e_y _s_e_q_u_e_n_c_e [ _d_e_s_c_r_i_p_t_i_o_n ] + + Macros are useful when you would like a single key to perform a series + of actions. When you press _k_e_y in menu _m_e_n_u, Mutt will behave as if + you had typed _s_e_q_u_e_n_c_e. So if you have a common sequence of commands + you type, you can create a macro to execute those commands with a + single key. + + _k_e_y and _s_e_q_u_e_n_c_e are expanded by the same rules as the ``key + bindings''. There are some additions however. The first is that + control characters in _s_e_q_u_e_n_c_e can also be specified as _^_x. In order + to get a caret (`^'') you need to use _^_^. Secondly, to specify a + certain key such as _u_p or to invoke a function directly, you can use + the format _<_k_e_y _n_a_m_e_> and _<_f_u_n_c_t_i_o_n _n_a_m_e_>. For a listing of key names + see the section on ``key bindings''. Functions are listed in the + ``function reference''. + + The advantage with using function names directly is that the macros + will work regardless of the current key bindings, so they are not + dependent on the user having particular key definitions. This makes + them more robust and portable, and also facilitates defining of macros + in files used by more than one user (eg. the system Muttrc). + + Optionally you can specify a descriptive text after _s_e_q_u_e_n_c_e, which is + shown in the help screens. + + NNoottee:: Macro definitions (if any) listed in the help screen(s), are + silently truncated at the screen width, and are not wrapped. + + 33..77.. UUssiinngg ccoolloorr aanndd mmoonnoo vviiddeeoo aattttrriibbuutteess + + Usage: color _o_b_j_e_c_t _f_o_r_e_g_r_o_u_n_d _b_a_c_k_g_r_o_u_n_d [ _r_e_g_e_x_p ] + Usage: color index _f_o_r_e_g_r_o_u_n_d _b_a_c_k_g_r_o_u_n_d _p_a_t_t_e_r_n + Usage: uncolor index _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + If your terminal supports color, you can spice up Mutt by creating + your own color scheme. To define the color of an object (type of + information), you must specify both a foreground color aanndd a + background color (it is not possible to only specify one or the + other). + + _o_b_j_e_c_t can be one of: + + · attachment + + · body (match _r_e_g_e_x_p in the body of messages) + + · bold (hiliting bold patterns in the body of messages) + + · error (error messages printed by Mutt) + + · header (match _r_e_g_e_x_p in the message header) + + · hdrdefault (default color of the message header in the pager) + + · index (match _p_a_t_t_e_r_n in the message index) + + · indicator (arrow or bar used to indicate the current item in a + menu) + + · markers (the ``+'' markers at the beginning of wrapped lines in the + pager) + + · message (informational messages) + + · normal + + · quoted (text matching ``$quote_regexp'' in the body of a message) + + · quoted1, quoted2, ..., quotedNN (higher levels of quoting) + + · search (hiliting of words in the pager) + + · signature + + · status (mode lines used to display info about the mailbox or + message) + + · tilde (the ``~'' used to pad blank lines in the pager) + + · tree (thread tree drawn in the message index and attachment menu) + + · underline (hiliting underlined patterns in the body of messages) + + _f_o_r_e_g_r_o_u_n_d and _b_a_c_k_g_r_o_u_n_d can be one of the following: + + · white + + · black + + · green + + · magenta + + · blue + + · cyan + + · yellow + + · red + + · default + + · color_x + + _f_o_r_e_g_r_o_u_n_d can optionally be prefixed with the keyword bright to make + the foreground color boldfaced (e.g., brightred). + + If your terminal supports it, the special keyword _d_e_f_a_u_l_t can be used + as a transparent color. The value _b_r_i_g_h_t_d_e_f_a_u_l_t is also valid. If + Mutt is linked against the _S_-_L_a_n_g library, you also need to set the + _C_O_L_O_R_F_G_B_G environment variable to the default colors of your terminal + for this to work; for example (for Bourne-like shells): + + set COLORFGBG="green;black" + export COLORFGBG + + NNoottee:: The _S_-_L_a_n_g library requires you to use the _l_i_g_h_t_g_r_a_y and _b_r_o_w_n + keywords instead of _w_h_i_t_e and _y_e_l_l_o_w when setting this variable. + + NNoottee:: The uncolor command can be applied to the index object only. It + removes entries from the list. You mmuusstt specify the same pattern + specified in the color command for it to be removed. The pattern + ``*'' is a special token which means to clear the color index list of + all entries. + + Mutt also recognizes the keywords _c_o_l_o_r_0, _c_o_l_o_r_1, ..., _c_o_l_o_rNN--11 (NN + being the number of colors supported by your terminal). This is + useful when you remap the colors for your display (for example by + changing the color associated with _c_o_l_o_r_2 for your xterm), since color + names may then lose their normal meaning. + + If your terminal does not support color, it is still possible change + the video attributes through the use of the ``mono'' command: + + Usage: mono _<_o_b_j_e_c_t_> _<_a_t_t_r_i_b_u_t_e_> [ _r_e_g_e_x_p ] + Usage: mono index _a_t_t_r_i_b_u_t_e _p_a_t_t_e_r_n + Usage: unmono index _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + where _a_t_t_r_i_b_u_t_e is one of the following: + + · none + + · bold + + · underline + + · reverse + + · standout + + 33..88.. IIggnnoorriinngg ((wweeeeddiinngg)) uunnwwaanntteedd mmeessssaaggee hheeaaddeerrss + + Usage: [un]ignore _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + Messages often have many header fields added by automatic processing + systems, or which may not seem useful to display on the screen. This + command allows you to specify header fields which you don't normally + want to see. + + You do not need to specify the full header field name. For example, + ``ignore content-'' will ignore all header fields that begin with the + pattern ``content-''. ``ignore *'' will ignore all headers. + + To remove a previously added token from the list, use the ``unignore'' + command. The ``unignore'' command will make Mutt display headers with + the given pattern. For example, if you do ``ignore x-'' it is + possible to ``unignore x-mailer''. + + ``unignore *'' will remove all tokens from the ignore list. + + For example: + + # Sven's draconian header weeding + ignore * + unignore from date subject to cc + unignore organization organisation x-mailer: x-newsreader: x-mailing-list: + unignore posted-to: + + 33..99.. AAlltteerrnnaattiivvee aaddddrreesssseess + + Usage: [un]alternates _r_e_g_e_x_p [ _r_e_g_e_x_p ... ] + + With various functions, mutt will treat messages differently, + depending on whether you sent them or whether you received them from + someone else. For instance, when replying to a message that you sent + to a different party, mutt will automatically suggest to send the + response to the original message's recipients -- responding to + yourself won't make much sense in many cases. (See ``$reply_to''.) + + Many users receive e-mail under a number of different addresses. To + fully use mutt's features here, the program must be able to recognize + what e-mail addresses you receive mail under. That's the purpose of + the alternates command: It takes a list of regular expressions, each + of which can identify an address under which you receive e-mail. + + To remove a regular expression from this list, use the unalternates + command. + + 33..1100.. MMaaiilliinngg lliissttss + + Usage: [un]lists _r_e_g_e_x_p [ _r_e_g_e_x_p ... ] + Usage: [un]subscribe _r_e_g_e_x_p [ _r_e_g_e_x_p ... ] + + Mutt has a few nice features for ``handling mailing lists''. In order + to take advantage of them, you must specify which addresses belong to + mailing lists, and which mailing lists you are subscribed to. Once + you have done this, the ``list-reply'' function will work for all + known lists. Additionally, when you send a message to a subscribed + list, mutt will add a Mail-Followup-To header to tell other users' + mail user agents not to send copies of replies to your personal + address. Note that the Mail-Followup-To header is a non-standard + extension which is not supported by all mail user agents. Adding it + is not bullet-proof against receiving personal CCs of list messages. + Also note that the generation of the Mail-Followup-To header is + controlled by the ``$followup_to'' configuration variable. + + More precisely, Mutt maintains lists of patterns for the addresses of + known and subscribed mailing lists. Every subscribed mailing list is + known. To mark a mailing list as known, use the ``lists'' command. To + mark it as subscribed, use ``subscribe''. + + You can use regular expressions with both commands. To mark all + messages sent to a specific bug report's address on mutt's bug + tracking system as list mail, for instance, you could say ``subscribe + [0-9]*@bugs.guug.de''. Often, it's sufficient to just give a portion + of the list's e-mail address. + + Specify as much of the address as you need to to remove ambiguity. + For example, if you've subscribed to the Mutt mailing list, you will + receive mail addresssed to _m_u_t_t_-_u_s_e_r_s_@_m_u_t_t_._o_r_g. So, to tell Mutt that + this is a mailing list, you could add ``lists mutt-users'' to your + initialization file. To tell mutt that you are subscribed to it, add + ``subscribe mutt-users'' to your initialization file instead. If you + also happen to get mail from someone whose address is _m_u_t_t_- + _u_s_e_r_s_@_e_x_a_m_p_l_e_._c_o_m, you could use ``lists mutt-users@mutt.org'' or + ``subscribe mutt-users@mutt.org'' to match only mail from the actual + list. + + The ``unlists'' command is used to remove a token from the list of + known and subscribed mailing-lists. Use ``unlists *'' to remove all + tokens. + + To remove a mailing list from the list of subscribed mailing lists, + but keep it on the list of known mailing lists, use ``unsubscribe''. + + 33..1111.. UUssiinngg MMuullttiippllee ssppooooll mmaaiillbbooxxeess + + Usage: mbox-hook [!]_p_a_t_t_e_r_n _m_a_i_l_b_o_x + + This command is used to move read messages from a specified mailbox to + a different mailbox automatically when you quit or change folders. + _p_a_t_t_e_r_n is a regular expression specifying the mailbox to treat as a + ``spool'' mailbox and _m_a_i_l_b_o_x specifies where mail should be saved + when read. + + Unlike some of the other _h_o_o_k commands, only the _f_i_r_s_t matching + pattern is used (it is not possible to save read mail in more than a + single mailbox). + + 33..1122.. DDeeffiinniinngg mmaaiillbbooxxeess wwhhiicchh rreecceeiivvee mmaaiill + + Usage: [un]mailboxes [!]_f_i_l_e_n_a_m_e [ _f_i_l_e_n_a_m_e ... ] + + This command specifies folders which can receive mail and which will + be checked for new messages. By default, the main menu status bar + displays how many of these folders have new messages. + + When changing folders, pressing _s_p_a_c_e will cycle through folders with + new mail. + + Pressing TAB in the directory browser will bring up a menu showing the + files specified by the mailboxes command, and indicate which contain + new messages. Mutt will automatically enter this mode when invoked + from the command line with the -y option. + + The ``unmailboxes'' command is used to remove a token from the list of + folders which receive mail. Use ``unmailboxes *'' to remove all + tokens. + + NNoottee:: new mail is detected by comparing the last modification time to + the last access time. Utilities like biff or frm or any other program + which accesses the mailbox might cause Mutt to never detect new mail + for that mailbox if they do not properly reset the access time. + Backup tools are another common reason for updated access times. + + NNoottee:: the filenames in the mailboxes command are resolved when the + command is executed, so if these names contain ``shortcut characters'' + (such as ``='' and ``!''), any variable definition that affect these + characters (like ``$folder'' and ``$spoolfile'') should be executed + before the mailboxes command. + + 33..1133.. UUsseerr ddeeffiinneedd hheeaaddeerrss + + Usage: + my_hdr _s_t_r_i_n_g + unmy_hdr _f_i_e_l_d [ _f_i_e_l_d ... ] + + The ``my_hdr'' command allows you to create your own header fields + which will be added to every message you send. + + For example, if you would like to add an ``Organization:'' header + field to all of your outgoing messages, you can put the command + + my_hdr Organization: A Really Big Company, Anytown, USA + + in your .muttrc. + + NNoottee:: space characters are _n_o_t allowed between the keyword and the + colon (``:''). The standard for electronic mail (RFC822) says that + space is illegal there, so Mutt enforces the rule. + + If you would like to add a header field to a single message, you + should either set the ``edit_headers'' variable, or use the _e_d_i_t_- + _h_e_a_d_e_r_s function (default: ``E'') in the send-menu so that you can + edit the header of your message along with the body. + + To remove user defined header fields, use the ``unmy_hdr'' command. + You may specify an asterisk (``*'') to remove all header fields, or + the fields to remove. For example, to remove all ``To'' and ``Cc'' + header fields, you could use: + + unmy_hdr to cc + + 33..1144.. DDeeffiinniinngg tthhee oorrddeerr ooff hheeaaddeerrss wwhheenn vviieewwiinngg mmeessssaaggeess + + Usage: hdr_order _h_e_a_d_e_r_1 _h_e_a_d_e_r_2 _h_e_a_d_e_r_3 + + With this command, you can specify an order in which mutt will attempt + to present headers to you when viewing messages. + + ``unhdr_order *'' will clear all previous headers from the order list, + thus removing the header order effects set by the system-wide startup + file. + + hdr_order From Date: From: To: Cc: Subject: + + 33..1155.. SSppeecciiffyy ddeeffaauulltt ssaavvee ffiilleennaammee + + Usage: save-hook [!]_p_a_t_t_e_r_n _f_i_l_e_n_a_m_e + + This command is used to override the default filename used when saving + messages. _f_i_l_e_n_a_m_e will be used as the default filename if the + message is _F_r_o_m_: an address matching _r_e_g_e_x_p or if you are the author + and the message is addressed _t_o_: something matching _r_e_g_e_x_p. + + See ``Message Matching in Hooks'' for information on the exact format + of _p_a_t_t_e_r_n. + + Examples: + + save-hook me@(turing\\.)?cs\\.hmc\\.edu$ +elkins + save-hook aol\\.com$ +spam + + Also see the ``fcc-save-hook'' command. + + 33..1166.. SSppeecciiffyy ddeeffaauulltt FFcccc:: mmaaiillbbooxx wwhheenn ccoommppoossiinngg + + Usage: fcc-hook [!]_p_a_t_t_e_r_n _m_a_i_l_b_o_x + + This command is used to save outgoing mail in a mailbox other than + ``$record''. Mutt searches the initial list of message recipients for + the first matching _r_e_g_e_x_p and uses _m_a_i_l_b_o_x as the default Fcc: + mailbox. If no match is found the message will be saved to + ``$record'' mailbox. + + See ``Message Matching in Hooks'' for information on the exact format + of _p_a_t_t_e_r_n. + + Example: fcc-hook aol.com$ +spammers + + The above will save a copy of all messages going to the aol.com domain + to the `+spammers' mailbox by default. Also see the ``fcc-save-hook'' + command. + + 33..1177.. SSppeecciiffyy ddeeffaauulltt ssaavvee ffiilleennaammee aanndd ddeeffaauulltt FFcccc:: mmaaiillbbooxx aatt oonnccee + + Usage: fcc-save-hook [!]_p_a_t_t_e_r_n _m_a_i_l_b_o_x + + This command is a shortcut, equivalent to doing both a ``fcc-hook'' + and a ``save-hook'' with its arguments. + + 33..1188.. CChhaannggee sseettttiinnggss bbaasseedd uuppoonn mmeessssaaggee rreecciippiieennttss + + Usage: reply-hook [!]_p_a_t_t_e_r_n _c_o_m_m_a_n_d + Usage: send-hook [!]_p_a_t_t_e_r_n _c_o_m_m_a_n_d + + These commands can be used to execute arbitrary configuration commands + based upon recipients of the message. _p_a_t_t_e_r_n is a regular expression + matching the desired address. _c_o_m_m_a_n_d is executed when _r_e_g_e_x_p matches + recipients of the message. + + reply-hook is matched against the message you are _r_e_p_l_y_i_n_g ttoo, instead + of the message you are _s_e_n_d_i_n_g. send-hook is matched against all + messages, both _n_e_w and _r_e_p_l_i_e_s. NNoottee:: reply-hooks are matched bbeeffoorree + the send-hook, rreeggaarrddlleessss of the order specified in the users's + configuration file. + + For each type of send-hook or reply-hook, When multiple matches occur, + commands are executed in the order they are specified in the muttrc + (for that type of hook). + + See ``Message Matching in Hooks'' for information on the exact format + of _p_a_t_t_e_r_n. + + Example: send-hook mutt "set mime_forward signature=''" + + Another typical use for this command is to change the values of the + ``$attribution'', ``$signature'' and ``$locale'' variables in order to + change the language of the attributions and signatures based upon the + recipients. + + NNoottee:: the send-hook's are only executed ONCE after getting the initial + list of recipients. Adding a recipient after replying or editing the + message will NOT cause any send-hook to be executed. Also note that + my_hdr commands which modify recipient headers, or the message's + subject, don't have any effect on the current message when executed + from a send-hook. + + 33..1199.. CChhaannggee sseettttiinnggss bbeeffoorree ffoorrmmaattttiinngg aa mmeessssaaggee + + Usage: message-hook [!]_p_a_t_t_e_r_n _c_o_m_m_a_n_d + + This command can be used to execute arbitrary configuration commands + before viewing or formatting a message based upon information about + the message. _c_o_m_m_a_n_d is executed if the _p_a_t_t_e_r_n matches the message + to be displayed. When multiple matches occur, commands are executed in + the order they are specified in the muttrc. + + See ``Message Matching in Hooks'' for information on the exact format + of _p_a_t_t_e_r_n. + + Example: + + message-hook ~A 'set pager=builtin' + message-hook '~f freshmeat-news' 'set pager="less \"+/^ subject: .*\""' + + 33..2200.. CChhoooossiinngg tthhee ccrryyppttooggrraapphhiicc kkeeyy ooff tthhee rreecciippiieenntt + + Usage: crypt-hook _p_a_t_t_e_r_n _k_e_y_i_d + + When encrypting messages with PGP or OpenSSL, you may want to + associate a certain key with a given e-mail address automatically, + either because the recipient's public key can't be deduced from the + destination address, or because, for some reasons, you need to + override the key Mutt would normally use. The crypt-hook command + provides a method by which you can specify the ID of the public key to + be used when encrypting messages to a certain recipient. + + The meaning of "key id" is to be taken broadly in this context: You + can either put a numerical key ID here, an e-mail address, or even + just a real name. + + 33..2211.. AAddddiinngg kkeeyy sseeqquueenncceess ttoo tthhee kkeeyybbooaarrdd bbuuffffeerr + + Usage: push _s_t_r_i_n_g + + This command adds the named string to the keyboard buffer. The string + may contain control characters, key names and function names like the + sequence string in the ``macro'' command. You may use it to + automatically run a sequence of commands at startup, or when entering + certain folders. + + 33..2222.. EExxeeccuuttiinngg ffuunnccttiioonnss + + Usage: exec _f_u_n_c_t_i_o_n [ _f_u_n_c_t_i_o_n ... ] + + This command can be used to execute any function. Functions are listed + in the ``function reference''. ``exec function'' is equivalent to + ``push <function>''. + + 33..2233.. MMeessssaaggee SSccoorriinngg + + Usage: score _p_a_t_t_e_r_n _v_a_l_u_e + Usage: unscore _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + The score commands adds _v_a_l_u_e to a message's score if _p_a_t_t_e_r_n matches + it. _p_a_t_t_e_r_n is a string in the format described in the ``patterns'' + section (note: For efficiency reasons, patterns which scan information + not available in the index, such as ~b, ~B or ~h, may not be used). + _v_a_l_u_e is a positive or negative integer. A message's final score is + the sum total of all matching score entries. However, you may + optionally prefix _v_a_l_u_e with an equal sign (=) to cause evaluation to + stop at a particular entry if there is a match. Negative final scores + are rounded up to 0. + + The unscore command removes score entries from the list. You mmuusstt + specify the same pattern specified in the score command for it to be + removed. The pattern ``*'' is a special token which means to clear + the list of all score entries. + + 33..2244.. SSeettttiinngg vvaarriiaabblleess + + Usage: set [no|inv]_v_a_r_i_a_b_l_e[=_v_a_l_u_e] [ _v_a_r_i_a_b_l_e ... ] + Usage: toggle _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ... ] + Usage: unset _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ... ] + Usage: reset _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ... ] + + This command is used to set (and unset) ``configuration variables''. + There are four basic types of variables: boolean, number, string and + quadoption. _b_o_o_l_e_a_n variables can be _s_e_t (true) or _u_n_s_e_t (false). + _n_u_m_b_e_r variables can be assigned a positive integer value. + + _s_t_r_i_n_g variables consist of any number of printable characters. + _s_t_r_i_n_g_s must be enclosed in quotes if they contain spaces or tabs. + You may also use the ``C'' escape sequences \\nn and \\tt for newline and + tab, respectively. + + _q_u_a_d_o_p_t_i_o_n variables are used to control whether or not to be prompted + for certain actions, or to specify a default action. A value of _y_e_s + will cause the action to be carried out automatically as if you had + answered yes to the question. Similarly, a value of _n_o will cause the + the action to be carried out as if you had answered ``no.'' A value + of _a_s_k_-_y_e_s will cause a prompt with a default answer of ``yes'' and + _a_s_k_-_n_o will provide a default answer of ``no.'' + + Prefixing a variable with ``no'' will unset it. Example: set + noaskbcc. + + For _b_o_o_l_e_a_n variables, you may optionally prefix the variable name + with inv to toggle the value (on or off). This is useful when writing + macros. Example: set invsmart_wrap. + + The toggle command automatically prepends the inv prefix to all + specified variables. + + The unset command automatically prepends the no prefix to all + specified variables. + + Using the enter-command function in the _i_n_d_e_x menu, you can query the + value of a variable by prefixing the name of the variable with a + question mark: + + set ?allow_8bit + + The question mark is actually only required for boolean and quadoption + variables. + + The reset command resets all given variables to the compile time + defaults (hopefully mentioned in this manual). If you use the command + set and prefix the variable with ``&'' this has the same behavior as + the reset command. + + With the reset command there exists the special variable ``all'', + which allows you to reset all variables to their system defaults. + + 33..2255.. RReeaaddiinngg iinniittiiaalliizzaattiioonn ccoommmmaannddss ffrroomm aannootthheerr ffiillee + + Usage: source _f_i_l_e_n_a_m_e + + This command allows the inclusion of initialization commands from + other files. For example, I place all of my aliases in + ~/.mail_aliases so that I can make my ~/.muttrc readable and keep my + aliases private. + + If the filename begins with a tilde (``~''), it will be expanded to + the path of your home directory. + + If the filename ends with a vertical bar (|), then _f_i_l_e_n_a_m_e is + considered to be an executable program from which to read input (eg. + source ~bin/myscript|/). + + 33..2266.. RReemmoovviinngg hhooookkss + + Usage: unhook [ * | _h_o_o_k_-_t_y_p_e ] + + This command permits you to flush hooks you have previously defined. + You can either remove all hooks by giving the ``*'' character as an + argument, or you can remove all hooks of a specific type by saying + something like unhook send-hook. + + 44.. AAddvvaanncceedd UUssaaggee + + 44..11.. RReegguullaarr EExxpprreessssiioonnss + + All string patterns in Mutt including those in more complex + ``patterns'' must be specified using regular expressions (regexp) in + the ``POSIX extended'' syntax (which is more or less the syntax used + by egrep and GNU awk). For your convenience, we have included below a + brief description of this syntax. + + The search is case sensitive if the pattern contains at least one + upper case letter, and case insensitive otherwise. Note that ``\'' + must be quoted if used for a regular expression in an initialization + command: ``\\''. + + A regular expression is a pattern that describes a set of strings. + Regular expressions are constructed analogously to arithmetic + expressions, by using various operators to combine smaller + expressions. + + Note that the regular expression can be enclosed/delimited by either " + or ' which is useful if the regular expression includes a white-space + character. See ``Syntax of Initialization Files'' for more + information on " and ' delimiter processing. To match a literal " or + ' you must preface it with \ (backslash). + + The fundamental building blocks are the regular expressions that match + a single character. Most characters, including all letters and + digits, are regular expressions that match themselves. Any + metacharacter with special meaning may be quoted by preceding it with + a backslash. + + The period ``.'' matches any single character. The caret ``^'' and + the dollar sign ``$'' are metacharacters that respectively match the + empty string at the beginning and end of a line. + + A list of characters enclosed by ``['' and ``]'' matches any single + character in that list; if the first character of the list is a caret + ``^'' then it matches any character nnoott in the list. For example, the + regular expression [[00112233445566778899]] matches any single digit. A range of + ASCII characters may be specified by giving the first and last + characters, separated by a hyphen ``-''. Most metacharacters lose + their special meaning inside lists. To include a literal ``]'' place + it first in the list. Similarly, to include a literal ``^'' place it + anywhere but first. Finally, to include a literal hyphen ``-'' place + it last. + + Certain named classes of characters are predefined. Character classes + consist of ``[:'', a keyword denoting the class, and ``:]''. The + following classes are defined by the POSIX standard: + + [[::aallnnuumm::]] + Alphanumeric characters. + + [[::aallpphhaa::]] + Alphabetic characters. + + [[::bbllaannkk::]] + Space or tab characters. + + [[::ccnnttrrll::]] + Control characters. + + [[::ddiiggiitt::]] + Numeric characters. + [[::ggrraapphh::]] + Characters that are both printable and visible. (A space is + printable, but not visible, while an ``a'' is both.) + + [[::lloowweerr::]] + Lower-case alphabetic characters. + + [[::pprriinntt::]] + Printable characters (characters that are not control + characters.) + + [[::ppuunncctt::]] + Punctuation characters (characters that are not letter, digits, + control characters, or space characters). + + [[::ssppaaccee::]] + Space characters (such as space, tab and formfeed, to name a + few). + + [[::uuppppeerr::]] + Upper-case alphabetic characters. + + [[::xxddiiggiitt::]] + Characters that are hexadecimal digits. + + A character class is only valid in a regular expression inside the + brackets of a character list. Note that the brackets in these class + names are part of the symbolic names, and must be included in addition + to the brackets delimiting the bracket list. For example, [[[[::ddiiggiitt::]]]] + is equivalent to [[00--99]]. + + Two additional special sequences can appear in character lists. These + apply to non-ASCII character sets, which can have single symbols + (called collating elements) that are represented with more than one + character, as well as several characters that are equivalent for + collating or sorting purposes: + + CCoollllaattiinngg SSyymmbboollss + A collating symbol is a multi-character collating element + enclosed in ``[.'' and ``.]''. For example, if ``ch'' is a + collating element, then [[[[..cchh..]]]] is a regexp that matches this + collating element, while [[cchh]] is a regexp that matches either + ``c'' or ``h''. + + EEqquuiivvaalleennccee CCllaasssseess + An equivalence class is a locale-specific name for a list of + characters that are equivalent. The name is enclosed in ``[='' + and ``=]''. For example, the name ``e'' might be used to + represent all of ``è'' ``é'' and ``e''. In this case, [[[[==ee==]]]] + is a regexp that matches any of ``è'', ``é'' and ``e''. + + A regular expression matching a single character may be followed by + one of several repetition operators: + + ?? The preceding item is optional and matched at most once. + + ** The preceding item will be matched zero or more times. + + ++ The preceding item will be matched one or more times. + + {{nn}} + The preceding item is matched exactly _n times. + + {{nn,,}} + The preceding item is matched _n or more times. + + {{,,mm}} + The preceding item is matched at most _m times. + + {{nn,,mm}} + The preceding item is matched at least _n times, but no more than + _m times. + + Two regular expressions may be concatenated; the resulting regular + expression matches any string formed by concatenating two substrings + that respectively match the concatenated subexpressions. + + Two regular expressions may be joined by the infix operator ``|''; the + resulting regular expression matches any string matching either + subexpression. + + Repetition takes precedence over concatenation, which in turn takes + precedence over alternation. A whole subexpression may be enclosed in + parentheses to override these precedence rules. + + NNoottee:: If you compile Mutt with the GNU _r_x package, the following + operators may also be used in regular expressions: + + \\\\yy + Matches the empty string at either the beginning or the end of a + word. + + \\\\BB + Matches the empty string within a word. + + \\\\<< + Matches the empty string at the beginning of a word. + + \\\\>> + Matches the empty string at the end of a word. + + \\\\ww + Matches any word-constituent character (letter, digit, or + underscore). + + \\\\WW + Matches any character that is not word-constituent. + + \\\\`` + Matches the empty string at the beginning of a buffer (string). + + \\\\'' + Matches the empty string at the end of a buffer. + + Please note however that these operators are not defined by POSIX, so + they may or may not be available in stock libraries on various + systems. + + 44..22.. PPaatttteerrnnss + + Many of Mutt's commands allow you to specify a pattern to match + (limit, tag-pattern, delete-pattern, etc.). There are several ways to + select messages: + + ~A all messages + ~b EXPR messages which contain EXPR in the message body + ~B EXPR messages which contain EXPR in the whole message + ~c USER messages carbon-copied to USER + ~C EXPR message is either to: or cc: EXPR + ~D deleted messages + ~d [MIN]-[MAX] messages with ``date-sent'' in a Date range + ~E expired messages + ~e EXPR message which contains EXPR in the ``Sender'' field + ~F flagged messages + ~f USER messages originating from USER + ~g cryptographically signed messages + ~G cryptographically encrypted messages + ~h EXPR messages which contain EXPR in the message header + ~k message contains PGP key material + ~i ID message which match ID in the ``Message-ID'' field + ~L EXPR message is either originated or received by EXPR + ~l message is addressed to a known mailing list + ~m [MIN]-[MAX] message in the range MIN to MAX *) + ~n [MIN]-[MAX] messages with a score in the range MIN to MAX *) + ~N new messages + ~O old messages + ~p message is addressed to you (consults alternates) + ~P message is from you (consults alternates) + ~Q messages which have been replied to + ~R read messages + ~r [MIN]-[MAX] messages with ``date-received'' in a Date range + ~S superseded messages + ~s SUBJECT messages having SUBJECT in the ``Subject'' field. + ~T tagged messages + ~t USER messages addressed to USER + ~U unread messages + ~v message is part of a collapsed thread. + ~V cryptographically verified messages + ~x EXPR messages which contain EXPR in the `References' field + ~y EXPR messages which contain EXPR in the `X-Label' field + ~z [MIN]-[MAX] messages with a size in the range MIN to MAX *) + ~= duplicated messages (see $duplicate_threads) + + Where EXPR, USER, ID, and SUBJECT are ``regular expressions''. + Special attention has to be made when using regular expressions inside + of patterns. Specifically, Mutt's parser for these patterns will + strip one level of backslash (\), which is normally used for quoting. + If it is your intention to use a backslash in the regular expression, + you will need to use two backslashes instead (\\). + + *) The forms <[MAX], >[MIN], [MIN]- and -[MAX] are allowed, too. + + 44..22..11.. PPaatttteerrnn MMooddiiffiieerr + + Note that patterns matching 'lists' of addresses (notably c,C,p,P and + t) match if there is at least one match in the whole list. If you want + to make sure that all elements of that list match, you need to prefix + your pattern with ^. This example matches all mails which only has + recipients from Germany. + + ^~C \.de$ + + 44..22..22.. CCoommpplleexx PPaatttteerrnnss + + Logical AND is performed by specifying more than one criterion. For + example: + + ~t mutt ~f elkins + + would select messages which contain the word ``mutt'' in the list of + recipients aanndd that have the word ``elkins'' in the ``From'' header + field. + + Mutt also recognizes the following operators to create more complex + search patterns: + + · ! -- logical NOT operator + + · | -- logical OR operator + + · () -- logical grouping operator + + Here is an example illustrating a complex search pattern. This + pattern will select all messages which do not contain ``mutt'' in the + ``To'' or ``Cc'' field and which are from ``elkins''. + + !(~t mutt|~c mutt) ~f elkins + + Here is an example using white space in the regular expression (note + the ' and " delimiters). For this to match, the mail's subject must + match the ``^Junk +From +Me$'' and it must be from either ``Jim + +Somebody'' or ``Ed +SomeoneElse'': + + '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")' + + Note that if a regular expression contains parenthesis, or a veritical + bar ("|"), you mmuusstt enclose the expression in double or single quotes + since those characters are also used to separate different parts of + Mutt's pattern language. For example, + + ~f "me@(mutt\.org|cs\.hmc\.edu)" + + Without the quotes, the parenthesis would truncate the regular + expression to simply _m_e_@, which is probably not what you want. + + 44..22..33.. SSeeaarrcchhiinngg bbyy DDaattee + + Mutt supports two types of dates, _a_b_s_o_l_u_t_e and _r_e_l_a_t_i_v_e. + + AAbbssoolluuttee. Dates mmuusstt be in DD/MM/YY format (month and year are + optional, defaulting to the current month and year). An example of a + valid range of dates is: + + Limit to messages matching: ~d 20/1/95-31/10 + + If you omit the minimum (first) date, and just specify ``-DD/MM/YY'', + all messages _b_e_f_o_r_e the given date will be selected. If you omit the + maximum (second) date, and specify ``DD/MM/YY-'', all messages _a_f_t_e_r + the given date will be selected. If you specify a single date with no + dash (``-''), only messages sent on the given date will be selected. + + EErrrroorr MMaarrggiinnss. You can add error margins to absolute dates. An error + margin is a sign (+ or -), followed by a digit, followed by one of the + following units: + + y years + m months + w weeks + d days + + As a special case, you can replace the sign by a ``*'' character, + which is equivalent to giving identical plus and minus error margins. + + Example: To select any messages two weeks around January 15, 2001, + you'd use the following pattern: + + Limit to messages matching: ~d 15/1/2001*2w + + RReellaattiivvee. This type of date is relative to the current date, and may + be specified as: + + · >_o_f_f_s_e_t (messages older than _o_f_f_s_e_t units) + + · <_o_f_f_s_e_t (messages newer than _o_f_f_s_e_t units) + + · =_o_f_f_s_e_t (messages exactly _o_f_f_s_e_t units old) + + _o_f_f_s_e_t is specified as a positive number with one of the following + units: + + y years + m months + w weeks + d days + + Example: to select messages less than 1 month old, you would use + + Limit to messages matching: ~d <1m + + NNoottee:: all dates used when searching are relative to the llooccaall time + zone, so unless you change the setting of your ``$index_format'' to + include a %[...] format, these are nnoott the dates shown in the main + index. + + 44..33.. UUssiinngg TTaaggss + + Sometimes it is desirable to perform an operation on a group of + messages all at once rather than one at a time. An example might be + to save messages to a mailing list to a separate folder, or to delete + all messages with a given subject. To tag all messages matching a + pattern, use the tag-pattern function, which is bound to ``shift-T'' + by default. Or you can select individual messages by hand using the + ``tag-message'' function, which is bound to ``t'' by default. See + ``patterns'' for Mutt's pattern matching syntax. + + Once you have tagged the desired messages, you can use the ``tag- + prefix'' operator, which is the ``;'' (semicolon) key by default. + When the ``tag-prefix'' operator is used, the nneexxtt operation will be + applied to all tagged messages if that operation can be used in that + manner. If the ``$auto_tag'' variable is set, the next operation + applies to the tagged messages automatically, without requiring the + ``tag-prefix''. + + 44..44.. UUssiinngg HHooookkss + + A _h_o_o_k is a concept borrowed from the EMACS editor which allows you to + execute arbitrary commands before performing some operation. For + example, you may wish to tailor your configuration based upon which + mailbox you are reading, or to whom you are sending mail. In the Mutt + world, a _h_o_o_k consists of a ``regular expression'' or ``pattern'' + along with a configuration option/command. See + + · ``folder-hook'' + + · ``send-hook'' + + · ``message-hook'' + + · ``save-hook'' + + · ``mbox-hook'' + + · ``fcc-hook'' + + · ``fcc-save-hook'' + + for specific details on each type of _h_o_o_k available. + + NNoottee:: if a hook changes configuration settings, these changes remain + effective until the end of the current mutt session. As this is + generally not desired, a default hook needs to be added before all + other hooks to restore configuration defaults. Here is an example with + send-hook and the my_hdr directive: + + send-hook . 'unmy_hdr From:' + send-hook ~Cb@b.b my_hdr from: c@c.c + + 44..44..11.. MMeessssaaggee MMaattcchhiinngg iinn HHooookkss + + Hooks that act upon messages (send-hook, save-hook, fcc-hook, message- + hook) are evaluated in a slightly different manner. For the other + types of hooks, a ``regular expression'' is sufficient. But in + dealing with messages a finer grain of control is needed for matching + since for different purposes you want to match different criteria. + + Mutt allows the use of the ``search pattern'' language for matching + messages in hook commands. This works in exactly the same way as it + would when _l_i_m_i_t_i_n_g or _s_e_a_r_c_h_i_n_g the mailbox, except that you are + restricted to those operators which match information mutt extracts + from the header of the message (i.e. from, to, cc, date, subject, + etc.). + + For example, if you wanted to set your return address based upon + sending mail to a specific address, you could do something like: + + send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User <user@host>' + + which would execute the given command when sending mail to + _m_e_@_c_s_._h_m_c_._e_d_u. + + However, it is not required that you write the pattern to match using + the full searching language. You can still specify a simple _r_e_g_u_l_a_r + _e_x_p_r_e_s_s_i_o_n like the other hooks, in which case Mutt will translate + your pattern into the full language, using the translation specified + by the ``$default_hook'' variable. The pattern is translated at the + time the hook is declared, so the value of ``$default_hook'' that is + in effect at that time will be used. + + 44..55.. EExxtteerrnnaall AAddddrreessss QQuueerriieess + + Mutt supports connecting to external directory databases such as LDAP, + ph/qi, bbdb, or NIS through a wrapper script which connects to mutt + using a simple interface. Using the ``$query_command'' variable, you + specify the wrapper command to use. For example: + + set query_command = "mutt_ldap_query.pl '%s'" + + The wrapper script should accept the query on the command-line. It + should return a one line message, then each matching response on a + single line, each line containing a tab separated address then name + then some other optional information. On error, or if there are no + matching addresses, return a non-zero exit code and a one line error + message. + + An example multiple response output: + + Searching database ... 20 entries ... 3 matching: + me@cs.hmc.edu Michael Elkins mutt dude + blong@fiction.net Brandon Long mutt and more + roessler@guug.de Thomas Roessler mutt pgp + + There are two mechanisms for accessing the query function of mutt. + One is to do a query from the index menu using the query function + (default: Q). This will prompt for a query, then bring up the query + menu which will list the matching responses. From the query menu, you + can select addresses to create aliases, or to mail. You can tag + multiple messages to mail, start a new query, or have a new query + appended to the current responses. + + The other mechanism for accessing the query function is for address + completion, similar to the alias completion. In any prompt for + address entry, you can use the complete-query function (default: ^T) + to run a query based on the current address you have typed. Like + aliases, mutt will look for what you have typed back to the last space + or comma. If there is a single response for that query, mutt will + expand the address in place. If there are multiple responses, mutt + will activate the query menu. At the query menu, you can select one + or more addresses to be added to the prompt. + + 44..66.. MMaaiillbbooxx FFoorrmmaattss + + Mutt supports reading and writing of four different mailbox formats: + mbox, MMDF, MH and Maildir. The mailbox type is autodetected, so + there is no need to use a flag for different mailbox types. When + creating new mailboxes, Mutt uses the default specified with the + ``$mbox_type'' variable. + + mmbbooxx. This is the most widely used mailbox format for UNIX. All + messages are stored in a single file. Each message has a line of the + form: + + From me@cs.hmc.edu Fri, 11 Apr 1997 11:44:56 PST + + to denote the start of a new message (this is often referred to as the + ``From_'' line). + + MMMMDDFF. This is a variant of the _m_b_o_x format. Each message is + surrounded by lines containing ``^A^A^A^A'' (four control-A's). + + MMHH. A radical departure from _m_b_o_x and _M_M_D_F, a mailbox consists of a + directory and each message is stored in a separate file. The filename + indicates the message number (however, this is may not correspond to + the message number Mutt displays). Deleted messages are renamed with a + comma (,) prepended to the filename. NNoottee:: Mutt detects this type of + mailbox by looking for either .mh_sequences or .xmhcache (needed to + distinguish normal directories from MH mailboxes). + + MMaaiillddiirr. The newest of the mailbox formats, used by the Qmail MTA (a + replacement for sendmail). Similar to _M_H, except that it adds three + subdirectories of the mailbox: _t_m_p, _n_e_w and _c_u_r. Filenames for the + messages are chosen in such a way they are unique, even when two + programs are writing the mailbox over NFS, which means that no file + locking is needed. + 44..77.. MMaaiillbbooxx SShhoorrttccuuttss + + There are a number of built in shortcuts which refer to specific + mailboxes. These shortcuts can be used anywhere you are prompted for + a file or mailbox path. + + · ! -- refers to your ``$spoolfile'' (incoming) mailbox + + · > -- refers to your ``$mbox'' file + + · < -- refers to your ``$record'' file + + · - or !! -- refers to the file you've last visited + + · ~ -- refers to your home directory + + · = or + -- refers to your ``$folder'' directory + + · @_a_l_i_a_s -- refers to the ``default save folder'' as determined by + the address of the alias + + 44..88.. HHaannddlliinngg MMaaiilliinngg LLiissttss + + Mutt has a few configuration options that make dealing with large + amounts of mail easier. The first thing you must do is to let Mutt + know what addresses you consider to be mailing lists (technically this + does not have to be a mailing list, but that is what it is most often + used for), and what lists you are subscribed to. This is accomplished + through the use of the ``lists and subscribe'' commands in your + muttrc. + + Now that Mutt knows what your mailing lists are, it can do several + things, the first of which is the ability to show the name of a list + through which you received a message (i.e., of a subscribed list) in + the _i_n_d_e_x menu display. This is useful to distinguish between + personal and list mail in the same mailbox. In the ``$index_format'' + variable, the escape ``%L'' will return the string ``To <list>'' when + ``list'' appears in the ``To'' field, and ``Cc <list>'' when it + appears in the ``Cc'' field (otherwise it returns the name of the + author). + + Often times the ``To'' and ``Cc'' fields in mailing list messages tend + to get quite large. Most people do not bother to remove the author of + the message they are reply to from the list, resulting in two or more + copies being sent to that person. The ``list-reply'' function, which + by default is bound to ``L'' in the _i_n_d_e_x menu and _p_a_g_e_r, helps reduce + the clutter by only replying to the known mailing list addresses + instead of all recipients (except as specified by Mail-Followup-To, + see below). + + Mutt also supports the Mail-Followup-To header. When you send a + message to a list of recipients which includes one or several + subscribed mailing lists, and if the ``$followup_to'' option is set, + mutt will generate a Mail-Followup-To header which contains all the + recipients to whom you send this message, but not your address. This + indicates that group-replies or list-replies (also known as + ``followups'') to this message should only be sent to the original + recipients of the message, and not separately to you - you'll receive + your copy through one of the mailing lists you are subscribed to. + + Conversely, when group-replying or list-replying to a message which + has a Mail-Followup-To header, mutt will respect this header if the + ``$honor_followup_to'' configuration variable is set. Using list- + reply will in this case also make sure that the reply goes to the + mailing list, even if it's not specified in the list of recipients in + the Mail-Followup-To. + + Note that, when header editing is enabled, you can create a Mail- + Followup-To header manually. Mutt will only auto-generate this header + if it doesn't exist when you send the message. + + The other method some mailing list admins use is to generate a + ``Reply-To'' field which points back to the mailing list address + rather than the author of the message. This can create problems when + trying to reply directly to the author in private, since most mail + clients will automatically reply to the address given in the ``Reply- + To'' field. Mutt uses the ``$reply_to'' variable to help decide which + address to use. If set, you will be prompted as to whether or not you + would like to use the address given in the ``Reply-To'' field, or + reply directly to the address given in the ``From'' field. When + unset, the ``Reply-To'' field will be used when present. + + The ``X-Label:'' header field can be used to further identify mailing + lists or list subject matter (or just to annotate messages + individually). The ``$index_format'' variable's ``%y'' and ``%Y'' + escapes can be used to expand ``X-Label:'' fields in the index, and + Mutt's pattern-matcher can match regular expressions to ``X-Label:'' + fields with the `` y'' selector. ``X-Label:'' is not a standard + message header field, but it can easily be inserted by procmail and + other mail filtering agents. + + Lastly, Mutt has the ability to ``sort'' the mailbox into ``threads''. + A thread is a group of messages which all relate to the same subject. + This is usually organized into a tree-like structure where a message + and all of its replies are represented graphically. If you've ever + used a threaded news client, this is the same concept. It makes + dealing with large volume mailing lists easier because you can easily + delete uninteresting threads and quickly find topics of value. + + 44..99.. DDeelliivveerryy SSttaattuuss NNoottiiffiiccaattiioonn ((DDSSNN)) SSuuppppoorrtt + + RFC1894 defines a set of MIME content types for relaying information + about the status of electronic mail messages. These can be thought of + as ``return receipts.'' Berkeley sendmail 8.8.x currently has some + command line options in which the mail client can make requests as to + what type of status messages should be returned. + + To support this, there are two variables. ``$dsn_notify'' is used to + request receipts for different results (such as failed message, + message delivered, etc.). ``$dsn_return'' requests how much of your + message should be returned with the receipt (headers or full message). + Refer to the man page on sendmail for more details on DSN. + + 44..1100.. PPOOPP33 SSuuppppoorrtt ((OOPPTTIIOONNAALL)) + + If Mutt was compiled with POP3 support (by running the _c_o_n_f_i_g_u_r_e + script with the _-_-_e_n_a_b_l_e_-_p_o_p flag), it has the ability to work with + mailboxes located on a remote POP3 server and fetch mail for local + browsing. + + You can access the remote POP3 mailbox by selecting the folder + pop://popserver/. + + You can select an alternative port by specifying it with the server, + ie: pop://popserver:port/. + You can also specify different username for each folder, ie: + pop://username@popserver[:port]/. + + Polling for new mail is more expensive over POP3 than locally. For + this reason the frequency at which Mutt will check for mail remotely + can be controlled by the ``$pop_checkinterval'' variable, which + defaults to every 60 seconds. + + If Mutt was compiled with SSL support (by running the _c_o_n_f_i_g_u_r_e script + with the _-_-_w_i_t_h_-_s_s_l flag), connections to POP3 servers can be + encrypted. This naturally requires that the server supports SSL + encrypted connections. To access a folder with POP3/SSL, you should + use pops: prefix, ie: pops://[username@]popserver[:port]/. + + Another way to access your POP3 mail is the _f_e_t_c_h_-_m_a_i_l function + (default: G). It allows to connect to ``pop_host'', fetch all your + new mail and place it in the local ``spoolfile''. After this point, + Mutt runs exactly as if the mail had always been local. + + NNoottee:: If you only need to fetch all messages to local mailbox you + should consider using a specialized program, such as fetchmail + + 44..1111.. IIMMAAPP SSuuppppoorrtt ((OOPPTTIIOONNAALL)) + + If Mutt was compiled with IMAP support (by running the _c_o_n_f_i_g_u_r_e + script with the _-_-_e_n_a_b_l_e_-_i_m_a_p flag), it has the ability to work with + folders located on a remote IMAP server. + + You can access the remote inbox by selecting the folder + imap://imapserver/INBOX, where imapserver is the name of the IMAP + server and INBOX is the special name for your spool mailbox on the + IMAP server. If you want to access another mail folder at the IMAP + server, you should use imap://imapserver/path/to/folder where + path/to/folder is the path of the folder you want to access. + + You can select an alternative port by specifying it with the server, + ie: imap://imapserver:port/INBOX. + + You can also specify different username for each folder, ie: + imap://username@imapserver[:port]/INBOX. + + If Mutt was compiled with SSL support (by running the _c_o_n_f_i_g_u_r_e script + with the _-_-_w_i_t_h_-_s_s_l flag), connections to IMAP servers can be + encrypted. This naturally requires that the server supports SSL + encrypted connections. To access a folder with IMAP/SSL, you should + use imaps://[username@]imapserver[:port]/path/to/folder as your folder + path. + + Pine-compatible notation is also supported, ie + {[username@]imapserver[:port][/ssl]}path/to/folder + + Note that not all servers use / as the hierarchy separator. Mutt + should correctly notice which separator is being used by the server + and convert paths accordingly. + + When browsing folders on an IMAP server, you can toggle whether to + look at only the folders you are subscribed to, or all folders with + the _t_o_g_g_l_e_-_s_u_b_s_c_r_i_b_e_d command. See also the ``$imap_list_subscribed'' + variable. + + Polling for new mail on an IMAP server can cause noticeable delays. + So, you'll want to carefully tune the ``$mail_check'' and ``$timeout'' + variables. Personally I use + + set mail_check=90 + set timeout=15 + + with relatively good results over my slow modem line. + + Note that if you are using mbox as the mail store on UW servers prior + to v12.250, the server has been reported to disconnect a client if + another client selects the same folder. + + 44..1111..11.. TThhee FFoollddeerr BBrroowwsseerr + + As of version 1.2, mutt supports browsing mailboxes on an IMAP server. + This is mostly the same as the local file browser, with the following + differences: + + · In lieu of file permissions, mutt displays the string "IMAP", + possibly followed by the symbol "+", indicating that the entry + contains both messages and subfolders. On Cyrus-like servers + folders will often contain both messages and subfolders. + + · For the case where an entry can contain both messages and + subfolders, the selection key (bound to enter by default) will + choose to descend into the subfolder view. If you wish to view the + messages in that folder, you must use view-file instead (bound to + space by default). + + · You can delete mailboxes with the delete-mailbox command (bound to + d by default. You may also subscribe and unsubscribe to mailboxes + (normally these are bound to s and u, respectively). + + 44..1111..22.. AAuutthheennttiiccaattiioonn + + Mutt supports four authentication methods with IMAP servers: SASL, + GSSAPI, CRAM-MD5, and LOGIN (there is a patch by Grant Edwards to add + NTLM authentication for you poor exchange users out there, but it has + yet to be integrated into the main tree). There is also support for + the pseudo-protocol ANONYMOUS, which allows you to log in to a public + IMAP server without having an account. To use ANONYMOUS, simply make + your username blank or "anonymous". + + SASL is a special super-authenticator, which selects among several + protocols (including GSSAPI, CRAM-MD5, ANONYMOUS, and DIGEST-MD5) the + most secure method available on your host and the server. Using some + of these methods (including DIGEST-MD5 and possibly GSSAPI), your + entire session will be encrypted and invisible to those teeming + network snoops. It is the best option if you have it. To use it, you + must have the Cyrus SASL library installed on your system and compile + mutt with the _-_-_w_i_t_h_-_s_a_s_l flag. + + Mutt will try whichever methods are compiled in and available on the + server, in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, + LOGIN. + + There are a few variables which control authentication: + + · ``$imap_user'' - controls the username under which you request + authentication on the IMAP server, for all authenticators. This is + overridden by an explicit username in the mailbox path (ie by using + a mailbox name of the form {user@host}). + · ``$imap_pass'' - a password which you may preset, used by all + authentication methods where a password is needed. + + · ``$imap_authenticators'' - a colon-delimited list of IMAP + authentication methods to try, in the order you wish to try them. + If specified, this overrides mutt's default (attempt everything, in + the order listed above). + + 44..1122.. MMaannaaggiinngg mmuullttiippllee IIMMAAPP//PPOOPP aaccccoouunnttss ((OOPPTTIIOONNAALL)) + + If you happen to have accounts on multiple IMAP and/or POP servers, + you may find managing all the authentication settings inconvenient and + error-prone. The account-hook command may help. This hook works like + folder-hook but is invoked whenever you access a remote mailbox + (including inside the folder browser), not just when you open the + mailbox. + + Some examples: + + account-hook . 'unset imap_user; unset imap_pass; unset tunnel' + account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo' + account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"' + + 44..1133.. SSttaarrtt aa WWWWWW BBrroowwsseerr oonn UURRLLss ((EEXXTTEERRNNAALL)) + + If a message contains URLs (_u_n_i_f_i_e_d _r_e_s_s_o_u_r_c_e _l_o_c_a_t_o_r = address in the + WWW space like _h_t_t_p_:_/_/_w_w_w_._m_u_t_t_._o_r_g_/), it is efficient to get a menu + with all the URLs and start a WWW browser on one of them. This + functionality is provided by the external urlview program which can be + retrieved at ftp://ftp.mutt.org/mutt/contrib/ and the configuration + commands: + + macro index \cb |urlview\n + macro pager \cb |urlview\n + + 55.. MMuutttt''ss MMIIMMEE SSuuppppoorrtt + + Quite a bit of effort has been made to make Mutt the premier text-mode + MIME MUA. Every effort has been made to provide the functionality + that the discerning MIME user requires, and the conformance to the + standards wherever possible. When configuring Mutt for MIME, there + are two extra types of configuration files which Mutt uses. One is + the mime.types file, which contains the mapping of file extensions to + IANA MIME types. The other is the mailcap file, which specifies the + external commands to use for handling specific MIME types. + + 55..11.. UUssiinngg MMIIMMEE iinn MMuutttt + + There are three areas/menus in Mutt which deal with MIME, they are the + pager (while viewing a message), the attachment menu and the compose + menu. + + 55..11..11.. VViieewwiinngg MMIIMMEE mmeessssaaggeess iinn tthhee ppaaggeerr + + When you select a message from the index and view it in the pager, + Mutt decodes the message to a text representation. Mutt internally + supports a number of MIME types, including text/plain, text/enriched, + message/rfc822, and message/news. In addition, the export controlled + version of Mutt recognizes a variety of PGP MIME types, including + PGP/MIME and application/pgp. + + Mutt will denote attachments with a couple lines describing them. + These lines are of the form: + + [-- Attachment #1: Description --] + [-- Type: text/plain, Encoding: 7bit, Size: 10000 --] + + Where the Description is the description or filename given for the + attachment, and the Encoding is one of 7bit/8bit/quoted-print­ + able/base64/binary. + + If Mutt cannot deal with a MIME type, it will display a message like: + + [-- image/gif is unsupported (use 'v' to view this part) --] + + 55..11..22.. TThhee AAttttaacchhmmeenntt MMeennuu + + The default binding for view-attachments is `v', which displays the + attachment menu for a message. The attachment menu displays a list of + the attachments in a message. From the attachment menu, you can save, + print, pipe, delete, and view attachments. You can apply these + operations to a group of attachments at once, by tagging the + attachments and by using the ``tag-prefix'' operator. You can also + reply to the current message from this menu, and only the current + attachment (or the attachments tagged) will be quoted in your reply. + You can view attachments as text, or view them using the mailcap + viewer definition. + + Finally, you can apply the usual message-related functions (like + ``resend-message'', and the reply and forward functions) to + attachments of type message/rfc822. + + See the help on the attachment menu for more information. + + 55..11..33.. TThhee CCoommppoossee MMeennuu + + The compose menu is the menu you see before you send a message. It + allows you to edit the recipient list, the subject, and other aspects + of your message. It also contains a list of the attachments of your + message, including the main body. From this menu, you can print, + copy, filter, pipe, edit, compose, review, and rename an attachment or + a list of tagged attachments. You can also modifying the attachment + information, notably the type, encoding and description. + + Attachments appear as follows: + + - 1 [text/plain, 7bit, 1K] /tmp/mutt-euler-8082-0 <no description> + 2 [applica/x-gunzip, base64, 422K] ~/src/mutt-0.85.tar.gz <no description> + + The '-' denotes that Mutt will delete the file after sending (or + postponing, or cancelling) the message. It can be toggled with the + toggle-unlink command (default: u). The next field is the MIME + content-type, and can be changed with the edit-type command (default: + ^T). The next field is the encoding for the attachment, which allows + a binary message to be encoded for transmission on 7bit links. It can + be changed with the edit-encoding command (default: ^E). The next + field is the size of the attachment, rounded to kilobytes or + megabytes. The next field is the filename, which can be changed with + the rename-file command (default: R). The final field is the + description of the attachment, and can be changed with the edit- + description command (default: d). + + 55..22.. MMIIMMEE TTyyppee ccoonnffiigguurraattiioonn wwiitthh mmiimmee..ttyyppeess + + When you add an attachment to your mail message, Mutt searches your + personal mime.types file at ${HOME}/.mime.types, and then the system + mime.types file at /usr/local/share/mutt/mime.types or /etc/mime.types + + The mime.types file consist of lines containing a MIME type and a + space separated list of extensions. For example: + + application/postscript ps eps + application/pgp pgp + audio/x-aiff aif aifc aiff + + A sample mime.types file comes with the Mutt distribution, and should + contain most of the MIME types you are likely to use. + + If Mutt can not determine the mime type by the extension of the file + you attach, it will look at the file. If the file is free of binary + information, Mutt will assume that the file is plain text, and mark it + as text/plain. If the file contains binary information, then Mutt + will mark it as application/octet-stream. You can change the MIME + type that Mutt assigns to an attachment by using the edit-type command + from the compose menu (default: ^T). The MIME type is actually a major + mime type followed by the sub-type, separated by a '/'. 6 major types: + application, text, image, video, audio, and model have been approved + after various internet discussions. Mutt recognises all of these if + the appropriate entry is found in the mime.types file. It also + recognises other major mime types, such as the chemical type that is + widely used in the molecular modelling community to pass molecular + data in various forms to various molecular viewers. Non-recognised + mime types should only be used if the recipient of the message is + likely to be expecting such attachments. + + 55..33.. MMIIMMEE VViieewweerr ccoonnffiigguurraattiioonn wwiitthh mmaaiillccaapp + + Mutt supports RFC 1524 MIME Configuration, in particular the Unix + specific format specified in Appendix A of RFC 1524. This file format + is commonly referred to as the mailcap format. Many MIME compliant + programs utilize the mailcap format, allowing you to specify handling + for all MIME types in one place for all programs. Programs known to + use this format include Netscape, XMosaic, lynx and metamail. + + In order to handle various MIME types that Mutt can not handle + internally, Mutt parses a series of external configuration files to + find an external handler. The default search string for these files + is a colon delimited list set to + + ${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap + + where $HOME is your home directory. + + In particular, the metamail distribution will install a mailcap file, + usually as /usr/local/etc/mailcap, which contains some baseline + entries. + + 55..33..11.. TThhee BBaassiiccss ooff tthhee mmaaiillccaapp ffiillee + + A mailcap file consists of a series of lines which are comments, + blank, or definitions. + + A comment line consists of a # character followed by anything you + want. + + A blank line is blank. + + A definition line consists of a content type, a view command, and any + number of optional fields. Each field of a definition line is divided + by a semicolon ';' character. + + The content type is specified in the MIME standard type/subtype + method. For example, text/plain, text/html, image/gif, etc. In + addition, the mailcap format includes two formats for wildcards, one + using the special '*' subtype, the other is the implicit wild, where + you only include the major type. For example, image/*, or video, will + match all image types and video types, respectively. + + The view command is a Unix command for viewing the type specified. + There are two different types of commands supported. The default is to + send the body of the MIME message to the command on stdin. You can + change this behaviour by using %s as a parameter to your view command. + This will cause Mutt to save the body of the MIME message to a + temporary file, and then call the view command with the %s replaced by + the name of the temporary file. In both cases, Mutt will turn over the + terminal to the view program until the program quits, at which time + Mutt will remove the temporary file if it exists. + + So, in the simplest form, you can send a text/plain message to the + external pager more on stdin: + + text/plain; more + + Or, you could send the message as a file: + + text/plain; more %s + + Perhaps you would like to use lynx to interactively view a text/html + message: + + text/html; lynx %s + + In this case, lynx does not support viewing a file from stdin, so you + must use the %s syntax. NNoottee:: _S_o_m_e _o_l_d_e_r _v_e_r_s_i_o_n_s _o_f _l_y_n_x _c_o_n_t_a_i_n _a + _b_u_g _w_h_e_r_e _t_h_e_y _w_i_l_l _c_h_e_c_k _t_h_e _m_a_i_l_c_a_p _f_i_l_e _f_o_r _a _v_i_e_w_e_r _f_o_r _t_e_x_t_/_h_t_m_l_. + _T_h_e_y _w_i_l_l _f_i_n_d _t_h_e _l_i_n_e _w_h_i_c_h _c_a_l_l_s _l_y_n_x_, _a_n_d _r_u_n _i_t_. _T_h_i_s _c_a_u_s_e_s + _l_y_n_x _t_o _c_o_n_t_i_n_u_o_u_s_l_y _s_p_a_w_n _i_t_s_e_l_f _t_o _v_i_e_w _t_h_e _o_b_j_e_c_t_. + + On the other hand, maybe you don't want to use lynx interactively, you + just want to have it convert the text/html to text/plain, then you can + use: + + text/html; lynx -dump %s | more + + Perhaps you wish to use lynx to view text/html files, and a pager on + all other text formats, then you would use the following: + + text/html; lynx %s + text/*; more + + This is the simplest form of a mailcap file. + + 55..33..22.. SSeeccuurree uussee ooff mmaaiillccaapp + + The interpretion of shell meta-characters embedded in MIME parameters + can lead to security problems in general. Mutt tries to quote + parameters in expansion of %s syntaxes properly, and avoids risky + characters by substituting them, see the ``mailcap_sanitize'' + variable. + + Although mutt's procedures to invoke programs with mailcap seem to be + safe, there are other applications parsing mailcap, maybe taking less + care of it. Therefore you should pay attention to the following + rules: + + _K_e_e_p _t_h_e _%_-_e_x_p_a_n_d_o_s _a_w_a_y _f_r_o_m _s_h_e_l_l _q_u_o_t_i_n_g_. Don't quote them with + single or double quotes. Mutt does this for you, the right way, as + should any other program which interprets mailcap. Don't put them + into backtick expansions. Be highly careful with eval statements, and + avoid them if possible at all. Trying to fix broken behaviour with + quotes introduces new leaks - there is no alternative to correct + quoting in the first place. + + If you have to use the %-expandos' values in context where you need + quoting or backtick expansions, put that value into a shell variable + and reference the shell variable where necessary, as in the following + example (using $charset inside the backtick expansion is safe, since + it is not itself subject to any further expansion): + + text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \ + && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1 + + 55..33..33.. AAddvvaanncceedd mmaaiillccaapp UUssaaggee + + 55..33..33..11.. OOppttiioonnaall FFiieellddss + + In addition to the required content-type and view command fields, you + can add semi-colon ';' separated fields to set flags and other + options. Mutt recognizes the following optional fields: + + ccooppiioouussoouuttppuutt + This flag tells Mutt that the command passes possibly large + amounts of text on stdout. This causes Mutt to invoke a pager + (either the internal pager or the external pager defined by the + pager variable) on the output of the view command. Without this + flag, Mutt assumes that the command is interactive. One could + use this to replace the pipe to more in the lynx -dump example + in the Basic section: + + text/html; lynx -dump %s ; copiousoutput + + This will cause lynx to format the text/html output as text/plain + and Mutt will use your standard pager to display the results. + + nneeeeddsstteerrmmiinnaall + Mutt uses this flag when viewing attachments with ``autoview'', + in order to decide whether it should honor the setting of the + ``$wait_key'' variable or not. When an attachment is viewed + using an interactive program, and the corresponding mailcap + entry has a _n_e_e_d_s_t_e_r_m_i_n_a_l flag, Mutt will use ``$wait_key'' and + the exit status of the program to decide if it will ask you to + press a key after the external program has exited. In all other + situations it will not prompt you for a key. + + ccoommppoossee==<<ccoommmmaanndd>> + This flag specifies the command to use to create a new + attachment of a specific MIME type. Mutt supports this from the + compose menu. + + ccoommppoosseettyyppeedd==<<ccoommmmaanndd>> + This flag specifies the command to use to create a new + attachment of a specific MIME type. This command differs from + the compose command in that mutt will expect standard MIME + headers on the data. This can be used to specify parameters, + filename, description, etc. for a new attachment. Mutt + supports this from the compose menu. + + pprriinntt==<<ccoommmmaanndd>> + This flag specifies the command to use to print a specific MIME + type. Mutt supports this from the attachment and compose menus. + + eeddiitt==<<ccoommmmaanndd>> + This flag specifies the command to use to edit a specific MIME + type. Mutt supports this from the compose menu, and also uses + it to compose new attachments. Mutt will default to the defined + editor for text attachments. + + nnaammeetteemmppllaattee==<<tteemmppllaattee>> + This field specifies the format for the file denoted by %s in + the command fields. Certain programs will require a certain + file extension, for instance, to correctly view a file. For + instance, lynx will only interpret a file as text/html if the + file ends in .html. So, you would specify lynx as a text/html + viewer with a line in the mailcap file like: + + text/html; lynx %s; nametemplate=%s.html + + tteesstt==<<ccoommmmaanndd>> + This field specifies a command to run to test whether this + mailcap entry should be used. The command is defined with the + command expansion rules defined in the next section. If the + command returns 0, then the test passed, and Mutt uses this + entry. If the command returns non-zero, then the test failed, + and Mutt continues searching for the right entry. NNoottee:: _t_h_e + _c_o_n_t_e_n_t_-_t_y_p_e _m_u_s_t _m_a_t_c_h _b_e_f_o_r_e _M_u_t_t _p_e_r_f_o_r_m_s _t_h_e _t_e_s_t_. For + example: + + text/html; netscape -remote 'openURL(%s)' ; test=RunningX + text/html; lynx %s + + In this example, Mutt will run the program RunningX which will + return 0 if the X Window manager is running, and non-zero if it + isn't. If RunningX returns 0, then Mutt will call netscape to dis­ + play the text/html object. If RunningX doesn't return 0, then Mutt + will go on to the next entry and use lynx to display the text/html + object. + + 55..33..33..22.. SSeeaarrcchh OOrrddeerr + + When searching for an entry in the mailcap file, Mutt will search for + the most useful entry for its purpose. For instance, if you are + attempting to print an image/gif, and you have the following entries + in your mailcap file, Mutt will search for an entry with the print + command: + + image/*; xv %s + image/gif; ; print= anytopnm %s | pnmtops | lpr; \ + nametemplate=%s.gif + + Mutt will skip the image/* entry and use the image/gif entry with the + print command. + + In addition, you can use this with ``Autoview'' to denote two commands + for viewing an attachment, one to be viewed automatically, the other + to be viewed interactively from the attachment menu. In addition, you + can then use the test feature to determine which viewer to use + interactively depending on your environment. + + text/html; netscape -remote 'openURL(%s)' ; test=RunningX + text/html; lynx %s; nametemplate=%s.html + text/html; lynx -dump %s; nametemplate=%s.html; copiousoutput + + For ``Autoview'', Mutt will choose the third entry because of the + copiousoutput tag. For interactive viewing, Mutt will run the program + RunningX to determine if it should use the first entry. If the pro­ + gram returns non-zero, Mutt will use the second entry for interactive + viewing. + + 55..33..33..33.. CCoommmmaanndd EExxppaannssiioonn + + The various commands defined in the mailcap files are passed to the + /bin/sh shell using the system() function. Before the command is + passed to /bin/sh -c, it is parsed to expand various special + parameters with information from Mutt. The keywords Mutt expands are: + + %%ss As seen in the basic mailcap section, this variable is expanded + to a filename specified by the calling program. This file + contains the body of the message to view/print/edit or where the + composing program should place the results of composition. In + addition, the use of this keyword causes Mutt to not pass the + body of the message to the view/print/edit program on stdin. + + %%tt Mutt will expand %t to the text representation of the content + type of the message in the same form as the first parameter of + the mailcap definition line, ie text/html or image/gif. + + %%{{<<ppaarraammeetteerr>>}} + Mutt will expand this to the value of the specified parameter + from the Content-Type: line of the mail message. For instance, + if Your mail message contains: + + Content-Type: text/plain; charset=iso-8859-1 + + then Mutt will expand %{charset} to iso-8859-1. The default meta­ + mail mailcap file uses this feature to test the charset to spawn an + xterm using the right charset to view the message. + + \\%% This will be replaced by a % + + Mutt does not currently support the %F and %n keywords specified in + RFC 1524. The main purpose of these parameters is for multipart mes­ + sages, which is handled internally by Mutt. + + 55..33..44.. EExxaammppllee mmaaiillccaapp ffiilleess + + This mailcap file is fairly simple and standard: + + ______________________________________________________________________ + # I'm always running X :) + video/*; xanim %s > /dev/null + image/*; xv %s > /dev/null + + # I'm always running netscape (if my computer had more memory, maybe) + text/html; netscape -remote 'openURL(%s)' + ______________________________________________________________________ + + This mailcap file shows quite a number of examples: + + ______________________________________________________________________ + # Use xanim to view all videos Xanim produces a header on startup, + # send that to /dev/null so I don't see it + video/*; xanim %s > /dev/null + + # Send html to a running netscape by remote + text/html; netscape -remote 'openURL(%s)'; test=RunningNetscape + + # If I'm not running netscape but I am running X, start netscape on the + # object + text/html; netscape %s; test=RunningX + + # Else use lynx to view it as text + text/html; lynx %s + + # This version would convert the text/html to text/plain + text/html; lynx -dump %s; copiousoutput + + # I use enscript to print text in two columns to a page + text/*; more %s; print=enscript -2Gr %s + + # Netscape adds a flag to tell itself to view jpegs internally + image/jpeg;xv %s; x-mozilla-flags=internal + + # Use xv to view images if I'm running X + # In addition, this uses the \ to extend the line and set my editor + # for images + image/*;xv %s; test=RunningX; \ + edit=xpaint %s + + # Convert images to text using the netpbm tools + image/*; (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm | + pbmtoascii -1x2 ) 2>&1 ; copiousoutput + + # Send excel spreadsheets to my NT box + application/ms-excel; open.pl %s + ______________________________________________________________________ + + 55..44.. MMIIMMEE AAuuttoovviieeww + + In addition to explicitly telling Mutt to view an attachment with the + MIME viewer defined in the mailcap file, Mutt has support for + automatically viewing MIME attachments while in the pager. + + To work, you must define a viewer in the mailcap file which uses the + copiousoutput option to denote that it is non-interactive. Usually, + you also use the entry to convert the attachment to a text + representation which you can view in the pager. + + You then use the auto_view muttrc command to list the content-types + that you wish to view automatically. + + For instance, if you set auto_view to: + + auto_view text/html application/x-gunzip application/postscript image/gif application/x-tar-gz + + Mutt could use the following mailcap entries to automatically view + attachments of these types. + + text/html; lynx -dump %s; copiousoutput; nametemplate=%s.html + image/*; anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | pgmtopbm | pbmtoascii ; copiousoutput + application/x-gunzip; gzcat; copiousoutput + application/x-tar-gz; gunzip -c %s | tar -tf - ; copiousoutput + application/postscript; ps2ascii %s; copiousoutput + + ``unauto_view'' can be used to remove previous entries from the + autoview list. This can be used with message-hook to autoview + messages based on size, etc. ``unauto_view *'' will remove all + previous entries. + + 55..55.. MMIIMMEE MMuullttiippaarrtt//AAlltteerrnnaattiivvee + + Mutt has some heuristics for determining which attachment of a + multipart/alternative type to display. First, mutt will check the + alternative_order list to determine if one of the available types is + preferred. The alternative_order list consists of a number of + mimetypes in order, including support for implicit and explicit + wildcards, for example: + + alternative_order text/enriched text/plain text application/postscript image/* + + Next, mutt will check if any of the types have a defined + ``auto_view'', and use that. Failing that, Mutt will look for any + text type. As a last attempt, mutt will look for any type it knows + how to handle. + + To remove a MIME type from the alternative_order list, use the + unalternative_order command. + + 55..66.. MMIIMMEE LLooookkuupp + + Mutt's mime_lookup list specifies a list of mime-types that should not + be treated according to their mailcap entry. This option is designed + to deal with binary types such as application/octet-stream. When an + attachment's mime-type is listed in mime_lookup, then the extension of + the filename will be compared to the list of extensions in the + mime.types file. The mime-type associated with this extension will + then be used to process the attachment according to the rules in the + mailcap file and according to any other configuration options (such as + auto_view) specified. Common usage would be: + + mime-lookup application/octet-stream application/X-Lotus-Manuscript + + In addition, the unmime_lookup command may be used to disable this + feature for any particular mime-type if it had been set, for example, + in a global muttrc. + + 66.. RReeffeerreennccee + + 66..11.. CCoommmmaanndd lliinnee ooppttiioonnss + + Running mutt with no arguments will make Mutt attempt to read your + spool mailbox. However, it is possible to read other mailboxes and to + send messages from the command line as well. + + -A expand an alias + -a attach a file to a message + -b specify a blind carbon-copy (BCC) address + -c specify a carbon-copy (Cc) address + -e specify a config command to be run after initilization files are read + -f specify a mailbox to load + -F specify an alternate file to read initialization commands + -h print help on command line options + -H specify a draft file from which to read a header and body + -i specify a file to include in a message composition + -m specify a default mailbox type + -n do not read the system Muttrc + -p recall a postponed message + -Q query a configuration variable + -R open mailbox in read-only mode + -s specify a subject (enclose in quotes if it contains spaces) + -v show version number and compile-time definitions + -x simulate the mailx(1) compose mode + -y show a menu containing the files specified by the mailboxes command + -z exit immediately if there are no messages in the mailbox + -Z open the first folder with new message,exit immediately if none + + To read messages in a mailbox + + mutt [ -nz ] [ -F _m_u_t_t_r_c ] [ -m _t_y_p_e ] [ -f _m_a_i_l_b_o_x ] + + To compose a new message + + mutt [ -n ] [ -F _m_u_t_t_r_c ] [ -a _f_i_l_e ] [ -c _a_d_d_r_e_s_s ] [ -i _f_i_l_e_n_a_m_e ] [ + -s _s_u_b_j_e_c_t ] _a_d_d_r_e_s_s [ _a_d_d_r_e_s_s ... ] + + Mutt also supports a ``batch'' mode to send prepared messages. Simply + redirect input from the file you wish to send. For example, + + mutt -s "data set for run #2" professor@bigschool.edu < ~/run2.dat + + This command will send a message to ``professor@bigschool.edu'' with a + subject of ``data set for run #2''. In the body of the message will + be the contents of the file ``~/run2.dat''. + + 66..22.. CCoonnffiigguurraattiioonn CCoommmmaannddss + + The following are the commands understood by mutt. + + · ``account-hook'' _p_a_t_t_e_r_n _c_o_m_m_a_n_d + + · ``alias'' _k_e_y _a_d_d_r_e_s_s [ , _a_d_d_r_e_s_s, ... ] + + · ``unalias'' [ * | _k_e_y ... ] + + · ``alternates'' _r_e_g_e_x_p [ _r_e_g_e_x_p ... ] + + · ``unalternates'' [ * | _r_e_g_e_x_p ... ] + + · ``alternative_order'' _m_i_m_e_t_y_p_e [ _m_i_m_e_t_y_p_e ... ] + + · ``unalternative_order'' _m_i_m_e_t_y_p_e [ _m_i_m_e_t_y_p_e ... ] + + · ``auto_view'' _m_i_m_e_t_y_p_e [ _m_i_m_e_t_y_p_e ... ] + + · ``unauto_view'' _m_i_m_e_t_y_p_e [ _m_i_m_e_t_y_p_e ... ] + + · ``bind'' _m_a_p _k_e_y _f_u_n_c_t_i_o_n + + · ``charset-hook'' _a_l_i_a_s _c_h_a_r_s_e_t + + · ``color'' _o_b_j_e_c_t _f_o_r_e_g_r_o_u_n_d _b_a_c_k_g_r_o_u_n_d [ _r_e_g_e_x_p ] + + · ``uncolor'' _i_n_d_e_x _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + · ``exec'' _f_u_n_c_t_i_o_n [ _f_u_n_c_t_i_o_n ... ] + + · ``fcc-hook'' _p_a_t_t_e_r_n _m_a_i_l_b_o_x + + · ``fcc-save-hook'' _p_a_t_t_e_r_n _m_a_i_l_b_o_x + + · ``folder-hook'' _p_a_t_t_e_r_n _c_o_m_m_a_n_d + + · ``hdr_order'' _h_e_a_d_e_r [ _h_e_a_d_e_r ... ] + + · ``unhdr_order'' _h_e_a_d_e_r [ _h_e_a_d_e_r ... ] + + · ``iconv-hook'' _c_h_a_r_s_e_t _l_o_c_a_l_-_c_h_a_r_s_e_t + + · ``ignore'' _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + · ``unignore'' _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + · ``lists'' _a_d_d_r_e_s_s [ _a_d_d_r_e_s_s ... ] + + · ``unlists'' _a_d_d_r_e_s_s [ _a_d_d_r_e_s_s ... ] + + · ``macro'' _m_e_n_u _k_e_y _s_e_q_u_e_n_c_e [ _d_e_s_c_r_i_p_t_i_o_n ] + + · ``mailboxes'' _f_i_l_e_n_a_m_e [ _f_i_l_e_n_a_m_e ... ] + + · ``mbox-hook'' _p_a_t_t_e_r_n _m_a_i_l_b_o_x + + · ``message-hook'' _p_a_t_t_e_r_n _c_o_m_m_a_n_d + + · ``mime_lookup'' _m_i_m_e_t_y_p_e [ _m_i_m_e_t_y_p_e ... ] + + · ``unmime_lookup'' _m_i_m_e_t_y_p_e [ _m_i_m_e_t_y_p_e ... ] + + · ``mono'' _o_b_j_e_c_t _a_t_t_r_i_b_u_t_e [ _r_e_g_e_x_p ] + + · ``unmono'' _i_n_d_e_x _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + · ``my_hdr'' _s_t_r_i_n_g + + · ``unmy_hdr'' _f_i_e_l_d [ _f_i_e_l_d ... ] + + · ``crypt-hook'' _p_a_t_t_e_r_n _k_e_y_-_i_d + + · ``push'' _s_t_r_i_n_g + + · ``reset'' _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ... ] + + · ``save-hook'' _r_e_g_e_x_p _f_i_l_e_n_a_m_e + + · ``score'' _p_a_t_t_e_r_n _v_a_l_u_e + + · ``unscore'' _p_a_t_t_e_r_n [ _p_a_t_t_e_r_n ... ] + + · ``send-hook'' _r_e_g_e_x_p _c_o_m_m_a_n_d + + · ``set'' [no|inv]_v_a_r_i_a_b_l_e[=_v_a_l_u_e] [ _v_a_r_i_a_b_l_e ... ] + + · ``unset'' _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ... ] + + · ``source'' _f_i_l_e_n_a_m_e + + · ``subscribe'' _a_d_d_r_e_s_s [ _a_d_d_r_e_s_s ... ] + + · ``unsubscribe'' _a_d_d_r_e_s_s [ _a_d_d_r_e_s_s ... ] + + · ``toggle'' _v_a_r_i_a_b_l_e [_v_a_r_i_a_b_l_e ... ] + + · ``unhook'' _h_o_o_k_-_t_y_p_e + + 66..33.. CCoonnffiigguurraattiioonn vvaarriiaabblleess + + 66..33..11.. aabboorrtt__nnoossuubbjjeecctt + + Type: quadoption + Default: ask-yes + + If set to _y_e_s, when composing messages and no subject is given at the + subject prompt, composition will be aborted. If set to _n_o, composing + messages with no subject given at the subject prompt will never be + aborted. + + 66..33..22.. aabboorrtt__uunnmmooddiiffiieedd + + Type: quadoption + Default: yes + + If set to _y_e_s, composition will automatically abort after editing the + message body if no changes are made to the file (this check only + happens after the _f_i_r_s_t edit of the file). When set to _n_o, + composition will never be aborted. + + 66..33..33.. aalliiaass__ffiillee + + Type: path + Default: "~/.muttrc" + + The default file in which to save aliases created by the ````create- + alias'''' function. + + NNoottee:: Mutt will not automatically source this file; you must + explicitly use the ````source'''' command for it to be executed. + + 66..33..44.. aalliiaass__ffoorrmmaatt + + Type: string + Default: "%4n %2f %t %-10a %r" + + Specifies the format of the data displayed for the `alias' menu. The + following printf(3)-style sequences are available: + + %%aa alias name + + %%ff flags - currently, a "d" for an alias marked for deletion + + %%nn index number + + %%rr address which alias expands to + + %%tt character which indicates if the alias is tagged for inclusion + + 66..33..55.. aallllooww__88bbiitt + + Type: boolean + Default: yes + + Controls whether 8-bit data is converted to 7-bit using either Quoted- + Printable or Base64 encoding when sending mail. + + 66..33..66.. aallllooww__aannssii + + Type: boolean + Default: no + + Controls whether ANSI color codes in messages (and color tags in rich + text messages) are to be interpreted. Messages containing these codes + are rare, but if this option is set, their text will be colored + accordingly. Note that this may override your color choices, and even + present a security problem, since a message could include a line like + "[-- PGP output follows ..." and give it the same color as your + attachment color. + + 66..33..77.. aarrrrooww__ccuurrssoorr + + Type: boolean + Default: no + + When set, an arrow (``->'') will be used to indicate the current entry + in menus instead of highlighting the whole line. On slow network or + modem links this will make response faster because there is less that + has to be redrawn on the screen when moving to the next or previous + entries in the menu. + + 66..33..88.. aasscciiii__cchhaarrss + + Type: boolean + Default: no + + If set, Mutt will use plain ASCII characters when displaying thread + and attachment trees, instead of the default _A_C_S characters. + + 66..33..99.. aasskkbbcccc + + Type: boolean + Default: no + + If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients + before editing an outgoing message. + + 66..33..1100.. aasskkcccc + + Type: boolean + Default: no + + If set, Mutt will prompt you for carbon-copy (Cc) recipients before + editing the body of an outgoing message. + + 66..33..1111.. aasskk__ffoollllooww__uupp + + Type: boolean + Default: no + + If set, Mutt will prompt you for follow-up groups before editing the + body of an outgoing message. + + 66..33..1122.. aasskk__xx__ccoommmmeenntt__ttoo + + Type: boolean + Default: no + + If set, Mutt will prompt you for x-comment-to field before editing the + body of an outgoing message. + 66..33..1133.. aattttaacchh__ffoorrmmaatt + + Type: string + Default: "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] " + + This variable describes the format of the `attachment' menu. The + following printf-style sequences are understood: + + %%CC charset + + %%cc reqiures charset conversion (n or c) + + %%DD deleted flag + + %%dd description + + %%ee MIME content-transfer-encoding + + %%ff filename + + %%II disposition (I=inline, A=attachment) + + %%mm major MIME type + + %%MM MIME subtype + + %%nn attachment number + + %%ss size + + %%tt tagged flag + + %%TT graphic tree characters + + %%uu unlink (=to delete) flag + + %%>>XX + right justify the rest of the string and pad with character "X" + + %%||XX + pad to the end of the line with character "X" + + 66..33..1144.. aattttaacchh__sseepp + + Type: string + Default: "\n" + + The separator to add between attachments when operating (saving, + printing, piping, etc) on a list of tagged attachments. + + 66..33..1155.. aattttaacchh__sspplliitt + + Type: boolean + Default: yes + + If this variable is unset, when operating (saving, printing, piping, + etc) on a list of tagged attachments, Mutt will concatenate the + attachments and will operate on them as a single attachment. The + ````$attach_sep'''' separator is added after each attachment. When + set, Mutt will operate on the attachments one by one. + + 66..33..1166.. aattttrriibbuuttiioonn + + Type: string + Default: "On %d, %n wrote:" + + This is the string that will precede a message which has been included + in a reply. For a full listing of defined printf()-like sequences see + the section on ````$index_format''''. + + 66..33..1177.. aauuttooeeddiitt + + Type: boolean + Default: no + + When set along with ````$edit_headers'''', Mutt will skip the initial + send-menu and allow you to immediately begin editing the body of your + message. The send-menu may still be accessed once you have finished + editing the body of your message. + + Also see ````$fast_reply''''. + + 66..33..1188.. aauuttoo__ttaagg + + Type: boolean + Default: no + + When set, functions in the _i_n_d_e_x menu which affect a message will be + applied to all tagged messages (if there are any). When unset, you + must first use the tag-prefix function (default: ";") to make the next + function apply to all tagged messages. + + 66..33..1199.. bbeeeepp + + Type: boolean + Default: yes + + When this variable is set, mutt will beep when an error occurs. + + 66..33..2200.. bbeeeepp__nneeww + + Type: boolean + Default: no + + When this variable is set, mutt will beep whenever it prints a message + notifying you of new mail. This is independent of the setting of the + ````$beep'''' variable. + + 66..33..2211.. bboouunnccee + + Type: quadoption + Default: ask-yes + + Controls whether you will be asked to confirm bouncing messages. If + set to _y_e_s you don't get asked if you want to bounce a message. + Setting this variable to _n_o is not generally useful, and thus not + recommended, because you are unable to bounce messages. + + 66..33..2222.. bboouunnccee__ddeelliivveerreedd + + Type: boolean + Default: yes + + When this variable is set, mutt will include Delivered-To headers when + bouncing messages. Postfix users may wish to unset this variable. + + 66..33..2233.. ccaattcchhuupp__nneewwssggrroouupp + + Type: quadoption + Default: ask-yes + + If this variable is _s_e_t, Mutt will mark all articles in newsgroup as + read when you quit the newsgroup (catchup newsgroup). + + 66..33..2244.. cchhaarrsseett + + Type: string + Default: "" + + Character set your terminal uses to display and enter textual data. + + 66..33..2255.. cchheecckk__nneeww + + Type: boolean + Default: yes + + NNoottee:: this option only affects _m_a_i_l_d_i_r and _M_H style mailboxes. + + When _s_e_t, Mutt will check for new mail delivered while the mailbox is + open. Especially with MH mailboxes, this operation can take quite + some time since it involves scanning the directory and checking each + file to see if it has already been looked at. If _c_h_e_c_k___n_e_w is _u_n_s_e_t, + no check for new mail is performed while the mailbox is open. + + 66..33..2266.. ccoollllaappssee__uunnrreeaadd + + Type: boolean + Default: yes + + When _u_n_s_e_t, Mutt will not collapse a thread if it contains any unread + messages. + + 66..33..2277.. uunnccoollllaappssee__jjuummpp + + Type: boolean + Default: no + + When _s_e_t, Mutt will jump to the next unread message, if any, when the + current thread is _u_ncollapsed. + + 66..33..2288.. ccoommppoossee__ffoorrmmaatt + + Type: string + Default: "-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-" + + Controls the format of the status line displayed in the \fCompose + menu. This string is similar to ````$status_format'''', but has its + own set of printf()-like sequences: + + %%aa total number of attachments + + %%hh local hostname + + %%ll approximate size (in bytes) of the current message + + %%vv Mutt version string + + See the text describing the ````$status_format'''' option for more + information on how to set ````$compose_format''''. + + 66..33..2299.. ccoonnffiirrmmaappppeenndd + + Type: boolean + Default: yes + + When set, Mutt will prompt for confirmation when appending messages to + an existing mailbox. + + 66..33..3300.. ccoonnffiirrmmccrreeaattee + + Type: boolean + Default: yes + + When set, Mutt will prompt for confirmation when saving messages to a + mailbox which does not yet exist before creating it. + + 66..33..3311.. ccoonnnneecctt__ttiimmeeoouutt + + Type: number + Default: 30 + + Causes Mutt to timeout a network connection (for IMAP or POP) after + this many seconds if the connection is not able to be established. A + negative value causes Mutt to wait indefinitely for the connection to + succeed. + + 66..33..3322.. ccoonntteenntt__ttyyppee + + Type: string + Default: "text/plain" + + Sets the default Content-Type for the body of newly composed messages. + + 66..33..3333.. ccooppyy + + Type: quadoption + Default: yes + + This variable controls whether or not copies of your outgoing messages + will be saved for later references. Also see ````$record'''', + ````$save_name'''', ````$force_name'''' and ````fcc-hook''''. + + 66..33..3344.. ccrryypptt__aauuttooppggpp + + Type: boolean + Default: yes + + This variable controls whether or not mutt may automatically enable + PGP encryption/signing for messages. See also + ````$crypt_autoencrypt'''', ````$crypt_replyencrypt'''', + ````$crypt_autosign'''', ````$crypt_replysign'''' and + ````$smime_is_default''''. + + 66..33..3355.. ccrryypptt__aauuttoossmmiimmee + + Type: boolean + Default: yes + + This variable controls whether or not mutt may automatically enable + S/MIME encryption/signing for messages. See also + ````$crypt_autoencrypt'''', ````$crypt_replyencrypt'''', + ````$crypt_autosign'''', ````$crypt_replysign'''' and + ````$smime_is_default''''. + + 66..33..3366.. ddaattee__ffoorrmmaatt + + Type: string + Default: "!%a, %b %d, %Y at %I:%M:%S%p %Z" + + This variable controls the format of the date printed by the ``%d'' + sequence in ````$index_format''''. This is passed to the _s_t_r_f_t_i_m_e + call to process the date. See the man page for _s_t_r_f_t_i_m_e_(_3_) for the + proper syntax. + + Unless the first character in the string is a bang (``!''), the month + and week day names are expanded according to the locale specified in + the variable ````$locale''''. If the first character in the string is + a bang, the bang is discarded, and the month and week day names in the + rest of the string are expanded in the _C locale (that is in US + English). + + 66..33..3377.. ddeeffaauulltt__hhooookk + + Type: string + Default: "~f %s !~P | (~P ~C %s)" + + This variable controls how send-hooks, message-hooks, save-hooks, and + fcc-hooks will be interpreted if they are specified with only a simple + regexp, instead of a matching pattern. The hooks are expanded when + they are declared, so a hook will be interpreted according to the + value of this variable at the time the hook is declared. The default + value matches if the message is either from a user matching the + regular expression given, or if it is from you (if the from address + matches ``alternates'') and is to or cc'ed to a user matching the + given regular expression. + + 66..33..3388.. ddeelleettee + + Type: quadoption + Default: ask-yes + + Controls whether or not messages are really deleted when closing or + synchronizing a mailbox. If set to _y_e_s, messages marked for deleting + will automatically be purged without prompting. If set to _n_o, + messages marked for deletion will be kept in the mailbox. + + 66..33..3399.. ddeelleettee__uunnttaagg + + Type: boolean + Default: yes + + If this option is _s_e_t, mutt will untag messages when marking them for + deletion. This applies when you either explicitly delete a message, + or when you save it to another folder. + + 66..33..4400.. ddiiggeesstt__ccoollllaappssee + + Type: boolean + Default: yes + + If this option is _s_e_t, mutt's revattach menu will not show the + subparts of individual messages in a digest. To see these subparts, + press 'v' on that menu. + + 66..33..4411.. ddiissppllaayy__ffiilltteerr + + Type: path + Default: "" + + When set, specifies a command used to filter messages. When a message + is viewed it is passed as standard input to ``$display_filter'', and + the filtered message is read from the standard output. + + 66..33..4422.. ddoottlloocckk__pprrooggrraamm + + Type: path + Default: "/usr/local/bin/mutt_dotlock" + + Contains the path of the mutt_dotlock (8) binary to be used by mutt. + + 66..33..4433.. ddssnn__nnoottiiffyy + + Type: string + Default: "" + + NNoottee:: you should not enable this unless you are using Sendmail 8.8.x + or greater. + + This variable sets the request for when notification is returned. The + string consists of a comma separated list (no spaces!) of one or more + of the following: _n_e_v_e_r, to never request notification, _f_a_i_l_u_r_e, to + request notification on transmission failure, _d_e_l_a_y, to be notified of + message delays, _s_u_c_c_e_s_s, to be notified of successful transmission. + + Example: set dsn_notify="failure,delay" + + 66..33..4444.. ddssnn__rreettuurrnn + + Type: string + Default: "" + + NNoottee:: you should not enable this unless you are using Sendmail 8.8.x + or greater. + + This variable controls how much of your message is returned in DSN + messages. It may be set to either _h_d_r_s to return just the message + header, or _f_u_l_l to return the full message. + + Example: set dsn_return=hdrs + + 66..33..4455.. dduupplliiccaattee__tthhrreeaaddss + + Type: boolean + Default: yes + + This variable controls whether mutt, when sorting by threads, threads + messages with the same message-id together. If it is set, it will + indicate that it thinks they are duplicates of each other with an + equals sign in the thread diagram. + + 66..33..4466.. eeddiitt__hheeaaddeerrss + + Type: boolean + Default: no + + This option allows you to edit the header of your outgoing messages + along with the body of your message. + + 66..33..4477.. eeddiittoorr + + Type: path + Default: "" + + This variable specifies which editor is used by mutt. It defaults to + the value of the VISUAL, or EDITOR, environment variable, or to the + string "vi" if neither of those are set. + + 66..33..4488.. eennccooddee__ffrroomm + + Type: boolean + Default: no + + When _s_e_t, mutt will quoted-printable encode messages when they contain + the string "From " in the beginning of a line. Useful to avoid the + tampering certain mail delivery and transport agents tend to do with + messages. + + 66..33..4499.. eennvveellooppee__ffrroomm + + Type: boolean + Default: no + + When _s_e_t, mutt will try to derive the message's _e_n_v_e_l_o_p_e sender from + the "From:" header. Note that this information is passed to sendmail + command using the "-f" command line switch, so don't set this option + if you are using that switch in ``$sendmail'' yourself, or if the + sendmail on your machine doesn't support that command line switch. + + 66..33..5500.. eessccaappee + + Type: string + Default: "~" + + Escape character to use for functions in the builtin editor. + + 66..33..5511.. ffaasstt__rreeppllyy + + Type: boolean + Default: no + + When set, the initial prompt for recipients and subject are skipped + when replying to messages, and the initial prompt for subject is + skipped when forwarding messages. + + NNoottee:: this variable has no effect when the ````$autoedit'''' variable + is set. + + 66..33..5522.. ffcccc__aattttaacchh + + Type: boolean + Default: yes + + This variable controls whether or not attachments on outgoing messages + are saved along with the main body of your message. + + 66..33..5533.. ffcccc__cclleeaarr + + Type: boolean + Default: no + + When this variable is set, FCCs will be stored unencrypted and + unsigned, even when the actual message is encrypted and/or signed. + (PGP only) + + 66..33..5544.. ffoollddeerr + + Type: path + Default: "~/Mail" + + Specifies the default location of your mailboxes. A `+' or `=' at the + beginning of a pathname will be expanded to the value of this + variable. Note that if you change this variable from the default + value you need to make sure that the assignment occurs _b_e_f_o_r_e you use + `+' or `=' for any other variables since expansion takes place during + the `set' command. + + 66..33..5555.. ffoollddeerr__ffoorrmmaatt + + Type: string + Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f" + + This variable allows you to customize the file browser display to your + personal taste. This string is similar to ````$index_format'''', but + has its own set of printf()-like sequences: + + %%CC current file number + + %%dd date/time folder was last modified + + %%ff filename + + %%FF file permissions + + %%gg group name (or numeric gid, if missing) + + %%ll number of hard links + + %%NN N if folder has new mail, blank otherwise + + %%ss size in bytes + + %%tt * if the file is tagged, blank otherwise + + %%uu owner name (or numeric uid, if missing) + + %%>>XX + right justify the rest of the string and pad with character "X" + + %%||XX + pad to the end of the line with character "X" + + 66..33..5566.. ffoolllloowwuupp__ttoo + + Type: boolean + Default: yes + + Controls whether or not the _M_a_i_l_-_F_o_l_l_o_w_u_p_-_T_o header field is generated + when sending mail. When _s_e_t, Mutt will generate this field when you + are replying to a known mailing list, specified with the ``subscribe'' + or ````lists'''' commands. + + This field has two purposes. First, preventing you from receiving + duplicate copies of replies to messages which you send to mailing + lists, and second, ensuring that you do get a reply separately for any + messages sent to known lists to which you are not subscribed. The + header will contain only the list's address for subscribed lists, and + both the list address and your own email address for unsubscribed + lists. Without this header, a group reply to your message sent to a + subscribed list will be sent to both the list and your address, + resulting in two copies of the same email for you. + + 66..33..5577.. ffoolllloowwuupp__ttoo__ppoosstteerr + + Type: quadoption + Default: ask-yes + + If this variable is _s_e_t and the keyword "poster" is present in + _F_o_l_l_o_w_u_p_-_T_o header, follow-up to newsgroup function is not permitted. + The message will be mailed to the submitter of the message via mail. + + 66..33..5588.. ffoorrccee__nnaammee + + Type: boolean + Default: no + + This variable is similar to ````$save_name'''', except that Mutt will + store a copy of your outgoing message by the username of the address + you are sending to even if that mailbox does not exist. + + Also see the ````$record'''' variable. + + 66..33..5599.. ffoorrwwaarrdd__ddeeccooddee + + Type: boolean + Default: yes + + Controls the decoding of complex MIME messages into text/plain when + forwarding a message. The message header is also RFC2047 decoded. + This variable is only used, if ````$mime_forward'''' is _u_n_s_e_t, + otherwise ````$mime_forward_decode'''' is used instead. + + 66..33..6600.. ffoorrwwaarrdd__eeddiitt + + Type: quadoption + Default: yes + + This quadoption controls whether or not the user is automatically + placed in the editor when forwarding messages. For those who always + want to forward with no modification, use a setting of ``no''. + + 66..33..6611.. ffoorrwwaarrdd__ffoorrmmaatt + + Type: string + Default: "[%a: %s]" + + This variable controls the default subject when forwarding a message. + It uses the same format sequences as the ````$index_format'''' + variable. + + 66..33..6622.. ffoorrwwaarrdd__qquuoottee + + Type: boolean + Default: no + + When _s_e_t forwarded messages included in the main body of the message + (when ````$mime_forward'''' is _u_n_s_e_t) will be quoted using + ````$indent_string''''. + + 66..33..6633.. ffrroomm + + Type: e-mail address + Default: "" + + When set, this variable contains a default from address. It can be + overridden using my_hdr (including from send-hooks) and + ````$reverse_name''''. This variable is ignored if ````$use_from'''' + is unset. + + Defaults to the contents of the environment variable EMAIL. + + 66..33..6644.. ggeeccooss__mmaasskk + + Type: regular expression + Default: "^[^,]*" + + A regular expression used by mutt to parse the GECOS field of a + password entry when expanding the alias. By default the regular + expression is set to "^[^,]*" which will return the string up to the + first "," encountered. If the GECOS field contains a string like + "lastname, firstname" then you should set the gecos_mask=".*". + + This can be useful if you see the following behavior: you address a e- + mail to user ID stevef whose full name is Steve Franklin. If mutt + expands stevef to "Franklin" stevef@foo.bar then you should set the + gecos_mask to a regular expression that will match the whole name so + mutt will expand "Franklin" to "Franklin, Steve". + + 66..33..6655.. ggrroouupp__iinnddeexx__ffoorrmmaatt + + Type: string + Default: "%4C %M%N %5s %-45.45f %d" + + This variable allows you to customize the newsgroup browser display to + your personal taste. This string is similar to ````index_format'''', + but has its own set of printf()-like sequences: + + %C current newsgroup number + %d description of newsgroup (becomes from server) + %f newsgroup name + %M - if newsgroup not allowed for direct post (moderated for example) + %N N if newsgroup is new, u if unsubscribed, blank otherwise + %n number of new articles in newsgroup + %s number of unread articles in newsgroup + %>X right justify the rest of the string and pad with character "X" + %|X pad to the end of the line with character "X" + + 66..33..6666.. hhddrrss + + Type: boolean + Default: yes + + When unset, the header fields normally added by the ````my_hdr'''' + command are not created. This variable _m_u_s_t be unset before composing + a new message or replying in order to take effect. If set, the user + defined header fields are added to every new message. + + 66..33..6677.. hheeaaddeerr + + Type: boolean + Default: no + + When set, this variable causes Mutt to include the header of the + message you are replying to into the edit buffer. The ````$weed'''' + setting applies. + + 66..33..6688.. hheellpp + + Type: boolean + Default: yes + + When set, help lines describing the bindings for the major functions + provided by each menu are displayed on the first line of the screen. + + NNoottee:: The binding will not be displayed correctly if the function is + bound to a sequence rather than a single keystroke. Also, the help + line may not be updated if a binding is changed while Mutt is running. + Since this variable is primarily aimed at new users, neither of these + should present a major problem. + + 66..33..6699.. hhiiddddeenn__hhoosstt + + Type: boolean + Default: no + + When set, mutt will skip the host name part of ````$hostname'''' + variable when adding the domain part to addresses. This variable does + not affect the generation of Message-IDs, and it will not lead to the + cut-off of first-level domains. + 66..33..7700.. hhiiddee__lliimmiitteedd + + Type: boolean + Default: no + + When set, mutt will not show the presence of messages that are hidden + by limiting, in the thread tree. + + 66..33..7711.. hhiiddee__mmiissssiinngg + + Type: boolean + Default: yes + + When set, mutt will not show the presence of missing messages in the + thread tree. + + 66..33..7722.. hhiiddee__ttoopp__lliimmiitteedd + + Type: boolean + Default: no + + When set, mutt will not show the presence of messages that are hidden + by limiting, at the top of threads in the thread tree. Note that when + ``$hide_missing'' is set, this option will have no effect. + + 66..33..7733.. hhiiddee__ttoopp__mmiissssiinngg + + Type: boolean + Default: yes + + When set, mutt will not show the presence of missing messages at the + top of threads in the thread tree. Note that when ``$hide_limited'' + is set, this option will have no effect. + + 66..33..7744.. hhiissttoorryy + + Type: number + Default: 10 + + This variable controls the size (in number of strings remembered) of + the string history buffer. The buffer is cleared each time the + variable is set. + + 66..33..7755.. hhoonnoorr__ffoolllloowwuupp__ttoo + + Type: quadoption + Default: yes + + This variable controls whether or not a Mail-Followup-To header is + honored when group-replying to a message. + 66..33..7766.. hhoossttnnaammee + + Type: string + Default: "" + + Specifies the hostname to use after the ``@'' in local e-mail + addresses. This overrides the compile time definition obtained from + /etc/resolv.conf. + + 66..33..7777.. iiggnnoorree__lliisstt__rreeppllyy__ttoo + + Type: boolean + Default: no + + Affects the behaviour of the _r_e_p_l_y function when replying to messages + from mailing lists. When set, if the ``Reply-To:'' field is set to + the same value as the ``To:'' field, Mutt assumes that the ``Reply- + To:'' field was set by the mailing list to automate responses to the + list, and will ignore this field. To direct a response to the mailing + list when this option is set, use the _l_i_s_t_-_r_e_p_l_y function; _g_r_o_u_p_-_r_e_p_l_y + will reply to both the sender and the list. + + 66..33..7788.. iimmaapp__aauutthheennttiiccaattoorrss + + Type: string + Default: "" + + This is a colon-delimited list of authentication methods mutt may + attempt to use to log in to an IMAP server, in the order mutt should + try them. Authentication methods are either 'login' or the right side + of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', parameter is + unset (the default) mutt will try all available methods, in order from + most-secure to least-secure. + + Example: set imap_authenticators="gssapi:cram-md5:login" + + NNoottee:: Mutt will only fall back to other authentication methods if the + previous methods are unavailable. If a method is available but + authentication fails, mutt will not connect to the IMAP server. + + 66..33..7799.. iimmaapp__ddeelliimm__cchhaarrss + + Type: string + Default: "/." + + This contains the list of characters which you would like to treat as + folder separators for displaying IMAP paths. In particular it helps in + using the '=' shortcut for your _f_o_l_d_e_r variable. + + 66..33..8800.. iimmaapp__ffoorrccee__ssssll + + Type: boolean + Default: no + + If this variable is set, Mutt will always use SSL when connecting to + IMAP servers. + + 66..33..8811.. iimmaapp__hhoommee__nnaammeessppaaccee + + Type: string + Default: "" + + You normally want to see your personal folders alongside your INBOX in + the IMAP browser. If you see something else, you may set this variable + to the IMAP path to your folders. + + 66..33..8822.. iimmaapp__kkeeeeppaalliivvee + + Type: number + Default: 900 + + This variable specifies the maximum amount of time in seconds that + mutt will wait before polling open IMAP connections, to prevent the + server from closing them before mutt has finished with them. The + default is well within the RFC-specified minimum amount of time (30 + minutes) before a server is allowed to do this, but in practice the + RFC does get violated every now and then. Reduce this number if you + find yourself getting disconnected from your IMAP server due to + inactivity. + + 66..33..8833.. iimmaapp__lliisstt__ssuubbssccrriibbeedd + + Type: boolean + Default: no + + This variable configures whether IMAP folder browsing will look for + only subscribed folders or all folders. This can be toggled in the + IMAP browser with the _t_o_g_g_l_e_-_s_u_b_s_c_r_i_b_e_d function. + + 66..33..8844.. iimmaapp__ppaassss + + Type: string + Default: "" + + Specifies the password for your IMAP account. If unset, Mutt will + prompt you for your password when you invoke the fetch-mail function. + WWaarrnniinngg: you should only use this option when you are on a fairly + secure machine, because the superuser can read your muttrc even if you + are the only one who can read the file. + + 66..33..8855.. iimmaapp__ppaassssiivvee + + Type: boolean + Default: yes + + When set, mutt will not open new IMAP connections to check for new + mail. Mutt will only check for new mail over existing IMAP + connections. This is useful if you don't want to be prompted to + user/password pairs on mutt invocation, or if opening the connection + is slow. + + 66..33..8866.. iimmaapp__ppeeeekk + + Type: boolean + Default: yes + + If set, mutt will avoid implicitly marking your mail as read whenever + you fetch a message from the server. This is generally a good thing, + but can make closing an IMAP folder somewhat slower. This option + exists to appease speed freaks. + + 66..33..8877.. iimmaapp__sseerrvveerrnnooiissee + + Type: boolean + Default: yes + + When set, mutt will display warning messages from the IMAP server as + error messages. Since these messages are often harmless, or generated + due to configuration problems on the server which are out of the + users' hands, you may wish to suppress them at some point. + + 66..33..8888.. iimmaapp__uusseerr + + Type: string + Default: "" + + Your login name on the IMAP server. + + This variable defaults to your user name on the local machine. + + 66..33..8899.. iimmpplliicciitt__aauuttoovviieeww + + Type: boolean + Default: no + + If set to ``yes'', mutt will look for a mailcap entry with the + copiousoutput flag set for _e_v_e_r_y MIME attachment it doesn't have an + internal viewer defined for. If such an entry is found, mutt will use + the viewer defined in that entry to convert the body part to text + form. + + 66..33..9900.. iinncclluuddee + + Type: quadoption + Default: ask-yes + + Controls whether or not a copy of the message(s) you are replying to + is included in your reply. + + 66..33..9911.. iinnddeenntt__ssttrriinngg + + Type: string + Default: "> " + + Specifies the string to prepend to each line of text quoted in a + message to which you are replying. You are strongly encouraged not to + change this value, as it tends to agitate the more fanatical netizens. + + 66..33..9922.. iinnddeexx__ffoorrmmaatt + + Type: string + Default: "%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s" + + This variable allows you to customize the message index display to + your personal taste. + + ``Format strings'' are similar to the strings used in the ``C'' + function printf to format output (see the man page for more detail). + The following sequences are defined in Mutt: + + %%aa address of the author + + %%AA reply-to address (if present; otherwise: address of author) + + %%bb filename of the original message folder (think mailBox) + + %%BB the list to which the letter was sent, or else the folder name + (%b). + + %%cc number of characters (bytes) in the message + + %%CC current message number + + %%dd date and time of the message in the format specified by + ``date_format'' converted to sender's time zone + + %%DD date and time of the message in the format specified by + ``date_format'' converted to the local time zone + + %%ee current message number in thread + + %%EE number of messages in current thread + + %%ff entire From: line (address + real name) + + %%FF author name, or recipient name if the message is from you + + %%gg newsgroup name (if compiled with nntp support) + + %%ii message-id of the current message + + %%ll number of lines in the message (does not work with maildir, mh, + and possibly IMAP folders) + + %%LL If an address in the To or CC header field matches an address + defined by the users ``subscribe'' command, this displays "To + <list-name>", otherwise the same as %F. + + %%mm total number of message in the mailbox + + %%MM number of hidden messages if the thread is collapsed. + + %%NN message score + + %%nn author's real name (or address if missing) + + %%OO (_O_riginal save folder) Where mutt would formerly have stashed + the message: list name or recipient name if no list + + %%ss subject of the message + + %%SS status of the message (N/D/d/!/r/*) + + %%tt `to:' field (recipients) + + %%TT the appropriate character from the ``$to_chars'' string + + %%uu user (login) name of the author + + %%vv first name of the author, or the recipient if the message is + from you + + %%WW name of organization of author (`organization:' field) + + %%yy `x-label:' field, if present + + %%YY `x-label' field, if present, and (1) not at part of a thread + tree, (2) at the top of a thread, or (3) `x-label' is different + from preceding message's `x-label'. + + %%ZZ message status flags + + %%{{ffmmtt}} + the date and time of the message is converted to sender's time + zone, and ``fmt'' is expanded by the library function + ``strftime''; a leading bang disables locales + + %%[[ffmmtt]] + the date and time of the message is converted to the local time + zone, and ``fmt'' is expanded by the library function + ``strftime''; a leading bang disables locales + + %%((ffmmtt)) + the local date and time when the message was received. ``fmt'' + is expanded by the library function ``strftime''; a leading bang + disables locales + + %%<<ffmmtt>> + the current local time. ``fmt'' is expanded by the library + function ``strftime''; a leading bang disables locales. + + %%>>XX + right justify the rest of the string and pad with character "X" + + %%||XX + pad to the end of the line with character "X" + + See also: ````$to_chars''''. + + 66..33..9933.. iinneewwss + + Type: path + Default: "" + + If set, specifies the program and arguments used to deliver news + posted by Mutt. Otherwise, mutt posts article using current + connection to news server. The following printf-style sequence is + understood: + + %s newsserver name + + Example: set inews="/usr/local/bin/inews -hS" + + 66..33..9944.. iissppeellll + + Type: path + Default: "/usr/bin/ispell" + + How to invoke ispell (GNU's spell-checking software). + + 66..33..9955.. kkeeeepp__ffllaaggggeedd + + Type: boolean + Default: no + + If set, read messages marked as flagged will not be moved from your + spool mailbox to your ````$mbox'''' mailbox, or as a result of a + ````mbox-hook'''' command. + + 66..33..9966.. llooccaallee + + Type: string + Default: "C" + + The locale used by _s_t_r_f_t_i_m_e_(_3_) to format dates. Legal values are the + strings your system accepts for the locale variable _L_C___T_I_M_E. + + 66..33..9977.. mmaaiill__cchheecckk + + Type: number + Default: 5 + + This variable configures how often (in seconds) mutt should look for + new mail. + + 66..33..9988.. mmaaiillccaapp__ppaatthh + + Type: string + Default: "" + + This variable specifies which files to consult when attempting to + display MIME bodies not directly supported by Mutt. + + 66..33..9999.. mmaaiillccaapp__ssaanniittiizzee + + Type: boolean + Default: yes + + If set, mutt will restrict possible characters in mailcap % expandos + to a well-defined set of safe characters. This is the safe setting, + but we are not sure it doesn't break some more advanced MIME stuff. + + DDOONN''TT CCHHAANNGGEE TTHHIISS SSEETTTTIINNGG UUNNLLEESSSS YYOOUU AARREE RREEAALLLLYY SSUURREE WWHHAATT YYOOUU AARREE + DDOOIINNGG!! + + 66..33..110000.. mmaaiillddiirr__ttrraasshh + + Type: boolean + Default: no + + If set, messages marked as deleted will be saved with the maildir + (T)rashed flag instead of unlinked. NNOOTTEE:: this only applies to + maildir-style mailboxes. Setting it will have no effect on other + mailbox types. + + 66..33..110011.. mmaarrkk__oolldd + + Type: boolean + Default: yes + + Controls whether or not mutt marks _n_e_w uunnrreeaadd messages as _o_l_d if you + exit a mailbox without reading them. With this option set, the next + time you start mutt, the messages will show up with an "O" next to + them in the index menu, indicating that they are old. + + 66..33..110022.. mmaarrkkeerrss + + Type: boolean + Default: yes + + Controls the display of wrapped lines in the internal pager. If set, a + ``+'' marker is displayed at the beginning of wrapped lines. Also see + the ````$smart_wrap'''' variable. + + 66..33..110033.. mmaasskk + + Type: regular expression + Default: "!^\.[^.]" + + A regular expression used in the file browser, optionally preceded by + the _n_o_t operator ``!''. Only files whose names match this mask will + be shown. The match is always case-sensitive. + + 66..33..110044.. mmbbooxx + + Type: path + Default: "~/mbox" + + This specifies the folder into which read mail in your + ````$spoolfile'''' folder will be appended. + + 66..33..110055.. mmbbooxx__ttyyppee + + Type: folder magic + Default: mbox + + The default mailbox type used when creating new folders. May be any of + mbox, MMDF, MH and Maildir. + + 66..33..110066.. mmeettoooo + + Type: boolean + Default: no + + If unset, Mutt will remove your address (see the ``alternates'' + command) from the list of recipients when replying to a message. + + 66..33..110077.. mmeennuu__ssccrroollll + + Type: boolean + Default: no + + When _s_e_t, menus will be scrolled up or down one line when you attempt + to move across a screen boundary. If _u_n_s_e_t, the screen is cleared and + the next or previous page of the menu is displayed (useful for slow + links to avoid many redraws). + + 66..33..110088.. mmeettaa__kkeeyy + + Type: boolean + Default: no + + If set, forces Mutt to interpret keystrokes with the high bit (bit 8) + set as if the user had pressed the ESC key and whatever key remains + after having the high bit removed. For example, if the key pressed + has an ASCII value of 0xf4, then this is treated as if the user had + pressed ESC then ``x''. This is because the result of removing the + high bit from ``0xf4'' is ``0x74'', which is the ASCII character + ``x''. + + 66..33..110099.. mmhh__ppuurrggee + + Type: boolean + Default: no + + When unset, mutt will mimic mh's behaviour and rename deleted messages + to _,_<_o_l_d _f_i_l_e _n_a_m_e_> in mh folders instead of really deleting them. If + the variable is set, the message files will simply be deleted. + + 66..33..111100.. mmhh__sseeqq__ffllaaggggeedd + + Type: string + Default: "flagged" + + The name of the MH sequence used for flagged messages. + + 66..33..111111.. mmhh__sseeqq__rreepplliieedd + + Type: string + Default: "replied" + + The name of the MH sequence used to tag replied messages. + + 66..33..111122.. mmhh__sseeqq__uunnsseeeenn + + Type: string + Default: "unseen" + + The name of the MH sequence used for unseen messages. + + 66..33..111133.. mmiimmee__ffoorrwwaarrdd + + Type: quadoption + Default: no + + When set, the message you are forwarding will be attached as a + separate MIME part instead of included in the main body of the + message. This is useful for forwarding MIME messages so the receiver + can properly view the message as it was delivered to you. If you like + to switch between MIME and not MIME from mail to mail, set this + variable to ask-no or ask-yes. + + Also see ````$forward_decode'''' and ````$mime_forward_decode''''. + + 66..33..111144.. mmiimmee__ffoorrwwaarrdd__ddeeccooddee + + Type: boolean + Default: no + + Controls the decoding of complex MIME messages into text/plain when + forwarding a message while ````$mime_forward'''' is _s_e_t. Otherwise + ````$forward_decode'''' is used instead. + + 66..33..111155.. mmiimmee__ffoorrwwaarrdd__rreesstt + + Type: quadoption + Default: yes + + When forwarding multiple attachments of a MIME message from the + recvattach menu, attachments which cannot be decoded in a reasonable + manner will be attached to the newly composed message if this option + is set. + + 66..33..111166.. mmiimmee__ssuubbjjeecctt + + Type: boolean + Default: yes + + If _u_n_s_e_t, 8-bit ``subject:'' line in article header will not be + encoded according to RFC2047 to base64. This is useful when message + is Usenet article, because MIME for news is nonstandard feature. + + 66..33..111177.. mmiixx__eennttrryy__ffoorrmmaatt + + Type: string + Default: "%4n %c %-16s %a" + + This variable describes the format of a remailer line on the mixmaster + chain selection screen. The following printf-like sequences are + supported: + + %%nn The running number on the menu. + + %%cc Remailer capabilities. + + %%ss The remailer's short name. + + %%aa The remailer's e-mail address. + + 66..33..111188.. mmiixxmmaasstteerr + + Type: path + Default: "mixmaster" + + This variable contains the path to the Mixmaster binary on your + system. It is used with various sets of parameters to gather the list + of known remailers, and to finally send a message through the + mixmaster chain. + + 66..33..111199.. mmoovvee + + Type: quadoption + Default: ask-no + + Controls whether you will be asked to confirm moving read messages + from your spool mailbox to your ````$mbox'''' mailbox, or as a result + of a ````mbox-hook'''' command. + + 66..33..112200.. mmeessssaaggee__ffoorrmmaatt + + Type: string + Default: "%s" + + This is the string displayed in the ``attachment'' menu for + attachments of type message/rfc822. For a full listing of defined + printf()-like sequences see the section on ````$index_format''''. + + 66..33..112211.. nnaarrrrooww__ttrreeee + + Type: boolean + Default: no + + This variable, when set, makes the thread tree narrower, allowing + deeper threads to fit on the screen. + + 66..33..112222.. nneewwss__ccaacchhee__ddiirr + + Type: path + Default: "~/.mutt" + + This variable pointing to directory where Mutt will save cached news + articles headers in. If _u_n_s_e_t, headers will not be saved at all and + will be reloaded each time when you enter to newsgroup. + + 66..33..112233.. nneewwss__sseerrvveerr + + Type: string + Default: "" + + This variable specifies domain name or address of NNTP server. It + defaults to the newsserver specified in the environment variable + $NNTPSERVER or contained in the file /etc/nntpserver. You can also + specify username and an alternative port for each newsserver, ie: + + [nntp[s]://][username[:password]@]newsserver[:port] + + 66..33..112244.. nneewwssrrcc + + Type: path + Default: "~/.newsrc" + + The file, containing info about subscribed newsgroups - names and + indexes of read articles. The following printf-style sequence is + understood: + + %s newsserver name + + 66..33..112255.. nnnnttpp__ccoonntteexxtt + + Type: number + Default: 1000 + + This variable defines number of articles which will be in index when + newsgroup entered. If active newsgroup have more articles than this + number, oldest articles will be ignored. Also controls how many + articles headers will be saved in cache when you quit newsgroup. + + 66..33..112266.. nnnnttpp__llooaadd__ddeessccrriippttiioonn + + Type: boolean + Default: yes + + This variable controls whether or not descriptions for each newsgroup + must be loaded when newsgroup is added to list (first time list + loading or new newsgroup adding). + + 66..33..112277.. nnnnttpp__uusseerr + + Type: string + Default: "" + + Your login name on the NNTP server. If _u_n_s_e_t and NNTP server requires + authentification, Mutt will prompt you for your account name when you + connect to newsserver. + + 66..33..112288.. nnnnttpp__ppaassss + + Type: string + Default: "" + + Your password for NNTP account. + + 66..33..112299.. nnnnttpp__ppoollll + + Type: number + Default: 60 + + The time in seconds until any operations on newsgroup except post new + article will cause recheck for new news. If set to 0, Mutt will + recheck newsgroup on each operation in index (stepping, read article, + etc.). + + 66..33..113300.. nnnnttpp__rreeccoonnnneecctt + + Type: quadoption + Default: ask-yes + + Controls whether or not Mutt will try to reconnect to newsserver when + connection lost. + + 66..33..113311.. ppaaggeerr + + Type: path + Default: "builtin" + + This variable specifies which pager you would like to use to view + messages. builtin means to use the builtin pager, otherwise this + variable should specify the pathname of the external pager you would + like to use. + + Using an external pager may have some disadvantages: Additional + keystrokes are necessary because you can't call mutt functions + directly from the pager, and screen resizes cause lines longer than + the screen width to be badly formatted in the help menu. + + 66..33..113322.. ppaaggeerr__ccoonntteexxtt + + Type: number + Default: 0 + + This variable controls the number of lines of context that are given + when displaying the next or previous page in the internal pager. By + default, Mutt will display the line after the last one on the screen + at the top of the next page (0 lines of context). + + 66..33..113333.. ppaaggeerr__ffoorrmmaatt + + Type: string + Default: "-%Z- %C/%m: %-20.20n %s" + + This variable controls the format of the one-line message ``status'' + displayed before each message in either the internal or an external + pager. The valid sequences are listed in the ````$index_format'''' + section. + + 66..33..113344.. ppaaggeerr__iinnddeexx__lliinneess + + Type: number + Default: 0 + + Determines the number of lines of a mini-index which is shown when in + the pager. The current message, unless near the top or bottom of the + folder, will be roughly one third of the way down this mini-index, + giving the reader the context of a few messages before and after the + message. This is useful, for example, to determine how many messages + remain to be read in the current thread. One of the lines is reserved + for the status bar from the index, so a _p_a_g_e_r___i_n_d_e_x___l_i_n_e_s of 6 will + only show 5 lines of the actual index. A value of 0 results in no + index being shown. If the number of messages in the current folder is + less than _p_a_g_e_r___i_n_d_e_x___l_i_n_e_s, then the index will only use as many + lines as it needs. + + 66..33..113355.. ppaaggeerr__ssttoopp + + Type: boolean + Default: no + + When set, the internal-pager will nnoott move to the next message when + you are at the end of a message and invoke the _n_e_x_t_-_p_a_g_e function. + + 66..33..113366.. ccrryypptt__aauuttoossiiggnn + + Type: boolean + Default: no + + Setting this variable will cause Mutt to always attempt to + cryptographically sign outgoing messages. This can be overridden by + use of the _p_g_p_-_m_e_n_u, when signing is not required or encryption is + requested as well. If ````$smime_is_default'''' is set, then OpenSSL + is used instead to create S/MIME messages and settings can be + overridden by use of the _s_m_i_m_e_-_m_e_n_u. (Crypto only) + + 66..33..113377.. ccrryypptt__aauuttooeennccrryypptt + + Type: boolean + Default: no + + Setting this variable will cause Mutt to always attempt to PGP encrypt + outgoing messages. This is probably only useful in connection to the + _s_e_n_d_-_h_o_o_k command. It can be overridden by use of the _p_g_p_-_m_e_n_u, when + encryption is not required or signing is requested as well. IF + ````$smime_is_default'''' is set, then OpenSSL is used instead to + create S/MIME messages and settings can be overridden by use of the + _s_m_i_m_e_-_m_e_n_u. (Crypto only) + 66..33..113388.. ppggpp__iiggnnoorree__ssuubbkkeeyyss + + Type: boolean + Default: yes + + Setting this variable will cause Mutt to ignore OpenPGP subkeys. + Instead, the principal key will inherit the subkeys' capabilities. + Unset this if you want to play interesting key selection games. (PGP + only) + + 66..33..113399.. ccrryypptt__rreeppllyyeennccrryypptt + + Type: boolean + Default: yes + + If set, automatically PGP or OpenSSL encrypt replies to messages which + are encrypted. (Crypto only) + + 66..33..114400.. ccrryypptt__rreeppllyyssiiggnn + + Type: boolean + Default: no + + If set, automatically PGP or OpenSSL sign replies to messages which + are signed. + + NNoottee:: this does not work on messages that are encrypted aanndd signed! + (Crypto only) + + 66..33..114411.. ccrryypptt__rreeppllyyssiiggnneennccrryypptteedd + + Type: boolean + Default: no + + If set, automatically PGP or OpenSSL sign replies to messages which + are encrypted. This makes sense in combination with + ````$crypt_replyencrypt'''', because it allows you to sign all + messages which are automatically encrypted. This works around the + problem noted in ````$crypt_replysign'''', that mutt is not able to + find out whether an encrypted message is also signed. (Crypto only) + + 66..33..114422.. ccrryypptt__ttiimmeessttaammpp + + Type: boolean + Default: yes + + If set, mutt will include a time stamp in the lines surrounding PGP or + S/MIME output, so spoofing such lines is more difficult. If you are + using colors to mark these lines, and rely on these, you may unset + this setting. (Crypto only) + + 66..33..114433.. ppggpp__uussee__ggppgg__aaggeenntt + + Type: boolean + Default: no + + If set, mutt will use a possibly-running gpg-agent process. (PGP + only) + + 66..33..114444.. ccrryypptt__vveerriiffyy__ssiigg + + Type: quadoption + Default: yes + + If ``yes'', always attempt to verify PGP or S/MIME signatures. If + ``ask'', ask whether or not to verify the signature. If ``no'', never + attempt to verify cryptographic signatures. (Crypto only) + + 66..33..114455.. ssmmiimmee__iiss__ddeeffaauulltt + + Type: boolean + Default: no + + The default behaviour of mutt is to use PGP on all auto- + sign/encryption operations. To override and to use OpenSSL instead + this must be set. However, this has no effect while replying, since + mutt will automatically select the same application that was used to + sign/encrypt the original message. (Note that this variable can be + overridden by unsetting ``$crypt_autosmime''.) (S/MIME only) + + 66..33..114466.. ssmmiimmee__aasskk__cceerrtt__llaabbeell + + Type: boolean + Default: yes + + This flag controls whether you want to be asked to enter a label for a + certificate about to be added to the database or not. It is set by + default. (S/MIME only) + + 66..33..114477.. ssmmiimmee__ddeeccrryypptt__uussee__ddeeffaauulltt__kkeeyy + + Type: boolean + Default: yes + + If set (default) this tells mutt to use the default key for + decryption. Otherwise, if manage multiple certificate-key-pairs, mutt + will try to use the mailbox-address to determine the key to use. It + will ask you to supply a key, if it can't find one. (S/MIME only) + + 66..33..114488.. ppggpp__eennttrryy__ffoorrmmaatt + + Type: string + Default: "%4n %t%f %4l/0x%k %-4a %2c %u" + + This variable allows you to customize the PGP key selection menu to + your personal taste. This string is similar to ````$index_format'''', + but has its own set of printf()-like sequences: + + %%nn number + + %%kk key id + + %%uu user id + + %%aa algorithm + + %%ll key length + + %%ff flags + + %%cc capabilities + + %%tt trust/validity of the key-uid association + + %%[[<<ss>>]] + date of the key where <s> is an strftime(3) expression + + (PGP only) + + 66..33..114499.. ppggpp__ggoooodd__ssiiggnn + + Type: regular expression + Default: "" + + If you assign a text to this variable, then a PGP signature is only + considered verified if the output from ``$pgp_verify_command'' + contains the text. Use this variable if the exit code from the command + is 0 even for bad signatures. (PGP only) + + 66..33..115500.. ppggpp__cchheecckk__eexxiitt + + Type: boolean + Default: yes + + If set, mutt will check the exit code of the PGP subprocess when + signing or encrypting. A non-zero exit code means that the subprocess + failed. (PGP only) + + 66..33..115511.. ppggpp__lloonngg__iiddss + + Type: boolean + Default: no + + If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs. + (PGP only) + + 66..33..115522.. ppggpp__rreettaaiinnaabbllee__ssiiggss + + Type: boolean + Default: no + + If set, signed and encrypted messages will consist of nested + multipart/signed and multipart/encrypted body parts. + + This is useful for applications like encrypted and signed mailing + lists, where the outer layer (multipart/encrypted) can be easily + removed, while the inner multipart/signed part is retained. (PGP + only) + + 66..33..115533.. ppggpp__sshhooww__uunnuussaabbllee + + Type: boolean + Default: yes + + If set, mutt will display non-usable keys on the PGP key selection + menu. This includes keys which have been revoked, have expired, or + have been marked as ``disabled'' by the user. (PGP only) + + 66..33..115544.. ppggpp__ssiiggnn__aass + + Type: string + Default: "" + + If you have more than one key pair, this option allows you to specify + which of your private keys to use. It is recommended that you use the + keyid form to specify your key (e.g., ``0x00112233''). (PGP only) + + 66..33..115555.. ppggpp__ssttrriicctt__eenncc + + Type: boolean + Default: yes + + If set, Mutt will automatically encode PGP/MIME signed messages as + _q_u_o_t_e_d_-_p_r_i_n_t_a_b_l_e. Please note that unsetting this variable may lead + to problems with non-verifyable PGP signatures, so only change this if + you know what you are doing. (PGP only) + + 66..33..115566.. ppggpp__ttiimmeeoouutt + + Type: number + Default: 300 + + The number of seconds after which a cached passphrase will expire if + not used. (PGP only) + 66..33..115577.. ppggpp__ssoorrtt__kkeeyyss + + Type: sort order + Default: address + + Specifies how the entries in the `pgp keys' menu are sorted. The + following are legal values: + + aaddddrreessss + sort alphabetically by user id + + kkeeyyiidd + sort alphabetically by key id + + ddaattee + sort by key creation date + + ttrruusstt + sort by the trust of the key + + If you prefer reverse order of the above values, prefix it with + `reverse-'. (PGP only) + + 66..33..115588.. ppggpp__ccrreeaattee__ttrraaddiittiioonnaall + + Type: quadoption + Default: no + + This option controls whether Mutt generates old-style inline PGP + encrypted or signed messages. + + Note that PGP/MIME will be used automatically for messages which have + a character set different from us-ascii, or which consist of more than + a single MIME part. + + Also note that using the old-style PGP message format is ssttrroonnggllyy + ddeepprreeccaatteedd. (PGP only) + + 66..33..115599.. ppggpp__aauuttoo__ttrraaddiittiioonnaall + + Type: boolean + Default: no + + This option causes Mutt to generate an old-style inline PGP encrypted + or signed message when replying to an old-style message, and a + PGP/MIME message when replying to a PGP/MIME message. Note that this + option is only meaningful when using ````$crypt_replyencrypt'''', + ````$crypt_replysign'''', or ````$crypt_replysignencrypted''''. + + Also note that PGP/MIME will be used automatically for messages which + have a character set different from us-ascii, or which consist of more + than a single MIME part. + + This option overrides ````$pgp_create_traditional'''' (PGP only) + + 66..33..116600.. ppggpp__ddeeccooddee__ccoommmmaanndd + + Type: string + Default: "" + + This format strings specifies a command which is used to decode + application/pgp attachments. + + The PGP command formats have their own set of printf-like sequences: + + %%pp Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty + string otherwise. Note: This may be used with a %? construct. + + %%ff Expands to the name of a file containing a message. + + %%ss Expands to the name of a file containing the signature part of a + multipart/signed attachment when verifying it. + + %%aa The value of ``$pgp_sign_as''. + + %%rr One or more key IDs. + + For examples on how to configure these formats for the various + versions of PGP which are floating around, see the pgp*.rc and gpg.rc + files in the samples/ subdirectory which has been installed on your + system alongside the documentation. (PGP only) + + 66..33..116611.. ppggpp__ggeettkkeeyyss__ccoommmmaanndd + + Type: string + Default: "" + + This command is invoked whenever mutt will need public key + information. %r is the only printf-like sequence used with this + format. (PGP only) + + 66..33..116622.. ppggpp__vveerriiffyy__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to verify PGP signatures. (PGP only) + + 66..33..116633.. ppggpp__ddeeccrryypptt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to decrypt a PGP encrypted message. (PGP only) + + 66..33..116644.. ppggpp__cclleeaarrssiiggnn__ccoommmmaanndd + + Type: string + Default: "" + + This format is used to create a old-style "clearsigned" PGP message. + Note that the use of this format is ssttrroonnggllyy ddeepprreeccaatteedd. (PGP only) + + 66..33..116655.. ppggpp__ssiiggnn__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to create the detached PGP signature for a + multipart/signed PGP/MIME body part. (PGP only) + + 66..33..116666.. ppggpp__eennccrryypptt__ssiiggnn__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to both sign and encrypt a body part. (PGP only) + + 66..33..116677.. ppggpp__eennccrryypptt__oonnllyy__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to encrypt a body part without signing it. (PGP + only) + + 66..33..116688.. ppggpp__iimmppoorrtt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to import a key from a message into the user's + public key ring. (PGP only) + + 66..33..116699.. ppggpp__eexxppoorrtt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to export a public key from the user's key ring. + (PGP only) + + 66..33..117700.. ppggpp__vveerriiffyy__kkeeyy__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to verify key information from the key selection + menu. (PGP only) + + 66..33..117711.. ppggpp__lliisstt__sseeccrriinngg__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to list the secret key ring's contents. The + output format must be analogous to the one used by gpg --list-keys + --with-colons. + + This format is also generated by the pgpring utility which comes with + mutt. (PGP only) + + 66..33..117722.. ppggpp__lliisstt__ppuubbrriinngg__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to list the public key ring's contents. The + output format must be analogous to the one used by gpg --list-keys + --with-colons. + + This format is also generated by the pgpring utility which comes with + mutt. (PGP only) + + 66..33..117733.. ffoorrwwaarrdd__ddeeccrryypptt + + Type: boolean + Default: yes + + Controls the handling of encrypted messages when forwarding a message. + When set, the outer layer of encryption is stripped off. This + variable is only used if ````$mime_forward'''' is _s_e_t and + ````$mime_forward_decode'''' is _u_n_s_e_t. (PGP only) + + 66..33..117744.. ssmmiimmee__ttiimmeeoouutt + + Type: number + Default: 300 + + The number of seconds after which a cached passphrase will expire if + not used. (S/MIME only) + + 66..33..117755.. ssmmiimmee__eennccrryypptt__wwiitthh + + Type: string + Default: "" + + This sets the algorithm that should be used for encryption. Valid + choices are "des", "des3", "rc2-40", "rc2-64", "rc2-128". If unset + "3des" (TripleDES) is used. (S/MIME only) + + 66..33..117766.. ssmmiimmee__kkeeyyss + + Type: path + Default: "" + + Since there is no pubring/secring as with PGP, mutt has to handle + storage ad retrieval of keys/certs by itself. This is very basic right + now, and stores keys and certificates in two different directories, + both named as the hash-value retrieved from OpenSSL. There is an index + file which contains mailbox-address keyid pair, and which can be + manually edited. This one points to the location of the private keys. + (S/MIME only) + + 66..33..117777.. ssmmiimmee__ccaa__llooccaattiioonn + + Type: path + Default: "" + + This variable contains the name of either a directory, or a file which + contains trusted certificates for use with OpenSSL. (S/MIME only) + + 66..33..117788.. ssmmiimmee__cceerrttiiffiiccaatteess + + Type: path + Default: "" + + Since there is no pubring/secring as with PGP, mutt has to handle + storage and retrieval of keys by itself. This is very basic right now, + and keys and certificates are stored in two different directories, + both named as the hash-value retrieved from OpenSSL. There is an index + file which contains mailbox-address keyid pairs, and which can be + manually edited. This one points to the location of the certificates. + (S/MIME only) + + 66..33..117799.. ssmmiimmee__ddeeccrryypptt__ccoommmmaanndd + + Type: string + Default: "" + + This format string specifies a command which is used to decrypt + application/x-pkcs7-mime attachments. + + The OpenSSL command formats have their own set of printf-like + sequences similar to PGP's: + %%ff Expands to the name of a file containing a message. + + %%ss Expands to the name of a file containing the signature part of a + multipart/signed attachment when verifying it. + + %%kk The key-pair specified with ``$smime_default_key'' + + %%cc One or more certificate IDs. + + %%aa The algorithm used for encryption. + + %%CC CA location: Depending on whether ``$smime_ca_location'' points + to a directory or file, this expands to "-CApath + ``$smime_ca_location''" or "-CAfile ``$smime_ca_location''". + + For examples on how to configure these formats, see the smime.rc in + the samples/ subdirectory which has been installed on your system + alongside the documentation. (S/MIME only) + + 66..33..118800.. ssmmiimmee__vveerriiffyy__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to verify S/MIME signatures of type + multipart/signed. (S/MIME only) + + 66..33..118811.. ssmmiimmee__vveerriiffyy__ooppaaqquuee__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to verify S/MIME signatures of type + application/x-pkcs7-mime. (S/MIME only) + + 66..33..118822.. ssmmiimmee__ssiiggnn__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to created S/MIME signatures of type + multipart/signed, which can be read by all mail clients. (S/MIME + only) + + 66..33..118833.. ssmmiimmee__ssiiggnn__ooppaaqquuee__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to created S/MIME signatures of type + application/x-pkcs7-signature, which can only be handled by mail + clients supporting the S/MIME extension. (S/MIME only) + + 66..33..118844.. ssmmiimmee__eennccrryypptt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to create encrypted S/MIME messages. (S/MIME + only) + + 66..33..118855.. ssmmiimmee__ppkk77oouutt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to extract PKCS7 structures of S/MIME signatures, + in order to extract the public X509 certificate(s). (S/MIME only) + + 66..33..118866.. ssmmiimmee__ggeett__cceerrtt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to extract X509 certificates from a PKCS7 + structure. (S/MIME only) + + 66..33..118877.. ssmmiimmee__ggeett__ssiiggnneerr__cceerrtt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to extract only the signers X509 certificate from + a S/MIME signature, so that the certificate's owner may get compared + to the email's (S/MIME only) + + 66..33..118888.. ssmmiimmee__iimmppoorrtt__cceerrtt__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to import a certificate via smime_keys. (S/MIME + only) + + 66..33..118899.. ssmmiimmee__ggeett__cceerrtt__eemmaaiill__ccoommmmaanndd + + Type: string + Default: "" + + This command is used to extract the mail address(es) used for storing + X509 certificates, and for verification purposes (to check whether the + certificate was issued for the sender's mailbox). (S/MIME only) + + 66..33..119900.. ssmmiimmee__ddeeffaauulltt__kkeeyy + + Type: string + Default: "" + + This is the default key-pair to use for signing. This must be set to + the keyid (the hash-value that OpenSSL generates) to work properly + (S/MIME only) + + 66..33..119911.. ssssll__ssttaarrttttllss + + Type: quadoption + Default: yes + + If set (the default), mutt will attempt to use STARTTLS on servers + advertising the capability. When unset, mutt will not attempt to use + STARTTLS regardless of the server's capabilities. + + 66..33..119922.. cceerrttiiffiiccaattee__ffiillee + + Type: path + Default: "" + + This variable specifies the file where the certificates you trust are + saved. When an unknown certificate is encountered, you are asked if + you accept it or not. If you accept it, the certificate can also be + saved in this file and further connections are automatically accepted. + + You can also manually add CA certificates in this file. Any server + certificate that is signed with one of these CA certificates are also + automatically accepted. + + Example: set certificate_file=~/.mutt/certificates + + 66..33..119933.. ssssll__uusseessyysstteemmcceerrttss + + Type: boolean + Default: yes + + If set to _y_e_s, mutt will use CA certificates in the system-wide + certificate store when checking if server certificate is signed by a + trusted CA. + + 66..33..119944.. eennttrrooppyy__ffiillee + + Type: path + Default: "" + + The file which includes random data that is used to initialize SSL + library functions. + + 66..33..119955.. ssssll__uussee__ssssllvv22 + + Type: boolean + Default: yes + + This variables specifies whether to attempt to use SSLv2 in the SSL + authentication process. + + 66..33..119966.. ssssll__uussee__ssssllvv33 + + Type: boolean + Default: yes + + This variables specifies whether to attempt to use SSLv3 in the SSL + authentication process. + + 66..33..119977.. ssssll__uussee__ttllssvv11 + + Type: boolean + Default: yes + + This variables specifies whether to attempt to use TLSv1 in the SSL + authentication process. + + 66..33..119988.. ppiippee__sspplliitt + + Type: boolean + Default: no + + Used in connection with the _p_i_p_e_-_m_e_s_s_a_g_e command and the ``tag- + prefix'' operator. If this variable is unset, when piping a list of + tagged messages Mutt will concatenate the messages and will pipe them + as a single folder. When set, Mutt will pipe the messages one by one. + In both cases the messages are piped in the current sorted order, and + the ````$pipe_sep'''' separator is added after each message. + + 66..33..119999.. ppiippee__ddeeccooddee + + Type: boolean + Default: no + + Used in connection with the _p_i_p_e_-_m_e_s_s_a_g_e command. When unset, Mutt + will pipe the messages without any preprocessing. When set, Mutt will + weed headers and will attempt to PGP/MIME decode the messages first. + + 66..33..220000.. ppiippee__sseepp + + Type: string + Default: "\n" + + The separator to add between messages when piping a list of tagged + messages to an external Unix command. + + 66..33..220011.. ppoopp__aauutthheennttiiccaattoorrss + + Type: string + Default: "" + + This is a colon-delimited list of authentication methods mutt may + attempt to use to log in to an POP server, in the order mutt should + try them. Authentication methods are either 'user', 'apop' or any + SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'. This + parameter is case-insensitive. If this parameter is unset (the + default) mutt will try all available methods, in order from most- + secure to least-secure. + + Example: set pop_authenticators="digest-md5:apop:user" + + 66..33..220022.. ppoopp__aauutthh__ttrryy__aallll + + Type: boolean + Default: yes + + If set, Mutt will try all available methods. When unset, Mutt will + only fall back to other authentication methods if the previous methods + are unavailable. If a method is available but authentication fails, + Mutt will not connect to the POP server. + + 66..33..220033.. ppoopp__cchheecckkiinntteerrvvaall + + Type: number + Default: 60 + + This variable configures how often (in seconds) POP should look for + new mail. + + 66..33..220044.. ppoopp__ddeelleettee + + Type: quadoption + Default: ask-no + + If set, Mutt will delete successfully downloaded messages from the POP + server when using the fetch-mail function. When unset, Mutt will + download messages but also leave them on the POP server. + + 66..33..220055.. ppoopp__hhoosstt + + Type: string + Default: "" + + The name of your POP server for the fetch-mail function. You can also + specify an alternative port, username and password, ie: + + [pop[s]://][username[:password]@]popserver[:port] + + 66..33..220066.. ppoopp__llaasstt + + Type: boolean + Default: no + + If this variable is set, mutt will try to use the "LAST" POP command + for retrieving only unread messages from the POP server when using the + fetch-mail function. + + 66..33..220077.. ppoopp__rreeccoonnnneecctt + + Type: quadoption + Default: ask-yes + + Controls whether or not Mutt will try to reconnect to POP server when + connection lost. + + 66..33..220088.. ppoopp__uusseerr + + Type: string + Default: "" + + Your login name on the POP server. + + This variable defaults to your user name on the local machine. + + 66..33..220099.. ppoopp__ppaassss + + Type: string + Default: "" + + Specifies the password for your POP account. If unset, Mutt will + prompt you for your password when you open POP mailbox. WWaarrnniinngg: you + should only use this option when you are on a fairly secure machine, + because the superuser can read your muttrc even if you are the only + one who can read the file. + + 66..33..221100.. ppoosstt__iinnddeenntt__ssttrriinngg + + Type: string + Default: "" + + Similar to the ````$attribution'''' variable, Mutt will append this + string after the inclusion of a message which is being replied to. + + 66..33..221111.. ppoosstt__mmooddeerraatteedd + + Type: quadoption + Default: ask-yes + + If set to _y_e_s, Mutt will post article to newsgroup that have not + permissions to posting (e.g. moderated). NNoottee:: if newsserver does not + support posting to that newsgroup or totally read-only, that posting + will not have an effect. + + 66..33..221122.. ppoossttppoonnee + + Type: quadoption + Default: ask-yes + + Controls whether or not messages are saved in the ````$postponed'''' + mailbox when you elect not to send immediately. + + 66..33..221133.. ppoossttppoonneedd + + Type: path + Default: "~/postponed" + + Mutt allows you to indefinitely ````postpone'' sending a message'' + which you are editing. When you choose to postpone a message, Mutt + saves it in the mailbox specified by this variable. Also see the + ````$postpone'''' variable. + + 66..33..221144.. pprreeccoonnnneecctt + + Type: string + Default: "" + + If set, a shell command to be executed if mutt fails to establish a + connection to the server. This is useful for setting up secure + connections, e.g. with ssh(1). If the command returns a nonzero + status, mutt gives up opening the server. Example: + + preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net sleep 20 < + /dev/null > /dev/null" + + Mailbox 'foo' on mailhost.net can now be reached as + '{localhost:1234}foo'. + + NOTE: For this example to work, you must be able to log in to the + remote machine without having to enter a password. + + 66..33..221155.. pprriinntt + + Type: quadoption + Default: ask-no + + Controls whether or not Mutt asks for confirmation before printing. + This is useful for people (like me) who accidentally hit ``p'' often. + + 66..33..221166.. pprriinntt__ccoommmmaanndd + + Type: path + Default: "lpr" + + This specifies the command pipe that should be used to print messages. + + 66..33..221177.. pprriinntt__ddeeccooddee + + Type: boolean + Default: yes + + Used in connection with the print-message command. If this option is + set, the message is decoded before it is passed to the external + command specified by ``$print_command''. If this option is unset, no + processing will be applied to the message when printing it. The + latter setting may be useful if you are using some advanced printer + filter which is able to properly format e-mail messages for printing. + + 66..33..221188.. pprriinntt__sspplliitt + + Type: boolean + Default: no + + Used in connection with the print-message command. If this option is + set, the command specified by ``$print_command'' is executed once for + each message which is to be printed. If this option is unset, the + command specified by ``$print_command'' is executed only once, and all + the messages are concatenated, with a form feed as the message + separator. + + Those who use the eennssccrriipptt(1) program's mail-printing mode will most + likely want to set this option. + + 66..33..221199.. pprroommpptt__aafftteerr + + Type: boolean + Default: yes + + If you use an _e_x_t_e_r_n_a_l ````$pager'''', setting this variable will + cause Mutt to prompt you for a command when the pager exits rather + than returning to the index menu. If unset, Mutt will return to the + index menu when the external pager exits. + + 66..33..222200.. qquueerryy__ccoommmmaanndd + + Type: path + Default: "" + + This specifies the command that mutt will use to make external address + queries. The string should contain a %s, which will be substituted + with the query string the user types. See ````query'''' for more + information. + + 66..33..222211.. qquuiitt + + Type: quadoption + Default: yes + + This variable controls whether ``quit'' and ``exit'' actually quit + from mutt. If it set to yes, they do quit, if it is set to no, they + have no effect, and if it is set to ask-yes or ask-no, you are + prompted for confirmation when you try to quit. + + 66..33..222222.. qquuoottee__rreeggeexxpp + + Type: regular expression + Default: "^([ \t]*[|>:}#])+" + + A regular expression used in the internal-pager to determine quoted + sections of text in the body of a message. + + NNoottee:: In order to use the _q_u_o_t_e_dxx patterns in the internal pager, you + need to set this to a regular expression that matches _e_x_a_c_t_l_y the + quote characters at the beginning of quoted lines. + + 66..33..222233.. rreeaadd__iinncc + + Type: number + Default: 10 + + If set to a value greater than 0, Mutt will display which message it + is currently on when reading a mailbox. The message is printed after + _r_e_a_d___i_n_c messages have been read (e.g., if set to 25, Mutt will print + a message when it reads message 25, and then again when it gets to + message 50). This variable is meant to indicate progress when reading + large mailboxes which may take some time. When set to 0, only a + single message will appear before the reading the mailbox. + + Also see the ````$write_inc'''' variable. + + 66..33..222244.. rreeaadd__oonnllyy + + Type: boolean + Default: no + + If set, all folders are opened in read-only mode. + + 66..33..222255.. rreeaallnnaammee + + Type: string + Default: "" + + This variable specifies what "real" or "personal" name should be used + when sending messages. + + By default, this is the GECOS field from /etc/passwd. Note that this + variable will _n_o_t be used when the user has set a real name in the + ``$from'' variable. + + 66..33..222266.. rreeccaallll + + Type: quadoption + Default: ask-yes + + Controls whether or not you are prompted to recall postponed messages + when composing a new message. Also see ````$postponed''''. + + Setting this variable to ``yes'' is not generally useful, and thus not + recommended. + + 66..33..222277.. rreeccoorrdd + + Type: path + Default: "" + + This specifies the file into which your outgoing messages should be + appended. (This is meant as the primary method for saving a copy of + your messages, but another way to do this is using the ````my_hdr'''' + command to create a _B_c_c_: field with your email address in it.) + + The value of _`_`_$_r_e_c_o_r_d_'_' is overridden by the ````$force_name'''' and + ````$save_name'''' variables, and the ````fcc-hook'''' command. + + 66..33..222288.. rreeppllyy__rreeggeexxpp + + Type: regular expression + Default: "^(re([\[0-9\]+])*|aw):[ \t]*" + + A regular expression used to recognize reply messages when threading + and replying. The default value corresponds to the English "Re:" and + the German "Aw:". + + 66..33..222299.. rreeppllyy__sseellff + + Type: boolean + Default: no + + If unset and you are replying to a message sent by you, Mutt will + assume that you want to reply to the recipients of that message rather + than to yourself. + 66..33..223300.. rreeppllyy__ttoo + + Type: quadoption + Default: ask-yes + + If set, Mutt will ask you if you want to use the address listed in the + Reply-To: header field when replying to a message. If you answer no, + it will use the address in the From: header field instead. This + option is useful for reading a mailing list that sets the Reply-To: + header field to the list address and you want to send a private + message to the author of a message. + + 66..33..223311.. rreessoollvvee + + Type: boolean + Default: yes + + When set, the cursor will be automatically advanced to the next + (possibly undeleted) message whenever a command that modifies the + current message is executed. + + 66..33..223322.. rreevveerrssee__aalliiaass + + Type: boolean + Default: no + + This variable controls whether or not Mutt will display the "personal" + name from your aliases in the index menu if it finds an alias that + matches the message's sender. For example, if you have the following + alias: + + alias juser abd30425@somewhere.net (Joe User) + + and then you receive mail which contains the following header: + + From: abd30425@somewhere.net + + It would be displayed in the index menu as ``Joe User'' instead of + ``abd30425@somewhere.net.'' This is useful when the person's e-mail + address is not human friendly (like CompuServe addresses). + + 66..33..223333.. rreevveerrssee__nnaammee + + Type: boolean + Default: no + It may sometimes arrive that you receive mail to a certain machine, + move the messages to another machine, and reply to some the messages + from there. If this variable is set, the default _F_r_o_m_: line of the + reply messages is built using the address where you received the + messages you are replying to. If the variable is unset, the _F_r_o_m_: + line will use your address on the current machine. + + 66..33..223344.. rreevveerrssee__rreeaallnnaammee + + Type: boolean + Default: yes + + This variable fine-tunes the behaviour of the ``reverse_name'' + feature. When it is set, mutt will use the address from incoming + messages as-is, possibly including eventual real names. When it is + unset, mutt will override any such real names with the setting of the + ``realname'' variable. + + 66..33..223355.. rrffcc22004477__ppaarraammeetteerrss + + Type: boolean + Default: no + + When this variable is set, Mutt will decode RFC-2047-encoded MIME + parameters. You want to set this variable when mutt suggests you to + save attachments to files named like this: + =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?= + + When this variable is set interactively, the change doesn't have the + desired effect before you have changed folders. + + Note that this use of RFC 2047's encoding is explicitly, prohibited by + the standard, but nevertheless encountered in the wild. Also note + that setting this parameter will _n_o_t have the effect that mutt + _g_e_n_e_r_a_t_e_s this kind of encoding. Instead, mutt will unconditionally + use the encoding specified in RFC 2231. + + 66..33..223366.. ssaavvee__aaddddrreessss + + Type: boolean + Default: no + + If set, mutt will take the sender's full address when choosing a + default folder for saving a mail. If ````$save_name'''' or + ````$force_name'''' is set too, the selection of the fcc folder will + be changed as well. + + 66..33..223377.. ssaavvee__eemmppttyy + + Type: boolean + Default: yes + + When unset, mailboxes which contain no saved messages will be removed + when closed (the exception is ````$spoolfile'''' which is never + removed). If set, mailboxes are never removed. + + NNoottee:: This only applies to mbox and MMDF folders, Mutt does not delete + MH and Maildir directories. + + 66..33..223388.. ssaavvee__nnaammee + + Type: boolean + Default: no + + This variable controls how copies of outgoing messages are saved. + When set, a check is made to see if a mailbox specified by the + recipient address exists (this is done by searching for a mailbox in + the ````$folder'''' directory with the _u_s_e_r_n_a_m_e part of the recipient + address). If the mailbox exists, the outgoing message will be saved + to that mailbox, otherwise the message is saved to the ````$record'''' + mailbox. + + Also see the ````$force_name'''' variable. + + 66..33..223399.. ssccoorree + + Type: boolean + Default: yes + + When this variable is _u_n_s_e_t, scoring is turned off. This can be + useful to selectively disable scoring for certain folders when the + ````$score_threshold_delete'''' variable and friends are used. + + 66..33..224400.. ssccoorree__tthhrreesshhoolldd__ddeelleettee + + Type: number + Default: -1 + + Messages which have been assigned a score equal to or lower than the + value of this variable are automatically marked for deletion by mutt. + Since mutt scores are always greater than or equal to zero, the + default setting of this variable will never mark a message for + deletion. + + 66..33..224411.. ssccoorree__tthhrreesshhoolldd__ffllaagg + + Type: number + Default: 9999 + + Messages which have been assigned a score greater than or equal to + this variable's value are automatically marked "flagged". + + 66..33..224422.. ssccoorree__tthhrreesshhoolldd__rreeaadd + + Type: number + Default: -1 + Messages which have been assigned a score equal to or lower than the + value of this variable are automatically marked as read by mutt. + Since mutt scores are always greater than or equal to zero, the + default setting of this variable will never mark a message read. + + 66..33..224433.. sseenndd__cchhaarrsseett + + Type: string + Default: "us-ascii:iso-8859-1:utf-8" + + A list of character sets for outgoing messages. Mutt will use the + first character set into which the text can be converted exactly. If + your ````$charset'''' is not iso-8859-1 and recipients may not + understand UTF-8, it is advisable to include in the list an + appropriate widely used standard character set (such as iso-8859-2, + koi8-r or iso-2022-jp) either instead of or after "iso-8859-1". + + 66..33..224444.. sseennddmmaaiill + + Type: path + Default: "/usr/sbin/sendmail -oem -oi" + + Specifies the program and arguments used to deliver mail sent by Mutt. + Mutt expects that the specified program interprets additional + arguments as recipient addresses. + + 66..33..224455.. sseennddmmaaiill__wwaaiitt + + Type: number + Default: 0 + + Specifies the number of seconds to wait for the ````$sendmail'''' + process to finish before giving up and putting delivery in the + background. + + Mutt interprets the value of this variable as follows: + + >>00 number of seconds to wait for sendmail to finish before + continuing + + 00 wait forever for sendmail to finish + + <<00 always put sendmail in the background without waiting + + Note that if you specify a value other than 0, the output of the child + process will be put in a temporary file. If there is some error, you + will be informed as to where to find the output. + + 66..33..224466.. sshheellll + + Type: path + Default: "" + + Command to use when spawning a subshell. By default, the user's login + shell from /etc/passwd is used. + + 66..33..224477.. ssaavvee__uunnssuubbssccrriibbeedd + + Type: boolean + Default: no + + When _s_e_t, info about unsubscribed newsgroups will be saved into + ``newsrc'' file and into cache. + + 66..33..224488.. sshhooww__nneeww__nneewwss + + Type: boolean + Default: yes + + If _s_e_t, newsserver will be asked for new newsgroups on entering the + browser. Otherwise, it will be done only once for a newsserver. Also + controls whether or not number of new articles of subscribed + newsgroups will be then checked. + + 66..33..224499.. sshhooww__oonnllyy__uunnrreeaadd + + Type: boolean + Default: no + + If _s_e_t, only subscribed newsgroups that contain unread articles will + be displayed in browser. + + 66..33..225500.. ssiigg__ddaasshheess + + Type: boolean + Default: yes + + If set, a line containing ``-- '' will be inserted before your + ````$signature''''. It is ssttrroonnggllyy recommended that you not unset + this variable unless your ``signature'' contains just your name. The + reason for this is because many software packages use ``-- \n'' to + detect your signature. For example, Mutt has the ability to highlight + the signature in a different color in the builtin pager. + + 66..33..225511.. ssiigg__oonn__ttoopp + + Type: boolean + Default: no + + If set, the signature will be included before any quoted or forwarded + text. It is ssttrroonnggllyy recommended that you do not set this variable + unless you really know what you are doing, and are prepared to take + some heat from netiquette guardians. + + 66..33..225522.. ssiiggnnaattuurree + + Type: path + Default: "~/.signature" + + Specifies the filename of your signature, which is appended to all + outgoing messages. If the filename ends with a pipe (``|''), it is + assumed that filename is a shell command and input should be read from + its stdout. + + 66..33..225533.. ssiimmppllee__sseeaarrcchh + + Type: string + Default: "~f %s | ~s %s" + + Specifies how Mutt should expand a simple search into a real search + pattern. A simple search is one that does not contain any of the ~ + operators. See ````patterns'''' for more information on search + patterns. + + For example, if you simply type joe at a search or limit prompt, Mutt + will automatically expand it to the value specified by this variable. + For the default value it would be: + + ~f joe | ~s joe + + 66..33..225544.. ssmmaarrtt__wwrraapp + + Type: boolean + Default: yes + + Controls the display of lines longer than the screen width in the + internal pager. If set, long lines are wrapped at a word boundary. If + unset, lines are simply wrapped at the screen edge. Also see the + ````$markers'''' variable. + + 66..33..225555.. ssmmiilleeyyss + + Type: regular expression + Default: "(>From )|(:[-^]?[][)(><}{|/DP])" + + The _p_a_g_e_r uses this variable to catch some common false positives of + ````$quote_regexp'''', most notably smileys in the beginning of a line + + 66..33..225566.. sslleeeepp__ttiimmee + + Type: number + Default: 1 + + Specifies time, in seconds, to pause while displaying certain + informational messages, while moving from folder to folder and after + expunging messages from the current folder. The default is to pause + one second, so a value of zero for this option suppresses the pause. + 66..33..225577.. ssoorrtt + + Type: sort order + Default: date + + Specifies how to sort messages in the _i_n_d_e_x menu. Valid values are: + + date or date-sent + date-received + from + mailbox-order (unsorted) + score + size + subject + threads + to + + You may optionally use the reverse- prefix to specify reverse sorting + order (example: set sort=reverse-date-sent). + + 66..33..225588.. ssoorrtt__aalliiaass + + Type: sort order + Default: alias + + Specifies how the entries in the `alias' menu are sorted. The + following are legal values: + + address (sort alphabetically by email address) + alias (sort alphabetically by alias name) + unsorted (leave in order specified in .muttrc) + + 66..33..225599.. ssoorrtt__aauuxx + + Type: sort order + Default: date + + When sorting by threads, this variable controls how threads are sorted + in relation to other threads, and how the branches of the thread trees + are sorted. This can be set to any value that ````$sort'''' can, + except threads (in that case, mutt will just use date-sent). You can + also specify the last- prefix in addition to the reverse- prefix, but + last- must come after reverse-. The last- prefix causes messages to + be sorted against its siblings by which has the last descendant, using + the rest of sort_aux as an ordering. For instance, set sort_aux=last- + date-received would mean that if a new message is received in a + thread, that thread becomes the last one displayed (or the first, if + you have set sort=reverse-threads.) Note: For reversed ````$sort'''' + order ``$sort_aux'' is reversed again (which is not the right thing to + do, but kept to not break any existing configuration setting). + + 66..33..226600.. ssoorrtt__bbrroowwsseerr + + Type: sort order + Default: subject + + Specifies how to sort entries in the file browser. By default, the + entries are sorted alphabetically. Valid values: + + alpha (alphabetically) + date + size + unsorted + + You may optionally use the reverse- prefix to specify reverse sorting + order (example: set sort_browser=reverse-date). + + 66..33..226611.. ssoorrtt__rree + + Type: boolean + Default: yes + + This variable is only useful when sorting by threads with + ````$strict_threads'''' unset. In that case, it changes the heuristic + mutt uses to thread messages by subject. With sort_re set, mutt will + only attach a message as the child of another message by subject if + the subject of the child message starts with a substring matching the + setting of ````$reply_regexp''''. With sort_re unset, mutt will + attach the message whether or not this is the case, as long as the + non-````$reply_regexp'''' parts of both messages are identical. + + 66..33..226622.. ssppoooollffiillee + + Type: path + Default: "" + + If your spool mailbox is in a non-default place where Mutt cannot find + it, you can specify its location with this variable. Mutt will + automatically set this variable to the value of the environment + variable $MAIL if it is not set. + + 66..33..226633.. ssttaattuuss__cchhaarrss + + Type: string + Default: "-*%A" + + Controls the characters used by the "%r" indicator in + ````$status_format''''. The first character is used when the mailbox + is unchanged. The second is used when the mailbox has been changed, + and it needs to be resynchronized. The third is used if the mailbox is + in read-only mode, or if the mailbox will not be written when exiting + that mailbox (You can toggle whether to write changes to a mailbox + with the toggle-write operation, bound by default to "%"). The fourth + is used to indicate that the current folder has been opened in attach- + message mode (Certain operations like composing a new mail, replying, + forwarding, etc. are not permitted in this mode). + + 66..33..226644.. ssttaattuuss__ffoorrmmaatt + + Type: string + Default: "-%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)---" + + Controls the format of the status line displayed in the _i_n_d_e_x menu. + This string is similar to ````$index_format'''', but has its own set + of printf()-like sequences: + + %%bb number of mailboxes with new mail * + + %%dd number of deleted messages * + + %%ff the full pathname of the current mailbox + + %%FF number of flagged messages * + + %%hh local hostname + + %%ll size (in bytes) of the current mailbox * + + %%LL size (in bytes) of the messages shown (i.e., which match the + current limit) * + + %%mm the number of messages in the mailbox * + + %%MM the number of messages shown (i.e., which match the current + limit) * + + %%nn number of new messages in the mailbox * + + %%oo number of old unread messages + + %%pp number of postponed messages * + + %%PP percentage of the way through the index + + %%rr modified/read-only/won't-write/attach-message indicator, + according to ``$status_chars'' + + %%ss current sorting mode (``$sort'') + + %%SS current aux sorting method (``$sort_aux'') + + %%tt number of tagged messages * + + %%uu number of unread messages * + + %%vv Mutt version string + + %%VV currently active limit pattern, if any * + + %%>>XX + right justify the rest of the string and pad with "X" + + %%||XX + pad to the end of the line with "X" + + * = can be optionally printed if nonzero + + Some of the above sequences can be used to optionally print a string + if their value is nonzero. For example, you may only want to see the + number of flagged messages if such messages exist, since zero is not + particularly meaningful. To optionally print a string based upon one + of the above sequences, the following construct is used + + %?<sequence_char>?<optional_string>? + + where _s_e_q_u_e_n_c_e___c_h_a_r is a character from the table above, and + _o_p_t_i_o_n_a_l___s_t_r_i_n_g is the string you would like printed if _s_t_a_t_u_s___c_h_a_r is + nonzero. _o_p_t_i_o_n_a_l___s_t_r_i_n_g mmaayy contain other sequence as well as normal + text, but you may nnoott nest optional strings. + + Here is an example illustrating how to optionally print the number of + new messages in a mailbox: %?n?%n new messages.? + + Additionally you can switch between two strings, the first one, if a + value is zero, the second one, if the value is nonzero, by using the + following construct: %?<sequence_char>?<if_string>&<else_string>? + + You can additionally force the result of any printf-like sequence to + be lowercase by prefixing the sequence character with an underscore + (_) sign. For example, if you want to display the local hostname in + lowercase, you would use: %_h + + If you prefix the sequence character with a colon (:) character, mutt + will replace any dots in the expansion by underscores. This might be + helpful with IMAP folders that don't like dots in folder names. + + 66..33..226655.. ssttaattuuss__oonn__ttoopp + + Type: boolean + Default: no + + Setting this variable causes the ``status bar'' to be displayed on the + first line of the screen rather than near the bottom. + + 66..33..226666.. ssttrriicctt__tthhrreeaaddss + + Type: boolean + Default: no + + If set, threading will only make use of the ``In-Reply-To'' and + ``References'' fields when you ````$sort'''' by message threads. By + default, messages with the same subject are grouped together in + ``pseudo threads.'' This may not always be desirable, such as in a + personal mailbox where you might have several unrelated messages with + the subject ``hi'' which will get grouped together. + + 66..33..226677.. ssuussppeenndd + + Type: boolean + Default: yes + + When _u_n_s_e_t, mutt won't stop when the user presses the terminal's _s_u_s_p + key, usually ``control-Z''. This is useful if you run mutt inside an + xterm using a command like xterm -e mutt. + + 66..33..226688.. tteexxtt__fflloowweedd + + Type: boolean + Default: no + + When set, mutt will generate text/plain; format=flowed attachments. + This format is easier to handle for some mailing software, and + generally just looks like ordinary text. To actually make use of this + format's features, you'll need support in your editor. + + Note that ``$indent_string'' is ignored when this option is set. + + 66..33..226699.. tthhrreeaadd__rreecceeiivveedd + + Type: boolean + Default: no + + When set, mutt uses the date received rather than the date sent to + thread messages by subject. + + 66..33..227700.. tthhoorroouugghh__sseeaarrcchh + + Type: boolean + Default: no + + Affects the _~_b and _~_h search operations described in section + ````patterns'''' above. If set, the headers and attachments of + messages to be searched are decoded before searching. If unset, + messages are searched as they appear in the folder. + + 66..33..227711.. ttiillddee + + Type: boolean + Default: no + + When set, the internal-pager will pad blank lines to the bottom of the + screen with a tilde (~). + + 66..33..227722.. ttiimmeeoouutt + + Type: number + Default: 600 + + This variable controls the _n_u_m_b_e_r _o_f _s_e_c_o_n_d_s Mutt will wait for a key + to be pressed in the main menu before timing out and checking for new + mail. A value of zero or less will cause Mutt to never time out. + + 66..33..227733.. ttmmppddiirr + + Type: path + Default: "" + + This variable allows you to specify where Mutt will place its + temporary files needed for displaying and composing messages. If this + variable is not set, the environment variable TMPDIR is used. If + TMPDIR is not set then "/tmp" is used. + + 66..33..227744.. ttoo__cchhaarrss + + Type: string + Default: " +TCFL" + + Controls the character used to indicate mail addressed to you. The + first character is the one used when the mail is NOT addressed to your + address (default: space). The second is used when you are the only + recipient of the message (default: +). The third is when your address + appears in the TO header field, but you are not the only recipient of + the message (default: T). The fourth character is used when your + address is specified in the CC header field, but you are not the only + recipient. The fifth character is used to indicate mail that was sent + by _y_o_u. The sixth character is used to indicate when a mail was sent + to a mailing-list you subscribe to (default: L). + + 66..33..227755.. ttuunnnneell + + Type: string + Default: "" + + Setting this variable will cause mutt to open a pipe to a command + instead of a raw socket. You may be able to use this to set up + preauthenticated connections to your IMAP/POP3 server. Example: + + tunnel="ssh -q mailhost.net /usr/local/libexec/imapd" + + NOTE: For this example to work you must be able to log in to the + remote machine without having to enter a password. + + 66..33..227766.. uussee__88bbiittmmiimmee + + Type: boolean + Default: no + + WWaarrnniinngg:: do not set this variable unless you are using a version of + sendmail which supports the -B8BITMIME flag (such as sendmail 8.8.x) + or you may not be able to send mail. + + When _s_e_t, Mutt will invoke ````$sendmail'''' with the -B8BITMIME flag + when sending 8-bit messages to enable ESMTP negotiation. + + 66..33..227777.. uussee__ddoommaaiinn + + Type: boolean + Default: yes + + When set, Mutt will qualify all local addresses (ones without the + @host portion) with the value of ````$hostname''''. If _u_n_s_e_t, no + addresses will be qualified. + + 66..33..227788.. uussee__ffrroomm + + Type: boolean + Default: yes + + When _s_e_t, Mutt will generate the `From:' header field when sending + messages. If _u_n_s_e_t, no `From:' header field will be generated unless + the user explicitly sets one using the ````my_hdr'''' command. + + 66..33..227799.. uussee__iippvv66 + + Type: boolean + Default: yes + + When _s_e_t, Mutt will look for IPv6 addresses of hosts it tries to + contact. If this option is unset, Mutt will restrict itself to IPv4 + addresses. Normally, the default should work. + + 66..33..228800.. uusseerr__aaggeenntt + + Type: boolean + Default: yes + + When _s_e_t, mutt will add a "User-Agent" header to outgoing messages, + indicating which version of mutt was used for composing them. + + 66..33..228811.. vviissuuaall + + Type: path + Default: "" + + Specifies the visual editor to invoke when the _~_v command is given in + the builtin editor. + + 66..33..228822.. wwaaiitt__kkeeyy + + Type: boolean + Default: yes + + Controls whether Mutt will ask you to press a key after _s_h_e_l_l_- _e_s_c_a_p_e, + _p_i_p_e_-_m_e_s_s_a_g_e, _p_i_p_e_-_e_n_t_r_y, _p_r_i_n_t_-_m_e_s_s_a_g_e, and _p_r_i_n_t_-_e_n_t_r_y commands. + + It is also used when viewing attachments with ````auto_view'''', + provided that the corresponding mailcap entry has a _n_e_e_d_s_t_e_r_m_i_n_a_l + flag, and the external program is interactive. + + When set, Mutt will always ask for a key. When unset, Mutt will wait + for a key only if the external command returned a non-zero status. + + 66..33..228833.. wweeeedd + + Type: boolean + Default: yes + + When set, mutt will weed headers when when displaying, forwarding, + printing, or replying to messages. + + 66..33..228844.. wwrraapp__sseeaarrcchh + + Type: boolean + Default: yes + + Controls whether searches wrap around the end of the mailbox. + + When set, searches will wrap around the first (or last) message. When + unset, searches will not wrap. + + 66..33..228855.. wwrraappmmaarrggiinn + + Type: number + Default: 0 + + Controls the size of the margin remaining at the right side of the + terminal when mutt's pager does smart wrapping. + + 66..33..228866.. wwrriittee__iinncc + + Type: number + Default: 10 + + When writing a mailbox, a message will be printed every _w_r_i_t_e___i_n_c + messages to indicate progress. If set to 0, only a single message + will be displayed before writing a mailbox. + + Also see the ````$read_inc'''' variable. + + 66..33..228877.. wwrriittee__bbcccc + + Type: boolean + Default: yes + + Controls whether mutt writes out the Bcc header when preparing + messages to be sent. Exim users may wish to use this. + + 66..33..228888.. xx__ccoommmmeenntt__ttoo + + Type: boolean + Default: no + + If _s_e_t, Mutt will add ``X-Comment-To:'' field (that contains full name + of original article author) to article that followuped to newsgroup. + + 66..44.. FFuunnccttiioonnss + + The following is the list of available functions listed by the mapping + in which they are available. The default key setting is given, and an + explanation of what the function does. The key bindings of these + functions can be changed with the ``bind'' command. + + 66..44..11.. ggeenneerriicc + + The _g_e_n_e_r_i_c menu is not a real menu, but specifies common functions + (such as movement) available in all menus except for _p_a_g_e_r and _e_d_i_t_o_r. + Changing settings for this menu will affect the default bindings for + all menus (except as noted). + + bottom-page L move to the bottom of the page + current-bottom not bound move current entry to bottom of page + current-middle not bound move current entry to middle of page + current-top not bound move current entry to top of page + enter-command : enter a muttrc command + exit q exit this menu + first-entry = move to the first entry + half-down ] scroll down 1/2 page + half-up [ scroll up 1/2 page + help ? this screen + jump number jump to an index number + last-entry * move to the last entry + middle-page M move to the middle of the page + next-entry j move to the next entry + next-line > scroll down one line + next-page z move to the next page + previous-entry k move to the previous entry + previous-line < scroll up one line + previous-page Z move to the previous page + refresh ^L clear and redraw the screen + search / search for a regular expression + search-next n search for next match + search-opposite not bound search for next match in opposite direction + search-reverse ESC / search backwards for a regular expression + select-entry RET select the current entry + shell-escape ! run a program in a subshell + tag-entry t toggle the tag on the current entry + tag-prefix ; apply next command to tagged entries + top-page H move to the top of the page + + 66..44..22.. iinnddeexx + + bounce-message b remail a message to another user + change-folder c open a different folder + change-folder-readonly ESC c open a different folder in read only mode + check-traditional-pgp ESC P check for classic pgp + clear-flag W clear a status flag from a message + copy-message C copy a message to a file/mailbox + create-alias a create an alias from a message sender + decode-copy ESC C decode a message and copy it to a file/mailbox + decode-save ESC s decode a message and save it to a file/mailbox + delete-message d delete the current entry + delete-pattern D delete messages matching a pattern + delete-subthread ESC d delete all messages in subthread + delete-thread ^D delete all messages in thread + display-address @ display full address of sender + display-toggle-weed h display message and toggle header weeding + display-message RET display a message + edit e edit the current message + edit-type ^E edit the current message's Content-Type + exit x exit without saving changes + extract-keys ^K extract PGP public keys + fetch-mail G retrieve mail from POP server + flag-message F toggle a message's 'important' flag + forget-passphrase ^F wipe PGP passphrase from memory + forward-message f forward a message with comments + group-reply g reply to all recipients + limit l show only messages matching a pattern + list-reply L reply to specified mailing list + mail m compose a new mail message + mail-key ESC k mail a PGP public key + next-new TAB jump to the next new message + next-subthread ESC n jump to the next subthread + next-thread ^N jump to the next thread + next-undeleted j move to the next undeleted message + next-unread not bound jump to the next unread message + parent-message P jump to parent message in thread + pipe-message | pipe message/attachment to a shell command + previous-new ESC TAB jump to the previous new message + previous-page Z move to the previous page + previous-subthread ESC p jump to previous subthread + previous-thread ^P jump to previous thread + previous-undeleted k move to the last undelete message + previous-unread not bound jump to the previous unread message + print-message p print the current entry + query Q query external program for addresses + quit q save changes to mailbox and quit + read-subthread ESC r mark the current subthread as read + read-thread ^R mark the current thread as read + recall-message R recall a postponed message + reply r reply to a message + resend-message ESC e resend message and preserve MIME structure + save-message s save message/attachment to a file + set-flag w set a status flag on a message + show-version V show the Mutt version number and date + show-limit ESC l show currently active limit pattern, if any + sort-mailbox o sort messages + sort-reverse O sort messages in reverse order + sync-mailbox $ save changes to mailbox + tag-pattern T tag messages matching a pattern + tag-thread ESC t tag/untag all messages in the current thread + toggle-new N toggle a message's 'new' flag + toggle-write % toggle whether the mailbox will be rewritten + undelete-message u undelete the current entry + undelete-pattern U undelete messages matching a pattern + undelete-subthread ESC u undelete all messages in subthread + undelete-thread ^U undelete all messages in thread + untag-pattern ^T untag messages matching a pattern + view-attachments v show MIME attachments + + 66..44..33.. ppaaggeerr + + bottom not bound jump to the bottom of the message + bounce-message b remail a message to another user + change-folder c open a different folder + change-folder-readonly ESC c open a different folder in read only mode + check-traditional-pgp ESC P check for classic pgp + copy-message C copy a message to a file/mailbox + create-alias a create an alias from a message sender + decode-copy ESC C decode a message and copy it to a file/mailbox + decode-save ESC s decode a message and save it to a file/mailbox + delete-message d delete the current entry + delete-subthread ESC d delete all messages in subthread + delete-thread ^D delete all messages in thread + display-address @ display full address of sender + display-toggle-weed h display message and toggle header weeding + edit e edit the current message + edit-type ^E edit the current message's Content-Type + enter-command : enter a muttrc command + exit i return to the main-menu + extract-keys ^K extract PGP public keys + flag-message F toggle a message's 'important' flag + forget-passphrase ^F wipe PGP passphrase from memory + forward-message f forward a message with comments + group-reply g reply to all recipients + half-up not bound move up one-half page + half-down not bound move down one-half page + help ? this screen + list-reply L reply to specified mailing list + mail m compose a new mail message + mail-key ESC k mail a PGP public key + mark-as-new N toggle a message's 'new' flag + next-line RET scroll down one line + next-entry J move to the next entry + next-new TAB jump to the next new message + next-page move to the next page + next-subthread ESC n jump to the next subthread + next-thread ^N jump to the next thread + next-undeleted j move to the next undeleted message + next-unread not bound jump to the next unread message + parent-message P jump to parent message in thread + pipe-message | pipe message/attachment to a shell command + previous-line BackSpace scroll up one line + previous-entry K move to the previous entry + previous-new not bound jump to the previous new message + previous-page - move to the previous page + previous-subthread ESC p jump to previous subthread + previous-thread ^P jump to previous thread + previous-undeleted k move to the last undelete message + previous-unread not bound jump to the previous unread message + print-message p print the current entry + quit Q save changes to mailbox and quit + read-subthread ESC r mark the current subthread as read + read-thread ^R mark the current thread as read + recall-message R recall a postponed message + redraw-screen ^L clear and redraw the screen + reply r reply to a message + save-message s save message/attachment to a file + search / search for a regular expression + search-next n search for next match + search-opposite not bound search for next match in opposite direction + search-reverse ESC / search backwards for a regular expression + search-toggle \ toggle search pattern coloring + shell-escape ! invoke a command in a subshell + show-version V show the Mutt version number and date + skip-quoted S skip beyond quoted text + sync-mailbox $ save changes to mailbox + tag-message t tag a message + toggle-quoted T toggle display of quoted text + top ^ jump to the top of the message + undelete-message u undelete the current entry + undelete-subthread ESC u undelete all messages in subthread + undelete-thread ^U undelete all messages in thread + view-attachments v show MIME attachments + + 66..44..44.. aalliiaass + + search / search for a regular expression + search-next n search for next match + search-reverse ESC / search backwards for a regular expression + + 66..44..55.. qquueerryy + + create-alias a create an alias from a message sender + mail m compose a new mail message + query Q query external program for addresses + query-append A append new query results to current results + search / search for a regular expression + search-next n search for next match + search-opposite not bound search for next match in opposite direction + search-reverse ESC / search backwards for a regular expression + + 66..44..66.. aattttaacchh + + bounce-message b remail a message to another user + collapse-parts v toggle display of subparts + delete-entry d delete the current entry + display-toggle-weed h display message and toggle header weeding + edit-type ^E edit the current entry's Content-Type + extract-keys ^K extract PGP public keys + forward-message f forward a message with comments + group-reply g reply to all recipients + list-reply L reply to specified mailing list + pipe-entry | pipe message/attachment to a shell command + print-entry p print the current entry + reply r reply to a message + resend-message ESC e resend message and preserve MIME structure + save-entry s save message/attachment to a file + undelete-entry u undelete the current entry + view-attach RET view attachment using mailcap entry if necessary + view-mailcap m force viewing of attachment using mailcap + view-text T view attachment as text + + 66..44..77.. ccoommppoossee + + attach-file a attach a file(s) to this message + attach-message A attach message(s) to this message + attach-key ESC k attach a PGP public key + copy-file C save message/attachment to a file + detach-file D delete the current entry + display-toggle-weed h display message and toggle header weeding + edit-bcc b edit the BCC list + edit-cc c edit the CC list + edit-description d edit attachment description + edit-encoding ^E edit attachment transfer-encoding + edit-fcc f enter a file to save a copy of this message in + edit-from ESC f edit the from: field + edit-file ^X e edit the file to be attached + edit-headers E edit the message with headers + edit e edit the message + edit-mime m edit attachment using mailcap entry + edit-reply-to r edit the Reply-To field + edit-subject s edit the subject of this message + edit-to t edit the TO list + edit-type ^T edit attachment type + filter-entry F filter attachment through a shell command + forget-passphrase ^F wipe PGP passphrase from memory + ispell i run ispell on the message + new-mime n compose new attachment using mailcap entry + pgp-menu p show PGP options + pipe-entry | pipe message/attachment to a shell command + postpone-message P save this message to send later + print-entry l print the current entry + rename-file R rename/move an attached file + send-message y send the message + toggle-unlink u toggle whether to delete file after sending it + view-attach RET view attachment using mailcap entry if necessary + write-fcc w write the message to a folder + + 66..44..88.. ppoossttppoonnee + + delete-entry d delete the current entry + undelete-entry u undelete the current entry + + 66..44..99.. bbrroowwsseerr + + change-dir c change directories + check-new TAB check mailboxes for new mail + enter-mask m enter a file mask + search / search for a regular expression + search-next n search for next match + search-reverse ESC / search backwards for a regular expression + select-new N select a new file in this directory + sort o sort messages + sort-reverse O sort messages in reverse order + toggle-mailboxes TAB toggle whether to browse mailboxes or all files + view-file SPACE view file + subscribe s subscribe to current mailbox (IMAP Only) + unsubscribe u unsubscribe to current mailbox (IMAP Only) + toggle-subscribed T toggle view all/subscribed mailboxes (IMAP Only) + + 66..44..1100.. ppggpp + + view-name % view the key's user id + verify-key c verify a PGP public key + + 66..44..1111.. eeddiittoorr + + backspace BackSpace delete the char in front of the cursor + backward-char ^B move the cursor one character to the left + backward-word ESC b move the cursor to the previous word + bol ^A jump to the beginning of the line + buffy-cycle Space cycle among incoming mailboxes + capitalize-word ESC c uppercase the first character in the word + complete TAB complete filename or alias + complete-query ^T complete address with query + delete-char ^D delete the char under the cursor + downcase-word ESC l lowercase all characters in current word + eol ^E jump to the end of the line + forward-char ^F move the cursor one character to the right + forward-word ESC f move the cursor to the next word + history-down not bound scroll down through the history list + history-up not bound scroll up through the history list + kill-eol ^K delete chars from cursor to end of line + kill-eow ESC d delete chars from cursor to end of word + kill-line ^U delete all chars on the line + kill-word ^W delete the word in front of the cursor + quote-char ^V quote the next typed key + transpose-chars not bound transpose character under cursor with previous + upcase-word ESC u uppercase all characters in current word + + 77.. MMiisscceellllaannyy + + 77..11.. AAcckknnoowwlleeddggeemmeennttss + + Kari Hurtta <kari.hurtta@fmi.fi> co-developed the original MIME + parsing code back in the ELM-ME days. + + The following people have been very helpful to the development of + Mutt: + + Vikas Agnihotri <vikasa@writeme.com>, + Francois Berjon <Francois.Berjon@aar.alcatel-alsthom.fr>, + Aric Blumer <aric@fore.com>, + John Capo <jc@irbs.com>, + David Champion <dgc@uchicago.edu, + Brendan Cully <brendan@kublai.com>, + Liviu Daia <daia@stoilow.imar.ro>, + Thomas E. Dickey <dickey@herndon4.his.com>, + David DeSimone <fox@convex.hp.com>, + Nickolay N. Dudorov <nnd@wint.itfs.nsk.su>, + Ruslan Ermilov <ru@freebsd.org>, + Edmund Grimley Evans <edmundo@rano.org, + Michael Finken <finken@conware.de>, + Sven Guckes <guckes@math.fu-berlin.de>, + Lars Hecking <lhecking@nmrc.ie>, + Mark Holloman <holloman@nando.net>, + Andreas Holzmann <holzmann@fmi.uni-passau.de>, + Marco d'Itri <md@linux.it>, + Björn Jacke <bjacke@suse.com>, + Byrial Jensen <byrial@image.dk>, + David Jeske <jeske@igcom.net>, + Christophe Kalt <kalt@hugo.int-evry.fr>, + Tommi Komulainen <Tommi.Komulainen@iki.fi>, + Felix von Leitner (a.k.a ``Fefe'') <leitner@math.fu-berlin.de>, + Brandon Long <blong@fiction.net>, + Jimmy Mäkelä <jmy@flashback.net>, + Lars Marowsky-Bree <lmb@pointer.in-minden.de>, + Thomas ``Mike'' Michlmayr <mike@cosy.sbg.ac.at>, + Andrew W. Nosenko <awn@bcs.zp.ua>, + David O'Brien <obrien@Nuxi.cs.ucdavis.edu>, + Clint Olsen <olsenc@ichips.intel.com>, + Park Myeong Seok <pms@romance.kaist.ac.kr>, + Thomas Parmelan <tom@ankh.fr.eu.org>, + Ollivier Robert <roberto@keltia.freenix.fr>, + Thomas Roessler <roessler@does-not-exist.org>, + Roland Rosenfeld <roland@spinnaker.de>, + TAKIZAWA Takashi <taki@luna.email.ne.jp>, + Allain Thivillon <Allain.Thivillon@alma.fr>, + Gero Treuner <gero@faveve.uni-stuttgart.de>, + Vsevolod Volkov <vvv@lucky.net>, + Ken Weinert <kenw@ihs.com> + + 77..22.. AAbboouutt tthhiiss ddooccuummeenntt + + This document was written in SGML, and then rendered using the sgml- + tools package. + diff --git a/doc/mbox.man b/doc/mbox.man new file mode 100644 index 0000000..48d7110 --- /dev/null +++ b/doc/mbox.man @@ -0,0 +1,189 @@ +'\" t +.\" -*-nroff-*- +.\" +.\" +.\" Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.org> +.\" +.\" This document is in the public domain and may be distributed and +.\" changed arbitrarily. +.\" +.TH mbox 5 "August 2000" Unix "User Manuals" +.SH NAME +.PP +mbox \- Format for mail message storage. +.SH DESCRIPTION +.PP +This document describes the format traditionally used by Unix hosts +to store mail messages locally. +.B mbox +files typically reside in the system's mail spool, under various +names in users' +.B Mail +directories, and under the name +.B mbox +in users' home directories. +.PP +An +.B mbox +is a text file containing an arbitrary number of e-mail messages. +Each message consists of a postmark, followed by an e-mail message +formatted according to RFC 822. The file format is line-oriented. +Lines are separated by line feed characters (ASCII 10). +.PP +A postmark line consists of the four characters "From", followed by +a space character, followed by the message's envelope sender +address, followed by whitespace, and followed by a time stamp. The +sender address is expected to be an +.B addrspec +as defined in appendix D of RFC 822. +.PP +The date is expected to be formatted according to the following +syntax (represented in the augmented Backus-Naur formalism used by +RFC 822): +.PP +.TS +lll. +mbox-date = weekday month day time [ timezone ] year +weekday = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" + / "Sat" / "Sun" +month = "Jan" / "Feb" / "Mar" / "Apr" / "May" + / "Jun" / "Jul" / "Aug" / "Sep" + / "Oct" / "Nov" / "Dec" +day = 1*2DIGIT +time = 1*2DIGIT ":" 1*2DIGIT [ ":" 1*2DIGIT ] +timezone = ( "+" / "-" ) 4DIGIT +year = ( 4DIGIT / 2DIGIT ) +.TE +.PP +For compatibility reasons with legacy software, two-digit years +greater than or equal to 70 should be interpreted as the years +1970+, while two-digit years less than 70 should be interpreted as +the years 2000-2069. +.PP +Software reading files in this format should also be prepared to +accept non-numeric timezone information such as "CET DST" for +Central European Time, dailight saving time. +.PP +Example: +.IP "" 1 +From roessler@does-not-exist.org Fri Jun 23 02:56:55 2000 +.PP +In order to avoid mis-interpretation of lines in message bodies +which begin with the four characters "From", followed by a space +character, the character ">" is commonly prepended in front of such +lines. +.SH +LOCKING +.PP +Since +.B mbox +files are frequently accessed by multiple programs in parallel, +.B mbox +files should generally not be accessed without locking. +.PP +Three different locking mechanisms (and combinations thereof) are in +general use: +.IP "\(bu" +.BR fcntl (2) +locking is mostly used on recent, POSIX-compliant systems. Use of +this locking method is, in particular, advisable if +.B mbox +files are accessed through the Network File System (NFS), since it +seems the only way to reliably invalidate NFS clients' caches. +.IP "\(bu" +.BR flock (2) +locking is mostly used on BSD-based systems. +.IP "\(bu" +Dotlocking is used on all kinds of systems. In order to lock an +.B mbox +file named +.IR folder , +an application first creates a temporary file with a unique +name in the directory in which the +.I folder +resides. The application then tries to use the +.BR link (2) +system call to create a hard link named +.IB folder .lock +to the temporary file. The success of the +.BR link (2) +system call should be additionally verified using +.BR stat (2) +calls. If the link has succeeded, the mail folder is considered +dotlocked. The temporary file can then safely be unlinked. +.IP "" +In order to release the lock, an application just unlinks the +.IB folder .lock +file. +.PP +If multiple methods are combined, implementors should make sure to +use the non-blocking variants of the +.BR fcntl (2) +and +.BR flock (2) +sytem calls in order to avoid deadlocks. +.PP +If multiple methods are combined, an +.B mbox +file must not be considered to have been successfully locked before +all individual locks were obtained. When one of the individual +locking methods fails, an application should release all locks it +acquired successfully, and restart the entire locking procedure from +the beginning, after a suitable delay. +.PP +The locking mechanism used on a particular system is a matter of +local policy, and should be consistently used by all applications +installed on the system which access +.B mbox +files. Failure to do so may result in loss of e-mail data, and in +corrupted +.B mbox +files. +.SH +FILES +.IP "/var/spool/mail/\fIuser\fP" +.IR user 's +incoming mail folder. +.IP "~\fIuser\fP/mbox" +.IR user 's +archived mail messages, in his home directory. +.IP "~\fIuser\fP/Mail/" +A directory in +.IR user 's +home directory which is commonly used to hold +.B mbox +format folders. +.SH +SEE ALSO +.PP +.BR elm (1), +.BR fcntl (2), +.BR flock (2), +.BR link (2), +.BR local (8), +.BR mail (1), +.BR maildir (5), +.BR mail.local (8), +.BR mutt (1), +.BR mutt_dotlock (1), +.BR pine (1), +.BR procmail (1), +.BR sendmail (8) +.PP +D. Crocker, Standard for the format of ARPA Internet text messages, +RFC 822 +.PP +M. R. Horton, UUCP mail interchange format standard, RFC 976 +.SH +AUTHOR +.PP +The present document was written by Thomas Roessler +<roessler@does-not-exist.org>. +.SH +HISTORY +.PP +The +.B mbox +format occured in Version 6 AT&T Unix. +.PP +A variant of this format was documented in RFC 976. diff --git a/doc/mutt.man b/doc/mutt.man new file mode 100644 index 0000000..e7c9524 --- /dev/null +++ b/doc/mutt.man @@ -0,0 +1,206 @@ +.\" -*-nroff-*- +.\" +.\" +.\" Copyright (C) 1996-2000 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +.\" +.TH mutt 1 "January 2002" Unix "User Manuals" +.SH NAME +mutt \- The Mutt Mail User Agent +.SH SYNOPSIS +.PP +.B mutt +[-GnRyzZ] +[-e \fIcmd\fP] [-F \fIfile\fP] [-g \fIserver\fP] [-m \fItype\fP] [-f \fIfile\fP] +.PP +.B mutt +[-nx] +[-e \fIcmd\fP] +[-a \fIfile\fP] +[-F \fIfile\fP] +[-H \fIfile\fP] +[-i \fIfile\fP] +[-s \fIsubj\fP] +[-b \fIaddr\fP] +[-c \fIaddr\fP] \fIaddr\fP [...] +.PP +.B mutt +[-n] [-e \fIcmd\fP] [-F \fIfile\fP] -p +.PP +.B mutt +[-n] [-e \fIcmd\fP] [-F \fIfile\fP] -Q \fIquery\fP +.PP +.B mutt +[-n] [-e \fIcmd\fP] [-F \fIfile\fP] -A \fIalias\fP +.PP +.B mutt +-v[v] +.SH DESCRIPTION +.PP +Mutt is a small but very powerful text based program for reading electronic +mail under unix operating systems, including support color terminals, MIME, +and a threaded sorting mode. +.SH OPTIONS +.PP +.IP "-A \fIalias\fP" +An expanded version of the given alias is passed to stdout. +.IP "-a \fIfile\fP" +Attach a file to your message using MIME. +.IP "-b \fIaddress\fP" +Specify a blind-carbon-copy (BCC) recipient +.IP "-c \fIaddress\fP" +Specify a carbon-copy (CC) recipient +.IP "-e \fIcommand\fP" +Specify a configuration command to be run after processing of initialization +files. +.IP "-f \fImailbox\fP" +Specify which mailbox to load. +.IP "-F \fImuttrc\fP" +Specify an initialization file to read instead of ~/.muttrc +.IP "-g \fIserver\fP" +Start Mutt with a listing of subscribed newsgroups at specified newsserver. +.IP "-G" +Start Mutt with a listing of subscribed newsgroups. +.IP "-h" +Display help. +.IP "-H \fIdraft\fP" +Specify a draft file which contains header and body to use to send a +message. +.IP "-i \fIinclude\fP" +Specify a file to include into the body of a message. +.IP "-m \fItype\fP " +specify a default mailbox type +.IP "-n" +Causes Mutt to bypass the system configuration file. +.IP "-p" +Resume a postponed message. +.IP "-Q \fIquery\fP" +Qeury a configuration variables value. The query is executed after +all configuration files have been parsed, and any commands given on +the command line have been executed. +.IP "-R" +Open a mailbox in \fIread-only\fP mode. +.IP "-s \fIsubject\fP" +Specify the subject of the message. +.IP "-v" +Display the Mutt version number and compile-time definitions. +.IP "-x" +Emulate the mailx compose mode. +.IP "-y" +Start Mutt with a listing of all mailboxes specified by the \fImailboxes\fP +command. +.IP "-z" +When used with -f, causes Mutt not to start if there are no messages in the +mailbox. +.IP "-Z" +Causes Mutt to open the first mailbox specified by the \fImailboxes\fP +command which contains new mail. +.SH ENVIRONMENT +.PP +.IP "EDITOR" +Specifies the editor to use if VISUAL is unset. +.IP "EMAIL" +The user's e-mail address. +.IP "HOME" +Full path of the user's home directory. +.IP "MAIL" +Full path of the user's spool mailbox. +.IP "MAILDIR" +Full path of the user's spool mailbox. Commonly used when the spool +mailbox is a +.B maildir (5) +folder. +.IP "MAILCAPS" +Path to search for mailcap files. +.IP "MM_NOASK" +If this variable is set, mailcap are always used without prompting first. +.IP "PGPPATH" +Directory in which the user's PGP public keyring can be found. +.IP "TMPDIR" +Directory in which temporary files are created. +.IP "REPLYTO" +Default Reply-To address. +.IP "VISUAL" +Specifies the editor to use when composing messages. +.SH FILES +.PP +.IP "~/.muttrc or ~/.mutt/muttrc" +User configuration file. +.IP "/etc/Muttrc" +System-wide configuration file. +.IP "/tmp/muttXXXXXX" +Temporary files created by Mutt. +.IP "~/.mailcap" +User definition for handling non-text MIME types. +.IP "/etc/mailcap" +System definition for handling non-text MIME types. +.IP "~/.mime.types" +User's personal mapping between MIME types and file extensions. +.IP "/etc/mime.types" +System mapping between MIME types and file extensions. +.IP "/usr/local/bin/mutt_dotlock" +The privileged dotlocking program. +.IP "/usr/local/doc/mutt/manual.txt" +The Mutt manual. +.SH BUGS +.PP +None. Mutts have fleas, not bugs. +.SH FLEAS +.PP +Suspend/resume while editing a file with an external editor does not work +under SunOS 4.x if you use the curses lib in /usr/5lib. It \fIdoes\fP work +with the S-Lang library, however. +.PP +Resizing the screen while using an external pager causes Mutt to go haywire +on some systems. +.PP +suspend/resume does not work under Ultrix. +.PP +The help line for the index menu is not updated if you change the bindings +for one of the functions listed while Mutt is running. +.PP +For a more up-to-date list of bugs, errm, fleas, please visit the +mutt project's bug tracking system under http://bugs.guug.de/. To +report a bug, please use the +.BR flea (1) +program. +.SH NO WARRANTIES +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. +.SH SEE ALSO +.PP +.BR curses (3), +.BR flea (1), +.BR mailcap (5), +.BR maildir (5), +.BR mbox (5), +.BR mutt_dotlock (1), +.BR muttrc (5), +.BR ncurses (3), +.BR sendmail (1), +.BR smail (1) +.PP +Mutt Home Page: http://www.mutt.org/ +.PP +The Mutt manual +.PP +The GNU General Public License. +.SH AUTHOR +.PP +Michael Elkins, and others. Use <mutt-dev@mutt.org> to contact +the developers. diff --git a/doc/muttbug.man b/doc/muttbug.man new file mode 100644 index 0000000..5b9aad8 --- /dev/null +++ b/doc/muttbug.man @@ -0,0 +1,200 @@ +.\" -*-nroff-*- +.\" +.\" +.\" Copyright (C) 1996-2000 Thomas Roessler <roessler@does-not-exist.org> +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +.\" +.TH flea 1 "July 2000" Unix "User Manuals" +.SH NAME +.PP +flea \- Report a bug (or rather a flea) in mutt. +.SH SYNOPSIS +.PP +.B flea +.SH DESCRIPTION +.PP +.B flea +is a shell script which helps you to submit a bug report against the +.BR mutt (1) +mail user agent. +.PP +If you invoke +.BR flea , +you'll first be prompted for a short +description of the problem you experience. This will be used as the +bug report's subject line, so it should be concise, but informative. +.PP +You are then asked to assign an initial severity level to the +problem you observe; +.B flea +will give you a description which severity level is appropriate or +not. +.PP +Then, you are asked for the location of a core dump (normally named +.BR core ) +which may have been left over by a crash of your +.BR mutt (1). +You can just type \(lqno\(rq here, or you can enter the path leading +to a core dump. +.B flea +will try to use either +.BR sdb (1), +.BR dbx (1), +or +.BR gdb (1) +to extract some information from this core dump which may be helpful +to developers in order to determine the reason for the crash. +.PP +Finally, you are asked whether or not you want to include personal +and system +.BR mutt (1) +configuration files with the bug report. If at all possible, we +urge you to answer these questions with \(lqyes\(rq, since a +reference configuration makes it incredibly easier to track down a +problem. +.PP +If you are using Debian GNU/Linux, +.B flea +will now check whether or not +.B mutt +has been installed as a Debian +package on your system, and suggest to file the bug against the +.BR mutt (1) +and Debian bug tracking systems. This option was added since the +.BR mutt (1) +project uses another instantiation of the Debian bug tracking +system, so submitting bugs against both systems in one pass is +simple. +.PP +You are then dropped into your favorite editor as determined by the +.B EDITOR +and +.B VISUAL +environment variables. +.PP +Please give us details about the problem in the empty space below +the line reading \(lqPlease type your report below this line\(rq. +We are most interested in precise information on what symptoms you +observe and what steps may be used to reproduce the bug. Chances +are that problems which can easily be reproduced will be fixed +quickly. So please take some time when filling out this part of the +template. +.PP +The remainder of the template contains various kinds of information +gathered from your system, including output of the +.BR uname (1) +command, output from +.BR mutt (1) +itself, and your system's +.BR mutt (1) +configuration files. You may wish to browse through this part of +the bug report form in order to avoid leaking confidential +information to the public. +.PP +If you leave the editor, +.B flea +will give you the option to review, re-edit, submit, or abandon your +bug report. If you decide to submit it, a mail message containing +your report will be sent to <submit@bugs.guug.de>. You'll receive a +copy of this message. +.PP +While your bug report is being processed by the bug tracking system, +you will receive various e-mail messages from the bug tracking +system informing you about what's going on: Once your bug report has +been entered into the bug tracking system, it will be assigned a +unique serial number about which you are informed via e-mail. If +you wish to submit additional information about the bug, you can +just send it to the address +.BR \fIserial\fP@bugs.guug.de . +.PP +Later, you will most likely receive questions from the developers +about the problem you observed, and you will eventually be informed +that your bug report has been closed. This means that the bug has +been fixed at least in the +.BR cvs (1) +repository. If the answers you receive don't satisfy you, don't +hesitate to contact the developers directly under +.BR mutt-dev@mutt.org. +.PP +You can also browse your bug report and all additional information +and replies connected to it using the bug tracking system's Web +interface under the following URL: +http://bugs.guug.de/ +.SH +ENVIRONMENT +.PP +.B flea +will use the following environment variables: +.IP "EMAIL" +Your electronic mail address. Will be used to set the bug report's +From header, and to send you a copy of the report. +.IP "LOGNAME" +Your login name. If the +.B EMAIL +environment variable isn't set, this will be used instead to send +you a copy of the report. Setting the sender will be left to +.BR sendmail (1) +on your system. +.IP "REPLYTO" +If set, the bug report will contain a Reply-To header with the +e-mail address contained in this environment variable. +.IP "ORGANIZATION" +If set, the bug report will contain an Organization header with the +contents of this environment variable. +.IP "PAGER" +If set, this environment variable will be expected to contain the +path to your favorite pager for viewing the bug report. If unset, +.BR more (1) +will be used. +.IP "VISUAL" +If set, this environment variable will be expected to contain the +path to your favorite visual editor. +.IP "EDITOR" +If set, this environment variable will be expected to contain the +path to your favorite editor. This variable is examined if and only +if the +.B VISUAL +environment variable is unset. If +.B EDITOR +is unset, +.BR vi (1) +will be used to edit the bug report. +.SH +FILES +.PP +.IP "core" +If present, this file may contain a post-mortem memory dump of mutt. +It will be inspected using the debugger installed on your system. +.SH +SEE ALSO +.PP +.BR dbx (1), +.BR gdb (1), +.BR lynx (1), +.BR mutt (1), +.BR muttrc (5), +.BR sdb (1), +.BR sendmail (1), +.BR uname (1), +.BR vi (1) +.PP +The mutt bug tracking system: http://bugs.guug.de/ +.SH +AUTHOR +.PP +.B flea +and this manual page were written by Thomas Roessler +<roessler@does-not-exist.org>. diff --git a/doc/muttrc.man b/doc/muttrc.man new file mode 100644 index 0000000..2061c7b --- /dev/null +++ b/doc/muttrc.man @@ -0,0 +1,5042 @@ +'\" t +.\" -*-nroff-*- +.\" +.\" Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu> +.\" Copyright (C) 1999-2000 Thomas Roessler <roessler@guug.de> +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +.\" +.TH muttrc 5 "September 2002" Unix "User Manuals" +.SH NAME +muttrc \- Configuration file for the Mutt Mail User Agent +.SH DESCRIPTION +.PP +A mutt configuration file consists of a series of \(lqcommands\(rq. +Each line of the file may contain one or more commands. When +multiple commands are used, they must be separated by a semicolon +(\(lq\fB;\fP\(rq). +.PP +The hash mark, or pound sign (\(lq\fB#\fP\(rq), is used as a +\(lqcomment\(rq character. You can use it to annotate your +initialization file. All text after the comment character to the end +of the line is ignored. +.PP +Single quotes (\(lq\fB'\fP\(rq) and double quotes (\(lq\fB"\fP\(rq) +can be used to quote strings which contain spaces or other special +characters. The difference between the two types of quotes is +similar to that of many popular shell programs, namely that a single +quote is used to specify a literal string (one that is not +interpreted for shell variables or quoting with a backslash [see +next paragraph]), while double quotes indicate a string for which +should be evaluated. For example, backtics are evaluated inside of +double quotes, but not for single quotes. +.PP +\fB\(rs\fP quotes the next character, just as in shells such as bash and zsh. +For example, if want to put quotes (\(lq\fB"\fP\(rq) inside of a +string, you can use \(lq\fB\(rs\fP\(rq to force the next character +to be a literal instead of interpreted character. +.PP +\(lq\fB\(rs\(rs\fP\(rq means to insert a literal \(lq\fB\(rs\fP\(rq into the +line. \(lq\fB\(rsn\fP\(rq and \(lq\fB\(rsr\fP\(rq have their usual +C meanings of linefeed and carriage-return, respectively. +.PP +A \(lq\fB\(rs\fP\(rq at the end of a line can be used to split commands over +multiple lines, provided that the split points don't appear in the +middle of command names. +.PP +It is also possible to substitute the output of a Unix command in an +initialization file. This is accomplished by enclosing the command +in backquotes (\fB`\fP\fIcommand\fP\fB`\fP). +.PP +UNIX environments can be accessed like the way it is done in shells +like sh and bash: Prepend the name of the environment by a dollar +(\(lq\fB\(Do\fP\(rq) sign. +.PP +.SH COMMANDS +.PP +.nf +\fBalias\fP \fIkey\fP \fIaddress\fP [\fB,\fP \fIaddress\fP [ ... ]] +\fBunalias\fP [\fB * \fP | \fIkey\fP ] +.fi +.IP +\fBalias\fP defines an alias \fIkey\fP for the given addresses. +\fBunalias\fP removes the alias corresponding to the given \fIkey\fP or +all aliases when \(lq\fB*\fP\(rq is used as an argument. +.PP +.nf +\fBalternates\fP \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]] +\fBunalternates\fP [\fB * \fP | \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]] ] +.fi +.IP +\fBalternates\fP is used to inform mutt about alternate addresses +where you receive mail; you can use regular expressions to specify +alternate addresses. This affects mutt's idea about messages +from you, and messages addressed to you. \fBunalternates\fP removes +a regular expression from the list of known alternates. +.PP +.nf +\fBalternative_order\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +\fBunalternative_order\fP [\fB * \fP | \fItype\fP/\fIsubtype\fP] [...] +.fi +.IP +\fBalternative_order\fP command permits you to define an order of preference which is +used by mutt to determine which part of a +\fBmultipart/alternative\fP body to display. +A subtype of \(lq\fB*\fP\(rq matches any subtype, as does an empty +subtype. \fBunalternative_order\fP removes entries from the +ordered list or deletes the entire list when \(lq\fB*\fP\(rq is used +as an argument. +.PP +.nf +\fBauto_view\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +\fBunauto_view\fP \fItype\fP[fB/\fP\fIsubtype\fP] [ ... ] +.fi +.IP +This commands permits you to specify that mutt should automatically +convert the given MIME types to text/plain when displaying messages. +For this to work, there must be a +.BR mailcap (5) +entry for the given MIME type with the +.B copiousoutput +flag set. A subtype of \(lq\fB*\fP\(rq +matches any subtype, as does an empty subtype. +.PP +.nf +\fBmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +\fBunmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +.fi +.IP +This command permits you to define a list of "data" MIME content +types for which mutt will try to determine the actual file type from +the file name, and not use a +.BR mailcap (5) +entry given for the original MIME type. For instance, you may add +the \fBapplication/octet-stream\fP MIME type to this list. +.TP +\fBbind\fP \fImap\fP \fIkey\fP \fIfunction\fP +This command binds the given \fIkey\fP for the given \fImap\fP to +the given \fIfunction\fP. +.IP +Valid maps are: +.BR generic ", " alias ", " attach ", " +.BR browser ", " editor ", " +.BR index ", " compose ", " +.BR pager ", " pgp ", " postpone ", " +.BR mix . +.IP +For more information on keys and functions, please consult the Mutt +Manual. +.TP +\fBaccount-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP +This hook is executed whenever you access a remote mailbox. Useful +to adjust configuration settings to different IMAP or POP servers. +.TP +\fBcharset-hook\fP \fIalias\fP \fIcharset\fP +This command defines an alias for a character set. This is useful +to properly display messages which are tagged with a character set +name not known to mutt. +.TP +\fBiconv-hook\fP \fIcharset\fP \fIlocal-charset\fP +This command defines a system-specific name for a character set. +This is useful when your system's +.BR iconv (3) +implementation does not understand MIME character set names (such as +.BR iso-8859-1 ), +but instead insists on being fed with implementation-specific +character set names (such as +.BR 8859-1 ). +In this specific case, you'd put this into your configuration file: +.IP +.B "iconv-hook iso-8859-1 8859-1" +.TP +\fBmessage-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP +Before mutt displays (or formats for replying or forwarding) a +message which matches the given \fIpattern\fP (or, when it is +preceded by an exclamation mark, does not match the \fIpattern\fP), +the given \fIcommand\fP is executed. When multiple +\fBmessage-hook\fPs match, they are executed in the order in +which they occur in the configuration file. +.TP +\fBfolder-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP +When mutt enters a folder which matches \fIregexp\fP (or, when +\fIregexp\fP is preceded by an exclamation mark, does not match +\fIregexp\fP), the given \fIcommand\fP is executed. +.IP +When several \fBfolder-hook\fPs match a given mail folder, they are +executed in the order given in the configuration file. +.TP +\fBmacro\fP \fImap\fP \fIkey\fP \fIsequence\fP [ \fIdescription\fP ] +This command binds the given \fIsequence\fP of keys to the given +\fIkey\fP in the given \fImap\fP. For valid maps, see \fBbind\fP. +.PP +.nf +\fBcolor\fP \fIobject\fP \fIforeground\fP \fIbackground\fP [ \fI regexp\fP ] +\fBcolor\fP index \fIforeground\fP \fIbackground\fP [ \fI pattern\fP ] +\fBuncolor\fP index \fIpattern\fP [ \fIpattern\fP ... ] +.fi +.IP +If your terminal supports color, these commands can be used to +assign \fIforeground\fP/\fIbackgound\fP combinations to certain +objects. Valid objects are: +.BR attachment ", " body ", " bold ", " header ", " +.BR hdrdefault ", " index ", " indicator ", " markers ", " +.BR message ", " normal ", " quoted ", " quoted\fIN\fP ", " +.BR search ", " signature ", " status ", " tilde ", " tree ", " +.BR underline . +The +.BR body " and " header +objects allow you to restrict the colorization to a regular +expression. The \fBindex\fP object permits you to select colored +messages by pattern. +.IP +Valid colors include: +.BR white ", " black ", " green ", " magenta ", " blue ", " +.BR cyan ", " yellow ", " red ", " default ", " color\fIN\fP . +.PP +.nf +\fBmono\fP \fIobject\fP \fIattribute\fP [ \fIregexp\fP ] +\fBmono\fP index \fIattribute\fP [ \fIpattern\fP ] +.fi +.IP +For terminals which don't support color, you can still assign +attributes to objects. Valid attributes include: +.BR none ", " bold ", " underline ", " +.BR reverse ", and " standout . +.TP +[\fBun\fP]\fBignore\fP \fIpattern\fP [ \fIpattern\fP ... ] +The \fBignore\fP command permits you to specify header fields which +you usually don't wish to see. Any header field whose tag +\fIbegins\fP with an \(lqignored\(rq pattern will be ignored. +.IP +The \fBunignore\fP command permits you to define exceptions from +the above mentioned list of ignored headers. +.PP +.nf +\fBlists\fP \fIregexp\fP [ \fIregexp\fP ... ] +\fBunlists\fP \fIregexp\fP [ \fIregexp\fP ... ] +\fBsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ] +\fBunsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ] +.fi +.IP +Mutt maintains two lists of mailing list address patterns, a list of +subscribed mailing lists, and a list of known mailing lists. All +subscribed mailing lists are known. Patterns use regular expressions. +.IP +The \fBlists\fP command adds a mailing list address to the list of +known mailing lists. The \fBunlists\fP command removes a mailing +list from the lists of known and subscribed mailing lists. The +\fBsubscribe\fP command adds a mailing list to the lists of known +and subscribed mailing lists. The \fBunsubscribe\fP command removes +it from the list of subscribed mailing lists. +.TP +\fBmbox-hook\fP [\fB!\fP]\fIpattern\fP \fImailbox\fP +When mutt changes to a mail folder which matches \fIpattern\fP, +\fImailbox\fP will be used as the \(lqmbox\(rq folder, i.e., read +messages will be moved to that folder when the mail folder is left. +.IP +The first matching \fBmbox-hook\fP applies. +.PP +.nf +\fBmailboxes\fP \fIfilename\fP [ \fIfilename\fP ... ] +\fBunmailboxes\fP [ \fB*\fP | \fIfilename\fP ... ] +.fi +.IP +The \fBmailboxes\fP specifies folders which can receive mail and which will +be checked for new messages. When changing folders, pressing space +will cycle through folders with new mail. The \fBunmailboxes\fP +command is used to remove a file name from the list of folders which +can receive mail. If "\fB*\fP" is specified as the file name, the +list is emptied. +.PP +.nf +\fBmy_hdr\fP \fIstring\fP +\fBunmy_hdr\fP \fIfield\fP +.fi +.IP +Using \fBmy_hdr\fP, you can define headers which will be added to +the messages you compose. \fBunmy_hdr\fP will remove the given +user-defined headers. +.TP +\fBhdr_order\fP \fIheader1\fP \fIheader2\fP [ ... ] +With this command, you can specify an order in which mutt will +attempt to present headers to you when viewing messages. +.TP +\fBsave-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP +When a message matches \fIpattern\fP, the default file name when +saving it will be the given \fIfilename\fP. +.TP +\fBfcc-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP +When an outgoing message matches \fIpattern\fP, the default file +name for storing a copy (fcc) will be the given \fIfilename\fP. +.TP +\fBfcc-save-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP +This command is an abbreviation for identical \fBfcc-hook\fP and +\fBsave-hook\fP commands. +.TP +\fBsend-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP +When composing a message matching \fIpattern\fP, \fIcommand\fP is +executed. When multiple \fBsend-hook\fPs match, they are executed +in the order in which they occur in the configuration file. +.TP +\fBcrypt-hook\fP \fIpattern\fP \fIkey-id\fP +The crypt-hook command provides a method by which you can +specify the ID of the public key to be used when encrypting messages +to a certain recipient. The meaning of "key ID" is to be taken +broadly: This can be a different e-mail address, a numerical key ID, +or even just an arbitrary search string. +.TP +\fBpush\fP \fIstring\fP +This command adds the named \fIstring\fP to the keyboard buffer. +.PP +.nf +\fBset\fP [\fBno\fP|\fBinv\fP]\fIvariable\fP[=\fIvalue\fP] [ ... ] +\fBtoggle\fP \fIvariable\fP [ ... ] +\fBunset\fP \fIvariable\fP [ ... ] +\fBreset\fP \fIvariable\fP [ ... ] +.fi +.IP +These commands are used to set and manipulate configuration +varibles. +.IP +Mutt knows four basic types of variables: boolean, number, string +and quadoption. Boolean variables can be \fBset\fP (true), +\fBunset\fP (false), or \fBtoggle\fPd. Number variables can be assigned +a positive integer value. +.IP +String variables consist of any number of printable characters. +Strings must be enclosed in quotes if they contain spaces or tabs. +You may also use the \(lqC\(rq escape sequences \fB\\n\fP and +\fB\\t\fP for newline and tab, respectively. +.IP +Quadoption variables are used to control whether or not to be +prompted for certain actions, or to specify a default action. A +value of \fByes\fP will cause the action to be carried out automatically +as if you had answered yes to the question. Similarly, a value of +\fBno\fP will cause the the action to be carried out as if you had +answered \(lqno.\(rq A value of \fBask-yes\fP will cause a prompt +with a default answer of \(lqyes\(rq and \fBask-no\fP will provide a +default answer of \(lqno.\(rq +.IP +The \fBreset\fP command resets all given variables to the compile +time defaults. If you reset the special variabe \fBall\fP, all +variables will reset to their system defaults. +.TP +\fBsource\fP \fIfilename\fP +The given file will be evaluated as a configuration file. +.TP +\fBunhook\fP [\fB * \fP | \fIhook-type\fP ] +This command will remove all hooks of a given type, or all hooks +when \(lq\fB*\fP\(rq is used as an argument. \fIhook-type\fP +can be any of the \fB-hook\fP commands documented above. +.SH PATTERNS +.PP +In various places with mutt, including some of the abovementioned +\fBhook\fP commands, you can specify patterns to match messages. +.SS Constructing Patterns +.PP +A simple pattern consists of an operator of the form +\(lq\fB~\fP\fIcharacter\fP\(rq, possibly followed by a parameter +against which mutt is supposed to match the object specified by +this operator. (For a list of operators, see below.) +.PP +With some of these operators, the object to be matched consists of +several e-mail addresses. In these cases, the object is matched if +at least one of these e-mail addresses matches. You can prepend a +hat (\(lq\fB^\fP\(rq) character to such a pattern to indicate that +\fIall\fP addresses must match in order to match the object. +.PP +You can construct complex patterns by combining simple patterns with +logical operators. Logical AND is specified by simply concatenating +two simple patterns, for instance \(lq~C mutt-dev ~s bug\(rq. +Logical OR is specified by inserting a vertical bar (\(lq\fB|\fP\(rq) +between two patterns, for instance \(lq~C mutt-dev | ~s bug\(rq. +Additionally, you can negate a pattern by prepending a bang +(\(lq\fB!\fP\(rq) character. For logical grouping, use braces +(\(lq()\(rq). Example: \(lq!(~t mutt|~c mutt) ~f elkins\(rq. +.SS Simple Patterns +.PP +Mutt understands the following simple patterns: +.PP +.TS +l l. +~A all messages +~b \fIEXPR\fP messages which contain \fIEXPR\fP in the message body +~B \fIEXPR\fP messages which contain \fIEXPR\fP in the whole message +~c \fIEXPR\fP messages carbon-copied to \fIEXPR\fP +~C \fIEXPR\fP message is either to: or cc: \fIEXPR\fP +~D deleted messages +~d \fIMIN\fP-\fIMAX\fP messages with \(lqdate-sent\(rq in a Date range +~E expired messages +~e \fIEXPR\fP message which contains \fIEXPR\fP in the \(lqSender\(rq field +~F flagged messages +~f \fIEXPR\fP messages originating from \fIEXPR\fP +~g PGP signed messages +~G PGP encrypted messages +~h \fIEXPR\fP messages which contain \fIEXPR\fP in the message header +~k message contains PGP key material +~i \fIEXPR\fP message which match \fIEXPR\fP in the \(lqMessage-ID\(rq field +~L \fIEXPR\fP message is either originated or received by \fIEXPR\fP +~l message is addressed to a known mailing list +~m \fIMIN\fP-\fIMAX\fP message in the range \fIMIN\fP to \fIMAX\fP +~n \fIMIN\fP-\fIMAX\fP messages with a score in the range \fIMIN\fP to \fIMAX\fP +~N new messages +~O old messages +~p message is addressed to you (consults $alternates) +~P message is from you (consults $alternates) +~Q messages which have been replied to +~R read messages +~r \fIMIN\fP-\fIMAX\fP messages with \(lqdate-received\(rq in a Date range +~S superseded messages +~s \fIEXPR\fP messages having \fIEXPR\fP in the \(lqSubject\(rq field. +~T tagged messages +~t \fIEXPR\fP messages addressed to \fIEXPR\fP +~U unread messages +~v message is part of a collapsed thread. +~x \fIEXPR\fP messages which contain \fIEXPR\fP in the \(lqReferences\(rq field +~z \fIMIN\fP-\fIMAX\fP messages with a size in the range \fIMIN\fP to \fIMAX\fP +~= duplicated messages (see $duplicate_threads) +.TE +.PP +In the above, \fIEXPR\fP is a regular expression. +.PP +With the \fB~m\fP, \fB~n\fP, and \fB~z\fP operators, you can also +specify ranges in the forms \fB<\fP\fIMAX\fP, \fB>\fP\fIMIN\fP, +\fIMIN\fP\fB-\fP, and \fB-\fP\fIMAX\fP. +.SS Matching dates +.PP +The \fB~d\fP and \fB~r\fP operators are used to match date ranges, +which are interpreted to be given in your local time zone. +.PP +A date is of the form +\fIDD\fP[\fB/\fP\fIMM\fP[\fB/\fP[\fIcc\fP]\fIYY\fP]], that is, a +two-digit date, optionally followed by a two-digit month, optionally +followed by a year specifications. Omitted fields default to the +current month and year. +.PP +Mutt understands either two or four digit year specifications. When +given a two-digit year, mutt will interpret values less than 70 as +lying in the 21st century (i.e., \(lq38\(rq means 2038 and not 1938, +and \(lq00\(rq is interpreted as 2000), and values +greater than or equal to 70 as lying in the 20th century. +.PP +Note that this behaviour \fIis\fP Y2K compliant, but that mutt +\fIdoes\fP have a Y2.07K problem. +.PP +If a date range consists of a single date, the operator in question +will match that precise date. If the date range consists of a dash +(\(lq\fB-\fP\(rq), followed by a date, this range will match any +date before and up to the date given. Similarly, a date followed by +a dash matches the date given and any later point of time. Two +dates, separated by a dash, match any date which lies in the given +range of time. +.PP +You can also modify any absolute date by giving an error range. An +error range consists of one of the characters +.BR + , +.BR - , +.BR * , +followed by a positive number, followed by one of the unit +characters +.BR y , +.BR m , +.BR w ", or" +.BR d , +specifying a unit of years, months, weeks, or days. +.B + +increases the maximum date matched by the given interval of time, +.B - +decreases the minimum date matched by the given interval of time, and +.B * +increases the maximum date and decreases the minimum date matched by +the given interval of time. It is possible to give multiple error +margins, which cumulate. Example: +.B "1/1/2001-1w+2w*3d" +.PP +You can also specify offsets relative to the current date. An +offset is specified as one of the characters +.BR < , +.BR > , +.BR = , +followed by a positive number, followed by one of the unit +characters +.BR y , +.BR m , +.BR w ", or" +.BR d . +.B > +matches dates which are older than the specified amount of time, an +offset which begins with the character +.B < +matches dates which are more recent than the specified amount of time, +and an offset which begins with the character +.B = +matches points of time which are precisely the given amount of time +ago. +.SH CONFIGURATION VARIABLES + +.TP +.B abort_nosubject +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +If set to \fIyes\fP, when composing messages and no subject is given +at the subject prompt, composition will be aborted. If set to +\fIno\fP, composing messages with no subject given at the subject +prompt will never be aborted. + + +.TP +.B abort_unmodified +.nf +Type: quadoption +Default: yes +.fi +.IP +If set to \fIyes\fP, composition will automatically abort after +editing the message body if no changes are made to the file (this +check only happens after the \fIfirst\fP edit of the file). When set +to \fIno\fP, composition will never be aborted. + + +.TP +.B alias_file +.nf +Type: path +Default: \(lq~/.muttrc\(rq +.fi +.IP +The default file in which to save aliases created by the +\(lqcreate-alias\(rq function. +.IP +\fBNote:\fP Mutt will not automatically source this file; you must +explicitly use the \(lqsource\(rq command for it to be executed. + + +.TP +.B alias_format +.nf +Type: string +Default: \(lq%4n %2f %t %-10a %r\(rq +.fi +.IP +Specifies the format of the data displayed for the `alias' menu. The +following printf(3)-style sequences are available: +.IP + +.RS +.IP %a +alias name + +.IP %f +flags - currently, a \(rqd\(rq for an alias marked for deletion + +.IP %n +index number + +.IP %r +address which alias expands to + +.IP %t +character which indicates if the alias is tagged for inclusion + +.RE + +.TP +.B allow_8bit +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether 8-bit data is converted to 7-bit using either Quoted- +Printable or Base64 encoding when sending mail. + + +.TP +.B allow_ansi +.nf +Type: boolean +Default: no +.fi +.IP +Controls whether ANSI color codes in messages (and color tags in +rich text messages) are to be interpreted. +Messages containing these codes are rare, but if this option is set, +their text will be colored accordingly. Note that this may override +your color choices, and even present a security problem, since a +message could include a line like \(rq[-- PGP output follows ...\(rq and +give it the same color as your attachment color. + + +.TP +.B arrow_cursor +.nf +Type: boolean +Default: no +.fi +.IP +When set, an arrow (\(lq->\(rq) will be used to indicate the current entry +in menus instead of highlighting the whole line. On slow network or modem +links this will make response faster because there is less that has to +be redrawn on the screen when moving to the next or previous entries +in the menu. + + +.TP +.B ascii_chars +.nf +Type: boolean +Default: no +.fi +.IP +If set, Mutt will use plain ASCII characters when displaying thread +and attachment trees, instead of the default \fIACS\fP characters. + + +.TP +.B askbcc +.nf +Type: boolean +Default: no +.fi +.IP +If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients +before editing an outgoing message. + + +.TP +.B askcc +.nf +Type: boolean +Default: no +.fi +.IP +If set, Mutt will prompt you for carbon-copy (Cc) recipients before +editing the body of an outgoing message. + + +.TP +.B ask_follow_up +.nf +Type: boolean +Default: no +.fi +.IP +If set, Mutt will prompt you for follow-up groups before editing +the body of an outgoing message. + + +.TP +.B ask_x_comment_to +.nf +Type: boolean +Default: no +.fi +.IP +If set, Mutt will prompt you for x-comment-to field before editing +the body of an outgoing message. + + +.TP +.B attach_format +.nf +Type: string +Default: \(lq%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] \(rq +.fi +.IP +This variable describes the format of the `attachment' menu. The +following printf-style sequences are understood: +.IP + +.RS +.IP %C +charset + +.IP %c +reqiures charset conversion (n or c) + +.IP %D +deleted flag + +.IP %d +description + +.IP %e +MIME content-transfer-encoding + +.IP %f +filename + +.IP %I +disposition (I=inline, A=attachment) + +.IP %m +major MIME type + +.IP %M +MIME subtype + +.IP %n +attachment number + +.IP %s +size + +.IP %t +tagged flag + +.IP %T +graphic tree characters + +.IP %u +unlink (=to delete) flag + +.IP %>X +right justify the rest of the string and pad with character \(rqX\(rq + +.IP %|X +pad to the end of the line with character \(rqX\(rq + +.RE + +.TP +.B attach_sep +.nf +Type: string +Default: \(lq\\n\(rq +.fi +.IP +The separator to add between attachments when operating (saving, +printing, piping, etc) on a list of tagged attachments. + + +.TP +.B attach_split +.nf +Type: boolean +Default: yes +.fi +.IP +If this variable is unset, when operating (saving, printing, piping, +etc) on a list of tagged attachments, Mutt will concatenate the +attachments and will operate on them as a single attachment. The +\(lq$attach_sep\(rq separator is added after each attachment. When set, +Mutt will operate on the attachments one by one. + + +.TP +.B attribution +.nf +Type: string +Default: \(lqOn %d, %n wrote:\(rq +.fi +.IP +This is the string that will precede a message which has been included +in a reply. For a full listing of defined printf()-like sequences see +the section on \(lq$index_format\(rq. + + +.TP +.B autoedit +.nf +Type: boolean +Default: no +.fi +.IP +When set along with \(lq$edit_headers\(rq, Mutt will skip the initial +send-menu and allow you to immediately begin editing the body of your +message. The send-menu may still be accessed once you have finished +editing the body of your message. +.IP +Also see \(lq$fast_reply\(rq. + + +.TP +.B auto_tag +.nf +Type: boolean +Default: no +.fi +.IP +When set, functions in the \fIindex\fP menu which affect a message +will be applied to all tagged messages (if there are any). When +unset, you must first use the tag-prefix function (default: \(rq;\(rq) to +make the next function apply to all tagged messages. + + +.TP +.B beep +.nf +Type: boolean +Default: yes +.fi +.IP +When this variable is set, mutt will beep when an error occurs. + + +.TP +.B beep_new +.nf +Type: boolean +Default: no +.fi +.IP +When this variable is set, mutt will beep whenever it prints a message +notifying you of new mail. This is independent of the setting of the +\(lq$beep\(rq variable. + + +.TP +.B bounce +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether you will be asked to confirm bouncing messages. +If set to \fIyes\fP you don't get asked if you want to bounce a +message. Setting this variable to \fIno\fP is not generally useful, +and thus not recommended, because you are unable to bounce messages. + + +.TP +.B bounce_delivered +.nf +Type: boolean +Default: yes +.fi +.IP +When this variable is set, mutt will include Delivered-To headers when +bouncing messages. Postfix users may wish to unset this variable. + + +.TP +.B catchup_newsgroup +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +If this variable is \fIset\fP, Mutt will mark all articles in newsgroup +as read when you quit the newsgroup (catchup newsgroup). + + +.TP +.B charset +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Character set your terminal uses to display and enter textual data. + + +.TP +.B check_new +.nf +Type: boolean +Default: yes +.fi +.IP +\fBNote:\fP this option only affects \fImaildir\fP and \fIMH\fP style +mailboxes. +.IP +When \fIset\fP, Mutt will check for new mail delivered while the +mailbox is open. Especially with MH mailboxes, this operation can +take quite some time since it involves scanning the directory and +checking each file to see if it has already been looked at. If +\fIcheck_new\fP is \fIunset\fP, no check for new mail is performed +while the mailbox is open. + + +.TP +.B collapse_unread +.nf +Type: boolean +Default: yes +.fi +.IP +When \fIunset\fP, Mutt will not collapse a thread if it contains any +unread messages. + + +.TP +.B uncollapse_jump +.nf +Type: boolean +Default: no +.fi +.IP +When \fIset\fP, Mutt will jump to the next unread message, if any, +when the current thread is \fIun\fPcollapsed. + + +.TP +.B compose_format +.nf +Type: string +Default: \(lq-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-\(rq +.fi +.IP +Controls the format of the status line displayed in the \\fCompose\fP +menu. This string is similar to \(lq$status_format\(rq, but has its own +set of printf()-like sequences: +.IP + +.RS +.IP %a +total number of attachments + +.IP %h +local hostname + +.IP %l +approximate size (in bytes) of the current message + +.IP %v +Mutt version string + +.RE +.IP +See the text describing the \(lq$status_format\(rq option for more +information on how to set \(lq$compose_format\(rq. + + +.TP +.B confirmappend +.nf +Type: boolean +Default: yes +.fi +.IP +When set, Mutt will prompt for confirmation when appending messages to +an existing mailbox. + + +.TP +.B confirmcreate +.nf +Type: boolean +Default: yes +.fi +.IP +When set, Mutt will prompt for confirmation when saving messages to a +mailbox which does not yet exist before creating it. + + +.TP +.B connect_timeout +.nf +Type: number +Default: 30 +.fi +.IP +Causes Mutt to timeout a network connection (for IMAP or POP) after this +many seconds if the connection is not able to be established. A negative +value causes Mutt to wait indefinitely for the connection to succeed. + + +.TP +.B content_type +.nf +Type: string +Default: \(lqtext/plain\(rq +.fi +.IP +Sets the default Content-Type for the body of newly composed messages. + + +.TP +.B copy +.nf +Type: quadoption +Default: yes +.fi +.IP +This variable controls whether or not copies of your outgoing messages +will be saved for later references. Also see \(lq$record\(rq, +\(lq$save_name\(rq, \(lq$force_name\(rq and \(lqfcc-hook\(rq. + + +.TP +.B crypt_autopgp +.nf +Type: boolean +Default: yes +.fi +.IP +This variable controls whether or not mutt may automatically enable +PGP encryption/signing for messages. See also \(lq$crypt_autoencrypt\(rq, +\(lq$crypt_replyencrypt\(rq, +\(lq$crypt_autosign\(rq, \(lq$crypt_replysign\(rq and \(lq$smime_is_default\(rq. + + +.TP +.B crypt_autosmime +.nf +Type: boolean +Default: yes +.fi +.IP +This variable controls whether or not mutt may automatically enable +S/MIME encryption/signing for messages. See also \(lq$crypt_autoencrypt\(rq, +\(lq$crypt_replyencrypt\(rq, +\(lq$crypt_autosign\(rq, \(lq$crypt_replysign\(rq and \(lq$smime_is_default\(rq. + + +.TP +.B date_format +.nf +Type: string +Default: \(lq!%a, %b %d, %Y at %I:%M:%S%p %Z\(rq +.fi +.IP +This variable controls the format of the date printed by the \(lq%d\(rq +sequence in \(lq$index_format\(rq. This is passed to the \fIstrftime\fP +call to process the date. See the man page for \fIstrftime(3)\fP for +the proper syntax. +.IP +Unless the first character in the string is a bang (\(lq!\(rq), the month +and week day names are expanded according to the locale specified in +the variable \(lq$locale\(rq. If the first character in the string is a +bang, the bang is discarded, and the month and week day names in the +rest of the string are expanded in the \fIC\fP locale (that is in US +English). + + +.TP +.B default_hook +.nf +Type: string +Default: \(lq~f %s !~P | (~P ~C %s)\(rq +.fi +.IP +This variable controls how send-hooks, message-hooks, save-hooks, +and fcc-hooks will +be interpreted if they are specified with only a simple regexp, +instead of a matching pattern. The hooks are expanded when they are +declared, so a hook will be interpreted according to the value of this +variable at the time the hook is declared. The default value matches +if the message is either from a user matching the regular expression +given, or if it is from you (if the from address matches +\(lqalternates\(rq) and is to or cc'ed to a user matching the given +regular expression. + + +.TP +.B delete +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether or not messages are really deleted when closing or +synchronizing a mailbox. If set to \fIyes\fP, messages marked for +deleting will automatically be purged without prompting. If set to +\fIno\fP, messages marked for deletion will be kept in the mailbox. + + +.TP +.B delete_untag +.nf +Type: boolean +Default: yes +.fi +.IP +If this option is \fIset\fP, mutt will untag messages when marking them +for deletion. This applies when you either explicitly delete a message, +or when you save it to another folder. + + +.TP +.B digest_collapse +.nf +Type: boolean +Default: yes +.fi +.IP +If this option is \fIset\fP, mutt's revattach menu will not show the subparts of +individual messages in a digest. To see these subparts, press 'v' on that menu. + + +.TP +.B display_filter +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +When set, specifies a command used to filter messages. When a message +is viewed it is passed as standard input to $display_filter, and the +filtered message is read from the standard output. + + +.TP +.B dotlock_program +.nf +Type: path +Default: \(lq/usr/local/bin/mutt_dotlock\(rq +.fi +.IP +Contains the path of the mutt_dotlock (8) binary to be used by +mutt. + + +.TP +.B dsn_notify +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +\fBNote:\fP you should not enable this unless you are using Sendmail +8.8.x or greater. +.IP +This variable sets the request for when notification is returned. The +string consists of a comma separated list (no spaces!) of one or more +of the following: \fInever\fP, to never request notification, +\fIfailure\fP, to request notification on transmission failure, +\fIdelay\fP, to be notified of message delays, \fIsuccess\fP, to be +notified of successful transmission. +.IP +Example: set dsn_notify=\(rqfailure,delay\(rq + + +.TP +.B dsn_return +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +\fBNote:\fP you should not enable this unless you are using Sendmail +8.8.x or greater. +.IP +This variable controls how much of your message is returned in DSN +messages. It may be set to either \fIhdrs\fP to return just the +message header, or \fIfull\fP to return the full message. +.IP +Example: set dsn_return=hdrs + + +.TP +.B duplicate_threads +.nf +Type: boolean +Default: yes +.fi +.IP +This variable controls whether mutt, when sorting by threads, threads +messages with the same message-id together. If it is set, it will indicate +that it thinks they are duplicates of each other with an equals sign +in the thread diagram. + + +.TP +.B edit_headers +.nf +Type: boolean +Default: no +.fi +.IP +This option allows you to edit the header of your outgoing messages +along with the body of your message. + + +.TP +.B editor +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +This variable specifies which editor is used by mutt. +It defaults to the value of the VISUAL, or EDITOR, environment +variable, or to the string \(rqvi\(rq if neither of those are set. + + +.TP +.B encode_from +.nf +Type: boolean +Default: no +.fi +.IP +When \fIset\fP, mutt will quoted-printable encode messages when +they contain the string \(rqFrom \(rq in the beginning of a line. +Useful to avoid the tampering certain mail delivery and transport +agents tend to do with messages. + + +.TP +.B envelope_from +.nf +Type: boolean +Default: no +.fi +.IP +When \fIset\fP, mutt will try to derive the message's \fIenvelope\fP +sender from the \(rqFrom:\(rq header. Note that this information is passed +to sendmail command using the \(rq-f\(rq command line switch, so don't set this +option if you are using that switch in $sendmail yourself, +or if the sendmail on your machine doesn't support that command +line switch. + + +.TP +.B escape +.nf +Type: string +Default: \(lq~\(rq +.fi +.IP +Escape character to use for functions in the builtin editor. + + +.TP +.B fast_reply +.nf +Type: boolean +Default: no +.fi +.IP +When set, the initial prompt for recipients and subject are skipped +when replying to messages, and the initial prompt for subject is +skipped when forwarding messages. +.IP +\fBNote:\fP this variable has no effect when the \(lq$autoedit\(rq +variable is set. + + +.TP +.B fcc_attach +.nf +Type: boolean +Default: yes +.fi +.IP +This variable controls whether or not attachments on outgoing messages +are saved along with the main body of your message. + + +.TP +.B fcc_clear +.nf +Type: boolean +Default: no +.fi +.IP +When this variable is set, FCCs will be stored unencrypted and +unsigned, even when the actual message is encrypted and/or +signed. +(PGP only) + + +.TP +.B folder +.nf +Type: path +Default: \(lq~/Mail\(rq +.fi +.IP +Specifies the default location of your mailboxes. A `+' or `=' at the +beginning of a pathname will be expanded to the value of this +variable. Note that if you change this variable from the default +value you need to make sure that the assignment occurs \fIbefore\fP +you use `+' or `=' for any other variables since expansion takes place +during the `set' command. + + +.TP +.B folder_format +.nf +Type: string +Default: \(lq%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f\(rq +.fi +.IP +This variable allows you to customize the file browser display to your +personal taste. This string is similar to \(lq$index_format\(rq, but has +its own set of printf()-like sequences: +.IP + +.RS +.IP %C +current file number + +.IP %d +date/time folder was last modified + +.IP %f +filename + +.IP %F +file permissions + +.IP %g +group name (or numeric gid, if missing) + +.IP %l +number of hard links + +.IP %N +N if folder has new mail, blank otherwise + +.IP %s +size in bytes + +.IP %t +* if the file is tagged, blank otherwise + +.IP %u +owner name (or numeric uid, if missing) + +.IP %>X +right justify the rest of the string and pad with character \(rqX\(rq + +.IP %|X +pad to the end of the line with character \(rqX\(rq + +.RE + +.TP +.B followup_to +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether or not the \fIMail-Followup-To\fP header field is +generated when sending mail. When \fIset\fP, Mutt will generate this +field when you are replying to a known mailing list, specified with +the \(lqsubscribe\(rq or \(lqlists\(rq commands. +.IP +This field has two purposes. First, preventing you from +receiving duplicate copies of replies to messages which you send +to mailing lists, and second, ensuring that you do get a reply +separately for any messages sent to known lists to which you are +not subscribed. The header will contain only the list's address +for subscribed lists, and both the list address and your own +email address for unsubscribed lists. Without this header, a +group reply to your message sent to a subscribed list will be +sent to both the list and your address, resulting in two copies +of the same email for you. + + +.TP +.B followup_to_poster +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +If this variable is \fIset\fP and the keyword \(rqposter\(rq is present in +\fIFollowup-To\fP header, follow-up to newsgroup function is not +permitted. The message will be mailed to the submitter of the +message via mail. + + +.TP +.B force_name +.nf +Type: boolean +Default: no +.fi +.IP +This variable is similar to \(lq$save_name\(rq, except that Mutt will +store a copy of your outgoing message by the username of the address +you are sending to even if that mailbox does not exist. +.IP +Also see the \(lq$record\(rq variable. + + +.TP +.B forward_decode +.nf +Type: boolean +Default: yes +.fi +.IP +Controls the decoding of complex MIME messages into text/plain when +forwarding a message. The message header is also RFC2047 decoded. +This variable is only used, if \(lq$mime_forward\(rq is \fIunset\fP, +otherwise \(lq$mime_forward_decode\(rq is used instead. + + +.TP +.B forward_edit +.nf +Type: quadoption +Default: yes +.fi +.IP +This quadoption controls whether or not the user is automatically +placed in the editor when forwarding messages. For those who always want +to forward with no modification, use a setting of \(lqno\(rq. + + +.TP +.B forward_format +.nf +Type: string +Default: \(lq[%a: %s]\(rq +.fi +.IP +This variable controls the default subject when forwarding a message. +It uses the same format sequences as the \(lq$index_format\(rq variable. + + +.TP +.B forward_quote +.nf +Type: boolean +Default: no +.fi +.IP +When \fIset\fP forwarded messages included in the main body of the +message (when \(lq$mime_forward\(rq is \fIunset\fP) will be quoted using +\(lq$indent_string\(rq. + + +.TP +.B from +.nf +Type: e-mail address +Default: \(lq\(rq +.fi +.IP +When set, this variable contains a default from address. It +can be overridden using my_hdr (including from send-hooks) and +\(lq$reverse_name\(rq. This variable is ignored if \(lq$use_from\(rq +is unset. +.IP +Defaults to the contents of the environment variable EMAIL. + + +.TP +.B gecos_mask +.nf +Type: regular expression +Default: \(lq^[^,]*\(rq +.fi +.IP +A regular expression used by mutt to parse the GECOS field of a password +entry when expanding the alias. By default the regular expression is set +to \(rq^[^,]*\(rq which will return the string up to the first \(rq,\(rq encountered. +If the GECOS field contains a string like \(rqlastname, firstname\(rq then you +should set the gecos_mask=\(rq.*\(rq. +.IP +This can be useful if you see the following behavior: you address a e-mail +to user ID stevef whose full name is Steve Franklin. If mutt expands +stevef to \(rqFranklin\(rq stevef@foo.bar then you should set the gecos_mask to +a regular expression that will match the whole name so mutt will expand +\(rqFranklin\(rq to \(rqFranklin, Steve\(rq. + + +.TP +.B group_index_format +.nf +Type: string +Default: \(lq%4C %M%N %5s %-45.45f %d\(rq +.fi +.IP +This variable allows you to customize the newsgroup browser display to +your personal taste. This string is similar to \(lqindex_format\(rq, but +has its own set of printf()-like sequences: +.IP + +.IP +.DS +.sp +.ft CR +.nf +%C current newsgroup number +%d description of newsgroup (becomes from server) +%f newsgroup name +%M - if newsgroup not allowed for direct post (moderated for example) +%N N if newsgroup is new, u if unsubscribed, blank otherwise +%n number of new articles in newsgroup +%s number of unread articles in newsgroup +%>X right justify the rest of the string and pad with character \(rqX\(rq +%|X pad to the end of the line with character \(rqX\(rq + +.fi +.ec +.ft P +.sp + + +.TP +.B hdrs +.nf +Type: boolean +Default: yes +.fi +.IP +When unset, the header fields normally added by the \(lqmy_hdr\(rq +command are not created. This variable \fImust\fP be unset before +composing a new message or replying in order to take effect. If set, +the user defined header fields are added to every new message. + + +.TP +.B header +.nf +Type: boolean +Default: no +.fi +.IP +When set, this variable causes Mutt to include the header +of the message you are replying to into the edit buffer. +The \(lq$weed\(rq setting applies. + + +.TP +.B help +.nf +Type: boolean +Default: yes +.fi +.IP +When set, help lines describing the bindings for the major functions +provided by each menu are displayed on the first line of the screen. +.IP +\fBNote:\fP The binding will not be displayed correctly if the +function is bound to a sequence rather than a single keystroke. Also, +the help line may not be updated if a binding is changed while Mutt is +running. Since this variable is primarily aimed at new users, neither +of these should present a major problem. + + +.TP +.B hidden_host +.nf +Type: boolean +Default: no +.fi +.IP +When set, mutt will skip the host name part of \(lq$hostname\(rq variable +when adding the domain part to addresses. This variable does not +affect the generation of Message-IDs, and it will not lead to the +cut-off of first-level domains. + + +.TP +.B hide_limited +.nf +Type: boolean +Default: no +.fi +.IP +When set, mutt will not show the presence of messages that are hidden +by limiting, in the thread tree. + + +.TP +.B hide_missing +.nf +Type: boolean +Default: yes +.fi +.IP +When set, mutt will not show the presence of missing messages in the +thread tree. + + +.TP +.B hide_top_limited +.nf +Type: boolean +Default: no +.fi +.IP +When set, mutt will not show the presence of messages that are hidden +by limiting, at the top of threads in the thread tree. Note that when +$hide_missing is set, this option will have no effect. + + +.TP +.B hide_top_missing +.nf +Type: boolean +Default: yes +.fi +.IP +When set, mutt will not show the presence of missing messages at the +top of threads in the thread tree. Note that when $hide_limited is +set, this option will have no effect. + + +.TP +.B history +.nf +Type: number +Default: 10 +.fi +.IP +This variable controls the size (in number of strings remembered) of +the string history buffer. The buffer is cleared each time the +variable is set. + + +.TP +.B honor_followup_to +.nf +Type: quadoption +Default: yes +.fi +.IP +This variable controls whether or not a Mail-Followup-To header is +honored when group-replying to a message. + + +.TP +.B hostname +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Specifies the hostname to use after the \(lq@\(rq in local e-mail +addresses. This overrides the compile time definition obtained from +/etc/resolv.conf. + + +.TP +.B ignore_list_reply_to +.nf +Type: boolean +Default: no +.fi +.IP +Affects the behaviour of the \fIreply\fP function when replying to +messages from mailing lists. When set, if the \(lqReply-To:\(rq field is +set to the same value as the \(lqTo:\(rq field, Mutt assumes that the +\(lqReply-To:\(rq field was set by the mailing list to automate responses +to the list, and will ignore this field. To direct a response to the +mailing list when this option is set, use the \fIlist-reply\fP +function; \fIgroup-reply\fP will reply to both the sender and the +list. + + +.TP +.B imap_authenticators +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This is a colon-delimited list of authentication methods mutt may +attempt to use to log in to an IMAP server, in the order mutt should +try them. Authentication methods are either 'login' or the right +side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', +'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this +parameter is unset (the default) mutt will try all available methods, +in order from most-secure to least-secure. +.IP +Example: set imap_authenticators=\(rqgssapi:cram-md5:login\(rq +.IP +\fBNote:\fP Mutt will only fall back to other authentication methods if +the previous methods are unavailable. If a method is available but +authentication fails, mutt will not connect to the IMAP server. + + +.TP +.B imap_delim_chars +.nf +Type: string +Default: \(lq/.\(rq +.fi +.IP +This contains the list of characters which you would like to treat +as folder separators for displaying IMAP paths. In particular it +helps in using the '=' shortcut for your \fIfolder\fP variable. + + +.TP +.B imap_force_ssl +.nf +Type: boolean +Default: no +.fi +.IP +If this variable is set, Mutt will always use SSL when +connecting to IMAP servers. + + +.TP +.B imap_home_namespace +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +You normally want to see your personal folders alongside +your INBOX in the IMAP browser. If you see something else, you may set +this variable to the IMAP path to your folders. + + +.TP +.B imap_keepalive +.nf +Type: number +Default: 900 +.fi +.IP +This variable specifies the maximum amount of time in seconds that mutt +will wait before polling open IMAP connections, to prevent the server +from closing them before mutt has finished with them. The default is +well within the RFC-specified minimum amount of time (30 minutes) before +a server is allowed to do this, but in practice the RFC does get +violated every now and then. Reduce this number if you find yourself +getting disconnected from your IMAP server due to inactivity. + + +.TP +.B imap_list_subscribed +.nf +Type: boolean +Default: no +.fi +.IP +This variable configures whether IMAP folder browsing will look for +only subscribed folders or all folders. This can be toggled in the +IMAP browser with the \fItoggle-subscribed\fP function. + + +.TP +.B imap_pass +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Specifies the password for your IMAP account. If unset, Mutt will +prompt you for your password when you invoke the fetch-mail function. +\fBWarning\fP: you should only use this option when you are on a +fairly secure machine, because the superuser can read your muttrc even +if you are the only one who can read the file. + + +.TP +.B imap_passive +.nf +Type: boolean +Default: yes +.fi +.IP +When set, mutt will not open new IMAP connections to check for new +mail. Mutt will only check for new mail over existing IMAP +connections. This is useful if you don't want to be prompted to +user/password pairs on mutt invocation, or if opening the connection +is slow. + + +.TP +.B imap_peek +.nf +Type: boolean +Default: yes +.fi +.IP +If set, mutt will avoid implicitly marking your mail as read whenever +you fetch a message from the server. This is generally a good thing, +but can make closing an IMAP folder somewhat slower. This option +exists to appease speed freaks. + + +.TP +.B imap_servernoise +.nf +Type: boolean +Default: yes +.fi +.IP +When set, mutt will display warning messages from the IMAP +server as error messages. Since these messages are often +harmless, or generated due to configuration problems on the +server which are out of the users' hands, you may wish to suppress +them at some point. + + +.TP +.B imap_user +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Your login name on the IMAP server. +.IP +This variable defaults to your user name on the local machine. + + +.TP +.B implicit_autoview +.nf +Type: boolean +Default: no +.fi +.IP +If set to \(lqyes\(rq, mutt will look for a mailcap entry with the +copiousoutput flag set for \fIevery\fP MIME attachment it doesn't have +an internal viewer defined for. If such an entry is found, mutt will +use the viewer defined in that entry to convert the body part to text +form. + + +.TP +.B include +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether or not a copy of the message(s) you are replying to +is included in your reply. + + +.TP +.B indent_string +.nf +Type: string +Default: \(lq> \(rq +.fi +.IP +Specifies the string to prepend to each line of text quoted in a +message to which you are replying. You are strongly encouraged not to +change this value, as it tends to agitate the more fanatical netizens. + + +.TP +.B index_format +.nf +Type: string +Default: \(lq%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s\(rq +.fi +.IP +This variable allows you to customize the message index display to +your personal taste. +.IP +\(lqFormat strings\(rq are similar to the strings used in the \(lqC\(rq +function printf to format output (see the man page for more detail). +The following sequences are defined in Mutt: +.IP + +.RS +.IP %a +address of the author + +.IP %A +reply-to address (if present; otherwise: address of author) + +.IP %b +filename of the original message folder (think mailBox) + +.IP %B +the list to which the letter was sent, or else the folder name (%b). + +.IP %c +number of characters (bytes) in the message + +.IP %C +current message number + +.IP %d +date and time of the message in the format specified by +\(lqdate_format\(rq converted to sender's time zone + +.IP %D +date and time of the message in the format specified by +\(lqdate_format\(rq converted to the local time zone + +.IP %e +current message number in thread + +.IP %E +number of messages in current thread + +.IP %f +entire From: line (address + real name) + +.IP %F +author name, or recipient name if the message is from you + +.IP %g +newsgroup name (if compiled with nntp support) + +.IP %i +message-id of the current message + +.IP %l +number of lines in the message (does not work with maildir, +mh, and possibly IMAP folders) + +.IP %L +If an address in the To or CC header field matches an address +defined by the users \(lqsubscribe\(rq command, this displays +\(rqTo <list-name>\(rq, otherwise the same as %F. + +.IP %m +total number of message in the mailbox + +.IP %M +number of hidden messages if the thread is collapsed. + +.IP %N +message score + +.IP %n +author's real name (or address if missing) + +.IP %O +(_O_riginal save folder) Where mutt would formerly have +stashed the message: list name or recipient name if no list + +.IP %s +subject of the message + +.IP %S +status of the message (N/D/d/!/r/*) + +.IP %t +`to:' field (recipients) + +.IP %T +the appropriate character from the $to_chars string + +.IP %u +user (login) name of the author + +.IP %v +first name of the author, or the recipient if the message is from you + +.IP %W +name of organization of author (`organization:' field) + +.IP %y +`x-label:' field, if present + +.IP %Y +`x-label' field, if present, and (1) not at part of a thread tree, +(2) at the top of a thread, or (3) `x-label' is different from +preceding message's `x-label'. + +.IP %Z +message status flags + +.IP %{fmt} +the date and time of the message is converted to sender's +time zone, and \(lqfmt\(rq is expanded by the library function +\(lqstrftime\(rq; a leading bang disables locales + +.IP %[fmt] +the date and time of the message is converted to the local +time zone, and \(lqfmt\(rq is expanded by the library function +\(lqstrftime\(rq; a leading bang disables locales + +.IP %(fmt) +the local date and time when the message was received. +\(lqfmt\(rq is expanded by the library function \(lqstrftime\(rq; +a leading bang disables locales + +.IP %<fmt> +the current local time. \(lqfmt\(rq is expanded by the library +function \(lqstrftime\(rq; a leading bang disables locales. + +.IP %>X +right justify the rest of the string and pad with character \(rqX\(rq + +.IP %|X +pad to the end of the line with character \(rqX\(rq + +.RE +.IP +See also: \(lq$to_chars\(rq. + + +.TP +.B inews +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +If set, specifies the program and arguments used to deliver news posted +by Mutt. Otherwise, mutt posts article using current connection to +news server. The following printf-style sequence is understood: +.IP + +.IP +.DS +.sp +.ft CR +.nf +%s newsserver name + +.fi +.ec +.ft P +.sp +.IP +Example: set inews=\(rq/usr/local/bin/inews -hS\(rq + + +.TP +.B ispell +.nf +Type: path +Default: \(lq/sw/bin/ispell\(rq +.fi +.IP +How to invoke ispell (GNU's spell-checking software). + + +.TP +.B keep_flagged +.nf +Type: boolean +Default: no +.fi +.IP +If set, read messages marked as flagged will not be moved +from your spool mailbox to your \(lq$mbox\(rq mailbox, or as a result of +a \(lqmbox-hook\(rq command. + + +.TP +.B locale +.nf +Type: string +Default: \(lqC\(rq +.fi +.IP +The locale used by \fIstrftime(3)\fP to format dates. Legal values are +the strings your system accepts for the locale variable \fILC_TIME\fP. + + +.TP +.B list_reply +.nf +Type: quadoption +Default: no +.fi +.IP +When set, address replies to the mailing list the original message came +from (instead to the author only). Setting this option to \(lqask-yes\(rq or +\(lqask-no\(rq will ask if you really intended to reply to the author only. + + +.TP +.B mail_check +.nf +Type: number +Default: 5 +.fi +.IP +This variable configures how often (in seconds) mutt should look for +new mail. + + +.TP +.B mailcap_path +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This variable specifies which files to consult when attempting to +display MIME bodies not directly supported by Mutt. + + +.TP +.B mailcap_sanitize +.nf +Type: boolean +Default: yes +.fi +.IP +If set, mutt will restrict possible characters in mailcap % expandos +to a well-defined set of safe characters. This is the safe setting, +but we are not sure it doesn't break some more advanced MIME stuff. +.IP +\fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE +DOING!\fP + + +.TP +.B maildir_trash +.nf +Type: boolean +Default: no +.fi +.IP +If set, messages marked as deleted will be saved with the maildir +(T)rashed flag instead of unlinked. \fBNOTE:\fP this only applies +to maildir-style mailboxes. Setting it will have no effect on other +mailbox types. + + +.TP +.B mark_old +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether or not mutt marks \fInew\fP \fBunread\fP +messages as \fIold\fP if you exit a mailbox without reading them. +With this option set, the next time you start mutt, the messages +will show up with an \(rqO\(rq next to them in the index menu, +indicating that they are old. + + +.TP +.B markers +.nf +Type: boolean +Default: yes +.fi +.IP +Controls the display of wrapped lines in the internal pager. If set, a +\(lq+\(rq marker is displayed at the beginning of wrapped lines. Also see +the \(lq$smart_wrap\(rq variable. + + +.TP +.B mask +.nf +Type: regular expression +Default: \(lq!^\\.[^.]\(rq +.fi +.IP +A regular expression used in the file browser, optionally preceded by +the \fInot\fP operator \(lq!\(rq. Only files whose names match this mask +will be shown. The match is always case-sensitive. + + +.TP +.B mbox +.nf +Type: path +Default: \(lq~/mbox\(rq +.fi +.IP +This specifies the folder into which read mail in your \(lq$spoolfile\(rq +folder will be appended. + + +.TP +.B mbox_type +.nf +Type: folder magic +Default: mbox +.fi +.IP +The default mailbox type used when creating new folders. May be any of +mbox, MMDF, MH and Maildir. + + +.TP +.B metoo +.nf +Type: boolean +Default: no +.fi +.IP +If unset, Mutt will remove your address (see the \(lqalternates\(rq +command) from the list of recipients when replying to a message. + + +.TP +.B menu_scroll +.nf +Type: boolean +Default: no +.fi +.IP +When \fIset\fP, menus will be scrolled up or down one line when you +attempt to move across a screen boundary. If \fIunset\fP, the screen +is cleared and the next or previous page of the menu is displayed +(useful for slow links to avoid many redraws). + + +.TP +.B meta_key +.nf +Type: boolean +Default: no +.fi +.IP +If set, forces Mutt to interpret keystrokes with the high bit (bit 8) +set as if the user had pressed the ESC key and whatever key remains +after having the high bit removed. For example, if the key pressed +has an ASCII value of 0xf4, then this is treated as if the user had +pressed ESC then \(lqx\(rq. This is because the result of removing the +high bit from \(lq0xf4\(rq is \(lq0x74\(rq, which is the ASCII character +\(lqx\(rq. + + +.TP +.B mh_purge +.nf +Type: boolean +Default: no +.fi +.IP +When unset, mutt will mimic mh's behaviour and rename deleted messages +to \fI,<old file name>\fP in mh folders instead of really deleting +them. If the variable is set, the message files will simply be +deleted. + + +.TP +.B mh_seq_flagged +.nf +Type: string +Default: \(lqflagged\(rq +.fi +.IP +The name of the MH sequence used for flagged messages. + + +.TP +.B mh_seq_replied +.nf +Type: string +Default: \(lqreplied\(rq +.fi +.IP +The name of the MH sequence used to tag replied messages. + + +.TP +.B mh_seq_unseen +.nf +Type: string +Default: \(lqunseen\(rq +.fi +.IP +The name of the MH sequence used for unseen messages. + + +.TP +.B mime_forward +.nf +Type: quadoption +Default: no +.fi +.IP +When set, the message you are forwarding will be attached as a +separate MIME part instead of included in the main body of the +message. This is useful for forwarding MIME messages so the receiver +can properly view the message as it was delivered to you. If you like +to switch between MIME and not MIME from mail to mail, set this +variable to ask-no or ask-yes. +.IP +Also see \(lq$forward_decode\(rq and \(lq$mime_forward_decode\(rq. + + +.TP +.B mime_forward_decode +.nf +Type: boolean +Default: no +.fi +.IP +Controls the decoding of complex MIME messages into text/plain when +forwarding a message while \(lq$mime_forward\(rq is \fIset\fP. Otherwise +\(lq$forward_decode\(rq is used instead. + + +.TP +.B mime_forward_rest +.nf +Type: quadoption +Default: yes +.fi +.IP +When forwarding multiple attachments of a MIME message from the recvattach +menu, attachments which cannot be decoded in a reasonable manner will +be attached to the newly composed message if this option is set. + + +.TP +.B mime_subject +.nf +Type: boolean +Default: yes +.fi +.IP +If \fIunset\fP, 8-bit \(lqsubject:\(rq line in article header will not be +encoded according to RFC2047 to base64. This is useful when message +is Usenet article, because MIME for news is nonstandard feature. + + +.TP +.B mix_entry_format +.nf +Type: string +Default: \(lq%4n %c %-16s %a\(rq +.fi +.IP +This variable describes the format of a remailer line on the mixmaster +chain selection screen. The following printf-like sequences are +supported: +.IP + +.RS +.IP %n +The running number on the menu. + +.IP %c +Remailer capabilities. + +.IP %s +The remailer's short name. + +.IP %a +The remailer's e-mail address. + +.RE + +.TP +.B mixmaster +.nf +Type: path +Default: \(lqmixmaster\(rq +.fi +.IP +This variable contains the path to the Mixmaster binary on your +system. It is used with various sets of parameters to gather the +list of known remailers, and to finally send a message through the +mixmaster chain. + + +.TP +.B move +.nf +Type: quadoption +Default: ask-no +.fi +.IP +Controls whether you will be asked to confirm moving read messages +from your spool mailbox to your \(lq$mbox\(rq mailbox, or as a result of +a \(lqmbox-hook\(rq command. + + +.TP +.B message_format +.nf +Type: string +Default: \(lq%s\(rq +.fi +.IP +This is the string displayed in the \(lqattachment\(rq menu for +attachments of type message/rfc822. For a full listing of defined +printf()-like sequences see the section on \(lq$index_format\(rq. + + +.TP +.B narrow_tree +.nf +Type: boolean +Default: no +.fi +.IP +This variable, when set, makes the thread tree narrower, allowing +deeper threads to fit on the screen. + + +.TP +.B news_cache_dir +.nf +Type: path +Default: \(lq~/.mutt\(rq +.fi +.IP +This variable pointing to directory where Mutt will save cached news +articles headers in. If \fIunset\fP, headers will not be saved at all +and will be reloaded each time when you enter to newsgroup. + + +.TP +.B news_server +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This variable specifies domain name or address of NNTP server. It +defaults to the newsserver specified in the environment variable +$NNTPSERVER or contained in the file /etc/nntpserver. You can also +specify username and an alternative port for each newsserver, ie: +.IP +[nntp[s]://][username[:password]@]newsserver[:port] + + +.TP +.B newsrc +.nf +Type: path +Default: \(lq~/.newsrc\(rq +.fi +.IP +The file, containing info about subscribed newsgroups - names and +indexes of read articles. The following printf-style sequence +is understood: +.IP + +.IP +.DS +.sp +.ft CR +.nf +%s newsserver name + +.fi +.ec +.ft P +.sp + + +.TP +.B nntp_context +.nf +Type: number +Default: 1000 +.fi +.IP +This variable defines number of articles which will be in index when +newsgroup entered. If active newsgroup have more articles than this +number, oldest articles will be ignored. Also controls how many +articles headers will be saved in cache when you quit newsgroup. + + +.TP +.B nntp_load_description +.nf +Type: boolean +Default: yes +.fi +.IP +This variable controls whether or not descriptions for each newsgroup +must be loaded when newsgroup is added to list (first time list +loading or new newsgroup adding). + + +.TP +.B nntp_user +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Your login name on the NNTP server. If \fIunset\fP and NNTP server requires +authentification, Mutt will prompt you for your account name when you +connect to newsserver. + + +.TP +.B nntp_pass +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Your password for NNTP account. + + +.TP +.B nntp_poll +.nf +Type: number +Default: 60 +.fi +.IP +The time in seconds until any operations on newsgroup except post new +article will cause recheck for new news. If set to 0, Mutt will +recheck newsgroup on each operation in index (stepping, read article, +etc.). + + +.TP +.B nntp_reconnect +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether or not Mutt will try to reconnect to newsserver when +connection lost. + + +.TP +.B pager +.nf +Type: path +Default: \(lqbuiltin\(rq +.fi +.IP +This variable specifies which pager you would like to use to view +messages. builtin means to use the builtin pager, otherwise this +variable should specify the pathname of the external pager you would +like to use. +.IP +Using an external pager may have some disadvantages: Additional +keystrokes are necessary because you can't call mutt functions +directly from the pager, and screen resizes cause lines longer than +the screen width to be badly formatted in the help menu. + + +.TP +.B pager_context +.nf +Type: number +Default: 0 +.fi +.IP +This variable controls the number of lines of context that are given +when displaying the next or previous page in the internal pager. By +default, Mutt will display the line after the last one on the screen +at the top of the next page (0 lines of context). + + +.TP +.B pager_format +.nf +Type: string +Default: \(lq-%Z- %C/%m: %-20.20n %s\(rq +.fi +.IP +This variable controls the format of the one-line message \(lqstatus\(rq +displayed before each message in either the internal or an external +pager. The valid sequences are listed in the \(lq$index_format\(rq +section. + + +.TP +.B pager_index_lines +.nf +Type: number +Default: 0 +.fi +.IP +Determines the number of lines of a mini-index which is shown when in +the pager. The current message, unless near the top or bottom of the +folder, will be roughly one third of the way down this mini-index, +giving the reader the context of a few messages before and after the +message. This is useful, for example, to determine how many messages +remain to be read in the current thread. One of the lines is reserved +for the status bar from the index, so a \fIpager_index_lines\fP of 6 +will only show 5 lines of the actual index. A value of 0 results in +no index being shown. If the number of messages in the current folder +is less than \fIpager_index_lines\fP, then the index will only use as +many lines as it needs. + + +.TP +.B pager_stop +.nf +Type: boolean +Default: no +.fi +.IP +When set, the internal-pager will \fBnot\fP move to the next message +when you are at the end of a message and invoke the \fInext-page\fP +function. + + +.TP +.B crypt_autosign +.nf +Type: boolean +Default: no +.fi +.IP +Setting this variable will cause Mutt to always attempt to +cryptographically sign outgoing messages. This can be overridden +by use of the \fIpgp-menu\fP, when signing is not required or +encryption is requested as well. If \(lq$smime_is_default\(rq is set, +then OpenSSL is used instead to create S/MIME messages and settings can +be overridden by use of the \fIsmime-menu\fP. +(Crypto only) + + +.TP +.B crypt_autoencrypt +.nf +Type: boolean +Default: no +.fi +.IP +Setting this variable will cause Mutt to always attempt to PGP +encrypt outgoing messages. This is probably only useful in +connection to the \fIsend-hook\fP command. It can be overridden +by use of the \fIpgp-menu\fP, when encryption is not required or +signing is requested as well. IF \(lq$smime_is_default\(rq is set, +then OpenSSL is used instead to create S/MIME messages and +settings can be overridden by use of the \fIsmime-menu\fP. +(Crypto only) + + +.TP +.B pgp_ignore_subkeys +.nf +Type: boolean +Default: yes +.fi +.IP +Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead, +the principal key will inherit the subkeys' capabilities. Unset this +if you want to play interesting key selection games. +(PGP only) + + +.TP +.B crypt_replyencrypt +.nf +Type: boolean +Default: yes +.fi +.IP +If set, automatically PGP or OpenSSL encrypt replies to messages which are +encrypted. +(Crypto only) + + +.TP +.B crypt_replysign +.nf +Type: boolean +Default: no +.fi +.IP +If set, automatically PGP or OpenSSL sign replies to messages which are +signed. +.IP +\fBNote:\fP this does not work on messages that are encrypted +\fBand\fP signed! +(Crypto only) + + +.TP +.B crypt_replysignencrypted +.nf +Type: boolean +Default: no +.fi +.IP +If set, automatically PGP or OpenSSL sign replies to messages +which are encrypted. This makes sense in combination with +\(lq$crypt_replyencrypt\(rq, because it allows you to sign all +messages which are automatically encrypted. This works around +the problem noted in \(lq$crypt_replysign\(rq, that mutt is not able +to find out whether an encrypted message is also signed. +(Crypto only) + + +.TP +.B crypt_timestamp +.nf +Type: boolean +Default: yes +.fi +.IP +If set, mutt will include a time stamp in the lines surrounding +PGP or S/MIME output, so spoofing such lines is more difficult. +If you are using colors to mark these lines, and rely on these, +you may unset this setting. +(Crypto only) + + +.TP +.B pgp_use_gpg_agent +.nf +Type: boolean +Default: no +.fi +.IP +If set, mutt will use a possibly-running gpg-agent process. +(PGP only) + + +.TP +.B crypt_verify_sig +.nf +Type: quadoption +Default: yes +.fi +.IP +If \(lqyes\(rq, always attempt to verify PGP or S/MIME signatures. +If \(lqask\(rq, ask whether or not to verify the signature. +If \(lqno\(rq, never attempt to verify cryptographic signatures. +(Crypto only) + + +.TP +.B smime_is_default +.nf +Type: boolean +Default: no +.fi +.IP +The default behaviour of mutt is to use PGP on all auto-sign/encryption +operations. To override and to use OpenSSL instead this must be set. +However, this has no effect while replying, since mutt will automatically +select the same application that was used to sign/encrypt the original +message. (Note that this variable can be overridden by unsetting $crypt_autosmime.) +(S/MIME only) + + +.TP +.B smime_ask_cert_label +.nf +Type: boolean +Default: yes +.fi +.IP +This flag controls whether you want to be asked to enter a label +for a certificate about to be added to the database or not. It is +set by default. +(S/MIME only) + + +.TP +.B smime_decrypt_use_default_key +.nf +Type: boolean +Default: yes +.fi +.IP +If set (default) this tells mutt to use the default key for decryption. Otherwise, +if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address +to determine the key to use. It will ask you to supply a key, if it can't find one. +(S/MIME only) + + +.TP +.B pgp_entry_format +.nf +Type: string +Default: \(lq%4n %t%f %4l/0x%k %-4a %2c %u\(rq +.fi +.IP +This variable allows you to customize the PGP key selection menu to +your personal taste. This string is similar to \(lq$index_format\(rq, but +has its own set of printf()-like sequences: +.IP + +.RS +.IP %n +number + +.IP %k +key id + +.IP %u +user id + +.IP %a +algorithm + +.IP %l +key length + +.IP %f +flags + +.IP %c +capabilities + +.IP %t +trust/validity of the key-uid association + +.IP %[<s>] +date of the key where <s> is an strftime(3) expression + +.RE +.IP +(PGP only) + + +.TP +.B pgp_good_sign +.nf +Type: regular expression +Default: \(lq\(rq +.fi +.IP +If you assign a text to this variable, then a PGP signature is only +considered verified if the output from $pgp_verify_command contains +the text. Use this variable if the exit code from the command is 0 +even for bad signatures. +(PGP only) + + +.TP +.B pgp_check_exit +.nf +Type: boolean +Default: yes +.fi +.IP +If set, mutt will check the exit code of the PGP subprocess when +signing or encrypting. A non-zero exit code means that the +subprocess failed. +(PGP only) + + +.TP +.B pgp_long_ids +.nf +Type: boolean +Default: no +.fi +.IP +If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs. +(PGP only) + + +.TP +.B pgp_retainable_sigs +.nf +Type: boolean +Default: no +.fi +.IP +If set, signed and encrypted messages will consist of nested +multipart/signed and multipart/encrypted body parts. +.IP +This is useful for applications like encrypted and signed mailing +lists, where the outer layer (multipart/encrypted) can be easily +removed, while the inner multipart/signed part is retained. +(PGP only) + + +.TP +.B pgp_show_unusable +.nf +Type: boolean +Default: yes +.fi +.IP +If set, mutt will display non-usable keys on the PGP key selection +menu. This includes keys which have been revoked, have expired, or +have been marked as \(lqdisabled\(rq by the user. +(PGP only) + + +.TP +.B pgp_sign_as +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +If you have more than one key pair, this option allows you to specify +which of your private keys to use. It is recommended that you use the +keyid form to specify your key (e.g., \(lq0x00112233\(rq). +(PGP only) + + +.TP +.B pgp_strict_enc +.nf +Type: boolean +Default: yes +.fi +.IP +If set, Mutt will automatically encode PGP/MIME signed messages as +\fIquoted-printable\fP. Please note that unsetting this variable may +lead to problems with non-verifyable PGP signatures, so only change +this if you know what you are doing. +(PGP only) + + +.TP +.B pgp_timeout +.nf +Type: number +Default: 300 +.fi +.IP +The number of seconds after which a cached passphrase will expire if +not used. +(PGP only) + + +.TP +.B pgp_sort_keys +.nf +Type: sort order +Default: address +.fi +.IP +Specifies how the entries in the `pgp keys' menu are sorted. The +following are legal values: +.IP + +.RS +.IP address +sort alphabetically by user id + +.IP keyid +sort alphabetically by key id + +.IP date +sort by key creation date + +.IP trust +sort by the trust of the key + +.RE +.IP +If you prefer reverse order of the above values, prefix it with +`reverse-'. +(PGP only) + + +.TP +.B pgp_create_traditional +.nf +Type: quadoption +Default: no +.fi +.IP +This option controls whether Mutt generates old-style inline PGP +encrypted or signed messages. +.IP +Note that PGP/MIME will be used automatically for messages which have +a character set different from us-ascii, or which consist of more than +a single MIME part. +.IP +Also note that using the old-style PGP message format is \fBstrongly\fP +\fBdeprecated\fP. +(PGP only) + + +.TP +.B pgp_auto_traditional +.nf +Type: boolean +Default: no +.fi +.IP +This option causes Mutt to generate an old-style inline PGP +encrypted or signed message when replying to an old-style +message, and a PGP/MIME message when replying to a PGP/MIME +message. Note that this option is only meaningful when using +\(lq$crypt_replyencrypt\(rq, \(lq$crypt_replysign\(rq, or +\(lq$crypt_replysignencrypted\(rq. +.IP +Also note that PGP/MIME will be used automatically for messages +which have a character set different from us-ascii, or which +consist of more than a single MIME part. +.IP +This option overrides \(lq$pgp_create_traditional\(rq +(PGP only) + + +.TP +.B pgp_decode_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This format strings specifies a command which is used to decode +application/pgp attachments. +.IP +The PGP command formats have their own set of printf-like sequences: +.IP + +.RS +.IP %p +Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty +string otherwise. Note: This may be used with a %? construct. + +.IP %f +Expands to the name of a file containing a message. + +.IP %s +Expands to the name of a file containing the signature part + of a multipart/signed attachment when verifying it. + +.IP %a +The value of $pgp_sign_as. + +.IP %r +One or more key IDs. + +.RE +.IP +For examples on how to configure these formats for the various versions +of PGP which are floating around, see the pgp*.rc and gpg.rc files in +the samples/ subdirectory which has been installed on your system +alongside the documentation. +(PGP only) + + +.TP +.B pgp_getkeys_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is invoked whenever mutt will need public key information. +%r is the only printf-like sequence used with this format. +(PGP only) + + +.TP +.B pgp_verify_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to verify PGP signatures. +(PGP only) + + +.TP +.B pgp_decrypt_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to decrypt a PGP encrypted message. +(PGP only) + + +.TP +.B pgp_clearsign_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This format is used to create a old-style \(rqclearsigned\(rq PGP +message. Note that the use of this format is \fBstrongly\fP +\fBdeprecated\fP. +(PGP only) + + +.TP +.B pgp_sign_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to create the detached PGP signature for a +multipart/signed PGP/MIME body part. +(PGP only) + + +.TP +.B pgp_encrypt_sign_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to both sign and encrypt a body part. +(PGP only) + + +.TP +.B pgp_encrypt_only_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to encrypt a body part without signing it. +(PGP only) + + +.TP +.B pgp_import_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to import a key from a message into +the user's public key ring. +(PGP only) + + +.TP +.B pgp_export_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to export a public key from the user's +key ring. +(PGP only) + + +.TP +.B pgp_verify_key_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to verify key information from the key selection +menu. +(PGP only) + + +.TP +.B pgp_list_secring_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to list the secret key ring's contents. The +output format must be analogous to the one used by +gpg --list-keys --with-colons. +.IP +This format is also generated by the pgpring utility which comes +with mutt. +(PGP only) + + +.TP +.B pgp_list_pubring_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to list the public key ring's contents. The +output format must be analogous to the one used by +gpg --list-keys --with-colons. +.IP +This format is also generated by the pgpring utility which comes +with mutt. +(PGP only) + + +.TP +.B forward_decrypt +.nf +Type: boolean +Default: yes +.fi +.IP +Controls the handling of encrypted messages when forwarding a message. +When set, the outer layer of encryption is stripped off. This +variable is only used if \(lq$mime_forward\(rq is \fIset\fP and +\(lq$mime_forward_decode\(rq is \fIunset\fP. +(PGP only) + + +.TP +.B smime_timeout +.nf +Type: number +Default: 300 +.fi +.IP +The number of seconds after which a cached passphrase will expire if +not used. +(S/MIME only) + + +.TP +.B smime_encrypt_with +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This sets the algorithm that should be used for encryption. +Valid choices are \(rqdes\(rq, \(rqdes3\(rq, \(rqrc2-40\(rq, \(rqrc2-64\(rq, \(rqrc2-128\(rq. +If unset \(rq3des\(rq (TripleDES) is used. +(S/MIME only) + + +.TP +.B smime_keys +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +Since there is no pubring/secring as with PGP, mutt has to handle +storage ad retrieval of keys/certs by itself. This is very basic right now, +and stores keys and certificates in two different directories, both +named as the hash-value retrieved from OpenSSL. There is an index file +which contains mailbox-address keyid pair, and which can be manually +edited. This one points to the location of the private keys. +(S/MIME only) + + +.TP +.B smime_ca_location +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +This variable contains the name of either a directory, or a file which +contains trusted certificates for use with OpenSSL. +(S/MIME only) + + +.TP +.B smime_certificates +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +Since there is no pubring/secring as with PGP, mutt has to handle +storage and retrieval of keys by itself. This is very basic right +now, and keys and certificates are stored in two different +directories, both named as the hash-value retrieved from +OpenSSL. There is an index file which contains mailbox-address +keyid pairs, and which can be manually edited. This one points to +the location of the certificates. +(S/MIME only) + + +.TP +.B smime_decrypt_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This format string specifies a command which is used to decrypt +application/x-pkcs7-mime attachments. +.IP +The OpenSSL command formats have their own set of printf-like sequences +similar to PGP's: +.IP + +.RS +.IP %f +Expands to the name of a file containing a message. + +.IP %s +Expands to the name of a file containing the signature part + of a multipart/signed attachment when verifying it. + +.IP %k +The key-pair specified with $smime_default_key + +.IP %c +One or more certificate IDs. + +.IP %a +The algorithm used for encryption. + +.IP %C +CA location: Depending on whether $smime_ca_location + points to a directory or file, this expands to + \(rq-CApath $smime_ca_location\(rq or \(rq-CAfile $smime_ca_location\(rq. + +.RE +.IP +For examples on how to configure these formats, see the smime.rc in +the samples/ subdirectory which has been installed on your system +alongside the documentation. +(S/MIME only) + + +.TP +.B smime_verify_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to verify S/MIME signatures of type multipart/signed. +(S/MIME only) + + +.TP +.B smime_verify_opaque_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to verify S/MIME signatures of type +application/x-pkcs7-mime. +(S/MIME only) + + +.TP +.B smime_sign_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to created S/MIME signatures of type +multipart/signed, which can be read by all mail clients. +(S/MIME only) + + +.TP +.B smime_sign_opaque_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to created S/MIME signatures of type +application/x-pkcs7-signature, which can only be handled by mail +clients supporting the S/MIME extension. +(S/MIME only) + + +.TP +.B smime_encrypt_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to create encrypted S/MIME messages. +(S/MIME only) + + +.TP +.B smime_pk7out_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to extract PKCS7 structures of S/MIME signatures, +in order to extract the public X509 certificate(s). +(S/MIME only) + + +.TP +.B smime_get_cert_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to extract X509 certificates from a PKCS7 structure. +(S/MIME only) + + +.TP +.B smime_get_signer_cert_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to extract only the signers X509 certificate from a S/MIME +signature, so that the certificate's owner may get compared to the email's +'From'-field. +(S/MIME only) + + +.TP +.B smime_import_cert_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to import a certificate via smime_keys. +(S/MIME only) + + +.TP +.B smime_get_cert_email_command +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This command is used to extract the mail address(es) used for storing +X509 certificates, and for verification purposes (to check whether the +certificate was issued for the sender's mailbox). +(S/MIME only) + + +.TP +.B smime_default_key +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This is the default key-pair to use for signing. This must be set to the +keyid (the hash-value that OpenSSL generates) to work properly +(S/MIME only) + + +.TP +.B smtp_auth_username +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Defines the username to use with SMTP AUTH. Setting this variable will +cause mutt to attempt to use SMTP AUTH when sending. + + +.TP +.B smtp_auth_password +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Defines the password to use with SMTP AUTH. If \(lq$smtp_auth_username\(rq +is set, but this variable is not, you will be prompted for a password +when sending. + + +.TP +.B smtp_host +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Defines the SMTP host which will be used to deliver mail, as opposed +to invoking the sendmail binary. Setting this variable overrides the +value of \(lq$sendmail\(rq, and any associated variables. + + +.TP +.B smtp_port +.nf +Type: number +Default: 25 +.fi +.IP +Defines the port that the SMTP host is listening on for mail delivery. +Must be specified as a number. +.IP +Defaults to 25, the standard SMTP port, but RFC 2476-compliant SMTP +servers will probably desire 587, the mail submission port. + + +.TP +.B ssl_starttls +.nf +Type: quadoption +Default: yes +.fi +.IP +If set (the default), mutt will attempt to use STARTTLS on servers +advertising the capability. When unset, mutt will not attempt to +use STARTTLS regardless of the server's capabilities. + + +.TP +.B certificate_file +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +This variable specifies the file where the certificates you trust +are saved. When an unknown certificate is encountered, you are asked +if you accept it or not. If you accept it, the certificate can also +be saved in this file and further connections are automatically +accepted. +.IP +You can also manually add CA certificates in this file. Any server +certificate that is signed with one of these CA certificates are +also automatically accepted. +.IP +Example: set certificate_file=~/.mutt/certificates + + +.TP +.B ssl_usesystemcerts +.nf +Type: boolean +Default: yes +.fi +.IP +If set to \fIyes\fP, mutt will use CA certificates in the +system-wide certificate store when checking if server certificate +is signed by a trusted CA. + + +.TP +.B entropy_file +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +The file which includes random data that is used to initialize SSL +library functions. + + +.TP +.B ssl_use_sslv2 +.nf +Type: boolean +Default: yes +.fi +.IP +This variables specifies whether to attempt to use SSLv2 in the +SSL authentication process. + + +.TP +.B ssl_use_sslv3 +.nf +Type: boolean +Default: yes +.fi +.IP +This variables specifies whether to attempt to use SSLv3 in the +SSL authentication process. + + +.TP +.B ssl_use_tlsv1 +.nf +Type: boolean +Default: yes +.fi +.IP +This variables specifies whether to attempt to use TLSv1 in the +SSL authentication process. + + +.TP +.B pipe_split +.nf +Type: boolean +Default: no +.fi +.IP +Used in connection with the \fIpipe-message\fP command and the \(lqtag- +prefix\(rq operator. If this variable is unset, when piping a list of +tagged messages Mutt will concatenate the messages and will pipe them +as a single folder. When set, Mutt will pipe the messages one by one. +In both cases the messages are piped in the current sorted order, +and the \(lq$pipe_sep\(rq separator is added after each message. + + +.TP +.B pipe_decode +.nf +Type: boolean +Default: no +.fi +.IP +Used in connection with the \fIpipe-message\fP command. When unset, +Mutt will pipe the messages without any preprocessing. When set, Mutt +will weed headers and will attempt to PGP/MIME decode the messages +first. + + +.TP +.B pipe_sep +.nf +Type: string +Default: \(lq\\n\(rq +.fi +.IP +The separator to add between messages when piping a list of tagged +messages to an external Unix command. + + +.TP +.B pop_authenticators +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This is a colon-delimited list of authentication methods mutt may +attempt to use to log in to an POP server, in the order mutt should +try them. Authentication methods are either 'user', 'apop' or any +SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'. +This parameter is case-insensitive. If this parameter is unset +(the default) mutt will try all available methods, in order from +most-secure to least-secure. +.IP +Example: set pop_authenticators=\(rqdigest-md5:apop:user\(rq + + +.TP +.B pop_auth_try_all +.nf +Type: boolean +Default: yes +.fi +.IP +If set, Mutt will try all available methods. When unset, Mutt will +only fall back to other authentication methods if the previous +methods are unavailable. If a method is available but authentication +fails, Mutt will not connect to the POP server. + + +.TP +.B pop_checkinterval +.nf +Type: number +Default: 60 +.fi +.IP +This variable configures how often (in seconds) POP should look for +new mail. + + +.TP +.B pop_delete +.nf +Type: quadoption +Default: ask-no +.fi +.IP +If set, Mutt will delete successfully downloaded messages from the POP +server when using the fetch-mail function. When unset, Mutt will +download messages but also leave them on the POP server. + + +.TP +.B pop_host +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +The name of your POP server for the fetch-mail function. You +can also specify an alternative port, username and password, ie: +.IP +[pop[s]://][username[:password]@]popserver[:port] + + +.TP +.B pop_last +.nf +Type: boolean +Default: no +.fi +.IP +If this variable is set, mutt will try to use the \(rqLAST\(rq POP command +for retrieving only unread messages from the POP server when using +the fetch-mail function. + + +.TP +.B pop_reconnect +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether or not Mutt will try to reconnect to POP server when +connection lost. + + +.TP +.B pop_user +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Your login name on the POP server. +.IP +This variable defaults to your user name on the local machine. + + +.TP +.B pop_pass +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Specifies the password for your POP account. If unset, Mutt will +prompt you for your password when you open POP mailbox. +\fBWarning\fP: you should only use this option when you are on a +fairly secure machine, because the superuser can read your muttrc +even if you are the only one who can read the file. + + +.TP +.B post_indent_string +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Similar to the \(lq$attribution\(rq variable, Mutt will append this +string after the inclusion of a message which is being replied to. + + +.TP +.B post_moderated +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +If set to \fIyes\fP, Mutt will post article to newsgroup that have +not permissions to posting (e.g. moderated). \fBNote:\fP if newsserver +does not support posting to that newsgroup or totally read-only, that +posting will not have an effect. + + +.TP +.B postpone +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether or not messages are saved in the \(lq$postponed\(rq +mailbox when you elect not to send immediately. + + +.TP +.B postponed +.nf +Type: path +Default: \(lq~/postponed\(rq +.fi +.IP +Mutt allows you to indefinitely \(lqpostpone sending a message\(rq which +you are editing. When you choose to postpone a message, Mutt saves it +in the mailbox specified by this variable. Also see the \(lq$postpone\(rq +variable. + + +.TP +.B preconnect +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +If set, a shell command to be executed if mutt fails to establish +a connection to the server. This is useful for setting up secure +connections, e.g. with ssh(1). If the command returns a nonzero +status, mutt gives up opening the server. Example: +.IP +preconnect=\(rqssh -f -q -L 1234:mailhost.net:143 mailhost.net +sleep 20 < /dev/null > /dev/null\(rq +.IP +Mailbox 'foo' on mailhost.net can now be reached +as '{localhost:1234}foo'. +.IP +NOTE: For this example to work, you must be able to log in to the +remote machine without having to enter a password. + + +.TP +.B print +.nf +Type: quadoption +Default: ask-no +.fi +.IP +Controls whether or not Mutt asks for confirmation before printing. +This is useful for people (like me) who accidentally hit \(lqp\(rq often. + + +.TP +.B print_command +.nf +Type: path +Default: \(lqlpr\(rq +.fi +.IP +This specifies the command pipe that should be used to print messages. + + +.TP +.B print_decode +.nf +Type: boolean +Default: yes +.fi +.IP +Used in connection with the print-message command. If this +option is set, the message is decoded before it is passed to the +external command specified by $print_command. If this option +is unset, no processing will be applied to the message when +printing it. The latter setting may be useful if you are using +some advanced printer filter which is able to properly format +e-mail messages for printing. + + +.TP +.B print_split +.nf +Type: boolean +Default: no +.fi +.IP +Used in connection with the print-message command. If this option +is set, the command specified by $print_command is executed once for +each message which is to be printed. If this option is unset, +the command specified by $print_command is executed only once, and +all the messages are concatenated, with a form feed as the message +separator. +.IP +Those who use the \fBenscript\fP(1) program's mail-printing mode will +most likely want to set this option. + + +.TP +.B prompt_after +.nf +Type: boolean +Default: yes +.fi +.IP +If you use an \fIexternal\fP \(lq$pager\(rq, setting this variable will +cause Mutt to prompt you for a command when the pager exits rather +than returning to the index menu. If unset, Mutt will return to the +index menu when the external pager exits. + + +.TP +.B query_command +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +This specifies the command that mutt will use to make external address +queries. The string should contain a %s, which will be substituted +with the query string the user types. See \(lqquery\(rq for more +information. + + +.TP +.B quit +.nf +Type: quadoption +Default: yes +.fi +.IP +This variable controls whether \(lqquit\(rq and \(lqexit\(rq actually quit +from mutt. If it set to yes, they do quit, if it is set to no, they +have no effect, and if it is set to ask-yes or ask-no, you are +prompted for confirmation when you try to quit. + + +.TP +.B quote_empty +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether or not empty lines will be quoted using +\(lqindent_string\(rq. + + +.TP +.B quote_quoted +.nf +Type: boolean +Default: no +.fi +.IP +Controls how quoted lines will be quoted. If set, one quote +character will be added to the end of existing prefix. Otherwise, +quoted lines will be prepended by \(lqindent_string\(rq. + + +.TP +.B quote_regexp +.nf +Type: regular expression +Default: \(lq^([ \\t]*[|>:}#])+\(rq +.fi +.IP +A regular expression used in the internal-pager to determine quoted +sections of text in the body of a message. +.IP +\fBNote:\fP In order to use the \fIquoted\fP\fBx\fP patterns in the +internal pager, you need to set this to a regular expression that +matches \fIexactly\fP the quote characters at the beginning of quoted +lines. + + +.TP +.B read_inc +.nf +Type: number +Default: 10 +.fi +.IP +If set to a value greater than 0, Mutt will display which message it +is currently on when reading a mailbox. The message is printed after +\fIread_inc\fP messages have been read (e.g., if set to 25, Mutt will +print a message when it reads message 25, and then again when it gets +to message 50). This variable is meant to indicate progress when +reading large mailboxes which may take some time. +When set to 0, only a single message will appear before the reading +the mailbox. +.IP +Also see the \(lq$write_inc\(rq variable. + + +.TP +.B read_only +.nf +Type: boolean +Default: no +.fi +.IP +If set, all folders are opened in read-only mode. + + +.TP +.B realname +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +This variable specifies what \(rqreal\(rq or \(rqpersonal\(rq name should be used +when sending messages. +.IP +By default, this is the GECOS field from /etc/passwd. Note that this +variable will \fInot\fP be used when the user has set a real name +in the $from variable. + + +.TP +.B recall +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +Controls whether or not you are prompted to recall postponed messages +when composing a new message. Also see \(lq$postponed\(rq. +.IP +Setting this variable to \(lqyes\(rq is not generally useful, and thus not +recommended. + + +.TP +.B record +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +This specifies the file into which your outgoing messages should be +appended. (This is meant as the primary method for saving a copy of +your messages, but another way to do this is using the \(lqmy_hdr\(rq +command to create a \fIBcc:\fP field with your email address in it.) +.IP +The value of \fI$record\fP is overridden by the \(lq$force_name\(rq and +\(lq$save_name\(rq variables, and the \(lqfcc-hook\(rq command. + + +.TP +.B reply_regexp +.nf +Type: regular expression +Default: \(lq^(re([\\[0-9\\]+])*|aw):[ \\t]*\(rq +.fi +.IP +A regular expression used to recognize reply messages when threading +and replying. The default value corresponds to the English \(rqRe:\(rq and +the German \(rqAw:\(rq. + + +.TP +.B reply_self +.nf +Type: boolean +Default: no +.fi +.IP +If unset and you are replying to a message sent by you, Mutt will +assume that you want to reply to the recipients of that message rather +than to yourself. + + +.TP +.B reply_to +.nf +Type: quadoption +Default: ask-yes +.fi +.IP +If set, Mutt will ask you if you want to use the address listed in the +Reply-To: header field when replying to a message. If you answer no, +it will use the address in the From: header field instead. This +option is useful for reading a mailing list that sets the Reply-To: +header field to the list address and you want to send a private +message to the author of a message. + + +.TP +.B resolve +.nf +Type: boolean +Default: yes +.fi +.IP +When set, the cursor will be automatically advanced to the next +(possibly undeleted) message whenever a command that modifies the +current message is executed. + + +.TP +.B reverse_alias +.nf +Type: boolean +Default: no +.fi +.IP +This variable controls whether or not Mutt will display the \(rqpersonal\(rq +name from your aliases in the index menu if it finds an alias that +matches the message's sender. For example, if you have the following +alias: +.IP + +.IP +.DS +.sp +.ft CR +.nf +alias juser abd30425@somewhere.net (Joe User) + +.fi +.ec +.ft P +.sp +.IP +and then you receive mail which contains the following header: +.IP + +.IP +.DS +.sp +.ft CR +.nf +From: abd30425@somewhere.net + +.fi +.ec +.ft P +.sp +.IP +It would be displayed in the index menu as \(lqJoe User\(rq instead of +\(lqabd30425@somewhere.net.\(rq This is useful when the person's e-mail +address is not human friendly (like CompuServe addresses). + + +.TP +.B reverse_name +.nf +Type: boolean +Default: no +.fi +.IP +It may sometimes arrive that you receive mail to a certain machine, +move the messages to another machine, and reply to some the messages +from there. If this variable is set, the default \fIFrom:\fP line of +the reply messages is built using the address where you received the +messages you are replying to. If the variable is unset, the +\fIFrom:\fP line will use your address on the current machine. + + +.TP +.B reverse_realname +.nf +Type: boolean +Default: yes +.fi +.IP +This variable fine-tunes the behaviour of the reverse_name feature. +When it is set, mutt will use the address from incoming messages as-is, +possibly including eventual real names. When it is unset, mutt will +override any such real names with the setting of the realname variable. + + +.TP +.B rfc2047_parameters +.nf +Type: boolean +Default: no +.fi +.IP +When this variable is set, Mutt will decode RFC-2047-encoded MIME +parameters. You want to set this variable when mutt suggests you +to save attachments to files named like this: +=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?= +.IP +When this variable is set interactively, the change doesn't have +the desired effect before you have changed folders. +.IP +Note that this use of RFC 2047's encoding is explicitly, +prohibited by the standard, but nevertheless encountered in the +wild. +Also note that setting this parameter will \fInot\fP have the effect +that mutt \fIgenerates\fP this kind of encoding. Instead, mutt will +unconditionally use the encoding specified in RFC 2231. + + +.TP +.B save_address +.nf +Type: boolean +Default: no +.fi +.IP +If set, mutt will take the sender's full address when choosing a +default folder for saving a mail. If \(lq$save_name\(rq or \(lq$force_name\(rq +is set too, the selection of the fcc folder will be changed as well. + + +.TP +.B save_empty +.nf +Type: boolean +Default: yes +.fi +.IP +When unset, mailboxes which contain no saved messages will be removed +when closed (the exception is \(lq$spoolfile\(rq which is never removed). +If set, mailboxes are never removed. +.IP +\fBNote:\fP This only applies to mbox and MMDF folders, Mutt does not +delete MH and Maildir directories. + + +.TP +.B save_name +.nf +Type: boolean +Default: no +.fi +.IP +This variable controls how copies of outgoing messages are saved. +When set, a check is made to see if a mailbox specified by the +recipient address exists (this is done by searching for a mailbox in +the \(lq$folder\(rq directory with the \fIusername\fP part of the +recipient address). If the mailbox exists, the outgoing message will +be saved to that mailbox, otherwise the message is saved to the +\(lq$record\(rq mailbox. +.IP +Also see the \(lq$force_name\(rq variable. + + +.TP +.B score +.nf +Type: boolean +Default: yes +.fi +.IP +When this variable is \fIunset\fP, scoring is turned off. This can +be useful to selectively disable scoring for certain folders when the +\(lq$score_threshold_delete\(rq variable and friends are used. + + +.TP +.B score_threshold_delete +.nf +Type: number +Default: -1 +.fi +.IP +Messages which have been assigned a score equal to or lower than the value +of this variable are automatically marked for deletion by mutt. Since +mutt scores are always greater than or equal to zero, the default setting +of this variable will never mark a message for deletion. + + +.TP +.B score_threshold_flag +.nf +Type: number +Default: 9999 +.fi +.IP +Messages which have been assigned a score greater than or equal to this +variable's value are automatically marked \(rqflagged\(rq. + + +.TP +.B score_threshold_read +.nf +Type: number +Default: -1 +.fi +.IP +Messages which have been assigned a score equal to or lower than the value +of this variable are automatically marked as read by mutt. Since +mutt scores are always greater than or equal to zero, the default setting +of this variable will never mark a message read. + + +.TP +.B send_charset +.nf +Type: string +Default: \(lqus-ascii:iso-8859-1:utf-8\(rq +.fi +.IP +A list of character sets for outgoing messages. Mutt will use the +first character set into which the text can be converted exactly. +If your \(lq$charset\(rq is not iso-8859-1 and recipients may not +understand UTF-8, it is advisable to include in the list an +appropriate widely used standard character set (such as +iso-8859-2, koi8-r or iso-2022-jp) either instead of or after +\(rqiso-8859-1\(rq. + + +.TP +.B sendmail +.nf +Type: path +Default: \(lq/sw/sbin/sendmail -oem -oi\(rq +.fi +.IP +Specifies the program and arguments used to deliver mail sent by Mutt. +Mutt expects that the specified program interprets additional +arguments as recipient addresses. + + +.TP +.B sendmail_wait +.nf +Type: number +Default: 0 +.fi +.IP +Specifies the number of seconds to wait for the \(lq$sendmail\(rq process +to finish before giving up and putting delivery in the background. +.IP +Mutt interprets the value of this variable as follows: + +.RS +.IP >0 +number of seconds to wait for sendmail to finish before continuing + +.IP 0 +wait forever for sendmail to finish + +.IP <0 +always put sendmail in the background without waiting + +.RE +.IP +Note that if you specify a value other than 0, the output of the child +process will be put in a temporary file. If there is some error, you +will be informed as to where to find the output. + + +.TP +.B shell +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +Command to use when spawning a subshell. By default, the user's login +shell from /etc/passwd is used. + + +.TP +.B save_unsubscribed +.nf +Type: boolean +Default: no +.fi +.IP +When \fIset\fP, info about unsubscribed newsgroups will be saved into +\(lqnewsrc\(rq file and into cache. + + +.TP +.B show_new_news +.nf +Type: boolean +Default: yes +.fi +.IP +If \fIset\fP, newsserver will be asked for new newsgroups on entering +the browser. Otherwise, it will be done only once for a newsserver. +Also controls whether or not number of new articles of subscribed +newsgroups will be then checked. + + +.TP +.B show_only_unread +.nf +Type: boolean +Default: no +.fi +.IP +If \fIset\fP, only subscribed newsgroups that contain unread articles +will be displayed in browser. + + +.TP +.B sig_dashes +.nf +Type: boolean +Default: yes +.fi +.IP +If set, a line containing \(lq-- \(rq will be inserted before your +\(lq$signature\(rq. It is \fBstrongly\fP recommended that you not unset +this variable unless your \(lqsignature\(rq contains just your name. The +reason for this is because many software packages use \(lq-- \\n\(rq to +detect your signature. For example, Mutt has the ability to highlight +the signature in a different color in the builtin pager. + + +.TP +.B sig_on_top +.nf +Type: boolean +Default: no +.fi +.IP +If set, the signature will be included before any quoted or forwarded +text. It is \fBstrongly\fP recommended that you do not set this variable +unless you really know what you are doing, and are prepared to take +some heat from netiquette guardians. + + +.TP +.B signature +.nf +Type: path +Default: \(lq~/.signature\(rq +.fi +.IP +Specifies the filename of your signature, which is appended to all +outgoing messages. If the filename ends with a pipe (\(lq|\(rq), it is +assumed that filename is a shell command and input should be read from +its stdout. + + +.TP +.B simple_search +.nf +Type: string +Default: \(lq~f %s | ~s %s\(rq +.fi +.IP +Specifies how Mutt should expand a simple search into a real search +pattern. A simple search is one that does not contain any of the ~ +operators. See \(lqpatterns\(rq for more information on search patterns. +.IP +For example, if you simply type joe at a search or limit prompt, Mutt +will automatically expand it to the value specified by this variable. +For the default value it would be: +.IP +~f joe | ~s joe + + +.TP +.B smart_wrap +.nf +Type: boolean +Default: yes +.fi +.IP +Controls the display of lines longer than the screen width in the +internal pager. If set, long lines are wrapped at a word boundary. If +unset, lines are simply wrapped at the screen edge. Also see the +\(lq$markers\(rq variable. + + +.TP +.B smileys +.nf +Type: regular expression +Default: \(lq(>From )|(:[-^]?[][)(><}{|/DP])\(rq +.fi +.IP +The \fIpager\fP uses this variable to catch some common false +positives of \(lq$quote_regexp\(rq, most notably smileys in the beginning +of a line + + +.TP +.B sleep_time +.nf +Type: number +Default: 1 +.fi +.IP +Specifies time, in seconds, to pause while displaying certain informational +messages, while moving from folder to folder and after expunging +messages from the current folder. The default is to pause one second, so +a value of zero for this option suppresses the pause. + + +.TP +.B sort +.nf +Type: sort order +Default: date +.fi +.IP +Specifies how to sort messages in the \fIindex\fP menu. Valid values +are: +.IP + +.IP +.DS +.sp +.ft CR +.nf + date or date-sent + date-received + from + mailbox-order (unsorted) + score + size + subject + threads + to + +.fi +.ec +.ft P +.sp +.IP +You may optionally use the reverse- prefix to specify reverse sorting +order (example: set sort=reverse-date-sent). + + +.TP +.B sort_alias +.nf +Type: sort order +Default: alias +.fi +.IP +Specifies how the entries in the `alias' menu are sorted. The +following are legal values: +.IP + +.IP +.DS +.sp +.ft CR +.nf + address (sort alphabetically by email address) + alias (sort alphabetically by alias name) + unsorted (leave in order specified in .muttrc) + +.fi +.ec +.ft P +.sp + + +.TP +.B sort_aux +.nf +Type: sort order +Default: date +.fi +.IP +When sorting by threads, this variable controls how threads are sorted +in relation to other threads, and how the branches of the thread trees +are sorted. This can be set to any value that \(lq$sort\(rq can, except +threads (in that case, mutt will just use date-sent). You can also +specify the last- prefix in addition to the reverse- prefix, but last- +must come after reverse-. The last- prefix causes messages to be +sorted against its siblings by which has the last descendant, using +the rest of sort_aux as an ordering. For instance, set sort_aux=last- +date-received would mean that if a new message is received in a +thread, that thread becomes the last one displayed (or the first, if +you have set sort=reverse-threads.) Note: For reversed \(lq$sort\(rq +order $sort_aux is reversed again (which is not the right thing to do, +but kept to not break any existing configuration setting). + + +.TP +.B sort_browser +.nf +Type: sort order +Default: subject +.fi +.IP +Specifies how to sort entries in the file browser. By default, the +entries are sorted alphabetically. Valid values: +.IP + +.IP +.DS +.sp +.ft CR +.nf + alpha (alphabetically) + date + size + unsorted + +.fi +.ec +.ft P +.sp +.IP +You may optionally use the reverse- prefix to specify reverse sorting +order (example: set sort_browser=reverse-date). + + +.TP +.B sort_re +.nf +Type: boolean +Default: yes +.fi +.IP +This variable is only useful when sorting by threads with +\(lq$strict_threads\(rq unset. In that case, it changes the heuristic +mutt uses to thread messages by subject. With sort_re set, mutt will +only attach a message as the child of another message by subject if +the subject of the child message starts with a substring matching the +setting of \(lq$reply_regexp\(rq. With sort_re unset, mutt will attach +the message whether or not this is the case, as long as the +non-\(lq$reply_regexp\(rq parts of both messages are identical. + + +.TP +.B spoolfile +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +If your spool mailbox is in a non-default place where Mutt cannot find +it, you can specify its location with this variable. Mutt will +automatically set this variable to the value of the environment +variable $MAIL if it is not set. + + +.TP +.B status_chars +.nf +Type: string +Default: \(lq-*%A\(rq +.fi +.IP +Controls the characters used by the \(rq%r\(rq indicator in +\(lq$status_format\(rq. The first character is used when the mailbox is +unchanged. The second is used when the mailbox has been changed, and +it needs to be resynchronized. The third is used if the mailbox is in +read-only mode, or if the mailbox will not be written when exiting +that mailbox (You can toggle whether to write changes to a mailbox +with the toggle-write operation, bound by default to \(rq%\(rq). The fourth +is used to indicate that the current folder has been opened in attach- +message mode (Certain operations like composing a new mail, replying, +forwarding, etc. are not permitted in this mode). + + +.TP +.B status_format +.nf +Type: string +Default: \(lq-%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)---\(rq +.fi +.IP +Controls the format of the status line displayed in the \fIindex\fP +menu. This string is similar to \(lq$index_format\(rq, but has its own +set of printf()-like sequences: +.IP + +.RS +.IP %b +number of mailboxes with new mail * + +.IP %d +number of deleted messages * + +.IP %f +the full pathname of the current mailbox + +.IP %F +number of flagged messages * + +.IP %h +local hostname + +.IP %l +size (in bytes) of the current mailbox * + +.IP %L +size (in bytes) of the messages shown +(i.e., which match the current limit) * + +.IP %m +the number of messages in the mailbox * + +.IP %M +the number of messages shown (i.e., which match the current limit) * + +.IP %n +number of new messages in the mailbox * + +.IP %o +number of old unread messages + +.IP %p +number of postponed messages * + +.IP %P +percentage of the way through the index + +.IP %r +modified/read-only/won't-write/attach-message indicator, +according to $status_chars + +.IP %s +current sorting mode ($sort) + +.IP %S +current aux sorting method ($sort_aux) + +.IP %t +number of tagged messages * + +.IP %u +number of unread messages * + +.IP %v +Mutt version string + +.IP %V +currently active limit pattern, if any * + +.IP %>X +right justify the rest of the string and pad with \(rqX\(rq + +.IP %|X +pad to the end of the line with \(rqX\(rq + +.RE +.IP +* = can be optionally printed if nonzero +.IP +Some of the above sequences can be used to optionally print a string +if their value is nonzero. For example, you may only want to see the +number of flagged messages if such messages exist, since zero is not +particularly meaningful. To optionally print a string based upon one +of the above sequences, the following construct is used +.IP +%?<sequence_char>?<optional_string>? +.IP +where \fIsequence_char\fP is a character from the table above, and +\fIoptional_string\fP is the string you would like printed if +\fIstatus_char\fP is nonzero. \fIoptional_string\fP \fBmay\fP contain +other sequence as well as normal text, but you may \fBnot\fP nest +optional strings. +.IP +Here is an example illustrating how to optionally print the number of +new messages in a mailbox: +%?n?%n new messages.? +.IP +Additionally you can switch between two strings, the first one, if a +value is zero, the second one, if the value is nonzero, by using the +following construct: +%?<sequence_char>?<if_string>&<else_string>? +.IP +You can additionally force the result of any printf-like sequence to +be lowercase by prefixing the sequence character with an underscore +(_) sign. For example, if you want to display the local hostname in +lowercase, you would use: +%_h +.IP +If you prefix the sequence character with a colon (:) character, mutt +will replace any dots in the expansion by underscores. This might be helpful +with IMAP folders that don't like dots in folder names. + + +.TP +.B status_on_top +.nf +Type: boolean +Default: no +.fi +.IP +Setting this variable causes the \(lqstatus bar\(rq to be displayed on +the first line of the screen rather than near the bottom. + + +.TP +.B strict_threads +.nf +Type: boolean +Default: no +.fi +.IP +If set, threading will only make use of the \(lqIn-Reply-To\(rq and +\(lqReferences\(rq fields when you \(lq$sort\(rq by message threads. By +default, messages with the same subject are grouped together in +\(lqpseudo threads.\(rq This may not always be desirable, such as in a +personal mailbox where you might have several unrelated messages with +the subject \(lqhi\(rq which will get grouped together. + + +.TP +.B suspend +.nf +Type: boolean +Default: yes +.fi +.IP +When \fIunset\fP, mutt won't stop when the user presses the terminal's +\fIsusp\fP key, usually \(lqcontrol-Z\(rq. This is useful if you run mutt +inside an xterm using a command like xterm -e mutt. + + +.TP +.B text_flowed +.nf +Type: boolean +Default: no +.fi +.IP +When set, mutt will generate text/plain; format=flowed attachments. +This format is easier to handle for some mailing software, and generally +just looks like ordinary text. To actually make use of this format's +features, you'll need support in your editor. +.IP +Note that $indent_string is ignored when this option is set. + + +.TP +.B thread_received +.nf +Type: boolean +Default: no +.fi +.IP +When set, mutt uses the date received rather than the date sent +to thread messages by subject. + + +.TP +.B thorough_search +.nf +Type: boolean +Default: no +.fi +.IP +Affects the \fI~b\fP and \fI~h\fP search operations described in +section \(lqpatterns\(rq above. If set, the headers and attachments of +messages to be searched are decoded before searching. If unset, +messages are searched as they appear in the folder. + + +.TP +.B tilde +.nf +Type: boolean +Default: no +.fi +.IP +When set, the internal-pager will pad blank lines to the bottom of the +screen with a tilde (~). + + +.TP +.B timeout +.nf +Type: number +Default: 600 +.fi +.IP +This variable controls the \fInumber of seconds\fP Mutt will wait +for a key to be pressed in the main menu before timing out and +checking for new mail. A value of zero or less will cause Mutt +to never time out. + + +.TP +.B tmpdir +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +This variable allows you to specify where Mutt will place its +temporary files needed for displaying and composing messages. If +this variable is not set, the environment variable TMPDIR is +used. If TMPDIR is not set then \(rq/tmp\(rq is used. + + +.TP +.B to_chars +.nf +Type: string +Default: \(lq +TCFL\(rq +.fi +.IP +Controls the character used to indicate mail addressed to you. The +first character is the one used when the mail is NOT addressed to your +address (default: space). The second is used when you are the only +recipient of the message (default: +). The third is when your address +appears in the TO header field, but you are not the only recipient of +the message (default: T). The fourth character is used when your +address is specified in the CC header field, but you are not the only +recipient. The fifth character is used to indicate mail that was sent +by \fIyou\fP. The sixth character is used to indicate when a mail +was sent to a mailing-list you subscribe to (default: L). + + +.TP +.B trash +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +If set, this variable specifies the path of the trash folder where the +mails marked for deletion will be moved, instead of being irremediably +purged. +.IP +NOTE: When you delete a message in the trash folder, it is really +deleted, so that you have a way to clean the trash. + + +.TP +.B tunnel +.nf +Type: string +Default: \(lq\(rq +.fi +.IP +Setting this variable will cause mutt to open a pipe to a command +instead of a raw socket. You may be able to use this to set up +preauthenticated connections to your IMAP/POP3 server. Example: +.IP +tunnel=\(rqssh -q mailhost.net /usr/local/libexec/imapd\(rq +.IP +NOTE: For this example to work you must be able to log in to the remote +machine without having to enter a password. + + +.TP +.B use_8bitmime +.nf +Type: boolean +Default: no +.fi +.IP +\fBWarning:\fP do not set this variable unless you are using a version +of sendmail which supports the -B8BITMIME flag (such as sendmail +8.8.x) or you may not be able to send mail. +.IP +When \fIset\fP, Mutt will invoke \(lq$sendmail\(rq with the -B8BITMIME +flag when sending 8-bit messages to enable ESMTP negotiation. + + +.TP +.B use_domain +.nf +Type: boolean +Default: yes +.fi +.IP +When set, Mutt will qualify all local addresses (ones without the +@host portion) with the value of \(lq$hostname\(rq. If \fIunset\fP, no +addresses will be qualified. + + +.TP +.B use_from +.nf +Type: boolean +Default: yes +.fi +.IP +When \fIset\fP, Mutt will generate the `From:' header field when +sending messages. If \fIunset\fP, no `From:' header field will be +generated unless the user explicitly sets one using the \(lqmy_hdr\(rq +command. + + +.TP +.B use_ipv6 +.nf +Type: boolean +Default: yes +.fi +.IP +When \fIset\fP, Mutt will look for IPv6 addresses of hosts it tries to +contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. +Normally, the default should work. + + +.TP +.B user_agent +.nf +Type: boolean +Default: yes +.fi +.IP +When \fIset\fP, mutt will add a \(rqUser-Agent\(rq header to outgoing +messages, indicating which version of mutt was used for composing +them. + + +.TP +.B visual +.nf +Type: path +Default: \(lq\(rq +.fi +.IP +Specifies the visual editor to invoke when the \fI~v\fP command is +given in the builtin editor. + + +.TP +.B wait_key +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether Mutt will ask you to press a key after \fIshell- +escape\fP, \fIpipe-message\fP, \fIpipe-entry\fP, \fIprint-message\fP, +and \fIprint-entry\fP commands. +.IP +It is also used when viewing attachments with \(lqauto_view\(rq, provided +that the corresponding mailcap entry has a \fIneedsterminal\fP flag, +and the external program is interactive. +.IP +When set, Mutt will always ask for a key. When unset, Mutt will wait +for a key only if the external command returned a non-zero status. + + +.TP +.B weed +.nf +Type: boolean +Default: yes +.fi +.IP +When set, mutt will weed headers when when displaying, forwarding, +printing, or replying to messages. + + +.TP +.B wrap_search +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether searches wrap around the end of the mailbox. +.IP +When set, searches will wrap around the first (or last) message. When +unset, searches will not wrap. + + +.TP +.B wrapmargin +.nf +Type: number +Default: 0 +.fi +.IP +Controls the size of the margin remaining at the right side of +the terminal when mutt's pager does smart wrapping. + + +.TP +.B write_inc +.nf +Type: number +Default: 10 +.fi +.IP +When writing a mailbox, a message will be printed every +\fIwrite_inc\fP messages to indicate progress. If set to 0, only a +single message will be displayed before writing a mailbox. +.IP +Also see the \(lq$read_inc\(rq variable. + + +.TP +.B write_bcc +.nf +Type: boolean +Default: yes +.fi +.IP +Controls whether mutt writes out the Bcc header when preparing +messages to be sent. Exim users may wish to use this. + + +.TP +.B x_comment_to +.nf +Type: boolean +Default: no +.fi +.IP +If \fIset\fP, Mutt will add \(lqX-Comment-To:\(rq field (that contains full +name of original article author) to article that followuped to newsgroup. + + +.\" -*-nroff-*- +.SH SEE ALSO +.PP +.BR iconv (1), +.BR iconv (3), +.BR mailcap (5), +.BR maildir (5), +.BR mbox (5), +.BR mutt (1), +.BR printf (3), +.BR regex (7), +.BR strftime (3) +.PP +The Mutt Manual +.PP +The Mutt home page: http://www.mutt.org/ +.SH AUTHOR +.PP +Michael Elkins, and others. Use <mutt-dev@mutt.org> to contact +the developers. diff --git a/doc/muttrc.man.head b/doc/muttrc.man.head new file mode 100644 index 0000000..5e9350a --- /dev/null +++ b/doc/muttrc.man.head @@ -0,0 +1,487 @@ +'\" t +.\" -*-nroff-*- +.\" +.\" Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu> +.\" Copyright (C) 1999-2000 Thomas Roessler <roessler@guug.de> +.\" +.\" 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +.\" +.TH muttrc 5 "September 2002" Unix "User Manuals" +.SH NAME +muttrc \- Configuration file for the Mutt Mail User Agent +.SH DESCRIPTION +.PP +A mutt configuration file consists of a series of \(lqcommands\(rq. +Each line of the file may contain one or more commands. When +multiple commands are used, they must be separated by a semicolon +(\(lq\fB;\fP\(rq). +.PP +The hash mark, or pound sign (\(lq\fB#\fP\(rq), is used as a +\(lqcomment\(rq character. You can use it to annotate your +initialization file. All text after the comment character to the end +of the line is ignored. +.PP +Single quotes (\(lq\fB'\fP\(rq) and double quotes (\(lq\fB"\fP\(rq) +can be used to quote strings which contain spaces or other special +characters. The difference between the two types of quotes is +similar to that of many popular shell programs, namely that a single +quote is used to specify a literal string (one that is not +interpreted for shell variables or quoting with a backslash [see +next paragraph]), while double quotes indicate a string for which +should be evaluated. For example, backtics are evaluated inside of +double quotes, but not for single quotes. +.PP +\fB\(rs\fP quotes the next character, just as in shells such as bash and zsh. +For example, if want to put quotes (\(lq\fB"\fP\(rq) inside of a +string, you can use \(lq\fB\(rs\fP\(rq to force the next character +to be a literal instead of interpreted character. +.PP +\(lq\fB\(rs\(rs\fP\(rq means to insert a literal \(lq\fB\(rs\fP\(rq into the +line. \(lq\fB\(rsn\fP\(rq and \(lq\fB\(rsr\fP\(rq have their usual +C meanings of linefeed and carriage-return, respectively. +.PP +A \(lq\fB\(rs\fP\(rq at the end of a line can be used to split commands over +multiple lines, provided that the split points don't appear in the +middle of command names. +.PP +It is also possible to substitute the output of a Unix command in an +initialization file. This is accomplished by enclosing the command +in backquotes (\fB`\fP\fIcommand\fP\fB`\fP). +.PP +UNIX environments can be accessed like the way it is done in shells +like sh and bash: Prepend the name of the environment by a dollar +(\(lq\fB\(Do\fP\(rq) sign. +.PP +.SH COMMANDS +.PP +.nf +\fBalias\fP \fIkey\fP \fIaddress\fP [\fB,\fP \fIaddress\fP [ ... ]] +\fBunalias\fP [\fB * \fP | \fIkey\fP ] +.fi +.IP +\fBalias\fP defines an alias \fIkey\fP for the given addresses. +\fBunalias\fP removes the alias corresponding to the given \fIkey\fP or +all aliases when \(lq\fB*\fP\(rq is used as an argument. +.PP +.nf +\fBalternates\fP \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]] +\fBunalternates\fP [\fB * \fP | \fIregexp\fP [ \fB,\fP \fIregexp\fP [ ... ]] ] +.fi +.IP +\fBalternates\fP is used to inform mutt about alternate addresses +where you receive mail; you can use regular expressions to specify +alternate addresses. This affects mutt's idea about messages +from you, and messages addressed to you. \fBunalternates\fP removes +a regular expression from the list of known alternates. +.PP +.nf +\fBalternative_order\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +\fBunalternative_order\fP [\fB * \fP | \fItype\fP/\fIsubtype\fP] [...] +.fi +.IP +\fBalternative_order\fP command permits you to define an order of preference which is +used by mutt to determine which part of a +\fBmultipart/alternative\fP body to display. +A subtype of \(lq\fB*\fP\(rq matches any subtype, as does an empty +subtype. \fBunalternative_order\fP removes entries from the +ordered list or deletes the entire list when \(lq\fB*\fP\(rq is used +as an argument. +.PP +.nf +\fBauto_view\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +\fBunauto_view\fP \fItype\fP[fB/\fP\fIsubtype\fP] [ ... ] +.fi +.IP +This commands permits you to specify that mutt should automatically +convert the given MIME types to text/plain when displaying messages. +For this to work, there must be a +.BR mailcap (5) +entry for the given MIME type with the +.B copiousoutput +flag set. A subtype of \(lq\fB*\fP\(rq +matches any subtype, as does an empty subtype. +.PP +.nf +\fBmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +\fBunmime_lookup\fP \fItype\fP[\fB/\fP\fIsubtype\fP] [ ... ] +.fi +.IP +This command permits you to define a list of "data" MIME content +types for which mutt will try to determine the actual file type from +the file name, and not use a +.BR mailcap (5) +entry given for the original MIME type. For instance, you may add +the \fBapplication/octet-stream\fP MIME type to this list. +.TP +\fBbind\fP \fImap\fP \fIkey\fP \fIfunction\fP +This command binds the given \fIkey\fP for the given \fImap\fP to +the given \fIfunction\fP. +.IP +Valid maps are: +.BR generic ", " alias ", " attach ", " +.BR browser ", " editor ", " +.BR index ", " compose ", " +.BR pager ", " pgp ", " postpone ", " +.BR mix . +.IP +For more information on keys and functions, please consult the Mutt +Manual. +.TP +\fBaccount-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP +This hook is executed whenever you access a remote mailbox. Useful +to adjust configuration settings to different IMAP or POP servers. +.TP +\fBcharset-hook\fP \fIalias\fP \fIcharset\fP +This command defines an alias for a character set. This is useful +to properly display messages which are tagged with a character set +name not known to mutt. +.TP +\fBiconv-hook\fP \fIcharset\fP \fIlocal-charset\fP +This command defines a system-specific name for a character set. +This is useful when your system's +.BR iconv (3) +implementation does not understand MIME character set names (such as +.BR iso-8859-1 ), +but instead insists on being fed with implementation-specific +character set names (such as +.BR 8859-1 ). +In this specific case, you'd put this into your configuration file: +.IP +.B "iconv-hook iso-8859-1 8859-1" +.TP +\fBmessage-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP +Before mutt displays (or formats for replying or forwarding) a +message which matches the given \fIpattern\fP (or, when it is +preceded by an exclamation mark, does not match the \fIpattern\fP), +the given \fIcommand\fP is executed. When multiple +\fBmessage-hook\fPs match, they are executed in the order in +which they occur in the configuration file. +.TP +\fBfolder-hook\fP [\fB!\fP]\fIregexp\fP \fIcommand\fP +When mutt enters a folder which matches \fIregexp\fP (or, when +\fIregexp\fP is preceded by an exclamation mark, does not match +\fIregexp\fP), the given \fIcommand\fP is executed. +.IP +When several \fBfolder-hook\fPs match a given mail folder, they are +executed in the order given in the configuration file. +.TP +\fBmacro\fP \fImap\fP \fIkey\fP \fIsequence\fP [ \fIdescription\fP ] +This command binds the given \fIsequence\fP of keys to the given +\fIkey\fP in the given \fImap\fP. For valid maps, see \fBbind\fP. +.PP +.nf +\fBcolor\fP \fIobject\fP \fIforeground\fP \fIbackground\fP [ \fI regexp\fP ] +\fBcolor\fP index \fIforeground\fP \fIbackground\fP [ \fI pattern\fP ] +\fBuncolor\fP index \fIpattern\fP [ \fIpattern\fP ... ] +.fi +.IP +If your terminal supports color, these commands can be used to +assign \fIforeground\fP/\fIbackgound\fP combinations to certain +objects. Valid objects are: +.BR attachment ", " body ", " bold ", " header ", " +.BR hdrdefault ", " index ", " indicator ", " markers ", " +.BR message ", " normal ", " quoted ", " quoted\fIN\fP ", " +.BR search ", " signature ", " status ", " tilde ", " tree ", " +.BR underline . +The +.BR body " and " header +objects allow you to restrict the colorization to a regular +expression. The \fBindex\fP object permits you to select colored +messages by pattern. +.IP +Valid colors include: +.BR white ", " black ", " green ", " magenta ", " blue ", " +.BR cyan ", " yellow ", " red ", " default ", " color\fIN\fP . +.PP +.nf +\fBmono\fP \fIobject\fP \fIattribute\fP [ \fIregexp\fP ] +\fBmono\fP index \fIattribute\fP [ \fIpattern\fP ] +.fi +.IP +For terminals which don't support color, you can still assign +attributes to objects. Valid attributes include: +.BR none ", " bold ", " underline ", " +.BR reverse ", and " standout . +.TP +[\fBun\fP]\fBignore\fP \fIpattern\fP [ \fIpattern\fP ... ] +The \fBignore\fP command permits you to specify header fields which +you usually don't wish to see. Any header field whose tag +\fIbegins\fP with an \(lqignored\(rq pattern will be ignored. +.IP +The \fBunignore\fP command permits you to define exceptions from +the above mentioned list of ignored headers. +.PP +.nf +\fBlists\fP \fIregexp\fP [ \fIregexp\fP ... ] +\fBunlists\fP \fIregexp\fP [ \fIregexp\fP ... ] +\fBsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ] +\fBunsubscribe\fP \fIregexp\fP [ \fIregexp\fP ... ] +.fi +.IP +Mutt maintains two lists of mailing list address patterns, a list of +subscribed mailing lists, and a list of known mailing lists. All +subscribed mailing lists are known. Patterns use regular expressions. +.IP +The \fBlists\fP command adds a mailing list address to the list of +known mailing lists. The \fBunlists\fP command removes a mailing +list from the lists of known and subscribed mailing lists. The +\fBsubscribe\fP command adds a mailing list to the lists of known +and subscribed mailing lists. The \fBunsubscribe\fP command removes +it from the list of subscribed mailing lists. +.TP +\fBmbox-hook\fP [\fB!\fP]\fIpattern\fP \fImailbox\fP +When mutt changes to a mail folder which matches \fIpattern\fP, +\fImailbox\fP will be used as the \(lqmbox\(rq folder, i.e., read +messages will be moved to that folder when the mail folder is left. +.IP +The first matching \fBmbox-hook\fP applies. +.PP +.nf +\fBmailboxes\fP \fIfilename\fP [ \fIfilename\fP ... ] +\fBunmailboxes\fP [ \fB*\fP | \fIfilename\fP ... ] +.fi +.IP +The \fBmailboxes\fP specifies folders which can receive mail and which will +be checked for new messages. When changing folders, pressing space +will cycle through folders with new mail. The \fBunmailboxes\fP +command is used to remove a file name from the list of folders which +can receive mail. If "\fB*\fP" is specified as the file name, the +list is emptied. +.PP +.nf +\fBmy_hdr\fP \fIstring\fP +\fBunmy_hdr\fP \fIfield\fP +.fi +.IP +Using \fBmy_hdr\fP, you can define headers which will be added to +the messages you compose. \fBunmy_hdr\fP will remove the given +user-defined headers. +.TP +\fBhdr_order\fP \fIheader1\fP \fIheader2\fP [ ... ] +With this command, you can specify an order in which mutt will +attempt to present headers to you when viewing messages. +.TP +\fBsave-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP +When a message matches \fIpattern\fP, the default file name when +saving it will be the given \fIfilename\fP. +.TP +\fBfcc-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP +When an outgoing message matches \fIpattern\fP, the default file +name for storing a copy (fcc) will be the given \fIfilename\fP. +.TP +\fBfcc-save-hook\fP [\fB!\fP]\fIpattern\fP \fIfilename\fP +This command is an abbreviation for identical \fBfcc-hook\fP and +\fBsave-hook\fP commands. +.TP +\fBsend-hook\fP [\fB!\fP]\fIpattern\fP \fIcommand\fP +When composing a message matching \fIpattern\fP, \fIcommand\fP is +executed. When multiple \fBsend-hook\fPs match, they are executed +in the order in which they occur in the configuration file. +.TP +\fBcrypt-hook\fP \fIpattern\fP \fIkey-id\fP +The crypt-hook command provides a method by which you can +specify the ID of the public key to be used when encrypting messages +to a certain recipient. The meaning of "key ID" is to be taken +broadly: This can be a different e-mail address, a numerical key ID, +or even just an arbitrary search string. +.TP +\fBpush\fP \fIstring\fP +This command adds the named \fIstring\fP to the keyboard buffer. +.PP +.nf +\fBset\fP [\fBno\fP|\fBinv\fP]\fIvariable\fP[=\fIvalue\fP] [ ... ] +\fBtoggle\fP \fIvariable\fP [ ... ] +\fBunset\fP \fIvariable\fP [ ... ] +\fBreset\fP \fIvariable\fP [ ... ] +.fi +.IP +These commands are used to set and manipulate configuration +varibles. +.IP +Mutt knows four basic types of variables: boolean, number, string +and quadoption. Boolean variables can be \fBset\fP (true), +\fBunset\fP (false), or \fBtoggle\fPd. Number variables can be assigned +a positive integer value. +.IP +String variables consist of any number of printable characters. +Strings must be enclosed in quotes if they contain spaces or tabs. +You may also use the \(lqC\(rq escape sequences \fB\\n\fP and +\fB\\t\fP for newline and tab, respectively. +.IP +Quadoption variables are used to control whether or not to be +prompted for certain actions, or to specify a default action. A +value of \fByes\fP will cause the action to be carried out automatically +as if you had answered yes to the question. Similarly, a value of +\fBno\fP will cause the the action to be carried out as if you had +answered \(lqno.\(rq A value of \fBask-yes\fP will cause a prompt +with a default answer of \(lqyes\(rq and \fBask-no\fP will provide a +default answer of \(lqno.\(rq +.IP +The \fBreset\fP command resets all given variables to the compile +time defaults. If you reset the special variabe \fBall\fP, all +variables will reset to their system defaults. +.TP +\fBsource\fP \fIfilename\fP +The given file will be evaluated as a configuration file. +.TP +\fBunhook\fP [\fB * \fP | \fIhook-type\fP ] +This command will remove all hooks of a given type, or all hooks +when \(lq\fB*\fP\(rq is used as an argument. \fIhook-type\fP +can be any of the \fB-hook\fP commands documented above. +.SH PATTERNS +.PP +In various places with mutt, including some of the abovementioned +\fBhook\fP commands, you can specify patterns to match messages. +.SS Constructing Patterns +.PP +A simple pattern consists of an operator of the form +\(lq\fB~\fP\fIcharacter\fP\(rq, possibly followed by a parameter +against which mutt is supposed to match the object specified by +this operator. (For a list of operators, see below.) +.PP +With some of these operators, the object to be matched consists of +several e-mail addresses. In these cases, the object is matched if +at least one of these e-mail addresses matches. You can prepend a +hat (\(lq\fB^\fP\(rq) character to such a pattern to indicate that +\fIall\fP addresses must match in order to match the object. +.PP +You can construct complex patterns by combining simple patterns with +logical operators. Logical AND is specified by simply concatenating +two simple patterns, for instance \(lq~C mutt-dev ~s bug\(rq. +Logical OR is specified by inserting a vertical bar (\(lq\fB|\fP\(rq) +between two patterns, for instance \(lq~C mutt-dev | ~s bug\(rq. +Additionally, you can negate a pattern by prepending a bang +(\(lq\fB!\fP\(rq) character. For logical grouping, use braces +(\(lq()\(rq). Example: \(lq!(~t mutt|~c mutt) ~f elkins\(rq. +.SS Simple Patterns +.PP +Mutt understands the following simple patterns: +.PP +.TS +l l. +~A all messages +~b \fIEXPR\fP messages which contain \fIEXPR\fP in the message body +~B \fIEXPR\fP messages which contain \fIEXPR\fP in the whole message +~c \fIEXPR\fP messages carbon-copied to \fIEXPR\fP +~C \fIEXPR\fP message is either to: or cc: \fIEXPR\fP +~D deleted messages +~d \fIMIN\fP-\fIMAX\fP messages with \(lqdate-sent\(rq in a Date range +~E expired messages +~e \fIEXPR\fP message which contains \fIEXPR\fP in the \(lqSender\(rq field +~F flagged messages +~f \fIEXPR\fP messages originating from \fIEXPR\fP +~g PGP signed messages +~G PGP encrypted messages +~h \fIEXPR\fP messages which contain \fIEXPR\fP in the message header +~k message contains PGP key material +~i \fIEXPR\fP message which match \fIEXPR\fP in the \(lqMessage-ID\(rq field +~L \fIEXPR\fP message is either originated or received by \fIEXPR\fP +~l message is addressed to a known mailing list +~m \fIMIN\fP-\fIMAX\fP message in the range \fIMIN\fP to \fIMAX\fP +~n \fIMIN\fP-\fIMAX\fP messages with a score in the range \fIMIN\fP to \fIMAX\fP +~N new messages +~O old messages +~p message is addressed to you (consults $alternates) +~P message is from you (consults $alternates) +~Q messages which have been replied to +~R read messages +~r \fIMIN\fP-\fIMAX\fP messages with \(lqdate-received\(rq in a Date range +~S superseded messages +~s \fIEXPR\fP messages having \fIEXPR\fP in the \(lqSubject\(rq field. +~T tagged messages +~t \fIEXPR\fP messages addressed to \fIEXPR\fP +~U unread messages +~v message is part of a collapsed thread. +~x \fIEXPR\fP messages which contain \fIEXPR\fP in the \(lqReferences\(rq field +~z \fIMIN\fP-\fIMAX\fP messages with a size in the range \fIMIN\fP to \fIMAX\fP +~= duplicated messages (see $duplicate_threads) +.TE +.PP +In the above, \fIEXPR\fP is a regular expression. +.PP +With the \fB~m\fP, \fB~n\fP, and \fB~z\fP operators, you can also +specify ranges in the forms \fB<\fP\fIMAX\fP, \fB>\fP\fIMIN\fP, +\fIMIN\fP\fB-\fP, and \fB-\fP\fIMAX\fP. +.SS Matching dates +.PP +The \fB~d\fP and \fB~r\fP operators are used to match date ranges, +which are interpreted to be given in your local time zone. +.PP +A date is of the form +\fIDD\fP[\fB/\fP\fIMM\fP[\fB/\fP[\fIcc\fP]\fIYY\fP]], that is, a +two-digit date, optionally followed by a two-digit month, optionally +followed by a year specifications. Omitted fields default to the +current month and year. +.PP +Mutt understands either two or four digit year specifications. When +given a two-digit year, mutt will interpret values less than 70 as +lying in the 21st century (i.e., \(lq38\(rq means 2038 and not 1938, +and \(lq00\(rq is interpreted as 2000), and values +greater than or equal to 70 as lying in the 20th century. +.PP +Note that this behaviour \fIis\fP Y2K compliant, but that mutt +\fIdoes\fP have a Y2.07K problem. +.PP +If a date range consists of a single date, the operator in question +will match that precise date. If the date range consists of a dash +(\(lq\fB-\fP\(rq), followed by a date, this range will match any +date before and up to the date given. Similarly, a date followed by +a dash matches the date given and any later point of time. Two +dates, separated by a dash, match any date which lies in the given +range of time. +.PP +You can also modify any absolute date by giving an error range. An +error range consists of one of the characters +.BR + , +.BR - , +.BR * , +followed by a positive number, followed by one of the unit +characters +.BR y , +.BR m , +.BR w ", or" +.BR d , +specifying a unit of years, months, weeks, or days. +.B + +increases the maximum date matched by the given interval of time, +.B - +decreases the minimum date matched by the given interval of time, and +.B * +increases the maximum date and decreases the minimum date matched by +the given interval of time. It is possible to give multiple error +margins, which cumulate. Example: +.B "1/1/2001-1w+2w*3d" +.PP +You can also specify offsets relative to the current date. An +offset is specified as one of the characters +.BR < , +.BR > , +.BR = , +followed by a positive number, followed by one of the unit +characters +.BR y , +.BR m , +.BR w ", or" +.BR d . +.B > +matches dates which are older than the specified amount of time, an +offset which begins with the character +.B < +matches dates which are more recent than the specified amount of time, +and an offset which begins with the character +.B = +matches points of time which are precisely the given amount of time +ago. +.SH CONFIGURATION VARIABLES diff --git a/doc/muttrc.man.tail b/doc/muttrc.man.tail new file mode 100644 index 0000000..1c780df --- /dev/null +++ b/doc/muttrc.man.tail @@ -0,0 +1,20 @@ +.\" -*-nroff-*- +.SH SEE ALSO +.PP +.BR iconv (1), +.BR iconv (3), +.BR mailcap (5), +.BR maildir (5), +.BR mbox (5), +.BR mutt (1), +.BR printf (3), +.BR regex (7), +.BR strftime (3) +.PP +The Mutt Manual +.PP +The Mutt home page: http://www.mutt.org/ +.SH AUTHOR +.PP +Michael Elkins, and others. Use <mutt-dev@mutt.org> to contact +the developers. diff --git a/doc/patch-notes.txt b/doc/patch-notes.txt new file mode 100644 index 0000000..d4ceb03 --- /dev/null +++ b/doc/patch-notes.txt @@ -0,0 +1,46 @@ +From roessler@does-not-exist.org Wed Nov 7 11:49:56 2001 +Date: Wed, 7 Nov 2001 11:49:56 +0100 +From: Thomas Roessler <roessler@does-not-exist.org> +To: mutt-dev@mutt.org +Subject: To those shipping patches (v2) +MIME-Version: 1.0 +Content-Type: text/plain; format=flowed +Status: RO +Content-Length: 1273 +Lines: 34 + +You folks have convinced me that the old patchlist was almost the +right way to go for mutt identifying what patches have been applied. + +Thus, I've implemented this scheme (and will commit it to the CVS +in a moment): There's a new file called PATCHES in the source tree, +which will be empty in the official distribution. + +This file's format is one patch ID per line. Patch IDs should be +the same as the file names used for distributing patches. The +format for these file names should be this: + + patch-<version>.<initials>.<patch-description>.<patchlevel> + +That is, Vsevolod's NNTP patch for mutt-1.3.42 could be named like +this: + + patch-1.3.42.vvv.nntp.1 + + From PATCHES, patchlist.c will be automatically generated. In +order to properly construct PATCHES, please include the following +chunk with your patch, replacing <your-id-here> by your patch ID. + +------------------------------snip------------------------------ +--- PATCHES~ Tue Nov 6 19:59:33 2001 ++++ PATCHES Tue Nov 6 19:59:42 2001 +@@ -1,0 +1 @@ ++<your-id-here> +------------------------------snip------------------------------ + +The patch IDs will be displayed when mutt is run with the 'v' +command line switch. + +-- +Thomas Roessler http://log.does-not-exist.org/ + diff --git a/doc/smime-notes.txt b/doc/smime-notes.txt new file mode 100644 index 0000000..1d651ea --- /dev/null +++ b/doc/smime-notes.txt @@ -0,0 +1,98 @@ +How to add use mutt's S/MIME capabilities + +- Add the contents of contrib/smime.rc to your .muttrc. Don't worry about + changing the smime_sign_as line at this point -- you'll change it later. + +- Run 'smime_keys init'. + +- Download and install OpenSSL. + +- Get yourself a certificate. (You can get one for free from www.thawte.com, + or pay for one from VeriSign or one of its competitors) The way the + process generally works, the certificate will be installed "into" your web + browser. If you are asked what application you wish to use the + certificate with, select Netscape. Strangely enough, "mutt" is usually not + an option. + +- Assuming you are using Mozilla, follow the instructions at + www.verisignlabs.com/Projects/smime_docs/linux.html to export the + certificate into a file called cert.p12. If you don't use Mozilla, you're + on your own. + +- Run "smime_keys add_p12 cert.p12" + + * When the script asks for the "Import password", enter the one you + provided when you exported the certificate. + + * When it asks for a "PEM pass phrase", make up a new password. Every + time you sign or decrypt a message, mutt will ask for the PEM pass + phrase. + + * Finally, when the script asks for a label, enter an easy-to-remember + name for the certificate, such as "me". The script output will include + a line like: + + added private key: /home/raldi/.smime/keys/12345678.0 for raldi@verisignlabs.com + + The number (including the ".0" at the end) is your keyid. You will + need this number in the next step. + +- Edit the smime_sign_as line in your muttrc, replacing the keyid with your + own. + +- You probably want to import the trusted roots in + contrib/ca-bundle.crt. This makes you trust anything that was ultimately + signed by one of them. You can use "smime_keys add_root" to do so, or + just copy ca-bundle.crt into the place you point mutt's smime_ca_location + variable to. + + + +Other notes + +Key management is done in a way similar to OpenSSL's CA directory. Private +keys and certificates are stored in different directories, as OpenSSL +expects either to be supplied in a (distinct) file. Each directory contains +an unsorted file named '.index' wherin each line has several fields: +mailbox, keyid, label, id of the intermediate certificate and keyflags. + + * Keyid is a hashvalue derived from the subject field of a certificate + and supplied by OpenSSL. + + * The mailbox address is derived from either From or Sender field of the + message, and matched with the email field of the certificate. Non + matching address pairs get rejected, as get certificates not + containing a mailbox address at all. (These are security issues, that + perhaps should be configurable.) + + * Label is set by the perl script (it will ask you to supply one), when + you add your keypair to the database. So are the remaining two fields. + + * keyflags are set with certificate verification option of the perl + script. It may take as value one of the following: i: invalid + (verification failed), r: revoked, e: expired, u: unverified, v: + successfully verified and finally t: trusted, in case it was + successfully verified and you chose to trust the certificate (the + script will ask you). Mutt will not use invalid, revoked or expired + certificates for signing or encryption. It will ask for confirmation + before using unverified certificates, and finally it will issue a + warning before using successfully verified but untrusted certificates. + +The purpose fields of a certificate do not get verified yet, also there is +no real check if the given file is a certificate at all. + +Key retrieval is done obviously by searching the index file for a given +mailbox. If none is found, the user is presented a list of available keys +and asked to select one of those. + +The certificate and key directories specified in muttrc have to exist. Mutt +will not create them. If you wish to sign messages yourself, note that this +mutt does not address any PKCS10 or PKCS12 issues (yet?); that is, you have +to get a valid certficate outside of mutt. (See above) + + + +A certificate can be viewed by adding the following to your ~/.mailcap: + +application/x-pkcs7-signature;openssl pkcs7 -in %s -inform der -noout \ +-print_certs -text | less; needsterminal diff --git a/dotlock.c b/dotlock.c new file mode 100644 index 0000000..eb799d5 --- /dev/null +++ b/dotlock.c @@ -0,0 +1,755 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1998-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * This module either be compiled into Mutt, or it can be + * built as a separate program. For building it + * separately, define the DL_STANDALONE preprocessor + * macro. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <unistd.h> +#include <dirent.h> +#include <sys/file.h> +#include <sys/stat.h> +#include <sys/utsname.h> +#include <errno.h> +#include <time.h> +#include <fcntl.h> +#include <limits.h> + +#ifndef _POSIX_PATH_MAX +#include <posix1_lim.h> +#endif + +#include "dotlock.h" +#include "config.h" + +#ifdef HAVE_GETOPT_H +#include <getopt.h> +#endif + +#ifdef DL_STANDALONE +# include "reldate.h" +#endif + +#define MAXLINKS 1024 /* maximum link depth */ + +#ifdef DL_STANDALONE + +# define LONG_STRING 1024 +# define MAXLOCKATTEMPT 5 + +# define strfcpy(A,B,C) strncpy (A,B,C), *(A+(C)-1)=0 + +# ifdef USE_SETGID + +# ifdef HAVE_SETEGID +# define SETEGID setegid +# else +# define SETEGID setgid +# endif +# ifndef S_ISLNK +# define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0) +# endif + +# endif + +# ifndef HAVE_SNPRINTF +extern int snprintf (char *, size_t, const char *, ...); +# endif + +#else /* DL_STANDALONE */ + +# ifdef USE_SETGID +# error Do not try to compile dotlock as a mutt module when requiring egid switching! +# endif + +# include "mutt.h" +# include "mx.h" + +#endif /* DL_STANDALONE */ + +static int DotlockFlags; +static int Retry = MAXLOCKATTEMPT; + +#ifdef DL_STANDALONE +static char *Hostname; +#endif + +#ifdef USE_SETGID +static gid_t UserGid; +static gid_t MailGid; +#endif + +static int dotlock_deference_symlink (char *, size_t, const char *); +static int dotlock_prepare (char *, size_t, const char *, int fd); +static int dotlock_check_stats (struct stat *, struct stat *); +static int dotlock_dispatch (const char *, int fd); + +#ifdef DL_STANDALONE +static int dotlock_init_privs (void); +static void usage (const char *); +#endif + +static void dotlock_expand_link (char *, const char *, const char *); +static void BEGIN_PRIVILEGED (void); +static void END_PRIVILEGED (void); + +/* These functions work on the current directory. + * Invoke dotlock_prepare () before and check their + * return value. + */ + +static int dotlock_try (void); +static int dotlock_unlock (const char *); +static int dotlock_unlink (const char *); +static int dotlock_lock (const char *); + + +#ifdef DL_STANDALONE + +#define check_flags(a) if (a & DL_FL_ACTIONS) usage (argv[0]) + +int main (int argc, char **argv) +{ + int i; + char *p; + struct utsname utsname; + + /* first, drop privileges */ + + if (dotlock_init_privs () == -1) + return DL_EX_ERROR; + + + /* determine the system's host name */ + + uname (&utsname); + if (!(Hostname = strdup (utsname.nodename))) /* __MEM_CHECKED__ */ + return DL_EX_ERROR; + if ((p = strchr (Hostname, '.'))) + *p = '\0'; + + + /* parse the command line options. */ + DotlockFlags = 0; + + while ((i = getopt (argc, argv, "dtfupr:")) != EOF) + { + switch (i) + { + /* actions, mutually exclusive */ + case 't': check_flags (DotlockFlags); DotlockFlags |= DL_FL_TRY; break; + case 'd': check_flags (DotlockFlags); DotlockFlags |= DL_FL_UNLINK; break; + case 'u': check_flags (DotlockFlags); DotlockFlags |= DL_FL_UNLOCK; break; + + /* other flags */ + case 'f': DotlockFlags |= DL_FL_FORCE; break; + case 'p': DotlockFlags |= DL_FL_USEPRIV; break; + case 'r': DotlockFlags |= DL_FL_RETRY; Retry = atoi (optarg); break; + + default: usage (argv[0]); + } + } + + if (optind == argc || Retry < 0) + usage (argv[0]); + + return dotlock_dispatch (argv[optind], -1); +} + + +/* + * Determine our effective group ID, and drop + * privileges. + * + * Return value: + * + * 0 - everything went fine + * -1 - we couldn't drop privileges. + * + */ + + +static int +dotlock_init_privs (void) +{ + +# ifdef USE_SETGID + + UserGid = getgid (); + MailGid = getegid (); + + if (SETEGID (UserGid) != 0) + return -1; + +# endif + + return 0; +} + + +#else /* DL_STANDALONE */ + +/* + * This function is intended to be invoked from within + * mutt instead of mx.c's invoke_dotlock (). + */ + +int dotlock_invoke (const char *path, int fd, int flags, int retry) +{ + int currdir; + int r; + + DotlockFlags = flags; + + if ((currdir = open (".", O_RDONLY)) == -1) + return DL_EX_ERROR; + + if (!(DotlockFlags & DL_FL_RETRY) || retry) + Retry = MAXLOCKATTEMPT; + else + Retry = 0; + + r = dotlock_dispatch (path, fd); + + fchdir (currdir); + close (currdir); + + return r; +} + +#endif /* DL_STANDALONE */ + + +static int dotlock_dispatch (const char *f, int fd) +{ + char realpath[_POSIX_PATH_MAX]; + + /* If dotlock_prepare () succeeds [return value == 0], + * realpath contains the basename of f, and we have + * successfully changed our working directory to + * `dirname $f`. Additionally, f has been opened for + * reading to verify that the user has at least read + * permissions on that file. + * + * For a more detailed explanation of all this, see the + * lengthy comment below. + */ + + if (dotlock_prepare (realpath, sizeof (realpath), f, fd) != 0) + return DL_EX_ERROR; + + /* Actually perform the locking operation. */ + + if (DotlockFlags & DL_FL_TRY) + return dotlock_try (); + else if (DotlockFlags & DL_FL_UNLOCK) + return dotlock_unlock (realpath); + else if (DotlockFlags & DL_FL_UNLINK) + return dotlock_unlink (realpath); + else /* lock */ + return dotlock_lock (realpath); +} + + +/* + * Get privileges + * + * This function re-acquires the privileges we may have + * if the user told us to do so by giving the "-p" + * command line option. + * + * BEGIN_PRIVILEGES () won't return if an error occurs. + * + */ + +static void +BEGIN_PRIVILEGED (void) +{ +#ifdef USE_SETGID + if (DotlockFlags & DL_FL_USEPRIV) + { + if (SETEGID (MailGid) != 0) + { + /* perror ("setegid"); */ + exit (DL_EX_ERROR); + } + } +#endif +} + +/* + * Drop privileges + * + * This function drops the group privileges we may have. + * + * END_PRIVILEGED () won't return if an error occurs. + * + */ + +static void +END_PRIVILEGED (void) +{ +#ifdef USE_SETGID + if (DotlockFlags & DL_FL_USEPRIV) + { + if (SETEGID (UserGid) != 0) + { + /* perror ("setegid"); */ + exit (DL_EX_ERROR); + } + } +#endif +} + +#ifdef DL_STANDALONE + +/* + * Usage information. + * + * This function doesn't return. + * + */ + +static void +usage (const char *av0) +{ + fprintf (stderr, "dotlock [Mutt %s (%s)]\n", VERSION, ReleaseDate); + fprintf (stderr, "usage: %s [-t|-f|-u|-d] [-p] [-r <retries>] file\n", + av0); + + fputs ("\noptions:" + "\n -t\t\ttry" + "\n -f\t\tforce" + "\n -u\t\tunlock" + "\n -d\t\tunlink" + "\n -p\t\tprivileged" +#ifndef USE_SETGID + " (ignored)" +#endif + "\n -r <retries>\tRetry locking" + "\n", stderr); + + exit (DL_EX_ERROR); +} + +#endif + +/* + * Access checking: Let's avoid to lock other users' mail + * spool files if we aren't permitted to read them. + * + * Some simple-minded access (2) checking isn't sufficient + * here: The problem is that the user may give us a + * deeply nested path to a file which has the same name + * as the file he wants to lock, but different + * permissions, say, e.g. + * /tmp/lots/of/subdirs/var/spool/mail/root. + * + * He may then try to replace /tmp/lots/of/subdirs by a + * symbolic link to / after we have invoked access () to + * check the file's permissions. The lockfile we'd + * create or remove would then actually be + * /var/spool/mail/root. + * + * To avoid this attack, we proceed as follows: + * + * - First, follow symbolic links a la + * dotlock_deference_symlink (). + * + * - get the result's dirname. + * + * - chdir to this directory. If you can't, bail out. + * + * - try to open the file in question, only using its + * basename. If you can't, bail out. + * + * - fstat that file and compare the result to a + * subsequent lstat (only using the basename). If + * the comparison fails, bail out. + * + * dotlock_prepare () is invoked from main () directly + * after the command line parsing has been done. + * + * Return values: + * + * 0 - Evereything's fine. The program's new current + * directory is the contains the file to be locked. + * The string pointed to by bn contains the name of + * the file to be locked. + * + * -1 - Something failed. Don't continue. + * + * tlr, Jul 15 1998 + */ + +static int +dotlock_check_stats (struct stat *fsb, struct stat *lsb) +{ + /* S_ISLNK (fsb->st_mode) should actually be impossible, + * but we may have mixed up the parameters somewhere. + * play safe. + */ + + if (S_ISLNK (lsb->st_mode) || S_ISLNK (fsb->st_mode)) + return -1; + + if ((lsb->st_dev != fsb->st_dev) || + (lsb->st_ino != fsb->st_ino) || + (lsb->st_mode != fsb->st_mode) || + (lsb->st_nlink != fsb->st_nlink) || + (lsb->st_uid != fsb->st_uid) || + (lsb->st_gid != fsb->st_gid) || + (lsb->st_rdev != fsb->st_rdev) || + (lsb->st_size != fsb->st_size)) + { + /* something's fishy */ + return -1; + } + + return 0; +} + +static int +dotlock_prepare (char *bn, size_t l, const char *f, int _fd) +{ + struct stat fsb, lsb; + char realpath[_POSIX_PATH_MAX]; + char *basename, *dirname; + char *p; + int fd; + int r; + + if (dotlock_deference_symlink (realpath, sizeof (realpath), f) == -1) + return -1; + + if ((p = strrchr (realpath, '/'))) + { + *p = '\0'; + basename = p + 1; + dirname = realpath; + } + else + { + basename = realpath; + dirname = "."; + } + + if (strlen (basename) + 1 > l) + return -1; + + strfcpy (bn, basename, l); + + if (chdir (dirname) == -1) + return -1; + + if (_fd != -1) + fd = _fd; + else if ((fd = open (basename, O_RDONLY)) == -1) + return -1; + + r = fstat (fd, &fsb); + + if (_fd == -1) + close (fd); + + if (r == -1) + return -1; + + if (lstat (basename, &lsb) == -1) + return -1; + + if (dotlock_check_stats (&fsb, &lsb) == -1) + return -1; + + return 0; +} + +/* + * Expand a symbolic link. + * + * This function expects newpath to have space for + * at least _POSIX_PATH_MAX characters. + * + */ + +static void +dotlock_expand_link (char *newpath, const char *path, const char *link) +{ + const char *lb = NULL; + size_t len; + + /* link is full path */ + if (*link == '/') + { + strfcpy (newpath, link, _POSIX_PATH_MAX); + return; + } + + if ((lb = strrchr (path, '/')) == NULL) + { + /* no path in link */ + strfcpy (newpath, link, _POSIX_PATH_MAX); + return; + } + + len = lb - path + 1; + memcpy (newpath, path, len); + strfcpy (newpath + len, link, _POSIX_PATH_MAX - len); +} + + +/* + * Deference a chain of symbolic links + * + * The final path is written to d. + * + */ + +static int +dotlock_deference_symlink (char *d, size_t l, const char *path) +{ + struct stat sb; + char realpath[_POSIX_PATH_MAX]; + const char *pathptr = path; + int count = 0; + + while (count++ < MAXLINKS) + { + if (lstat (pathptr, &sb) == -1) + { + /* perror (pathptr); */ + return -1; + } + + if (S_ISLNK (sb.st_mode)) + { + char linkfile[_POSIX_PATH_MAX]; + char linkpath[_POSIX_PATH_MAX]; + int len; + + if ((len = readlink (pathptr, linkfile, sizeof (linkfile))) == -1) + { + /* perror (pathptr); */ + return -1; + } + + linkfile[len] = '\0'; + dotlock_expand_link (linkpath, pathptr, linkfile); + strfcpy (realpath, linkpath, sizeof (realpath)); + pathptr = realpath; + } + else + break; + } + + strfcpy (d, pathptr, l); + return 0; +} + +/* + * Dotlock a file. + * + * realpath is assumed _not_ to be an absolute path to + * the file we are about to lock. Invoke + * dotlock_prepare () before using this function! + * + */ + +#define HARDMAXATTEMPTS 10 + +static int +dotlock_lock (const char *realpath) +{ + char lockfile[_POSIX_PATH_MAX + LONG_STRING]; + char nfslockfile[_POSIX_PATH_MAX + LONG_STRING]; + size_t prev_size = 0; + int fd; + int count = 0; + int hard_count = 0; + struct stat sb; + time_t t; + + snprintf (nfslockfile, sizeof (nfslockfile), "%s.%s.%d", + realpath, Hostname, (int) getpid ()); + snprintf (lockfile, sizeof (lockfile), "%s.lock", realpath); + + + BEGIN_PRIVILEGED (); + + unlink (nfslockfile); + + while ((fd = open (nfslockfile, O_WRONLY | O_EXCL | O_CREAT, 0)) < 0) + { + END_PRIVILEGED (); + + + if (errno != EAGAIN) + { + /* perror ("cannot open NFS lock file"); */ + return DL_EX_ERROR; + } + + + BEGIN_PRIVILEGED (); + } + + END_PRIVILEGED (); + + + close (fd); + + while (hard_count++ < HARDMAXATTEMPTS) + { + + BEGIN_PRIVILEGED (); + link (nfslockfile, lockfile); + END_PRIVILEGED (); + + if (stat (nfslockfile, &sb) != 0) + { + /* perror ("stat"); */ + return DL_EX_ERROR; + } + + if (sb.st_nlink == 2) + break; + + if (count == 0) + prev_size = sb.st_size; + + if (prev_size == sb.st_size && ++count > Retry) + { + if (DotlockFlags & DL_FL_FORCE) + { + BEGIN_PRIVILEGED (); + unlink (lockfile); + END_PRIVILEGED (); + + count = 0; + continue; + } + else + { + BEGIN_PRIVILEGED (); + unlink (nfslockfile); + END_PRIVILEGED (); + return DL_EX_EXIST; + } + } + + prev_size = sb.st_size; + + /* don't trust sleep (3) as it may be interrupted + * by users sending signals. + */ + + t = time (NULL); + do { + sleep (1); + } while (time (NULL) == t); + } + + BEGIN_PRIVILEGED (); + unlink (nfslockfile); + END_PRIVILEGED (); + + return DL_EX_OK; +} + + +/* + * Unlock a file. + * + * The same comment as for dotlock_lock () applies here. + * + */ + +static int +dotlock_unlock (const char *realpath) +{ + char lockfile[_POSIX_PATH_MAX + LONG_STRING]; + int i; + + snprintf (lockfile, sizeof (lockfile), "%s.lock", + realpath); + + BEGIN_PRIVILEGED (); + i = unlink (lockfile); + END_PRIVILEGED (); + + if (i == -1) + return DL_EX_ERROR; + + return DL_EX_OK; +} + +/* remove an empty file */ + +static int +dotlock_unlink (const char *realpath) +{ + struct stat lsb; + int i = -1; + + if (dotlock_lock (realpath) != DL_EX_OK) + return DL_EX_ERROR; + + if ((i = lstat (realpath, &lsb)) == 0 && lsb.st_size == 0) + unlink (realpath); + + dotlock_unlock (realpath); + + return (i == 0) ? DL_EX_OK : DL_EX_ERROR; +} + + +/* + * Check if a file can be locked at all. + * + * The same comment as for dotlock_lock () applies here. + * + */ + +static int +dotlock_try (void) +{ +#ifdef USE_SETGID + struct stat sb; +#endif + + if (access (".", W_OK) == 0) + return DL_EX_OK; + +#ifdef USE_SETGID + if (stat (".", &sb) == 0) + { + if ((sb.st_mode & S_IWGRP) == S_IWGRP && sb.st_gid == MailGid) + return DL_EX_NEED_PRIVS; + } +#endif + + return DL_EX_IMPOSSIBLE; +} diff --git a/dotlock.h b/dotlock.h new file mode 100644 index 0000000..dff6f61 --- /dev/null +++ b/dotlock.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1998-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _DOTLOCK_H +#define _DOTLOCK_H + +/* exit values */ + +#define DL_EX_OK 0 +#define DL_EX_ERROR 1 +#define DL_EX_EXIST 3 +#define DL_EX_NEED_PRIVS 4 +#define DL_EX_IMPOSSIBLE 5 + +/* flags */ + +#define DL_FL_TRY (1 << 0) +#define DL_FL_UNLOCK (1 << 1) +#define DL_FL_USEPRIV (1 << 2) +#define DL_FL_FORCE (1 << 3) +#define DL_FL_RETRY (1 << 4) +#define DL_FL_UNLINK (1 << 5) + +#define DL_FL_ACTIONS (DL_FL_TRY|DL_FL_UNLOCK|DL_FL_UNLINK) + +#ifndef DL_STANDALONE +int dotlock_invoke (const char *, int, int, int); +#endif + +#endif diff --git a/edit.c b/edit.c new file mode 100644 index 0000000..e29cb66 --- /dev/null +++ b/edit.c @@ -0,0 +1,479 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* Close approximation of the mailx(1) builtin editor for sending mail. */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_idna.h" + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> + +/* + * SLcurses_waddnstr() can't take a "const char *", so this is only + * declared "static" (sigh) + */ +static char* EditorHelp = N_("\ +~~ insert a line begining with a single ~\n\ +~b users add users to the Bcc: field\n\ +~c users add users to the Cc: field\n\ +~f messages include messages\n\ +~F messages same as ~f, except also include headers\n\ +~h edit the message header\n\ +~m messages include and quote messages\n\ +~M messages same as ~m, except include headers\n\ +~p print the message\n\ +~q write file and quit editor\n\ +~r file read a file into the editor\n\ +~t users add users to the To: field\n\ +~u recall the previous line\n\ +~v edit message with the $visual editor\n\ +~w file write message to file\n\ +~x abort changes and quit editor\n\ +~? this message\n\ +. on a line by itself ends input\n"); + +static char ** +be_snarf_data (FILE *f, char **buf, int *bufmax, int *buflen, int offset, + int bytes, int prefix) +{ + char tmp[HUGE_STRING]; + char *p = tmp; + int tmplen = sizeof (tmp); + + tmp[sizeof (tmp) - 1] = 0; + if (prefix) + { + strfcpy (tmp, NONULL(Prefix), sizeof (tmp)); + tmplen = mutt_strlen (tmp); + p = tmp + tmplen; + tmplen = sizeof (tmp) - tmplen; + } + + fseek (f, offset, 0); + while (bytes > 0) + { + if (fgets (p, tmplen - 1, f) == NULL) break; + bytes -= mutt_strlen (p); + if (*bufmax == *buflen) + safe_realloc (&buf, sizeof (char *) * (*bufmax += 25)); + buf[(*buflen)++] = safe_strdup (tmp); + } + if (buf && *bufmax == *buflen) { /* Do not smash memory past buf */ + safe_realloc (&buf, sizeof (char *) * (++*bufmax)); + } + if (buf) buf[*buflen] = NULL; + return (buf); +} + +static char ** +be_snarf_file (const char *path, char **buf, int *max, int *len, int verbose) +{ + FILE *f; + char tmp[LONG_STRING]; + struct stat sb; + + if ((f = fopen (path, "r"))) + { + fstat (fileno (f), &sb); + buf = be_snarf_data (f, buf, max, len, 0, sb.st_size, 0); + if (verbose) + { + snprintf(tmp, sizeof(tmp), "\"%s\" %lu bytes\n", path, (unsigned long) sb.st_size); + addstr(tmp); + } + fclose (f); + } + else + { + snprintf(tmp, sizeof(tmp), "%s: %s\n", path, strerror(errno)); + addstr(tmp); + } + return (buf); +} + +static int be_barf_file (const char *path, char **buf, int buflen) +{ + FILE *f; + int i; + + if ((f = fopen (path, "w")) == NULL) /* __FOPEN_CHECKED__ */ + { + addstr (strerror (errno)); + addch ('\n'); + return (-1); + } + for (i = 0; i < buflen; i++) fputs (buf[i], f); + if (fclose (f) == 0) return 0; + printw ("fclose: %s\n", strerror (errno)); + return (-1); +} + +static void be_free_memory (char **buf, int buflen) +{ + while (buflen-- > 0) + FREE (&buf[buflen]); + if (buf) + FREE (&buf); +} + +static char ** +be_include_messages (char *msg, char **buf, int *bufmax, int *buflen, + int pfx, int inc_hdrs) +{ + int offset, bytes, n; + char tmp[LONG_STRING]; + + while ((msg = strtok (msg, " ,")) != NULL) + { + n = atoi (msg); + if (n > 0 && n <= Context->msgcount) + { + n--; + + /* add the attribution */ + if (Attribution) + { + mutt_make_string (tmp, sizeof (tmp) - 1, Attribution, Context, Context->hdrs[n]); + strcat (tmp, "\n"); /* __STRCAT_CHECKED__ */ + } + + if (*bufmax == *buflen) + safe_realloc ( &buf, sizeof (char *) * (*bufmax += 25)); + buf[(*buflen)++] = safe_strdup (tmp); + + bytes = Context->hdrs[n]->content->length; + if (inc_hdrs) + { + offset = Context->hdrs[n]->offset; + bytes += Context->hdrs[n]->content->offset - offset; + } + else + offset = Context->hdrs[n]->content->offset; + buf = be_snarf_data (Context->fp, buf, bufmax, buflen, offset, bytes, + pfx); + + if (*bufmax == *buflen) + safe_realloc (&buf, sizeof (char *) * (*bufmax += 25)); + buf[(*buflen)++] = safe_strdup ("\n"); + } + else + printw (_("%d: invalid message number.\n"), n); + msg = NULL; + } + return (buf); +} + +static void be_print_header (ENVELOPE *env) +{ + char tmp[HUGE_STRING]; + + if (env->to) + { + addstr ("To: "); + tmp[0] = 0; + rfc822_write_address (tmp, sizeof (tmp), env->to, 1); + addstr (tmp); + addch ('\n'); + } + if (env->cc) + { + addstr ("Cc: "); + tmp[0] = 0; + rfc822_write_address (tmp, sizeof (tmp), env->cc, 1); + addstr (tmp); + addch ('\n'); + } + if (env->bcc) + { + addstr ("Bcc: "); + tmp[0] = 0; + rfc822_write_address (tmp, sizeof (tmp), env->bcc, 1); + addstr (tmp); + addch ('\n'); + } + if (env->subject) + { + addstr ("Subject: "); + addstr (env->subject); + addch ('\n'); + } + addch ('\n'); +} + +/* args: + * force override the $ask* vars (used for the ~h command) + */ +static void be_edit_header (ENVELOPE *e, int force) +{ + char tmp[HUGE_STRING]; + + move (LINES-1, 0); + + addstr ("To: "); + tmp[0] = 0; + mutt_addrlist_to_local (e->to); + rfc822_write_address (tmp, sizeof (tmp), e->to, 0); + if (!e->to || force) + { + if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 4, 0) == 0) + { + rfc822_free_address (&e->to); + e->to = mutt_parse_adrlist (e->to, tmp); + e->to = mutt_expand_aliases (e->to); + mutt_addrlist_to_idna (e->to, NULL); /* XXX - IDNA error reporting? */ + tmp[0] = 0; + rfc822_write_address (tmp, sizeof (tmp), e->to, 1); + mvaddstr (LINES - 1, 4, tmp); + } + } + else + { + mutt_addrlist_to_idna (e->to, NULL); /* XXX - IDNA error reporting? */ + addstr (tmp); + } + addch ('\n'); + + if (!e->subject || force) + { + addstr ("Subject: "); + strfcpy (tmp, e->subject ? e->subject: "", sizeof (tmp)); + if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 9, 0) == 0) + mutt_str_replace (&e->subject, tmp); + addch ('\n'); + } + + if ((!e->cc && option (OPTASKCC)) || force) + { + addstr ("Cc: "); + tmp[0] = 0; + mutt_addrlist_to_local (e->cc); + rfc822_write_address (tmp, sizeof (tmp), e->cc, 0); + if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 4, 0) == 0) + { + rfc822_free_address (&e->cc); + e->cc = mutt_parse_adrlist (e->cc, tmp); + e->cc = mutt_expand_aliases (e->cc); + tmp[0] = 0; + mutt_addrlist_to_idna (e->cc, NULL); + rfc822_write_address (tmp, sizeof (tmp), e->cc, 1); + mvaddstr (LINES - 1, 4, tmp); + } + else + mutt_addrlist_to_idna (e->cc, NULL); + addch ('\n'); + } + + if (option (OPTASKBCC) || force) + { + addstr ("Bcc: "); + tmp[0] = 0; + mutt_addrlist_to_local (e->bcc); + rfc822_write_address (tmp, sizeof (tmp), e->bcc, 0); + if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 5, 0) == 0) + { + rfc822_free_address (&e->bcc); + e->bcc = mutt_parse_adrlist (e->bcc, tmp); + e->bcc = mutt_expand_aliases (e->bcc); + mutt_addrlist_to_idna (e->bcc, NULL); + tmp[0] = 0; + rfc822_write_address (tmp, sizeof (tmp), e->bcc, 1); + mvaddstr (LINES - 1, 5, tmp); + } + else + mutt_addrlist_to_idna (e->bcc, NULL); + addch ('\n'); + } +} + +int mutt_builtin_editor (const char *path, HEADER *msg, HEADER *cur) +{ + char **buf = NULL; + int bufmax = 0, buflen = 0; + char tmp[LONG_STRING]; + int abort = 0; + int done = 0; + int i; + char *p; + + scrollok (stdscr, TRUE); + + be_edit_header (msg->env, 0); + + addstr (_("(End message with a . on a line by itself)\n")); + + buf = be_snarf_file (path, buf, &bufmax, &buflen, 0); + + tmp[0] = 0; + while (!done) + { + if (mutt_enter_string (tmp, sizeof (tmp), LINES-1, 0, 0) == -1) + { + tmp[0] = 0; + continue; + } + addch ('\n'); + + if (EscChar && tmp[0] == EscChar[0] && tmp[1] != EscChar[0]) + { + /* remove trailing whitespace from the line */ + p = tmp + mutt_strlen (tmp) - 1; + while (p >= tmp && ISSPACE (*p)) + *p-- = 0; + + p = tmp + 2; + SKIPWS (p); + + switch (tmp[1]) + { + case '?': + addstr (_(EditorHelp)); + break; + case 'b': + msg->env->bcc = mutt_parse_adrlist (msg->env->bcc, p); + msg->env->bcc = mutt_expand_aliases (msg->env->bcc); + break; + case 'c': + msg->env->cc = mutt_parse_adrlist (msg->env->cc, p); + msg->env->cc = mutt_expand_aliases (msg->env->cc); + break; + case 'h': + be_edit_header (msg->env, 1); + break; + case 'F': + case 'f': + case 'm': + case 'M': + if (Context) + { + if (!*p && cur) + { + /* include the current message */ + p = tmp + mutt_strlen (tmp) + 1; + snprintf (tmp + mutt_strlen (tmp), sizeof (tmp) - mutt_strlen (tmp), " %d", + cur->msgno + 1); + } + buf = be_include_messages (p, buf, &bufmax, &buflen, + (ascii_tolower (tmp[1]) == 'm'), + (ascii_isupper ((unsigned char) tmp[1]))); + } + else + addstr (_("No mailbox.\n")); + break; + case 'p': + addstr ("-----\n"); + addstr (_("Message contains:\n")); + be_print_header (msg->env); + for (i = 0; i < buflen; i++) + addstr (buf[i]); + addstr (_("(continue)\n")); + break; + case 'q': + done = 1; + break; + case 'r': + if (*p) + { + strncpy(tmp, p, sizeof(tmp)); + mutt_expand_path(tmp, sizeof(tmp)); + buf = be_snarf_file (tmp, buf, &bufmax, &buflen, 1); + } + else + addstr (_("missing filename.\n")); + break; + case 's': + mutt_str_replace (&msg->env->subject, p); + break; + case 't': + msg->env->to = rfc822_parse_adrlist (msg->env->to, p); + msg->env->to = mutt_expand_aliases (msg->env->to); + break; + case 'u': + if (buflen) + { + buflen--; + strfcpy (tmp, buf[buflen], sizeof (tmp)); + tmp[mutt_strlen (tmp)-1] = 0; + FREE (&buf[buflen]); + buf[buflen] = NULL; + continue; + } + else + addstr (_("No lines in message.\n")); + break; + + case 'e': + case 'v': + if (be_barf_file (path, buf, buflen) == 0) + { + char *tag, *err; + be_free_memory (buf, buflen); + buf = NULL; + bufmax = buflen = 0; + + if (option (OPTEDITHDRS)) + { + mutt_env_to_local (msg->env); + mutt_edit_headers (NONULL(Visual), path, msg, NULL, 0); + if (mutt_env_to_idna (msg->env, &tag, &err)) + printw (_("Bad IDN in %s: '%s'\n"), tag, err); + } + else + mutt_edit_file (NONULL(Visual), path); + + buf = be_snarf_file (path, buf, &bufmax, &buflen, 0); + + addstr (_("(continue)\n")); + } + break; + case 'w': + be_barf_file (*p ? p : path, buf, buflen); + break; + case 'x': + abort = 1; + done = 1; + break; + default: + printw (_("%s: unknown editor command (~? for help)\n"), tmp); + break; + } + } + else if (mutt_strcmp (".", tmp) == 0) + done = 1; + else + { + strncat (tmp, "\n", sizeof(tmp)); tmp[sizeof(tmp) - 1] = '\0'; + if (buflen == bufmax) + safe_realloc (&buf, sizeof (char *) * (bufmax += 25)); + buf[buflen++] = safe_strdup (tmp[1] == '~' ? tmp + 1 : tmp); + } + + tmp[0] = 0; + } + + if (!abort) be_barf_file (path, buf, buflen); + be_free_memory (buf, buflen); + + return (abort ? -1 : 0); +} diff --git a/editmsg.c b/editmsg.c new file mode 100644 index 0000000..c341542 --- /dev/null +++ b/editmsg.c @@ -0,0 +1,221 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* simple, editor-based message editing */ + +#include "mutt.h" +#include "copy.h" +#include "mailbox.h" +#include "mx.h" + +#include <sys/stat.h> +#include <errno.h> + +#include <time.h> + +/* + * return value: + * + * 1 message not modified + * 0 message edited successfully + * -1 error + */ + +static int edit_one_message (CONTEXT *ctx, HEADER *cur) +{ + char tmp[_POSIX_PATH_MAX]; + char buff[STRING]; + int omagic; + int oerrno; + int rc; + + unsigned short o_read; + unsigned short o_old; + + int of, cf; + + CONTEXT tmpctx; + MESSAGE *msg; + + FILE *fp = NULL; + + struct stat sb; + time_t mtime = 0; + + mutt_mktemp (tmp); + + omagic = DefaultMagic; + DefaultMagic = M_MBOX; + + rc = (mx_open_mailbox (tmp, M_NEWFOLDER, &tmpctx) == NULL) ? -1 : 0; + + DefaultMagic = omagic; + + if (rc == -1) + { + mutt_error (_("could not create temporary folder: %s"), strerror (errno)); + return -1; + } + + rc = mutt_append_message (&tmpctx, ctx, cur, 0, CH_NOLEN | CH_NOSTATUS); oerrno = errno; + + mx_close_mailbox (&tmpctx, NULL); + + if (rc == -1) + { + mutt_error (_("could not write temporary mail folder: %s"), strerror (oerrno)); + goto bail; + } + + if (stat (tmp, &sb) == 0) + mtime = sb.st_mtime; + + /* + * 2002-09-05 me@sigpipe.org + * The file the user is going to edit is not a real mbox, so we need to + * truncate the last newline in the temp file, which is logically part of + * the message separator, and not the body of the message. If we fail to + * remove it, the message will grow by one line each time the user edits + * the message. + */ + if (sb.st_size != 0 && truncate (tmp, sb.st_size - 1) == -1) + { + mutt_error (_("could not truncate temporary mail folder: %s"), + strerror (errno)); + goto bail; + } + + mutt_edit_file (NONULL(Editor), tmp); + + if ((rc = stat (tmp, &sb)) == -1) + { + mutt_error (_("Can't stat %s: %s"), tmp, strerror (errno)); + goto bail; + } + + if (sb.st_size == 0) + { + mutt_message (_("Message file is empty!")); + rc = 1; + goto bail; + } + + if (sb.st_mtime == mtime) + { + mutt_message (_("Message not modified!")); + rc = 1; + goto bail; + } + + if ((fp = fopen (tmp, "r")) == NULL) + { + rc = -1; + mutt_error (_("Can't open message file: %s"), strerror (errno)); + goto bail; + } + + if (mx_open_mailbox (ctx->path, M_APPEND, &tmpctx) == NULL) + { + rc = -1; + mutt_error (_("Can't append to folder: %s"), strerror (errno)); + goto bail; + } + + of = cf = 0; + + if (fgets (buff, sizeof (buff), fp) && is_from (buff, NULL, 0, NULL)) + { + if (tmpctx.magic == M_MBOX || tmpctx.magic == M_MMDF) + cf = CH_FROM | CH_FORCE_FROM; + } + else + of = M_ADD_FROM; + + /* + * XXX - we have to play games with the message flags to avoid + * problematic behaviour with maildir folders. + * + */ + + o_read = cur->read; o_old = cur->old; + cur->read = cur->old = 0; + msg = mx_open_new_message (&tmpctx, cur, of); + cur->read = o_read; cur->old = o_old; + + if (msg == NULL) + { + mutt_error (_("Can't append to folder: %s"), strerror (errno)); + mx_close_mailbox (&tmpctx, NULL); + goto bail; + } + + if ((rc = mutt_copy_hdr (fp, msg->fp, 0, sb.st_size, CH_NOSTATUS | CH_NOLEN | cf, NULL)) == 0) + { + fputc ('\n', msg->fp); + rc = mutt_copy_stream (fp, msg->fp); + } + + rc = mx_commit_message (msg, &tmpctx); + mx_close_message (&msg); + + mx_close_mailbox (&tmpctx, NULL); + + bail: + if (fp) fclose (fp); + + if (rc >= 0) + unlink (tmp); + + if (rc == 0) + { + mutt_set_flag (Context, cur, M_DELETE, 1); + mutt_set_flag (Context, cur, M_READ, 1); + + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, cur, M_TAG, 0); + } + else if (rc == -1) + mutt_message (_("Error. Preserving temporary file: %s"), tmp); + + + return rc; +} + +int mutt_edit_message (CONTEXT *ctx, HEADER *hdr) +{ + int i, j; + + if (hdr) + return edit_one_message (ctx, hdr); + + + for (i = 0; i < ctx->vcount; i++) + { + j = ctx->v2r[i]; + if (ctx->hdrs[j]->tagged) + { + if (edit_one_message (ctx, ctx->hdrs[j]) == -1) + return -1; + } + } + + return 0; +} diff --git a/enter.c b/enter.c new file mode 100644 index 0000000..9547ebb --- /dev/null +++ b/enter.c @@ -0,0 +1,707 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mutt_curses.h" +#include "keymap.h" +#include "history.h" + +#include <string.h> + +/* redraw flags for mutt_enter_string() */ +enum +{ + M_REDRAW_INIT = 1, /* go to end of line and redraw */ + M_REDRAW_LINE /* redraw entire line */ +}; + +static int my_wcwidth (wchar_t wc) +{ + int n = wcwidth (wc); + if (IsWPrint (wc) && n > 0) + return n; + if (!(wc & ~0x7f)) + return 2; + if (!(wc & ~0xffff)) + return 6; + return 10; +} + +/* combining mark / non-spacing character */ +#define COMB_CHAR(wc) (IsWPrint (wc) && !wcwidth (wc)) + +static int my_wcswidth (const wchar_t *s, size_t n) +{ + int w = 0; + while (n--) + w += my_wcwidth (*s++); + return w; +} + +static int my_addwch (wchar_t wc) +{ + int n = wcwidth (wc); + if (IsWPrint (wc) && n > 0) + return mutt_addwch (wc); + if (!(wc & ~0x7f)) + return printw ("^%c", ((int)wc + 0x40) & 0x7f); + if (!(wc & ~0xffff)) + return printw ("\\u%04x", (int)wc); + return printw ("\\u%08x", (int)wc); +} + +static size_t width_ceiling (const wchar_t *s, size_t n, int w1) +{ + const wchar_t *s0 = s; + int w = 0; + for (; n; s++, n--) + if ((w += my_wcwidth (*s)) > w1) + break; + return s - s0; +} + +static void my_wcstombs (char *dest, size_t dlen, const wchar_t *src, size_t slen) +{ + mbstate_t st; + size_t k; + + /* First convert directly into the destination buffer */ + memset (&st, 0, sizeof (st)); + for (; slen && dlen >= MB_LEN_MAX; dest += k, dlen -= k, src++, slen--) + if ((k = wcrtomb (dest, *src, &st)) == (size_t)(-1)) + break; + + /* If this works, we can stop now */ + if (dlen >= MB_LEN_MAX) { + wcrtomb (dest, 0, &st); + return; + } + + /* Otherwise convert any remaining data into a local buffer */ + { + char buf[3 * MB_LEN_MAX]; + char *p = buf; + + for (; slen && p - buf < dlen; p += k, src++, slen--) + if ((k = wcrtomb (p, *src, &st)) == (size_t)(-1)) + break; + p += wcrtomb (p, 0, &st); + + /* If it fits into the destination buffer, we can stop now */ + if (p - buf <= dlen) { + memcpy (dest, buf, p - buf); + return; + } + + /* Otherwise we truncate the string in an ugly fashion */ + memcpy (dest, buf, dlen); + dest[dlen - 1] = '\0'; /* assume original dlen > 0 */ + } +} + +size_t my_mbstowcs (wchar_t **pwbuf, size_t *pwbuflen, size_t i, char *buf) +{ + wchar_t wc; + mbstate_t st; + size_t k; + wchar_t *wbuf; + size_t wbuflen; + + wbuf = *pwbuf, wbuflen = *pwbuflen; + memset (&st, 0, sizeof (st)); + for (; (k = mbrtowc (&wc, buf, MB_LEN_MAX, &st)) && + k != (size_t)(-1) && k != (size_t)(-2); buf += k) + { + if (i >= wbuflen) + { + wbuflen = i + 20; + safe_realloc (&wbuf, wbuflen * sizeof (*wbuf)); + } + wbuf[i++] = wc; + } + *pwbuf = wbuf, *pwbuflen = wbuflen; + return i; +} + +/* + * Replace part of the wchar_t buffer, from FROM to CURPOS, by BUF. + */ + +static void replace_part (ENTER_STATE *state, size_t from, char *buf) +{ + /* Save the suffix */ + size_t savelen = state->lastchar - state->curpos; + wchar_t *savebuf = safe_calloc (savelen, sizeof (wchar_t)); + memcpy (savebuf, state->wbuf + state->curpos, savelen * sizeof (wchar_t)); + + /* Convert to wide characters */ + state->curpos = my_mbstowcs (&state->wbuf, &state->wbuflen, from, buf); + + /* Make space for suffix */ + if (state->curpos + savelen > state->wbuflen) + { + state->wbuflen = state->curpos + savelen; + safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t)); + } + + /* Restore suffix */ + memcpy (state->wbuf + state->curpos, savebuf, savelen * sizeof (wchar_t)); + state->lastchar = state->curpos + savelen; + + FREE (&savebuf); +} + +/* + * Returns: + * 1 need to redraw the screen and call me again + * 0 if input was given + * -1 if abort. + */ + +int mutt_enter_string(char *buf, size_t buflen, int y, int x, int flags) +{ + int rv; + ENTER_STATE *es = mutt_new_enter_state (); + rv = _mutt_enter_string (buf, buflen, y, x, flags, 0, NULL, NULL, es); + mutt_free_enter_state (&es); + return rv; +} + +int _mutt_enter_string (char *buf, size_t buflen, int y, int x, + int flags, int multiple, char ***files, int *numfiles, + ENTER_STATE *state) +{ + int width = COLS - x - 1; + int redraw; + int pass = (flags & M_PASS); + int first = 1; + int ch, w, r; + size_t i; + wchar_t *tempbuf = 0; + size_t templen = 0; + history_class_t hclass; + wchar_t wc; + mbstate_t mbstate; + + int rv = 0; + memset (&mbstate, 0, sizeof (mbstate)); + + if (state->wbuf) + { + /* Coming back after return 1 */ + redraw = M_REDRAW_LINE; + } + else + { + /* Initialise wbuf from buf */ + state->wbuflen = 0; + state->lastchar = my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf); + redraw = M_REDRAW_INIT; + } + + if (flags & (M_FILE | M_EFILE)) + hclass = HC_FILE; + else if (flags & M_CMD) + hclass = HC_CMD; + else if (flags & M_ALIAS) + hclass = HC_ALIAS; + else if (flags & M_COMMAND) + hclass = HC_COMMAND; + else if (flags & M_PATTERN) + hclass = HC_PATTERN; + else + hclass = HC_OTHER; + + for (;;) + { + if (redraw && !pass) + { + if (redraw == M_REDRAW_INIT) + { + /* Go to end of line */ + state->curpos = state->lastchar; + state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->lastchar) - width + 1); + } + if (state->curpos < state->begin || + my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin) >= width) + state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->curpos) - width / 2); + move (y, x); + w = 0; + for (i = state->begin; i < state->lastchar; i++) + { + w += my_wcwidth (state->wbuf[i]); + if (w > width) + break; + my_addwch (state->wbuf[i]); + } + clrtoeol (); + move (y, x + my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin)); + } + mutt_refresh (); + + if ((ch = km_dokey (MENU_EDITOR)) == -1) + { + rv = -1; + goto bye; + } + + if (ch != OP_NULL) + { + first = 0; + if (ch != OP_EDITOR_COMPLETE) + state->tabs = 0; + redraw = M_REDRAW_LINE; + switch (ch) + { + case OP_EDITOR_HISTORY_UP: + state->curpos = state->lastchar; + replace_part (state, 0, mutt_history_prev (hclass)); + redraw = M_REDRAW_INIT; + break; + + case OP_EDITOR_HISTORY_DOWN: + state->curpos = state->lastchar; + replace_part (state, 0, mutt_history_next (hclass)); + redraw = M_REDRAW_INIT; + break; + + case OP_EDITOR_BACKSPACE: + if (state->curpos == 0) + BEEP (); + else + { + i = state->curpos; + while (i && COMB_CHAR (state->wbuf[i - 1])) + --i; + if (i) + --i; + memmove (state->wbuf + i, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t)); + state->lastchar -= state->curpos - i; + state->curpos = i; + } + break; + + case OP_EDITOR_BOL: + state->curpos = 0; + break; + + case OP_EDITOR_EOL: + redraw= M_REDRAW_INIT; + break; + + case OP_EDITOR_KILL_LINE: + state->curpos = state->lastchar = 0; + break; + + case OP_EDITOR_KILL_EOL: + state->lastchar = state->curpos; + break; + + case OP_EDITOR_BACKWARD_CHAR: + if (state->curpos == 0) + BEEP (); + else + { + while (state->curpos && COMB_CHAR (state->wbuf[state->curpos - 1])) + state->curpos--; + if (state->curpos) + state->curpos--; + } + break; + + case OP_EDITOR_FORWARD_CHAR: + if (state->curpos == state->lastchar) + BEEP (); + else + { + ++state->curpos; + while (state->curpos < state->lastchar && COMB_CHAR (state->wbuf[state->curpos])) + ++state->curpos; + } + break; + + case OP_EDITOR_BACKWARD_WORD: + if (state->curpos == 0) + BEEP (); + else + { + while (state->curpos && iswspace (state->wbuf[state->curpos - 1])) + --state->curpos; + while (state->curpos && !iswspace (state->wbuf[state->curpos - 1])) + --state->curpos; + } + break; + + case OP_EDITOR_FORWARD_WORD: + if (state->curpos == state->lastchar) + BEEP (); + else + { + while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos])) + ++state->curpos; + while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos])) + ++state->curpos; + } + break; + + case OP_EDITOR_CAPITALIZE_WORD: + case OP_EDITOR_UPCASE_WORD: + case OP_EDITOR_DOWNCASE_WORD: + if (state->curpos == state->lastchar) + { + BEEP (); + break; + } + while (state->curpos && !iswspace (state->wbuf[state->curpos])) + --state->curpos; + while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos])) + ++state->curpos; + while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos])) + { + if (ch == OP_EDITOR_DOWNCASE_WORD) + state->wbuf[state->curpos] = towlower (state->wbuf[state->curpos]); + else + { + state->wbuf[state->curpos] = towupper (state->wbuf[state->curpos]); + if (ch == OP_EDITOR_CAPITALIZE_WORD) + ch = OP_EDITOR_DOWNCASE_WORD; + } + state->curpos++; + } + break; + + case OP_EDITOR_DELETE_CHAR: + if (state->curpos == state->lastchar) + BEEP (); + else + { + i = state->curpos; + while (i < state->lastchar && COMB_CHAR (state->wbuf[i])) + ++i; + if (i < state->lastchar) + ++i; + while (i < state->lastchar && COMB_CHAR (state->wbuf[i])) + ++i; + memmove (state->wbuf + state->curpos, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t)); + state->lastchar -= i - state->curpos; + } + break; + + case OP_EDITOR_KILL_WORD: + /* delete to begining of word */ + if (state->curpos != 0) + { + i = state->curpos; + while (i && iswspace (state->wbuf[i - 1])) + --i; + if (i) + { + if (iswalnum (state->wbuf[i - 1])) + { + for (--i; i && iswalnum (state->wbuf[i - 1]); i--) + ; + } + else + --i; + } + memmove (state->wbuf + i, state->wbuf + state->curpos, + (state->lastchar - state->curpos) * sizeof (wchar_t)); + state->lastchar += i - state->curpos; + state->curpos = i; + } + break; + + case OP_EDITOR_KILL_EOW: + /* delete to end of word */ + for (i = state->curpos; + i < state->lastchar && iswspace (state->wbuf[i]); i++) + ; + for (; i < state->lastchar && !iswspace (state->wbuf[i]); i++) + ; + memmove (state->wbuf + state->curpos, state->wbuf + i, + (state->lastchar - i) * sizeof (wchar_t)); + state->lastchar += state->curpos - i; + break; + + case OP_EDITOR_BUFFY_CYCLE: + if (flags & M_EFILE) + { + first = 1; /* clear input if user types a real key later */ + my_wcstombs (buf, buflen, state->wbuf, state->curpos); + mutt_buffy (buf, buflen); + state->curpos = state->lastchar = my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf); + break; + } + else if (!(flags & M_FILE)) + goto self_insert; + /* fall through to completion routine (M_FILE) */ + + case OP_EDITOR_COMPLETE: + state->tabs++; + if (flags & M_CMD) + { + for (i = state->curpos; i && state->wbuf[i-1] != ' '; i--) + ; + my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); + if (tempbuf && templen == state->lastchar - i && + !memcmp (tempbuf, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t))) + { + mutt_select_file (buf, buflen, (flags & M_EFILE) ? M_SEL_FOLDER : 0); + set_option (OPTNEEDREDRAW); + if (*buf) + replace_part (state, i, buf); + rv = 1; + goto bye; + } + if (!mutt_complete (buf, buflen)) + { + templen = state->lastchar - i; + safe_realloc (&tempbuf, templen * sizeof (wchar_t)); + } + else + BEEP (); + + replace_part (state, i, buf); + } + else if (flags & M_ALIAS) + { + /* invoke the alias-menu to get more addresses */ + for (i = state->curpos; i && state->wbuf[i-1] != ',' && + state->wbuf[i-1] != ':'; i--) + ; + for (; i < state->lastchar && state->wbuf[i] == ' '; i++) + ; + my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); + r = mutt_alias_complete (buf, buflen); + replace_part (state, i, buf); + if (!r) + { + rv = 1; + goto bye; + } + break; + } + else if (flags & M_COMMAND) + { + my_wcstombs (buf, buflen, state->wbuf, state->curpos); + i = strlen (buf); + if (i && buf[i - 1] == '=' && + mutt_var_value_complete (buf, buflen, i)) + state->tabs = 0; + else if (!mutt_command_complete (buf, buflen, i, state->tabs)) + BEEP (); + replace_part (state, 0, buf); + } + else if (flags & (M_FILE | M_EFILE)) + { + my_wcstombs (buf, buflen, state->wbuf, state->curpos); + + /* see if the path has changed from the last time */ + if ((!tempbuf && !state->lastchar) || (tempbuf && templen == state->lastchar && + !memcmp (tempbuf, state->wbuf, state->lastchar * sizeof (wchar_t)))) + { + _mutt_select_file (buf, buflen, + ((flags & M_EFILE) ? M_SEL_FOLDER : 0) | (multiple ? M_SEL_MULTI : 0), + files, numfiles); + set_option (OPTNEEDREDRAW); + if (*buf) + { + mutt_pretty_mailbox (buf); + if (!pass) + mutt_history_add (hclass, buf); + rv = 0; + goto bye; + } + + /* file selection cancelled */ + rv = 1; + goto bye; + } + + if (!mutt_complete (buf, buflen)) + { + templen = state->lastchar; + safe_realloc (&tempbuf, templen * sizeof (wchar_t)); + memcpy (tempbuf, state->wbuf, templen * sizeof (wchar_t)); + } + else + BEEP (); /* let the user know that nothing matched */ + replace_part (state, 0, buf); + } + else + goto self_insert; + break; + + case OP_EDITOR_COMPLETE_QUERY: + if (flags & M_ALIAS) + { + /* invoke the query-menu to get more addresses */ + if ((i = state->curpos)) + { + for (; i && state->wbuf[i - 1] != ','; i--) + ; + for (; i < state->curpos && state->wbuf[i] == ' '; i++) + ; + } + + my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); + mutt_query_complete (buf, buflen); + replace_part (state, i, buf); + + rv = 1; + goto bye; + } + else + goto self_insert; + + case OP_EDITOR_QUOTE_CHAR: + { + event_t event; + /*ADDCH (LastKey);*/ + event = mutt_getch (); + if (event.ch != -1) + { + LastKey = event.ch; + goto self_insert; + } + } + + case OP_EDITOR_TRANSPOSE_CHARS: + if (state->lastchar < 2) + BEEP (); + else + { + wchar_t t; + + if (state->curpos == 0) + state->curpos = 2; + else if (state->curpos < state->lastchar) + ++state->curpos; + + t = state->wbuf[state->curpos - 2]; + state->wbuf[state->curpos - 2] = state->wbuf[state->curpos - 1]; + state->wbuf[state->curpos - 1] = t; + } + break; + + default: + BEEP (); + } + } + else + { + +self_insert: + + state->tabs = 0; + /* use the raw keypress */ + ch = LastKey; + +#ifdef KEY_ENTER + /* treat ENTER the same as RETURN */ + if (ch == KEY_ENTER) + ch = '\r'; +#endif + + /* quietly ignore all other function keys */ + if (ch & ~0xff) + continue; + + /* gather the octets into a wide character */ + { + char c; + size_t k; + + c = ch; + k = mbrtowc (&wc, &c, 1, &mbstate); + if (k == (size_t)(-2)) + continue; + else if (k && k != 1) + { + memset (&mbstate, 0, sizeof (mbstate)); + continue; + } + } + + if (first && (flags & M_CLEAR)) + { + first = 0; + if (IsWPrint (wc)) /* why? */ + state->curpos = state->lastchar = 0; + } + + if (wc == '\r' || wc == '\n') + { + /* Convert from wide characters */ + my_wcstombs (buf, buflen, state->wbuf, state->lastchar); + if (!pass) + mutt_history_add (hclass, buf); + + if (multiple) + { + char **tfiles; + *numfiles = 1; + tfiles = safe_calloc (*numfiles, sizeof (char *)); + mutt_expand_path (buf, buflen); + tfiles[0] = safe_strdup (buf); + *files = tfiles; + } + rv = 0; + goto bye; + } + else if (wc && (wc < ' ' || IsWPrint (wc))) /* why? */ + { + if (state->lastchar >= state->wbuflen) + { + state->wbuflen = state->lastchar + 20; + safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t)); + } + memmove (state->wbuf + state->curpos + 1, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t)); + state->wbuf[state->curpos++] = wc; + state->lastchar++; + } + else + { + mutt_flushinp (); + BEEP (); + } + } + } + + bye: + + FREE (&tempbuf); + return rv; +} + +void mutt_free_enter_state (ENTER_STATE **esp) +{ + if (!esp) return; + + FREE (&(*esp)->wbuf); + FREE (esp); +} + +/* + * TODO: + * very narrow screen might crash it + * sort out the input side + * unprintable chars + */ diff --git a/extlib.c b/extlib.c new file mode 100644 index 0000000..04692a9 --- /dev/null +++ b/extlib.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* + * Some simple dummies, so we can reuse the routines from + * lib.c in external programs. + */ + +#define WHERE +#define _EXTLIB_C + +#include <stdlib.h> +#include "lib.h" + +void (*mutt_error) (const char *, ...) = mutt_nocurses_error; + +void mutt_exit (int code) +{ + exit (code); +} + diff --git a/filter.c b/filter.c new file mode 100644 index 0000000..056fbdd --- /dev/null +++ b/filter.c @@ -0,0 +1,179 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins. + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" + +#include <unistd.h> +#include <stdlib.h> +#include <sys/wait.h> + +/* Invokes a commmand on a pipe and optionally connects its stdin and stdout + * to the specified handles. + */ +pid_t +mutt_create_filter_fd (const char *cmd, FILE **in, FILE **out, FILE **err, + int fdin, int fdout, int fderr) +{ + int pin[2], pout[2], perr[2], thepid; + + if (in) + { + *in = 0; + if (pipe (pin) == -1) + return (-1); + } + + if (out) + { + *out = 0; + if (pipe (pout) == -1) + { + if (in) + { + close (pin[0]); + close (pin[1]); + } + return (-1); + } + } + + if (err) + { + *err = 0; + if (pipe (perr) == -1) + { + if (in) + { + close (pin[0]); + close (pin[1]); + } + if (out) + { + close (pout[0]); + close (pout[1]); + } + return (-1); + } + } + + mutt_block_signals_system (); + + if ((thepid = fork ()) == 0) + { + mutt_unblock_signals_system (0); + + if (in) + { + close (pin[1]); + dup2 (pin[0], 0); + close (pin[0]); + } + else if (fdin != -1) + { + dup2 (fdin, 0); + close (fdin); + } + + if (out) + { + close (pout[0]); + dup2 (pout[1], 1); + close (pout[1]); + } + else if (fdout != -1) + { + dup2 (fdout, 1); + close (fdout); + } + + if (err) + { + close (perr[0]); + dup2 (perr[1], 2); + close (perr[1]); + } + else if (fderr != -1) + { + dup2 (fderr, 2); + close (fderr); + } + + execl (EXECSHELL, "sh", "-c", cmd, NULL); + _exit (127); + } + else if (thepid == -1) + { + mutt_unblock_signals_system (1); + + if (in) + { + close (pin[0]); + close (pin[1]); + } + + if (out) + { + close (pout[0]); + close (pout[1]); + } + + if (err) + { + close (perr[0]); + close (perr[1]); + } + + return (-1); + } + + if (out) + { + close (pout[1]); + *out = fdopen (pout[0], "r"); + } + + if (in) + { + close (pin[0]); + *in = fdopen (pin[1], "w"); + } + + if (err) + { + close (perr[1]); + *err = fdopen (perr[0], "r"); + } + + return (thepid); +} + +pid_t mutt_create_filter (const char *s, FILE **in, FILE **out, FILE **err) +{ + return (mutt_create_filter_fd (s, in, out, err, -1, -1, -1)); +} + +int mutt_wait_filter (pid_t pid) +{ + int rc; + + waitpid (pid, &rc, 0); + mutt_unblock_signals_system (1); + rc = WIFEXITED (rc) ? WEXITSTATUS (rc) : -1; + + return rc; +} diff --git a/flags.c b/flags.c new file mode 100644 index 0000000..e46ee8a --- /dev/null +++ b/flags.c @@ -0,0 +1,417 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "sort.h" +#include "mx.h" + +#ifdef USE_IMAP +#include "imap_private.h" +#endif + +void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) +{ + int changed = h->changed; + int deleted = ctx->deleted; + int tagged = ctx->tagged; + + if (ctx->readonly && flag != M_TAG) + return; /* don't modify anything if we are read-only */ + + switch (flag) + { + case M_DELETE: + +#ifdef USE_IMAP + if (ctx && ctx->magic == M_IMAP) + if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_DELETE)) + return; +#endif + + if (bf) + { + if (!h->deleted && !ctx->readonly) + { + h->deleted = 1; + if (upd_ctx) ctx->deleted++; +#ifdef USE_IMAP + /* deleted messages aren't treated as changed elsewhere so that the + * purge-on-sync option works correctly. This isn't applicable here */ + if (ctx && ctx->magic == M_IMAP) + { + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } +#endif + } + } + else if (h->deleted) + { + h->deleted = 0; + if (upd_ctx) + { + ctx->deleted--; + if (h->appended) + ctx->appended--; + } + h->appended = 0; /* when undeleting, also reset the appended flag */ +#ifdef USE_IMAP + /* see my comment above */ + if (ctx->magic == M_IMAP) + { + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } +#endif + /* + * If the user undeletes a message which is marked as + * "trash" in the maildir folder on disk, the folder has + * been changed, and is marked accordingly. However, we do + * _not_ mark the message itself changed, because trashing + * is checked in specific code in the maildir folder + * driver. + */ + if (ctx->magic == M_MAILDIR && upd_ctx && h->trash) + ctx->changed = 1; + } + break; + + case M_APPENDED: + if (bf) + { + if (!h->appended) + { + h->appended = 1; + if (upd_ctx) ctx->appended++; + } + } + break; + + case M_PURGED: + if (bf) + { + if (!h->purged) + h->purged = 1; + } + else if (h->purged) + h->purged = 0; + break; + + case M_NEW: + +#ifdef USE_IMAP + if (ctx && ctx->magic == M_IMAP) + if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_SEEN)) + return; +#endif + + if (bf) + { + if (h->read || h->old) + { + h->old = 0; + if (upd_ctx) ctx->new++; + if (h->read) + { + h->read = 0; + if (upd_ctx) ctx->unread++; + } + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + } + else if (!h->read) + { + if (!h->old) + if (upd_ctx) ctx->new--; + h->read = 1; + if (upd_ctx) ctx->unread--; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + break; + + case M_OLD: + +#ifdef USE_IMAP + if (ctx && ctx->magic == M_IMAP) + if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_SEEN)) + return; +#endif + + if (bf) + { + if (!h->old) + { + h->old = 1; + if (!h->read) + if (upd_ctx) ctx->new--; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + } + else if (h->old) + { + h->old = 0; + if (!h->read) + if (upd_ctx) ctx->new++; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + break; + + case M_READ: + +#ifdef USE_IMAP + if (ctx && ctx->magic == M_IMAP) + if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_SEEN)) + return; +#endif + + if (bf) + { + if (!h->read) + { + h->read = 1; + if (upd_ctx) ctx->unread--; + if (!h->old) + if (upd_ctx) ctx->new--; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + } + else if (h->read) + { + h->read = 0; + if (upd_ctx) ctx->unread++; + if (!h->old) + if (upd_ctx) ctx->new++; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + break; + + case M_REPLIED: + +#ifdef USE_IMAP + if (ctx && ctx->magic == M_IMAP) + if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_WRITE)) + return; +#endif + + if (bf) + { + if (!h->replied) + { + h->replied = 1; + if (!h->read) + { + h->read = 1; + if (upd_ctx) ctx->unread--; + if (!h->old) + if (upd_ctx) ctx->new--; + } + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + } + else if (h->replied) + { + h->replied = 0; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + break; + + case M_FLAG: + +#ifdef USE_IMAP + if (ctx && ctx->magic == M_IMAP) + if (mutt_bit_isset (((IMAP_DATA *)ctx->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)ctx->data)->rights,IMAP_ACL_WRITE)) + return; +#endif + + if (bf) + { + if (!h->flagged) + { + h->flagged = bf; + if (upd_ctx) ctx->flagged++; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + } + else if (h->flagged) + { + h->flagged = 0; + if (upd_ctx) ctx->flagged--; + h->changed = 1; + if (upd_ctx) ctx->changed = 1; + } + break; + + case M_TAG: + if (bf) + { + if (!h->tagged) + { + h->tagged = 1; + if (upd_ctx) ctx->tagged++; + } + } + else if (h->tagged) + { + h->tagged = 0; + if (upd_ctx) ctx->tagged--; + } + break; + } + + mutt_set_header_color(ctx, h); + + /* if the message status has changed, we need to invalidate the cached + * search results so that any future search will match the current status + * of this message and not what it was at the time it was last searched. + */ + if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged)) + h->searched = 0; +} + +void mutt_tag_set_flag (int flag, int bf) +{ + int j; + + for (j = 0; j < Context->vcount; j++) + if (Context->hdrs[Context->v2r[j]]->tagged) + mutt_set_flag (Context, Context->hdrs[Context->v2r[j]], flag, bf); +} +int mutt_thread_set_flag (HEADER *hdr, int flag, int bf, int subthread) +{ + THREAD *start, *cur = hdr->thread; + + if ((Sort & SORT_MASK) != SORT_THREADS) + { + mutt_error _("Threading is not enabled."); + return (-1); + } + + if (!subthread) + while (cur->parent) + cur = cur->parent; + start = cur; + + if (cur->message) + mutt_set_flag (Context, cur->message, flag, bf); + + if ((cur = cur->child) == NULL) + return (0); + + FOREVER + { + if (cur->message) + mutt_set_flag (Context, cur->message, flag, bf); + + if (cur->child) + cur = cur->child; + else if (cur->next) + cur = cur->next; + else + { + while (!cur->next) + { + cur = cur->parent; + if (cur == start) + return (0); + } + cur = cur->next; + } + } + /* not reached */ +} + +int mutt_change_flag (HEADER *h, int bf) +{ + int i, flag; + event_t event; + + mvprintw (LINES - 1, 0, "%s? (D/N/O/r/*/!): ", bf ? _("Set flag") : _("Clear flag")); + clrtoeol (); + + event = mutt_getch(); + i = event.ch; + if (i == -1) + { + CLEARLINE (LINES-1); + return (-1); + } + + CLEARLINE (LINES-1); + + switch (i) + { + case 'd': + case 'D': + flag = M_DELETE; + break; + + case 'N': + case 'n': + flag = M_NEW; + break; + + case 'o': + case 'O': + if (h) + mutt_set_flag (Context, h, M_READ, !bf); + else + mutt_tag_set_flag (M_READ, !bf); + flag = M_OLD; + break; + + case 'r': + case 'R': + flag = M_REPLIED; + break; + + case '*': + flag = M_TAG; + break; + + case '!': + flag = M_FLAG; + break; + + default: + BEEP (); + return (-1); + } + + if (h) + mutt_set_flag (Context, h, flag, bf); + else + mutt_tag_set_flag (flag, bf); + + return 0; +} diff --git a/flea b/flea new file mode 100755 index 0000000..c4c056f --- /dev/null +++ b/flea @@ -0,0 +1,336 @@ +#!/bin/sh + +# +# File a bug against the Mutt mail user agent. +# + +# +# $Id: muttbug.sh.in,v 3.6 2003/09/20 06:24:10 roessler Exp $ +# + +# +# Copyright (c) 2000 Thomas Roessler <roessler@guug.de> +# +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +# + +SUBMIT="submit@bugs.guug.de" +DEBIAN_SUBMIT="submit@bugs.debian.org" + +prefix=/usr/local + +DEBUGGER=/usr/bin/gdb +SENDMAIL=/sw/sbin/sendmail +sysconfdir=${prefix}/etc +pkgdatadir=@pkgdatadir@ + +include_file () +{ + echo + echo "--- Begin $1" + sed -e 's/^-/- -/' $1 | egrep -v '^[ ]*(#|$)' + echo "--- End $1" + echo +} + +debug_gdb () +{ + cat << EOF > $SCRATCH/gdb.rc +bt +list +quit +EOF + $DEBUGGER -n -x $SCRATCH/gdb.rc -c $CORE mutt +} + +debug_dbx () +{ + cat << EOF > $SCRATCH/dbx.rc +where +list +quit +EOF + $DEBUGGER -s $SCRATCH/dbx.rc mutt $CORE +} + +debug_sdb () +{ + cat << EOF > $SCRATCH/sdb.rc +t +w +q +EOF + $DEBUGGER mutt $CORE < $SCRATCH/sdb.rc +} + +case `echo -n` in +"") n=-n; c= ;; + *) n=; c='\c' ;; +esac + + +exec > /dev/tty +exec < /dev/tty + +SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$ + +mkdir ${SCRATCH} || \ +{ + echo "`basename $0`: Can't create temporary directory." >& 2 ; + exit 1 ; +} + +trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2 + +TEMPLATE=${SCRATCH}/template.txt + +if test -z "$EMAIL" ; then + EMAIL="`mutt -Q from 2> /dev/null | sed -e 's/^from=.\(.*\).$/\1/'`" +fi + +echo "Please enter your e-mail address [$EMAIL]:" +echo $n "> $c" +read EMAILTMP + +if test -n "$EMAILTMP" ; then + EMAIL="$EMAILTMP" +fi + +echo "Please enter a one-line description of the problem you experience:" +echo $n "> $c" +read SUBJECT + +cat <<EOF +What should the severity for this bug report be? + + 0) Feature request, or maybe a bug which is very difficult to + fix due to major design considerations. + + 1) The package fails to perform correctly in some conditions, + or on some systems, or fails to comply with current policy + documents. Most bugs are in this category. + + 2) This bug makes this version of the package unsuitable for + a stable release. + + 3) Dangerous bug. Makes the package in question unusable by + anyone or mostly so, or causes data loss, or introduces a + security hole allowing access to the accounts of users who + use the package. + + 4) Critical bug. Makes unrelated software on the system (or + the whole system) break, or causes serious data loss, or + introduces a security hole on systems where you install the + package. + +EOF +echo $n "Severity? [01234] $c" +read severity +case "$severity" in +0|[Ww]) severity=wishlist ;; +2|[Ii]) severity=important ;; +3|[Gg]) severity=grave ;; +4|[Cc]) severity=critical ;; + *) severity=normal ;; +esac + +if test -x $DEBUGGER ; then + test -f core && CORE=core + echo "If mutt has crashed, it may have saved some program state in" + echo "a file named core. We can include this information with the bug" + echo "report if you wish so." + echo "Do you want to include information gathered from a core file?" + echo "If yes, please enter the path - otherwise just say no: [$CORE]" + echo $n "> $c" + read _CORE + test "$_CORE" && CORE="$_CORE" +fi + +echo $n "Do you want to include your personal mutt configuration files? [Y|n] $c" +read personal +case "$personal" in +[nN]*) personal=no ;; + *) personal=yes ;; +esac + +echo $n "Do you want to include your system's global mutt configuration file? [Y|n] $c" +read global +case "$global" in +[nN]*) global=no ;; + *) global=yes ;; +esac + +if test -f /etc/debian_version ; then + DEBIAN=yes + echo $n "Checking whether mutt has been installed as a package... $c" + DEBIANVERSION="`dpkg -l mutt | grep '^[ih]' | awk '{print $3}'`" 2> /dev/null + if test "$DEBIANVERSION" ; then + DPKG=yes + else + DPKG=no + unset DEBIANVERSION + fi + echo "$DPKG" + echo $n "File this bug with Debian? [Y|n] $c" + read DPKG + case "$DPKG" in + [nN]) DPKG=no ;; + *) DPKG=yes ;; + esac +else + DEBIAN=no + DPKG=no +fi + +if rpm -q mutt > /dev/null 2> /dev/null ; then + echo "Mutt seems to come from an RPM package." + RPMVERSION="`rpm -q mutt`" + RPMPACKAGER="`rpm -q -i mutt | sed -n -e 's/^Packager *: *//p'`" +fi + +MUTTVERSION="`mutt -v | awk '{print $2; exit; }'`" +test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT" + +exec > ${TEMPLATE} + +test "$EMAIL" && echo "From: $EMAIL" +test "$REPLYTO" && echo "Reply-To: $REPLYTO" +test "$ORGANIZATION" && echo "Organization: $ORGANIZATION" + +echo "Subject: mutt-$MUTTVERSION: $SUBJECT" +echo "To: $SUBMIT" +test "$EMAIL" && echo "Bcc: ${EMAIL}" +echo +echo "Package: mutt" +echo "Version: ${DEBIANVERSION-${RPMVERSION-$MUTTVERSION}}" +echo "Severity: $severity" +echo +echo "-- Please type your report below this line" +echo +echo +echo + +if test "$DEBIAN" = "yes" ; then + echo "Obtaining Debian-specific information..." > /dev/tty + bug -p -s dummy mutt < /dev/null 2> /dev/null | \ + sed -n -e "/^-- System Information/,/^---/p" | \ + grep -v '^---' +else + echo "-- System Information" + echo "System Version: `uname -a`" + test -z "$RPMPACKAGER" || echo "RPM Packager: $RPMPACKAGER"; + test -f /etc/redhat-release && echo "RedHat Release: `cat /etc/redhat-release`" + test -f /etc/SuSE-release && echo "SuSE Release: `sed 1q /etc/SuSE-release`" + # Please provide more of these if you have any. +fi + +echo +echo "-- Build environment information" +echo +echo "(Note: This is the build environment installed on the system" +echo "muttbug is run on. Information may or may not match the environment" +echo "used to build mutt.)" +echo +echo "- gcc version information" +echo "gcc" +gcc -v 2>&1 +echo +echo "- CFLAGS" +echo -Wall -pedantic -g -O2 + + +echo +echo "-- Mutt Version Information" +echo +mutt -v + +if test "$CORE" && test -f "$CORE" ; then + echo + echo "-- Core Dump Analysis Output" + echo + + case "$DEBUGGER" in + *sdb) debug_sdb $CORE ;; + *dbx) debug_dbx $CORE ;; + *gdb) debug_gdb $CORE ;; + esac + + echo +fi + +if test "$personal" = "yes" ; then + CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc" + MATCHED="none" + for f in $CANDIDATES; do + if test -f "${HOME}/$f" ; then + MATCHED="${HOME}/$f" + break + fi + done + + if test "$MATCHED" = "none" ; then + echo "Warning: Can't find your personal .muttrc." >&2 + else + include_file $MATCHED + fi +fi + + +if test "$global" = "yes" ; then + CANDIDATES="Muttrc-${MUTTVERSION} Muttrc" + DIRECTORIES="$sysconfdir $pkgdatadir" + MATCHED="none" + for d in $DIRECTORIES ; do + for f in $CANDIDATES; do + if test -f $d/$f ; then + MATCHED="$d/$f" + break + fi + done + test "$MATCHED" = "none" || break + done + + if test "$MATCHED" = "none" ; then + echo "Warning: Can't find global Muttrc." >&2 + else + include_file $MATCHED + fi +fi + +exec > /dev/tty + +cp $TEMPLATE $SCRATCH/mutt-bug.txt + +input="e" +while : ; do + if test "$input" = "e" ; then + ${VISUAL-${EDITOR-vi}} $SCRATCH/mutt-bug.txt + if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then + echo "Warning: Bug report was not modified!" + fi + fi + + echo $n "Submit, Edit, View, Quit? [S|e|v|q] $c" + read _input + input="`echo $_input | tr EVSQ evsq`" + case $input in + e*) ;; + v*) ${PAGER-more} $SCRATCH/mutt-bug.txt ;; + s*|"") $SENDMAIL -t < $SCRATCH/mutt-bug.txt ; exit ;; + q*) exit + esac +done + diff --git a/from.c b/from.c new file mode 100644 index 0000000..0fa32cb --- /dev/null +++ b/from.c @@ -0,0 +1,183 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" + +#include <ctype.h> +#include <string.h> + +static const char *next_word (const char *s) +{ + while (*s && !ISSPACE (*s)) + s++; + SKIPWS (s); + return s; +} + +int mutt_check_month (const char *s) +{ + int i; + + for (i = 0; i < 12; i++) + if (mutt_strncasecmp (s, Months[i], 3) == 0) + return (i); + return (-1); /* error */ +} + +static int is_day_name (const char *s) +{ + int i; + + if ((strlen (s) < 3) || !*(s + 3) || !ISSPACE (*(s+3))) + return 0; + for (i=0; i<7; i++) + if (mutt_strncasecmp (s, Weekdays[i], 3) == 0) + return 1; + return 0; +} + +/* + * A valid message separator looks like: + * + * From [ <return-path> ] <weekday> <month> <day> <time> [ <timezone> ] <year> + */ + +int is_from (const char *s, char *path, size_t pathlen, time_t *tp) +{ + struct tm tm; + int yr; + + if (path) + *path = 0; + + if (mutt_strncmp ("From ", s, 5) != 0) + return 0; + + s = next_word (s); /* skip over the From part. */ + if (!*s) + return 0; + + dprint (3, (debugfile, "\nis_from(): parsing: %s", s)); + + if (!is_day_name (s)) + { + const char *p; + size_t len; + short q = 0; + + for (p = s; *p && (q || !ISSPACE (*p)); p++) + { + if (*p == '\\') + { + if (*++p == '\0') + return 0; + } + else if (*p == '"') + { + q = !q; + } + } + + if (q || !*p) return 0; + + if (path) + { + len = (size_t) (p - s); + if (len + 1 > pathlen) + len = pathlen - 1; + memcpy (path, s, len); + path[len] = 0; + dprint (3, (debugfile, "is_from(): got return path: %s\n", path)); + } + + s = p + 1; + SKIPWS (s); + if (!*s) + return 0; + + if (!is_day_name (s)) + { + dprint(1, (debugfile, "is_from(): expected weekday, got: %s\n", s)); + return 0; + } + } + + s = next_word (s); + if (!*s) return 0; + + /* do a quick check to make sure that this isn't really the day of the week. + * this could happen when receiving mail from a local user whose login name + * is the same as a three-letter abbreviation of the day of the week. + */ + if (is_day_name (s)) + { + s = next_word (s); + if (!*s) return 0; + } + + /* now we should be on the month. */ + if ((tm.tm_mon = mutt_check_month (s)) < 0) return 0; + + /* day */ + s = next_word (s); + if (!*s) return 0; + if (sscanf (s, "%d", &tm.tm_mday) != 1) return 0; + + /* time */ + s = next_word (s); + if (!*s) return 0; + + /* Accept either HH:MM or HH:MM:SS */ + if (sscanf (s, "%d:%d:%d", &tm.tm_hour, &tm.tm_min, &tm.tm_sec) == 3); + else if (sscanf (s, "%d:%d", &tm.tm_hour, &tm.tm_min) == 2) + tm.tm_sec = 0; + else + return 0; + + s = next_word (s); + if (!*s) return 0; + + /* timezone? */ + if (isalpha ((unsigned char) *s) || *s == '+' || *s == '-') + { + s = next_word (s); + if (!*s) return 0; + + /* + * some places have two timezone fields after the time, e.g. + * From xxxx@yyyyyyy.fr Wed Aug 2 00:39:12 MET DST 1995 + */ + if (isalpha ((unsigned char) *s)) + { + s = next_word (s); + if (!*s) return 0; + } + } + + /* year */ + if (sscanf (s, "%d", &yr) != 1) return 0; + tm.tm_year = yr > 1900 ? yr - 1900 : (yr < 70 ? yr + 100 : yr); + + dprint (3,(debugfile, "is_from(): month=%d, day=%d, hr=%d, min=%d, sec=%d, yr=%d.\n", + tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year)); + + tm.tm_isdst = -1; + + if (tp) *tp = mutt_mktime (&tm, 0); + return 1; +} diff --git a/functions.h b/functions.h new file mode 100644 index 0000000..26d1937 --- /dev/null +++ b/functions.h @@ -0,0 +1,471 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * This file contains the structures needed to parse ``bind'' commands, as + * well as the default bindings for each menu. + * + * Notes: + * + * - If you want to bind \n or \r, use M_ENTER_S so that it will work + * correctly under both ncurses and S-Lang + * + * - If you need to bind a control char, use the octal value because the \cX + * construct does not work at this level. + * + */ + +struct binding_t OpGeneric[] = { + { "top-page", OP_TOP_PAGE, "H" }, + { "next-entry", OP_NEXT_ENTRY, "j" }, + { "previous-entry", OP_PREV_ENTRY, "k" }, + { "bottom-page", OP_BOTTOM_PAGE, "L" }, + { "refresh", OP_REDRAW, "\014" }, + { "middle-page", OP_MIDDLE_PAGE, "M" }, + { "search-next", OP_SEARCH_NEXT, "n" }, + { "exit", OP_EXIT, "q" }, + { "tag-entry", OP_TAG, "t" }, + { "next-page", OP_NEXT_PAGE, "z" }, + { "previous-page", OP_PREV_PAGE, "Z" }, + { "last-entry", OP_LAST_ENTRY, "*" }, + { "first-entry", OP_FIRST_ENTRY, "=" }, + { "enter-command", OP_ENTER_COMMAND, ":" }, + { "next-line", OP_NEXT_LINE, ">" }, + { "previous-line", OP_PREV_LINE, "<" }, + { "half-up", OP_HALF_UP, "[" }, + { "half-down", OP_HALF_DOWN, "]" }, + { "help", OP_HELP, "?" }, + { "tag-prefix", OP_TAG_PREFIX, ";" }, + { "tag-prefix-cond", OP_TAG_PREFIX_COND, NULL }, + { "end-cond", OP_END_COND, NULL }, + { "shell-escape", OP_SHELL_ESCAPE, "!" }, + { "select-entry", OP_GENERIC_SELECT_ENTRY,M_ENTER_S }, + { "search", OP_SEARCH, "/" }, + { "search-reverse", OP_SEARCH_REVERSE, "\033/" }, + { "search-opposite", OP_SEARCH_OPPOSITE, NULL }, + { "jump", OP_JUMP, NULL }, + { "current-top", OP_CURRENT_TOP, NULL }, + { "current-middle", OP_CURRENT_MIDDLE, NULL }, + { "current-bottom", OP_CURRENT_BOTTOM, NULL }, + { "what-key", OP_WHAT_KEY, NULL }, + { NULL, 0, NULL } +}; + +struct binding_t OpMain[] = { + { "create-alias", OP_CREATE_ALIAS, "a" }, + { "bounce-message", OP_BOUNCE_MESSAGE, "b" }, + { "change-folder", OP_MAIN_CHANGE_FOLDER, "c" }, + { "change-folder-readonly", OP_MAIN_CHANGE_FOLDER_READONLY, "\033c" }, +#ifdef USE_NNTP + { "change-newsgroup", OP_MAIN_CHANGE_GROUP, "i" }, + { "change-newsgroup-readonly",OP_MAIN_CHANGE_GROUP_READONLY, "\033i" }, +#endif + { "collapse-thread", OP_MAIN_COLLAPSE_THREAD, "\033v" }, + { "collapse-all", OP_MAIN_COLLAPSE_ALL, "\033V" }, + { "copy-message", OP_COPY_MESSAGE, "C" }, + { "decode-copy", OP_DECODE_COPY, "\033C" }, + { "decode-save", OP_DECODE_SAVE, "\033s" }, + { "delete-message", OP_DELETE, "d" }, + { "delete-pattern", OP_MAIN_DELETE_PATTERN, "D" }, + { "delete-thread", OP_DELETE_THREAD, "\004" }, + { "delete-subthread", OP_DELETE_SUBTHREAD, "\033d" }, + { "edit", OP_EDIT_MESSAGE, "e" }, + { "edit-type", OP_EDIT_TYPE, "\005" }, + { "forward-message", OP_FORWARD_MESSAGE, "f" }, +#ifdef USE_NNTP + { "forward-to-group", OP_FORWARD_TO_GROUP, "\033F" }, + { "followup-message", OP_FOLLOWUP, "F" }, + { "get-children", OP_GET_CHILDREN, NULL }, + { "get-message", OP_GET_MESSAGE, "\007" }, + { "get-parent", OP_GET_PARENT, "\033G" }, + { "reconstruct-thread", OP_RECONSTRUCT_THREAD, NULL }, +#endif + { "flag-message", OP_FLAG_MESSAGE, "\033f" }, + { "group-reply", OP_GROUP_REPLY, "g" }, +#ifdef USE_POP + { "fetch-mail", OP_MAIN_FETCH_MAIL, "G" }, +#endif +#ifdef USE_IMAP + { "imap-fetch-mail", OP_MAIN_IMAP_FETCH, NULL }, +#endif + { "display-toggle-weed", OP_DISPLAY_HEADERS, "h" }, + { "next-undeleted", OP_MAIN_NEXT_UNDELETED, "j" }, + { "previous-undeleted", OP_MAIN_PREV_UNDELETED, "k" }, + { "limit", OP_MAIN_LIMIT, "l" }, + { "list-reply", OP_LIST_REPLY, "L" }, + { "mail", OP_MAIL, "m" }, + { "toggle-new", OP_TOGGLE_NEW, "N" }, + { "toggle-write", OP_TOGGLE_WRITE, "%" }, + { "next-thread", OP_MAIN_NEXT_THREAD, "\016" }, + { "next-subthread", OP_MAIN_NEXT_SUBTHREAD, "\033n" }, + { "purge-message", OP_PURGE_MESSAGE, NULL }, + { "query", OP_QUERY, "Q" }, + { "quit", OP_QUIT, "q" }, + { "reply", OP_REPLY, "r" }, + { "show-limit", OP_MAIN_SHOW_LIMIT, "\033l" }, + { "sort-mailbox", OP_SORT, "o" }, + { "sort-reverse", OP_SORT_REVERSE, "O" }, + { "print-message", OP_PRINT, "p" }, +#ifdef USE_NNTP + { "post-message", OP_POST, "P" }, +#endif + { "previous-thread", OP_MAIN_PREV_THREAD, "\020" }, + { "previous-subthread", OP_MAIN_PREV_SUBTHREAD, "\033p" }, + { "recall-message", OP_RECALL_MESSAGE, "R" }, + { "read-thread", OP_MAIN_READ_THREAD, "\022" }, + { "read-subthread", OP_MAIN_READ_SUBTHREAD, "\033r" }, + { "resend-message", OP_RESEND, "\033e" }, + { "save-message", OP_SAVE, "s" }, + { "tag-pattern", OP_MAIN_TAG_PATTERN, "T" }, + { "tag-subthread", OP_TAG_SUBTHREAD, NULL }, + { "tag-thread", OP_TAG_THREAD, "\033t" }, + { "untag-pattern", OP_MAIN_UNTAG_PATTERN, "\024" }, + { "undelete-message", OP_UNDELETE, "u" }, + { "undelete-pattern", OP_MAIN_UNDELETE_PATTERN, "U"}, + { "undelete-subthread", OP_UNDELETE_SUBTHREAD, "\033u" }, + { "undelete-thread", OP_UNDELETE_THREAD, "\025" }, + { "view-attachments", OP_VIEW_ATTACHMENTS, "v" }, + { "show-version", OP_VERSION, "V" }, + { "set-flag", OP_MAIN_SET_FLAG, "w" }, + { "clear-flag", OP_MAIN_CLEAR_FLAG, "W" }, + { "toggle-read", OP_TOGGLE_READ, "X" }, +#ifdef USE_NNTP + { "catchup", OP_CATCHUP, "y" }, +#endif + { "display-message", OP_DISPLAY_MESSAGE, M_ENTER_S }, + { "buffy-list", OP_BUFFY_LIST, "." }, + { "sync-mailbox", OP_MAIN_SYNC_FOLDER, "$" }, + { "display-address", OP_DISPLAY_ADDRESS, "@" }, + { "pipe-message", OP_PIPE, "|" }, + { "next-new", OP_MAIN_NEXT_NEW, NULL }, + { "next-new-then-unread", OP_MAIN_NEXT_NEW_THEN_UNREAD, "\t" }, + { "previous-new", OP_MAIN_PREV_NEW, NULL }, + { "previous-new-then-unread", OP_MAIN_PREV_NEW_THEN_UNREAD, "\033\t" }, + { "next-unread", OP_MAIN_NEXT_UNREAD, NULL }, + { "previous-unread", OP_MAIN_PREV_UNREAD, NULL }, + { "parent-message", OP_MAIN_PARENT_MESSAGE, NULL }, + + + { "extract-keys", OP_EXTRACT_KEYS, "\013" }, + { "forget-passphrase", OP_FORGET_PASSPHRASE, "\006" }, + { "check-traditional-pgp", OP_CHECK_TRADITIONAL, "\033P" }, + { "mail-key", OP_MAIL_KEY, "\033k" }, + { "decrypt-copy", OP_DECRYPT_COPY, NULL }, + { "decrypt-save", OP_DECRYPT_SAVE, NULL }, + + + { NULL, 0, NULL } +}; + +struct binding_t OpPager[] = { + { "create-alias", OP_CREATE_ALIAS, "a" }, + { "bounce-message", OP_BOUNCE_MESSAGE, "b" }, + { "change-folder", OP_MAIN_CHANGE_FOLDER, "c" }, + { "change-folder-readonly", OP_MAIN_CHANGE_FOLDER_READONLY, "\033c" }, +#ifdef USE_NNTP + { "change-newsgroup", OP_MAIN_CHANGE_GROUP, "i" }, + { "change-newsgroup-readonly",OP_MAIN_CHANGE_GROUP_READONLY, "\033i" }, +#endif + { "copy-message", OP_COPY_MESSAGE, "C" }, + { "decode-copy", OP_DECODE_COPY, "\033C" }, + { "delete-message", OP_DELETE, "d" }, + { "delete-thread", OP_DELETE_THREAD, "\004" }, + { "delete-subthread", OP_DELETE_SUBTHREAD, "\033d" }, + { "edit", OP_EDIT_MESSAGE, "e" }, + { "edit-type", OP_EDIT_TYPE, "\005" }, +#ifdef USE_NNTP + { "followup-message", OP_FOLLOWUP, "F" }, + { "forward-to-group", OP_FORWARD_TO_GROUP, "\033F" }, +#endif + { "forward-message", OP_FORWARD_MESSAGE, "f" }, + { "flag-message", OP_FLAG_MESSAGE, "\033f" }, + { "group-reply", OP_GROUP_REPLY, "g" }, +#ifdef USE_IMAP + { "imap-fetch-mail", OP_MAIN_IMAP_FETCH, NULL }, +#endif + { "display-toggle-weed", OP_DISPLAY_HEADERS, "h" }, + { "next-undeleted", OP_MAIN_NEXT_UNDELETED, "j" }, + { "next-entry", OP_NEXT_ENTRY, "J" }, + { "previous-undeleted",OP_MAIN_PREV_UNDELETED, "k" }, + { "previous-entry", OP_PREV_ENTRY, "K" }, + { "list-reply", OP_LIST_REPLY, "L" }, + { "redraw-screen", OP_REDRAW, "\014" }, + { "mail", OP_MAIL, "m" }, + { "mark-as-new", OP_TOGGLE_NEW, "N" }, + { "search-next", OP_SEARCH_NEXT, "n" }, + { "next-thread", OP_MAIN_NEXT_THREAD, "\016" }, + { "next-subthread", OP_MAIN_NEXT_SUBTHREAD, "\033n" }, + { "print-message", OP_PRINT, "p" }, +#ifdef USE_NNTP + { "post-message", OP_POST, "P" }, +#endif + { "previous-thread", OP_MAIN_PREV_THREAD, "\020" }, + { "previous-subthread",OP_MAIN_PREV_SUBTHREAD, "\033p" }, + { "purge-message", OP_PURGE_MESSAGE, NULL }, + { "quit", OP_QUIT, "Q" }, + { "exit", OP_EXIT, "q" }, + { "reply", OP_REPLY, "r" }, + { "recall-message", OP_RECALL_MESSAGE, "R" }, + { "read-thread", OP_MAIN_READ_THREAD, "\022" }, + { "read-subthread", OP_MAIN_READ_SUBTHREAD, "\033r" }, + { "resend-message", OP_RESEND, "\033e" }, + { "save-message", OP_SAVE, "s" }, + { "skip-quoted", OP_PAGER_SKIP_QUOTED, "S" }, + { "decode-save", OP_DECODE_SAVE, "\033s" }, + { "tag-message", OP_TAG, "t" }, + { "toggle-quoted", OP_PAGER_HIDE_QUOTED, "T" }, + { "undelete-message", OP_UNDELETE, "u" }, + { "undelete-subthread",OP_UNDELETE_SUBTHREAD, "\033u" }, + { "undelete-thread", OP_UNDELETE_THREAD, "\025" }, + { "view-attachments", OP_VIEW_ATTACHMENTS, "v" }, + { "show-version", OP_VERSION, "V" }, + { "search-toggle", OP_SEARCH_TOGGLE, "\\" }, + { "display-address", OP_DISPLAY_ADDRESS, "@" }, + { "next-new", OP_MAIN_NEXT_NEW, NULL }, + { "next-new-then-unread", + OP_MAIN_NEXT_NEW_THEN_UNREAD, "\t" }, + { "pipe-message", OP_PIPE, "|" }, + { "help", OP_HELP, "?" }, + { "next-page", OP_NEXT_PAGE, " " }, + { "previous-page", OP_PREV_PAGE, "-" }, + { "top", OP_PAGER_TOP, "^" }, + { "sync-mailbox", OP_MAIN_SYNC_FOLDER, "$" }, + { "shell-escape", OP_SHELL_ESCAPE, "!" }, + { "enter-command", OP_ENTER_COMMAND, ":" }, + { "buffy-list", OP_BUFFY_LIST, "." }, + { "search", OP_SEARCH, "/" }, + { "search-reverse", OP_SEARCH_REVERSE, "\033/" }, + { "search-opposite", OP_SEARCH_OPPOSITE, NULL }, + { "next-line", OP_NEXT_LINE, M_ENTER_S }, + { "jump", OP_JUMP, NULL }, + { "next-unread", OP_MAIN_NEXT_UNREAD, NULL }, + { "previous-new", OP_MAIN_PREV_NEW, NULL }, + { "previous-new-then-unread", + OP_MAIN_PREV_NEW_THEN_UNREAD, NULL }, + { "previous-unread", OP_MAIN_PREV_UNREAD, NULL }, + { "half-up", OP_HALF_UP, NULL }, + { "half-down", OP_HALF_DOWN, NULL }, + { "previous-line", OP_PREV_LINE, NULL }, + { "bottom", OP_PAGER_BOTTOM, NULL }, + { "parent-message", OP_MAIN_PARENT_MESSAGE, NULL }, + + + + + { "check-traditional-pgp", OP_CHECK_TRADITIONAL, "\033P" }, + { "mail-key", OP_MAIL_KEY, "\033k" }, + { "extract-keys", OP_EXTRACT_KEYS, "\013" }, + { "forget-passphrase",OP_FORGET_PASSPHRASE, "\006" }, + { "decrypt-copy", OP_DECRYPT_COPY, NULL }, + { "decrypt-save", OP_DECRYPT_SAVE, NULL }, + + + { NULL, 0, NULL } +}; + +struct binding_t OpAttach[] = { + { "bounce-message", OP_BOUNCE_MESSAGE, "b" }, + { "display-toggle-weed", OP_DISPLAY_HEADERS, "h" }, + { "edit-type", OP_EDIT_TYPE, "\005" }, +#ifdef USE_NNTP + { "followup-message", OP_FOLLOWUP, "F" }, + { "forward-to-group", OP_FORWARD_TO_GROUP, "\033F" }, +#endif + { "print-entry", OP_PRINT, "p" }, + { "save-entry", OP_SAVE, "s" }, + { "pipe-entry", OP_PIPE, "|" }, + { "view-mailcap", OP_ATTACH_VIEW_MAILCAP, "m" }, + { "reply", OP_REPLY, "r" }, + { "resend-message", OP_RESEND, "\033e" }, + { "group-reply", OP_GROUP_REPLY, "g" }, + { "list-reply", OP_LIST_REPLY, "L" }, + { "forward-message", OP_FORWARD_MESSAGE, "f" }, + { "view-text", OP_ATTACH_VIEW_TEXT, "T" }, + { "view-attach", OP_VIEW_ATTACH, M_ENTER_S }, + { "delete-entry", OP_DELETE, "d" }, + { "undelete-entry", OP_UNDELETE, "u" }, + { "collapse-parts", OP_ATTACH_COLLAPSE, "v" }, + + { "check-traditional-pgp", OP_CHECK_TRADITIONAL, "\033P" }, + { "extract-keys", OP_EXTRACT_KEYS, "\013" }, + { "forget-passphrase", OP_FORGET_PASSPHRASE, "\006" }, + + { NULL, 0, NULL } +}; + +struct binding_t OpCompose[] = { + { "attach-file", OP_COMPOSE_ATTACH_FILE, "a" }, + { "attach-message", OP_COMPOSE_ATTACH_MESSAGE, "A" }, + { "attach-news-message",OP_COMPOSE_ATTACH_NEWS_MESSAGE,"\033a" }, + { "edit-bcc", OP_COMPOSE_EDIT_BCC, "b" }, + { "edit-cc", OP_COMPOSE_EDIT_CC, "c" }, + { "copy-file", OP_SAVE, "C" }, + { "detach-file", OP_DELETE, "D" }, + { "toggle-disposition",OP_COMPOSE_TOGGLE_DISPOSITION, "\004" }, + { "edit-description", OP_COMPOSE_EDIT_DESCRIPTION, "d" }, + { "edit-message", OP_COMPOSE_EDIT_MESSAGE, "e" }, + { "edit-headers", OP_COMPOSE_EDIT_HEADERS, "E" }, + { "edit-file", OP_COMPOSE_EDIT_FILE, "\030e" }, + { "edit-encoding", OP_COMPOSE_EDIT_ENCODING, "\005" }, + { "edit-from", OP_COMPOSE_EDIT_FROM, "\033f" }, + { "edit-fcc", OP_COMPOSE_EDIT_FCC, "f" }, + { "filter-entry", OP_FILTER, "F" }, + { "get-attachment", OP_COMPOSE_GET_ATTACHMENT, "G" }, + { "display-toggle-weed", OP_DISPLAY_HEADERS, "h" }, + { "ispell", OP_COMPOSE_ISPELL, "i" }, + { "print-entry", OP_PRINT, "l" }, + { "edit-mime", OP_COMPOSE_EDIT_MIME, "m" }, + { "new-mime", OP_COMPOSE_NEW_MIME, "n" }, +#ifdef USE_NNTP + { "edit-newsgroups", OP_COMPOSE_EDIT_NEWSGROUPS, "N" }, + { "edit-followup-to", OP_COMPOSE_EDIT_FOLLOWUP_TO, "o" }, + { "edit-x-comment-to",OP_COMPOSE_EDIT_X_COMMENT_TO, "x" }, +#endif + { "postpone-message", OP_COMPOSE_POSTPONE_MESSAGE, "P" }, + { "edit-reply-to", OP_COMPOSE_EDIT_REPLY_TO, "r" }, + { "rename-file", OP_COMPOSE_RENAME_FILE, "R" }, + { "edit-subject", OP_COMPOSE_EDIT_SUBJECT, "s" }, + { "edit-to", OP_COMPOSE_EDIT_TO, "t" }, + { "edit-type", OP_EDIT_TYPE, "\024" }, + { "write-fcc", OP_COMPOSE_WRITE_MESSAGE, "w" }, + { "toggle-unlink", OP_COMPOSE_TOGGLE_UNLINK, "u" }, + { "toggle-recode", OP_COMPOSE_TOGGLE_RECODE, NULL }, + { "update-encoding", OP_COMPOSE_UPDATE_ENCODING, "U" }, + { "view-attach", OP_VIEW_ATTACH, M_ENTER_S }, + { "send-message", OP_COMPOSE_SEND_MESSAGE, "y" }, + { "pipe-entry", OP_PIPE, "|" }, + + { "attach-key", OP_COMPOSE_ATTACH_KEY, "\033k" }, + { "pgp-menu", OP_COMPOSE_PGP_MENU, "p" }, + + { "forget-passphrase",OP_FORGET_PASSPHRASE, "\006" }, + + { "smime-menu", OP_COMPOSE_SMIME_MENU, "S" }, + +#ifdef MIXMASTER + { "mix", OP_COMPOSE_MIX, "M" }, +#endif + + { NULL, 0, NULL } +}; + +struct binding_t OpPost[] = { + { "delete-entry", OP_DELETE, "d" }, + { "undelete-entry", OP_UNDELETE, "u" }, + { NULL, 0, NULL } +}; + +struct binding_t OpAlias[] = { + { "delete-entry", OP_DELETE, "d" }, + { "undelete-entry", OP_UNDELETE, "u" }, + { NULL, 0, NULL } +}; + + +/* The file browser */ +struct binding_t OpBrowser[] = { + { "change-dir", OP_CHANGE_DIRECTORY, "c" }, + { "display-filename", OP_BROWSER_TELL, "@" }, + { "enter-mask", OP_ENTER_MASK, "m" }, + { "sort", OP_SORT, "o" }, + { "sort-reverse", OP_SORT_REVERSE, "O" }, + { "select-new", OP_BROWSER_NEW_FILE, "N" }, + { "check-new", OP_CHECK_NEW, NULL }, + { "toggle-mailboxes", OP_TOGGLE_MAILBOXES, "\t" }, +#ifdef USE_NNTP + { "reload-active", OP_LOAD_ACTIVE, "g"}, + { "subscribe-pattern", OP_SUBSCRIBE_PATTERN, "S" }, + { "unsubscribe-pattern", OP_UNSUBSCRIBE_PATTERN, "U" }, + { "catchup", OP_CATCHUP, "y" }, + { "uncatchup", OP_UNCATCHUP, "Y" }, +#endif + { "view-file", OP_BROWSER_VIEW_FILE, " " }, + { "buffy-list", OP_BUFFY_LIST, "." }, +#ifdef USE_IMAP + { "create-mailbox", OP_CREATE_MAILBOX, "C" }, + { "delete-mailbox", OP_DELETE_MAILBOX, "d" }, +#endif +#if defined USE_IMAP || defined USE_NNTP + { "subscribe", OP_BROWSER_SUBSCRIBE, "s" }, + { "unsubscribe", OP_BROWSER_UNSUBSCRIBE, "u" }, +#endif +#ifdef USE_IMAP + { "toggle-subscribed", OP_BROWSER_TOGGLE_LSUB, "T" }, +#endif + { NULL, 0, NULL } +}; + +/* External Query Menu */ +struct binding_t OpQuery[] = { + { "create-alias", OP_CREATE_ALIAS, "a" }, + { "mail", OP_MAIL, "m" }, + { "query", OP_QUERY, "Q" }, + { "query-append", OP_QUERY_APPEND, "A" }, + { NULL, 0, NULL } +}; + +struct binding_t OpEditor[] = { + { "bol", OP_EDITOR_BOL, "\001" }, + { "backward-char", OP_EDITOR_BACKWARD_CHAR, "\002" }, + { "backward-word", OP_EDITOR_BACKWARD_WORD, "\033b"}, + { "capitalize-word", OP_EDITOR_CAPITALIZE_WORD, "\033c"}, + { "downcase-word", OP_EDITOR_DOWNCASE_WORD, "\033l"}, + { "upcase-word", OP_EDITOR_UPCASE_WORD, "\033u"}, + { "delete-char", OP_EDITOR_DELETE_CHAR, "\004" }, + { "eol", OP_EDITOR_EOL, "\005" }, + { "forward-char", OP_EDITOR_FORWARD_CHAR, "\006" }, + { "forward-word", OP_EDITOR_FORWARD_WORD, "\033f"}, + { "backspace", OP_EDITOR_BACKSPACE, "\010" }, + { "kill-eol", OP_EDITOR_KILL_EOL, "\013" }, + { "kill-eow", OP_EDITOR_KILL_EOW, "\033d"}, + { "kill-line", OP_EDITOR_KILL_LINE, "\025" }, + { "quote-char", OP_EDITOR_QUOTE_CHAR, "\026" }, + { "kill-word", OP_EDITOR_KILL_WORD, "\027" }, + { "complete", OP_EDITOR_COMPLETE, "\t" }, + { "complete-query", OP_EDITOR_COMPLETE_QUERY, "\024" }, + { "buffy-cycle", OP_EDITOR_BUFFY_CYCLE, " " }, + { "history-up", OP_EDITOR_HISTORY_UP, NULL }, + { "history-down", OP_EDITOR_HISTORY_DOWN, NULL }, + { "transpose-chars", OP_EDITOR_TRANSPOSE_CHARS, NULL }, + { NULL, 0, NULL } +}; + + + +struct binding_t OpPgp[] = { + { "verify-key", OP_VERIFY_KEY, "c" }, + { "view-name", OP_VIEW_ID, "%" }, + { NULL, 0, NULL } +}; + +/* Don't know an useful key binding yet. But. just in case, adding this already */ +struct binding_t OpSmime[] = { + { NULL, 0, NULL } +}; + +#ifdef MIXMASTER +struct binding_t OpMix[] = { + { "accept", OP_MIX_USE, M_ENTER_S }, + { "append", OP_MIX_APPEND, "a" }, + { "insert", OP_MIX_INSERT, "i" }, + { "delete", OP_MIX_DELETE, "d" }, + { "chain-prev", OP_MIX_CHAIN_PREV, "<left>" }, + { "chain-next", OP_MIX_CHAIN_NEXT, "<right>" }, + { NULL, 0, NULL } +}; +#endif /* MIXMASTER */ diff --git a/gen_defs b/gen_defs new file mode 100755 index 0000000..0277a28 --- /dev/null +++ b/gen_defs @@ -0,0 +1,35 @@ +#!/bin/sh + +# $Id: gen_defs,v 3.0 2002/01/24 12:10:49 roessler Exp $ + +echo '/* Automatically generated by gen_defs. Do not edit! */' +echo '' + +for mode in help defs; do + case $mode in + help) + echo "#ifdef HELP_C" + echo "const char *HelpStrings[] = {" + expr='s;^[^ ]* *\(.*\); N_(\1),;' + ;; + *) + echo "enum {" + expr='s;^\([^ ]*\).*; \1,;' + ;; + esac + for i in $*; do + sed -e '/^\/\*/d' -e "$expr" < $i + done + if test $mode = help; then + echo ' NULL' + else + echo ' OP_MAX' + fi + echo "};" + if test $mode = help; then + echo "#endif /* MAIN_C */" + echo '' + fi +done + +exit 0 diff --git a/getdomain.c b/getdomain.c new file mode 100644 index 0000000..23b2f48 --- /dev/null +++ b/getdomain.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <ctype.h> +#include <string.h> + +#include "mutt.h" + +#ifndef STDC_HEADERS +int fclose (); +#endif + +/* poor man's version of getdomainname() for systems where it does not return + * return the DNS domain, but the NIS domain. + */ + +static void strip_trailing_dot (char *q) +{ + char *p = q; + + for (; *q; q++) + p = q; + + if (*p == '.') + *p = '\0'; +} + +int getdnsdomainname (char *s, size_t l) +{ + FILE *f; + char tmp[1024]; + char *p = NULL; + char *q; + + if ((f = fopen ("/etc/resolv.conf", "r")) == NULL) return (-1); + + tmp[sizeof (tmp) - 1] = 0; + + l--; /* save room for the terminal \0 */ + + while (fgets (tmp, sizeof (tmp) - 1, f) != NULL) + { + p = tmp; + while (ISSPACE (*p)) p++; + if (mutt_strncmp ("domain", p, 6) == 0 || mutt_strncmp ("search", p, 6) == 0) + { + p += 6; + + for (q = strtok (p, " \t\n"); q; q = strtok (NULL, " \t\n")) + if (strcmp (q, ".")) + break; + + if (q) + { + strip_trailing_dot (q); + strfcpy (s, q, l); + safe_fclose (&f); + return 0; + } + + } + } + + safe_fclose (&f); + return (-1); +} diff --git a/globals.h b/globals.h new file mode 100644 index 0000000..af1734d --- /dev/null +++ b/globals.h @@ -0,0 +1,261 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +WHERE void (*mutt_error) (const char *, ...); +WHERE void (*mutt_message) (const char *, ...); + +WHERE CONTEXT *Context; + +WHERE char Errorbuf[STRING]; +WHERE char AttachmentMarker[STRING]; + +WHERE char Quotebuf[SHORT_STRING]; + +#if defined(DL_STANDALONE) && defined(USE_DOTLOCK) +WHERE char *MuttDotlock; +#endif + +WHERE ADDRESS *From; + +WHERE char *AliasFile; +WHERE char *AliasFmt; +WHERE char *AttachSep; +WHERE char *Attribution; +WHERE char *AttachFormat; +WHERE char *Charset; +WHERE char *ComposeFormat; +WHERE char *ContentType; +WHERE char *DefaultHook; +WHERE char *DateFmt; +WHERE char *DisplayFilter; +WHERE char *DsnNotify; +WHERE char *DsnReturn; +WHERE char *Editor; +WHERE char *EscChar; +WHERE char *FolderFormat; +WHERE char *ForwFmt; +WHERE char *Fqdn; +WHERE char *HdrFmt; +WHERE char *Homedir; +WHERE char *Hostname; +#ifdef USE_IMAP +WHERE char *ImapAuthenticators INITVAL (NULL); +WHERE char *ImapDelimChars INITVAL (NULL); +WHERE char *ImapHomeNamespace INITVAL (NULL); +WHERE char *ImapPass INITVAL (NULL); +WHERE char *ImapUser INITVAL (NULL); +#endif +WHERE char *Inbox; +WHERE char *Ispell; +WHERE char *Locale; +WHERE char *MailcapPath; +WHERE char *Maildir; +WHERE char *MhFlagged; +WHERE char *MhReplied; +WHERE char *MhUnseen; +WHERE char *MsgFmt; + +#ifdef USE_SOCKET +WHERE char *Preconnect INITVAL (NULL); +WHERE char *Tunnel INITVAL (NULL); +#endif /* USE_SOCKET */ + +#ifdef MIXMASTER +WHERE char *Mixmaster; +WHERE char *MixEntryFormat; +#endif + +WHERE char *Muttrc INITVAL (NULL); +#ifdef USE_NNTP +WHERE char *NewsCacheDir; +WHERE char *GroupFormat; +WHERE char *Inews; +WHERE char *NewsServer; +WHERE char *NntpUser; +WHERE char *NntpPass; +WHERE char *NewsRc; +#endif +WHERE char *Outbox; +WHERE char *Pager; +WHERE char *PagerFmt; +WHERE char *PipeSep; +#ifdef USE_POP +WHERE char *PopAuthenticators INITVAL (NULL); +WHERE short PopCheckTimeout; +WHERE char *PopHost; +WHERE char *PopPass INITVAL (NULL); +WHERE char *PopUser INITVAL (NULL); +#endif +WHERE char *PostIndentString; +WHERE char *Postponed; +WHERE char *Prefix; +WHERE char *PrintCmd; +WHERE char *QueryCmd; +WHERE char *Realname; +WHERE char *SendCharset; +WHERE char *Sendmail; +WHERE char *Shell; +WHERE char *Signature; +WHERE char *SimpleSearch; +#if defined(USE_LIBESMTP) +WHERE char *SmtpAuthUser; +WHERE char *SmtpAuthPass; +WHERE char *SmtpHost; +WHERE unsigned short SmtpPort; +#endif +WHERE char *Spoolfile; +#if defined(USE_SSL) || defined(USE_NSS) +WHERE char *SslCertFile INITVAL (NULL); +WHERE char *SslEntropyFile INITVAL (NULL); +#endif +WHERE char *StChars; +WHERE char *Status; +WHERE char *Tempdir; +WHERE char *Tochars; +WHERE char *TrashPath; +WHERE char *Username; +WHERE char *Visual; + +WHERE char *LastFolder; + +WHERE LIST *AutoViewList INITVAL(0); +WHERE LIST *AlternativeOrderList INITVAL(0); +WHERE LIST *HeaderOrderList INITVAL(0); +WHERE LIST *Ignore INITVAL(0); +WHERE LIST *MimeLookupList INITVAL(0); +WHERE LIST *UnIgnore INITVAL(0); + +WHERE RX_LIST *Alternates INITVAL(0); +WHERE RX_LIST *MailLists INITVAL(0); +WHERE RX_LIST *SubscribedLists INITVAL(0); + +/* bit vector for boolean variables */ +#ifdef MAIN_C +unsigned char Options[(OPTMAX + 7)/8]; +#else +extern unsigned char Options[]; +#endif + +/* bit vector for the yes/no/ask variable type */ +#ifdef MAIN_C +unsigned char QuadOptions[(OPT_MAX*2 + 7) / 8]; +#else +extern unsigned char QuadOptions[]; +#endif + +WHERE unsigned short Counter INITVAL (0); + +#ifdef USE_NNTP +WHERE short NewsPollTimeout; +WHERE short NntpContext; +#endif + +WHERE short ConnectTimeout; +WHERE short HistSize; +WHERE short PagerContext; +WHERE short PagerIndexLines; +WHERE short ReadInc; +WHERE short SendmailWait; +WHERE short SleepTime INITVAL (1); +WHERE short Timeout; +WHERE short WrapMargin; +WHERE short WriteInc; + +WHERE short ScoreThresholdDelete; +WHERE short ScoreThresholdRead; +WHERE short ScoreThresholdFlag; + +#ifdef USE_IMAP +WHERE short ImapKeepalive; +#endif + +/* flags for received signals */ +WHERE SIG_ATOMIC_VOLATILE_T SigAlrm INITVAL (0); +WHERE SIG_ATOMIC_VOLATILE_T SigInt INITVAL (0); +WHERE SIG_ATOMIC_VOLATILE_T SigWinch INITVAL (0); + +WHERE int CurrentMenu; + +WHERE ALIAS *Aliases INITVAL (0); +WHERE LIST *UserHeader INITVAL (0); + +/*-- formerly in pgp.h --*/ +WHERE REGEXP PgpGoodSign; +WHERE char *PgpSignAs; +WHERE short PgpTimeout; +WHERE char *PgpEntryFormat; +WHERE char *PgpClearSignCommand; +WHERE char *PgpDecodeCommand; +WHERE char *PgpVerifyCommand; +WHERE char *PgpDecryptCommand; +WHERE char *PgpSignCommand; +WHERE char *PgpEncryptSignCommand; +WHERE char *PgpEncryptOnlyCommand; +WHERE char *PgpImportCommand; +WHERE char *PgpExportCommand; +WHERE char *PgpVerifyKeyCommand; +WHERE char *PgpListSecringCommand; +WHERE char *PgpListPubringCommand; +WHERE char *PgpGetkeysCommand; + +/*-- formerly in smime.h --*/ +WHERE char *SmimeDefaultKey; +WHERE char *SmimeCryptAlg; +WHERE short SmimeTimeout; +WHERE char *SmimeCertificates; +WHERE char *SmimeKeys; +WHERE char *SmimeCryptAlg; +WHERE char *SmimeCALocation; +WHERE char *SmimeVerifyCommand; +WHERE char *SmimeVerifyOpaqueCommand; +WHERE char *SmimeDecryptCommand; +WHERE char *SmimeSignCommand; +WHERE char *SmimeSignOpaqueCommand; +WHERE char *SmimeEncryptCommand; +WHERE char *SmimeGetSignerCertCommand; +WHERE char *SmimePk7outCommand; +WHERE char *SmimeGetCertCommand; +WHERE char *SmimeImportCertCommand; +WHERE char *SmimeGetCertEmailCommand; + + + +#ifdef DEBUG +WHERE FILE *debugfile INITVAL (0); +WHERE int debuglevel INITVAL (0); +#endif + +#ifdef MAIN_C +const char *Weekdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; +const char *Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "ERR" }; + +const char *BodyTypes[] = { "x-unknown", "audio", "application", "image", "message", "model", "multipart", "text", "video" }; +const char *BodyEncodings[] = { "x-unknown", "7bit", "8bit", "quoted-printable", "base64", "binary", "x-uuencoded" }; +#else +extern const char *Weekdays[]; +extern const char *Months[]; +#endif + +#ifdef MAIN_C +/* so that global vars get included */ +#include "mx.h" +#include "mutt_regex.h" +#include "buffy.h" +#include "sort.h" +#include "mutt_crypt.h" +#endif /* MAIN_C */ diff --git a/gnupgparse.c b/gnupgparse.c new file mode 100644 index 0000000..5236e78 --- /dev/null +++ b/gnupgparse.c @@ -0,0 +1,379 @@ +/* + * Copyright (C) 1998-2000 Werner Koch <werner.koch@guug.de> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* + * NOTE + * + * This code used to be the parser for GnuPG's output. + * + * Nowadays, we are using an external pubring lister with PGP which mimics + * gpg's output format. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <time.h> +#include <ctype.h> + +#include "mutt.h" +#include "pgp.h" +#include "charset.h" + +/* for hexval */ +#include "mime.h" + +/**************** + * Read the GNUPG keys. For now we read the complete keyring by + * calling gnupg in a special mode. + * + * The output format of gpgm is colon delimited with these fields: + * - record type ("pub","uid","sig","rev" etc.) + * - trust info + * - key length + * - pubkey algo + * - 16 hex digits with the long keyid. + * - timestamp (1998-02-28) + * - Local id + * - ownertrust + * - name + * - signature class + */ + +/* decode the backslash-escaped user ids. */ + +static char *_chs = 0; + +static void fix_uid (char *uid) +{ + char *s, *d; + iconv_t cd; + + for (s = d = uid; *s;) + { + if (*s == '\\' && *(s+1) == 'x' && isxdigit ((unsigned char) *(s+2)) && isxdigit ((unsigned char) *(s+3))) + { + *d++ = hexval (*(s+2)) << 4 | hexval (*(s+3)); + s += 4; + } + else + *d++ = *s++; + } + *d = '\0'; + + if (_chs && (cd = mutt_iconv_open (_chs, "utf-8", 0)) != (iconv_t)-1) + { + int n = s - uid + 1; /* chars available in original buffer */ + char *buf; + ICONV_CONST char *ib; + char *ob; + size_t ibl, obl; + + buf = safe_malloc (n+1); + ib = uid, ibl = d - uid + 1, ob = buf, obl = n; + iconv (cd, &ib, &ibl, &ob, &obl); + if (!ibl) + { + if (ob-buf < n) + { + memcpy (uid, buf, ob-buf); + uid[ob-buf] = '\0'; + } + else if (ob-buf == n && (buf[n] = 0, strlen (buf) < n)) + memcpy (uid, buf, n); + } + FREE (&buf); + iconv_close (cd); + } +} + +static pgp_key_t parse_pub_line (char *buf, int *is_subkey, pgp_key_t k) +{ + pgp_uid_t *uid = NULL; + int field = 0, is_uid = 0; + char *pend, *p; + int trust = 0; + int flags = 0; + + *is_subkey = 0; + if (!*buf) + return NULL; + + dprint (2, (debugfile, "parse_pub_line: buf = `%s'\n", buf)); + + for (p = buf; p; p = pend) + { + if ((pend = strchr (p, ':'))) + *pend++ = 0; + field++; + if (field > 1 && !*p) + continue; + + switch (field) + { + case 1: /* record type */ + { + dprint (2, (debugfile, "record type: %s\n", p)); + + if (!mutt_strcmp (p, "pub")) + ; + else if (!mutt_strcmp (p, "sub")) + *is_subkey = 1; + else if (!mutt_strcmp (p, "sec")) + ; + else if (!mutt_strcmp (p, "ssb")) + *is_subkey = 1; + else if (!mutt_strcmp (p, "uid")) + is_uid = 1; + else + return NULL; + + if (!(is_uid || (*is_subkey && option (OPTPGPIGNORESUB)))) + k = safe_calloc (sizeof *k, 1); + + break; + } + case 2: /* trust info */ + { + dprint (2, (debugfile, "trust info: %s\n", p)); + + switch (*p) + { /* look only at the first letter */ + case 'e': + flags |= KEYFLAG_EXPIRED; + break; + case 'r': + flags |= KEYFLAG_REVOKED; + break; + case 'd': + flags |= KEYFLAG_DISABLED; + break; + case 'n': + trust = 1; + break; + case 'm': + trust = 2; + break; + case 'f': + trust = 3; + break; + case 'u': + trust = 3; + break; + } + + if (!is_uid && !(*is_subkey && option (OPTPGPIGNORESUB))) + k->flags |= flags; + + break; + } + case 3: /* key length */ + { + + dprint (2, (debugfile, "key len: %s\n", p)); + + if (!(*is_subkey && option (OPTPGPIGNORESUB))) + k->keylen = atoi (p); /* fixme: add validation checks */ + break; + } + case 4: /* pubkey algo */ + { + + dprint (2, (debugfile, "pubkey algorithm: %s\n", p)); + + if (!(*is_subkey && option (OPTPGPIGNORESUB))) + { + k->numalg = atoi (p); + k->algorithm = pgp_pkalgbytype (atoi (p)); + } + break; + } + case 5: /* 16 hex digits with the long keyid. */ + { + dprint (2, (debugfile, "key id: %s\n", p)); + + if (!(*is_subkey && option (OPTPGPIGNORESUB))) + mutt_str_replace (&k->keyid, p); + break; + + } + case 6: /* timestamp (1998-02-28) */ + { + char tstr[11]; + struct tm time; + + dprint (2, (debugfile, "time stamp: %s\n", p)); + + if (!p) + break; + time.tm_sec = 0; + time.tm_min = 0; + time.tm_hour = 12; + strncpy (tstr, p, 11); + tstr[4] = '\0'; + time.tm_year = atoi (tstr)-1900; + tstr[7] = '\0'; + time.tm_mon = (atoi (tstr+5))-1; + time.tm_mday = atoi (tstr+8); + k->gen_time = mutt_mktime (&time, 0); + break; + } + case 7: /* valid for n days */ + break; + case 8: /* Local id */ + break; + case 9: /* ownertrust */ + break; + case 10: /* name */ + { + if (!pend || !*p) + break; /* empty field or no trailing colon */ + + /* ignore user IDs on subkeys */ + if (!is_uid && (*is_subkey && option (OPTPGPIGNORESUB))) + break; + + dprint (2, (debugfile, "user ID: %s\n", p)); + + uid = safe_calloc (sizeof (pgp_uid_t), 1); + fix_uid (p); + uid->addr = safe_strdup (p); + uid->trust = trust; + uid->flags |= flags; + uid->parent = k; + uid->next = k->address; + k->address = uid; + + if (strstr (p, "ENCR")) + k->flags |= KEYFLAG_PREFER_ENCRYPTION; + if (strstr (p, "SIGN")) + k->flags |= KEYFLAG_PREFER_SIGNING; + + break; + } + case 11: /* signature class */ + break; + case 12: /* key capabilities */ + dprint (2, (debugfile, "capabilities info: %s\n", p)); + + while(*p) + { + switch(*p++) + { + case 'D': + flags |= KEYFLAG_DISABLED; + break; + + case 'e': + flags |= KEYFLAG_CANENCRYPT; + break; + + case 's': + flags |= KEYFLAG_CANSIGN; + break; + } + } + + if (!is_uid && + (!*is_subkey || !option (OPTPGPIGNORESUB) + || !((flags & KEYFLAG_DISABLED) + || (flags & KEYFLAG_REVOKED) + || (flags & KEYFLAG_EXPIRED)))) + k->flags |= flags; + + break; + + default: + break; + } + } + return k; +} + +pgp_key_t pgp_get_candidates (pgp_ring_t keyring, LIST * hints) +{ + FILE *fp; + pid_t thepid; + char buf[LONG_STRING]; + pgp_key_t db = NULL, *kend, k = NULL, kk, mainkey = NULL; + int is_sub; + int devnull; + + if ((devnull = open ("/dev/null", O_RDWR)) == -1) + return NULL; + + mutt_str_replace (&_chs, Charset); + + thepid = pgp_invoke_list_keys (NULL, &fp, NULL, -1, -1, devnull, + keyring, hints); + if (thepid == -1) + { + close (devnull); + return NULL; + } + + kend = &db; + k = NULL; + while (fgets (buf, sizeof (buf) - 1, fp)) + { + if (!(kk = parse_pub_line (buf, &is_sub, k))) + continue; + + /* Only append kk to the list if it's new. */ + if (kk != k) + { + if (k) + kend = &k->next; + *kend = k = kk; + + if (is_sub) + { + pgp_uid_t **l; + + k->flags |= KEYFLAG_SUBKEY; + k->parent = mainkey; + for (l = &k->address; *l; l = &(*l)->next) + ; + *l = pgp_copy_uids (mainkey->address, k); + } + else + mainkey = k; + } + } + + if (ferror (fp)) + mutt_perror ("fgets"); + + fclose (fp); + mutt_wait_filter (thepid); + + close (devnull); + + return db; +} + diff --git a/handler.c b/handler.c new file mode 100644 index 0000000..666638b --- /dev/null +++ b/handler.c @@ -0,0 +1,1943 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <ctype.h> +#include <sys/wait.h> +#include <sys/stat.h> + +#include "mutt.h" +#include "mutt_curses.h" +#include "rfc1524.h" +#include "keymap.h" +#include "mime.h" +#include "copy.h" +#include "charset.h" +#include "mutt_crypt.h" + + +#define BUFI_SIZE 1000 +#define BUFO_SIZE 2000 + + +typedef void handler_f (BODY *, STATE *); +typedef handler_f *handler_t; + +int Index_hex[128] = { + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1, -1,-1,-1,-1, + -1,10,11,12, 13,14,15,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,10,11,12, 13,14,15,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1 +}; + +int Index_64[128] = { + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63, + 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, + 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, + -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, + 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 +}; + +static void state_prefix_put (const char *d, size_t dlen, STATE *s) +{ + if (s->prefix) + while (dlen--) + state_prefix_putc (*d++, s); + else + fwrite (d, dlen, 1, s->fpout); +} + +void mutt_convert_to_state(iconv_t cd, char *bufi, size_t *l, STATE *s) +{ + char bufo[BUFO_SIZE]; + ICONV_CONST char *ib; + char *ob; + size_t ibl, obl; + + if (!bufi) + { + if (cd != (iconv_t)(-1)) + { + ob = bufo, obl = sizeof (bufo); + iconv (cd, 0, 0, &ob, &obl); + if (ob != bufo) + state_prefix_put (bufo, ob - bufo, s); + } + if (Quotebuf[0] != '\0') + state_prefix_putc ('\n', s); + return; + } + + if (cd == (iconv_t)(-1)) + { + state_prefix_put (bufi, *l, s); + *l = 0; + return; + } + + ib = bufi, ibl = *l; + for (;;) + { + ob = bufo, obl = sizeof (bufo); + mutt_iconv (cd, &ib, &ibl, &ob, &obl, 0, "?"); + if (ob == bufo) + break; + state_prefix_put (bufo, ob - bufo, s); + } + memmove (bufi, ib, ibl); + *l = ibl; +} + +void mutt_decode_xbit (STATE *s, long len, int istext, iconv_t cd) +{ + int c, ch; + char bufi[BUFI_SIZE]; + size_t l = 0; + + if (istext) + { + state_set_prefix(s); + + while ((c = fgetc(s->fpin)) != EOF && len--) + { + if(c == '\r' && len) + { + if((ch = fgetc(s->fpin)) == '\n') + { + c = ch; + len--; + } + else + ungetc(ch, s->fpin); + } + + bufi[l++] = c; + if (l == sizeof (bufi)) + mutt_convert_to_state (cd, bufi, &l, s); + } + + mutt_convert_to_state (cd, bufi, &l, s); + mutt_convert_to_state (cd, 0, 0, s); + + state_reset_prefix (s); + } + else + mutt_copy_bytes (s->fpin, s->fpout, len); +} + +static int qp_decode_triple (char *s, char *d) +{ + /* soft line break */ + if (*s == '=' && !(*(s+1))) + return 1; + + /* quoted-printable triple */ + if (*s == '=' && + isxdigit ((unsigned char) *(s+1)) && + isxdigit ((unsigned char) *(s+2))) + { + *d = (hexval (*(s+1)) << 4) | hexval (*(s+2)); + return 0; + } + + /* something else */ + return -1; +} + +static void qp_decode_line (char *dest, char *src, size_t *l, + int last) +{ + char *d, *s; + char c; + + int kind; + int soft = 0; + + /* decode the line */ + + for (d = dest, s = src; *s;) + { + switch ((kind = qp_decode_triple (s, &c))) + { + case 0: *d++ = c; s += 3; break; /* qp triple */ + case -1: *d++ = *s++; break; /* single character */ + case 1: soft = 1; s++; break; /* soft line break */ + } + } + + if (!soft && last == '\n') + *d++ = '\n'; + + *d = '\0'; + *l = d - dest; +} + +/* + * Decode an attachment encoded with quoted-printable. + * + * Why doesn't this overflow any buffers? First, it's guaranteed + * that the length of a line grows when you _en_-code it to + * quoted-printable. That means that we always can store the + * result in a buffer of at most the _same_ size. + * + * Now, we don't special-case if the line we read with fgets() + * isn't terminated. We don't care about this, since STRING > 78, + * so corrupted input will just be corrupted a bit more. That + * implies that STRING+1 bytes are always sufficient to store the + * result of qp_decode_line. + * + * Finally, at soft line breaks, some part of a multibyte character + * may have been left over by mutt_convert_to_state(). This shouldn't + * be more than 6 characters, so STRING + 7 should be sufficient + * memory to store the decoded data. + * + * Just to make sure that I didn't make some off-by-one error + * above, we just use STRING*2 for the target buffer's size. + * + */ + +void mutt_decode_quoted (STATE *s, long len, int istext, iconv_t cd) +{ + char line[STRING]; + char decline[2*STRING]; + size_t l = 0; + size_t linelen; /* number of input bytes in `line' */ + size_t l3; + + int last; /* store the last character in the input line */ + + if (istext) + state_set_prefix(s); + + while (len > 0) + { + last = 0; + + /* + * It's ok to use a fixed size buffer for input, even if the line turns + * out to be longer than this. Just process the line in chunks. This + * really shouldn't happen according the MIME spec, since Q-P encoded + * lines are at most 76 characters, but we should be liberal about what + * we accept. + */ + if (fgets (line, MIN ((ssize_t)sizeof (line), len + 1), s->fpin) == NULL) + break; + + linelen = strlen(line); + len -= linelen; + + /* + * inspect the last character we read so we can tell if we got the + * entire line. + */ + last = linelen ? line[linelen - 1] : 0; + + /* chop trailing whitespace if we got the full line */ + if (last == '\n') + { + while (linelen > 0 && ISSPACE (line[linelen-1])) + linelen--; + line[linelen]=0; + } + + /* decode and do character set conversion */ + qp_decode_line (decline + l, line, &l3, last); + l += l3; + mutt_convert_to_state (cd, decline, &l, s); + } + + mutt_convert_to_state (cd, 0, 0, s); + state_reset_prefix(s); +} + +void mutt_decode_base64 (STATE *s, long len, int istext, iconv_t cd) +{ + char buf[5]; + int c1, c2, c3, c4, ch, cr = 0, i; + char bufi[BUFI_SIZE]; + size_t l = 0; + + buf[4] = 0; + + if (istext) + state_set_prefix(s); + + while (len > 0) + { + for (i = 0 ; i < 4 && len > 0 ; len--) + { + if ((ch = fgetc (s->fpin)) == EOF) + break; + if (ch >= 0 && ch < 128 && (base64val(ch) != -1 || ch == '=')) + buf[i++] = ch; + } + if (i != 4) + { + dprint (2, (debugfile, "%s:%d [mutt_decode_base64()]: " + "didn't get a multiple of 4 chars.\n", __FILE__, __LINE__)); + break; + } + + c1 = base64val (buf[0]); + c2 = base64val (buf[1]); + ch = (c1 << 2) | (c2 >> 4); + + if (cr && ch != '\n') + bufi[l++] = '\r'; + + cr = 0; + + if (istext && ch == '\r') + cr = 1; + else + bufi[l++] = ch; + + if (buf[2] == '=') + break; + c3 = base64val (buf[2]); + ch = ((c2 & 0xf) << 4) | (c3 >> 2); + + if (cr && ch != '\n') + bufi[l++] = '\r'; + + cr = 0; + + if (istext && ch == '\r') + cr = 1; + else + bufi[l++] = ch; + + if (buf[3] == '=') break; + c4 = base64val (buf[3]); + ch = ((c3 & 0x3) << 6) | c4; + + if (cr && ch != '\n') + bufi[l++] = '\r'; + cr = 0; + + if (istext && ch == '\r') + cr = 1; + else + bufi[l++] = ch; + + if (l + 8 >= sizeof (bufi)) + mutt_convert_to_state (cd, bufi, &l, s); + } + + if (cr) bufi[l++] = '\r'; + + mutt_convert_to_state (cd, bufi, &l, s); + mutt_convert_to_state (cd, 0, 0, s); + + state_reset_prefix(s); +} + +unsigned char decode_byte (char ch) +{ + if (ch == 96) + return 0; + return ch - 32; +} + +void mutt_decode_uuencoded (STATE *s, long len, int istext, iconv_t cd) +{ + char tmps[SHORT_STRING]; + char linelen, c, l, out; + char *pt; + char bufi[BUFI_SIZE]; + size_t k = 0; + + if(istext) + state_set_prefix(s); + + while(len > 0) + { + if ((fgets(tmps, sizeof(tmps), s->fpin)) == NULL) + return; + len -= mutt_strlen(tmps); + if ((!mutt_strncmp (tmps, "begin", 5)) && ISSPACE (tmps[5])) + break; + } + while(len > 0) + { + if ((fgets(tmps, sizeof(tmps), s->fpin)) == NULL) + return; + len -= mutt_strlen(tmps); + if (!mutt_strncmp (tmps, "end", 3)) + break; + pt = tmps; + linelen = decode_byte (*pt); + pt++; + for (c = 0; c < linelen;) + { + for (l = 2; l <= 6; l += 2) + { + out = decode_byte (*pt) << l; + pt++; + out |= (decode_byte (*pt) >> (6 - l)); + bufi[k++] = out; + c++; + if (c == linelen) + break; + } + mutt_convert_to_state (cd, bufi, &k, s); + pt++; + } + } + + mutt_convert_to_state (cd, bufi, &k, s); + mutt_convert_to_state (cd, 0, 0, s); + + state_reset_prefix(s); +} + +/* ---------------------------------------------------------------------------- + * A (not so) minimal implementation of RFC1563. + */ + +#define IndentSize (4) + +enum { RICH_PARAM=0, RICH_BOLD, RICH_UNDERLINE, RICH_ITALIC, RICH_NOFILL, + RICH_INDENT, RICH_INDENT_RIGHT, RICH_EXCERPT, RICH_CENTER, RICH_FLUSHLEFT, + RICH_FLUSHRIGHT, RICH_COLOR, RICH_LAST_TAG }; + +static struct { + const char *tag_name; + int index; +} EnrichedTags[] = { + { "param", RICH_PARAM }, + { "bold", RICH_BOLD }, + { "italic", RICH_ITALIC }, + { "underline", RICH_UNDERLINE }, + { "nofill", RICH_NOFILL }, + { "excerpt", RICH_EXCERPT }, + { "indent", RICH_INDENT }, + { "indentright", RICH_INDENT_RIGHT }, + { "center", RICH_CENTER }, + { "flushleft", RICH_FLUSHLEFT }, + { "flushright", RICH_FLUSHRIGHT }, + { "flushboth", RICH_FLUSHLEFT }, + { "color", RICH_COLOR }, + { "x-color", RICH_COLOR }, + { NULL, -1 } +}; + +struct enriched_state +{ + char *buffer; + char *line; + char *param; + size_t buff_len; + size_t line_len; + size_t line_used; + size_t line_max; + size_t indent_len; + size_t word_len; + size_t buff_used; + size_t param_used; + size_t param_len; + int tag_level[RICH_LAST_TAG]; + int WrapMargin; + STATE *s; +}; + +static void enriched_wrap (struct enriched_state *stte) +{ + int x; + int extra; + + if (stte->line_len) + { + if (stte->tag_level[RICH_CENTER] || stte->tag_level[RICH_FLUSHRIGHT]) + { + /* Strip trailing white space */ + size_t y = stte->line_used - 1; + + while (y && ISSPACE (stte->line[y])) + { + stte->line[y] = '\0'; + y--; + stte->line_used--; + stte->line_len--; + } + if (stte->tag_level[RICH_CENTER]) + { + /* Strip leading whitespace */ + y = 0; + + while (stte->line[y] && ISSPACE (stte->line[y])) + y++; + if (y) + { + size_t z; + + for (z = y ; z <= stte->line_used; z++) + { + stte->line[z - y] = stte->line[z]; + } + + stte->line_len -= y; + stte->line_used -= y; + } + } + } + + extra = stte->WrapMargin - stte->line_len - stte->indent_len - + (stte->tag_level[RICH_INDENT_RIGHT] * IndentSize); + if (extra > 0) + { + if (stte->tag_level[RICH_CENTER]) + { + x = extra / 2; + while (x) + { + state_putc (' ', stte->s); + x--; + } + } + else if (stte->tag_level[RICH_FLUSHRIGHT]) + { + x = extra-1; + while (x) + { + state_putc (' ', stte->s); + x--; + } + } + } + state_puts (stte->line, stte->s); + } + + state_putc ('\n', stte->s); + stte->line[0] = '\0'; + stte->line_len = 0; + stte->line_used = 0; + stte->indent_len = 0; + if (stte->s->prefix) + { + state_puts (stte->s->prefix, stte->s); + stte->indent_len += mutt_strlen (stte->s->prefix); + } + + if (stte->tag_level[RICH_EXCERPT]) + { + x = stte->tag_level[RICH_EXCERPT]; + while (x) + { + if (stte->s->prefix) + { + state_puts (stte->s->prefix, stte->s); + stte->indent_len += mutt_strlen (stte->s->prefix); + } + else + { + state_puts ("> ", stte->s); + stte->indent_len += mutt_strlen ("> "); + } + x--; + } + } + else + stte->indent_len = 0; + if (stte->tag_level[RICH_INDENT]) + { + x = stte->tag_level[RICH_INDENT] * IndentSize; + stte->indent_len += x; + while (x) + { + state_putc (' ', stte->s); + x--; + } + } +} + +static void enriched_flush (struct enriched_state *stte, int wrap) +{ + if (!stte->tag_level[RICH_NOFILL] && (stte->line_len + stte->word_len > + (stte->WrapMargin - (stte->tag_level[RICH_INDENT_RIGHT] * IndentSize) - + stte->indent_len))) + enriched_wrap (stte); + + if (stte->buff_used) + { + stte->buffer[stte->buff_used] = '\0'; + stte->line_used += stte->buff_used; + if (stte->line_used > stte->line_max) + { + stte->line_max = stte->line_used; + safe_realloc (&stte->line, stte->line_max + 1); + } + strcat (stte->line, stte->buffer); /* __STRCAT_CHECKED__ */ + stte->line_len += stte->word_len; + stte->word_len = 0; + stte->buff_used = 0; + } + if (wrap) + enriched_wrap(stte); +} + + +static void enriched_putc (int c, struct enriched_state *stte) +{ + if (stte->tag_level[RICH_PARAM]) + { + if (stte->tag_level[RICH_COLOR]) + { + if (stte->param_used + 1 >= stte->param_len) + safe_realloc (&stte->param, (stte->param_len += STRING)); + + stte->param[stte->param_used++] = c; + } + return; /* nothing to do */ + } + + /* see if more space is needed (plus extra for possible rich characters) */ + if (stte->buff_len < stte->buff_used + 3) + { + stte->buff_len += LONG_STRING; + safe_realloc (&stte->buffer, stte->buff_len + 1); + } + + if ((!stte->tag_level[RICH_NOFILL] && ISSPACE (c)) || c == '\0' ) + { + if (c == '\t') + stte->word_len += 8 - (stte->line_len + stte->word_len) % 8; + else + stte->word_len++; + + stte->buffer[stte->buff_used++] = c; + enriched_flush (stte, 0); + } + else + { + if (stte->s->flags & M_DISPLAY) + { + if (stte->tag_level[RICH_BOLD]) + { + stte->buffer[stte->buff_used++] = c; + stte->buffer[stte->buff_used++] = '\010'; + stte->buffer[stte->buff_used++] = c; + } + else if (stte->tag_level[RICH_UNDERLINE]) + { + + stte->buffer[stte->buff_used++] = '_'; + stte->buffer[stte->buff_used++] = '\010'; + stte->buffer[stte->buff_used++] = c; + } + else if (stte->tag_level[RICH_ITALIC]) + { + stte->buffer[stte->buff_used++] = c; + stte->buffer[stte->buff_used++] = '\010'; + stte->buffer[stte->buff_used++] = '_'; + } + else + { + stte->buffer[stte->buff_used++] = c; + } + } + else + { + stte->buffer[stte->buff_used++] = c; + } + stte->word_len++; + } +} + +static void enriched_puts (char *s, struct enriched_state *stte) +{ + char *c; + + if (stte->buff_len < stte->buff_used + mutt_strlen(s)) + { + stte->buff_len += LONG_STRING; + safe_realloc (&stte->buffer, stte->buff_len + 1); + } + c = s; + while (*c) + { + stte->buffer[stte->buff_used++] = *c; + c++; + } +} + +static void enriched_set_flags (const char *tag, struct enriched_state *stte) +{ + const char *tagptr = tag; + int i, j; + + if (*tagptr == '/') + tagptr++; + + for (i = 0, j = -1; EnrichedTags[i].tag_name; i++) + if (ascii_strcasecmp (EnrichedTags[i].tag_name,tagptr) == 0) + { + j = EnrichedTags[i].index; + break; + } + + if (j != -1) + { + if (j == RICH_CENTER || j == RICH_FLUSHLEFT || j == RICH_FLUSHRIGHT) + enriched_flush (stte, 1); + + if (*tag == '/') + { + if (stte->tag_level[j]) /* make sure not to go negative */ + stte->tag_level[j]--; + if ((stte->s->flags & M_DISPLAY) && j == RICH_PARAM && stte->tag_level[RICH_COLOR]) + { + stte->param[stte->param_used] = '\0'; + if (!ascii_strcasecmp(stte->param, "black")) + { + enriched_puts("\033[30m", stte); + } + else if (!ascii_strcasecmp(stte->param, "red")) + { + enriched_puts("\033[31m", stte); + } + else if (!ascii_strcasecmp(stte->param, "green")) + { + enriched_puts("\033[32m", stte); + } + else if (!ascii_strcasecmp(stte->param, "yellow")) + { + enriched_puts("\033[33m", stte); + } + else if (!ascii_strcasecmp(stte->param, "blue")) + { + enriched_puts("\033[34m", stte); + } + else if (!ascii_strcasecmp(stte->param, "magenta")) + { + enriched_puts("\033[35m", stte); + } + else if (!ascii_strcasecmp(stte->param, "cyan")) + { + enriched_puts("\033[36m", stte); + } + else if (!ascii_strcasecmp(stte->param, "white")) + { + enriched_puts("\033[37m", stte); + } + } + if ((stte->s->flags & M_DISPLAY) && j == RICH_COLOR) + { + enriched_puts("\033[0m", stte); + } + + /* flush parameter buffer when closing the tag */ + if (j == RICH_PARAM) + { + stte->param_used = 0; + stte->param[0] = '\0'; + } + } + else + stte->tag_level[j]++; + + if (j == RICH_EXCERPT) + enriched_flush(stte, 1); + } +} + +void text_enriched_handler (BODY *a, STATE *s) +{ + enum { + TEXT, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE + } state = TEXT; + + long bytes = a->length; + struct enriched_state stte; + int c = 0; + int tag_len = 0; + char tag[LONG_STRING + 1]; + + memset (&stte, 0, sizeof (stte)); + stte.s = s; + stte.WrapMargin = ((s->flags & M_DISPLAY) ? (COLS-4) : ((COLS-4)<72)?(COLS-4):72); + stte.line_max = stte.WrapMargin * 4; + stte.line = (char *) safe_calloc (1, stte.line_max + 1); + stte.param = (char *) safe_calloc (1, STRING); + + stte.param_len = STRING; + stte.param_used = 0; + + if (s->prefix) + { + state_puts (s->prefix, s); + stte.indent_len += mutt_strlen (s->prefix); + } + + while (state != DONE) + { + if (state != ST_EOF) + { + if (!bytes || (c = fgetc (s->fpin)) == EOF) + state = ST_EOF; + else + bytes--; + } + + switch (state) + { + case TEXT : + switch (c) + { + case '<' : + state = LANGLE; + break; + + case '\n' : + if (stte.tag_level[RICH_NOFILL]) + { + enriched_flush (&stte, 1); + } + else + { + enriched_putc (' ', &stte); + state = NEWLINE; + } + break; + + default: + enriched_putc (c, &stte); + } + break; + + case LANGLE : + if (c == '<') + { + enriched_putc (c, &stte); + state = TEXT; + break; + } + else + { + tag_len = 0; + state = TAG; + } + /* Yes, fall through (it wasn't a <<, so this char is first in TAG) */ + case TAG : + if (c == '>') + { + tag[tag_len] = '\0'; + enriched_set_flags (tag, &stte); + state = TEXT; + } + else if (tag_len < LONG_STRING) /* ignore overly long tags */ + tag[tag_len++] = c; + else + state = BOGUS_TAG; + break; + + case BOGUS_TAG : + if (c == '>') + state = TEXT; + break; + + case NEWLINE : + if (c == '\n') + enriched_flush (&stte, 1); + else + { + ungetc (c, s->fpin); + bytes++; + state = TEXT; + } + break; + + case ST_EOF : + enriched_putc ('\0', &stte); + enriched_flush (&stte, 1); + state = DONE; + break; + + case DONE: /* not reached, but gcc complains if this is absent */ + break; + } + } + + state_putc ('\n', s); /* add a final newline */ + + FREE (&(stte.buffer)); + FREE (&(stte.line)); + FREE (&(stte.param)); +} + +/* + * An implementation of RFC 2646. + * + * NOTE: This still has to be made UTF-8 aware. + * + */ + +#define FLOWED_MAX 77 + +static void flowed_quote (STATE *s, int level) +{ + int i; + + if (s->prefix) + { + if (option (OPTTEXTFLOWED)) + level++; + else + state_puts (s->prefix, s); + } + + for (i = 0; i < level; i++) + state_putc ('>', s); +} + +static int flowed_maybe_quoted (char *cont) +{ + return regexec ((regex_t *) QuoteRegexp.rx, cont, 0, NULL, 0) == 0; +} + +static void flowed_stuff (STATE *s, char *cont, int level) +{ + if (!option (OPTTEXTFLOWED) && !(s->flags & M_DISPLAY)) + return; + + if (s->flags & M_DISPLAY) + { + /* + * Hack: If we are in the beginning of the line and there is + * some text on the line which looks like it's quoted, turn off + * ANSI colors, so quote coloring doesn't affect this line. + */ + if (*cont && !level && !mutt_strcmp (Pager, "builtin") && flowed_maybe_quoted (cont)) + state_puts ("\033[0m",s); + } + else if ((!(s->flags & M_PRINTING)) && + ((*cont == ' ') || (*cont == '>') || (!level && !mutt_strncmp (cont, "From ", 5)))) + state_putc (' ', s); +} + +static char *flowed_skip_indent (char *prefix, char *cont) +{ + for (; *cont == ' ' || *cont == '\t'; cont++) + *prefix++ = *cont; + *prefix = '\0'; + return cont; +} + +static int flowed_visual_strlen (char *l, int i) +{ + int j; + for (j = 0; *l; l++) + { + if (*l == '\t') + j += 8 - ((i + j) % 8); + else + j++; + } + + return j; +} + +static void text_plain_flowed_handler (BODY *a, STATE *s) +{ + char line[LONG_STRING]; + char indent[LONG_STRING]; + + int quoted = -1; + int last_quoted; + int full = 1; + int last_full; + int col = 0, tmpcol; + + int i_add = 0; + int add = 0; + int soft = 0; + int l, rl; + + int flowed_max; + int bytes = a->length; + int actually_wrap = 0; + + char *cont = NULL; + char *tail = NULL; + char *lc = NULL; + char *t; + + *indent = '\0'; + + if (s->prefix) + add = 1; + + if ((flowed_max = FLOWED_MAX) > COLS - 3) + flowed_max = COLS - 3; + if (flowed_max > COLS - WrapMargin) + flowed_max = COLS - WrapMargin; + if (flowed_max <= 0) + flowed_max = COLS; + + + while (bytes > 0 && fgets (line, sizeof (line), s->fpin)) + { + bytes -= strlen (line); + tail = NULL; + + last_full = full; + + /* + * If the last line wasn't fully read, this is the + * tail of some line. + */ + actually_wrap = !last_full; + + if ((t = strrchr (line, '\r')) || (t = strrchr (line, '\n'))) + { + *t = '\0'; + full = 1; + } + else if ((t = strrchr (line, ' ')) || (t = strrchr (line, '\t'))) + { + /* + * Bad: We have a line of more than LONG_STRING characters. + * (Which SHOULD NOT happen, since lines SHOULD be <= 79 + * characters long.) + * + * Try to simulate a soft line break at a word boundary. + * Handle the rest of the line next time. + * + * Give up when we have a single word which is longer than + * LONG_STRING characters. It will just be split into parts, + * with a hard line break in between. + */ + + full = 0; + l = strlen (t + 1); + t[0] = ' '; + t[1] = '\0'; + + if (l) + { + fseek (s->fpin, -l, SEEK_CUR); + bytes += l; + } + } + else + full = 0; + + last_quoted = quoted; + + if (last_full) + { + /* + * We are in the beginning of a new line. Determine quote level + * and indentation prefix + */ + for (quoted = 0; line[quoted] == '>'; quoted++) + ; + + cont = line + quoted; + + /* undo space stuffing */ + if (*cont == ' ') + cont++; + + /* If there is an indentation, record it. */ + cont = flowed_skip_indent (indent, cont); + i_add = flowed_visual_strlen (indent, quoted + add); + } + else + { + /* + * This is just the tail of some over-long line. Keep + * indentation and quote levels. Don't unstuff. + */ + cont = line; + } + + /* If we have a change in quoting depth, wrap. */ + + if (col && last_quoted != quoted && last_quoted >= 0) + { + state_putc ('\n', s); + col = 0; + } + + do + { + if (tail) + cont = tail; + + SKIPWS (cont); + + tail = NULL; + soft = 0; + + /* try to find a point for word wrapping */ + + retry_wrap: + l = flowed_visual_strlen (cont, quoted + i_add + add + col); + rl = mutt_strlen (cont); + if (quoted + i_add + add + col + l > flowed_max) + { + actually_wrap = 1; + + for (tmpcol = quoted + i_add + add + col, t = cont; + *t && tmpcol < flowed_max; t++) + { + if (*t == ' ' || *t == '\t') + tail = t; + if (*t == '\t') + tmpcol = (tmpcol & ~7) + 8; + else + tmpcol++; + } + + if (tail) + { + *tail++ = '\0'; + soft = 2; + } + } + + /* We seem to be desperate. Get me a new line, and retry. */ + if (!tail && (quoted + add + col + i_add + l > flowed_max) && col) + { + state_putc ('\n', s); + col = 0; + goto retry_wrap; + } + + /* Detect soft line breaks. */ + if (!soft && ascii_strcmp (cont, "-- ")) + { + lc = strrchr (cont, ' '); + if (lc && lc[1] == '\0') + soft = 1; + } + + /* + * If we are in the beginning of an output line, do quoting + * and stuffing. + * + * We have to temporarily assemble the line since display + * stuffing (i.e., turning off quote coloring) may depend on + * the line's actual content. You never know what people put + * into their regular expressions. + */ + if (!col) + { + char tmp[LONG_STRING]; + snprintf (tmp, sizeof (tmp), "%s%s", indent, cont); + + flowed_quote (s, quoted); + flowed_stuff (s, tmp, quoted + add); + + state_puts (indent, s); + } + + /* output the text */ + state_puts (cont, s); + col += flowed_visual_strlen (cont, quoted + i_add + add + col); + + /* possibly indicate a soft line break */ + if (soft == 2) + { + state_putc (' ', s); + col++; + } + + /* + * Wrap if this display line corresponds to a + * text line. Don't wrap if we changed the line. + */ + if (!soft || (!actually_wrap && full)) + { + state_putc ('\n', s); + col = 0; + } + } + while (tail); + } + + if (col) + state_putc ('\n', s); + +} + + + + + + +#define TXTHTML 1 +#define TXTPLAIN 2 +#define TXTENRICHED 3 + +static void alternative_handler (BODY *a, STATE *s) +{ + BODY *choice = NULL; + BODY *b; + LIST *t; + char buf[STRING]; + int type = 0; + int mustfree = 0; + + if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE || + a->encoding == ENCUUENCODED) + { + struct stat st; + mustfree = 1; + fstat (fileno (s->fpin), &st); + b = mutt_new_body (); + b->length = (long) st.st_size; + b->parts = mutt_parse_multipart (s->fpin, + mutt_get_parameter ("boundary", a->parameter), + (long) st.st_size, ascii_strcasecmp ("digest", a->subtype) == 0); + } + else + b = a; + + a = b; + + /* First, search list of prefered types */ + t = AlternativeOrderList; + while (t && !choice) + { + char *c; + int btlen; /* length of basetype */ + int wild; /* do we have a wildcard to match all subtypes? */ + + c = strchr (t->data, '/'); + if (c) + { + wild = (c[1] == '*' && c[2] == 0); + btlen = c - t->data; + } + else + { + wild = 1; + btlen = mutt_strlen (t->data); + } + + if (a && a->parts) + b = a->parts; + else + b = a; + while (b) + { + const char *bt = TYPE(b); + if (!ascii_strncasecmp (bt, t->data, btlen) && bt[btlen] == 0) + { + /* the basetype matches */ + if (wild || !ascii_strcasecmp (t->data + btlen + 1, b->subtype)) + { + choice = b; + } + } + b = b->next; + } + t = t->next; + } + + /* Next, look for an autoviewable type */ + if (!choice) + { + if (a && a->parts) + b = a->parts; + else + b = a; + while (b) + { + snprintf (buf, sizeof (buf), "%s/%s", TYPE (b), b->subtype); + if (mutt_is_autoview (b, buf)) + { + rfc1524_entry *entry = rfc1524_new_entry (); + + if (rfc1524_mailcap_lookup (b, buf, entry, M_AUTOVIEW)) + { + choice = b; + } + rfc1524_free_entry (&entry); + } + b = b->next; + } + } + + /* Then, look for a text entry */ + if (!choice) + { + if (a && a->parts) + b = a->parts; + else + b = a; + while (b) + { + if (b->type == TYPETEXT) + { + if (! ascii_strcasecmp ("plain", b->subtype) && type <= TXTPLAIN) + { + choice = b; + type = TXTPLAIN; + } + else if (! ascii_strcasecmp ("enriched", b->subtype) && type <= TXTENRICHED) + { + choice = b; + type = TXTENRICHED; + } + else if (! ascii_strcasecmp ("html", b->subtype) && type <= TXTHTML) + { + choice = b; + type = TXTHTML; + } + } + b = b->next; + } + } + + /* Finally, look for other possibilities */ + if (!choice) + { + if (a && a->parts) + b = a->parts; + else + b = a; + while (b) + { + if (mutt_can_decode (b)) + choice = b; + b = b->next; + } + } + + if (choice) + { + if (s->flags & M_DISPLAY && !option (OPTWEED)) + { + fseek (s->fpin, choice->hdr_offset, 0); + mutt_copy_bytes(s->fpin, s->fpout, choice->offset-choice->hdr_offset); + } + mutt_body_handler (choice, s); + } + else if (s->flags & M_DISPLAY) + { + /* didn't find anything that we could display! */ + state_mark_attach (s); + state_puts(_("[-- Error: Could not display any parts of Multipart/Alternative! --]\n"), s); + } + + if (mustfree) + mutt_free_body(&a); +} + +/* handles message/rfc822 body parts */ +void message_handler (BODY *a, STATE *s) +{ + struct stat st; + BODY *b; + long off_start; + + off_start = ftell (s->fpin); + if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE || + a->encoding == ENCUUENCODED) + { + fstat (fileno (s->fpin), &st); + b = mutt_new_body (); + b->length = (long) st.st_size; + b->parts = mutt_parse_messageRFC822 (s->fpin, b); + } + else + b = a; + + if (b->parts) + { + mutt_copy_hdr (s->fpin, s->fpout, off_start, b->parts->offset, + (((s->flags & M_WEED) || ((s->flags & (M_DISPLAY|M_PRINTING)) && option (OPTWEED))) ? (CH_WEED | CH_REORDER) : 0) | + (s->prefix ? CH_PREFIX : 0) | CH_DECODE | CH_FROM, s->prefix); + + if (s->prefix) + state_puts (s->prefix, s); + state_putc ('\n', s); + + mutt_body_handler (b->parts, s); + } + + if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE || + a->encoding == ENCUUENCODED) + mutt_free_body (&b); +} + +/* returns 1 if decoding the attachment will produce output */ +int mutt_can_decode (BODY *a) +{ + char type[STRING]; + + snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); + if (mutt_is_autoview (a, type)) + return (rfc1524_mailcap_lookup (a, type, NULL, M_AUTOVIEW)); + else if (a->type == TYPETEXT) + return (1); + else if (a->type == TYPEMESSAGE) + return (1); + else if (a->type == TYPEMULTIPART) + { + BODY *p; + + if (WithCrypto) + { + if (ascii_strcasecmp (a->subtype, "signed") == 0 || + ascii_strcasecmp (a->subtype, "encrypted") == 0) + return (1); + } + + for (p = a->parts; p; p = p->next) + { + if (mutt_can_decode (p)) + return (1); + } + + } + else if (WithCrypto && a->type == TYPEAPPLICATION) + { + if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp(a)) + return (1); + if ((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime(a)) + return (1); + } + + return (0); +} + +void multipart_handler (BODY *a, STATE *s) +{ + BODY *b, *p; + char length[5]; + struct stat st; + int count; + + if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE || + a->encoding == ENCUUENCODED) + { + fstat (fileno (s->fpin), &st); + b = mutt_new_body (); + b->length = (long) st.st_size; + b->parts = mutt_parse_multipart (s->fpin, + mutt_get_parameter ("boundary", a->parameter), + (long) st.st_size, ascii_strcasecmp ("digest", a->subtype) == 0); + } + else + b = a; + + for (p = b->parts, count = 1; p; p = p->next, count++) + { + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- Attachment #%d"), count); + if (p->description || p->filename || p->form_name) + { + state_puts (": ", s); + state_puts (p->description ? p->description : + p->filename ? p->filename : p->form_name, s); + } + state_puts (" --]\n", s); + + mutt_pretty_size (length, sizeof (length), p->length); + + state_mark_attach (s); + state_printf (s, _("[-- Type: %s/%s, Encoding: %s, Size: %s --]\n"), + TYPE (p), p->subtype, ENCODING (p->encoding), length); + if (!option (OPTWEED)) + { + fseek (s->fpin, p->hdr_offset, 0); + mutt_copy_bytes(s->fpin, s->fpout, p->offset-p->hdr_offset); + } + else + state_putc ('\n', s); + } + else + { + if (p->description && mutt_can_decode (p)) + state_printf (s, "Content-Description: %s\n", p->description); + + if (p->form_name) + state_printf(s, "%s: \n", p->form_name); + + } + mutt_body_handler (p, s); + state_putc ('\n', s); + } + + if (a->encoding == ENCBASE64 || a->encoding == ENCQUOTEDPRINTABLE || + a->encoding == ENCUUENCODED) + mutt_free_body (&b); +} + +void autoview_handler (BODY *a, STATE *s) +{ + rfc1524_entry *entry = rfc1524_new_entry (); + char buffer[LONG_STRING]; + char type[STRING]; + char command[LONG_STRING]; + char tempfile[_POSIX_PATH_MAX] = ""; + char *fname; + FILE *fpin = NULL; + FILE *fpout = NULL; + FILE *fperr = NULL; + int piped = FALSE; + pid_t thepid; + + snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype); + rfc1524_mailcap_lookup (a, type, entry, M_AUTOVIEW); + + fname = safe_strdup (a->filename); + mutt_sanitize_filename (fname, 1); + rfc1524_expand_filename (entry->nametemplate, fname, tempfile, sizeof (tempfile)); + FREE (&fname); + + if (entry->command) + { + strfcpy (command, entry->command, sizeof (command)); + + /* rfc1524_expand_command returns 0 if the file is required */ + piped = rfc1524_expand_command (a, tempfile, type, command, sizeof (command)); + + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- Autoview using %s --]\n"), command); + mutt_message(_("Invoking autoview command: %s"),command); + } + + if ((fpin = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror ("fopen"); + rfc1524_free_entry (&entry); + return; + } + + mutt_copy_bytes (s->fpin, fpin, a->length); + + if(!piped) + { + safe_fclose (&fpin); + thepid = mutt_create_filter (command, NULL, &fpout, &fperr); + } + else + { + unlink (tempfile); + fflush (fpin); + rewind (fpin); + thepid = mutt_create_filter_fd (command, NULL, &fpout, &fperr, + fileno(fpin), -1, -1); + } + + if (thepid < 0) + { + mutt_perror _("Can't create filter"); + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- Can't run %s. --]\n"), command); + } + goto bail; + } + + if (s->prefix) + { + while (fgets (buffer, sizeof(buffer), fpout) != NULL) + { + state_puts (s->prefix, s); + state_puts (buffer, s); + } + /* check for data on stderr */ + if (fgets (buffer, sizeof(buffer), fperr)) + { + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- Autoview stderr of %s --]\n"), command); + } + + state_puts (s->prefix, s); + state_puts (buffer, s); + while (fgets (buffer, sizeof(buffer), fperr) != NULL) + { + state_puts (s->prefix, s); + state_puts (buffer, s); + } + } + } + else + { + mutt_copy_stream (fpout, s->fpout); + /* Check for stderr messages */ + if (fgets (buffer, sizeof(buffer), fperr)) + { + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- Autoview stderr of %s --]\n"), + command); + } + + state_puts (buffer, s); + mutt_copy_stream (fperr, s->fpout); + } + } + + bail: + safe_fclose (&fpout); + safe_fclose (&fperr); + + mutt_wait_filter (thepid); + if (piped) + safe_fclose (&fpin); + else + mutt_unlink (tempfile); + + if (s->flags & M_DISPLAY) + mutt_clear_error (); + } + rfc1524_free_entry (&entry); +} + +static void external_body_handler (BODY *b, STATE *s) +{ + const char *access_type; + const char *expiration; + time_t expire; + + access_type = mutt_get_parameter ("access-type", b->parameter); + if (!access_type) + { + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_puts (_("[-- Error: message/external-body has no access-type parameter --]\n"), s); + } + return; + } + + expiration = mutt_get_parameter ("expiration", b->parameter); + if (expiration) + expire = mutt_parse_date (expiration, NULL); + else + expire = -1; + + if (!ascii_strcasecmp (access_type, "x-mutt-deleted")) + { + if (s->flags & (M_DISPLAY|M_PRINTING)) + { + char *length; + char pretty_size[10]; + + state_mark_attach (s); + state_printf (s, _("[-- This %s/%s attachment "), + TYPE(b->parts), b->parts->subtype); + length = mutt_get_parameter ("length", b->parameter); + if (length) + { + mutt_pretty_size (pretty_size, sizeof (pretty_size), + strtol (length, NULL, 10)); + state_printf (s, _("(size %s bytes) "), pretty_size); + } + state_puts (_("has been deleted --]\n"), s); + + if (expire != -1) + { + state_mark_attach (s); + state_printf (s, _("[-- on %s --]\n"), expiration); + } + if (b->parts->filename) + { + state_mark_attach (s); + state_printf (s, _("[-- name: %s --]\n"), b->parts->filename); + } + + mutt_copy_hdr (s->fpin, s->fpout, ftell (s->fpin), b->parts->offset, + (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | + CH_DECODE , NULL); + } + } + else if(expiration && expire < time(NULL)) + { + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- This %s/%s attachment is not included, --]\n"), + TYPE(b->parts), b->parts->subtype); + state_attach_puts (_("[-- and the indicated external source has --]\n" + "[-- expired. --]\n"), s); + + mutt_copy_hdr(s->fpin, s->fpout, ftell (s->fpin), b->parts->offset, + (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | + CH_DECODE, NULL); + } + } + else + { + if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, + _("[-- This %s/%s attachment is not included, --]\n"), + TYPE (b->parts), b->parts->subtype); + state_mark_attach (s); + state_printf (s, + _("[-- and the indicated access-type %s is unsupported --]\n"), + access_type); + mutt_copy_hdr (s->fpin, s->fpout, ftell (s->fpin), b->parts->offset, + (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | + CH_DECODE , NULL); + } + } +} + +void mutt_decode_attachment (BODY *b, STATE *s) +{ + int istext = mutt_is_text_part (b); + iconv_t cd = (iconv_t)(-1); + + Quotebuf[0] = '\0'; + + if (istext && s->flags & M_CHARCONV) + { + char *charset = mutt_get_parameter ("charset", b->parameter); + if (charset && Charset) + cd = mutt_iconv_open (Charset, charset, M_ICONV_HOOK_FROM); + } + + fseek (s->fpin, b->offset, 0); + switch (b->encoding) + { + case ENCQUOTEDPRINTABLE: + mutt_decode_quoted (s, b->length, istext, cd); + break; + case ENCBASE64: + mutt_decode_base64 (s, b->length, istext, cd); + break; + case ENCUUENCODED: + mutt_decode_uuencoded (s, b->length, istext, cd); + break; + default: + mutt_decode_xbit (s, b->length, istext, cd); + break; + } + + if (cd != (iconv_t)(-1)) + iconv_close (cd); +} + +void mutt_body_handler (BODY *b, STATE *s) +{ + int decode = 0; + int plaintext = 0; + FILE *fp = NULL; + char tempfile[_POSIX_PATH_MAX]; + handler_t handler = NULL; + long tmpoffset = 0; + size_t tmplength = 0; + char type[STRING]; + + int oflags = s->flags; + + /* first determine which handler to use to process this part */ + + snprintf (type, sizeof (type), "%s/%s", TYPE (b), b->subtype); + if (mutt_is_autoview (b, type)) + { + rfc1524_entry *entry = rfc1524_new_entry (); + + if (rfc1524_mailcap_lookup (b, type, entry, M_AUTOVIEW)) + { + handler = autoview_handler; + s->flags &= ~M_CHARCONV; + } + rfc1524_free_entry (&entry); + } + else if (b->type == TYPETEXT) + { + if (ascii_strcasecmp ("plain", b->subtype) == 0) + { + /* avoid copying this part twice since removing the transfer-encoding is + * the only operation needed. + */ + if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b)) + handler = crypt_pgp_application_pgp_handler; + else if (ascii_strcasecmp ("flowed", mutt_get_parameter ("format", b->parameter)) == 0) + handler = text_plain_flowed_handler; + else + plaintext = 1; + } + else if (ascii_strcasecmp ("enriched", b->subtype) == 0) + handler = text_enriched_handler; + else /* text body type without a handler */ + plaintext = 1; + } + else if (b->type == TYPEMESSAGE) + { + if(mutt_is_message_type(b->type, b->subtype)) + handler = message_handler; + else if (!ascii_strcasecmp ("delivery-status", b->subtype)) + plaintext = 1; + else if (!ascii_strcasecmp ("external-body", b->subtype)) + handler = external_body_handler; + } + else if (b->type == TYPEMULTIPART) + { + char *p; + + if (ascii_strcasecmp ("alternative", b->subtype) == 0) + handler = alternative_handler; + else if (WithCrypto && ascii_strcasecmp ("signed", b->subtype) == 0) + { + p = mutt_get_parameter ("protocol", b->parameter); + + if (!p) + mutt_error _("Error: multipart/signed has no protocol."); + else if (s->flags & M_VERIFY) + handler = mutt_signed_handler; + } + else if ((WithCrypto & APPLICATION_PGP) + && mutt_strcasecmp ("encrypted", b->subtype) == 0) + { + p = mutt_get_parameter ("protocol", b->parameter); + + if (!p) + mutt_error _("Error: multipart/encrypted has no protocol parameter!"); + else if (ascii_strcasecmp ("application/pgp-encrypted", p) == 0) + handler = crypt_pgp_encrypted_handler; + } + + if (!handler) + handler = multipart_handler; + } + else if (WithCrypto && b->type == TYPEAPPLICATION) + { + if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b)) + handler = crypt_pgp_application_pgp_handler; + if ((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime(b)) + handler = crypt_smime_application_smime_handler; + } + + + if (plaintext || handler) + { + fseek (s->fpin, b->offset, 0); + + /* see if we need to decode this part before processing it */ + if (b->encoding == ENCBASE64 || b->encoding == ENCQUOTEDPRINTABLE || + b->encoding == ENCUUENCODED || plaintext || + mutt_is_text_part (b)) /* text subtypes may + * require character + * set conversion even + * with 8bit encoding. + */ + { + int origType = b->type; + char *savePrefix = NULL; + + if (!plaintext) + { + /* decode to a tempfile, saving the original destination */ + fp = s->fpout; + mutt_mktemp (tempfile); + if ((s->fpout = safe_fopen (tempfile, "w")) == NULL) + { + mutt_error _("Unable to open temporary file!"); + goto bail; + } + /* decoding the attachment changes the size and offset, so save a copy + * of the "real" values now, and restore them after processing + */ + tmplength = b->length; + tmpoffset = b->offset; + + /* if we are decoding binary bodies, we don't want to prefix each + * line with the prefix or else the data will get corrupted. + */ + savePrefix = s->prefix; + s->prefix = NULL; + + decode = 1; + } + else + b->type = TYPETEXT; + + mutt_decode_attachment (b, s); + + if (decode) + { + b->length = ftell (s->fpout); + b->offset = 0; + fclose (s->fpout); + + /* restore final destination and substitute the tempfile for input */ + s->fpout = fp; + fp = s->fpin; + s->fpin = fopen (tempfile, "r"); + unlink (tempfile); + + /* restore the prefix */ + s->prefix = savePrefix; + } + + b->type = origType; + } + + /* process the (decoded) body part */ + if (handler) + { + handler (b, s); + + if (decode) + { + b->length = tmplength; + b->offset = tmpoffset; + + /* restore the original source stream */ + fclose (s->fpin); + s->fpin = fp; + } + } + } + else if (s->flags & M_DISPLAY) + { + state_mark_attach (s); + state_printf (s, _("[-- %s/%s is unsupported "), TYPE (b), b->subtype); + if (!option (OPTVIEWATTACH)) + { + if (km_expand_key (type, sizeof(type), + km_find_func (MENU_PAGER, OP_VIEW_ATTACHMENTS))) + fprintf (s->fpout, _("(use '%s' to view this part)"), type); + else + fputs (_("(need 'view-attachments' bound to key!)"), s->fpout); + } + fputs (" --]\n", s->fpout); + } + + bail: + s->flags = oflags; +} diff --git a/hash.c b/hash.c new file mode 100644 index 0000000..c0edb30 --- /dev/null +++ b/hash.c @@ -0,0 +1,182 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "mutt.h" + +#define SOMEPRIME 149711 + +int hash_string (const unsigned char *s, int n) +{ + int h = 0; + +#if 0 + while (*s) + h += *s++; +#else + while (*s) + h += (h << 7) + *s++; + h = (h * SOMEPRIME) % n; + h = (h >= 0) ? h : h + n; +#endif + + return (h % n); +} + +HASH *hash_create (int nelem) +{ + HASH *table = safe_malloc (sizeof (HASH)); + if (nelem == 0) + nelem = 2; + table->nelem = nelem; + table->curnelem = 0; + table->table = safe_calloc (nelem, sizeof (struct hash_elem *)); + return table; +} + +HASH *hash_resize (HASH *ptr, int nelem) +{ + HASH *table; + struct hash_elem *elem, *tmp; + int i; + + table = hash_create (nelem); + + for (i = 0; i < ptr->nelem; i++) + { + for (elem = ptr->table[i]; elem; ) + { + tmp = elem; + elem = elem->next; + hash_insert (table, tmp->key, tmp->data, 1); + FREE (&tmp); + } + } + FREE (&ptr->table); + FREE (&ptr); + + return table; +} + +/* table hash table to update + * key key to hash on + * data data to associate with `key' + * allow_dup if nonzero, duplicate keys are allowed in the table + */ +int hash_insert (HASH * table, const char *key, void *data, int allow_dup) +{ + struct hash_elem *ptr; + int h; + + ptr = (struct hash_elem *) safe_malloc (sizeof (struct hash_elem)); + h = hash_string ((unsigned char *) key, table->nelem); + ptr->key = key; + ptr->data = data; + + if (allow_dup) + { + ptr->next = table->table[h]; + table->table[h] = ptr; + table->curnelem++; + } + else + { + struct hash_elem *tmp, *last; + int r; + + for (tmp = table->table[h], last = NULL; tmp; last = tmp, tmp = tmp->next) + { + r = mutt_strcmp (tmp->key, key); + if (r == 0) + { + FREE (&ptr); + return (-1); + } + if (r > 0) + break; + } + if (last) + last->next = ptr; + else + table->table[h] = ptr; + ptr->next = tmp; + table->curnelem++; + } + return h; +} + +void *hash_find_hash (const HASH * table, int hash, const char *key) +{ + struct hash_elem *ptr = table->table[hash]; + for (; ptr; ptr = ptr->next) + { + if (mutt_strcmp (key, ptr->key) == 0) + return (ptr->data); + } + return NULL; +} + +void hash_delete_hash (HASH * table, int hash, const char *key, const void *data, + void (*destroy) (void *)) +{ + struct hash_elem *ptr = table->table[hash]; + struct hash_elem **last = &table->table[hash]; + + for (; ptr; last = &ptr->next, ptr = ptr->next) + { + /* if `data' is given, look for a matching ->data member. this is + * required for the case where we have multiple entries with the same + * key + */ + if ((data == ptr->data) || (!data && mutt_strcmp (ptr->key, key) == 0)) + { + *last = ptr->next; + if (destroy) destroy (ptr->data); + FREE (&ptr); + table->curnelem--; + return; + } + } +} + +/* ptr pointer to the hash table to be freed + * destroy() function to call to free the ->data member (optional) + */ +void hash_destroy (HASH **ptr, void (*destroy) (void *)) +{ + int i; + HASH *pptr = *ptr; + struct hash_elem *elem, *tmp; + + for (i = 0 ; i < pptr->nelem; i++) + { + for (elem = pptr->table[i]; elem; ) + { + tmp = elem; + elem = elem->next; + if (destroy) + destroy (tmp->data); + FREE (&tmp); + } + } + FREE (&pptr->table); + FREE (ptr); +} diff --git a/hash.h b/hash.h new file mode 100644 index 0000000..a1d5e91 --- /dev/null +++ b/hash.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _HASH_H +#define _HASH_H + +struct hash_elem +{ + const char *key; + void *data; + struct hash_elem *next; +}; + +typedef struct +{ + int nelem, curnelem; + struct hash_elem **table; +} +HASH; + +#define hash_find(table, key) hash_find_hash(table, hash_string ((unsigned char *)key, table->nelem), key) + +#define hash_delete(table,key,data,destroy) hash_delete_hash(table, hash_string ((unsigned char *)key, table->nelem), key, data, destroy) + +HASH *hash_create (int nelem); +int hash_string (const unsigned char *s, int n); +int hash_insert (HASH * table, const char *key, void *data, int allow_dup); +HASH *hash_resize (HASH * table, int nelem); +void *hash_find_hash (const HASH * table, int hash, const char *key); +void hash_delete_hash (HASH * table, int hash, const char *key, const void *data, + void (*destroy) (void *)); +void hash_destroy (HASH ** hash, void (*destroy) (void *)); + +#endif diff --git a/hdrline.c b/hdrline.c new file mode 100644 index 0000000..93f3bc7 --- /dev/null +++ b/hdrline.c @@ -0,0 +1,738 @@ +/* + * Copyright (C) 1996-2000,2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "sort.h" +#include "charset.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#include <ctype.h> +#include <stdlib.h> +#include <string.h> +#include <locale.h> + +int mutt_is_mail_list (ADDRESS *addr) +{ + return mutt_match_rx_list (addr->mailbox, MailLists); +} + +int mutt_is_subscribed_list (ADDRESS *addr) +{ + return mutt_match_rx_list (addr->mailbox, SubscribedLists); +} + +/* Search for a mailing list in the list of addresses pointed to by adr. + * If one is found, print pfx and the name of the list into buf, then + * return 1. Otherwise, simply return 0. + */ +static int +check_for_mailing_list (ADDRESS *adr, char *pfx, char *buf, int buflen) +{ + for (; adr; adr = adr->next) + { + if (mutt_is_subscribed_list (adr)) + { + if (pfx && buf && buflen) + snprintf (buf, buflen, "%s%s", pfx, mutt_get_name (adr)); + return 1; + } + } + return 0; +} + +/* Search for a mailing list in the list of addresses pointed to by adr. + * If one is found, print the address of the list into buf, then return 1. + * Otherwise, simply return 0. + */ +static int +check_for_mailing_list_addr (ADDRESS *adr, char *buf, int buflen) +{ + for (; adr; adr = adr->next) + { + if (mutt_is_subscribed_list (adr)) + { + if (buf && buflen) + snprintf (buf, buflen, "%s", adr->mailbox); + return 1; + } + } + return 0; +} + + +static int first_mailing_list (char *buf, size_t buflen, ADDRESS *a) +{ + for (; a; a = a->next) + { + if (mutt_is_subscribed_list (a)) + { + mutt_save_path (buf, buflen, a); + return 1; + } + } + return 0; +} + +static void make_from (ENVELOPE *hdr, char *buf, size_t len, int do_lists) +{ + int me; + + me = mutt_addr_is_user (hdr->from); + + if (do_lists || me) + { + if (check_for_mailing_list (hdr->to, "To ", buf, len)) + return; + if (check_for_mailing_list (hdr->cc, "Cc ", buf, len)) + return; + } + + if (me && hdr->to) + snprintf (buf, len, "To %s", mutt_get_name (hdr->to)); + else if (me && hdr->cc) + snprintf (buf, len, "Cc %s", mutt_get_name (hdr->cc)); + else if (hdr->from) + strfcpy (buf, mutt_get_name (hdr->from), len); + else + *buf = 0; +} + +static void make_from_addr (ENVELOPE *hdr, char *buf, size_t len, int do_lists) +{ + int me; + + me = mutt_addr_is_user (hdr->from); + + if (do_lists || me) + { + if (check_for_mailing_list_addr (hdr->to, buf, len)) + return; + if (check_for_mailing_list_addr (hdr->cc, buf, len)) + return; + } + + if (me && hdr->to) + snprintf (buf, len, "%s", hdr->to->mailbox); + else if (me && hdr->cc) + snprintf (buf, len, "%s", hdr->cc->mailbox); + else if (hdr->from) + strfcpy (buf, hdr->from->mailbox, len); + else + *buf = 0; +} + +static int user_in_addr (ADDRESS *a) +{ + for (; a; a = a->next) + if (mutt_addr_is_user (a)) + return 1; + return 0; +} + +/* Return values: + * 0: user is not in list + * 1: user is unique recipient + * 2: user is in the TO list + * 3: user is in the CC list + * 4: user is originator + * 5: sent to a subscribed mailinglist + */ +int mutt_user_is_recipient (HEADER *h) +{ + ENVELOPE *env = h->env; + + if(!h->recip_valid) + { + h->recip_valid = 1; + + if (mutt_addr_is_user (env->from)) + h->recipient = 4; + else if (user_in_addr (env->to)) + { + if (env->to->next || env->cc) + h->recipient = 2; /* non-unique recipient */ + else + h->recipient = 1; /* unique recipient */ + } + else if (user_in_addr (env->cc)) + h->recipient = 3; + else if (check_for_mailing_list (env->to, NULL, NULL, 0)) + h->recipient = 5; + else if (check_for_mailing_list (env->cc, NULL, NULL, 0)) + h->recipient = 5; + else + h->recipient = 0; + } + + return h->recipient; +} + +/* %a = address of author + * %A = reply-to address (if present; otherwise: address of author + * %b = filename of the originating folder + * %B = the list to which the letter was sent + * %c = size of message in bytes + * %C = current message number + * %d = date and time of message using $date_format and sender's timezone + * %D = date and time of message using $date_format and local timezone + * %e = current message number in thread + * %E = number of messages in current thread + * %f = entire from line + * %F = like %n, unless from self + * %g = newsgroup name (if compiled with nntp support) + * %i = message-id + * %I = initials of author + * %l = number of lines in the message + * %L = like %F, except `lists' are displayed first + * %m = number of messages in the mailbox + * %n = name of author + * %N = score + * %O = like %L, except using address instead of name + * %s = subject + * %S = short message status (e.g., N/O/D/!/r/-) + * %t = `to:' field (recipients) + * %T = $to_chars + * %u = user (login) name of author + * %v = first name of author, unless from self + * %W = where user is (organization) + * %y = `x-label:' field (if present) + * %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label) + * %Z = status flags */ + +struct hdr_format_info +{ + CONTEXT *ctx; + HEADER *hdr; +}; + +static const char * +hdr_format_str (char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags) +{ + struct hdr_format_info *hfi = (struct hdr_format_info *) data; + HEADER *hdr, *htmp; + CONTEXT *ctx; + char fmt[SHORT_STRING], buf2[SHORT_STRING], ch, *p; + int do_locales, i; + int optional = (flags & M_FORMAT_OPTIONAL); + int threads = ((Sort & SORT_MASK) == SORT_THREADS); + int is_index = (flags & M_FORMAT_INDEX); +#define THREAD_NEW (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 1) +#define THREAD_OLD (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 2) + size_t len; + + hdr = hfi->hdr; + ctx = hfi->ctx; + + dest[0] = 0; + switch (op) + { + case 'A': + if(hdr->env->reply_to && hdr->env->reply_to->mailbox) + { + mutt_format_s (dest, destlen, prefix, mutt_addr_for_display (hdr->env->reply_to)); + break; + } + /* fall through if 'A' returns nothing */ + + case 'a': + if(hdr->env->from && hdr->env->from->mailbox) + { + mutt_format_s (dest, destlen, prefix, mutt_addr_for_display (hdr->env->from)); + } + else + dest[0] = '\0'; + break; + + case 'B': + if (!first_mailing_list (dest, destlen, hdr->env->to) && + !first_mailing_list (dest, destlen, hdr->env->cc)) + dest[0] = 0; + if (dest[0]) + { + strfcpy (buf2, dest, sizeof(buf2)); + mutt_format_s (dest, destlen, prefix, buf2); + break; + } + /* fall through if 'B' returns nothing */ + + case 'b': + if(ctx) + { + if ((p = strrchr (ctx->path, '/'))) + strfcpy (dest, p + 1, destlen); + else + strfcpy (dest, ctx->path, destlen); + } + else + strfcpy(dest, "(null)", destlen); + strfcpy (buf2, dest, sizeof(buf2)); + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'c': + mutt_pretty_size (buf2, sizeof (buf2), (long) hdr->content->length); + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'C': + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, hdr->msgno + 1); + break; + + case 'd': + case 'D': + case '{': + case '[': + case '(': + case '<': + + /* preprocess $date_format to handle %Z */ + { + const char *cp; + struct tm *tm; + time_t T; + + p = dest; + + cp = (op == 'd' || op == 'D') ? (NONULL (DateFmt)) : src; + if (*cp == '!') + { + do_locales = 0; + cp++; + } + else + do_locales = 1; + + len = destlen - 1; + while (len > 0 && (((op == 'd' || op == 'D') && *cp) || + (op == '{' && *cp != '}') || + (op == '[' && *cp != ']') || + (op == '(' && *cp != ')') || + (op == '<' && *cp != '>'))) + { + if (*cp == '%') + { + cp++; + if ((*cp == 'Z' || *cp == 'z') && (op == 'd' || op == '{')) + { + if (len >= 5) + { + sprintf (p, "%c%02u%02u", hdr->zoccident ? '-' : '+', + hdr->zhours, hdr->zminutes); + p += 5; + len -= 5; + } + else + break; /* not enough space left */ + } + else + { + if (len >= 2) + { + *p++ = '%'; + *p++ = *cp; + len -= 2; + } + else + break; /* not enough space */ + } + cp++; + } + else + { + *p++ = *cp++; + len--; + } + } + *p = 0; + + if (do_locales && Locale) + setlocale (LC_TIME, Locale); + + if (op == '[' || op == 'D') + tm = localtime (&hdr->date_sent); + else if (op == '(') + tm = localtime (&hdr->received); + else if (op == '<') + { + T = time (NULL); + tm = localtime (&T); + } + else + { + /* restore sender's time zone */ + T = hdr->date_sent; + if (hdr->zoccident) + T -= (hdr->zhours * 3600 + hdr->zminutes * 60); + else + T += (hdr->zhours * 3600 + hdr->zminutes * 60); + tm = gmtime (&T); + } + + strftime (buf2, sizeof (buf2), dest, tm); + + if (do_locales) + setlocale (LC_TIME, "C"); + + mutt_format_s (dest, destlen, prefix, buf2); + if (len > 0 && op != 'd' && op != 'D') /* Skip ending op */ + src = cp + 1; + } + break; + + case 'e': + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, mutt_messages_in_thread(ctx, hdr, 1)); + break; + + case 'E': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, mutt_messages_in_thread(ctx, hdr, 0)); + } + else if (mutt_messages_in_thread(ctx, hdr, 0) <= 1) + optional = 0; + break; + + case 'f': + buf2[0] = 0; + rfc822_write_address (buf2, sizeof (buf2), hdr->env->from, 1); + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'F': + if (!optional) + { + make_from (hdr->env, buf2, sizeof (buf2), 0); + mutt_format_s (dest, destlen, prefix, buf2); + } + else if (mutt_addr_is_user (hdr->env->from)) + optional = 0; + break; + +#ifdef USE_NNTP + case 'g': + mutt_format_s (dest, destlen, prefix, hdr->env->newsgroups ? hdr->env->newsgroups : ""); + break; +#endif + + case 'i': + mutt_format_s (dest, destlen, prefix, hdr->env->message_id ? hdr->env->message_id : "<no.id>"); + break; + + case 'I': + { + int iflag = FALSE; + int j = 0; + + for (i = 0; hdr->env->from && hdr->env->from->personal && + hdr->env->from->personal[i] && j < SHORT_STRING - 1; i++) + { + if (isalpha ((int)hdr->env->from->personal[i])) + { + if (!iflag) + { + buf2[j++] = hdr->env->from->personal[i]; + iflag = TRUE; + } + } + else + iflag = FALSE; + } + + buf2[j] = '\0'; + } + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'l': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, (int) hdr->lines); + } + else if (hdr->lines <= 0) + optional = 0; + break; + + case 'L': + if (!optional) + { + make_from (hdr->env, buf2, sizeof (buf2), 1); + mutt_format_s (dest, destlen, prefix, buf2); + } + else if (!check_for_mailing_list (hdr->env->to, NULL, NULL, 0) && + !check_for_mailing_list (hdr->env->cc, NULL, NULL, 0)) + { + optional = 0; + } + break; + + case 'm': + if(ctx) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, ctx->msgcount); + } + else + strfcpy(dest, "(null)", destlen); + break; + + case 'n': + mutt_format_s (dest, destlen, prefix, mutt_get_name (hdr->env->from)); + break; + + case 'N': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, hdr->score); + } + else + { + if (hdr->score == 0) + optional = 0; + } + break; + + case 'O': + if (!optional) + { + make_from_addr (hdr->env, buf2, sizeof (buf2), 1); + if (!option (OPTSAVEADDRESS) && (p = strpbrk (buf2, "%@"))) + *p = 0; + mutt_format_s (dest, destlen, prefix, buf2); + } + else if (!check_for_mailing_list_addr (hdr->env->to, NULL, 0) && + !check_for_mailing_list_addr (hdr->env->cc, NULL, 0)) + { + optional = 0; + } + break; + + case 'M': + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + if (!optional) + { + if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1) + snprintf (dest, destlen, fmt, hdr->num_hidden); + else if (is_index && threads) + mutt_format_s (dest, destlen, prefix, " "); + else + *dest = '\0'; + } + else + { + if (!(threads && is_index && hdr->collapsed && hdr->num_hidden > 1)) + optional = 0; + } + break; + + case 's': + + if (flags & M_FORMAT_TREE && !hdr->collapsed) + { + if (flags & M_FORMAT_FORCESUBJ) + { + mutt_format_s (dest, destlen, "", NONULL (hdr->env->subject)); + snprintf (buf2, sizeof (buf2), "%s%s", hdr->tree, dest); + mutt_format_s_tree (dest, destlen, prefix, buf2); + } + else + mutt_format_s_tree (dest, destlen, prefix, hdr->tree); + } + else + mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->subject)); + break; + + case 'S': + if (hdr->deleted) + ch = 'D'; + else if (hdr->attach_del) + ch = 'd'; + else if (hdr->tagged) + ch = '*'; + else if (hdr->flagged) + ch = '!'; + else if (hdr->replied) + ch = 'r'; + else if (hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno)) + ch = '-'; + else if (hdr->old) + ch = 'O'; + else + ch = 'N'; + + /* FOO - this is probably unsafe, but we are not likely to have such + a short string passed into this routine */ + *dest = ch; + *(dest + 1) = 0; + break; + + case 't': + buf2[0] = 0; + if (!check_for_mailing_list (hdr->env->to, "To ", buf2, sizeof (buf2)) && + !check_for_mailing_list (hdr->env->cc, "Cc ", buf2, sizeof (buf2))) + { + if (hdr->env->to) + snprintf (buf2, sizeof (buf2), "To %s", mutt_get_name (hdr->env->to)); + else if (hdr->env->cc) + snprintf (buf2, sizeof (buf2), "Cc %s", mutt_get_name (hdr->env->cc)); + } + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'T': + snprintf (fmt, sizeof (fmt), "%%%sc", prefix); + snprintf (dest, destlen, fmt, + (Tochars && ((i = mutt_user_is_recipient (hdr))) < mutt_strlen (Tochars)) ? Tochars[i] : ' '); + break; + + case 'u': + if (hdr->env->from && hdr->env->from->mailbox) + { + strfcpy (buf2, mutt_addr_for_display (hdr->env->from), sizeof (buf2)); + if ((p = strpbrk (buf2, "%@"))) + *p = 0; + } + else + buf2[0] = 0; + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'v': + if (mutt_addr_is_user (hdr->env->from)) + { + if (hdr->env->to) + mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->to)); + else if (hdr->env->cc) + mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->cc)); + else + *buf2 = 0; + } + else + mutt_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->from)); + if ((p = strpbrk (buf2, " %@"))) + *p = 0; + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'W': + if (!optional) + mutt_format_s (dest, destlen, prefix, hdr->env->organization ? hdr->env->organization : ""); + else if (!hdr->env->organization) + optional = 0; + break; + + case 'Z': + + ch = ' '; + + if (WithCrypto && hdr->security & GOODSIGN) + ch = 'S'; + else if (WithCrypto && hdr->security & ENCRYPT) + ch = 'P'; + else if (WithCrypto && hdr->security & SIGN) + ch = 's'; + else if ((WithCrypto & APPLICATION_PGP) && hdr->security & PGPKEY) + ch = 'K'; + + snprintf (buf2, sizeof (buf2), + "%c%c%c", (THREAD_NEW ? 'n' : (THREAD_OLD ? 'o' : + ((hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno)) + ? (hdr->replied ? 'r' : ' ') : (hdr->old ? 'O' : 'N')))), + hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch), + hdr->tagged ? '*' : + (hdr->flagged ? '!' : + (Tochars && ((i = mutt_user_is_recipient (hdr)) < mutt_strlen (Tochars)) ? Tochars[i] : ' '))); + mutt_format_s (dest, destlen, prefix, buf2); + break; + + case 'y': + if (optional) + optional = hdr->env->x_label ? 1 : 0; + + mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label)); + break; + + case 'Y': + if (hdr->env->x_label) + { + i = 1; /* reduce reuse recycle */ + htmp = NULL; + if (flags & M_FORMAT_TREE + && (hdr->thread->prev && hdr->thread->prev->message + && hdr->thread->prev->message->env->x_label)) + htmp = hdr->thread->prev->message; + else if (flags & M_FORMAT_TREE + && (hdr->thread->parent && hdr->thread->parent->message + && hdr->thread->parent->message->env->x_label)) + htmp = hdr->thread->parent->message; + if (htmp && mutt_strcasecmp (hdr->env->x_label, + htmp->env->x_label) == 0) + i = 0; + } + else + i = 0; + + if (optional) + optional = i; + + if (i) + mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label)); + else + mutt_format_s (dest, destlen, prefix, ""); + + break; + + default: + snprintf (dest, destlen, "%%%s%c", prefix, op); + break; + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, hdr_format_str, (unsigned long) hfi, flags); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, hdr_format_str, (unsigned long) hfi, flags); + + return (src); +#undef THREAD_NEW +#undef THREAD_OLD +} + +void +_mutt_make_string (char *dest, size_t destlen, const char *s, CONTEXT *ctx, HEADER *hdr, format_flag flags) +{ + struct hdr_format_info hfi; + + hfi.hdr = hdr; + hfi.ctx = ctx; + + mutt_FormatString (dest, destlen, s, hdr_format_str, (unsigned long) &hfi, flags); +} diff --git a/headers.c b/headers.c new file mode 100644 index 0000000..4492bf7 --- /dev/null +++ b/headers.c @@ -0,0 +1,204 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#include <sys/stat.h> +#include <string.h> +#include <ctype.h> + +void mutt_edit_headers (const char *editor, + const char *body, + HEADER *msg, + char *fcc, + size_t fcclen) +{ + char path[_POSIX_PATH_MAX]; /* tempfile used to edit headers + body */ + char buffer[LONG_STRING]; + char *p; + FILE *ifp, *ofp; + int i, keep; + ENVELOPE *n; + time_t mtime; + struct stat st; + LIST *cur, **last = NULL, *tmp; + + mutt_mktemp (path); + if ((ofp = safe_fopen (path, "w")) == NULL) + { + mutt_perror (path); + return; + } + + mutt_env_to_local (msg->env); + mutt_write_rfc822_header (ofp, msg->env, NULL, 1, 0); + fputc ('\n', ofp); /* tie off the header. */ + + /* now copy the body of the message. */ + if ((ifp = fopen (body, "r")) == NULL) + { + mutt_perror (body); + return; + } + + mutt_copy_stream (ifp, ofp); + + fclose (ifp); + fclose (ofp); + + if (stat (path, &st) == -1) + { + mutt_perror (path); + return; + } + + mtime = mutt_decrease_mtime (path, &st); + + mutt_edit_file (editor, path); + stat (path, &st); + if (mtime == st.st_mtime) + { + dprint (1, (debugfile, "ci_edit_headers(): temp file was not modified.\n")); + /* the file has not changed! */ + mutt_unlink (path); + return; + } + + mutt_unlink (body); + mutt_free_list (&msg->env->userhdrs); + + /* Read the temp file back in */ + if ((ifp = fopen (path, "r")) == NULL) + { + mutt_perror (path); + return; + } + + if ((ofp = safe_fopen (body, "w")) == NULL) + { + /* intentionally leak a possible temporary file here */ + fclose (ifp); + mutt_perror (body); + return; + } + + n = mutt_read_rfc822_header (ifp, NULL, 1, 0); + while ((i = fread (buffer, 1, sizeof (buffer), ifp)) > 0) + fwrite (buffer, 1, i, ofp); + fclose (ofp); + fclose (ifp); + mutt_unlink (path); + + /* restore old info. */ + n->references = msg->env->references; + msg->env->references = NULL; + + mutt_free_envelope (&msg->env); + msg->env = n; n = NULL; + + if (!msg->env->in_reply_to) +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + mutt_free_list (&msg->env->references); + + mutt_expand_aliases_env (msg->env); + + /* search through the user defined headers added to see if either a + * fcc: or attach-file: field was specified. + */ + + cur = msg->env->userhdrs; + last = &msg->env->userhdrs; + while (cur) + { + keep = 1; + + /* keep track of whether or not we see the in-reply-to field. if we did + * not, remove the references: field later so that we can generate a new + * message based upon this one. + */ + if (fcc && ascii_strncasecmp ("fcc:", cur->data, 4) == 0) + { + p = cur->data + 4; + SKIPWS (p); + if (*p) + { + strfcpy (fcc, p, fcclen); + mutt_pretty_mailbox (fcc); + } + keep = 0; + } + else if (ascii_strncasecmp ("attach:", cur->data, 7) == 0) + { + BODY *body; + BODY *parts; + char *q; + + p = cur->data + 7; + SKIPWS (p); + if (*p) + { + if ((q = strpbrk (p, " \t"))) + { + mutt_substrcpy (path, p, q, sizeof (path)); + SKIPWS (q); + } + else + strfcpy (path, p, sizeof (path)); + mutt_expand_path (path, sizeof (path)); + if ((body = mutt_make_file_attach (path))) + { + body->description = safe_strdup (q); + for (parts = msg->content; parts->next; parts = parts->next) ; + parts->next = body; + } + else + { + mutt_pretty_mailbox (path); + mutt_error (_("%s: unable to attach file"), path); + } + } + keep = 0; + } + + + else if ((WithCrypto & APPLICATION_PGP) + &&ascii_strncasecmp ("pgp:", cur->data, 4) == 0) + { + msg->security = mutt_parse_crypt_hdr (cur->data + 4, 0); + keep = 0; + } + + if (keep) + { + last = &cur->next; + cur = cur->next; + } + else + { + tmp = cur; + *last = cur->next; + cur = cur->next; + tmp->next = NULL; + mutt_free_list (&tmp); + } + } +} diff --git a/help.c b/help.c new file mode 100644 index 0000000..4296122 --- /dev/null +++ b/help.c @@ -0,0 +1,351 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#define HELP_C + +#include "mutt.h" +#include "mutt_curses.h" +#include "keymap.h" +#include "pager.h" +#include "mapping.h" + +#include <ctype.h> +#include <string.h> + +static struct binding_t *help_lookupFunction (int op, int menu) +{ + int i; + struct binding_t *map; + + if (menu != MENU_PAGER) + { + /* first look in the generic map for the function */ + for (i = 0; OpGeneric[i].name; i++) + if (OpGeneric[i].op == op) + return (&OpGeneric[i]); + } + + if ((map = km_get_table(menu))) + { + for (i = 0; map[i].name; i++) + if (map[i].op == op) + return (&map[i]); + } + + return (NULL); +} + +void mutt_make_help (char *d, size_t dlen, char *txt, int menu, int op) +{ + char buf[SHORT_STRING]; + + if (km_expand_key (buf, sizeof (buf), km_find_func (menu, op)) || + km_expand_key (buf, sizeof (buf), km_find_func (MENU_GENERIC, op))) + snprintf (d, dlen, "%s:%s", buf, txt); + else + d[0] = 0; +} + +char * +mutt_compile_help (char *buf, size_t buflen, int menu, struct mapping_t *items) +{ + int i; + size_t len; + char *pbuf = buf; + + for (i = 0; items[i].name && buflen > 2; i++) + { + if (i) + { + *pbuf++ = ' '; + *pbuf++ = ' '; + buflen -= 2; + } + mutt_make_help (pbuf, buflen, _(items[i].name), menu, items[i].value); + len = mutt_strlen (pbuf); + pbuf += len; + buflen -= len; + } + return buf; +} + +static int print_macro (FILE *f, int maxwidth, const char **macro) +{ + int n = maxwidth; + wchar_t wc; + int w; + size_t k; + size_t len = mutt_strlen (*macro); + mbstate_t mbstate1, mbstate2; + + memset (&mbstate1, 0, sizeof (mbstate1)); + memset (&mbstate2, 0, sizeof (mbstate2)); + for (; len && (k = mbrtowc (&wc, *macro, len, &mbstate1)); *macro += k, len -= k) + { + if (k == (size_t)(-1) || k == (size_t)(-2)) + { + k = (k == (size_t)(-1)) ? 1 : len; + wc = replacement_char (); + } + /* glibc-2.1.3's wcwidth() returns 1 for unprintable chars! */ + if (IsWPrint (wc) && (w = wcwidth (wc)) >= 0) + { + if (w > n) + break; + n -= w; + { + char buf[MB_LEN_MAX*2]; + size_t n1, n2; + if ((n1 = wcrtomb (buf, wc, &mbstate2)) != (size_t)(-1) && + (n2 = wcrtomb (buf + n1, 0, &mbstate2)) != (size_t)(-1)) + fputs (buf, f); + } + } + else if (wc < 0x20 || wc == 0x7f) + { + if (2 > n) + break; + n -= 2; + if (wc == '\033') + fprintf (f, "\\e"); + else if (wc == '\n') + fprintf (f, "\\n"); + else if (wc == '\r') + fprintf (f, "\\r"); + else if (wc == '\t') + fprintf (f, "\\t"); + else + fprintf (f, "^%c", (char)((wc + '@') & 0x7f)); + } + else + { + if (1 > n) + break; + n -= 1; + fprintf (f, "?"); + } + } + return (maxwidth - n); +} + +static int pad (FILE *f, int col, int i) +{ + char fmt[8]; + + if (col < i) + { + snprintf (fmt, sizeof(fmt), "%%-%ds", i - col); + fprintf (f, fmt, ""); + return (i); + } + fputc (' ', f); + return (col + 1); +} + +static void format_line (FILE *f, int ismacro, + const char *t1, const char *t2, const char *t3) +{ + int col; + int col_a, col_b; + int split; + int n; + + fputs (t1, f); + + /* don't try to press string into one line with less than 40 characters. + The double paranthesis avoid a gcc warning, sigh ... */ + if ((split = COLS < 40)) + { + col_a = col = 0; + col_b = LONG_STRING; + fputc ('\n', f); + } + else + { + col_a = COLS > 83 ? (COLS - 32) >> 2 : 12; + col_b = COLS > 49 ? (COLS - 10) >> 1 : 19; + col = pad (f, mutt_strlen(t1), col_a); + } + + if (ismacro > 0) + { + if (!mutt_strcmp (Pager, "builtin")) + fputs ("_\010", f); + fputs ("M ", f); + col += 2; + + if (!split) + { + col += print_macro (f, col_b - col - 4, &t2); + if (mutt_strlen (t2) > col_b - col) + t2 = "..."; + } + } + + col += print_macro (f, col_b - col - 1, &t2); + if (split) + fputc ('\n', f); + else + col = pad (f, col, col_b); + + if (split) + { + print_macro (f, LONG_STRING, &t3); + fputc ('\n', f); + } + else + { + while (*t3) + { + n = COLS - col; + + if (ismacro >= 0) + { + SKIPWS(t3); + + /* FIXME: this is completely wrong */ + if ((n = mutt_strlen (t3)) > COLS - col) + { + n = COLS - col; + for (col_a = n; col_a > 0 && t3[col_a] != ' '; col_a--) ; + if (col_a) + n = col_a; + } + } + + print_macro (f, n, &t3); + + if (*t3) + { + if (mutt_strcmp (Pager, "builtin")) + { + fputc ('\n', f); + n = 0; + } + else + { + n += col - COLS; + if (option (OPTMARKERS)) + ++n; + } + col = pad (f, n, col_b); + } + } + } + + fputc ('\n', f); +} + +static void dump_menu (FILE *f, int menu) +{ + struct keymap_t *map; + struct binding_t *b; + char buf[SHORT_STRING]; + + /* browse through the keymap table */ + for (map = Keymaps[menu]; map; map = map->next) + { + if (map->op != OP_NULL) + { + km_expand_key (buf, sizeof (buf), map); + + if (map->op == OP_MACRO) + { + if (map->descr == NULL) + format_line (f, -1, buf, "macro", map->macro); + else + format_line (f, 1, buf, map->macro, map->descr); + } + else + { + b = help_lookupFunction (map->op, menu); + format_line (f, 0, buf, b ? b->name : "UNKNOWN", + b ? _(HelpStrings[b->op]) : _("ERROR: please report this bug")); + } + } + } +} + +static int is_bound (struct keymap_t *map, int op) +{ + for (; map; map = map->next) + if (map->op == op) + return 1; + return 0; +} + +static void dump_unbound (FILE *f, + struct binding_t *funcs, + struct keymap_t *map, + struct keymap_t *aux) +{ + int i; + + for (i = 0; funcs[i].name; i++) + { + if (! is_bound (map, funcs[i].op) && + (!aux || ! is_bound (aux, funcs[i].op))) + format_line (f, 0, funcs[i].name, "", _(HelpStrings[funcs[i].op])); + } +} + +void mutt_help (int menu) +{ + char t[_POSIX_PATH_MAX]; + char buf[SHORT_STRING]; + char *desc; + FILE *f; + struct binding_t *funcs; + + mutt_mktemp (t); + + funcs = km_get_table (menu); + desc = mutt_getnamebyvalue (menu, Menus); + if (!desc) + desc = _("<UNKNOWN>"); + + do { + if ((f = safe_fopen (t, "w")) == NULL) + { + mutt_perror (t); + return; + } + + dump_menu (f, menu); + if (menu != MENU_EDITOR && menu != MENU_PAGER) + { + fputs (_("\nGeneric bindings:\n\n"), f); + dump_menu (f, MENU_GENERIC); + } + + fputs (_("\nUnbound functions:\n\n"), f); + if (funcs) + dump_unbound (f, funcs, Keymaps[menu], NULL); + if (menu != MENU_PAGER) + dump_unbound (f, OpGeneric, Keymaps[MENU_GENERIC], Keymaps[menu]); + + fclose (f); + + snprintf (buf, sizeof (buf), _("Help for %s"), desc); + } + while + (mutt_do_pager (buf, t, + M_PAGER_RETWINCH | M_PAGER_MARKER | M_PAGER_NSKIP, + NULL) + == OP_REFORMAT_WINCH); +} diff --git a/history.c b/history.c new file mode 100644 index 0000000..ca3a2d7 --- /dev/null +++ b/history.c @@ -0,0 +1,123 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "history.h" + +/* global vars used for the string-history routines */ + +struct history +{ + char **hist; + short cur; + short last; +}; + +static struct history History[HC_LAST]; +static int OldSize = 0; + +static void init_history (struct history *h) +{ + int i; + + if(OldSize) + { + if (h->hist) + { + for (i = 0 ; i < OldSize ; i ++) + FREE (&h->hist[i]); + FREE (&h->hist); + } + } + + if (HistSize) + h->hist = safe_calloc (HistSize, sizeof (char *)); + + h->cur = 0; + h->last = 0; +} + +void mutt_init_history(void) +{ + history_class_t hclass; + + if (HistSize == OldSize) + return; + + for(hclass = HC_FIRST; hclass < HC_LAST; hclass++) + init_history(&History[hclass]); + + OldSize = HistSize; +} + +void mutt_history_add (history_class_t hclass, const char *s) +{ + int prev; + struct history *h = &History[hclass]; + + if (!HistSize) + return; /* disabled */ + + if (*s) + { + prev = h->last - 1; + if (prev < 0) prev = HistSize - 1; + if (!h->hist[prev] || mutt_strcmp (h->hist[prev], s) != 0) + { + mutt_str_replace (&h->hist[h->last++], s); + if (h->last > HistSize - 1) + h->last = 0; + } + } + h->cur = h->last; /* reset to the last entry */ +} + +char *mutt_history_next (history_class_t hclass) +{ + int next; + struct history *h = &History[hclass]; + + if (!HistSize) + return (""); /* disabled */ + + next = h->cur + 1; + if (next > HistSize - 1) + next = 0; + h->cur = h->hist[next] ? next : 0; + return (h->hist[h->cur] ? h->hist[h->cur] : ""); +} + +char *mutt_history_prev (history_class_t hclass) +{ + int prev; + struct history *h = &History[hclass]; + + if (!HistSize) + return (""); /* disabled */ + + prev = h->cur - 1; + if (prev < 0) + { + prev = HistSize - 1; + while (prev > 0 && h->hist[prev] == NULL) + prev--; + } + if (h->hist[prev]) + h->cur = prev; + return (h->hist[h->cur] ? h->hist[h->cur] : ""); +} diff --git a/history.h b/history.h new file mode 100644 index 0000000..b32a47a --- /dev/null +++ b/history.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _HISTORY_H +#define _HISTORY_H + +enum history_class +{ + HC_CMD, + HC_ALIAS, + HC_COMMAND, + HC_FILE, + HC_PATTERN, + HC_OTHER, + HC_LAST +}; + +#define HC_FIRST HC_CMD + +typedef enum history_class history_class_t; + +void mutt_init_history(void); +void mutt_history_add(history_class_t, const char *); +char *mutt_history_next(history_class_t); +char *mutt_history_prev(history_class_t); + +#endif diff --git a/hook.c b/hook.c new file mode 100644 index 0000000..d7931c0 --- /dev/null +++ b/hook.c @@ -0,0 +1,483 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>, and others + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mailbox.h" +#include "mutt_crypt.h" + +#include <limits.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include <unistd.h> + +typedef struct hook +{ + int type; /* hook type */ + REGEXP rx; /* regular expression */ + char *command; /* filename, command or pattern to execute */ + pattern_t *pattern; /* used for fcc,save,send-hook */ + struct hook *next; +} HOOK; + +static HOOK *Hooks = NULL; + +static int current_hook_type = 0; + +int mutt_parse_hook (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + HOOK *ptr; + BUFFER command, pattern; + int rc, not = 0; + regex_t *rx = NULL; + pattern_t *pat = NULL; + char path[_POSIX_PATH_MAX]; + + memset (&pattern, 0, sizeof (pattern)); + memset (&command, 0, sizeof (command)); + + if (*s->dptr == '!') + { + s->dptr++; + SKIPWS (s->dptr); + not = 1; + } + + mutt_extract_token (&pattern, s, 0); + + if (!MoreArgs (s)) + { + strfcpy (err->data, _("too few arguments"), err->dsize); + goto error; + } + + mutt_extract_token (&command, s, (data & (M_FOLDERHOOK | M_SENDHOOK | M_ACCOUNTHOOK | M_REPLYHOOK)) ? M_TOKEN_SPACE : 0); + + if (!command.data) + { + strfcpy (err->data, _("too few arguments"), err->dsize); + goto error; + } + + if (MoreArgs (s)) + { + strfcpy (err->data, _("too many arguments"), err->dsize); + goto error; + } + + if (data & (M_FOLDERHOOK | M_MBOXHOOK)) + { + strfcpy (path, pattern.data, sizeof (path)); + _mutt_expand_path (path, sizeof (path), 1); + FREE (&pattern.data); + memset (&pattern, 0, sizeof (pattern)); + pattern.data = safe_strdup (path); + } + else if (DefaultHook && !(data & (M_CHARSETHOOK | M_ACCOUNTHOOK)) + && (!WithCrypto || !(data & M_CRYPTHOOK)) + ) + { + char tmp[HUGE_STRING]; + + strfcpy (tmp, pattern.data, sizeof (tmp)); + mutt_check_simple (tmp, sizeof (tmp), DefaultHook); + FREE (&pattern.data); + memset (&pattern, 0, sizeof (pattern)); + pattern.data = safe_strdup (tmp); + } + + if (data & (M_MBOXHOOK | M_SAVEHOOK | M_FCCHOOK)) + { + strfcpy (path, command.data, sizeof (path)); + mutt_expand_path (path, sizeof (path)); + FREE (&command.data); + memset (&command, 0, sizeof (command)); + command.data = safe_strdup (path); + } + + /* check to make sure that a matching hook doesn't already exist */ + for (ptr = Hooks; ptr; ptr = ptr->next) + { + if (ptr->type == data && + ptr->rx.not == not && + !mutt_strcmp (pattern.data, ptr->rx.pattern)) + { + if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK)) + { + /* these hooks allow multiple commands with the same + * pattern, so if we've already seen this pattern/command pair, just + * ignore it instead of creating a duplicate */ + if (!mutt_strcmp (ptr->command, command.data)) + { + FREE (&command.data); + FREE (&pattern.data); + return 0; + } + } + else + { + /* other hooks only allow one command per pattern, so update the + * entry with the new command. this currently does not change the + * order of execution of the hooks, which i think is desirable since + * a common action to perform is to change the default (.) entry + * based upon some other information. */ + FREE (&ptr->command); + ptr->command = command.data; + FREE (&pattern.data); + return 0; + } + } + if (!ptr->next) + break; + } + + if (data & (M_SENDHOOK | M_SAVEHOOK | M_FCCHOOK | M_MESSAGEHOOK | M_REPLYHOOK)) + { + if ((pat = mutt_pattern_comp (pattern.data, + (data & (M_SENDHOOK | M_FCCHOOK)) ? 0 : M_FULL_MSG, + err)) == NULL) + goto error; + } + else + { + rx = safe_malloc (sizeof (regex_t)); +#ifdef M_CRYPTHOOK + if ((rc = REGCOMP (rx, NONULL(pattern.data), ((data & (M_CRYPTHOOK|M_CHARSETHOOK)) ? REG_ICASE : 0))) != 0) +#else + if ((rc = REGCOMP (rx, NONULL(pattern.data), (data & (M_CHARSETHOOK|M_ICONVHOOK)) ? REG_ICASE : 0)) != 0) +#endif /* M_CRYPTHOOK */ + { + regerror (rc, rx, err->data, err->dsize); + regfree (rx); + FREE (&rx); + goto error; + } + } + + if (ptr) + { + ptr->next = safe_calloc (1, sizeof (HOOK)); + ptr = ptr->next; + } + else + Hooks = ptr = safe_calloc (1, sizeof (HOOK)); + ptr->type = data; + ptr->command = command.data; + ptr->pattern = pat; + ptr->rx.pattern = pattern.data; + ptr->rx.rx = rx; + ptr->rx.not = not; + return 0; + +error: + FREE (&pattern.data); + FREE (&command.data); + return (-1); +} + +static void delete_hook (HOOK *h) +{ + FREE (&h->command); + FREE (&h->rx.pattern); + if (h->rx.rx) + { + regfree (h->rx.rx); + } + mutt_pattern_free (&h->pattern); + FREE (&h); +} + +/* Deletes all hooks of type ``type'', or all defined hooks if ``type'' is 0 */ +static void delete_hooks (int type) +{ + HOOK *h; + HOOK *prev; + + while (h = Hooks, h && (type == 0 || type == h->type)) + { + Hooks = h->next; + delete_hook (h); + } + + prev = h; /* Unused assignment to avoid compiler warnings */ + + while (h) + { + if (type == h->type) + { + prev->next = h->next; + delete_hook (h); + } + else + prev = h; + h = prev->next; + } +} + +int mutt_parse_unhook (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + while (MoreArgs (s)) + { + mutt_extract_token (buf, s, 0); + if (mutt_strcmp ("*", buf->data) == 0) + { + if (current_hook_type) + { + snprintf (err->data, err->dsize, + _("unhook: Can't do unhook * from within a hook.")); + return -1; + } + delete_hooks (0); + } + else + { + int type = mutt_get_hook_type (buf->data); + + if (!type) + { + snprintf (err->data, err->dsize, + _("unhook: unknown hook type: %s"), buf->data); + return (-1); + } + if (current_hook_type == type) + { + snprintf (err->data, err->dsize, + _("unhook: Can't delete a %s from within a %s."), + buf->data, buf->data); + return -1; + } + delete_hooks (type); + } + } + return 0; +} + +void mutt_folder_hook (char *path) +{ + HOOK *tmp = Hooks; + BUFFER err, token; + char buf[STRING]; + + current_hook_type = M_FOLDERHOOK; + + err.data = buf; + err.dsize = sizeof (buf); + memset (&token, 0, sizeof (token)); + for (; tmp; tmp = tmp->next) + { + if(!tmp->command) + continue; + + if (tmp->type & M_FOLDERHOOK) + { + if ((regexec (tmp->rx.rx, path, 0, NULL, 0) == 0) ^ tmp->rx.not) + { + if (mutt_parse_rc_line (tmp->command, &token, &err) == -1) + { + mutt_error ("%s", err.data); + FREE (&token.data); + mutt_sleep (1); /* pause a moment to let the user see the error */ + current_hook_type = 0; + return; + } + } + } + } + FREE (&token.data); + + current_hook_type = 0; +} + +char *mutt_find_hook (int type, const char *pat) +{ + HOOK *tmp = Hooks; + + for (; tmp; tmp = tmp->next) + if (tmp->type & type) + { + if (regexec (tmp->rx.rx, pat, 0, NULL, 0) == 0) + return (tmp->command); + } + return (NULL); +} + +void mutt_message_hook (CONTEXT *ctx, HEADER *hdr, int type) +{ + BUFFER err, token; + HOOK *hook; + char buf[STRING]; + + current_hook_type = type; + + err.data = buf; + err.dsize = sizeof (buf); + memset (&token, 0, sizeof (token)); + for (hook = Hooks; hook; hook = hook->next) + { + if(!hook->command) + continue; + + if (hook->type & type) + if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.not) + if (mutt_parse_rc_line (hook->command, &token, &err) != 0) + { + FREE (&token.data); + mutt_error ("%s", err.data); + mutt_sleep (1); + current_hook_type = 0; + return; + } + } + FREE (&token.data); + current_hook_type = 0; +} + +static int +mutt_addr_hook (char *path, size_t pathlen, int type, CONTEXT *ctx, HEADER *hdr) +{ + HOOK *hook; + + /* determine if a matching hook exists */ + for (hook = Hooks; hook; hook = hook->next) + { + if(!hook->command) + continue; + + if (hook->type & type) + if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.not) + { + mutt_make_string (path, pathlen, hook->command, ctx, hdr); + return 0; + } + } + + return -1; +} + +void mutt_default_save (char *path, size_t pathlen, HEADER *hdr) +{ + *path = 0; + if (mutt_addr_hook (path, pathlen, M_SAVEHOOK, Context, hdr) != 0) + { + char tmp[_POSIX_PATH_MAX]; + ADDRESS *adr; + ENVELOPE *env = hdr->env; + int fromMe = mutt_addr_is_user (env->from); + + if (!fromMe && env->reply_to && env->reply_to->mailbox) + adr = env->reply_to; + else if (!fromMe && env->from && env->from->mailbox) + adr = env->from; + else if (env->to && env->to->mailbox) + adr = env->to; + else if (env->cc && env->cc->mailbox) + adr = env->cc; + else + adr = NULL; + if (adr) + { + mutt_safe_path (tmp, sizeof (tmp), adr); + snprintf (path, pathlen, "=%s", tmp); + } + } +} + +void mutt_select_fcc (char *path, size_t pathlen, HEADER *hdr) +{ + ADDRESS *adr; + char buf[_POSIX_PATH_MAX]; + ENVELOPE *env = hdr->env; + + if (mutt_addr_hook (path, pathlen, M_FCCHOOK, NULL, hdr) != 0) + { + if ((option (OPTSAVENAME) || option (OPTFORCENAME)) && + (env->to || env->cc || env->bcc)) + { + adr = env->to ? env->to : (env->cc ? env->cc : env->bcc); + mutt_safe_path (buf, sizeof (buf), adr); + mutt_concat_path (path, NONULL(Maildir), buf, pathlen); + if (!option (OPTFORCENAME) && mx_access (path, W_OK) != 0) + strfcpy (path, NONULL (Outbox), pathlen); + } + else + strfcpy (path, NONULL (Outbox), pathlen); + } + mutt_pretty_mailbox (path); +} + +static char *_mutt_string_hook (const char *match, int hook) +{ + HOOK *tmp = Hooks; + + for (; tmp; tmp = tmp->next) + { + if ((tmp->type & hook) && ((match && + regexec (tmp->rx.rx, match, 0, NULL, 0) == 0) ^ tmp->rx.not)) + return (tmp->command); + } + return (NULL); +} + +char *mutt_charset_hook (const char *chs) +{ + return _mutt_string_hook (chs, M_CHARSETHOOK); +} + +char *mutt_iconv_hook (const char *chs) +{ + return _mutt_string_hook (chs, M_ICONVHOOK); +} + +char *mutt_crypt_hook (ADDRESS *adr) +{ + return _mutt_string_hook (adr->mailbox, M_CRYPTHOOK); +} + +#ifdef USE_SOCKET +void mutt_account_hook (const char* url) +{ + HOOK* hook; + BUFFER token; + BUFFER err; + char buf[STRING]; + + err.data = buf; + err.dsize = sizeof (buf); + memset (&token, 0, sizeof (token)); + + for (hook = Hooks; hook; hook = hook->next) + { + if (! (hook->command && (hook->type & M_ACCOUNTHOOK))) + continue; + + if ((regexec (hook->rx.rx, url, 0, NULL, 0) == 0) ^ hook->rx.not) + { + if (mutt_parse_rc_line (hook->command, &token, &err) == -1) + { + FREE (&token.data); + mutt_error ("%s", err.data); + mutt_sleep (1); + + return; + } + } + } + + FREE (&token.data); +} +#endif diff --git a/imap/BUGS b/imap/BUGS new file mode 100644 index 0000000..cb27ba9 --- /dev/null +++ b/imap/BUGS @@ -0,0 +1,34 @@ +In no particular order: + +* ~h searches download the entire folder, setting everything to \Seen in + the process. + --> Use SEARCH? or at least try to use .PEEK when doing scans. I've been + thinking of going to always PEEK anyway, but then you'd have to store + updates for every message you touched. Maybe a config option? + +* No checks are performed on long commands to make sure that they are + still correct after they've been made to fit in their buffers. + Tagged message sets can exceed the fixed space we've allocated for + them in large mailboxes. Time to move to dynamic string allocation, + at least for these commands. + +* Mutt doesn't handle timeouts or dropped connections gracefully. You + may see occasional segfaults. Solving this cleanly requires some major + architectural updates. Until that happens, I recommend you keep + backup copies of messages you're composing from within your editor. + Tommi Komulainen's keepalive patch for edit sessions may work for you, + though. Committed to CVS late November 1999, I think. + +* Mutt is uninterruptible during socket calls. We should handle SIGINT. + +* Server copy currently doesn't take into account uncommitted changes in + messages about to be copied. Sync first. + --> walk tagged or individual message looking for changes, sync those? + may require further additions to imap_make_msg_set and breaking up + imap_sync_mailbox, otherwise shouldn't be too bad. Not currently a + major priority, though - noone's gotten bit by this. + +* The mutt_pretty routines don't work well when the delimiter isn't '/'. + +Brendan Cully <brendan@kublai.com> +Updated 20000731 diff --git a/imap/Makefile.am b/imap/Makefile.am new file mode 100644 index 0000000..4d7db31 --- /dev/null +++ b/imap/Makefile.am @@ -0,0 +1,25 @@ +## Process this file with automake to produce Makefile.in + +AR=@AR@ + +AUTOMAKE_OPTIONS = foreign + +if USE_GSS +GSSSOURCES = auth_gss.c +endif + +if USE_SASL +AUTHENTICATORS = auth_sasl.c +else +AUTHENTICATORS = auth_anon.c auth_cram.c +endif + +EXTRA_DIST = BUGS README TODO auth_anon.c auth_cram.c auth_gss.c auth_sasl.c + +INCLUDES = -I$(top_srcdir) -I../intl + +noinst_LIBRARIES = libimap.a +noinst_HEADERS = auth.h imap_private.h message.h + +libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h \ + message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES) diff --git a/imap/Makefile.in b/imap/Makefile.in new file mode 100644 index 0000000..8860cc8 --- /dev/null +++ b/imap/Makefile.in @@ -0,0 +1,330 @@ +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DBX = @DBX@ +DEBUGGER = @DEBUGGER@ +DOTLOCK_GROUP = @DOTLOCK_GROUP@ +DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ +DOTLOCK_TARGET = @DOTLOCK_TARGET@ +GDB = @GDB@ +GENCAT = @GENCAT@ +GLIBC21 = @GLIBC21@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +HAVE_LIB = @HAVE_LIB@ +INSTOBJEXT = @INSTOBJEXT@ +INTLBISON = @INTLBISON@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +ISPELL = @ISPELL@ +KRB5CFGPATH = @KRB5CFGPATH@ +LIB = @LIB@ +LIBICONV = @LIBICONV@ +LIBIMAP = @LIBIMAP@ +LIBIMAPDEPS = @LIBIMAPDEPS@ +LTLIB = @LTLIB@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MUTTLIBS = @MUTTLIBS@ +MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ +OPS = @OPS@ +PACKAGE = @PACKAGE@ +PGPAUX_TARGET = @PGPAUX_TARGET@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SDB = @SDB@ +SENDMAIL = @SENDMAIL@ +SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ +SUBVERSION = @SUBVERSION@ +U = @U@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +docdir = @docdir@ +mutt_libesmtp_config_path = @mutt_libesmtp_config_path@ + +AR = @AR@ + +AUTOMAKE_OPTIONS = foreign + +@USE_GSS_TRUE@GSSSOURCES = auth_gss.c +@USE_SASL_TRUE@AUTHENTICATORS = auth_sasl.c +@USE_SASL_FALSE@AUTHENTICATORS = auth_anon.c auth_cram.c + +EXTRA_DIST = BUGS README TODO auth_anon.c auth_cram.c auth_gss.c auth_sasl.c + +INCLUDES = -I$(top_srcdir) -I../intl + +noinst_LIBRARIES = libimap.a +noinst_HEADERS = auth.h imap_private.h message.h + +libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES) + +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +libimap_a_LIBADD = +@USE_GSS_TRUE@@USE_SASL_FALSE@libimap_a_OBJECTS = auth.o auth_login.o \ +@USE_GSS_TRUE@@USE_SASL_FALSE@browse.o command.o imap.o message.o \ +@USE_GSS_TRUE@@USE_SASL_FALSE@utf7.o util.o auth_anon.o auth_cram.o \ +@USE_GSS_TRUE@@USE_SASL_FALSE@auth_gss.o +@USE_GSS_FALSE@@USE_SASL_TRUE@libimap_a_OBJECTS = auth.o auth_login.o \ +@USE_GSS_FALSE@@USE_SASL_TRUE@browse.o command.o imap.o message.o \ +@USE_GSS_FALSE@@USE_SASL_TRUE@utf7.o util.o auth_sasl.o +@USE_GSS_TRUE@@USE_SASL_TRUE@libimap_a_OBJECTS = auth.o auth_login.o \ +@USE_GSS_TRUE@@USE_SASL_TRUE@browse.o command.o imap.o message.o utf7.o \ +@USE_GSS_TRUE@@USE_SASL_TRUE@util.o auth_sasl.o auth_gss.o +@USE_GSS_FALSE@@USE_SASL_FALSE@libimap_a_OBJECTS = auth.o auth_login.o \ +@USE_GSS_FALSE@@USE_SASL_FALSE@browse.o command.o imap.o message.o \ +@USE_GSS_FALSE@@USE_SASL_FALSE@utf7.o util.o auth_anon.o auth_cram.o +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = README Makefile.am Makefile.in TODO + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +SOURCES = $(libimap_a_SOURCES) +OBJECTS = $(libimap_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps imap/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libimap.a: $(libimap_a_OBJECTS) $(libimap_a_DEPENDENCIES) + -rm -f libimap.a + $(AR) cru libimap.a $(libimap_a_OBJECTS) $(libimap_a_LIBADD) + $(RANLIB) libimap.a + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = imap + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) $(HEADERS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ + mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \ + mostlyclean-am + +clean: clean-am + +distclean-am: distclean-noinstLIBRARIES distclean-compile \ + distclean-tags distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ +check-am installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/imap/README b/imap/README new file mode 100644 index 0000000..6b73f7e --- /dev/null +++ b/imap/README @@ -0,0 +1,31 @@ +IMAP in mutt should be considered beta quality. For the most part it +works well, but it is still not quite as stable or as full-featured +as some of the other drivers. I believe it is now acceptable for +daily use (and that's how I use it now, currently against Cyrus 1.6.24 and +previously against UW-IMAP 4.7 and 2000). + +You may still lose some work if you are suddenly disconnected from your +server (but your mailboxes should be fine). Currently accessing the same +IMAP folder with multiple clients is not supported - it may work, but +no guarantees. There are still several non-critical known bugs, see +http://bugs.guug.de/ for the current list. + +You may also be disappointed in mutt's handling of very large IMAP mailboxes. +To build the message index mutt must fetch a subset of headers from every +message in the mailbox, which costs time and network traffic linear to the +number of messages in your mailbox. + +Nevertheless in general mutt is quite a fast and fully-featured IMAP client. +It tries to be polite to IMAP servers as well, opening few connections and +avoiding needless polls of the server, unlike certain other popular IMAP +clients by certain large corporations :) + +Mutt supports almost all official authentication and security protocols for +IMAP, including SSL/TLS, native CRAM-MD5 and GSSAPI routines, and a SASL +plugin which can handle just about everything else. + +Please report bugs to mutt-dev@mutt.org and/or brendan@kublai.com. Version, +options, stack-trace and .muttdebug files are a plus. + +Brendan Cully <brendan@kublai.com> +20010506 diff --git a/imap/TODO b/imap/TODO new file mode 100644 index 0000000..c27817b --- /dev/null +++ b/imap/TODO @@ -0,0 +1,62 @@ +IMAP enhancements, by priority: + +[ -- socket -- ] + +* Smarter connection code. Mutt should handle dropped connections/routing + problems gracefully. It should be able to transparently reconnect. This + is facilitated by the next item. + + PRIORITY: [***] + +* General connection code rewrite. All commands should be queued via + a single interface for communicating with the server. Nothing should + have to read or write directly to the socket. + + PRIORITY: [***] + +[ -- browsing -- ] + +* We should maybe add a new imap_format string for IMAP browsing, without all + the stat variables but with tags like how many messages are in the folders, + how many subfolders, that weird \Marked tag, etc. + + PRIORITY: [** ] + +[ -- speed -- ] + +* Persistent caching of data. I think the nicest way to do this is to store + local copies like IMAP does, with an invisible control message at the top, + and extra invisible headers in the message (for UID/dirty bits). This does + some nice things: + o We can use the existing mbox driver. + o Mutt can read mail stored in IMAP spools transparently and + nondestructively. + o An IMAP server could function off of a local cache - maybe we can begin + to develop some sort of IMAP clustering system. + Disadvantage: + o IMAP can't discriminate between its own store and a fake Mutt cache. If + the server changes its file format, bad things might happen. Could be + worked around with a specific Mutt header in all messages, probably. + + PRIORITY: [* ] + +* Instead of testing for the existence of a mailbox for APPEND, just append + and create/retry on failure. This is only a small bandwidth savings, but + it should be easy. + + PRIORITY: [* ] + +[ -- new features -- ] + +* Commands for creating/deleting folders on the server, since users may not + otherwise be able to do this on IMAP servers. + Delete done, still must implement create. + + PRIORITY: [** ] + +* Implement the x (quit without saving changes) command. + + PRIORITY: [** ] + +Brendan Cully <brendan@kublai.com> +Updated: 20000704 diff --git a/imap/auth.c b/imap/auth.c new file mode 100644 index 0000000..0c56e85 --- /dev/null +++ b/imap/auth.c @@ -0,0 +1,109 @@ +/* + * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* IMAP login/authentication code */ + +#include "mutt.h" +#include "imap_private.h" +#include "auth.h" + +static imap_auth_t imap_authenticators[] = { +#ifdef USE_SASL + { imap_auth_sasl, NULL }, +#else + { imap_auth_anon, "anonymous" }, +#endif +#ifdef USE_GSS + { imap_auth_gss, "gssapi" }, +#endif + /* SASL includes CRAM-MD5 (and GSSAPI, but that's not enabled by default) */ +#ifndef USE_SASL + { imap_auth_cram_md5, "cram-md5" }, +#endif + { imap_auth_login, "login" }, + + { NULL } +}; + +/* imap_authenticate: Attempt to authenticate using either user-specified + * authentication method if specified, or any. */ +int imap_authenticate (IMAP_DATA* idata) +{ + imap_auth_t* authenticator; + char* methods; + char* method; + char* delim; + int r = -1; + + if (ImapAuthenticators && *ImapAuthenticators) + { + /* Try user-specified list of authentication methods */ + methods = safe_strdup (ImapAuthenticators); + + for (method = methods; method; method = delim) + { + delim = strchr (method, ':'); + if (delim) + *delim++ = '\0'; + if (! method[0]) + continue; + + dprint (2, (debugfile, "imap_authenticate: Trying method %s\n", method)); + authenticator = imap_authenticators; + + while (authenticator->authenticate) + { + if (!authenticator->method || + !ascii_strcasecmp (authenticator->method, method)) + if ((r = authenticator->authenticate (idata, method)) != + IMAP_AUTH_UNAVAIL) + { + FREE (&methods); + return r; + } + + authenticator++; + } + } + + FREE (&methods); + } + else + { + /* Fall back to default: any authenticator */ + dprint (2, (debugfile, "imap_authenticate: Using any available method.\n")); + authenticator = imap_authenticators; + + while (authenticator->authenticate) + { + if ((r = authenticator->authenticate (idata, NULL)) != IMAP_AUTH_UNAVAIL) + return r; + authenticator++; + } + } + + if (r == IMAP_AUTH_UNAVAIL) + { + mutt_error (_("No authenticators available")); + mutt_sleep (1); + } + + return r; +} diff --git a/imap/auth.h b/imap/auth.h new file mode 100644 index 0000000..608efc2 --- /dev/null +++ b/imap/auth.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2000-1 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* common defs for authenticators. A good place to set up a generic callback + * system */ + +#ifndef _IMAP_AUTH_H +#define _IMAP_AUTH_H 1 + +typedef enum +{ + IMAP_AUTH_SUCCESS = 0, + IMAP_AUTH_FAILURE, + IMAP_AUTH_UNAVAIL +} imap_auth_res_t; + + +typedef struct +{ + /* do authentication, using named method or any available if method is NULL */ + imap_auth_res_t (*authenticate) (IMAP_DATA* idata, const char* method); + /* name of authentication method supported, NULL means variable. If this + * is not null, authenticate may ignore the second parameter. */ + const char* method; +} imap_auth_t; + +/* external authenticator prototypes */ +#ifndef USE_SASL +imap_auth_res_t imap_auth_anon (IMAP_DATA* idata, const char* method); +imap_auth_res_t imap_auth_cram_md5 (IMAP_DATA* idata, const char* method); +#endif +imap_auth_res_t imap_auth_login (IMAP_DATA* idata, const char* method); +#ifdef USE_GSS +imap_auth_res_t imap_auth_gss (IMAP_DATA* idata, const char* method); +#endif +#ifdef USE_SASL +imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method); +#endif + +#endif /* _IMAP_AUTH_H */ diff --git a/imap/auth_anon.c b/imap/auth_anon.c new file mode 100644 index 0000000..252a3d0 --- /dev/null +++ b/imap/auth_anon.c @@ -0,0 +1,72 @@ +/* + * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* IMAP login/authentication code */ + +#include "mutt.h" +#include "imap_private.h" +#include "auth.h" + +/* this is basically a stripped-down version of the cram-md5 method. */ +imap_auth_res_t imap_auth_anon (IMAP_DATA* idata, const char* method) +{ + int rc; + + if (!mutt_bit_isset (idata->capabilities, AUTH_ANON)) + return IMAP_AUTH_UNAVAIL; + + if (mutt_account_getuser (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + + if (idata->conn->account.user[0] != '\0') + return IMAP_AUTH_UNAVAIL; + + mutt_message _("Authenticating (anonymous)..."); + + imap_cmd_start (idata, "AUTHENTICATE ANONYMOUS"); + + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_RESPOND) + { + dprint (1, (debugfile, "Invalid response from server.\n")); + goto bail; + } + + mutt_socket_write (idata->conn, "ZHVtbXkK\r\n"); /* base64 ("dummy") */ + + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_OK) + { + dprint (1, (debugfile, "Error receiving server response.\n")); + goto bail; + } + + if (imap_code (idata->cmd.buf)) + return IMAP_AUTH_SUCCESS; + + bail: + mutt_error _("Anonymous authentication failed."); + mutt_sleep (2); + return IMAP_AUTH_FAILURE; +} diff --git a/imap/auth_cram.c b/imap/auth_cram.c new file mode 100644 index 0000000..3003f7a --- /dev/null +++ b/imap/auth_cram.c @@ -0,0 +1,178 @@ +/* + * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* IMAP login/authentication code */ + +#include "mutt.h" +#include "imap_private.h" +#include "auth.h" +#include "md5.h" + +#define MD5_BLOCK_LEN 64 +#define MD5_DIGEST_LEN 16 + +/* forward declarations */ +static void hmac_md5 (const char* password, char* challenge, + unsigned char* response); + +/* imap_auth_cram_md5: AUTH=CRAM-MD5 support. */ +imap_auth_res_t imap_auth_cram_md5 (IMAP_DATA* idata, const char* method) +{ + char ibuf[LONG_STRING*2], obuf[LONG_STRING]; + unsigned char hmac_response[MD5_DIGEST_LEN]; + int len; + int rc; + + if (!mutt_bit_isset (idata->capabilities, ACRAM_MD5)) + return IMAP_AUTH_UNAVAIL; + + mutt_message _("Authenticating (CRAM-MD5)..."); + + /* get auth info */ + if (mutt_account_getuser (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + if (mutt_account_getpass (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + + imap_cmd_start (idata, "AUTHENTICATE CRAM-MD5"); + + /* From RFC 2195: + * The data encoded in the first ready response contains a presumptively + * arbitrary string of random digits, a timestamp, and the fully-qualified + * primary host name of the server. The syntax of the unencoded form must + * correspond to that of an RFC 822 'msg-id' [RFC822] as described in [POP3]. + */ + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_RESPOND) + { + dprint (1, (debugfile, "Invalid response from server: %s\n", ibuf)); + goto bail; + } + + if ((len = mutt_from_base64 (obuf, idata->cmd.buf + 2)) == -1) + { + dprint (1, (debugfile, "Error decoding base64 response.\n")); + goto bail; + } + + obuf[len] = '\0'; + dprint (2, (debugfile, "CRAM challenge: %s\n", obuf)); + + /* The client makes note of the data and then responds with a string + * consisting of the user name, a space, and a 'digest'. The latter is + * computed by applying the keyed MD5 algorithm from [KEYED-MD5] where the + * key is a shared secret and the digested text is the timestamp (including + * angle-brackets). + * + * Note: The user name shouldn't be quoted. Since the digest can't contain + * spaces, there is no ambiguity. Some servers get this wrong, we'll work + * around them when the bug report comes in. Until then, we'll remain + * blissfully RFC-compliant. + */ + hmac_md5 (idata->conn->account.pass, obuf, hmac_response); + /* dubious optimisation I saw elsewhere: make the whole string in one call */ + snprintf (obuf, sizeof (obuf), + "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + idata->conn->account.user, + hmac_response[0], hmac_response[1], hmac_response[2], hmac_response[3], + hmac_response[4], hmac_response[5], hmac_response[6], hmac_response[7], + hmac_response[8], hmac_response[9], hmac_response[10], hmac_response[11], + hmac_response[12], hmac_response[13], hmac_response[14], hmac_response[15]); + dprint(2, (debugfile, "CRAM response: %s\n", obuf)); + + /* XXX - ibuf must be long enough to store the base64 encoding of obuf, + * plus the additional debris + */ + + mutt_to_base64 ((unsigned char*) ibuf, (unsigned char*) obuf, strlen (obuf), + sizeof (ibuf) - 2); + strncat (ibuf, "\r\n", sizeof (ibuf)); + mutt_socket_write (idata->conn, ibuf); + + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_OK) + { + dprint (1, (debugfile, "Error receiving server response.\n")); + goto bail; + } + + if (imap_code (idata->cmd.buf)) + return IMAP_AUTH_SUCCESS; + + bail: + mutt_error _("CRAM-MD5 authentication failed."); + mutt_sleep (2); + return IMAP_AUTH_FAILURE; +} + +/* hmac_md5: produce CRAM-MD5 challenge response. */ +static void hmac_md5 (const char* password, char* challenge, + unsigned char* response) +{ + MD5_CTX ctx; + unsigned char ipad[MD5_BLOCK_LEN], opad[MD5_BLOCK_LEN]; + unsigned char secret[MD5_BLOCK_LEN+1]; + unsigned char hash_passwd[MD5_DIGEST_LEN]; + unsigned int secret_len, chal_len; + int i; + + secret_len = strlen (password); + chal_len = strlen (challenge); + + /* passwords longer than MD5_BLOCK_LEN bytes are substituted with their MD5 + * digests */ + if (secret_len > MD5_BLOCK_LEN) + { + MD5Init (&ctx); + MD5Update (&ctx, (unsigned char*) password, secret_len); + MD5Final (hash_passwd, &ctx); + strfcpy ((char*) secret, (char*) hash_passwd, MD5_DIGEST_LEN); + secret_len = MD5_DIGEST_LEN; + } + else + strfcpy ((char *) secret, password, sizeof (secret)); + + memset (ipad, 0, sizeof (ipad)); + memset (opad, 0, sizeof (opad)); + memcpy (ipad, secret, secret_len); + memcpy (opad, secret, secret_len); + + for (i = 0; i < MD5_BLOCK_LEN; i++) + { + ipad[i] ^= 0x36; + opad[i] ^= 0x5c; + } + + /* inner hash: challenge and ipadded secret */ + MD5Init (&ctx); + MD5Update (&ctx, ipad, MD5_BLOCK_LEN); + MD5Update (&ctx, (unsigned char*) challenge, chal_len); + MD5Final (response, &ctx); + + /* outer hash: inner hash and opadded secret */ + MD5Init (&ctx); + MD5Update (&ctx, opad, MD5_BLOCK_LEN); + MD5Update (&ctx, response, MD5_DIGEST_LEN); + MD5Final (response, &ctx); +} diff --git a/imap/auth_gss.c b/imap/auth_gss.c new file mode 100644 index 0000000..a6a2908 --- /dev/null +++ b/imap/auth_gss.c @@ -0,0 +1,270 @@ +/* + * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* GSS login/authentication code */ + +/* for HAVE_HEIMDAL */ +#include "config.h" + +#include "mutt.h" +#include "imap_private.h" +#include "auth.h" + +#include <netinet/in.h> + +#ifdef HAVE_HEIMDAL +# include <gssapi/gssapi.h> +# define gss_nt_service_name GSS_C_NT_HOSTBASED_SERVICE +#else +# include <gssapi/gssapi.h> +# include <gssapi/gssapi_generic.h> +#endif + +#define GSS_BUFSIZE 8192 + +#define GSS_AUTH_P_NONE 1 +#define GSS_AUTH_P_INTEGRITY 2 +#define GSS_AUTH_P_PRIVACY 4 + +/* imap_auth_gss: AUTH=GSSAPI support. */ +imap_auth_res_t imap_auth_gss (IMAP_DATA* idata, const char* method) +{ + gss_buffer_desc request_buf, send_token; + gss_buffer_t sec_token; + gss_name_t target_name; + gss_ctx_id_t context; + gss_OID mech_name; + gss_qop_t quality; + int cflags; + OM_uint32 maj_stat, min_stat; + char buf1[GSS_BUFSIZE], buf2[GSS_BUFSIZE], server_conf_flags; + unsigned long buf_size; + int rc; + + if (!mutt_bit_isset (idata->capabilities, AGSSAPI)) + return IMAP_AUTH_UNAVAIL; + + if (mutt_account_getuser (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + + /* get an IMAP service ticket for the server */ + snprintf (buf1, sizeof (buf1), "imap@%s", idata->conn->account.host); + request_buf.value = buf1; + request_buf.length = strlen (buf1) + 1; + maj_stat = gss_import_name (&min_stat, &request_buf, gss_nt_service_name, + &target_name); + if (maj_stat != GSS_S_COMPLETE) + { + dprint (2, (debugfile, "Couldn't get service name for [%s]\n", buf1)); + return IMAP_AUTH_UNAVAIL; + } +#ifdef DEBUG + else if (debuglevel >= 2) + { + maj_stat = gss_display_name (&min_stat, target_name, &request_buf, + &mech_name); + dprint (2, (debugfile, "Using service name [%s]\n", + (char*) request_buf.value)); + maj_stat = gss_release_buffer (&min_stat, &request_buf); + } +#endif + /* Acquire initial credentials - without a TGT GSSAPI is UNAVAIL */ + sec_token = GSS_C_NO_BUFFER; + context = GSS_C_NO_CONTEXT; + + /* build token */ + maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &context, + target_name, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG, 0, + GSS_C_NO_CHANNEL_BINDINGS, sec_token, NULL, &send_token, + (unsigned int*) &cflags, NULL); + if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED) + { + dprint (1, (debugfile, "Error acquiring credentials - no TGT?\n")); + gss_release_name (&min_stat, &target_name); + + return IMAP_AUTH_UNAVAIL; + } + + /* now begin login */ + mutt_message _("Authenticating (GSSAPI)..."); + + imap_cmd_start (idata, "AUTHENTICATE GSSAPI"); + + /* expect a null continuation response ("+") */ + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_RESPOND) + { + dprint (2, (debugfile, "Invalid response from server: %s\n", buf1)); + gss_release_name (&min_stat, &target_name); + goto bail; + } + + /* now start the security context initialisation loop... */ + dprint (2, (debugfile, "Sending credentials\n")); + mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length, + sizeof (buf1) - 2); + gss_release_buffer (&min_stat, &send_token); + strncat (buf1, "\r\n", sizeof (buf1)); + mutt_socket_write (idata->conn, buf1); + + while (maj_stat == GSS_S_CONTINUE_NEEDED) + { + /* Read server data */ + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_RESPOND) + { + dprint (1, (debugfile, "Error receiving server response.\n")); + gss_release_name (&min_stat, &target_name); + goto bail; + } + + request_buf.length = mutt_from_base64 (buf2, idata->cmd.buf + 2); + request_buf.value = buf2; + sec_token = &request_buf; + + /* Write client data */ + maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &context, + target_name, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG, 0, + GSS_C_NO_CHANNEL_BINDINGS, sec_token, NULL, &send_token, + (unsigned int*) &cflags, NULL); + if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED) + { + dprint (1, (debugfile, "Error exchanging credentials\n")); + gss_release_name (&min_stat, &target_name); + + goto err_abort_cmd; + } + mutt_to_base64 ((unsigned char*) buf1, send_token.value, + send_token.length, sizeof (buf1) - 2); + gss_release_buffer (&min_stat, &send_token); + strncat (buf1, "\r\n", sizeof (buf1)); + mutt_socket_write (idata->conn, buf1); + } + + gss_release_name (&min_stat, &target_name); + + /* get security flags and buffer size */ + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_RESPOND) + { + dprint (1, (debugfile, "Error receiving server response.\n")); + goto bail; + } + request_buf.length = mutt_from_base64 (buf2, idata->cmd.buf + 2); + request_buf.value = buf2; + + maj_stat = gss_unwrap (&min_stat, context, &request_buf, &send_token, + &cflags, &quality); + if (maj_stat != GSS_S_COMPLETE) + { + dprint (2, (debugfile, "Couldn't unwrap security level data\n")); + gss_release_buffer (&min_stat, &send_token); + goto err_abort_cmd; + } + dprint (2, (debugfile, "Credential exchange complete\n")); + + /* first octet is security levels supported. We want NONE */ + server_conf_flags = ((char*) send_token.value)[0]; + if ( !(((char*) send_token.value)[0] & GSS_AUTH_P_NONE) ) + { + dprint (2, (debugfile, "Server requires integrity or privacy\n")); + gss_release_buffer (&min_stat, &send_token); + goto err_abort_cmd; + } + + /* we don't care about buffer size if we don't wrap content. But here it is */ + ((char*) send_token.value)[0] = 0; + buf_size = ntohl (*((long *) send_token.value)); + gss_release_buffer (&min_stat, &send_token); + dprint (2, (debugfile, "Unwrapped security level flags: %c%c%c\n", + server_conf_flags & GSS_AUTH_P_NONE ? 'N' : '-', + server_conf_flags & GSS_AUTH_P_INTEGRITY ? 'I' : '-', + server_conf_flags & GSS_AUTH_P_PRIVACY ? 'P' : '-')); + dprint (2, (debugfile, "Maximum GSS token size is %ld\n", buf_size)); + + /* agree to terms (hack!) */ + buf_size = htonl (buf_size); /* not relevant without integrity/privacy */ + memcpy (buf1, &buf_size, 4); + buf1[0] = GSS_AUTH_P_NONE; + /* server decides if principal can log in as user */ + strncpy (buf1 + 4, idata->conn->account.user, sizeof (buf1) - 4); + request_buf.value = buf1; + request_buf.length = 4 + strlen (idata->conn->account.user) + 1; + maj_stat = gss_wrap (&min_stat, context, 0, GSS_C_QOP_DEFAULT, &request_buf, + &cflags, &send_token); + if (maj_stat != GSS_S_COMPLETE) + { + dprint (2, (debugfile, "Error creating login request\n")); + goto err_abort_cmd; + } + + mutt_to_base64 ((unsigned char*) buf1, send_token.value, send_token.length, + sizeof (buf1) - 2); + dprint (2, (debugfile, "Requesting authorisation as %s\n", + idata->conn->account.user)); + strncat (buf1, "\r\n", sizeof (buf1)); + mutt_socket_write (idata->conn, buf1); + + /* Joy of victory or agony of defeat? */ + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + if (rc == IMAP_CMD_RESPOND) + { + dprint (1, (debugfile, "Unexpected server continuation request.\n")); + goto err_abort_cmd; + } + if (imap_code (idata->cmd.buf)) + { + /* flush the security context */ + dprint (2, (debugfile, "Releasing GSS credentials\n")); + maj_stat = gss_delete_sec_context (&min_stat, &context, &send_token); + if (maj_stat != GSS_S_COMPLETE) + dprint (1, (debugfile, "Error releasing credentials\n")); + + /* send_token may contain a notification to the server to flush + * credentials. RFC 1731 doesn't specify what to do, and since this + * support is only for authentication, we'll assume the server knows + * enough to flush its own credentials */ + gss_release_buffer (&min_stat, &send_token); + + return IMAP_AUTH_SUCCESS; + } + else + goto bail; + + err_abort_cmd: + mutt_socket_write (idata->conn, "*\r\n"); + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + bail: + mutt_error _("GSSAPI authentication failed."); + mutt_sleep (2); + return IMAP_AUTH_FAILURE; +} diff --git a/imap/auth_login.c b/imap/auth_login.c new file mode 100644 index 0000000..7be391d --- /dev/null +++ b/imap/auth_login.c @@ -0,0 +1,66 @@ +/* + * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* plain LOGIN support */ + +#include "mutt.h" +#include "imap_private.h" +#include "auth.h" + +/* imap_auth_login: Plain LOGIN support */ +imap_auth_res_t imap_auth_login (IMAP_DATA* idata, const char* method) +{ + char q_user[SHORT_STRING], q_pass[SHORT_STRING]; + char buf[STRING]; + int rc; + + if (mutt_bit_isset (idata->capabilities, LOGINDISABLED)) + { + mutt_message _("LOGIN disabled on this server."); + return IMAP_AUTH_UNAVAIL; + } + + if (mutt_account_getuser (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + if (mutt_account_getpass (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + + mutt_message _("Logging in..."); + + imap_quote_string (q_user, sizeof (q_user), idata->conn->account.user); + imap_quote_string (q_pass, sizeof (q_pass), idata->conn->account.pass); + +#ifdef DEBUG + /* don't print the password unless we're at the ungodly debugging level + * of 5 or higher */ + + if (debuglevel < IMAP_LOG_PASS) + dprint (2, (debugfile, "Sending LOGIN command for %s...\n", + idata->conn->account.user)); +#endif + + snprintf (buf, sizeof (buf), "LOGIN %s %s", q_user, q_pass); + rc = imap_exec (idata, buf, IMAP_CMD_FAIL_OK | IMAP_CMD_PASS); + + if (!rc) + return IMAP_AUTH_SUCCESS; + + mutt_error _("Login failed."); + mutt_sleep (2); + return IMAP_AUTH_FAILURE; +} diff --git a/imap/auth_sasl.c b/imap/auth_sasl.c new file mode 100644 index 0000000..5740435 --- /dev/null +++ b/imap/auth_sasl.c @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* SASL login/authentication code */ + +#include "mutt.h" +#include "mutt_sasl.h" +#include "imap_private.h" +#include "auth.h" + +#ifdef USE_SASL2 +#include <sasl/sasl.h> +#include <sasl/saslutil.h> +#else +#include <sasl.h> +#include <saslutil.h> +#endif + +/* imap_auth_sasl: Default authenticator if available. */ +imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method) +{ + sasl_conn_t* saslconn; + sasl_interact_t* interaction = NULL; + int rc, irc; + char buf[HUGE_STRING]; + const char* mech; +#ifdef USE_SASL2 + const char *pc = NULL; +#else + char* pc = NULL; +#endif + unsigned int len, olen; + unsigned char client_start; + + if (mutt_sasl_client_new (idata->conn, &saslconn) < 0) + { + dprint (1, (debugfile, + "imap_auth_sasl: Error allocating SASL connection.\n")); + return IMAP_AUTH_FAILURE; + } + + rc = SASL_FAIL; + + /* If the user hasn't specified a method, use any available */ + if (!method) + { + method = idata->capstr; + + /* hack for SASL ANONYMOUS support: + * 1. Fetch username. If it's "" or "anonymous" then + * 2. attempt sasl_client_start with only "AUTH=ANONYMOUS" capability + * 3. if sasl_client_start fails, fall through... */ + + if (mutt_account_getuser (&idata->conn->account)) + return IMAP_AUTH_FAILURE; + + if (mutt_bit_isset (idata->capabilities, AUTH_ANON) && + (!idata->conn->account.user[0] || + !ascii_strncmp (idata->conn->account.user, "anonymous", 9))) +#ifdef USE_SASL2 + rc = sasl_client_start (saslconn, "AUTH=ANONYMOUS", NULL, &pc, &olen, + &mech); +#else + rc = sasl_client_start (saslconn, "AUTH=ANONYMOUS", NULL, NULL, &pc, &olen, + &mech); +#endif + } + + if (rc != SASL_OK && rc != SASL_CONTINUE) + do + { +#ifdef USE_SASL2 + rc = sasl_client_start (saslconn, method, &interaction, + &pc, &olen, &mech); +#else + rc = sasl_client_start (saslconn, method, NULL, &interaction, + &pc, &olen, &mech); +#endif + if (rc == SASL_INTERACT) + mutt_sasl_interact (interaction); + } + while (rc == SASL_INTERACT); + + client_start = (olen > 0); + + if (rc != SASL_OK && rc != SASL_CONTINUE) + { + if (method) + dprint (2, (debugfile, "imap_auth_sasl: %s unavailable\n", method)); + else + dprint (1, (debugfile, "imap_auth_sasl: Failure starting authentication exchange. No shared mechanisms?\n")); + /* SASL doesn't support LOGIN, so fall back */ + + return IMAP_AUTH_UNAVAIL; + } + + mutt_message (_("Authenticating (%s)..."), mech); + + snprintf (buf, sizeof (buf), "AUTHENTICATE %s", mech); + imap_cmd_start (idata, buf); + irc = IMAP_CMD_CONTINUE; + + /* looping protocol */ + while (rc == SASL_CONTINUE) + { + do + irc = imap_cmd_step (idata); + while (irc == IMAP_CMD_CONTINUE); + + if (irc == IMAP_CMD_BAD || irc == IMAP_CMD_NO) + goto bail; + + if (irc == IMAP_CMD_RESPOND) + { +#ifdef USE_SASL2 + if (sasl_decode64 (idata->cmd.buf+2, strlen (idata->cmd.buf+2), buf, LONG_STRING-1, +#else + if (sasl_decode64 (idata->cmd.buf+2, strlen (idata->cmd.buf+2), buf, +#endif + &len) != SASL_OK) + { + dprint (1, (debugfile, "imap_auth_sasl: error base64-decoding server response.\n")); + goto bail; + } + } + + if (!client_start) + { + do + { + rc = sasl_client_step (saslconn, buf, len, &interaction, &pc, &olen); + if (rc == SASL_INTERACT) + mutt_sasl_interact (interaction); + } + while (rc == SASL_INTERACT); + } + else + client_start = 0; + + /* send out response, or line break if none needed */ + if (olen) + { + if (sasl_encode64 (pc, olen, buf, sizeof (buf), &olen) != SASL_OK) + { + dprint (1, (debugfile, "imap_auth_sasl: error base64-encoding client response.\n")); + goto bail; + } + + /* sasl_client_st(art|ep) allocate pc with malloc, expect me to + * free it */ +#ifndef USE_SASL2 + FREE (&pc); +#endif + } + + if (irc == IMAP_CMD_RESPOND) + { + strfcpy (buf + olen, "\r\n", sizeof (buf) - olen); + mutt_socket_write (idata->conn, buf); + } + + /* If SASL has errored out, send an abort string to the server */ + if (rc < 0) + { + mutt_socket_write (idata->conn, "*\r\n"); + dprint (1, (debugfile, "imap_auth_sasl: sasl_client_step error %d\n",rc)); + } + } + + while (irc != IMAP_CMD_OK) + if ((irc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + break; + + if (rc != SASL_OK) + goto bail; + + if (imap_code (idata->cmd.buf)) + { + mutt_sasl_setup_conn (idata->conn, saslconn); + return IMAP_AUTH_SUCCESS; + } + + bail: + mutt_error _("SASL authentication failed."); + mutt_sleep(2); + sasl_dispose (&saslconn); + + return IMAP_AUTH_FAILURE; +} diff --git a/imap/browse.c b/imap/browse.c new file mode 100644 index 0000000..4a43420 --- /dev/null +++ b/imap/browse.c @@ -0,0 +1,555 @@ +/* + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* Mutt browser support routines */ + +#include <stdlib.h> +#include <ctype.h> + +#include "mutt.h" +#include "imap_private.h" + +/* -- forward declarations -- */ +static int browse_add_list_result (IMAP_DATA* idata, const char* cmd, + struct browser_state* state, short isparent); +static void imap_add_folder (char delim, char *folder, int noselect, + int noinferiors, struct browser_state *state, short isparent); +static int compare_names(struct folder_file *a, struct folder_file *b); +static int browse_get_namespace (IMAP_DATA *idata, char *nsbuf, int nsblen, + IMAP_NAMESPACE_INFO *nsi, int nsilen, int *nns); +static int browse_verify_namespace (IMAP_DATA* idata, + IMAP_NAMESPACE_INFO* nsi, int nns); + +/* imap_browse: IMAP hook into the folder browser, fills out browser_state, + * given a current folder to browse */ +int imap_browse (char* path, struct browser_state* state) +{ + IMAP_DATA* idata; + char buf[LONG_STRING]; + char buf2[LONG_STRING]; + char nsbuf[LONG_STRING]; + char mbox[LONG_STRING]; + char list_cmd[5]; + IMAP_NAMESPACE_INFO nsi[16]; + int home_namespace = 0; + int n; + int i; + int nsup; + char ctmp; + int nns; + char *cur_folder; + short showparents = 0; + int noselect; + int noinferiors; + IMAP_MBOX mx; + + if (imap_parse_path (path, &mx)) + { + mutt_error (_("%s is an invalid IMAP path"), path); + return -1; + } + + strfcpy (list_cmd, option (OPTIMAPLSUB) ? "LSUB" : "LIST", sizeof (list_cmd)); + + if (!(idata = imap_conn_find (&(mx.account), 0))) + goto fail; + + if (!mx.mbox) + { + home_namespace = 1; + mbox[0] = '\0'; /* Do not replace "" with "INBOX" here */ + mx.mbox = safe_strdup(ImapHomeNamespace); + nns = 0; + if (mutt_bit_isset(idata->capabilities,NAMESPACE)) + { + mutt_message _("Getting namespaces..."); + if (browse_get_namespace (idata, nsbuf, sizeof (nsbuf), + nsi, sizeof (nsi), &nns) != 0) + goto fail; + if (browse_verify_namespace (idata, nsi, nns) != 0) + goto fail; + } + } + + mutt_message _("Getting folder list..."); + + /* skip check for parents when at the root */ + if (mx.mbox && mx.mbox[0] != '\0') + { + imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox)); + imap_munge_mbox_name (buf, sizeof (buf), mbox); + imap_unquote_string(buf); /* As kludgy as it gets */ + mbox[sizeof (mbox) - 1] = '\0'; + strncpy (mbox, buf, sizeof (mbox) - 1); + n = mutt_strlen (mbox); + + dprint (3, (debugfile, "imap_browse: mbox: %s\n", mbox)); + + /* if our target exists and has inferiors, enter it if we + * aren't already going to */ + if (mbox[n-1] != idata->delim) + { + snprintf (buf, sizeof (buf), "%s \"\" \"%s\"", list_cmd, mbox); + imap_cmd_start (idata, buf); + do + { + if (imap_parse_list_response (idata, &cur_folder, &noselect, + &noinferiors, &idata->delim) != 0) + goto fail; + + if (cur_folder) + { + imap_unmunge_mbox_name (cur_folder); + + if (!noinferiors && cur_folder[0] && + (n = strlen (mbox)) < LONG_STRING-1) + { + mbox[n++] = idata->delim; + mbox[n] = '\0'; + } + } + } + while (ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN)); + } + + /* if we're descending a folder, mark it as current in browser_state */ + if (mbox[n-1] == idata->delim) + { + /* don't show parents in the home namespace */ + if (!home_namespace) + showparents = 1; + imap_qualify_path (buf, sizeof (buf), &mx, mbox); + state->folder = safe_strdup (buf); + n--; + } + + /* Find superiors to list + * Note: UW-IMAP servers return folder + delimiter when asked to list + * folder + delimiter. Cyrus servers don't. So we ask for folder, + * and tack on delimiter ourselves. + * Further note: UW-IMAP servers return nothing when asked for + * NAMESPACES without delimiters at the end. Argh! */ + for (n--; n >= 0 && mbox[n] != idata->delim ; n--); + if (n > 0) /* "aaaa/bbbb/" -> "aaaa" */ + { + /* forget the check, it is too delicate (see above). Have we ever + * had the parent not exist? */ + ctmp = mbox[n]; + mbox[n] = '\0'; + + if (showparents) + { + dprint (3, (debugfile, "imap_init_browse: adding parent %s\n", mbox)); + imap_add_folder (idata->delim, mbox, 1, 0, state, 1); + } + + /* if our target isn't a folder, we are in our superior */ + if (!state->folder) + { + /* store folder with delimiter */ + mbox[n++] = ctmp; + ctmp = mbox[n]; + mbox[n] = '\0'; + imap_qualify_path (buf, sizeof (buf), &mx, mbox); + state->folder = safe_strdup (buf); + } + mbox[n] = ctmp; + } + /* "/bbbb/" -> add "/", "aaaa/" -> add "" */ + else + { + char relpath[2]; + /* folder may be "/" */ + snprintf (relpath, sizeof (relpath), "%c" , n < 0 ? '\0' : idata->delim); + if (showparents) + imap_add_folder (idata->delim, relpath, 1, 0, state, 1); + if (!state->folder) + { + imap_qualify_path (buf, sizeof (buf), &mx, relpath); + state->folder = safe_strdup (buf); + } + } + } + + /* no namespace, no folder: set folder to host only */ + if (!state->folder) + { + imap_qualify_path (buf, sizeof (buf), &mx, NULL); + state->folder = safe_strdup (buf); + } + + if (home_namespace && mbox[0] != '\0') + { + /* Listing the home namespace, so INBOX should be included. Home + * namespace is not "", so we have to list it explicitly. We ask the + * server to see if it has descendants. */ + dprint (3, (debugfile, "imap_browse: adding INBOX\n")); + if (browse_add_list_result (idata, "LIST \"\" \"INBOX\"", state, 0)) + goto fail; + } + + nsup = state->entrylen; + + dprint (3, (debugfile, "imap_browse: Quoting mailbox scan: %s -> ", mbox)); + snprintf (buf, sizeof (buf), "%s%%", mbox); + imap_quote_string (buf2, sizeof (buf2), buf); + dprint (3, (debugfile, "%s\n", buf2)); + snprintf (buf, sizeof (buf), "%s \"\" %s", list_cmd, buf2); + if (browse_add_list_result (idata, buf, state, 0)) + goto fail; + + if (!state->entrylen) + { + mutt_error _("No such folder"); + goto fail; + } + + mutt_clear_error (); + + qsort(&(state->entry[nsup]),state->entrylen-nsup,sizeof(state->entry[0]), + (int (*)(const void*,const void*)) compare_names); + if (home_namespace) + { /* List additional namespaces */ + for (i = 0; i < nns; i++) + if (nsi[i].listable && !nsi[i].home_namespace) { + imap_add_folder(nsi[i].delim, nsi[i].prefix, nsi[i].noselect, + nsi[i].noinferiors, state, 0); + dprint (3, (debugfile, "imap_browse: adding namespace: %s\n", + nsi[i].prefix)); + } + } + + FREE (&mx.mbox); + return 0; + + fail: + FREE (&mx.mbox); + return -1; +} + +/* imap_mailbox_create: Prompt for a new mailbox name, and try to create it */ +int imap_mailbox_create (const char* folder) +{ + IMAP_DATA* idata; + IMAP_MBOX mx; + char buf[LONG_STRING]; + short n; + + if (imap_parse_path (folder, &mx) < 0) + { + dprint (1, (debugfile, "imap_mailbox_create: Bad starting path %s\n", + folder)); + return -1; + } + + if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW))) + { + dprint (1, (debugfile, "imap_mailbox_create: Couldn't find open connection to %s", mx.account.host)); + goto fail; + } + + strfcpy (buf, NONULL (mx.mbox), sizeof (buf)); + + /* append a delimiter if necessary */ + n = mutt_strlen (buf); + if (n && (n < sizeof (buf) - 1) && (buf[n-1] != idata->delim)) + { + buf[n++] = idata->delim; + buf[n] = '\0'; + } + + if (mutt_get_field (_("Create mailbox: "), buf, sizeof (buf), M_FILE) < 0) + goto fail; + + if (!mutt_strlen (buf)) + { + mutt_error (_("Mailbox must have a name.")); + mutt_sleep(1); + goto fail; + } + + if (imap_create_mailbox (idata, buf) < 0) + goto fail; + + mutt_message _("Mailbox created."); + mutt_sleep (0); + + FREE (&mx.mbox); + return 0; + + fail: + FREE (&mx.mbox); + return -1; +} + +static int browse_add_list_result (IMAP_DATA* idata, const char* cmd, + struct browser_state* state, short isparent) +{ + char *name; + int noselect; + int noinferiors; + IMAP_MBOX mx; + + if (imap_parse_path (state->folder, &mx)) + { + dprint (2, (debugfile, + "browse_add_list_result: current folder %s makes no sense\n", state->folder)); + return -1; + } + + imap_cmd_start (idata, cmd); + + do + { + if (imap_parse_list_response(idata, &name, &noselect, &noinferiors, + &idata->delim) != 0) + { + FREE (&mx.mbox); + return -1; + } + + if (name) + { + /* Let a parent folder never be selectable for navigation */ + if (isparent) + noselect = 1; + /* prune current folder from output */ + if (isparent || mutt_strncmp (name, mx.mbox, strlen (name))) + imap_add_folder (idata->delim, name, noselect, noinferiors, state, + isparent); + } + } + while ((ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN) != 0)); + + FREE (&mx.mbox); + return 0; +} + +/* imap_add_folder: add a folder name to the browser list, formatting it as + * necessary. */ +static void imap_add_folder (char delim, char *folder, int noselect, + int noinferiors, struct browser_state *state, short isparent) +{ + char tmp[LONG_STRING]; + char relpath[LONG_STRING]; + IMAP_MBOX mx; + + if (imap_parse_path (state->folder, &mx)) + return; + + imap_unmunge_mbox_name (folder); + + if (state->entrylen + 1 == state->entrymax) + { + safe_realloc (&state->entry, + sizeof (struct folder_file) * (state->entrymax += 256)); + memset (state->entry + state->entrylen, 0, + (sizeof (struct folder_file) * (state->entrymax - state->entrylen))); + } + + /* render superiors as unix-standard ".." */ + if (isparent) + strfcpy (relpath, "../", sizeof (relpath)); + /* strip current folder from target, to render a relative path */ + else if (!mutt_strncmp (mx.mbox, folder, mutt_strlen (mx.mbox))) + strfcpy (relpath, folder + mutt_strlen (mx.mbox), sizeof (relpath)); + else + strfcpy (relpath, folder, sizeof (relpath)); + + /* apply filemask filter. This should really be done at menu setup rather + * than at scan, since it's so expensive to scan. But that's big changes + * to browser.c */ + if (!((regexec (Mask.rx, relpath, 0, NULL, 0) == 0) ^ Mask.not)) + { + FREE (&mx.mbox); + return; + } + + imap_qualify_path (tmp, sizeof (tmp), &mx, folder); + (state->entry)[state->entrylen].name = safe_strdup (tmp); + + /* mark desc with delim in browser if it can have subfolders */ + if (!isparent && !noinferiors && strlen (relpath) < sizeof (relpath) - 1) + { + relpath[strlen (relpath) + 1] = '\0'; + relpath[strlen (relpath)] = delim; + } + + (state->entry)[state->entrylen].desc = safe_strdup (relpath); + + (state->entry)[state->entrylen].imap = 1; + /* delimiter at the root is useless. */ + if (folder[0] == '\0') + delim = '\0'; + (state->entry)[state->entrylen].delim = delim; + (state->entry)[state->entrylen].selectable = !noselect; + (state->entry)[state->entrylen].inferiors = !noinferiors; + (state->entrylen)++; + + FREE (&mx.mbox); +} + +static int compare_names(struct folder_file *a, struct folder_file *b) +{ + return mutt_strcmp(a->name, b->name); +} + +static int browse_get_namespace (IMAP_DATA* idata, char* nsbuf, int nsblen, + IMAP_NAMESPACE_INFO* nsi, int nsilen, int* nns) +{ + char *s; + int n; + char ns[LONG_STRING]; + char delim = '/'; + int type; + int nsbused = 0; + int rc; + + *nns = 0; + nsbuf[nsblen-1] = '\0'; + + imap_cmd_start (idata, "NAMESPACE"); + + do + { + if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + break; + + s = imap_next_word (idata->cmd.buf); + if (ascii_strncasecmp ("NAMESPACE", s, 9) == 0) + { + /* There are three sections to the response, User, Other, Shared, + * and maybe more by extension */ + for (type = IMAP_NS_PERSONAL; *s; type++) + { + s = imap_next_word (s); + if (*s && ascii_strncasecmp (s, "NIL", 3)) + { + s++; + while (*s && *s != ')') + { + s++; /* skip ( */ + /* copy namespace */ + n = 0; + delim = '\0'; + + if (*s == '\"') + { + s++; + while (*s && *s != '\"') + { + if (*s == '\\') + s++; + ns[n++] = *s; + s++; + } + if (*s) + s++; + } + else + while (*s && !ISSPACE (*s)) + { + ns[n++] = *s; + s++; + } + ns[n] = '\0'; + /* delim? */ + s = imap_next_word (s); + /* delimiter is meaningless if namespace is "". Why does + * Cyrus provide one?! */ + if (n && *s && *s == '\"') + { + if (s[1] && s[2] == '\"') + delim = s[1]; + else if (s[1] && s[1] == '\\' && s[2] && s[3] == '\"') + delim = s[2]; + } + /* skip "" namespaces, they are already listed at the root */ + if ((ns[0] != '\0') && (nsbused < nsblen) && (*nns < nsilen)) + { + dprint (3, (debugfile, "browse_get_namespace: adding %s\n", ns)); + nsi->type = type; + /* Cyrus doesn't append the delimiter to the namespace, + * but UW-IMAP does. We'll strip it here and add it back + * as if it were a normal directory, from the browser */ + if (n && (ns[n-1] == delim)) + ns[--n] = '\0'; + strncpy (nsbuf+nsbused,ns,nsblen-nsbused-1); + nsi->prefix = nsbuf+nsbused; + nsbused += n+1; + nsi->delim = delim; + nsi++; + (*nns)++; + } + while (*s && *s != ')') + s++; + if (*s) + s++; + } + } + } + } + } + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_OK) + return -1; + + return 0; +} + +/* Check which namespaces have contents */ +static int browse_verify_namespace (IMAP_DATA* idata, + IMAP_NAMESPACE_INFO *nsi, int nns) +{ + char buf[LONG_STRING]; + int i = 0; + char *name; + char delim; + + for (i = 0; i < nns; i++, nsi++) + { + /* Cyrus gives back nothing if the % isn't added. This may return lots + * of data in some cases, I guess, but I currently feel that's better + * than invisible namespaces */ + if (nsi->delim) + snprintf (buf, sizeof (buf), "%s \"\" \"%s%c%%\"", + option (OPTIMAPLSUB) ? "LSUB" : "LIST", nsi->prefix, + nsi->delim); + else + snprintf (buf, sizeof (buf), "%s \"\" \"%s%%\"", + option (OPTIMAPLSUB) ? "LSUB" : "LIST", nsi->prefix); + + imap_cmd_start (idata, buf); + + nsi->listable = 0; + nsi->home_namespace = 0; + do + { + if (imap_parse_list_response(idata, &name, &nsi->noselect, + &nsi->noinferiors, &delim) != 0) + return -1; + nsi->listable |= (name != NULL); + } + while ((ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN) != 0)); + } + + return 0; +} + diff --git a/imap/command.c b/imap/command.c new file mode 100644 index 0000000..47cd3ed --- /dev/null +++ b/imap/command.c @@ -0,0 +1,562 @@ +/* + * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* command.c: routines for sending commands to an IMAP server and parsing + * responses */ + +#include "mutt.h" +#include "imap_private.h" +#include "message.h" +#include "mx.h" + +#include <ctype.h> +#include <stdlib.h> + +#define IMAP_CMD_BUFSIZE 512 + +/* forward declarations */ +static void cmd_handle_fatal (IMAP_DATA* idata); +static int cmd_handle_untagged (IMAP_DATA* idata); +static void cmd_make_sequence (IMAP_DATA* idata); +static void cmd_parse_capabilities (IMAP_DATA* idata, char* s); +static void cmd_parse_expunge (IMAP_DATA* idata, const char* s); +static void cmd_parse_fetch (IMAP_DATA* idata, char* s); +static void cmd_parse_myrights (IMAP_DATA* idata, char* s); + +static char *Capabilities[] = { + "IMAP4", + "IMAP4rev1", + "STATUS", + "ACL", + "NAMESPACE", + "AUTH=CRAM-MD5", + "AUTH=GSSAPI", + "AUTH=ANONYMOUS", + "STARTTLS", + "LOGINDISABLED", + + NULL +}; + +/* imap_cmd_start: Given an IMAP command, send it to the server. + * Currently a minor convenience, but helps to route all IMAP commands + * through a single interface. */ +int imap_cmd_start (IMAP_DATA* idata, const char* cmd) +{ + char* out; + int outlen; + int rc; + + if (idata->status == IMAP_FATAL) + { + cmd_handle_fatal (idata); + return IMAP_CMD_BAD; + } + + cmd_make_sequence (idata); + /* seq, space, cmd, \r\n\0 */ + outlen = strlen (idata->cmd.seq) + strlen (cmd) + 4; + out = (char*) safe_malloc (outlen); + snprintf (out, outlen, "%s %s\r\n", idata->cmd.seq, cmd); + + rc = mutt_socket_write (idata->conn, out); + + FREE (&out); + + return (rc < 0) ? IMAP_CMD_BAD : 0; +} + +/* imap_cmd_step: Reads server responses from an IMAP command, detects + * tagged completion response, handles untagged messages, can read + * arbitrarily large strings (using malloc, so don't make it _too_ + * large!). */ +int imap_cmd_step (IMAP_DATA* idata) +{ + IMAP_COMMAND* cmd = &idata->cmd; + unsigned int len = 0; + int c; + + if (idata->status == IMAP_FATAL) + { + cmd_handle_fatal (idata); + return IMAP_CMD_BAD; + } + + /* read into buffer, expanding buffer as necessary until we have a full + * line */ + do + { + if (len == cmd->blen) + { + safe_realloc (&cmd->buf, cmd->blen + IMAP_CMD_BUFSIZE); + cmd->blen = cmd->blen + IMAP_CMD_BUFSIZE; + dprint (3, (debugfile, "imap_cmd_step: grew buffer to %u bytes\n", + cmd->blen)); + } + + c = mutt_socket_readln (cmd->buf + len, cmd->blen - len, idata->conn); + if (c <= 0) + { + dprint (1, (debugfile, "imap_cmd_step: Error reading server response.\n")); + cmd_handle_fatal (idata); + return IMAP_CMD_BAD; + } + + len += c; + } + /* if we've read all the way to the end of the buffer, we haven't read a + * full line (mutt_socket_readln strips the \r, so we always have at least + * one character free when we've read a full line) */ + while (len == cmd->blen); + + /* don't let one large string make cmd->buf hog memory forever */ + if ((cmd->blen > IMAP_CMD_BUFSIZE) && (len <= IMAP_CMD_BUFSIZE)) + { + safe_realloc (&cmd->buf, IMAP_CMD_BUFSIZE); + cmd->blen = IMAP_CMD_BUFSIZE; + dprint (3, (debugfile, "imap_cmd_step: shrank buffer to %u bytes\n", cmd->blen)); + } + + idata->lastread = time(NULL); + + /* handle untagged messages. The caller still gets its shot afterwards. */ + if (!ascii_strncmp (cmd->buf, "* ", 2) && + cmd_handle_untagged (idata)) + return IMAP_CMD_BAD; + + /* server demands a continuation response from us */ + if (!ascii_strncmp (cmd->buf, "+ ", 2)) + { + return IMAP_CMD_RESPOND; + } + + /* tagged completion code */ + if (!ascii_strncmp (cmd->buf, cmd->seq, SEQLEN)) + { + imap_cmd_finish (idata); + return imap_code (cmd->buf) ? IMAP_CMD_OK : IMAP_CMD_NO; + } + + return IMAP_CMD_CONTINUE; +} + +/* imap_code: returns 1 if the command result was OK, or 0 if NO or BAD */ +int imap_code (const char *s) +{ + s += SEQLEN; + SKIPWS (s); + return (ascii_strncasecmp ("OK", s, 2) == 0); +} + +/* imap_exec: execute a command, and wait for the response from the server. + * Also, handle untagged responses. + * Flags: + * IMAP_CMD_FAIL_OK: the calling procedure can handle failure. This is used + * for checking for a mailbox on append and login + * IMAP_CMD_PASS: command contains a password. Suppress logging. + * Return 0 on success, -1 on Failure, -2 on OK Failure + */ +int imap_exec (IMAP_DATA* idata, const char* cmd, int flags) +{ + char* out; + int outlen; + int rc; + + if (idata->status == IMAP_FATAL) + { + cmd_handle_fatal (idata); + return -1; + } + + /* create sequence for command */ + cmd_make_sequence (idata); + /* seq, space, cmd, \r\n\0 */ + outlen = strlen (idata->cmd.seq) + strlen (cmd) + 4; + out = (char*) safe_malloc (outlen); + snprintf (out, outlen, "%s %s\r\n", idata->cmd.seq, cmd); + + rc = mutt_socket_write_d (idata->conn, out, + flags & IMAP_CMD_PASS ? IMAP_LOG_PASS : IMAP_LOG_CMD); + FREE (&out); + + if (rc < 0) + { + cmd_handle_fatal (idata); + return -1; + } + + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc == IMAP_CMD_NO && (flags & IMAP_CMD_FAIL_OK)) + return -2; + + if (rc != IMAP_CMD_OK) + { + if (flags & IMAP_CMD_FAIL_OK) + return -2; + + dprint (1, (debugfile, "imap_exec: command failed: %s\n", idata->cmd.buf)); + return -1; + } + + return 0; +} + +/* imap_cmd_running: Returns whether an IMAP command is in progress. */ +int imap_cmd_running (IMAP_DATA* idata) +{ + if (idata->cmd.state == IMAP_CMD_CONTINUE || + idata->cmd.state == IMAP_CMD_RESPOND) + return 1; + + return 0; +} + +/* imap_cmd_finish: Attempts to perform cleanup (eg fetch new mail if + * detected, do expunge). Called automatically by imap_cmd_step, but + * may be called at any time. Called by imap_check_mailbox just before + * the index is refreshed, for instance. */ +void imap_cmd_finish (IMAP_DATA* idata) +{ + if (idata->status == IMAP_FATAL) + { + cmd_handle_fatal (idata); + return; + } + + if (!(idata->state == IMAP_SELECTED) || idata->ctx->closing) + return; + + if (idata->reopen & IMAP_REOPEN_ALLOW) + { + int count = idata->newMailCount; + + if (!(idata->reopen & IMAP_EXPUNGE_PENDING) && + (idata->reopen & IMAP_NEWMAIL_PENDING) + && count > idata->ctx->msgcount) + { + /* read new mail messages */ + dprint (2, (debugfile, "imap_cmd_finish: Fetching new mail\n")); + /* check_status: curs_main uses imap_check_mailbox to detect + * whether the index needs updating */ + idata->check_status = IMAP_NEWMAIL_PENDING; + imap_read_headers (idata, idata->ctx->msgcount, count-1); + } + else if (idata->reopen & IMAP_EXPUNGE_PENDING) + { + dprint (2, (debugfile, "imap_cmd_finish: Expunging mailbox\n")); + imap_expunge_mailbox (idata); + /* Detect whether we've gotten unexpected EXPUNGE messages */ + if (idata->reopen & IMAP_EXPUNGE_PENDING && + !(idata->reopen & IMAP_EXPUNGE_EXPECTED)) + idata->check_status = IMAP_EXPUNGE_PENDING; + idata->reopen &= ~(IMAP_EXPUNGE_PENDING | IMAP_NEWMAIL_PENDING | + IMAP_EXPUNGE_EXPECTED); + } + } + + idata->status = 0; +} + +/* cmd_handle_fatal: when IMAP_DATA is in fatal state, do what we can */ +static void cmd_handle_fatal (IMAP_DATA* idata) +{ + idata->status = IMAP_FATAL; + + if ((idata->state == IMAP_SELECTED) && + (idata->reopen & IMAP_REOPEN_ALLOW) && + !idata->ctx->closing) + { + mx_fastclose_mailbox (idata->ctx); + mutt_error (_("Mailbox closed")); + mutt_sleep (1); + idata->state = IMAP_DISCONNECTED; + } + + if (idata->state != IMAP_SELECTED) + { + idata->state = IMAP_DISCONNECTED; + idata->status = 0; + } +} + +/* cmd_handle_untagged: fallback parser for otherwise unhandled messages. */ +static int cmd_handle_untagged (IMAP_DATA* idata) +{ + char* s; + char* pn; + int count; + + s = imap_next_word (idata->cmd.buf); + + if ((idata->state == IMAP_SELECTED) && isdigit ((unsigned char) *s)) + { + pn = s; + s = imap_next_word (s); + + /* EXISTS and EXPUNGE are always related to the SELECTED mailbox for the + * connection, so update that one. + */ + if (ascii_strncasecmp ("EXISTS", s, 6) == 0) + { + dprint (2, (debugfile, "Handling EXISTS\n")); + + /* new mail arrived */ + count = atoi (pn); + + if ( !(idata->reopen & IMAP_EXPUNGE_PENDING) && + count < idata->ctx->msgcount) + { + /* something is wrong because the server reported fewer messages + * than we previously saw + */ + mutt_error _("Fatal error. Message count is out of sync!"); + idata->status = IMAP_FATAL; + return -1; + } + /* at least the InterChange server sends EXISTS messages freely, + * even when there is no new mail */ + else if (count == idata->ctx->msgcount) + dprint (3, (debugfile, + "cmd_handle_untagged: superfluous EXISTS message.\n")); + else + { + if (!(idata->reopen & IMAP_EXPUNGE_PENDING)) + { + dprint (2, (debugfile, + "cmd_handle_untagged: New mail in %s - %d messages total.\n", + idata->mailbox, count)); + idata->reopen |= IMAP_NEWMAIL_PENDING; + } + idata->newMailCount = count; + } + } + /* pn vs. s: need initial seqno */ + else if (ascii_strncasecmp ("EXPUNGE", s, 7) == 0) + cmd_parse_expunge (idata, pn); + else if (ascii_strncasecmp ("FETCH", s, 5) == 0) + cmd_parse_fetch (idata, pn); + } + else if (ascii_strncasecmp ("CAPABILITY", s, 10) == 0) + cmd_parse_capabilities (idata, s); + else if (ascii_strncasecmp ("MYRIGHTS", s, 8) == 0) + cmd_parse_myrights (idata, s); + else if (ascii_strncasecmp ("BYE", s, 3) == 0) + { + dprint (2, (debugfile, "Handling BYE\n")); + + /* check if we're logging out */ + if (idata->status == IMAP_BYE) + return 0; + + /* server shut down our connection */ + s += 3; + SKIPWS (s); + mutt_error ("%s", s); + idata->status = IMAP_BYE; + if (idata->state == IMAP_SELECTED) + mx_fastclose_mailbox (idata->ctx); + mutt_socket_close (idata->conn); + idata->state = IMAP_DISCONNECTED; + + return -1; + } + else if (option (OPTIMAPSERVERNOISE) && (ascii_strncasecmp ("NO", s, 2) == 0)) + { + dprint (2, (debugfile, "Handling untagged NO\n")); + + /* Display the warning message from the server */ + mutt_error ("%s", s+3); + mutt_sleep (2); + } + + return 0; +} + +/* cmd_make_sequence: make a tag suitable for starting an IMAP command */ +static void cmd_make_sequence (IMAP_DATA* idata) +{ + snprintf (idata->cmd.seq, sizeof (idata->cmd.seq), "a%04d", idata->seqno++); + + if (idata->seqno > 9999) + idata->seqno = 0; +} + +/* cmd_parse_capabilities: set capability bits according to CAPABILITY + * response */ +static void cmd_parse_capabilities (IMAP_DATA* idata, char* s) +{ + int x; + + dprint (2, (debugfile, "Handling CAPABILITY\n")); + + s = imap_next_word (s); + FREE(&idata->capstr); + idata->capstr = safe_strdup (s); + + memset (idata->capabilities, 0, sizeof (idata->capabilities)); + + while (*s) + { + for (x = 0; x < CAPMAX; x++) + if (imap_wordcasecmp(Capabilities[x], s) == 0) + { + mutt_bit_set (idata->capabilities, x); + break; + } + s = imap_next_word (s); + } +} + +/* cmd_parse_expunge: mark headers with new sequence ID and mark idata to + * be reopened at our earliest convenience */ +static void cmd_parse_expunge (IMAP_DATA* idata, const char* s) +{ + int expno, cur; + HEADER* h; + + dprint (2, (debugfile, "Handling EXPUNGE\n")); + + expno = atoi (s); + + /* walk headers, zero seqno of expunged message, decrement seqno of those + * above. Possibly we could avoid walking the whole list by resorting + * and guessing a good starting point, but I'm guessing the resort would + * nullify the gains */ + for (cur = 0; cur < idata->ctx->msgcount; cur++) + { + h = idata->ctx->hdrs[cur]; + + if (h->index+1 == expno) + h->index = -1; + else if (h->index+1 > expno) + h->index--; + } + + idata->reopen |= IMAP_EXPUNGE_PENDING; +} + +/* cmd_parse_fetch: Load fetch response into IMAP_DATA. Currently only + * handles unanticipated FETCH responses, and only FLAGS data. We get + * these if another client has changed flags for a mailbox we've selected. + * Of course, a lot of code here duplicates code in message.c. */ +static void cmd_parse_fetch (IMAP_DATA* idata, char* s) +{ + int msgno, cur; + HEADER* h = NULL; + + dprint (2, (debugfile, "Handling FETCH\n")); + + msgno = atoi (s); + + /* see cmd_parse_expunge */ + for (cur = 0; cur < idata->ctx->msgcount; cur++) + { + h = idata->ctx->hdrs[cur]; + + if (h->active && h->index+1 == msgno) + { + dprint (2, (debugfile, "Message UID %d updated\n", HEADER_DATA(h)->uid)); + break; + } + + h = NULL; + } + + if (!h) + { + dprint (1, (debugfile, "FETCH response ignored for this message\n")); + return; + } + + /* skip FETCH */ + s = imap_next_word (s); + s = imap_next_word (s); + + if (*s != '(') + { + dprint (1, (debugfile, "Malformed FETCH response")); + return; + } + s++; + + if (ascii_strncasecmp ("FLAGS", s, 5) != 0) + { + dprint (2, (debugfile, "Only handle FLAGS updates\n")); + return; + } + + /* If server flags could conflict with mutt's flags, reopen the mailbox. */ + if (h->changed) + idata->reopen |= IMAP_EXPUNGE_PENDING; + else { + imap_set_flags (idata, h, s); + idata->check_status = IMAP_FLAGS_PENDING; + } +} + +/* cmd_parse_myrights: set rights bits according to MYRIGHTS response */ +static void cmd_parse_myrights (IMAP_DATA* idata, char* s) +{ + dprint (2, (debugfile, "Handling MYRIGHTS\n")); + + s = imap_next_word (s); + s = imap_next_word (s); + + /* zero out current rights set */ + memset (idata->rights, 0, sizeof (idata->rights)); + + while (*s && !isspace((unsigned char) *s)) + { + switch (*s) + { + case 'l': + mutt_bit_set (idata->rights, IMAP_ACL_LOOKUP); + break; + case 'r': + mutt_bit_set (idata->rights, IMAP_ACL_READ); + break; + case 's': + mutt_bit_set (idata->rights, IMAP_ACL_SEEN); + break; + case 'w': + mutt_bit_set (idata->rights, IMAP_ACL_WRITE); + break; + case 'i': + mutt_bit_set (idata->rights, IMAP_ACL_INSERT); + break; + case 'p': + mutt_bit_set (idata->rights, IMAP_ACL_POST); + break; + case 'c': + mutt_bit_set (idata->rights, IMAP_ACL_CREATE); + break; + case 'd': + mutt_bit_set (idata->rights, IMAP_ACL_DELETE); + break; + case 'a': + mutt_bit_set (idata->rights, IMAP_ACL_ADMIN); + break; + } + s++; + } +} diff --git a/imap/imap.c b/imap/imap.c new file mode 100644 index 0000000..d4b622c --- /dev/null +++ b/imap/imap.c @@ -0,0 +1,1469 @@ +/* + * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2003 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* Support for IMAP4rev1, with the occasional nod to IMAP 4. */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mx.h" +#include "mailbox.h" +#include "globals.h" +#include "sort.h" +#include "browser.h" +#include "message.h" +#include "imap_private.h" +#ifdef USE_SSL +# include "mutt_ssl.h" +#endif + +#include <unistd.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> + +/* imap forward declarations */ +static int imap_get_delim (IMAP_DATA *idata); +static char* imap_get_flags (LIST** hflags, char* s); +static int imap_check_acl (IMAP_DATA *idata); +static int imap_check_capabilities (IMAP_DATA* idata); +static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag, + const char* str, char* flags, size_t flsize); + +/* imap_access: Check permissions on an IMAP mailbox. */ +int imap_access (const char* path, int flags) +{ + IMAP_DATA* idata; + IMAP_MBOX mx; + char buf[LONG_STRING]; + char mailbox[LONG_STRING]; + char mbox[LONG_STRING]; + + if (imap_parse_path (path, &mx)) + return -1; + + if (!(idata = imap_conn_find (&mx.account, + option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0))) + { + FREE (&mx.mbox); + return -1; + } + + imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox)); + FREE (&mx.mbox); + imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); + + /* TODO: ACL checks. Right now we assume if it exists we can mess with it. */ + if (mutt_bit_isset (idata->capabilities, IMAP4REV1)) + snprintf (buf, sizeof (buf), "STATUS %s (UIDVALIDITY)", mbox); + else if (mutt_bit_isset (idata->capabilities, STATUS)) + snprintf (buf, sizeof (buf), "STATUS %s (UID-VALIDITY)", mbox); + else + { + dprint (2, (debugfile, "imap_access: STATUS not supported?\n")); + return -1; + } + + if (imap_exec (idata, buf, IMAP_CMD_FAIL_OK) < 0) + { + dprint (1, (debugfile, "imap_access: Can't check STATUS of %s\n", mbox)); + return -1; + } + + return 0; +} + +int imap_create_mailbox (IMAP_DATA* idata, char* mailbox) +{ + char buf[LONG_STRING], mbox[LONG_STRING]; + + imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); + snprintf (buf, sizeof (buf), "CREATE %s", mbox); + + if (imap_exec (idata, buf, 0) != 0) + return -1; + + return 0; +} + +int imap_delete_mailbox (CONTEXT* ctx, IMAP_MBOX mx) +{ + char buf[LONG_STRING], mbox[LONG_STRING]; + IMAP_DATA *idata; + + if (!ctx || !ctx->data) { + if (!(idata = imap_conn_find (&mx.account, + option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0))) + { + FREE (&mx.mbox); + return -1; + } + } else { + idata = ctx->data; + } + + imap_munge_mbox_name (mbox, sizeof (mbox), mx.mbox); + snprintf (buf, sizeof (buf), "DELETE %s", mbox); + + if (imap_exec ((IMAP_DATA*) idata, buf, 0) != 0) + return -1; + + return 0; +} + +/* imap_logout_all: close all open connections. Quick and dirty until we can + * make sure we've got all the context we need. */ +void imap_logout_all (void) +{ + CONNECTION* conn; + CONNECTION* tmp; + + conn = mutt_socket_head (); + + while (conn) + { + tmp = conn->next; + + if (conn->account.type == M_ACCT_TYPE_IMAP && conn->fd >= 0) + { + mutt_message (_("Closing connection to %s..."), conn->account.host); + imap_logout ((IMAP_DATA*) conn->data); + mutt_clear_error (); + mutt_socket_close (conn); + mutt_socket_free (conn); + } + + conn = tmp; + } +} + +/* imap_read_literal: read bytes bytes from server into file. Not explicitly + * buffered, relies on FILE buffering. NOTE: strips \r from \r\n. + * Apparently even literals use \r\n-terminated strings ?! */ +int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes) +{ + long pos; + char c; + + int r = 0; + + dprint (2, (debugfile, "imap_read_literal: reading %ld bytes\n", bytes)); + + for (pos = 0; pos < bytes; pos++) + { + if (mutt_socket_readchar (idata->conn, &c) != 1) + { + dprint (1, (debugfile, "imap_read_literal: error during read, %ld bytes read\n", pos)); + idata->status = IMAP_FATAL; + + return -1; + } + +#if 1 + if (r == 1 && c != '\n') + fputc ('\r', fp); + + if (c == '\r') + { + r = 1; + continue; + } + else + r = 0; +#endif + fputc (c, fp); +#ifdef DEBUG + if (debuglevel >= IMAP_LOG_LTRL) + fputc (c, debugfile); +#endif + } + + return 0; +} + +/* imap_expunge_mailbox: Purge IMAP portion of expunged messages from the + * context. Must not be done while something has a handle on any headers + * (eg inside pager or editor). That is, check IMAP_REOPEN_ALLOW. */ +void imap_expunge_mailbox (IMAP_DATA* idata) +{ + HEADER* h; + int i, cacheno; + + for (i = 0; i < idata->ctx->msgcount; i++) + { + h = idata->ctx->hdrs[i]; + + if (h->index == -1) + { + dprint (2, (debugfile, "Expunging message UID %d.\n", HEADER_DATA (h)->uid)); + + h->active = 0; + + /* free cached body from disk, if neccessary */ + cacheno = HEADER_DATA(h)->uid % IMAP_CACHE_LEN; + if (idata->cache[cacheno].uid == HEADER_DATA(h)->uid && + idata->cache[cacheno].path) + { + unlink (idata->cache[cacheno].path); + FREE (&idata->cache[cacheno].path); + } + + imap_free_header_data (&h->data); + } + } + + /* We may be called on to expunge at any time. We can't rely on the caller + * to always know to rethread */ + mx_update_tables (idata->ctx, 0); + mutt_sort_headers (idata->ctx, 1); +} + +static int imap_get_delim (IMAP_DATA *idata) +{ + char *s; + int rc; + + /* assume that the delim is /. If this fails, we're in bigger trouble + * than getting the delim wrong */ + idata->delim = '/'; + + imap_cmd_start (idata, "LIST \"\" \"\""); + + do + { + if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + break; + + s = imap_next_word (idata->cmd.buf); + if (ascii_strncasecmp ("LIST", s, 4) == 0) + { + s = imap_next_word (s); + s = imap_next_word (s); + if (s && s[0] == '\"' && s[1] && s[2] == '\"') + idata->delim = s[1]; + else if (s && s[0] == '\"' && s[1] && s[1] == '\\' && s[2] && s[3] == '\"') + idata->delim = s[2]; + } + } + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_OK) + { + dprint (1, (debugfile, "imap_get_delim: failed.\n")); + return -1; + } + + dprint (2, (debugfile, "Delimiter: %c\n", idata->delim)); + + return -1; +} + +/* get rights for folder, let imap_handle_untagged do the rest */ +static int imap_check_acl (IMAP_DATA *idata) +{ + char buf[LONG_STRING]; + char mbox[LONG_STRING]; + + imap_munge_mbox_name (mbox, sizeof(mbox), idata->mailbox); + snprintf (buf, sizeof (buf), "MYRIGHTS %s", mbox); + if (imap_exec (idata, buf, 0) != 0) + { + imap_error ("imap_check_acl", buf); + return -1; + } + return 0; +} + +/* imap_check_capabilities: make sure we can log in to this server. */ +static int imap_check_capabilities (IMAP_DATA* idata) +{ + if (imap_exec (idata, "CAPABILITY", 0) != 0) + { + imap_error ("imap_check_capabilities", idata->cmd.buf); + return -1; + } + + if (!(mutt_bit_isset(idata->capabilities,IMAP4) + ||mutt_bit_isset(idata->capabilities,IMAP4REV1))) + { + mutt_error _("This IMAP server is ancient. Mutt does not work with it."); + mutt_sleep (2); /* pause a moment to let the user see the error */ + + return -1; + } + + return 0; +} + +/* imap_conn_find: Find an open IMAP connection matching account, or open + * a new one if none can be found. */ +IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags) +{ + CONNECTION* conn; + IMAP_DATA* idata; + ACCOUNT* creds; + + if (!(conn = mutt_conn_find (NULL, account))) + return NULL; + + /* if opening a new UNSELECTED connection, preserve existing creds */ + creds = &(conn->account); + + /* make sure this connection is not in SELECTED state, if neccessary */ + if (flags & M_IMAP_CONN_NOSELECT) + while (conn->data && ((IMAP_DATA*) conn->data)->state == IMAP_SELECTED) + { + if (!(conn = mutt_conn_find (conn, account))) + return NULL; + memcpy (&(conn->account), creds, sizeof (ACCOUNT)); + } + + idata = (IMAP_DATA*) conn->data; + + /* don't open a new connection if one isn't wanted */ + if (flags & M_IMAP_CONN_NONEW) + { + if (!idata) + { + mutt_socket_free (conn); + return NULL; + } + if (idata->state < IMAP_AUTHENTICATED) + return NULL; + } + + if (!idata) + { + /* The current connection is a new connection */ + if (! (idata = imap_new_idata ())) + { + mutt_socket_free (conn); + return NULL; + } + + conn->data = idata; + idata->conn = conn; + } + + if (idata->state == IMAP_DISCONNECTED) + imap_open_connection (idata); + if (idata->state == IMAP_CONNECTED) + { + if (!imap_authenticate (idata)) + { + idata->state = IMAP_AUTHENTICATED; + if (idata->conn->ssf) + dprint (2, (debugfile, "Communication encrypted at %d bits\n", + idata->conn->ssf)); + } + else + mutt_account_unsetpass (&idata->conn->account); + + FREE (&idata->capstr); + } + if (idata->state == IMAP_AUTHENTICATED) + imap_get_delim (idata); + + return idata; +} + +int imap_open_connection (IMAP_DATA* idata) +{ + char buf[LONG_STRING]; + + if (mutt_socket_open (idata->conn) < 0) + return -1; + + idata->state = IMAP_CONNECTED; + + if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) { + mutt_error (_("Unexpected response received from server: %s"), idata->cmd.buf); + mutt_sleep (1); + + mutt_socket_close (idata->conn); + idata->state = IMAP_DISCONNECTED; + return -1; + } + + if (ascii_strncasecmp ("* OK", idata->cmd.buf, 4) == 0) + { + /* TODO: Parse new tagged CAPABILITY data (* OK [CAPABILITY...]) */ + if (imap_check_capabilities (idata)) + goto bail; +#if defined(USE_SSL) && !defined(USE_NSS) + /* Attempt STARTTLS if available and desired. */ + if (mutt_bit_isset (idata->capabilities, STARTTLS) && !idata->conn->ssf) + { + int rc; + + if ((rc = query_quadoption (OPT_SSLSTARTTLS, + _("Secure connection with TLS?"))) == -1) + goto err_close_conn; + if (rc == M_YES) { + if ((rc = imap_exec (idata, "STARTTLS", IMAP_CMD_FAIL_OK)) == -1) + goto bail; + if (rc != -2) + { + if (mutt_ssl_starttls (idata->conn)) + { + mutt_error (_("Could not negotiate TLS connection")); + mutt_sleep (1); + goto bail; + } + else + { + /* RFC 2595 demands we recheck CAPABILITY after TLS completes. */ + if (imap_exec (idata, "CAPABILITY", 0)) + goto bail; + } + } + } + } +#endif + } + else if (ascii_strncasecmp ("* PREAUTH", idata->cmd.buf, 9) == 0) + { + idata->state = IMAP_AUTHENTICATED; + if (imap_check_capabilities (idata) != 0) + goto bail; + FREE (&idata->capstr); + } + else + { + imap_error ("imap_open_connection()", buf); + goto bail; + } + + return 0; + + err_close_conn: + mutt_socket_close (idata->conn); + bail: + FREE (&idata->capstr); + return -1; +} + +/* imap_get_flags: Make a simple list out of a FLAGS response. + * return stream following FLAGS response */ +static char* imap_get_flags (LIST** hflags, char* s) +{ + LIST* flags; + char* flag_word; + char ctmp; + + /* sanity-check string */ + if (ascii_strncasecmp ("FLAGS", s, 5) != 0) + { + dprint (1, (debugfile, "imap_get_flags: not a FLAGS response: %s\n", + s)); + return NULL; + } + s += 5; + SKIPWS(s); + if (*s != '(') + { + dprint (1, (debugfile, "imap_get_flags: bogus FLAGS response: %s\n", + s)); + return NULL; + } + + /* create list, update caller's flags handle */ + flags = mutt_new_list(); + *hflags = flags; + + while (*s && *s != ')') + { + s++; + SKIPWS(s); + flag_word = s; + while (*s && (*s != ')') && !ISSPACE (*s)) + s++; + ctmp = *s; + *s = '\0'; + if (*flag_word) + mutt_add_list (flags, flag_word); + *s = ctmp; + } + + /* note bad flags response */ + if (*s != ')') + { + dprint (1, (debugfile, + "imap_get_flags: Unterminated FLAGS response: %s\n", s)); + mutt_free_list (hflags); + + return NULL; + } + + s++; + + return s; +} + +int imap_open_mailbox (CONTEXT* ctx) +{ + CONNECTION *conn; + IMAP_DATA *idata; + char buf[LONG_STRING]; + char bufout[LONG_STRING]; + int count = 0; + IMAP_MBOX mx; + int rc; + + if (imap_parse_path (ctx->path, &mx)) + { + mutt_error (_("%s is an invalid IMAP path"), ctx->path); + return -1; + } + + /* we require a connection which isn't currently in IMAP_SELECTED state */ + if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NOSELECT))) + goto fail_noidata; + if (idata->state < IMAP_AUTHENTICATED) + goto fail; + + conn = idata->conn; + + /* once again the context is new */ + ctx->data = idata; + + /* Clean up path and replace the one in the ctx */ + imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); + FREE(&(idata->mailbox)); + idata->mailbox = safe_strdup (buf); + imap_qualify_path (buf, sizeof (buf), &mx, idata->mailbox); + + FREE (&(ctx->path)); + ctx->path = safe_strdup (buf); + + idata->ctx = ctx; + + /* clear mailbox status */ + idata->status = 0; + memset (idata->rights, 0, (RIGHTSMAX+7)/8); + idata->newMailCount = 0; + + mutt_message (_("Selecting %s..."), idata->mailbox); + imap_munge_mbox_name (buf, sizeof(buf), idata->mailbox); + snprintf (bufout, sizeof (bufout), "%s %s", + ctx->readonly ? "EXAMINE" : "SELECT", buf); + + idata->state = IMAP_SELECTED; + + imap_cmd_start (idata, bufout); + + do + { + char *pc; + + if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + break; + + pc = idata->cmd.buf + 2; + + /* Obtain list of available flags here, may be overridden by a + * PERMANENTFLAGS tag in the OK response */ + if (ascii_strncasecmp ("FLAGS", pc, 5) == 0) + { + /* don't override PERMANENTFLAGS */ + if (!idata->flags) + { + dprint (2, (debugfile, "Getting mailbox FLAGS\n")); + if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL) + goto fail; + } + } + /* PERMANENTFLAGS are massaged to look like FLAGS, then override FLAGS */ + else if (ascii_strncasecmp ("OK [PERMANENTFLAGS", pc, 18) == 0) + { + dprint (2, (debugfile, "Getting mailbox PERMANENTFLAGS\n")); + /* safe to call on NULL */ + mutt_free_list (&(idata->flags)); + /* skip "OK [PERMANENT" so syntax is the same as FLAGS */ + pc += 13; + if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL) + goto fail; + } + else + { + pc = imap_next_word (pc); + if (!ascii_strncasecmp ("EXISTS", pc, 6)) + { + count = idata->newMailCount; + idata->newMailCount = 0; + } + } + } + while (rc == IMAP_CMD_CONTINUE); + + if (rc == IMAP_CMD_NO) + { + char *s; + s = imap_next_word (idata->cmd.buf); /* skip seq */ + s = imap_next_word (s); /* Skip response */ + mutt_error ("%s", s); + mutt_sleep (2); + goto fail; + } + + if (rc != IMAP_CMD_OK) + goto fail; + + /* check for READ-ONLY notification */ + if (!ascii_strncasecmp (imap_get_qualifier (idata->cmd.buf), "[READ-ONLY]", 11) \ + && !mutt_bit_isset (idata->capabilities, ACL)) + { + dprint (2, (debugfile, "Mailbox is read-only.\n")); + ctx->readonly = 1; + } + +#ifdef DEBUG + /* dump the mailbox flags we've found */ + if (debuglevel > 2) + { + if (!idata->flags) + dprint (3, (debugfile, "No folder flags found\n")); + else + { + LIST* t = idata->flags; + + dprint (3, (debugfile, "Mailbox flags: ")); + + t = t->next; + while (t) + { + dprint (3, (debugfile, "[%s] ", t->data)); + t = t->next; + } + dprint (3, (debugfile, "\n")); + } + } +#endif + + if (mutt_bit_isset (idata->capabilities, ACL)) + { + if (imap_check_acl (idata)) + goto fail; + if (!(mutt_bit_isset(idata->rights, IMAP_ACL_DELETE) || + mutt_bit_isset(idata->rights, IMAP_ACL_SEEN) || + mutt_bit_isset(idata->rights, IMAP_ACL_WRITE) || + mutt_bit_isset(idata->rights, IMAP_ACL_INSERT))) + ctx->readonly = 1; + } + /* assume we have all rights if ACL is unavailable */ + else + { + mutt_bit_set (idata->rights, IMAP_ACL_LOOKUP); + mutt_bit_set (idata->rights, IMAP_ACL_READ); + mutt_bit_set (idata->rights, IMAP_ACL_SEEN); + mutt_bit_set (idata->rights, IMAP_ACL_WRITE); + mutt_bit_set (idata->rights, IMAP_ACL_INSERT); + mutt_bit_set (idata->rights, IMAP_ACL_POST); + mutt_bit_set (idata->rights, IMAP_ACL_CREATE); + mutt_bit_set (idata->rights, IMAP_ACL_DELETE); + } + + ctx->hdrmax = count; + ctx->hdrs = safe_calloc (count, sizeof (HEADER *)); + ctx->v2r = safe_calloc (count, sizeof (int)); + ctx->msgcount = 0; + if (count && (imap_read_headers (idata, 0, count-1) < 0)) + { + mutt_error _("Error opening mailbox"); + mutt_sleep (1); + goto fail; + } + + dprint (2, (debugfile, "imap_open_mailbox: msgcount is %d\n", ctx->msgcount)); + FREE (&mx.mbox); + return 0; + + fail: + if (idata->state == IMAP_SELECTED) + idata->state = IMAP_AUTHENTICATED; + fail_noidata: + FREE (&mx.mbox); + return -1; +} + +int imap_open_mailbox_append (CONTEXT *ctx) +{ + CONNECTION *conn; + IMAP_DATA *idata; + char buf[LONG_STRING], mbox[LONG_STRING]; + char mailbox[LONG_STRING]; + int r; + IMAP_MBOX mx; + + if (imap_parse_path (ctx->path, &mx)) + return -1; + + /* in APPEND mode, we appear to hijack an existing IMAP connection - + * ctx is brand new and mostly empty */ + + if (!(idata = imap_conn_find (&(mx.account), 0))) + goto fail; + conn = idata->conn; + + ctx->magic = M_IMAP; + ctx->data = idata; + + /* check mailbox existance */ + + imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox)); + + imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); + + if (mutt_bit_isset(idata->capabilities,IMAP4REV1)) + snprintf (buf, sizeof (buf), "STATUS %s (UIDVALIDITY)", mbox); + else if (mutt_bit_isset(idata->capabilities,STATUS)) + /* We have no idea what the other guy wants. UW imapd 8.3 wants this + * (but it does not work if another mailbox is selected) */ + snprintf (buf, sizeof (buf), "STATUS %s (UID-VALIDITY)", mbox); + else + { + /* STATUS not supported */ + mutt_message _("Unable to append to IMAP mailboxes at this server"); + + goto fail; + } + + r = imap_exec (idata, buf, IMAP_CMD_FAIL_OK); + if (r == -2) + { + /* command failed cause folder doesn't exist */ + snprintf (buf, sizeof (buf), _("Create %s?"), mailbox); + if (option (OPTCONFIRMCREATE) && mutt_yesorno (buf, 1) < 1) + goto fail; + + if (imap_create_mailbox (idata, mailbox) < 0) + goto fail; + } + else if (r == -1) + /* Hmm, some other failure */ + goto fail; + + FREE (&mx.mbox); + return 0; + + fail: + FREE (&mx.mbox); + return -1; +} + +/* imap_logout: Gracefully log out of server. */ +void imap_logout (IMAP_DATA* idata) +{ + /* we set status here to let imap_handle_untagged know we _expect_ to + * receive a bye response (so it doesn't freak out and close the conn) */ + idata->status = IMAP_BYE; + imap_cmd_start (idata, "LOGOUT"); + while (imap_cmd_step (idata) == IMAP_CMD_CONTINUE) + ; +} + +int imap_close_connection (CONTEXT *ctx) +{ + dprint (1, (debugfile, "imap_close_connection(): closing connection\n")); + /* if the server didn't shut down on us, close the connection gracefully */ + if (CTX_DATA->status != IMAP_BYE) + { + mutt_message _("Closing connection to IMAP server..."); + imap_logout (CTX_DATA); + mutt_clear_error (); + } + mutt_socket_close (CTX_DATA->conn); + CTX_DATA->state = IMAP_DISCONNECTED; + CTX_DATA->conn->data = NULL; + return 0; +} + +/* imap_set_flag: append str to flags if we currently have permission + * according to aclbit */ +static void imap_set_flag (IMAP_DATA* idata, int aclbit, int flag, + const char *str, char *flags, size_t flsize) +{ + if (mutt_bit_isset (idata->rights, aclbit)) + if (flag) + strncat (flags, str, flsize); +} + +/* imap_make_msg_set: make an IMAP4rev1 UID message set out of a set of + * headers, given a flag enum to filter on. + * Params: idata: IMAP_DATA containing context containing header set + * buf: to write message set into + * buflen: length of buffer + * flag: enum of flag type on which to filter + * changed: include only changed messages in message set + * Returns: number of messages in message set (0 if no matches) */ +int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed) +{ + HEADER** hdrs; /* sorted local copy */ + int count = 0; /* number of messages in message set */ + int match = 0; /* whether current message matches flag condition */ + unsigned int setstart = 0; /* start of current message range */ + int n; + short oldsort; /* we clobber reverse, must restore it */ + /* assuming 32-bit UIDs */ + char uid[12]; + int started = 0; + + /* make copy of header pointers to sort in natural order */ + hdrs = safe_calloc (idata->ctx->msgcount, sizeof (HEADER*)); + memcpy (hdrs, idata->ctx->hdrs, idata->ctx->msgcount * sizeof (HEADER*)); + + if (Sort != SORT_ORDER) + { + oldsort = Sort; + Sort = SORT_ORDER; + qsort ((void*) hdrs, idata->ctx->msgcount, sizeof (HEADER*), + mutt_get_sort_func (SORT_ORDER)); + Sort = oldsort; + } + + for (n = 0; n < idata->ctx->msgcount; n++) + { + match = 0; + /* don't include pending expunged messages */ + if (hdrs[n]->active) + switch (flag) + { + case M_DELETE: + if (hdrs[n]->deleted) + match = 1; + break; + case M_TAG: + if (hdrs[n]->tagged) + match = 1; + break; + } + + if (match && (!changed || hdrs[n]->changed)) + { + count++; + if (setstart == 0) + { + setstart = HEADER_DATA (hdrs[n])->uid; + if (started == 0) + { + snprintf (uid, sizeof (uid), "%u", HEADER_DATA (hdrs[n])->uid); + mutt_buffer_addstr (buf, uid); + started = 1; + } + else + { + snprintf (uid, sizeof (uid), ",%u", HEADER_DATA (hdrs[n])->uid); + mutt_buffer_addstr (buf, uid); + } + } + /* tie up if the last message also matches */ + else if (n == idata->ctx->msgcount-1) + { + snprintf (uid, sizeof (uid), ":%u", HEADER_DATA (hdrs[n])->uid); + mutt_buffer_addstr (buf, uid); + } + } + /* this message is not expunged and doesn't match. End current set. */ + else if (setstart && hdrs[n]->active) + { + if (HEADER_DATA (hdrs[n-1])->uid > setstart) + { + snprintf (uid, sizeof (uid), ":%u", HEADER_DATA (hdrs[n-1])->uid); + mutt_buffer_addstr (buf, uid); + } + setstart = 0; + } + } + + FREE (&hdrs); + + return count; +} + +/* update the IMAP server to reflect message changes done within mutt. + * Arguments + * ctx: the current context + * expunge: 0 or 1 - do expunge? + */ + +int imap_sync_mailbox (CONTEXT* ctx, int expunge, int* index_hint) +{ + IMAP_DATA* idata; + CONTEXT* appendctx = NULL; + BUFFER cmd; + char flags[LONG_STRING]; + char uid[11]; + int deleted; + int n; + int err_continue = M_NO; /* continue on error? */ + int rc; + + idata = (IMAP_DATA*) ctx->data; + + if (idata->state != IMAP_SELECTED) + { + dprint (2, (debugfile, "imap_sync_mailbox: no mailbox selected\n")); + return -1; + } + + /* CLOSE purges deleted messages. If we don't want to purge them, we must + * tell imap_close_mailbox not to issue the CLOSE command */ + if (expunge) + idata->noclose = 0; + else + idata->noclose = 1; + + /* This function is only called when the calling code expects the context + * to be changed. */ + imap_allow_reopen (ctx); + + if ((rc = imap_check_mailbox (ctx, index_hint, 0)) != 0) + return rc; + + memset (&cmd, 0, sizeof (cmd)); + + /* if we are expunging anyway, we can do deleted messages very quickly... */ + if (expunge && mutt_bit_isset (idata->rights, IMAP_ACL_DELETE)) + { + mutt_buffer_addstr (&cmd, "UID STORE "); + deleted = imap_make_msg_set (idata, &cmd, M_DELETE, 1); + + /* if we have a message set, then let's delete */ + if (deleted) + { + mutt_message (_("Marking %d messages deleted..."), deleted); + mutt_buffer_addstr (&cmd, " +FLAGS.SILENT (\\Deleted)"); + /* mark these messages as unchanged so second pass ignores them. Done + * here so BOGUS UW-IMAP 4.7 SILENT FLAGS updates are ignored. */ + for (n = 0; n < ctx->msgcount; n++) + if (ctx->hdrs[n]->deleted && ctx->hdrs[n]->changed) + ctx->hdrs[n]->active = 0; + if (imap_exec (idata, cmd.data, 0) != 0) + { + mutt_error (_("Expunge failed")); + mutt_sleep (1); + rc = -1; + goto out; + } + } + } + + /* save status changes */ + for (n = 0; n < ctx->msgcount; n++) + { + if (ctx->hdrs[n]->active && ctx->hdrs[n]->changed) + { + ctx->hdrs[n]->changed = 0; + + mutt_message (_("Saving message status flags... [%d/%d]"), n+1, + ctx->msgcount); + + snprintf (uid, sizeof (uid), "%u", HEADER_DATA(ctx->hdrs[n])->uid); + cmd.dptr = cmd.data; + mutt_buffer_addstr (&cmd, "UID STORE "); + mutt_buffer_addstr (&cmd, uid); + + /* if attachments have been deleted we delete the message and reupload + * it. This works better if we're expunging, of course. */ + if (ctx->hdrs[n]->attach_del) + { + dprint (3, (debugfile, "imap_sync_mailbox: Attachments to be deleted, falling back to _mutt_save_message\n")); + if (!appendctx) + appendctx = mx_open_mailbox (ctx->path, M_APPEND | M_QUIET, NULL); + if (!appendctx) + { + dprint (1, (debugfile, "imap_sync_mailbox: Error opening mailbox in append mode\n")); + } + else + _mutt_save_message (ctx->hdrs[n], appendctx, 1, 0, 0); + } + flags[0] = '\0'; + + imap_set_flag (idata, IMAP_ACL_SEEN, ctx->hdrs[n]->read, "\\Seen ", + flags, sizeof (flags)); + imap_set_flag (idata, IMAP_ACL_WRITE, ctx->hdrs[n]->flagged, + "\\Flagged ", flags, sizeof (flags)); + imap_set_flag (idata, IMAP_ACL_WRITE, ctx->hdrs[n]->replied, + "\\Answered ", flags, sizeof (flags)); + imap_set_flag (idata, IMAP_ACL_DELETE, ctx->hdrs[n]->deleted, + "\\Deleted ", flags, sizeof (flags)); + + /* now make sure we don't lose custom tags */ + if (mutt_bit_isset (idata->rights, IMAP_ACL_WRITE)) + imap_add_keywords (flags, ctx->hdrs[n], idata->flags, sizeof (flags)); + + mutt_remove_trailing_ws (flags); + + /* UW-IMAP is OK with null flags, Cyrus isn't. The only solution is to + * explicitly revoke all system flags (if we have permission) */ + if (!*flags) + { + imap_set_flag (idata, IMAP_ACL_SEEN, 1, "\\Seen ", flags, sizeof (flags)); + imap_set_flag (idata, IMAP_ACL_WRITE, 1, "\\Flagged ", flags, sizeof (flags)); + imap_set_flag (idata, IMAP_ACL_WRITE, 1, "\\Answered ", flags, sizeof (flags)); + imap_set_flag (idata, IMAP_ACL_DELETE, 1, "\\Deleted ", flags, sizeof (flags)); + + mutt_remove_trailing_ws (flags); + + mutt_buffer_addstr (&cmd, " -FLAGS.SILENT ("); + } + else + mutt_buffer_addstr (&cmd, " FLAGS.SILENT ("); + + mutt_buffer_addstr (&cmd, flags); + mutt_buffer_addstr (&cmd, ")"); + + /* dumb hack for bad UW-IMAP 4.7 servers spurious FLAGS updates */ + ctx->hdrs[n]->active = 0; + + /* after all this it's still possible to have no flags, if you + * have no ACL rights */ + if (*flags && (imap_exec (idata, cmd.data, 0) != 0) && + (err_continue != M_YES)) + { + err_continue = imap_continue ("imap_sync_mailbox: STORE failed", + idata->cmd.buf); + if (err_continue != M_YES) + { + rc = -1; + goto out; + } + } + + ctx->hdrs[n]->active = 1; + } + } + ctx->changed = 0; + + /* We must send an EXPUNGE command if we're not closing. */ + if (expunge && !(ctx->closing) && + mutt_bit_isset(idata->rights, IMAP_ACL_DELETE)) + { + mutt_message _("Expunging messages from server..."); + /* Set expunge bit so we don't get spurious reopened messages */ + idata->reopen |= IMAP_EXPUNGE_EXPECTED; + if (imap_exec (idata, "EXPUNGE", 0) != 0) + { + imap_error (_("imap_sync_mailbox: EXPUNGE failed"), idata->cmd.buf); + rc = -1; + goto out; + } + } + + rc = 0; + out: + if (cmd.data) + FREE (&cmd.data); + if (appendctx) + { + mx_fastclose_mailbox (appendctx); + FREE (&appendctx); + } + return rc; +} + +/* imap_close_mailbox: issue close command if neccessary, reset IMAP_DATA */ +void imap_close_mailbox (CONTEXT* ctx) +{ + IMAP_DATA* idata; + int i; + + idata = (IMAP_DATA*) ctx->data; + /* Check to see if the mailbox is actually open */ + if (!idata) + return; + + if ((idata->status != IMAP_FATAL) && + (idata->state == IMAP_SELECTED) && + (ctx == idata->ctx)) + { + if (!(idata->noclose) && imap_exec (idata, "CLOSE", 0)) + mutt_error (_("CLOSE failed")); + + idata->reopen &= IMAP_REOPEN_ALLOW; + idata->state = IMAP_AUTHENTICATED; + FREE (&(idata->mailbox)); + mutt_free_list (&idata->flags); + idata->ctx = NULL; + } + + /* free IMAP part of headers */ + for (i = 0; i < ctx->msgcount; i++) + imap_free_header_data (&(ctx->hdrs[i]->data)); + + for (i = 0; i < IMAP_CACHE_LEN; i++) + { + if (idata->cache[i].path) + { + unlink (idata->cache[i].path); + FREE (&idata->cache[i].path); + } + } +} + +/* use the NOOP command to poll for new mail + * + * return values: + * M_REOPENED mailbox has been externally modified + * M_NEW_MAIL new mail has arrived! + * 0 no change + * -1 error + */ +int imap_check_mailbox (CONTEXT *ctx, int *index_hint, int force) +{ + /* overload keyboard timeout to avoid many mailbox checks in a row. + * Most users don't like having to wait exactly when they press a key. */ + IMAP_DATA* idata; + int result = 0; + + idata = (IMAP_DATA*) ctx->data; + + if ((force || time(NULL) > idata->lastread + Timeout) + && imap_exec (idata, "NOOP", 0) != 0) + return -1; + + /* We call this even when we haven't run NOOP in case we have pending + * changes to process, since we can reopen here. */ + imap_cmd_finish (idata); + + if (idata->check_status & IMAP_EXPUNGE_PENDING) + result = M_REOPENED; + else if (idata->check_status & IMAP_NEWMAIL_PENDING) + result = M_NEW_MAIL; + else if (idata->check_status & IMAP_FLAGS_PENDING) + result = M_FLAGS; + + idata->check_status = 0; + + return result; +} + +/* returns count of recent messages if new = 1, else count of total messages. + * (useful for at least postponed function) + * Question of taste: use RECENT or UNSEEN for new? + * 0+ number of messages in mailbox + * -1 error while polling mailboxes + */ +int imap_mailbox_check (char* path, int new) +{ + CONNECTION *conn; + IMAP_DATA *idata; + char buf[LONG_STRING]; + char mbox[LONG_STRING]; + char mbox_unquoted[LONG_STRING]; + char *s; + int msgcount = 0; + int connflags = 0; + IMAP_MBOX mx; + int rc; + + if (imap_parse_path (path, &mx)) + return -1; + + /* If imap_passive is set, don't open a connection to check for new mail */ + if (option (OPTIMAPPASSIVE)) + connflags = M_IMAP_CONN_NONEW; + + if (!(idata = imap_conn_find (&(mx.account), connflags))) + { + FREE (&mx.mbox); + return -1; + } + conn = idata->conn; + + imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); + FREE (&mx.mbox); + + imap_munge_mbox_name (mbox, sizeof(mbox), buf); + strfcpy (mbox_unquoted, buf, sizeof (mbox_unquoted)); + + /* The draft IMAP implementor's guide warns againts using the STATUS + * command on a mailbox that you have selected + */ + + if (mutt_strcmp (mbox_unquoted, idata->mailbox) == 0 + || (ascii_strcasecmp (mbox_unquoted, "INBOX") == 0 + && mutt_strcasecmp (mbox_unquoted, idata->mailbox) == 0)) + { + strfcpy (buf, "NOOP", sizeof (buf)); + } + else if (mutt_bit_isset(idata->capabilities,IMAP4REV1) || + mutt_bit_isset(idata->capabilities,STATUS)) + { + snprintf (buf, sizeof (buf), "STATUS %s (%s)", mbox, + new ? "RECENT" : "MESSAGES"); + } + else + /* Server does not support STATUS, and this is not the current mailbox. + * There is no lightweight way to check recent arrivals */ + return -1; + + imap_cmd_start (idata, buf); + + do + { + if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + break; + + s = imap_next_word (idata->cmd.buf); + if (ascii_strncasecmp ("STATUS", s, 6) == 0) + { + s = imap_next_word (s); + /* The mailbox name may or may not be quoted here. We could try to + * munge the server response and compare with quoted (or vise versa) + * but it is probably more efficient to just strncmp against both. */ + if (mutt_strncmp (mbox_unquoted, s, mutt_strlen (mbox_unquoted)) == 0 + || mutt_strncmp (mbox, s, mutt_strlen (mbox)) == 0) + { + s = imap_next_word (s); + s = imap_next_word (s); + if (isdigit ((unsigned char) *s)) + { + if (*s != '0') + { + msgcount = atoi(s); + dprint (2, (debugfile, "%d new messages in %s\n", msgcount, path)); + } + } + } + else + dprint (1, (debugfile, "imap_mailbox_check: STATUS response doesn't match requested mailbox.\n")); + } + } + while (rc == IMAP_CMD_CONTINUE); + + return msgcount; +} + +/* all this listing/browsing is a mess. I don't like that name is a pointer + * into idata->buf (used to be a pointer into the passed in buffer, just + * as bad), nor do I like the fact that the fetch is done here. This + * code can't possibly handle non-LIST untagged responses properly. + * FIXME. ?! */ +int imap_parse_list_response(IMAP_DATA* idata, char **name, int *noselect, + int *noinferiors, char *delim) +{ + char *s; + long bytes; + int rc; + + *name = NULL; + + rc = imap_cmd_step (idata); + if (rc == IMAP_CMD_OK) + return 0; + if (rc != IMAP_CMD_CONTINUE) + return -1; + + s = imap_next_word (idata->cmd.buf); + if ((ascii_strncasecmp ("LIST", s, 4) == 0) || + (ascii_strncasecmp ("LSUB", s, 4) == 0)) + { + *noselect = 0; + *noinferiors = 0; + + s = imap_next_word (s); /* flags */ + if (*s == '(') + { + char *ep; + + s++; + ep = s; + while (*ep && *ep != ')') ep++; + do + { + if (!ascii_strncasecmp (s, "\\NoSelect", 9)) + *noselect = 1; + if (!ascii_strncasecmp (s, "\\NoInferiors", 12)) + *noinferiors = 1; + /* See draft-gahrns-imap-child-mailbox-?? */ + if (!ascii_strncasecmp (s, "\\HasNoChildren", 14)) + *noinferiors = 1; + if (*s != ')') + s++; + while (*s && *s != '\\' && *s != ')') s++; + } while (s != ep); + } + else + return 0; + s = imap_next_word (s); /* delim */ + /* Reset the delimiter, this can change */ + if (ascii_strncasecmp (s, "NIL", 3)) + { + if (s && s[0] == '\"' && s[1] && s[2] == '\"') + *delim = s[1]; + else if (s && s[0] == '\"' && s[1] && s[1] == '\\' && s[2] && s[3] == '\"') + *delim = s[2]; + } + s = imap_next_word (s); /* name */ + if (s && *s == '{') /* Literal */ + { + if (imap_get_literal_count(idata->cmd.buf, &bytes) < 0) + return -1; + if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) + return -1; + *name = idata->cmd.buf; + } + else + *name = s; + } + + return 0; +} + +int imap_subscribe (char *path, int subscribe) +{ + CONNECTION *conn; + IMAP_DATA *idata; + char buf[LONG_STRING]; + char mbox[LONG_STRING]; + IMAP_MBOX mx; + + if (!mx_is_imap (path) || imap_parse_path (path, &mx)) + { + mutt_error (_("Bad mailbox name")); + return -1; + } + + + if (!(idata = imap_conn_find (&(mx.account), 0))) + goto fail; + + conn = idata->conn; + + imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); + if (subscribe) + mutt_message (_("Subscribing to %s..."), buf); + else + mutt_message (_("Unsubscribing to %s..."), buf); + imap_munge_mbox_name (mbox, sizeof(mbox), buf); + + snprintf (buf, sizeof (buf), "%s %s", subscribe ? "SUBSCRIBE" : + "UNSUBSCRIBE", mbox); + + if (imap_exec (idata, buf, 0) < 0) + goto fail; + + FREE (&mx.mbox); + return 0; + + fail: + FREE (&mx.mbox); + return -1; +} + +/* imap_complete: given a partial IMAP folder path, return a string which + * adds as much to the path as is unique */ +int imap_complete(char* dest, size_t dlen, char* path) { + CONNECTION* conn; + IMAP_DATA* idata; + char list[LONG_STRING]; + char buf[LONG_STRING]; + char* list_word = NULL; + int noselect, noinferiors; + char delim; + char completion[LONG_STRING]; + int clen, matchlen = 0; + int completions = 0; + int pos = 0; + IMAP_MBOX mx; + + /* verify passed in path is an IMAP path */ + if (imap_parse_path (path, &mx)) + { + dprint(2, (debugfile, "imap_complete: bad path %s\n", path)); + return -1; + } + + /* don't open a new socket just for completion */ + if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NONEW))) + goto fail; + conn = idata->conn; + + /* reformat path for IMAP list, and append wildcard */ + /* don't use INBOX in place of "" */ + if (mx.mbox && mx.mbox[0]) + imap_fix_path (idata, mx.mbox, list, sizeof(list)); + else + list[0] = '\0'; + + /* fire off command */ + snprintf (buf, sizeof(buf), "%s \"\" \"%s%%\"", + option (OPTIMAPLSUB) ? "LSUB" : "LIST", list); + + imap_cmd_start (idata, buf); + + /* and see what the results are */ + strfcpy (completion, NONULL(mx.mbox), sizeof(completion)); + do + { + if (imap_parse_list_response(idata, &list_word, &noselect, &noinferiors, + &delim)) + break; + + if (list_word) + { + /* store unquoted */ + imap_unmunge_mbox_name (list_word); + + /* if the folder isn't selectable, append delimiter to force browse + * to enter it on second tab. */ + if (noselect) + { + clen = strlen(list_word); + list_word[clen++] = delim; + list_word[clen] = '\0'; + } + /* copy in first word */ + if (!completions) + { + strfcpy (completion, list_word, sizeof(completion)); + matchlen = strlen (completion); + completions++; + continue; + } + + pos = 0; + while (pos < matchlen && list_word[pos] && + completion[pos] == list_word[pos]) + pos++; + completion[pos] = '\0'; + matchlen = pos; + + completions++; + } + } + while (ascii_strncmp(idata->cmd.seq, idata->cmd.buf, SEQLEN)); + + if (completions) + { + /* reformat output */ + imap_qualify_path (dest, dlen, &mx, completion); + mutt_pretty_mailbox (dest); + + FREE (&mx.mbox); + return 0; + } + + fail: + FREE (&mx.mbox); + return -1; +} diff --git a/imap/imap.h b/imap/imap.h new file mode 100644 index 0000000..4a3608d --- /dev/null +++ b/imap/imap.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org> + * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _IMAP_H +#define _IMAP_H 1 + +#include "account.h" +#include "browser.h" +#include "mailbox.h" + +/* -- data structures -- */ +typedef struct +{ + ACCOUNT account; + char* mbox; +} IMAP_MBOX; + +/* imap.c */ +int imap_access (const char*, int); +int imap_check_mailbox (CONTEXT *ctx, int *index_hint, int force); +int imap_close_connection (CONTEXT *ctx); +int imap_delete_mailbox (CONTEXT* idata, IMAP_MBOX mx); +int imap_open_mailbox (CONTEXT *ctx); +int imap_open_mailbox_append (CONTEXT *ctx); +int imap_sync_mailbox (CONTEXT *ctx, int expunge, int *index_hint); +void imap_close_mailbox (CONTEXT *ctx); +int imap_buffy_check (char *path); +int imap_mailbox_check (char *path, int new); +int imap_subscribe (char *path, int subscribe); +int imap_complete (char* dest, size_t dlen, char* path); + +void imap_allow_reopen (CONTEXT *ctx); +void imap_disallow_reopen (CONTEXT *ctx); + +/* browse.c */ +int imap_browse (char* path, struct browser_state* state); +int imap_mailbox_create (const char* folder); + +/* message.c */ +int imap_append_message (CONTEXT* ctx, MESSAGE* msg); +int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete); +int imap_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno); + +/* socket.c */ +void imap_logout_all (void); + +/* util.c */ +int imap_expand_path (char* path, size_t len); +int imap_parse_path (const char* path, IMAP_MBOX* mx); +void imap_pretty_mailbox (char* path); + +int imap_wait_keepalive (pid_t pid); +void imap_keepalive (void); + +#endif diff --git a/imap/imap_private.h b/imap/imap_private.h new file mode 100644 index 0000000..0a55409 --- /dev/null +++ b/imap/imap_private.h @@ -0,0 +1,241 @@ +/* + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _IMAP_PRIVATE_H +#define _IMAP_PRIVATE_H 1 + +#include "imap.h" +#include "mutt_socket.h" + +/* -- symbols -- */ +#define IMAP_PORT 143 +#define IMAP_SSL_PORT 993 + +/* logging levels */ +#define IMAP_LOG_CMD 2 +#define IMAP_LOG_LTRL 4 +#define IMAP_LOG_PASS 5 + +/* IMAP command responses. Used in IMAP_COMMAND.state too */ +/* <tag> OK ... */ +#define IMAP_CMD_OK (0) +/* <tag> BAD ... */ +#define IMAP_CMD_BAD (-1) +/* <tag> NO ... */ +#define IMAP_CMD_NO (-2) +/* * ... */ +#define IMAP_CMD_CONTINUE (1) +/* + */ +#define IMAP_CMD_RESPOND (2) + +/* number of entries in the hash table */ +#define IMAP_CACHE_LEN 10 + +#define SEQLEN 5 + +#define IMAP_REOPEN_ALLOW (1<<0) +#define IMAP_EXPUNGE_EXPECTED (1<<1) +#define IMAP_EXPUNGE_PENDING (1<<2) +#define IMAP_NEWMAIL_PENDING (1<<3) +#define IMAP_FLAGS_PENDING (1<<4) + +/* imap_exec flags (see imap_exec) */ +#define IMAP_CMD_FAIL_OK (1<<0) +#define IMAP_CMD_PASS (1<<1) + +enum +{ + IMAP_FATAL = 1, + IMAP_BYE, + IMAP_REOPENED +}; + +enum +{ + /* States */ + IMAP_DISCONNECTED = 0, + IMAP_CONNECTED, + IMAP_AUTHENTICATED, + IMAP_SELECTED +}; + +enum +{ + /* Namespace types */ + IMAP_NS_PERSONAL = 0, + IMAP_NS_OTHER, + IMAP_NS_SHARED +}; + +/* ACL Rights */ +enum +{ + IMAP_ACL_LOOKUP = 0, + IMAP_ACL_READ, + IMAP_ACL_SEEN, + IMAP_ACL_WRITE, + IMAP_ACL_INSERT, + IMAP_ACL_POST, + IMAP_ACL_CREATE, + IMAP_ACL_DELETE, + IMAP_ACL_ADMIN, + + RIGHTSMAX +}; + +/* Capabilities we are interested in */ +enum +{ + IMAP4 = 0, + IMAP4REV1, + STATUS, + ACL, /* RFC 2086: IMAP4 ACL extension */ + NAMESPACE, /* RFC 2342: IMAP4 Namespace */ + ACRAM_MD5, /* RFC 2195: CRAM-MD5 authentication */ + AGSSAPI, /* RFC 1731: GSSAPI authentication */ + AUTH_ANON, /* AUTH=ANONYMOUS */ + STARTTLS, /* RFC 2595: STARTTLS */ + LOGINDISABLED, /* LOGINDISABLED */ + + CAPMAX +}; + +/* imap_conn_find flags */ +#define M_IMAP_CONN_NONEW (1<<0) +#define M_IMAP_CONN_NOSELECT (1<<1) + +/* -- data structures -- */ +typedef struct +{ + unsigned int uid; + char* path; +} IMAP_CACHE; + +typedef struct +{ + int type; + int listable; + char *prefix; + char delim; + int home_namespace; + /* We get these when we check if namespace exists - cache them */ + int noselect; + int noinferiors; +} IMAP_NAMESPACE_INFO; + +/* IMAP command structure */ +typedef struct +{ + char seq[SEQLEN+1]; + char* buf; + unsigned int blen; + int state; +} IMAP_COMMAND; + +typedef struct +{ + /* This data is specific to a CONNECTION to an IMAP server */ + CONNECTION *conn; + unsigned char state; + unsigned char status; + /* let me explain capstr: SASL needs the capability string (not bits). + * we have 3 options: + * 1. rerun CAPABILITY inside SASL function. + * 2. build appropriate CAPABILITY string by reverse-engineering from bits. + * 3. keep a copy until after authentication. + * I've chosen (3) for now. (2) might not be too bad, but it involves + * tracking all possible capabilities. bah. (1) I don't like because + * it's just no fun to get the same information twice */ + char* capstr; + unsigned char capabilities[(CAPMAX + 7)/8]; + unsigned int seqno; + time_t lastread; /* last time we read a command for the server */ + /* who knows, one day we may run multiple commands in parallel */ + IMAP_COMMAND cmd; + + /* The following data is all specific to the currently SELECTED mbox */ + char delim; + CONTEXT *ctx; + char *mailbox; + unsigned short check_status; + unsigned char reopen; + unsigned char rights[(RIGHTSMAX + 7)/8]; + unsigned int newMailCount; + IMAP_CACHE cache[IMAP_CACHE_LEN]; + int noclose : 1; + + /* all folder flags - system flags AND keywords */ + LIST *flags; +} IMAP_DATA; +/* I wish that were called IMAP_CONTEXT :( */ + +/* -- macros -- */ +#define CTX_DATA ((IMAP_DATA *) ctx->data) + +/* -- private IMAP functions -- */ +/* imap.c */ +int imap_create_mailbox (IMAP_DATA* idata, char* mailbox); +int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed); +int imap_open_connection (IMAP_DATA* idata); +IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags); +int imap_parse_list_response(IMAP_DATA* idata, char** name, int* noselect, + int* noinferiors, char* delim); +int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes); +void imap_expunge_mailbox (IMAP_DATA* idata); +void imap_logout (IMAP_DATA* idata); + +/* auth.c */ +int imap_authenticate (IMAP_DATA* idata); + +/* command.c */ +int imap_cmd_start (IMAP_DATA* idata, const char* cmd); +int imap_cmd_step (IMAP_DATA* idata); +void imap_cmd_finish (IMAP_DATA* idata); +int imap_code (const char* s); +int imap_exec (IMAP_DATA* idata, const char* cmd, int flags); + +/* message.c */ +void imap_add_keywords (char* s, HEADER* keywords, LIST* mailbox_flags, size_t slen); +void imap_free_header_data (void** data); +int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend); +char* imap_set_flags (IMAP_DATA* idata, HEADER* h, char* s); + +/* util.c */ +int imap_continue (const char* msg, const char* resp); +void imap_error (const char* where, const char* msg); +IMAP_DATA* imap_new_idata (void); +void imap_free_idata (IMAP_DATA** idata); +char* imap_fix_path (IMAP_DATA* idata, char* mailbox, char* path, + size_t plen); +int imap_get_literal_count (const char* buf, long* bytes); +char* imap_get_qualifier (char* buf); +char* imap_next_word (char* s); +time_t imap_parse_date (char* s); +void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path); +void imap_quote_string (char* dest, size_t slen, const char* src); +void imap_unquote_string (char* s); +void imap_munge_mbox_name (char *dest, size_t dlen, const char *src); +void imap_unmunge_mbox_name (char *s); +int imap_wordcasecmp(const char *a, const char *b); + +/* utf7.c */ +void imap_utf7_encode (char **s); +void imap_utf7_decode (char **s); + +#endif diff --git a/imap/message.c b/imap/message.c new file mode 100644 index 0000000..41d5950 --- /dev/null +++ b/imap/message.c @@ -0,0 +1,973 @@ +/* + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* message parsing/updating functions */ + +#include <stdlib.h> +#include <ctype.h> + +#include "mutt.h" +#include "mutt_curses.h" +#include "imap_private.h" +#include "message.h" +#include "mx.h" + +#ifdef HAVE_PGP +#include "pgp.h" +#endif + +static void flush_buffer(char* buf, size_t* len, CONNECTION* conn); +static int msg_fetch_header (CONTEXT* ctx, IMAP_HEADER* h, char* buf, + FILE* fp); +static int msg_has_flag (LIST* flag_list, const char* flag); +static int msg_parse_fetch (IMAP_HEADER* h, char* s); +static char* msg_parse_flags (IMAP_HEADER* h, char* s); + +/* imap_read_headers: + * Changed to read many headers instead of just one. It will return the + * msgno of the last message read. It will return a value other than + * msgend if mail comes in while downloading headers (in theory). + */ +int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend) +{ + CONTEXT* ctx; + char buf[LONG_STRING]; + char hdrreq[STRING]; + FILE *fp; + char tempfile[_POSIX_PATH_MAX]; + int msgno; + IMAP_HEADER h; + int rc, mfhrc, oldmsgcount; + int fetchlast = 0; + const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE IN-REPLY-TO REPLY-TO LINES X-LABEL"; + + ctx = idata->ctx; + + if (mutt_bit_isset (idata->capabilities,IMAP4REV1)) + { + snprintf (hdrreq, sizeof (hdrreq), "BODY.PEEK[HEADER.FIELDS (%s)]", + want_headers); + } + else if (mutt_bit_isset (idata->capabilities,IMAP4)) + { + snprintf (hdrreq, sizeof (hdrreq), "RFC822.HEADER.LINES (%s)", + want_headers); + } + else + { /* Unable to fetch headers for lower versions */ + mutt_error _("Unable to fetch headers from this IMAP server version."); + mutt_sleep (2); /* pause a moment to let the user see the error */ + return -1; + } + + /* instead of downloading all headers and then parsing them, we parse them + * as they come in. */ + mutt_mktemp (tempfile); + if (!(fp = safe_fopen (tempfile, "w+"))) + { + mutt_error (_("Could not create temporary file %s"), tempfile); + mutt_sleep (2); + return -1; + } + unlink (tempfile); + + /* make sure context has room to hold the mailbox */ + while ((msgend) >= idata->ctx->hdrmax) + mx_alloc_memory (idata->ctx); + + oldmsgcount = ctx->msgcount; + idata->reopen &= ~IMAP_NEWMAIL_PENDING; + idata->newMailCount = 0; + + for (msgno = msgbegin; msgno <= msgend ; msgno++) + { + if (ReadInc && (!msgno || ((msgno+1) % ReadInc == 0))) + mutt_message (_("Fetching message headers... [%d/%d]"), msgno + 1, + msgend + 1); + + if (msgno + 1 > fetchlast) + { + /* + * Make one request for everything. This makes fetching headers an + * order of magnitude faster if you have a large mailbox. + * + * If we get more messages while doing this, we make another + * request for all the new messages. + */ + snprintf (buf, sizeof (buf), + "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgno + 1, + msgend + 1, hdrreq); + + imap_cmd_start (idata, buf); + + fetchlast = msgend + 1; + } + + /* freshen fp, h */ + rewind (fp); + memset (&h, 0, sizeof (h)); + h.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA)); + + /* this DO loop does two things: + * 1. handles untagged messages, so we can try again on the same msg + * 2. fetches the tagged response at the end of the last message. + */ + do + { + mfhrc = 0; + + rc = imap_cmd_step (idata); + if (rc != IMAP_CMD_CONTINUE) + break; + + if ((mfhrc = msg_fetch_header (idata->ctx, &h, idata->cmd.buf, fp)) == -1) + continue; + else if (mfhrc < 0) + break; + + /* make sure we don't get remnants from older larger message headers */ + fputs ("\n\n", fp); + + /* update context with message header */ + ctx->hdrs[msgno] = mutt_new_header (); + + ctx->hdrs[msgno]->index = h.sid - 1; + if (h.sid != ctx->msgcount + 1) + dprint (1, (debugfile, "imap_read_headers: msgcount and sequence ID are inconsistent!")); + /* messages which have not been expunged are ACTIVE (borrowed from mh + * folders) */ + ctx->hdrs[msgno]->active = 1; + ctx->hdrs[msgno]->read = h.read; + ctx->hdrs[msgno]->old = h.old; + ctx->hdrs[msgno]->deleted = h.deleted; + ctx->hdrs[msgno]->flagged = h.flagged; + ctx->hdrs[msgno]->replied = h.replied; + ctx->hdrs[msgno]->changed = h.changed; + ctx->hdrs[msgno]->received = h.received; + ctx->hdrs[msgno]->data = (void *) (h.data); + + rewind (fp); + /* NOTE: if Date: header is missing, mutt_read_rfc822_header depends + * on h.received being set */ + ctx->hdrs[msgno]->env = mutt_read_rfc822_header (fp, ctx->hdrs[msgno], + 0, 0); + /* content built as a side-effect of mutt_read_rfc822_header */ + ctx->hdrs[msgno]->content->length = h.content_length; + + ctx->msgcount++; + } + while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) || + ((msgno + 1) >= fetchlast))); + + if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) + { + imap_free_header_data ((void**) &h.data); + fclose (fp); + + return -1; + } + + /* in case we get new mail while fetching the headers */ + if (idata->reopen & IMAP_NEWMAIL_PENDING) + { + msgend = idata->newMailCount - 1; + while ((msgend) >= ctx->hdrmax) + mx_alloc_memory (ctx); + idata->reopen &= ~IMAP_NEWMAIL_PENDING; + idata->newMailCount = 0; + } + } + + fclose(fp); + + if (ctx->msgcount > oldmsgcount) + mx_update_context (ctx, ctx->msgcount - oldmsgcount); + + return msgend; +} + +int imap_fetch_message (MESSAGE *msg, CONTEXT *ctx, int msgno) +{ + IMAP_DATA* idata; + HEADER* h; + char buf[LONG_STRING]; + char path[_POSIX_PATH_MAX]; + char *pc; + long bytes; + int uid; + int cacheno; + IMAP_CACHE *cache; + int read; + int rc; + /* Sam's weird courier server returns an OK response even when FETCH + * fails. Thanks Sam. */ + short fetched = 0; + + idata = (IMAP_DATA*) ctx->data; + h = ctx->hdrs[msgno]; + + /* see if we already have the message in our cache */ + cacheno = HEADER_DATA(h)->uid % IMAP_CACHE_LEN; + cache = &idata->cache[cacheno]; + + if (cache->path) + { + if (cache->uid == HEADER_DATA(h)->uid) + { + /* yes, so just return a pointer to the message */ + if (!(msg->fp = fopen (cache->path, "r"))) + { + mutt_perror (cache->path); + return (-1); + } + return 0; + } + else + { + /* clear the previous entry */ + unlink (cache->path); + FREE (&cache->path); + } + } + + if (!isendwin()) + mutt_message _("Fetching message..."); + + cache->uid = HEADER_DATA(h)->uid; + mutt_mktemp (path); + cache->path = safe_strdup (path); + if (!(msg->fp = safe_fopen (path, "w+"))) + { + FREE (&cache->path); + return -1; + } + + /* mark this header as currently inactive so the command handler won't + * also try to update it. HACK until all this code can be moved into the + * command handler */ + h->active = 0; + + snprintf (buf, sizeof (buf), "UID FETCH %d %s", HEADER_DATA(h)->uid, + (mutt_bit_isset (idata->capabilities, IMAP4REV1) ? + (option (OPTIMAPPEEK) ? "BODY.PEEK[]" : "BODY[]") : + "RFC822")); + + imap_cmd_start (idata, buf); + do + { + if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + break; + + pc = idata->cmd.buf; + pc = imap_next_word (pc); + pc = imap_next_word (pc); + + if (!ascii_strncasecmp ("FETCH", pc, 5)) + { + while (*pc) + { + pc = imap_next_word (pc); + if (pc[0] == '(') + pc++; + if (ascii_strncasecmp ("UID", pc, 3) == 0) + { + pc = imap_next_word (pc); + uid = atoi (pc); + if (uid != HEADER_DATA(h)->uid) + mutt_error (_("The message index is incorrect. Try reopening the mailbox.")); + } + else if ((ascii_strncasecmp ("RFC822", pc, 6) == 0) || + (ascii_strncasecmp ("BODY[]", pc, 6) == 0)) + { + pc = imap_next_word (pc); + if (imap_get_literal_count(pc, &bytes) < 0) + { + imap_error ("imap_fetch_message()", buf); + goto bail; + } + if (imap_read_literal (msg->fp, idata, bytes) < 0) + goto bail; + /* pick up trailing line */ + if ((rc = imap_cmd_step (idata)) != IMAP_CMD_CONTINUE) + goto bail; + pc = idata->cmd.buf; + + fetched = 1; + } + /* UW-IMAP will provide a FLAGS update here if the FETCH causes a + * change (eg from \Unseen to \Seen). + * Uncommitted changes in mutt take precedence. If we decide to + * incrementally update flags later, this won't stop us syncing */ + else if ((ascii_strncasecmp ("FLAGS", pc, 5) == 0) && !h->changed) + { + if ((pc = imap_set_flags (idata, h, pc)) == NULL) + goto bail; + } + } + } + } + while (rc == IMAP_CMD_CONTINUE); + + /* see comment before command start. */ + h->active = 1; + + if (rc != IMAP_CMD_OK) + goto bail; + + if (!fetched || !imap_code (idata->cmd.buf)) + goto bail; + + /* Update the header information. Previously, we only downloaded a + * portion of the headers, those required for the main display. + */ + rewind (msg->fp); + /* It may be that the Status header indicates a message is read, but the + * IMAP server doesn't know the message has been \Seen. So we capture + * the server's notion of 'read' and if it differs from the message info + * picked up in mutt_read_rfc822_header, we mark the message (and context + * changed). Another possiblity: ignore Status on IMAP?*/ + read = h->read; + /* I hate do this here, since it's so low-level, but I'm not sure where + * I can abstract it. Problem: the id and subj hashes lose their keys when + * mutt_free_envelope gets called, but keep their spots in the hash. This + * confuses threading. Alternatively we could try to merge the new + * envelope into the old one. Also messy and lowlevel. */ + if (ctx->id_hash && h->env->message_id) + hash_delete (ctx->id_hash, h->env->message_id, h, NULL); + if (ctx->subj_hash && h->env->real_subj) + hash_delete (ctx->subj_hash, h->env->real_subj, h, NULL); + mutt_free_envelope (&h->env); + h->env = mutt_read_rfc822_header (msg->fp, h, 0, 0); + if (ctx->id_hash && h->env->message_id) + hash_insert (ctx->id_hash, h->env->message_id, h, 0); + if (ctx->subj_hash && h->env->real_subj) + hash_insert (ctx->subj_hash, h->env->real_subj, h, 1); + + /* see above. We want the new status in h->read, so we unset it manually + * and let mutt_set_flag set it correctly, updating context. */ + if (read != h->read) + { + h->read = read; + mutt_set_flag (ctx, h, M_NEW, read); + } + + h->lines = 0; + fgets (buf, sizeof (buf), msg->fp); + while (!feof (msg->fp)) + { + h->lines++; + fgets (buf, sizeof (buf), msg->fp); + } + + h->content->length = ftell (msg->fp) - h->content->offset; + + /* This needs to be done in case this is a multipart message */ +#if defined(HAVE_PGP) || defined(HAVE_SMIME) + h->security = crypt_query (h->content); +#endif + + mutt_clear_error(); + rewind (msg->fp); + + return 0; + +bail: + safe_fclose (&msg->fp); + if (cache->path) + { + unlink (cache->path); + FREE (&cache->path); + } + + return -1; +} + +int imap_append_message (CONTEXT *ctx, MESSAGE *msg) +{ + IMAP_DATA* idata; + FILE *fp; + char buf[LONG_STRING]; + char mbox[LONG_STRING]; + char mailbox[LONG_STRING]; + size_t len; + int c, last; + IMAP_MBOX mx; + int rc; + + idata = (IMAP_DATA*) ctx->data; + + if (imap_parse_path (ctx->path, &mx)) + return -1; + + imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox)); + + if ((fp = fopen (msg->path, "r")) == NULL) + { + mutt_perror (msg->path); + goto fail; + } + + /* currently we set the \Seen flag on all messages, but probably we + * should scan the message Status header for flag info. Since we're + * already rereading the whole file for length it isn't any more + * expensive (it'd be nice if we had the file size passed in already + * by the code that writes the file, but that's a lot of changes. + * Ideally we'd have a HEADER structure with flag info here... */ + for (last = EOF, len = 0; (c = fgetc(fp)) != EOF; last = c) + { + if(c == '\n' && last != '\r') + len++; + + len++; + } + rewind (fp); + + imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); + snprintf (buf, sizeof (buf), "APPEND %s (\\Seen) {%d}", mbox, len); + + imap_cmd_start (idata, buf); + + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (rc != IMAP_CMD_RESPOND) + { + char *pc; + + dprint (1, (debugfile, "imap_append_message(): command failed: %s\n", + idata->cmd.buf)); + + pc = idata->cmd.buf + SEQLEN; + SKIPWS (pc); + pc = imap_next_word (pc); + mutt_error ("%s", pc); + mutt_sleep (1); + fclose (fp); + goto fail; + } + + mutt_message _("Uploading message ..."); + + for (last = EOF, len = 0; (c = fgetc(fp)) != EOF; last = c) + { + if (c == '\n' && last != '\r') + buf[len++] = '\r'; + + buf[len++] = c; + + if (len > sizeof(buf) - 3) + flush_buffer(buf, &len, idata->conn); + } + + if (len) + flush_buffer(buf, &len, idata->conn); + + mutt_socket_write (idata->conn, "\r\n"); + fclose (fp); + + do + rc = imap_cmd_step (idata); + while (rc == IMAP_CMD_CONTINUE); + + if (!imap_code (idata->cmd.buf)) + { + char *pc; + + dprint (1, (debugfile, "imap_append_message(): command failed: %s\n", + idata->cmd.buf)); + pc = idata->cmd.buf + SEQLEN; + SKIPWS (pc); + pc = imap_next_word (pc); + mutt_error ("%s", pc); + mutt_sleep (1); + goto fail; + } + + FREE (&mx.mbox); + return 0; + + fail: + FREE (&mx.mbox); + return -1; +} + +/* imap_copy_messages: use server COPY command to copy messages to another + * folder. + * Return codes: + * -1: error + * 0: success + * 1: non-fatal error - try fetch/append */ +int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete) +{ + IMAP_DATA* idata; + BUFFER cmd; + char uid[11]; + char mbox[LONG_STRING]; + char mmbox[LONG_STRING]; + int rc; + int n; + IMAP_MBOX mx; + + idata = (IMAP_DATA*) ctx->data; + + if (imap_parse_path (dest, &mx)) + { + dprint (1, (debugfile, "imap_copy_messages: bad destination %s\n", dest)); + return -1; + } + + /* check that the save-to folder is in the same account */ + if (!mutt_account_match (&(CTX_DATA->conn->account), &(mx.account))) + { + dprint (3, (debugfile, "imap_copy_messages: %s not same server as %s\n", + dest, ctx->path)); + return 1; + } + + if (h && h->attach_del) + { + dprint (3, (debugfile, "imap_copy_messages: Message contains attachments to be deleted\n")); + return 1; + } + + imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox)); + + memset (&cmd, 0, sizeof (cmd)); + mutt_buffer_addstr (&cmd, "UID COPY "); + + /* Null HEADER* means copy tagged messages */ + if (!h) + { + /* if any messages have attachments to delete, fall through to FETCH + * and APPEND. TODO: Copy what we can with COPY, fall through for the + * remainder. */ + for (n = 0; n < ctx->msgcount; n++) + { + if (ctx->hdrs[n]->tagged && ctx->hdrs[n]->attach_del) + { + dprint (3, (debugfile, "imap_copy_messages: Message contains attachments to be deleted\n")); + return 1; + } + } + + rc = imap_make_msg_set (idata, &cmd, M_TAG, 0); + if (!rc) + { + dprint (1, (debugfile, "imap_copy_messages: No messages tagged\n")); + goto fail; + } + mutt_message (_("Copying %d messages to %s..."), rc, mbox); + } + else + { + mutt_message (_("Copying message %d to %s..."), h->index+1, mbox); + snprintf (uid, sizeof (uid), "%u", HEADER_DATA (h)->uid); + mutt_buffer_addstr (&cmd, uid); + } + + /* let's get it on */ + mutt_buffer_addstr (&cmd, " "); + imap_munge_mbox_name (mmbox, sizeof (mmbox), mbox); + mutt_buffer_addstr (&cmd, mmbox); + + rc = imap_exec (idata, cmd.data, IMAP_CMD_FAIL_OK); + if (rc == -2) + { + /* bail out if command failed for reasons other than nonexistent target */ + if (ascii_strncasecmp (imap_get_qualifier (idata->cmd.buf), "[TRYCREATE]", 11)) + { + imap_error ("imap_copy_messages", idata->cmd.buf); + goto fail; + } + dprint (2, (debugfile, "imap_copy_messages: server suggests TRYCREATE\n")); + snprintf (mmbox, sizeof (mmbox), _("Create %s?"), mbox); + if (option (OPTCONFIRMCREATE) && mutt_yesorno (mmbox, 1) < 1) + { + mutt_clear_error (); + goto fail; + } + if (imap_create_mailbox (idata, mbox) < 0) + goto fail; + + /* try again */ + rc = imap_exec (idata, cmd.data, 0); + } + if (rc != 0) + { + imap_error ("imap_copy_messages", idata->cmd.buf); + goto fail; + } + + /* cleanup */ + if (delete) + { + if (!h) + for (n = 0; n < ctx->msgcount; n++) + { + if (ctx->hdrs[n]->tagged) + { + mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1); + mutt_set_flag (ctx, ctx->hdrs[n], M_APPENDED, 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0); + } + } + else + { + mutt_set_flag (ctx, h, M_DELETE, 1); + mutt_set_flag (ctx, h, M_APPENDED, 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (ctx, h, M_TAG, 0); + } + } + + if (cmd.data) + FREE (&cmd.data); + FREE (&mx.mbox); + return 0; + + fail: + if (cmd.data) + FREE (&cmd.data); + FREE (&mx.mbox); + return -1; +} + +/* imap_add_keywords: concatenate custom IMAP tags to list, if they + * appear in the folder flags list. Why wouldn't they? */ +void imap_add_keywords (char* s, HEADER* h, LIST* mailbox_flags, size_t slen) +{ + LIST *keywords; + + if (!mailbox_flags || !HEADER_DATA(h) || !HEADER_DATA(h)->keywords) + return; + + keywords = HEADER_DATA(h)->keywords->next; + + while (keywords) + { + if (msg_has_flag (mailbox_flags, keywords->data)) + { + strncat (s, keywords->data, slen); + strncat (s, " ", slen); + } + keywords = keywords->next; + } +} + +/* imap_free_header_data: free IMAP_HEADER structure */ +void imap_free_header_data (void** data) +{ + /* this should be safe even if the list wasn't used */ + mutt_free_list (&(((IMAP_HEADER_DATA*) *data)->keywords)); + + FREE (data); +} + +/* imap_set_flags: fill out the message header according to the flags from + * the server. Expects a flags line of the form "FLAGS (flag flag ...)" */ +char* imap_set_flags (IMAP_DATA* idata, HEADER* h, char* s) +{ + CONTEXT* ctx = idata->ctx; + IMAP_HEADER newh; + unsigned char readonly; + + memset (&newh, 0, sizeof (newh)); + newh.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA)); + + dprint (2, (debugfile, "imap_fetch_message: parsing FLAGS\n")); + if ((s = msg_parse_flags (&newh, s)) == NULL) + { + FREE (&newh.data); + return NULL; + } + + /* YAUH (yet another ugly hack): temporarily set context to + * read-write even if it's read-only, so *server* updates of + * flags can be processed by mutt_set_flag. ctx->changed must + * be restored afterwards */ + readonly = ctx->readonly; + ctx->readonly = 0; + + mutt_set_flag (ctx, h, M_NEW, !(newh.read || newh.old)); + mutt_set_flag (ctx, h, M_OLD, newh.old); + mutt_set_flag (ctx, h, M_READ, newh.read); + mutt_set_flag (ctx, h, M_DELETE, newh.deleted); + mutt_set_flag (ctx, h, M_FLAG, newh.flagged); + mutt_set_flag (ctx, h, M_REPLIED, newh.replied); + + /* this message is now definitively *not* changed (mutt_set_flag + * marks things changed as a side-effect) */ + h->changed = 0; + ctx->changed &= ~readonly; + ctx->readonly = readonly; + + mutt_free_list (&(HEADER_DATA(h)->keywords)); + HEADER_DATA(h)->keywords = newh.data->keywords; + FREE(&newh.data); + + return s; +} + +/* msg_fetch_header: import IMAP FETCH response into an IMAP_HEADER. + * Expects string beginning with * n FETCH. + * Returns: + * 0 on success + * -1 if the string is not a fetch response + * -2 if the string is a corrupt fetch response */ +static int msg_fetch_header (CONTEXT* ctx, IMAP_HEADER* h, char* buf, FILE* fp) +{ + IMAP_DATA* idata; + long bytes; + int rc = -1; /* default now is that string isn't FETCH response*/ + + idata = (IMAP_DATA*) ctx->data; + + if (buf[0] != '*') + return rc; + + /* skip to message number */ + buf = imap_next_word (buf); + h->sid = atoi (buf); + + /* find FETCH tag */ + buf = imap_next_word (buf); + if (ascii_strncasecmp ("FETCH", buf, 5)) + return rc; + + rc = -2; /* we've got a FETCH response, for better or worse */ + if (!(buf = strchr (buf, '('))) + return rc; + buf++; + + /* FIXME: current implementation - call msg_parse_fetch - if it returns -2, + * read header lines and call it again. Silly. */ + if (msg_parse_fetch (h, buf) != -2) + return rc; + + if (imap_get_literal_count (buf, &bytes) < 0) + return rc; + imap_read_literal (fp, idata, bytes); + + /* we may have other fields of the FETCH _after_ the literal + * (eg Domino puts FLAGS here). Nothing wrong with that, either. + * This all has to go - we should accept literals and nonliterals + * interchangeably at any time. */ + if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE) + return -2; + + if (msg_parse_fetch (h, idata->cmd.buf) == -1) + return rc; + + rc = 0; /* success */ + + /* subtract headers from message size - unfortunately only the subset of + * headers we've requested. */ + h->content_length -= bytes; + + return rc; +} + +/* msg_has_flag: do a caseless comparison of the flag against a flag list, + * return 1 if found or flag list has '\*', 0 otherwise */ +static int msg_has_flag (LIST* flag_list, const char* flag) +{ + if (!flag_list) + return 0; + + flag_list = flag_list->next; + while (flag_list) + { + if (!ascii_strncasecmp (flag_list->data, flag, strlen (flag_list->data))) + return 1; + + flag_list = flag_list->next; + } + + return 0; +} + +/* msg_parse_fetch: handle headers returned from header fetch */ +static int msg_parse_fetch (IMAP_HEADER *h, char *s) +{ + char tmp[SHORT_STRING]; + char *ptmp; + + if (!s) + return -1; + + while (*s) + { + SKIPWS (s); + + if (ascii_strncasecmp ("FLAGS", s, 5) == 0) + { + if ((s = msg_parse_flags (h, s)) == NULL) + return -1; + } + else if (ascii_strncasecmp ("UID", s, 3) == 0) + { + s += 3; + SKIPWS (s); + h->data->uid = (unsigned int) atoi (s); + + s = imap_next_word (s); + } + else if (ascii_strncasecmp ("INTERNALDATE", s, 12) == 0) + { + s += 12; + SKIPWS (s); + if (*s != '\"') + { + dprint (1, (debugfile, "msg_parse_fetch(): bogus INTERNALDATE entry: %s\n", s)); + return -1; + } + s++; + ptmp = tmp; + while (*s && *s != '\"') + *ptmp++ = *s++; + if (*s != '\"') + return -1; + s++; /* skip past the trailing " */ + *ptmp = 0; + h->received = imap_parse_date (tmp); + } + else if (ascii_strncasecmp ("RFC822.SIZE", s, 11) == 0) + { + s += 11; + SKIPWS (s); + ptmp = tmp; + while (isdigit ((unsigned char) *s)) + *ptmp++ = *s++; + *ptmp = 0; + h->content_length = atoi (tmp); + } + else if (!ascii_strncasecmp ("BODY", s, 4) || + !ascii_strncasecmp ("RFC822.HEADER", s, 13)) + { + /* handle above, in msg_fetch_header */ + return -2; + } + else if (*s == ')') + s++; /* end of request */ + else if (*s) + { + /* got something i don't understand */ + imap_error ("msg_parse_fetch", s); + return -1; + } + } + + return 0; +} + +/* msg_parse_flags: read a FLAGS token into an IMAP_HEADER */ +static char* msg_parse_flags (IMAP_HEADER* h, char* s) +{ + int recent = 0; + + /* sanity-check string */ + if (ascii_strncasecmp ("FLAGS", s, 5) != 0) + { + dprint (1, (debugfile, "msg_parse_flags: not a FLAGS response: %s\n", + s)); + return NULL; + } + s += 5; + SKIPWS(s); + if (*s != '(') + { + dprint (1, (debugfile, "msg_parse_flags: bogus FLAGS response: %s\n", + s)); + return NULL; + } + s++; + + /* start parsing */ + while (*s && *s != ')') + { + if (ascii_strncasecmp ("\\deleted", s, 8) == 0) + { + s += 8; + h->deleted = 1; + } + else if (ascii_strncasecmp ("\\flagged", s, 8) == 0) + { + s += 8; + h->flagged = 1; + } + else if (ascii_strncasecmp ("\\answered", s, 9) == 0) + { + s += 9; + h->replied = 1; + } + else if (ascii_strncasecmp ("\\seen", s, 5) == 0) + { + s += 5; + h->read = 1; + } + else if (ascii_strncasecmp ("\\recent", s, 5) == 0) + { + s += 7; + recent = 1; + } + else + { + /* store custom flags as well */ + char ctmp; + char* flag_word = s; + + if (!h->data->keywords) + h->data->keywords = mutt_new_list (); + + while (*s && !ISSPACE (*s) && *s != ')') + s++; + ctmp = *s; + *s = '\0'; + mutt_add_list (h->data->keywords, flag_word); + *s = ctmp; + } + SKIPWS(s); + } + + /* wrap up, or note bad flags response */ + if (*s == ')') + { + /* if a message is neither seen nor recent, it is OLD. */ + if (option (OPTMARKOLD) && !recent && !(h->read)) + h->old = 1; + s++; + } + else + { + dprint (1, (debugfile, + "msg_parse_flags: Unterminated FLAGS response: %s\n", s)); + return NULL; + } + + return s; +} + +static void flush_buffer(char *buf, size_t *len, CONNECTION *conn) +{ + buf[*len] = '\0'; + mutt_socket_write(conn, buf); + *len = 0; +} diff --git a/imap/message.h b/imap/message.h new file mode 100644 index 0000000..78c5dc3 --- /dev/null +++ b/imap/message.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* message.c data structures */ + +#ifndef MESSAGE_H +#define MESSAGE_H 1 + +/* -- data structures -- */ +/* IMAP-specific header data, stored as HEADER->data */ +typedef struct imap_header_data +{ + unsigned int uid; /* 32-bit Message UID */ + LIST *keywords; +} IMAP_HEADER_DATA; + +typedef struct +{ + unsigned int read : 1; + unsigned int old : 1; + unsigned int deleted : 1; + unsigned int flagged : 1; + unsigned int replied : 1; + unsigned int changed : 1; + + unsigned int sid; + + IMAP_HEADER_DATA* data; + + time_t received; + long content_length; +} IMAP_HEADER; + +/* -- macros -- */ +#define HEADER_DATA(ph) ((IMAP_HEADER_DATA*) ((ph)->data)) + +#endif /* MESSAGE_H */ diff --git a/imap/utf7.c b/imap/utf7.c new file mode 100644 index 0000000..b6781a8 --- /dev/null +++ b/imap/utf7.c @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "charset.h" + +static int Index_64[128] = { + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, + -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, 63,-1,-1,-1, + 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, + 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1, + -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, + 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1 +}; + +static char B64Chars[64] = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', '+', ',' +}; + +/* + * Convert the data (u7,u7len) from RFC 2060's UTF-7 to UTF-8. + * The result is null-terminated and returned, and also stored + * in (*u8,*u8len) if u8 or u8len is non-zero. + * If input data is invalid, return 0 and don't store anything. + * RFC 2060 obviously intends the encoding to be unique (see + * point 5 in section 5.1.3), so we reject any non-canonical + * form, such as &ACY- (instead of &-) or &AMA-&AMA- (instead + * of &AMAAwA-). + */ +static char *utf7_to_utf8 (const char *u7, size_t u7len, char **u8, + size_t *u8len) +{ + char *buf, *p; + int b, ch, k; + + p = buf = safe_malloc (u7len + u7len / 8 + 1); + + for (; u7len; u7++, u7len--) + { + if (*u7 == '&') + { + u7++, u7len--; + + if (u7len && *u7 == '-') + { + *p++ = '&'; + continue; + } + + ch = 0; + k = 10; + for (; u7len; u7++, u7len--) + { + if ((*u7 & 0x80) || (b = Index_64[(int)*u7]) == -1) + break; + if (k > 0) + { + ch |= b << k; + k -= 6; + } + else + { + ch |= b >> (-k); + if (ch < 0x80) + { + if (0x20 <= ch && ch < 0x7f) + /* Printable US-ASCII */ + goto bail; + *p++ = ch; + } + else if (ch < 0x800) + { + *p++ = 0xc0 | (ch >> 6); + *p++ = 0x80 | (ch & 0x3f); + } + else + { + *p++ = 0xe0 | (ch >> 12); + *p++ = 0x80 | ((ch >> 6) & 0x3f); + *p++ = 0x80 | (ch & 0x3f); + } + ch = (b << (16 + k)) & 0xffff; + k += 10; + } + } + if (ch || k < 6) + /* Non-zero or too many extra bits */ + goto bail; + if (!u7len || *u7 != '-') + /* BASE64 not properly terminated */ + goto bail; + if (u7len > 2 && u7[1] == '&' && u7[2] != '-') + /* Adjacent BASE64 sections */ + goto bail; + } + else if (*u7 < 0x20 || *u7 >= 0x7f) + /* Not printable US-ASCII */ + goto bail; + else + *p++ = *u7; + } + *p++ = '\0'; + if (u8len) + *u8len = p - buf; + + safe_realloc (&buf, p - buf); + if (u8) + *u8 = buf; + return buf; + + bail: + FREE (&buf); + return 0; +} + +/* + * Convert the data (u8,u8len) from UTF-8 to RFC 2060's UTF-7. + * The result is null-terminated and returned, and also stored + * in (*u7,*u7len) if u7 or u7len is non-zero. + * Unicode characters above U+FFFF are replaced by U+FFFE. + * If input data is invalid, return 0 and don't store anything. + */ +static char *utf8_to_utf7 (const char *u8, size_t u8len, char **u7, + size_t *u7len) +{ + char *buf, *p; + int ch; + int n, i, b = 0, k = 0; + int base64 = 0; + + /* + * In the worst case we convert 2 chars to 7 chars. For example: + * "\x10&\x10&..." -> "&ABA-&-&ABA-&-...". + */ + p = buf = safe_malloc ((u8len / 2) * 7 + 6); + + while (u8len) + { + unsigned char c = *u8; + + if (c < 0x80) + ch = c, n = 0; + else if (c < 0xc2) + goto bail; + else if (c < 0xe0) + ch = c & 0x1f, n = 1; + else if (c < 0xf0) + ch = c & 0x0f, n = 2; + else if (c < 0xf8) + ch = c & 0x07, n = 3; + else if (c < 0xfc) + ch = c & 0x03, n = 4; + else if (c < 0xfe) + ch = c & 0x01, n = 5; + else + goto bail; + + u8++, u8len--; + if (n > u8len) + goto bail; + for (i = 0; i < n; i++) + { + if ((u8[i] & 0xc0) != 0x80) + goto bail; + ch = (ch << 6) | (u8[i] & 0x3f); + } + if (n > 1 && !(ch >> (n * 5 + 1))) + goto bail; + u8 += n, u8len -= n; + + if (ch < 0x20 || ch >= 0x7f) + { + if (!base64) + { + *p++ = '&'; + base64 = 1; + b = 0; + k = 10; + } + if (ch & ~0xffff) + ch = 0xfffe; + *p++ = B64Chars[b | ch >> k]; + k -= 6; + for (; k >= 0; k -= 6) + *p++ = B64Chars[(ch >> k) & 0x3f]; + b = (ch << (-k)) & 0x3f; + k += 16; + } + else + { + if (base64) + { + if (k > 10) + *p++ = B64Chars[b]; + *p++ = '-'; + base64 = 0; + } + *p++ = ch; + if (ch == '&') + *p++ = '-'; + } + } + + if (u8len) + { + FREE (&buf); + return 0; + } + + if (base64) + { + if (k > 10) + *p++ = B64Chars[b]; + *p++ = '-'; + } + + *p++ = '\0'; + if (u7len) + *u7len = p - buf; + safe_realloc (&buf, p - buf); + if (u7) *u7 = buf; + return buf; + + bail: + FREE (&buf); + return 0; +} + +void imap_utf7_encode (char **s) +{ + if (Charset) + { + char *t = safe_strdup (*s); + if (!mutt_convert_string (&t, Charset, "UTF-8", 0)) + utf8_to_utf7 (t, strlen (t), s, 0); + FREE (&t); + } +} + +void imap_utf7_decode (char **s) +{ + if (Charset) + { + char *t = utf7_to_utf8 (*s, strlen (*s), 0, 0); + if (t && !mutt_convert_string (&t, "UTF-8", Charset, 0)) + { + FREE (s); + *s = t; + } + } +} diff --git a/imap/util.c b/imap/util.c new file mode 100644 index 0000000..18d055a --- /dev/null +++ b/imap/util.c @@ -0,0 +1,637 @@ +/* + * Copyright (C) 1996-8 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1996-9 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* general IMAP utility functions */ + +#include "mutt.h" +#include "mx.h" /* for M_IMAP */ +#include "url.h" +#include "imap_private.h" +#include "mutt_ssl.h" + +#include <stdlib.h> +#include <ctype.h> + +#include <sys/types.h> +#include <sys/wait.h> +#include <signal.h> +#include <netdb.h> +#include <netinet/in.h> + +#include <errno.h> + +/* -- public functions -- */ + +/* imap_expand_path: IMAP implementation of mutt_expand_path. Rewrite + * an IMAP path in canonical and absolute form. + * Inputs: a buffer containing an IMAP path, and the number of bytes in + * that buffer. + * Outputs: The buffer is rewritten in place with the canonical IMAP path. + * Returns 0 on success, or -1 if imap_parse_path chokes or url_ciss_tostring + * fails, which it might if there isn't enough room in the buffer. */ +int imap_expand_path (char* path, size_t len) +{ + IMAP_MBOX mx; + ciss_url_t url; + int rc; + + if (imap_parse_path (path, &mx) < 0) + return -1; + + mutt_account_tourl (&mx.account, &url); + url.path = mx.mbox; + + rc = url_ciss_tostring (&url, path, len, U_DECODE_PASSWD); + FREE (&mx.mbox); + + return rc; +} + +/* imap_parse_path: given an IMAP mailbox name, return host, port + * and a path IMAP servers will recognise. + * mx.mbox is malloc'd, caller must free it */ +int imap_parse_path (const char* path, IMAP_MBOX* mx) +{ + static unsigned short ImapPort = 0; + static unsigned short ImapsPort = 0; + struct servent* service; + char tmp[128]; + ciss_url_t url; + char *c; + int n; + + if (!ImapPort) + { + service = getservbyname ("imap", "tcp"); + if (service) + ImapPort = ntohs (service->s_port); + else + ImapPort = IMAP_PORT; + dprint (3, (debugfile, "Using default IMAP port %d\n", ImapPort)); + } + if (!ImapsPort) + { + service = getservbyname ("imaps", "tcp"); + if (service) + ImapsPort = ntohs (service->s_port); + else + ImapsPort = IMAP_SSL_PORT; + dprint (3, (debugfile, "Using default IMAPS port %d\n", ImapsPort)); + } + + /* Defaults */ + mx->account.flags = 0; + mx->account.port = ImapPort; + mx->account.type = M_ACCT_TYPE_IMAP; + + c = safe_strdup (path); + url_parse_ciss (&url, c); + if (url.scheme == U_IMAP || url.scheme == U_IMAPS) + { + if (mutt_account_fromurl (&mx->account, &url) < 0) + { + FREE (&c); + return -1; + } + + mx->mbox = safe_strdup (url.path); + + if (url.scheme == U_IMAPS) + mx->account.flags |= M_ACCT_SSL; + + FREE (&c); + } + /* old PINE-compatibility code */ + else + { + FREE (&c); + if (sscanf (path, "{%127[^}]}", tmp) != 1) + return -1; + + c = strchr (path, '}'); + if (!c) + return -1; + else + /* walk past closing '}' */ + mx->mbox = safe_strdup (c+1); + + if ((c = strrchr (tmp, '@'))) + { + *c = '\0'; + strfcpy (mx->account.user, tmp, sizeof (mx->account.user)); + strfcpy (tmp, c+1, sizeof (tmp)); + mx->account.flags |= M_ACCT_USER; + } + + if ((n = sscanf (tmp, "%127[^:/]%127s", mx->account.host, tmp)) < 1) + { + dprint (1, (debugfile, "imap_parse_path: NULL host in %s\n", path)); + FREE (&mx->mbox); + return -1; + } + + if (n > 1) { + if (sscanf (tmp, ":%hd%127s", &(mx->account.port), tmp) >= 1) + mx->account.flags |= M_ACCT_PORT; + if (sscanf (tmp, "/%s", tmp) == 1) + { + if (!ascii_strncmp (tmp, "ssl", 3)) + mx->account.flags |= M_ACCT_SSL; + else + { + dprint (1, (debugfile, "imap_parse_path: Unknown connection type in %s\n", path)); + FREE (&mx->mbox); + return -1; + } + } + } + } + +#ifdef USE_SSL + if (option (OPTIMAPFORCESSL)) + mx->account.flags |= M_ACCT_SSL; +#endif + + if ((mx->account.flags & M_ACCT_SSL) && !(mx->account.flags & M_ACCT_PORT)) + mx->account.port = ImapsPort; + + return 0; +} + +/* imap_pretty_mailbox: called by mutt_pretty_mailbox to make IMAP paths + * look nice. */ +void imap_pretty_mailbox (char* path) +{ + IMAP_MBOX home, target; + ciss_url_t url; + char* delim; + int tlen; + int hlen = 0; + char home_match = 0; + + if (imap_parse_path (path, &target) < 0) + return; + + tlen = mutt_strlen (target.mbox); + /* check whether we can do '=' substitution */ + if (mx_is_imap(Maildir) && !imap_parse_path (Maildir, &home)) + { + hlen = mutt_strlen (home.mbox); + if (tlen && mutt_account_match (&home.account, &target.account) && + !mutt_strncmp (home.mbox, target.mbox, hlen)) + { + if (! hlen) + home_match = 1; + else + for (delim = ImapDelimChars; *delim != '\0'; delim++) + if (target.mbox[hlen] == *delim) + home_match = 1; + } + FREE (&home.mbox); + } + + /* do the '=' substitution */ + if (home_match) { + *path++ = '='; + /* copy remaining path, skipping delimiter */ + if (! hlen) + hlen = -1; + memcpy (path, target.mbox + hlen + 1, tlen - hlen - 1); + path[tlen - hlen - 1] = '\0'; + } + else + { + mutt_account_tourl (&target.account, &url); + url.path = target.mbox; + /* FIXME: That hard-coded constant is bogus. But we need the actual + * size of the buffer from mutt_pretty_mailbox. And these pretty + * operations usually shrink the result. Still... */ + url_ciss_tostring (&url, path, 1024, 0); + } + + FREE (&target.mbox); +} + +/* -- library functions -- */ + +/* imap_continue: display a message and ask the user if she wants to + * go on. */ +int imap_continue (const char* msg, const char* resp) +{ + imap_error (msg, resp); + return mutt_yesorno (_("Continue?"), 0); +} + +/* imap_error: show an error and abort */ +void imap_error (const char *where, const char *msg) +{ + mutt_error ("%s [%s]\n", where, msg); + mutt_sleep (2); +} + +/* imap_new_idata: Allocate and initialise a new IMAP_DATA structure. + * Returns NULL on failure (no mem) */ +IMAP_DATA* imap_new_idata (void) { + return safe_calloc (1, sizeof (IMAP_DATA)); +} + +/* imap_free_idata: Release and clear storage in an IMAP_DATA structure. */ +void imap_free_idata (IMAP_DATA** idata) { + if (!idata) + return; + + FREE (&(*idata)->capstr); + mutt_free_list (&(*idata)->flags); + FREE (&((*idata)->cmd.buf)); + FREE (idata); +} + +/* + * Fix up the imap path. This is necessary because the rest of mutt + * assumes a hierarchy delimiter of '/', which is not necessarily true + * in IMAP. Additionally, the filesystem converts multiple hierarchy + * delimiters into a single one, ie "///" is equal to "/". IMAP servers + * are not required to do this. + */ +char *imap_fix_path (IMAP_DATA *idata, char *mailbox, char *path, + size_t plen) +{ + int x = 0; + + if (!mailbox || !*mailbox) + { + strfcpy (path, "INBOX", plen); + return path; + } + + while (mailbox && *mailbox && (x < (plen - 1))) + { + if ((*mailbox == '/') || (*mailbox == idata->delim)) + { + while ((*mailbox == '/') || (*mailbox == idata->delim)) mailbox++; + path[x] = idata->delim; + } + else + { + path[x] = *mailbox; + mailbox++; + } + x++; + } + path[x] = '\0'; + return path; +} + +/* imap_get_literal_count: write number of bytes in an IMAP literal into + * bytes, return 0 on success, -1 on failure. */ +int imap_get_literal_count(const char *buf, long *bytes) +{ + char *pc; + char *pn; + + if (!(pc = strchr (buf, '{'))) + return (-1); + pc++; + pn = pc; + while (isdigit ((unsigned char) *pc)) + pc++; + *pc = 0; + *bytes = atoi(pn); + return (0); +} + +/* imap_get_qualifier: in a tagged response, skip tag and status for + * the qualifier message. Used by imap_copy_message for TRYCREATE */ +char* imap_get_qualifier (char* buf) +{ + char *s = buf; + + /* skip tag */ + s = imap_next_word (s); + /* skip OK/NO/BAD response */ + s = imap_next_word (s); + + return s; +} + +/* imap_next_word: return index into string where next IMAP word begins */ +char *imap_next_word (char *s) +{ + int quoted = 0; + + while (*s) { + if (*s == '\\') { + s++; + if (*s) + s++; + continue; + } + if (*s == '\"') + quoted = quoted ? 0 : 1; + if (!quoted && ISSPACE (*s)) + break; + s++; + } + + SKIPWS (s); + return s; +} + +/* imap_parse_date: date is of the form: DD-MMM-YYYY HH:MM:SS +ZZzz */ +time_t imap_parse_date (char *s) +{ + struct tm t; + time_t tz; + + t.tm_mday = (s[0] == ' '? s[1] - '0' : (s[0] - '0') * 10 + (s[1] - '0')); + s += 2; + if (*s != '-') + return 0; + s++; + t.tm_mon = mutt_check_month (s); + s += 3; + if (*s != '-') + return 0; + s++; + t.tm_year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0') - 1900; + s += 4; + if (*s != ' ') + return 0; + s++; + + /* time */ + t.tm_hour = (s[0] - '0') * 10 + (s[1] - '0'); + s += 2; + if (*s != ':') + return 0; + s++; + t.tm_min = (s[0] - '0') * 10 + (s[1] - '0'); + s += 2; + if (*s != ':') + return 0; + s++; + t.tm_sec = (s[0] - '0') * 10 + (s[1] - '0'); + s += 2; + if (*s != ' ') + return 0; + s++; + + /* timezone */ + tz = ((s[1] - '0') * 10 + (s[2] - '0')) * 3600 + + ((s[3] - '0') * 10 + (s[4] - '0')) * 60; + if (s[0] == '+') + tz = -tz; + + return (mutt_mktime (&t, 0) + tz); +} + +/* imap_qualify_path: make an absolute IMAP folder target, given IMAP_MBOX + * and relative path. */ +void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path) +{ + ciss_url_t url; + + mutt_account_tourl (&mx->account, &url); + url.path = path; + + url_ciss_tostring (&url, dest, len, 0); +} + + +/* imap_quote_string: quote string according to IMAP rules: + * surround string with quotes, escape " and \ with \ */ +void imap_quote_string (char *dest, size_t dlen, const char *src) +{ + char quote[] = "\"\\", *pt; + const char *s; + + pt = dest; + s = src; + + *pt++ = '"'; + /* save room for trailing quote-char */ + dlen -= 2; + + for (; *s && dlen; s++) + { + if (strchr (quote, *s)) + { + dlen -= 2; + if (!dlen) + break; + *pt++ = '\\'; + *pt++ = *s; + } + else + { + *pt++ = *s; + dlen--; + } + } + *pt++ = '"'; + *pt = 0; +} + +/* imap_unquote_string: equally stupid unquoting routine */ +void imap_unquote_string (char *s) +{ + char *d = s; + + if (*s == '\"') + s++; + else + return; + + while (*s) + { + if (*s == '\"') + { + *d = '\0'; + return; + } + if (*s == '\\') + { + s++; + } + if (*s) + { + *d = *s; + d++; + s++; + } + } + *d = '\0'; +} + +/* + * Quoting and UTF-7 conversion + */ + +void imap_munge_mbox_name (char *dest, size_t dlen, const char *src) +{ + char *buf; + + buf = safe_strdup (src); + imap_utf7_encode (&buf); + + imap_quote_string (dest, dlen, buf); + + FREE (&buf); +} + +void imap_unmunge_mbox_name (char *s) +{ + char *buf; + + imap_unquote_string(s); + + buf = safe_strdup (s); + if (buf) + { + imap_utf7_decode (&buf); + strncpy (s, buf, strlen (s)); + } + + FREE (&buf); +} + +/* imap_wordcasecmp: find word a in word list b */ +int imap_wordcasecmp(const char *a, const char *b) +{ + char tmp[SHORT_STRING]; + char *s = (char *)b; + int i; + + tmp[SHORT_STRING-1] = 0; + for(i=0;i < SHORT_STRING-2;i++,s++) + { + if (!*s || ISSPACE(*s)) + { + tmp[i] = 0; + break; + } + tmp[i] = *s; + } + tmp[i+1] = 0; + + return ascii_strcasecmp(a, tmp); +} + +/* + * Imap keepalive: poll the current folder to keep the + * connection alive. + * + */ + +static RETSIGTYPE alrm_handler (int sig) +{ + /* empty */ +} + +void imap_keepalive (void) +{ + CONNECTION *conn; + CONTEXT *ctx = NULL; + IMAP_DATA *idata; + + conn = mutt_socket_head (); + while (conn) + { + if (conn->account.type == M_ACCT_TYPE_IMAP) + { + idata = (IMAP_DATA*) conn->data; + + if (idata->state >= IMAP_AUTHENTICATED + && time(NULL) >= idata->lastread + ImapKeepalive) + { + if (idata->ctx) + ctx = idata->ctx; + else + { + ctx = safe_calloc (1, sizeof (CONTEXT)); + ctx->data = idata; + } + imap_check_mailbox (ctx, NULL, 1); + if (!idata->ctx) + FREE (&ctx); + } + } + + conn = conn->next; + } +} + +int imap_wait_keepalive (pid_t pid) +{ + struct sigaction oldalrm; + struct sigaction act; + sigset_t oldmask; + int rc; + + short imap_passive = option (OPTIMAPPASSIVE); + + set_option (OPTIMAPPASSIVE); + set_option (OPTKEEPQUIET); + + sigprocmask (SIG_SETMASK, NULL, &oldmask); + + sigemptyset (&act.sa_mask); + act.sa_handler = alrm_handler; +#ifdef SA_INTERRUPT + act.sa_flags = SA_INTERRUPT; +#else + act.sa_flags = 0; +#endif + + sigaction (SIGALRM, &act, &oldalrm); + + alarm (ImapKeepalive); + while (waitpid (pid, &rc, 0) < 0 && errno == EINTR) + { + alarm (0); /* cancel a possibly pending alarm */ + imap_keepalive (); + alarm (ImapKeepalive); + } + + alarm (0); /* cancel a possibly pending alarm */ + + sigaction (SIGALRM, &oldalrm, NULL); + sigprocmask (SIG_SETMASK, &oldmask, NULL); + + unset_option (OPTKEEPQUIET); + if (!imap_passive) + unset_option (OPTIMAPPASSIVE); + + return rc; +} + +/* Allow/disallow re-opening a folder upon expunge. */ + +void imap_allow_reopen (CONTEXT *ctx) +{ + if (ctx && ctx->magic == M_IMAP && CTX_DATA->ctx == ctx) + CTX_DATA->reopen |= IMAP_REOPEN_ALLOW; +} + +void imap_disallow_reopen (CONTEXT *ctx) +{ + if (ctx && ctx->magic == M_IMAP && CTX_DATA->ctx == ctx) + CTX_DATA->reopen &= ~IMAP_REOPEN_ALLOW; +} diff --git a/init.c b/init.c new file mode 100644 index 0000000..dc28df0 --- /dev/null +++ b/init.c @@ -0,0 +1,2177 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mapping.h" +#include "mutt_curses.h" +#include "mutt_regex.h" +#include "history.h" +#include "keymap.h" +#include "mbyte.h" +#include "charset.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#if defined(USE_SSL) || defined(USE_NSS) +#include "mutt_ssl.h" +#endif + + + +#include "mx.h" +#include "init.h" +#include "mailbox.h" + +#include <ctype.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <sys/utsname.h> +#include <errno.h> +#include <sys/wait.h> + +void toggle_quadoption (int opt) +{ + int n = opt/4; + int b = (opt % 4) * 2; + + QuadOptions[n] ^= (1 << b); +} + +void set_quadoption (int opt, int flag) +{ + int n = opt/4; + int b = (opt % 4) * 2; + + QuadOptions[n] &= ~(0x3 << b); + QuadOptions[n] |= (flag & 0x3) << b; +} + +int quadoption (int opt) +{ + int n = opt/4; + int b = (opt % 4) * 2; + + return (QuadOptions[n] >> b) & 0x3; +} + +int query_quadoption (int opt, const char *prompt) +{ + int v = quadoption (opt); + + switch (v) + { + case M_YES: + case M_NO: + return (v); + + default: + v = mutt_yesorno (prompt, (v == M_ASKYES)); + CLEARLINE (LINES - 1); + return (v); + } + + /* not reached */ +} + +/* given the variable ``s'', return the index into the rc_vars array which + matches, or -1 if the variable is not found. */ +int mutt_option_index (char *s) +{ + int i; + + for (i = 0; MuttVars[i].option; i++) + if (mutt_strcmp (s, MuttVars[i].option) == 0) + return (MuttVars[i].type == DT_SYN ? mutt_option_index ((char *) MuttVars[i].data) : i); + return (-1); +} + +int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags) +{ + char ch; + char qc = 0; /* quote char */ + char *pc; + + /* reset the destination pointer to the beginning of the buffer */ + dest->dptr = dest->data; + + SKIPWS (tok->dptr); + while ((ch = *tok->dptr)) + { + if (!qc) + { + if ((ISSPACE (ch) && !(flags & M_TOKEN_SPACE)) || + (ch == '#' && !(flags & M_TOKEN_COMMENT)) || + (ch == '=' && (flags & M_TOKEN_EQUAL)) || + (ch == ';' && !(flags & M_TOKEN_SEMICOLON)) || + ((flags & M_TOKEN_PATTERN) && strchr ("~!|", ch))) + break; + } + + tok->dptr++; + + if (ch == qc) + qc = 0; /* end of quote */ + else if (!qc && (ch == '\'' || ch == '"') && !(flags & M_TOKEN_QUOTE)) + qc = ch; + else if (ch == '\\' && qc != '\'') + { + if (!*tok->dptr) + return -1; /* premature end of token */ + switch (ch = *tok->dptr++) + { + case 'c': + case 'C': + if (!*tok->dptr) + return -1; /* premature end of token */ + mutt_buffer_addch (dest, (toupper ((unsigned char) *tok->dptr) + - '@') & 0x7f); + tok->dptr++; + break; + case 'r': + mutt_buffer_addch (dest, '\r'); + break; + case 'n': + mutt_buffer_addch (dest, '\n'); + break; + case 't': + mutt_buffer_addch (dest, '\t'); + break; + case 'f': + mutt_buffer_addch (dest, '\f'); + break; + case 'e': + mutt_buffer_addch (dest, '\033'); + break; + default: + if (isdigit ((unsigned char) ch) && + isdigit ((unsigned char) *tok->dptr) && + isdigit ((unsigned char) *(tok->dptr + 1))) + { + + mutt_buffer_addch (dest, (ch << 6) + (*tok->dptr << 3) + *(tok->dptr + 1) - 3504); + tok->dptr += 2; + } + else + mutt_buffer_addch (dest, ch); + } + } + else if (ch == '^' && (flags & M_TOKEN_CONDENSE)) + { + if (!*tok->dptr) + return -1; /* premature end of token */ + ch = *tok->dptr++; + if (ch == '^') + mutt_buffer_addch (dest, ch); + else if (ch == '[') + mutt_buffer_addch (dest, '\033'); + else if (isalpha ((unsigned char) ch)) + mutt_buffer_addch (dest, toupper ((unsigned char) ch) - '@'); + else + { + mutt_buffer_addch (dest, '^'); + mutt_buffer_addch (dest, ch); + } + } + else if (ch == '`' && (!qc || qc == '"')) + { + FILE *fp; + pid_t pid; + char *cmd, *ptr; + size_t expnlen; + BUFFER expn; + int line = 0; + + pc = tok->dptr; + do { + if ((pc = strpbrk (pc, "\\`"))) + { + /* skip any quoted chars */ + if (*pc == '\\') + pc += 2; + } + } while (pc && *pc != '`'); + if (!pc) + { + dprint (1, (debugfile, "mutt_get_token: mismatched backtics\n")); + return (-1); + } + cmd = mutt_substrdup (tok->dptr, pc); + if ((pid = mutt_create_filter (cmd, NULL, &fp, NULL)) < 0) + { + dprint (1, (debugfile, "mutt_get_token: unable to fork command: %s", cmd)); + FREE (&cmd); + return (-1); + } + FREE (&cmd); + + tok->dptr = pc + 1; + + /* read line */ + memset (&expn, 0, sizeof (expn)); + expn.data = mutt_read_line (NULL, &expn.dsize, fp, &line); + fclose (fp); + mutt_wait_filter (pid); + + /* if we got output, make a new string consiting of the shell ouptput + plus whatever else was left on the original line */ + /* BUT: If this is inside a quoted string, directly add output to + * the token */ + if (expn.data && qc) + { + mutt_buffer_addstr (dest, expn.data); + FREE (&expn.data); + } + else if (expn.data) + { + expnlen = mutt_strlen (expn.data); + tok->dsize = expnlen + mutt_strlen (tok->dptr) + 1; + ptr = safe_malloc (tok->dsize); + memcpy (ptr, expn.data, expnlen); + strcpy (ptr + expnlen, tok->dptr); /* __STRCPY_CHECKED__ */ + if (tok->destroy) + FREE (&tok->data); + tok->data = ptr; + tok->dptr = ptr; + tok->destroy = 1; /* mark that the caller should destroy this data */ + ptr = NULL; + FREE (&expn.data); + } + } + else if (ch == '$' && (!qc || qc == '"') && (*tok->dptr == '{' || isalpha ((unsigned char) *tok->dptr))) + { + char *env = NULL, *var = NULL; + + if (*tok->dptr == '{') + { + tok->dptr++; + if ((pc = strchr (tok->dptr, '}'))) + { + var = mutt_substrdup (tok->dptr, pc); + tok->dptr = pc + 1; + } + } + else + { + for (pc = tok->dptr; isalpha ((unsigned char) *pc) || *pc == '_'; pc++) + ; + var = mutt_substrdup (tok->dptr, pc); + tok->dptr = pc; + } + if (var && (env = getenv (var))) + mutt_buffer_addstr (dest, env); + FREE (&var); + } + else + mutt_buffer_addch (dest, ch); + } + mutt_buffer_addch (dest, 0); /* terminate the string */ + SKIPWS (tok->dptr); + return 0; +} + +static void add_to_list (LIST **list, const char *str) +{ + LIST *t, *last = NULL; + + /* don't add a NULL or empty string to the list */ + if (!str || *str == '\0') + return; + + /* check to make sure the item is not already on this list */ + for (last = *list; last; last = last->next) + { + if (ascii_strcasecmp (str, last->data) == 0) + { + /* already on the list, so just ignore it */ + last = NULL; + break; + } + if (!last->next) + break; + } + + if (!*list || last) + { + t = (LIST *) safe_calloc (1, sizeof (LIST)); + t->data = safe_strdup (str); + if (last) + { + last->next = t; + last = last->next; + } + else + *list = last = t; + } +} + +static int add_to_rx_list (RX_LIST **list, const char *s, int flags, BUFFER *err) +{ + RX_LIST *t, *last = NULL; + REGEXP *rx; + + if (!s || !*s) + return 0; + + if (!(rx = mutt_compile_regexp (s, flags))) + { + snprintf (err->data, err->dsize, "Bad regexp: %s\n", s); + return -1; + } + + /* check to make sure the item is not already on this list */ + for (last = *list; last; last = last->next) + { + if (ascii_strcasecmp (rx->pattern, last->rx->pattern) == 0) + { + /* already on the list, so just ignore it */ + last = NULL; + break; + } + if (!last->next) + break; + } + + if (!*list || last) + { + t = mutt_new_rx_list(); + t->rx = rx; + if (last) + { + last->next = t; + last = last->next; + } + else + *list = last = t; + } + else /* duplicate */ + mutt_free_regexp (&rx); + + return 0; +} + + +static void remove_from_list (LIST **l, const char *str) +{ + LIST *p, *last = NULL; + + if (mutt_strcmp ("*", str) == 0) + mutt_free_list (l); /* ``unCMD *'' means delete all current entries */ + else + { + p = *l; + last = NULL; + while (p) + { + if (ascii_strcasecmp (str, p->data) == 0) + { + FREE (&p->data); + if (last) + last->next = p->next; + else + (*l) = p->next; + FREE (&p); + } + else + { + last = p; + p = p->next; + } + } + } +} + +static void remove_from_rx_list (RX_LIST **l, const char *str) +{ + RX_LIST *p, *last = NULL; + + if (mutt_strcmp ("*", str) == 0) + mutt_free_rx_list (l); /* ``unCMD *'' means delete all current entries */ + else + { + p = *l; + last = NULL; + while (p) + { + if (ascii_strcasecmp (str, p->rx->pattern) == 0) + { + mutt_free_regexp (&p->rx); + if (last) + last->next = p->next; + else + (*l) = p->next; + FREE (&p); + } + else + { + last = p; + p = p->next; + } + } + } +} + +static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + + /* don't add "*" to the unignore list */ + if (strcmp (buf->data, "*")) + add_to_list (&UnIgnore, buf->data); + + remove_from_list (&Ignore, buf->data); + } + while (MoreArgs (s)); + + return 0; +} + +static int parse_ignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + remove_from_list (&UnIgnore, buf->data); + add_to_list (&Ignore, buf->data); + } + while (MoreArgs (s)); + + return 0; +} + +static int parse_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + add_to_list ((LIST **) data, buf->data); + } + while (MoreArgs (s)); + + return 0; +} + +static int _parse_rx_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, int flags) +{ + do + { + mutt_extract_token (buf, s, 0); + if (add_to_rx_list ((RX_LIST **) data, buf->data, flags, err) != 0) + return -1; + + } + while (MoreArgs (s)); + + return 0; +} + +static int parse_rx_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + return _parse_rx_list (buf, s, data, err, REG_ICASE); +} + +static int parse_rx_unlist (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + if (mutt_strcmp (buf->data, "*") == 0) + { + mutt_free_rx_list ((RX_LIST **) data); + break; + } + remove_from_rx_list ((RX_LIST **) data, buf->data); + } + while (MoreArgs (s)); + + return 0; +} + +static int parse_unlist (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + /* + * Check for deletion of entire list + */ + if (mutt_strcmp (buf->data, "*") == 0) + { + mutt_free_list ((LIST **) data); + break; + } + remove_from_list ((LIST **) data, buf->data); + } + while (MoreArgs (s)); + + return 0; +} + + +static int parse_unlists (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + remove_from_rx_list (&MailLists, buf->data); + remove_from_rx_list (&SubscribedLists, buf->data); + } + while (MoreArgs (s)); + + return 0; +} + +static int parse_subscribe (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + do + { + mutt_extract_token (buf, s, 0); + if (add_to_rx_list (&MailLists, buf->data, REG_ICASE, err) != 0) + return -1; + if (add_to_rx_list (&SubscribedLists, buf->data, REG_ICASE, err) != 0) + return -1; + } + while (MoreArgs (s)); + + return 0; +} + +static int parse_unalias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + ALIAS *tmp, *last = NULL; + + do + { + mutt_extract_token (buf, s, 0); + + if (mutt_strcmp ("*", buf->data) == 0) + { + if (CurrentMenu == MENU_ALIAS) + { + for (tmp = Aliases; tmp ; tmp = tmp->next) + tmp->del = 1; + set_option (OPTFORCEREDRAWINDEX); + } + else + mutt_free_alias (&Aliases); + break; + } + else + for (tmp = Aliases; tmp; tmp = tmp->next) + { + if (mutt_strcasecmp (buf->data, tmp->name) == 0) + { + if (CurrentMenu == MENU_ALIAS) + { + tmp->del = 1; + set_option (OPTFORCEREDRAWINDEX); + break; + } + + if (last) + last->next = tmp->next; + else + Aliases = tmp->next; + tmp->next = NULL; + mutt_free_alias (&tmp); + break; + } + last = tmp; + } + } + while (MoreArgs (s)); + return 0; +} + +static int parse_alias (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + ALIAS *tmp = Aliases; + ALIAS *last = NULL; + char *estr = NULL; + + if (!MoreArgs (s)) + { + strfcpy (err->data, _("alias: no address"), err->dsize); + return (-1); + } + + mutt_extract_token (buf, s, 0); + + /* check to see if an alias with this name already exists */ + for (; tmp; tmp = tmp->next) + { + if (!mutt_strcasecmp (tmp->name, buf->data)) + break; + last = tmp; + } + + if (!tmp) + { + /* create a new alias */ + tmp = (ALIAS *) safe_calloc (1, sizeof (ALIAS)); + tmp->self = tmp; + tmp->name = safe_strdup (buf->data); + /* give the main addressbook code a chance */ + if (CurrentMenu == MENU_ALIAS) + set_option (OPTMENUCALLER); + } + else + { + /* override the previous value */ + rfc822_free_address (&tmp->addr); + if (CurrentMenu == MENU_ALIAS) + set_option (OPTFORCEREDRAWINDEX); + } + + mutt_extract_token (buf, s, M_TOKEN_QUOTE | M_TOKEN_SPACE | M_TOKEN_SEMICOLON); + tmp->addr = mutt_parse_adrlist (tmp->addr, buf->data); + if (last) + last->next = tmp; + else + Aliases = tmp; + if (mutt_addrlist_to_idna (tmp->addr, &estr)) + { + snprintf (err->data, err->dsize, _("Warning: Bad IDN '%s' in alias '%s'.\n"), + estr, tmp->name); + return -1; + } + return 0; +} + +static int +parse_unmy_hdr (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + LIST *last = NULL; + LIST *tmp = UserHeader; + LIST *ptr; + size_t l; + + do + { + mutt_extract_token (buf, s, 0); + if (mutt_strcmp ("*", buf->data) == 0) + mutt_free_list (&UserHeader); + else + { + tmp = UserHeader; + last = NULL; + + l = mutt_strlen (buf->data); + if (buf->data[l - 1] == ':') + l--; + + while (tmp) + { + if (ascii_strncasecmp (buf->data, tmp->data, l) == 0 && tmp->data[l] == ':') + { + ptr = tmp; + if (last) + last->next = tmp->next; + else + UserHeader = tmp->next; + tmp = tmp->next; + ptr->next = NULL; + mutt_free_list (&ptr); + } + else + { + last = tmp; + tmp = tmp->next; + } + } + } + } + while (MoreArgs (s)); + return 0; +} + +static int parse_my_hdr (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + LIST *tmp; + size_t keylen; + char *p; + + mutt_extract_token (buf, s, M_TOKEN_SPACE | M_TOKEN_QUOTE); + if ((p = strpbrk (buf->data, ": \t")) == NULL || *p != ':') + { + strfcpy (err->data, _("invalid header field"), err->dsize); + return (-1); + } + keylen = p - buf->data + 1; + + if (UserHeader) + { + for (tmp = UserHeader; ; tmp = tmp->next) + { + /* see if there is already a field by this name */ + if (ascii_strncasecmp (buf->data, tmp->data, keylen) == 0) + { + /* replace the old value */ + FREE (&tmp->data); + tmp->data = buf->data; + memset (buf, 0, sizeof (BUFFER)); + return 0; + } + if (!tmp->next) + break; + } + tmp->next = mutt_new_list (); + tmp = tmp->next; + } + else + { + tmp = mutt_new_list (); + UserHeader = tmp; + } + tmp->data = buf->data; + memset (buf, 0, sizeof (BUFFER)); + return 0; +} + +static int +parse_sort (short *val, const char *s, const struct mapping_t *map, BUFFER *err) +{ + int i, flags = 0; + + if (mutt_strncmp ("reverse-", s, 8) == 0) + { + s += 8; + flags = SORT_REVERSE; + } + + if (mutt_strncmp ("last-", s, 5) == 0) + { + s += 5; + flags |= SORT_LAST; + } + + if ((i = mutt_getvaluebyname (s, map)) == -1) + { + snprintf (err->data, err->dsize, _("%s: unknown sorting method"), s); + return (-1); + } + + *val = i | flags; + + return 0; +} + +static void mutt_set_default (struct option_t *p) +{ + switch (p->type & DT_MASK) + { + case DT_STR: + if (!p->init && *((char **) p->data)) + p->init = (unsigned long) safe_strdup (* ((char **) p->data)); + break; + case DT_PATH: + if (!p->init && *((char **) p->data)) + { + char *cp = safe_strdup (*((char **) p->data)); + /* mutt_pretty_mailbox (cp); */ + p->init = (unsigned long) cp; + } + break; + case DT_ADDR: + if (!p->init && *((ADDRESS **) p->data)) + { + char tmp[HUGE_STRING]; + *tmp = '\0'; + rfc822_write_address (tmp, sizeof (tmp), *((ADDRESS **) p->data), 0); + p->init = (unsigned long) safe_strdup (tmp); + } + break; + case DT_RX: + { + REGEXP *pp = (REGEXP *) p->data; + if (!p->init && pp->pattern) + p->init = (unsigned long) safe_strdup (pp->pattern); + break; + } + } +} + +static void mutt_restore_default (struct option_t *p) +{ + switch (p->type & DT_MASK) + { + case DT_STR: + if (p->init) + mutt_str_replace ((char **) p->data, (char *) p->init); + break; + case DT_PATH: + if (p->init) + { + char path[_POSIX_PATH_MAX]; + + strfcpy (path, (char *) p->init, sizeof (path)); + mutt_expand_path (path, sizeof (path)); + mutt_str_replace ((char **) p->data, path); + } + break; + case DT_ADDR: + if (p->init) + { + rfc822_free_address ((ADDRESS **) p->data); + *((ADDRESS **) p->data) = rfc822_parse_adrlist (NULL, (char *) p->init); + } + break; + case DT_BOOL: + if (p->init) + set_option (p->data); + else + unset_option (p->data); + break; + case DT_QUAD: + set_quadoption (p->data, p->init); + break; + case DT_NUM: + case DT_SORT: + case DT_MAGIC: + *((short *) p->data) = p->init; + break; + case DT_RX: + { + REGEXP *pp = (REGEXP *) p->data; + int flags = 0; + + FREE (&pp->pattern); + if (pp->rx) + { + regfree (pp->rx); + FREE (&pp->rx); + } + + if (p->init) + { + char *s = (char *) p->init; + + pp->rx = safe_calloc (1, sizeof (regex_t)); + pp->pattern = safe_strdup ((char *) p->init); + if (mutt_strcmp (p->option, "alternates") == 0) + flags |= REG_ICASE; + else if (mutt_strcmp (p->option, "mask") != 0) + flags |= mutt_which_case ((const char *) p->init); + if (mutt_strcmp (p->option, "mask") == 0 && *s == '!') + { + s++; + pp->not = 1; + } + if (REGCOMP (pp->rx, s, flags) != 0) + { + fprintf (stderr, _("mutt_restore_default(%s): error in regexp: %s\n"), + p->option, pp->pattern); + FREE (&pp->pattern); + regfree (pp->rx); + FREE (&pp->rx); + } + } + } + break; + } + + if (p->flags & R_INDEX) + set_option (OPTFORCEREDRAWINDEX); + if (p->flags & R_PAGER) + set_option (OPTFORCEREDRAWPAGER); + if (p->flags & R_RESORT_SUB) + set_option (OPTSORTSUBTHREADS); + if (p->flags & R_RESORT) + set_option (OPTNEEDRESORT); + if (p->flags & R_RESORT_INIT) + set_option (OPTRESORTINIT); + if (p->flags & R_TREE) + set_option (OPTREDRAWTREE); +} + +static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) +{ + int idx, query, unset, inv, reset, r = 0; + char *p, scratch[_POSIX_PATH_MAX]; + + while (MoreArgs (s)) + { + /* reset state variables */ + query = 0; + unset = data & M_SET_UNSET; + inv = data & M_SET_INV; + reset = data & M_SET_RESET; + + if (*s->dptr == '?') + { + query = 1; + s->dptr++; + } + else if (mutt_strncmp ("no", s->dptr, 2) == 0) + { + s->dptr += 2; + unset = !unset; + } + else if (mutt_strncmp ("inv", s->dptr, 3) == 0) + { + s->dptr += 3; + inv = !inv; + } + else if (*s->dptr == '&') + { + reset = 1; + s->dptr++; + } + + /* get the variable name */ + mutt_extract_token (tmp, s, M_TOKEN_EQUAL); + + if ((idx = mutt_option_index (tmp->data)) == -1 && + !(reset && !mutt_strcmp ("all", tmp->data))) + { + snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data); + return (-1); + } + SKIPWS (s->dptr); + + if (reset) + { + if (query || unset || inv) + { + snprintf (err->data, err->dsize, _("prefix is illegal with reset")); + return (-1); + } + + if (s && *s->dptr == '=') + { + snprintf (err->data, err->dsize, _("value is illegal with reset")); + return (-1); + } + + if (!mutt_strcmp ("all", tmp->data)) + { + for (idx = 0; MuttVars[idx].option; idx++) + mutt_restore_default (&MuttVars[idx]); + return 0; + } + else + mutt_restore_default (&MuttVars[idx]); + } + else if (DTYPE (MuttVars[idx].type) == DT_BOOL) + { + if (s && *s->dptr == '=') + { + if (unset || inv || query) + { + snprintf (err->data, err->dsize, "Usage: set variable=yes|no"); + return (-1); + } + + s->dptr++; + mutt_extract_token (tmp, s, 0); + if (ascii_strcasecmp ("yes", tmp->data) == 0) + unset = inv = 0; + else if (ascii_strcasecmp ("no", tmp->data) == 0) + unset = 1; + else + { + snprintf (err->data, err->dsize, "Usage: set variable=yes|no"); + return (-1); + } + } + + if (query) + { + snprintf (err->data, err->dsize, option (MuttVars[idx].data) + ? _("%s is set") : _("%s is unset"), tmp->data); + return 0; + } + + if (unset) + unset_option (MuttVars[idx].data); + else if (inv) + toggle_option (MuttVars[idx].data); + else + set_option (MuttVars[idx].data); + } + else if (DTYPE (MuttVars[idx].type) == DT_STR || + DTYPE (MuttVars[idx].type) == DT_PATH || + DTYPE (MuttVars[idx].type) == DT_ADDR) + { + if (unset) + { + if (DTYPE (MuttVars[idx].type) == DT_ADDR) + rfc822_free_address ((ADDRESS **) MuttVars[idx].data); + else + FREE (MuttVars[idx].data); + } + else if (query || *s->dptr != '=') + { + char _tmp[STRING]; + char *val = NULL; + + if (DTYPE (MuttVars[idx].type) == DT_ADDR) + { + _tmp[0] = '\0'; + rfc822_write_address (_tmp, sizeof (_tmp), *((ADDRESS **) MuttVars[idx].data), 0); + val = _tmp; + } + else + val = *((char **) MuttVars[idx].data); + + /* user requested the value of this variable */ + snprintf (err->data, err->dsize, "%s=\"%s\"", MuttVars[idx].option, + NONULL (val)); + break; + } + else + { + s->dptr++; + + /* copy the value of the string */ + if (DTYPE (MuttVars[idx].type) == DT_ADDR) + rfc822_free_address ((ADDRESS **) MuttVars[idx].data); + else + FREE (MuttVars[idx].data); + + mutt_extract_token (tmp, s, 0); + if (DTYPE (MuttVars[idx].type) == DT_PATH) + { + strfcpy (scratch, tmp->data, sizeof (scratch)); + mutt_expand_path (scratch, sizeof (scratch)); + *((char **) MuttVars[idx].data) = safe_strdup (scratch); + } + else if (DTYPE (MuttVars[idx].type) == DT_STR) + { + *((char **) MuttVars[idx].data) = safe_strdup (tmp->data); + if (mutt_strcmp (MuttVars[idx].option, "charset") == 0) + mutt_set_charset (Charset); + } + else + { + *((ADDRESS **) MuttVars[idx].data) = rfc822_parse_adrlist (NULL, tmp->data); + } + } + } + else if (DTYPE(MuttVars[idx].type) == DT_RX) + { + REGEXP *ptr = (REGEXP *) MuttVars[idx].data; + regex_t *rx; + int e, flags = 0; + + if (query || *s->dptr != '=') + { + /* user requested the value of this variable */ + snprintf (err->data, err->dsize, "%s=\"%s\"", MuttVars[idx].option, + NONULL (ptr->pattern)); + break; + } + + if (option(OPTATTACHMSG) && (!mutt_strcmp(MuttVars[idx].option, "alternates") + || !mutt_strcmp(MuttVars[idx].option, "reply_regexp"))) + { + snprintf (err->data, err->dsize, "Operation not permitted when in attach-message mode."); + r = -1; + break; + } + + s->dptr++; + + /* copy the value of the string */ + mutt_extract_token (tmp, s, 0); + + if (!ptr->pattern || mutt_strcmp (ptr->pattern, tmp->data) != 0) + { + int not = 0; + + /* $alternates is case-insensitive, + $mask is case-sensitive */ + if (mutt_strcmp (MuttVars[idx].option, "alternates") == 0) + flags |= REG_ICASE; + else if (mutt_strcmp (MuttVars[idx].option, "mask") != 0) + flags |= mutt_which_case (tmp->data); + + p = tmp->data; + if (mutt_strcmp (MuttVars[idx].option, "mask") == 0) + { + if (*p == '!') + { + not = 1; + p++; + } + } + + rx = (regex_t *) safe_malloc (sizeof (regex_t)); + if ((e = REGCOMP (rx, p, flags)) != 0) + { + regerror (e, rx, err->data, err->dsize); + regfree (rx); + FREE (&rx); + break; + } + + /* get here only if everything went smootly */ + if (ptr->pattern) + { + FREE (&ptr->pattern); + regfree ((regex_t *) ptr->rx); + FREE (&ptr->rx); + } + + ptr->pattern = safe_strdup (tmp->data); + ptr->rx = rx; + ptr->not = not; + + /* $reply_regexp and $alterantes require special treatment */ + + if (Context && Context->msgcount && + mutt_strcmp (MuttVars[idx].option, "reply_regexp") == 0) + { + regmatch_t pmatch[1]; + int i; + +#define CUR_ENV Context->hdrs[i]->env + for (i = 0; i < Context->msgcount; i++) + { + if (CUR_ENV && CUR_ENV->subject) + { + CUR_ENV->real_subj = (regexec (ReplyRegexp.rx, + CUR_ENV->subject, 1, pmatch, 0)) ? + CUR_ENV->subject : + CUR_ENV->subject + pmatch[0].rm_eo; + } + } +#undef CUR_ENV + } + + if(Context && Context->msgcount && + mutt_strcmp(MuttVars[idx].option, "alternates") == 0) + { + int i; + + for(i = 0; i < Context->msgcount; i++) + Context->hdrs[i]->recip_valid = 0; + } + } + } + else if (DTYPE(MuttVars[idx].type) == DT_MAGIC) + { + if (query || *s->dptr != '=') + { + switch (DefaultMagic) + { + case M_MBOX: + p = "mbox"; + break; + case M_MMDF: + p = "MMDF"; + break; + case M_MH: + p = "MH"; + break; + case M_MAILDIR: + p = "Maildir"; + break; + default: + p = "unknown"; + break; + } + snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option, p); + break; + } + + s->dptr++; + + /* copy the value of the string */ + mutt_extract_token (tmp, s, 0); + if (mx_set_magic (tmp->data)) + { + snprintf (err->data, err->dsize, _("%s: invalid mailbox type"), tmp->data); + r = -1; + break; + } + } + else if (DTYPE(MuttVars[idx].type) == DT_NUM) + { + short *ptr = (short *) MuttVars[idx].data; + int val; + char *t; + + if (query || *s->dptr != '=') + { + /* user requested the value of this variable */ + snprintf (err->data, err->dsize, "%s=%d", MuttVars[idx].option, *ptr); + break; + } + + s->dptr++; + + mutt_extract_token (tmp, s, 0); + val = strtol (tmp->data, &t, 0); + + if (!*tmp->data || *t || (short) val != val) + { + snprintf (err->data, err->dsize, _("%s: invalid value"), tmp->data); + r = -1; + break; + } + else + *ptr = (short) val; + + /* these ones need a sanity check */ + if (mutt_strcmp (MuttVars[idx].option, "history") == 0) + { + if (*ptr < 0) + *ptr = 0; + mutt_init_history (); + } + else if (mutt_strcmp (MuttVars[idx].option, "pager_index_lines") == 0) + { + if (*ptr < 0) + *ptr = 0; + } + } + else if (DTYPE (MuttVars[idx].type) == DT_QUAD) + { + if (query) + { + char *vals[] = { "no", "yes", "ask-no", "ask-yes" }; + + snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option, + vals [ quadoption (MuttVars[idx].data) ]); + break; + } + + if (*s->dptr == '=') + { + s->dptr++; + mutt_extract_token (tmp, s, 0); + if (ascii_strcasecmp ("yes", tmp->data) == 0) + set_quadoption (MuttVars[idx].data, M_YES); + else if (ascii_strcasecmp ("no", tmp->data) == 0) + set_quadoption (MuttVars[idx].data, M_NO); + else if (ascii_strcasecmp ("ask-yes", tmp->data) == 0) + set_quadoption (MuttVars[idx].data, M_ASKYES); + else if (ascii_strcasecmp ("ask-no", tmp->data) == 0) + set_quadoption (MuttVars[idx].data, M_ASKNO); + else + { + snprintf (err->data, err->dsize, _("%s: invalid value"), tmp->data); + r = -1; + break; + } + } + else + { + if (inv) + toggle_quadoption (MuttVars[idx].data); + else if (unset) + set_quadoption (MuttVars[idx].data, M_NO); + else + set_quadoption (MuttVars[idx].data, M_YES); + } + } + else if (DTYPE (MuttVars[idx].type) == DT_SORT) + { + const struct mapping_t *map = NULL; + + switch (MuttVars[idx].type & DT_SUBTYPE_MASK) + { + case DT_SORT_ALIAS: + map = SortAliasMethods; + break; + case DT_SORT_BROWSER: + map = SortBrowserMethods; + break; + case DT_SORT_KEYS: + if ((WithCrypto & APPLICATION_PGP)) + map = SortKeyMethods; + break; + case DT_SORT_AUX: + map = SortAuxMethods; + break; + default: + map = SortMethods; + break; + } + + if (!map) + { + snprintf (err->data, err->dsize, _("%s: Unknown type."), MuttVars[idx].option); + r = -1; + break; + } + + if (query || *s->dptr != '=') + { + p = mutt_getnamebyvalue (*((short *) MuttVars[idx].data) & SORT_MASK, map); + + snprintf (err->data, err->dsize, "%s=%s%s%s", MuttVars[idx].option, + (*((short *) MuttVars[idx].data) & SORT_REVERSE) ? "reverse-" : "", + (*((short *) MuttVars[idx].data) & SORT_LAST) ? "last-" : "", + p); + return 0; + } + s->dptr++; + mutt_extract_token (tmp, s , 0); + + if (parse_sort ((short *) MuttVars[idx].data, tmp->data, map, err) == -1) + { + r = -1; + break; + } + } + else + { + snprintf (err->data, err->dsize, _("%s: unknown type"), MuttVars[idx].option); + r = -1; + break; + } + + if (MuttVars[idx].flags & R_INDEX) + set_option (OPTFORCEREDRAWINDEX); + if (MuttVars[idx].flags & R_PAGER) + set_option (OPTFORCEREDRAWPAGER); + if (MuttVars[idx].flags & R_RESORT_SUB) + set_option (OPTSORTSUBTHREADS); + if (MuttVars[idx].flags & R_RESORT) + set_option (OPTNEEDRESORT); + if (MuttVars[idx].flags & R_RESORT_INIT) + set_option (OPTRESORTINIT); + if (MuttVars[idx].flags & R_TREE) + set_option (OPTREDRAWTREE); + } + return (r); +} + +#define MAXERRS 128 + +/* reads the specified initialization file. returns -1 if errors were found + so that we can pause to let the user know... */ +static int source_rc (const char *rcfile, BUFFER *err) +{ + FILE *f; + int line = 0, rc = 0; + BUFFER token; + char *linebuf = NULL; + size_t buflen; + pid_t pid; + struct stat s; + + if (stat (rcfile, &s) < 0) + { + snprintf (err->data, err->dsize, _("%s: stat: %s"), rcfile, strerror (errno)); + return (-1); + } + if (!S_ISREG (s.st_mode)) + { + snprintf (err->data, err->dsize, _("%s: not a regular file"), rcfile); + return (-1); + } + + if ((f = mutt_open_read (rcfile, &pid)) == NULL) + { + snprintf (err->data, err->dsize, "%s: %s", rcfile, strerror (errno)); + return (-1); + } + + memset (&token, 0, sizeof (token)); + while ((linebuf = mutt_read_line (linebuf, &buflen, f, &line)) != NULL) + { + if (mutt_parse_rc_line (linebuf, &token, err) == -1) + { + mutt_error (_("Error in %s, line %d: %s"), rcfile, line, err->data); + if (--rc < -MAXERRS) + break; + } + else + if (rc < 0) + rc = -1; + } + FREE (&token.data); + FREE (&linebuf); + fclose (f); + if (pid != -1) + mutt_wait_filter (pid); + if (rc) + { + /* the muttrc source keyword */ + snprintf (err->data, err->dsize, rc >= -MAXERRS ? _("source: errors in %s") + : _("source: reading aborted due too many errors in %s"), rcfile); + rc = -1; + } + return (rc); +} + +#undef MAXERRS + +static int parse_source (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) +{ + char path[_POSIX_PATH_MAX]; + int rc = 0; + + do + { + if (mutt_extract_token (tmp, s, 0) != 0) + { + snprintf (err->data, err->dsize, _("source: error at %s"), s->dptr); + return (-1); + } + + strfcpy (path, tmp->data, sizeof (path)); + mutt_expand_path (path, sizeof (path)); + + rc += source_rc (path, err); + } + while (MoreArgs (s)); + + return ((rc < 0) ? -1 : 0); +} + +/* line command to execute + + token scratch buffer to be used by parser. caller should free + token->data when finished. the reason for this variable is + to avoid having to allocate and deallocate a lot of memory + if we are parsing many lines. the caller can pass in the + memory to use, which avoids having to create new space for + every call to this function. + + err where to write error messages */ +int mutt_parse_rc_line (/* const */ char *line, BUFFER *token, BUFFER *err) +{ + int i, r = -1; + BUFFER expn; + + memset (&expn, 0, sizeof (expn)); + expn.data = expn.dptr = line; + expn.dsize = mutt_strlen (line); + + *err->data = 0; + + SKIPWS (expn.dptr); + while (*expn.dptr) + { + if (*expn.dptr == '#') + break; /* rest of line is a comment */ + if (*expn.dptr == ';') + { + expn.dptr++; + continue; + } + mutt_extract_token (token, &expn, 0); + for (i = 0; Commands[i].name; i++) + { + if (!mutt_strcmp (token->data, Commands[i].name)) + { + if (Commands[i].func (token, &expn, Commands[i].data, err) != 0) + goto finish; + break; + } + } + if (!Commands[i].name) + { + snprintf (err->data, err->dsize, _("%s: unknown command"), NONULL (token->data)); + goto finish; + } + } + r = 0; +finish: + if (expn.destroy) + FREE (&expn.data); + return (r); +} + + +#define NUMVARS (sizeof (MuttVars)/sizeof (MuttVars[0])) +#define NUMCOMMANDS (sizeof (Commands)/sizeof (Commands[0])) +/* initial string that starts completion. No telling how much crap + * the user has typed so far. Allocate LONG_STRING just to be sure! */ +char User_typed [LONG_STRING] = {0}; + +int Num_matched = 0; /* Number of matches for completion */ +char Completed [STRING] = {0}; /* completed string (command or variable) */ +char *Matches[MAX(NUMVARS,NUMCOMMANDS) + 1]; /* all the matches + User_typed */ + +/* helper function for completion. Changes the dest buffer if + necessary/possible to aid completion. + dest == completion result gets here. + src == candidate for completion. + try == user entered data for completion. + len == length of dest buffer. +*/ +static void candidate (char *dest, char *try, char *src, int len) +{ + int l; + + if (strstr (src, try) == src) + { + Matches[Num_matched++] = src; + if (dest[0] == 0) + strfcpy (dest, src, len); + else + { + for (l = 0; src[l] && src[l] == dest[l]; l++); + dest[l] = 0; + } + } +} + +int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs) +{ + char *pt = buffer; + int num; + int spaces; /* keep track of the number of leading spaces on the line */ + + SKIPWS (buffer); + spaces = buffer - pt; + + pt = buffer + pos - spaces; + while ((pt > buffer) && !isspace ((unsigned char) *pt)) + pt--; + + if (pt == buffer) /* complete cmd */ + { + /* first TAB. Collect all the matches */ + if (numtabs == 1) + { + Num_matched = 0; + strfcpy (User_typed, pt, sizeof (User_typed)); + memset (Matches, 0, sizeof (Matches)); + memset (Completed, 0, sizeof (Completed)); + for (num = 0; Commands[num].name; num++) + candidate (Completed, User_typed, Commands[num].name, sizeof (Completed)); + Matches[Num_matched++] = User_typed; + + /* All matches are stored. Longest non-ambiguous string is "" + * i.e. dont change 'buffer'. Fake successful return this time */ + if (User_typed[0] == 0) + return 1; + } + + if (Completed[0] == 0 && User_typed[0]) + return 0; + + /* Num_matched will _always_ be atleast 1 since the initial + * user-typed string is always stored */ + if (numtabs == 1 && Num_matched == 2) + snprintf(Completed, sizeof(Completed),"%s", Matches[0]); + else if (numtabs > 1 && Num_matched > 2) + /* cycle thru all the matches */ + snprintf(Completed, sizeof(Completed), "%s", + Matches[(numtabs - 2) % Num_matched]); + + /* return the completed command */ + strncpy (buffer, Completed, len - spaces); + } + else if (!mutt_strncmp (buffer, "set", 3) + || !mutt_strncmp (buffer, "unset", 5) + || !mutt_strncmp (buffer, "reset", 5) + || !mutt_strncmp (buffer, "toggle", 6)) + { /* complete variables */ + char *prefixes[] = { "no", "inv", "?", "&", 0 }; + + pt++; + /* loop through all the possible prefixes (no, inv, ...) */ + if (!mutt_strncmp (buffer, "set", 3)) + { + for (num = 0; prefixes[num]; num++) + { + if (!mutt_strncmp (pt, prefixes[num], mutt_strlen (prefixes[num]))) + { + pt += mutt_strlen (prefixes[num]); + break; + } + } + } + + /* first TAB. Collect all the matches */ + if (numtabs == 1) + { + Num_matched = 0; + strfcpy (User_typed, pt, sizeof (User_typed)); + memset (Matches, 0, sizeof (Matches)); + memset (Completed, 0, sizeof (Completed)); + for (num = 0; MuttVars[num].option; num++) + candidate (Completed, User_typed, MuttVars[num].option, sizeof (Completed)); + Matches[Num_matched++] = User_typed; + + /* All matches are stored. Longest non-ambiguous string is "" + * i.e. dont change 'buffer'. Fake successful return this time */ + if (User_typed[0] == 0) + return 1; + } + + if (Completed[0] == 0 && User_typed[0]) + return 0; + + /* Num_matched will _always_ be atleast 1 since the initial + * user-typed string is always stored */ + if (numtabs == 1 && Num_matched == 2) + snprintf(Completed, sizeof(Completed),"%s", Matches[0]); + else if (numtabs > 1 && Num_matched > 2) + /* cycle thru all the matches */ + snprintf(Completed, sizeof(Completed), "%s", + Matches[(numtabs - 2) % Num_matched]); + + strncpy (pt, Completed, buffer + len - pt - spaces); + } + else if (!mutt_strncmp (buffer, "exec", 4)) + { + struct binding_t *menu = km_get_table (CurrentMenu); + + if (!menu && CurrentMenu != MENU_PAGER) + menu = OpGeneric; + + pt++; + /* first TAB. Collect all the matches */ + if (numtabs == 1) + { + Num_matched = 0; + strfcpy (User_typed, pt, sizeof (User_typed)); + memset (Matches, 0, sizeof (Matches)); + memset (Completed, 0, sizeof (Completed)); + for (num = 0; menu[num].name; num++) + candidate (Completed, User_typed, menu[num].name, sizeof (Completed)); + /* try the generic menu */ + if (Completed[0] == 0 && CurrentMenu != MENU_PAGER) + { + menu = OpGeneric; + for (num = 0; menu[num].name; num++) + candidate (Completed, User_typed, menu[num].name, sizeof (Completed)); + } + Matches[Num_matched++] = User_typed; + + /* All matches are stored. Longest non-ambiguous string is "" + * i.e. dont change 'buffer'. Fake successful return this time */ + if (User_typed[0] == 0) + return 1; + } + + if (Completed[0] == 0 && User_typed[0]) + return 0; + + /* Num_matched will _always_ be atleast 1 since the initial + * user-typed string is always stored */ + if (numtabs == 1 && Num_matched == 2) + snprintf(Completed, sizeof(Completed),"%s", Matches[0]); + else if (numtabs > 1 && Num_matched > 2) + /* cycle thru all the matches */ + snprintf(Completed, sizeof(Completed), "%s", + Matches[(numtabs - 2) % Num_matched]); + + strncpy (pt, Completed, buffer + len - pt - spaces); + } + else + return 0; + + return 1; +} + +int mutt_var_value_complete (char *buffer, size_t len, int pos) +{ + char var[STRING], *pt = buffer; + int spaces; + + if (buffer[0] == 0) + return 0; + + SKIPWS (buffer); + spaces = buffer - pt; + + pt = buffer + pos - spaces; + while ((pt > buffer) && !isspace ((unsigned char) *pt)) + pt--; + pt++; /* move past the space */ + if (*pt == '=') /* abort if no var before the '=' */ + return 0; + + if (mutt_strncmp (buffer, "set", 3) == 0) + { + int idx; + strfcpy (var, pt, sizeof (var)); + /* ignore the trailing '=' when comparing */ + var[mutt_strlen (var) - 1] = 0; + if ((idx = mutt_option_index (var)) == -1) + return 0; /* no such variable. */ + else + { + char tmp [LONG_STRING], tmp2[LONG_STRING]; + char *s, *d; + size_t dlen = buffer + len - pt - spaces; + char *vals[] = { "no", "yes", "ask-no", "ask-yes" }; + + tmp[0] = '\0'; + + if ((DTYPE(MuttVars[idx].type) == DT_STR) || + (DTYPE(MuttVars[idx].type) == DT_PATH) || + (DTYPE(MuttVars[idx].type) == DT_RX)) + { + strfcpy (tmp, NONULL (*((char **) MuttVars[idx].data)), sizeof (tmp)); + if (DTYPE (MuttVars[idx].type) == DT_PATH) + mutt_pretty_mailbox (tmp); + } + else if (DTYPE (MuttVars[idx].type) == DT_ADDR) + { + rfc822_write_address (tmp, sizeof (tmp), *((ADDRESS **) MuttVars[idx].data), 0); + } + else if (DTYPE (MuttVars[idx].type) == DT_QUAD) + strfcpy (tmp, vals[quadoption (MuttVars[idx].data)], sizeof (tmp)); + else if (DTYPE (MuttVars[idx].type) == DT_NUM) + snprintf (tmp, sizeof (tmp), "%d", (*((short *) MuttVars[idx].data))); + else if (DTYPE (MuttVars[idx].type) == DT_SORT) + { + const struct mapping_t *map; + char *p; + + switch (MuttVars[idx].type & DT_SUBTYPE_MASK) + { + case DT_SORT_ALIAS: + map = SortAliasMethods; + break; + case DT_SORT_BROWSER: + map = SortBrowserMethods; + break; + case DT_SORT_KEYS: + if ((WithCrypto & APPLICATION_PGP)) + map = SortKeyMethods; + else + map = SortMethods; + break; + default: + map = SortMethods; + break; + } + p = mutt_getnamebyvalue (*((short *) MuttVars[idx].data) & SORT_MASK, map); + snprintf (tmp, sizeof (tmp), "%s%s%s", + (*((short *) MuttVars[idx].data) & SORT_REVERSE) ? "reverse-" : "", + (*((short *) MuttVars[idx].data) & SORT_LAST) ? "last-" : "", + p); + } + else if (DTYPE (MuttVars[idx].type) == DT_BOOL) + strfcpy (tmp, option (MuttVars[idx].data) ? "yes" : "no", sizeof (tmp)); + else + return 0; + + for (s = tmp, d = tmp2; *s && (d - tmp2) < sizeof (tmp2) - 2;) + { + if (*s == '\\' || *s == '"') + *d++ = '\\'; + *d++ = *s++; + } + *d = '\0'; + + strfcpy (tmp, pt, sizeof (tmp)); + snprintf (pt, dlen, "%s\"%s\"", tmp, tmp2); + + return 1; + } + } + return 0; +} + +/* Implement the -Q command line flag */ +int mutt_query_variables (LIST *queries) +{ + LIST *p; + + char errbuff[STRING]; + char command[STRING]; + + BUFFER err, token; + + memset (&err, 0, sizeof (err)); + memset (&token, 0, sizeof (token)); + + err.data = errbuff; + err.dsize = sizeof (errbuff); + + for (p = queries; p; p = p->next) + { + snprintf (command, sizeof (command), "set ?%s\n", p->data); + if (mutt_parse_rc_line (command, &token, &err) == -1) + { + fprintf (stderr, "%s\n", err.data); + FREE (&token.data); + return 1; + } + printf ("%s\n", err.data); + } + + FREE (&token.data); + return 0; +} + +char *mutt_getnamebyvalue (int val, const struct mapping_t *map) +{ + int i; + + for (i=0; map[i].name; i++) + if (map[i].value == val) + return (map[i].name); + return NULL; +} + +int mutt_getvaluebyname (const char *name, const struct mapping_t *map) +{ + int i; + + for (i = 0; map[i].name; i++) + if (ascii_strcasecmp (map[i].name, name) == 0) + return (map[i].value); + return (-1); +} + +#ifdef DEBUG +static void start_debug (void) +{ + time_t t; + int i; + char buf[_POSIX_PATH_MAX]; + char buf2[_POSIX_PATH_MAX]; + + /* rotate the old debug logs */ + for (i=3; i>=0; i--) + { + snprintf (buf, sizeof(buf), "%s/.muttdebug%d", NONULL(Homedir), i); + snprintf (buf2, sizeof(buf2), "%s/.muttdebug%d", NONULL(Homedir), i+1); + rename (buf, buf2); + } + if ((debugfile = safe_fopen(buf, "w")) != NULL) + { + t = time (0); + setbuf (debugfile, NULL); /* don't buffer the debugging output! */ + fprintf (debugfile, "Mutt %s started at %s.\nDebugging at level %d.\n\n", + MUTT_VERSION, asctime (localtime (&t)), debuglevel); + } +} +#endif + +static int mutt_execute_commands (LIST *p) +{ + BUFFER err, token; + char errstr[SHORT_STRING]; + + memset (&err, 0, sizeof (err)); + err.data = errstr; + err.dsize = sizeof (errstr); + memset (&token, 0, sizeof (token)); + for (; p; p = p->next) + { + if (mutt_parse_rc_line (p->data, &token, &err) != 0) + { + fprintf (stderr, _("Error in command line: %s\n"), err.data); + FREE (&token.data); + return (-1); + } + } + FREE (&token.data); + return 0; +} + +void mutt_init (int skip_sys_rc, LIST *commands) +{ + struct passwd *pw; + struct utsname utsname; + char *p, buffer[STRING], error[STRING]; + int i, default_rc = 0, need_pause = 0; + BUFFER err; + + memset (&err, 0, sizeof (err)); + err.data = error; + err.dsize = sizeof (error); + + /* + * XXX - use something even more difficult to predict? + */ + snprintf (AttachmentMarker, sizeof (AttachmentMarker), + "\033]9;%ld\a", (long) time (NULL)); + + /* on one of the systems I use, getcwd() does not return the same prefix + as is listed in the passwd file */ + if ((p = getenv ("HOME"))) + Homedir = safe_strdup (p); + + /* Get some information about the user */ + if ((pw = getpwuid (getuid ()))) + { + char rnbuf[STRING]; + + Username = safe_strdup (pw->pw_name); + if (!Homedir) + Homedir = safe_strdup (pw->pw_dir); + + Realname = safe_strdup (mutt_gecos_name (rnbuf, sizeof (rnbuf), pw)); + Shell = safe_strdup (pw->pw_shell); + } + else + { + if (!Homedir) + { + mutt_endwin (NULL); + fputs (_("unable to determine home directory"), stderr); + exit (1); + } + if ((p = getenv ("USER"))) + Username = safe_strdup (p); + else + { + mutt_endwin (NULL); + fputs (_("unable to determine username"), stderr); + exit (1); + } + Shell = safe_strdup ((p = getenv ("SHELL")) ? p : "/bin/sh"); + } + +#ifdef DEBUG + /* Start up debugging mode if requested */ + if (debuglevel > 0) + start_debug (); +#endif + + /* And about the host... */ + uname (&utsname); + /* some systems report the FQDN instead of just the hostname */ + if ((p = strchr (utsname.nodename, '.'))) + { + Hostname = mutt_substrdup (utsname.nodename, p); + p++; + strfcpy (buffer, p, sizeof (buffer)); /* save the domain for below */ + } + else + Hostname = safe_strdup (utsname.nodename); + +#ifndef DOMAIN +#define DOMAIN buffer + if (!p && getdnsdomainname (buffer, sizeof (buffer)) == -1) + Fqdn = safe_strdup ("@"); + else +#endif /* DOMAIN */ + if (*DOMAIN != '@') + { + Fqdn = safe_malloc (mutt_strlen (DOMAIN) + mutt_strlen (Hostname) + 2); + sprintf (Fqdn, "%s.%s", NONULL(Hostname), DOMAIN); /* __SPRINTF_CHECKED__ */ + } + else + Fqdn = safe_strdup(NONULL(Hostname)); + +#ifdef USE_NNTP + { + FILE *f; + char *i; + + if ((f = safe_fopen (SYSCONFDIR "/nntpserver", "r"))) + { + buffer[0] = '\0'; + fgets (buffer, sizeof (buffer), f); + p = &buffer; + SKIPWS (p); + i = p; + while (*i && (*i != ' ') && (*i != '\t') && (*i != '\r') && (*i != '\n')) i++; + *i = '\0'; + NewsServer = safe_strdup (p); + fclose (f); + } + } + if ((p = getenv ("NNTPSERVER"))) + NewsServer = safe_strdup (p); +#endif + + if ((p = getenv ("MAIL"))) + Spoolfile = safe_strdup (p); + else if ((p = getenv ("MAILDIR"))) + Spoolfile = safe_strdup (p); + else + { +#ifdef HOMESPOOL + mutt_concat_path (buffer, NONULL (Homedir), MAILPATH, sizeof (buffer)); +#else + mutt_concat_path (buffer, MAILPATH, NONULL(Username), sizeof (buffer)); +#endif + Spoolfile = safe_strdup (buffer); + } + + if ((p = getenv ("MAILCAPS"))) + MailcapPath = safe_strdup (p); + else + { + /* Default search path from RFC1524 */ + MailcapPath = safe_strdup ("~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap"); + } + + Tempdir = safe_strdup ((p = getenv ("TMPDIR")) ? p : "/tmp"); + + p = getenv ("VISUAL"); + if (!p) + { + p = getenv ("EDITOR"); + if (!p) + p = "vi"; + } + Editor = safe_strdup (p); + Visual = safe_strdup (p); + + if ((p = getenv ("REPLYTO")) != NULL) + { + BUFFER buf, token; + + snprintf (buffer, sizeof (buffer), "Reply-To: %s", p); + + memset (&buf, 0, sizeof (buf)); + buf.data = buf.dptr = buffer; + buf.dsize = mutt_strlen (buffer); + + memset (&token, 0, sizeof (token)); + parse_my_hdr (&token, &buf, 0, &err); + FREE (&token.data); + } + + if ((p = getenv ("EMAIL")) != NULL) + From = rfc822_parse_adrlist (NULL, p); + + mutt_set_langinfo_charset (); + mutt_set_charset (Charset); + + + /* Set standard defaults */ + for (i = 0; MuttVars[i].option; i++) + { + mutt_set_default (&MuttVars[i]); + mutt_restore_default (&MuttVars[i]); + } + + CurrentMenu = MENU_MAIN; + + +#ifndef LOCALES_HACK + /* Do we have a locale definition? */ + if (((p = getenv ("LC_ALL")) != NULL && p[0]) || + ((p = getenv ("LANG")) != NULL && p[0]) || + ((p = getenv ("LC_CTYPE")) != NULL && p[0])) + set_option (OPTLOCALES); +#endif + +#ifdef HAVE_GETSID + /* Unset suspend by default if we're the session leader */ + if (getsid(0) == getpid()) + unset_option (OPTSUSPEND); +#endif + + mutt_init_history (); + + + + + /* + * + * BIG FAT WARNING + * + * When changing the code which looks for a configuration file, + * please also change the corresponding code in muttbug.sh.in. + * + * + */ + + + + + if (!Muttrc) + { + snprintf (buffer, sizeof(buffer), "%s/.muttrc-%s", NONULL(Homedir), MUTT_VERSION); + if (access(buffer, F_OK) == -1) + snprintf (buffer, sizeof(buffer), "%s/.muttrc", NONULL(Homedir)); + if (access(buffer, F_OK) == -1) + snprintf (buffer, sizeof (buffer), "%s/.mutt/muttrc-%s", NONULL(Homedir), MUTT_VERSION); + if (access(buffer, F_OK) == -1) + snprintf (buffer, sizeof (buffer), "%s/.mutt/muttrc", NONULL(Homedir)); + + default_rc = 1; + Muttrc = safe_strdup (buffer); + } + else + { + strfcpy (buffer, Muttrc, sizeof (buffer)); + FREE (&Muttrc); + mutt_expand_path (buffer, sizeof (buffer)); + Muttrc = safe_strdup (buffer); + } + FREE (&AliasFile); + AliasFile = safe_strdup (NONULL(Muttrc)); + + /* Process the global rc file if it exists and the user hasn't explicity + requested not to via "-n". */ + if (!skip_sys_rc) + { + snprintf (buffer, sizeof(buffer), "%s/Muttrc-%s", SYSCONFDIR, MUTT_VERSION); + if (access (buffer, F_OK) == -1) + snprintf (buffer, sizeof(buffer), "%s/Muttrc", SYSCONFDIR); + if (access (buffer, F_OK) == -1) + snprintf (buffer, sizeof (buffer), "%s/Muttrc-%s", PKGDATADIR, MUTT_VERSION); + if (access (buffer, F_OK) == -1) + snprintf (buffer, sizeof (buffer), "%s/Muttrc", PKGDATADIR); + if (access (buffer, F_OK) != -1) + { + if (source_rc (buffer, &err) != 0) + { + fputs (err.data, stderr); + fputc ('\n', stderr); + need_pause = 1; + } + } + } + + /* Read the user's initialization file. */ + if (access (Muttrc, F_OK) != -1) + { + if (!option (OPTNOCURSES)) + endwin (); + if (source_rc (Muttrc, &err) != 0) + { + fputs (err.data, stderr); + fputc ('\n', stderr); + need_pause = 1; + } + } + else if (!default_rc) + { + /* file specified by -F does not exist */ + snprintf (buffer, sizeof (buffer), "%s: %s", Muttrc, strerror (errno)); + mutt_endwin (buffer); + exit (1); + } + + if (mutt_execute_commands (commands) != 0) + need_pause = 1; + + if (need_pause && !option (OPTNOCURSES)) + { + if (mutt_any_key_to_continue (NULL) == -1) + mutt_exit(1); + } + +#if 0 + set_option (OPTWEED); /* turn weeding on by default */ +#endif +} + +int mutt_get_hook_type (const char *name) +{ + struct command_t *c; + + for (c = Commands ; c->name ; c++) + if (c->func == mutt_parse_hook && ascii_strcasecmp (c->name, name) == 0) + return c->data; + return 0; +} diff --git a/init.h b/init.h new file mode 100644 index 0000000..4af0d27 --- /dev/null +++ b/init.h @@ -0,0 +1,3066 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifdef _MAKEDOC +# include "config.h" +#else +# include "sort.h" +#endif + +#include "buffy.h" + +#ifndef _MAKEDOC +#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 DT_ADDR 10 /* e-mail address */ + +#define DTYPE(x) ((x) & DT_MASK) + +/* subtypes */ +#define DT_SUBTYPE_MASK 0xf0 +#define DT_SORT_ALIAS 0x10 +#define DT_SORT_BROWSER 0x20 +#define DT_SORT_KEYS 0x40 +#define DT_SORT_AUX 0x80 + +/* 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_RESORT_INIT (1<<4) /* resort from scratch */ +#define R_TREE (1<<5) /* redraw the thread tree */ +#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) + +#endif /* _MAKEDOC */ + +#ifndef ISPELL +#define ISPELL "ispell" +#endif + +/* build complete documentation */ + +#ifdef _MAKEDOC +# ifndef USE_IMAP +# define USE_IMAP +# endif +# ifndef MIXMASTER +# define MIXMASTER "mixmaster" +# endif +# ifndef USE_POP +# define USE_POP +# endif +# ifndef USE_SSL +# define USE_SSL +# endif +# ifndef USE_SOCKET +# define USE_SOCKET +# endif +# ifndef USE_LIBESMTP +# define USE_LIBESMTP +# endif +#endif + +struct option_t MuttVars[] = { + /*++*/ + { "abort_nosubject", DT_QUAD, R_NONE, OPT_SUBJECT, M_ASKYES }, + /* + ** .pp + ** If set to \fIyes\fP, when composing messages and no subject is given + ** at the subject prompt, composition will be aborted. If set to + ** \fIno\fP, composing messages with no subject given at the subject + ** prompt will never be aborted. + */ + { "abort_unmodified", DT_QUAD, R_NONE, OPT_ABORT, M_YES }, + /* + ** .pp + ** If set to \fIyes\fP, composition will automatically abort after + ** editing the message body if no changes are made to the file (this + ** check only happens after the \fIfirst\fP edit of the file). When set + ** to \fIno\fP, composition will never be aborted. + */ + { "alias_file", DT_PATH, R_NONE, UL &AliasFile, UL "~/.muttrc" }, + /* + ** .pp + ** The default file in which to save aliases created by the + ** ``$create-alias'' function. + ** .pp + ** \fBNote:\fP Mutt will not automatically source this file; you must + ** explicitly use the ``$source'' command for it to be executed. + */ + { "alias_format", DT_STR, R_NONE, UL &AliasFmt, UL "%4n %2f %t %-10a %r" }, + /* + ** .pp + ** Specifies the format of the data displayed for the `alias' menu. The + ** following printf(3)-style sequences are available: + ** .pp + ** .dl + ** .dt %a .dd alias name + ** .dt %f .dd flags - currently, a "d" for an alias marked for deletion + ** .dt %n .dd index number + ** .dt %r .dd address which alias expands to + ** .dt %t .dd character which indicates if the alias is tagged for inclusion + ** .de + */ + { "allow_8bit", DT_BOOL, R_NONE, OPTALLOW8BIT, 1 }, + /* + ** .pp + ** Controls whether 8-bit data is converted to 7-bit using either Quoted- + ** Printable or Base64 encoding when sending mail. + */ + { "allow_ansi", DT_BOOL, R_NONE, OPTALLOWANSI, 0 }, + /* + ** .pp + ** Controls whether ANSI color codes in messages (and color tags in + ** rich text messages) are to be interpreted. + ** Messages containing these codes are rare, but if this option is set, + ** their text will be colored accordingly. Note that this may override + ** your color choices, and even present a security problem, since a + ** message could include a line like "[-- PGP output follows ..." and + ** give it the same color as your attachment color. + */ + { "arrow_cursor", DT_BOOL, R_BOTH, OPTARROWCURSOR, 0 }, + /* + ** .pp + ** When set, an arrow (``->'') will be used to indicate the current entry + ** in menus instead of highlighting the whole line. On slow network or modem + ** links this will make response faster because there is less that has to + ** be redrawn on the screen when moving to the next or previous entries + ** in the menu. + */ + { "ascii_chars", DT_BOOL, R_BOTH, OPTASCIICHARS, 0 }, + /* + ** .pp + ** If set, Mutt will use plain ASCII characters when displaying thread + ** and attachment trees, instead of the default \fIACS\fP characters. + */ + { "askbcc", DT_BOOL, R_NONE, OPTASKBCC, 0 }, + /* + ** .pp + ** If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients + ** before editing an outgoing message. + */ + { "askcc", DT_BOOL, R_NONE, OPTASKCC, 0 }, + /* + ** .pp + ** If set, Mutt will prompt you for carbon-copy (Cc) recipients before + ** editing the body of an outgoing message. + */ +#ifdef USE_NNTP + { "ask_follow_up", DT_BOOL, R_NONE, OPTASKFOLLOWUP, 0 }, + /* + ** .pp + ** If set, Mutt will prompt you for follow-up groups before editing + ** the body of an outgoing message. + */ + { "ask_x_comment_to", DT_BOOL, R_NONE, OPTASKXCOMMENTTO, 0 }, + /* + ** .pp + ** If set, Mutt will prompt you for x-comment-to field before editing + ** the body of an outgoing message. + */ +#endif + { "attach_format", DT_STR, R_NONE, UL &AttachFormat, UL "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] " }, + /* + ** .pp + ** This variable describes the format of the `attachment' menu. The + ** following printf-style sequences are understood: + ** .pp + ** .dl + ** .dt %C .dd charset + ** .dt %c .dd reqiures charset conversion (n or c) + ** .dt %D .dd deleted flag + ** .dt %d .dd description + ** .dt %e .dd MIME content-transfer-encoding + ** .dt %f .dd filename + ** .dt %I .dd disposition (I=inline, A=attachment) + ** .dt %m .dd major MIME type + ** .dt %M .dd MIME subtype + ** .dt %n .dd attachment number + ** .dt %s .dd size + ** .dt %t .dd tagged flag + ** .dt %T .dd graphic tree characters + ** .dt %u .dd unlink (=to delete) flag + ** .dt %>X .dd right justify the rest of the string and pad with character "X" + ** .dt %|X .dd pad to the end of the line with character "X" + ** .de + */ + { "attach_sep", DT_STR, R_NONE, UL &AttachSep, UL "\n" }, + /* + ** .pp + ** The separator to add between attachments when operating (saving, + ** printing, piping, etc) on a list of tagged attachments. + */ + { "attach_split", DT_BOOL, R_NONE, OPTATTACHSPLIT, 1 }, + /* + ** .pp + ** If this variable is unset, when operating (saving, printing, piping, + ** etc) on a list of tagged attachments, Mutt will concatenate the + ** attachments and will operate on them as a single attachment. The + ** ``$$attach_sep'' separator is added after each attachment. When set, + ** Mutt will operate on the attachments one by one. + */ + { "attribution", DT_STR, R_NONE, UL &Attribution, UL "On %d, %n wrote:" }, + /* + ** .pp + ** This is the string that will precede a message which has been included + ** in a reply. For a full listing of defined printf()-like sequences see + ** the section on ``$$index_format''. + */ + { "autoedit", DT_BOOL, R_NONE, OPTAUTOEDIT, 0 }, + /* + ** .pp + ** When set along with ``$$edit_headers'', Mutt will skip the initial + ** send-menu and allow you to immediately begin editing the body of your + ** message. The send-menu may still be accessed once you have finished + ** editing the body of your message. + ** .pp + ** Also see ``$$fast_reply''. + */ + { "auto_tag", DT_BOOL, R_NONE, OPTAUTOTAG, 0 }, + /* + ** .pp + ** When set, functions in the \fIindex\fP menu which affect a message + ** will be applied to all tagged messages (if there are any). When + ** unset, you must first use the tag-prefix function (default: ";") to + ** make the next function apply to all tagged messages. + */ + { "beep", DT_BOOL, R_NONE, OPTBEEP, 1 }, + /* + ** .pp + ** When this variable is set, mutt will beep when an error occurs. + */ + { "beep_new", DT_BOOL, R_NONE, OPTBEEPNEW, 0 }, + /* + ** .pp + ** When this variable is set, mutt will beep whenever it prints a message + ** notifying you of new mail. This is independent of the setting of the + ** ``$$beep'' variable. + */ + { "bounce", DT_QUAD, R_NONE, OPT_BOUNCE, M_ASKYES }, + /* + ** .pp + ** Controls whether you will be asked to confirm bouncing messages. + ** If set to \fIyes\fP you don't get asked if you want to bounce a + ** message. Setting this variable to \fIno\fP is not generally useful, + ** and thus not recommended, because you are unable to bounce messages. + */ + { "bounce_delivered", DT_BOOL, R_NONE, OPTBOUNCEDELIVERED, 1 }, + /* + ** .pp + ** When this variable is set, mutt will include Delivered-To headers when + ** bouncing messages. Postfix users may wish to unset this variable. + */ +#ifdef USE_NNTP + { "catchup_newsgroup", DT_QUAD, R_NONE, OPT_CATCHUP, M_ASKYES }, + /* + ** .pp + ** If this variable is \fIset\fP, Mutt will mark all articles in newsgroup + ** as read when you quit the newsgroup (catchup newsgroup). + */ +#endif + { "charset", DT_STR, R_NONE, UL &Charset, UL 0 }, + /* + ** .pp + ** Character set your terminal uses to display and enter textual data. + */ + { "check_new", DT_BOOL, R_NONE, OPTCHECKNEW, 1 }, + /* + ** .pp + ** \fBNote:\fP this option only affects \fImaildir\fP and \fIMH\fP style + ** mailboxes. + ** .pp + ** When \fIset\fP, Mutt will check for new mail delivered while the + ** mailbox is open. Especially with MH mailboxes, this operation can + ** take quite some time since it involves scanning the directory and + ** checking each file to see if it has already been looked at. If + ** \fIcheck_new\fP is \fIunset\fP, no check for new mail is performed + ** while the mailbox is open. + */ + { "collapse_unread", DT_BOOL, R_NONE, OPTCOLLAPSEUNREAD, 1 }, + /* + ** .pp + ** When \fIunset\fP, Mutt will not collapse a thread if it contains any + ** unread messages. + */ + { "uncollapse_jump", DT_BOOL, R_NONE, OPTUNCOLLAPSEJUMP, 0 }, + /* + ** .pp + ** When \fIset\fP, Mutt will jump to the next unread message, if any, + ** when the current thread is \fIun\fPcollapsed. + */ + { "compose_format", DT_STR, R_BOTH, UL &ComposeFormat, UL "-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-" }, + /* + ** .pp + ** Controls the format of the status line displayed in the \fCompose\fP + ** menu. This string is similar to ``$$status_format'', but has its own + ** set of printf()-like sequences: + ** .pp + ** .dl + ** .dt %a .dd total number of attachments + ** .dt %h .dd local hostname + ** .dt %l .dd approximate size (in bytes) of the current message + ** .dt %v .dd Mutt version string + ** .de + ** .pp + ** See the text describing the ``$$status_format'' option for more + ** information on how to set ``$$compose_format''. + */ + { "confirmappend", DT_BOOL, R_NONE, OPTCONFIRMAPPEND, 1 }, + /* + ** .pp + ** When set, Mutt will prompt for confirmation when appending messages to + ** an existing mailbox. + */ + { "confirmcreate", DT_BOOL, R_NONE, OPTCONFIRMCREATE, 1 }, + /* + ** .pp + ** When set, Mutt will prompt for confirmation when saving messages to a + ** mailbox which does not yet exist before creating it. + */ + { "connect_timeout", DT_NUM, R_NONE, UL &ConnectTimeout, 30 }, + /* + ** .pp + ** Causes Mutt to timeout a network connection (for IMAP or POP) after this + ** many seconds if the connection is not able to be established. A negative + ** value causes Mutt to wait indefinitely for the connection to succeed. + */ + { "content_type", DT_STR, R_NONE, UL &ContentType, UL "text/plain" }, + /* + ** .pp + ** Sets the default Content-Type for the body of newly composed messages. + */ + { "copy", DT_QUAD, R_NONE, OPT_COPY, M_YES }, + /* + ** .pp + ** This variable controls whether or not copies of your outgoing messages + ** will be saved for later references. Also see ``$$record'', + ** ``$$save_name'', ``$$force_name'' and ``$fcc-hook''. + */ + { "crypt_autopgp", DT_BOOL, R_NONE, OPTCRYPTAUTOPGP, 1 }, + /* + ** .pp + ** This variable controls whether or not mutt may automatically enable + ** PGP encryption/signing for messages. See also ``$$crypt_autoencrypt'', + ** ``$$crypt_replyencrypt'', + ** ``$$crypt_autosign'', ``$$crypt_replysign'' and ``$$smime_is_default''. + */ + { "crypt_autosmime", DT_BOOL, R_NONE, OPTCRYPTAUTOSMIME, 1 }, + /* + ** .pp + ** This variable controls whether or not mutt may automatically enable + ** S/MIME encryption/signing for messages. See also ``$$crypt_autoencrypt'', + ** ``$$crypt_replyencrypt'', + ** ``$$crypt_autosign'', ``$$crypt_replysign'' and ``$$smime_is_default''. + */ + { "date_format", DT_STR, R_BOTH, UL &DateFmt, UL "!%a, %b %d, %Y at %I:%M:%S%p %Z" }, + /* + ** .pp + ** This variable controls the format of the date printed by the ``%d'' + ** sequence in ``$$index_format''. This is passed to the \fIstrftime\fP + ** call to process the date. See the man page for \fIstrftime(3)\fP for + ** the proper syntax. + ** .pp + ** Unless the first character in the string is a bang (``!''), the month + ** and week day names are expanded according to the locale specified in + ** the variable ``$$locale''. If the first character in the string is a + ** bang, the bang is discarded, and the month and week day names in the + ** rest of the string are expanded in the \fIC\fP locale (that is in US + ** English). + */ + { "default_hook", DT_STR, R_NONE, UL &DefaultHook, UL "~f %s !~P | (~P ~C %s)" }, + /* + ** .pp + ** This variable controls how send-hooks, message-hooks, save-hooks, + ** and fcc-hooks will + ** be interpreted if they are specified with only a simple regexp, + ** instead of a matching pattern. The hooks are expanded when they are + ** declared, so a hook will be interpreted according to the value of this + ** variable at the time the hook is declared. The default value matches + ** if the message is either from a user matching the regular expression + ** given, or if it is from you (if the from address matches + ** ``alternates'') and is to or cc'ed to a user matching the given + ** regular expression. + */ + { "delete", DT_QUAD, R_NONE, OPT_DELETE, M_ASKYES }, + /* + ** .pp + ** Controls whether or not messages are really deleted when closing or + ** synchronizing a mailbox. If set to \fIyes\fP, messages marked for + ** deleting will automatically be purged without prompting. If set to + ** \fIno\fP, messages marked for deletion will be kept in the mailbox. + */ + { "delete_untag", DT_BOOL, R_NONE, OPTDELETEUNTAG, 1 }, + /* + ** .pp + ** If this option is \fIset\fP, mutt will untag messages when marking them + ** for deletion. This applies when you either explicitly delete a message, + ** or when you save it to another folder. + */ + { "digest_collapse", DT_BOOL, R_NONE, OPTDIGESTCOLLAPSE, 1}, + /* + ** .pp + ** If this option is \fIset\fP, mutt's revattach menu will not show the subparts of + ** individual messages in a digest. To see these subparts, press 'v' on that menu. + */ + { "display_filter", DT_PATH, R_PAGER, UL &DisplayFilter, UL "" }, + /* + ** .pp + ** When set, specifies a command used to filter messages. When a message + ** is viewed it is passed as standard input to $$display_filter, and the + ** filtered message is read from the standard output. + */ +#if defined(DL_STANDALONE) && defined(USE_DOTLOCK) + { "dotlock_program", DT_PATH, R_NONE, UL &MuttDotlock, UL BINDIR "/mutt_dotlock" }, + /* + ** .pp + ** Contains the path of the mutt_dotlock (8) binary to be used by + ** mutt. + */ +#endif + { "dsn_notify", DT_STR, R_NONE, UL &DsnNotify, UL "" }, + /* + ** .pp + ** \fBNote:\fP you should not enable this unless you are using Sendmail + ** 8.8.x or greater. + ** .pp + ** This variable sets the request for when notification is returned. The + ** string consists of a comma separated list (no spaces!) of one or more + ** of the following: \fInever\fP, to never request notification, + ** \fIfailure\fP, to request notification on transmission failure, + ** \fIdelay\fP, to be notified of message delays, \fIsuccess\fP, to be + ** notified of successful transmission. + ** .pp + ** Example: set dsn_notify="failure,delay" + */ + { "dsn_return", DT_STR, R_NONE, UL &DsnReturn, UL "" }, + /* + ** .pp + ** \fBNote:\fP you should not enable this unless you are using Sendmail + ** 8.8.x or greater. + ** .pp + ** This variable controls how much of your message is returned in DSN + ** messages. It may be set to either \fIhdrs\fP to return just the + ** message header, or \fIfull\fP to return the full message. + ** .pp + ** Example: set dsn_return=hdrs + */ + { "duplicate_threads", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTDUPTHREADS, 1 }, + /* + ** .pp + ** This variable controls whether mutt, when sorting by threads, threads + ** messages with the same message-id together. If it is set, it will indicate + ** that it thinks they are duplicates of each other with an equals sign + ** in the thread diagram. + */ + { "edit_headers", DT_BOOL, R_NONE, OPTEDITHDRS, 0 }, + /* + ** .pp + ** This option allows you to edit the header of your outgoing messages + ** along with the body of your message. + */ + { "edit_hdrs", DT_SYN, R_NONE, UL "edit_headers", 0 }, + /* + */ + { "editor", DT_PATH, R_NONE, UL &Editor, 0 }, + /* + ** .pp + ** This variable specifies which editor is used by mutt. + ** It defaults to the value of the VISUAL, or EDITOR, environment + ** variable, or to the string "vi" if neither of those are set. + */ + { "encode_from", DT_BOOL, R_NONE, OPTENCODEFROM, 0 }, + /* + ** .pp + ** When \fIset\fP, mutt will quoted-printable encode messages when + ** they contain the string "From " in the beginning of a line. + ** Useful to avoid the tampering certain mail delivery and transport + ** agents tend to do with messages. + */ + { "envelope_from", DT_BOOL, R_NONE, OPTENVFROM, 0 }, + /* + ** .pp + ** When \fIset\fP, mutt will try to derive the message's \fIenvelope\fP + ** sender from the "From:" header. Note that this information is passed + ** to sendmail command using the "-f" command line switch, so don't set this + ** option if you are using that switch in $$sendmail yourself, + ** or if the sendmail on your machine doesn't support that command + ** line switch. + */ + { "escape", DT_STR, R_NONE, UL &EscChar, UL "~" }, + /* + ** .pp + ** Escape character to use for functions in the builtin editor. + */ + { "fast_reply", DT_BOOL, R_NONE, OPTFASTREPLY, 0 }, + /* + ** .pp + ** When set, the initial prompt for recipients and subject are skipped + ** when replying to messages, and the initial prompt for subject is + ** skipped when forwarding messages. + ** .pp + ** \fBNote:\fP this variable has no effect when the ``$$autoedit'' + ** variable is set. + */ + { "fcc_attach", DT_BOOL, R_NONE, OPTFCCATTACH, 1 }, + /* + ** .pp + ** This variable controls whether or not attachments on outgoing messages + ** are saved along with the main body of your message. + */ + { "fcc_clear", DT_BOOL, R_NONE, OPTFCCCLEAR, 0 }, + /* + ** .pp + ** When this variable is set, FCCs will be stored unencrypted and + ** unsigned, even when the actual message is encrypted and/or + ** signed. + ** (PGP only) + */ + { "folder", DT_PATH, R_NONE, UL &Maildir, UL "~/Mail" }, + /* + ** .pp + ** Specifies the default location of your mailboxes. A `+' or `=' at the + ** beginning of a pathname will be expanded to the value of this + ** variable. Note that if you change this variable from the default + ** value you need to make sure that the assignment occurs \fIbefore\fP + ** you use `+' or `=' for any other variables since expansion takes place + ** during the `set' command. + */ + { "folder_format", DT_STR, R_INDEX, UL &FolderFormat, UL "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f" }, + /* + ** .pp + ** This variable allows you to customize the file browser display to your + ** personal taste. This string is similar to ``$$index_format'', but has + ** its own set of printf()-like sequences: + ** .pp + ** .dl + ** .dt %C .dd current file number + ** .dt %d .dd date/time folder was last modified + ** .dt %f .dd filename + ** .dt %F .dd file permissions + ** .dt %g .dd group name (or numeric gid, if missing) + ** .dt %l .dd number of hard links + ** .dt %N .dd N if folder has new mail, blank otherwise + ** .dt %s .dd size in bytes + ** .dt %t .dd * if the file is tagged, blank otherwise + ** .dt %u .dd owner name (or numeric uid, if missing) + ** .dt %>X .dd right justify the rest of the string and pad with character "X" + ** .dt %|X .dd pad to the end of the line with character "X" + ** .de + */ + { "followup_to", DT_BOOL, R_NONE, OPTFOLLOWUPTO, 1 }, + /* + ** .pp + ** Controls whether or not the \fIMail-Followup-To\fP header field is + ** generated when sending mail. When \fIset\fP, Mutt will generate this + ** field when you are replying to a known mailing list, specified with + ** the ``subscribe'' or ``$lists'' commands. + ** .pp + ** This field has two purposes. First, preventing you from + ** receiving duplicate copies of replies to messages which you send + ** to mailing lists, and second, ensuring that you do get a reply + ** separately for any messages sent to known lists to which you are + ** not subscribed. The header will contain only the list's address + ** for subscribed lists, and both the list address and your own + ** email address for unsubscribed lists. Without this header, a + ** group reply to your message sent to a subscribed list will be + ** sent to both the list and your address, resulting in two copies + ** of the same email for you. + */ +#ifdef USE_NNTP + { "followup_to_poster", DT_QUAD, R_NONE, OPT_FOLLOWUPTOPOSTER, M_ASKYES }, + /* + ** .pp + ** If this variable is \fIset\fP and the keyword "poster" is present in + ** \fIFollowup-To\fP header, follow-up to newsgroup function is not + ** permitted. The message will be mailed to the submitter of the + ** message via mail. + */ +#endif + { "force_name", DT_BOOL, R_NONE, OPTFORCENAME, 0 }, + /* + ** .pp + ** This variable is similar to ``$$save_name'', except that Mutt will + ** store a copy of your outgoing message by the username of the address + ** you are sending to even if that mailbox does not exist. + ** .pp + ** Also see the ``$$record'' variable. + */ + { "forward_decode", DT_BOOL, R_NONE, OPTFORWDECODE, 1 }, + /* + ** .pp + ** Controls the decoding of complex MIME messages into text/plain when + ** forwarding a message. The message header is also RFC2047 decoded. + ** This variable is only used, if ``$$mime_forward'' is \fIunset\fP, + ** otherwise ``$$mime_forward_decode'' is used instead. + */ + { "forw_decode", DT_SYN, R_NONE, UL "forward_decode", 0 }, + /* + */ + { "forward_edit", DT_QUAD, R_NONE, OPT_FORWEDIT, M_YES }, + /* + ** .pp + ** This quadoption controls whether or not the user is automatically + ** placed in the editor when forwarding messages. For those who always want + ** to forward with no modification, use a setting of ``no''. + */ + { "forward_format", DT_STR, R_NONE, UL &ForwFmt, UL "[%a: %s]" }, + /* + ** .pp + ** This variable controls the default subject when forwarding a message. + ** It uses the same format sequences as the ``$$index_format'' variable. + */ + { "forw_format", DT_SYN, R_NONE, UL "forward_format", 0 }, + /* + */ + { "forward_quote", DT_BOOL, R_NONE, OPTFORWQUOTE, 0 }, + /* + ** .pp + ** When \fIset\fP forwarded messages included in the main body of the + ** message (when ``$$mime_forward'' is \fIunset\fP) will be quoted using + ** ``$$indent_string''. + */ + { "forw_quote", DT_SYN, R_NONE, UL "forward_quote", 0 }, + /* + */ + { "from", DT_ADDR, R_NONE, UL &From, UL 0 }, + /* + ** .pp + ** When set, this variable contains a default from address. It + ** can be overridden using my_hdr (including from send-hooks) and + ** ``$$reverse_name''. This variable is ignored if ``$$use_from'' + ** is unset. + ** .pp + ** Defaults to the contents of the environment variable EMAIL. + */ + { "gecos_mask", DT_RX, R_NONE, UL &GecosMask, UL "^[^,]*" }, + /* + ** .pp + ** A regular expression used by mutt to parse the GECOS field of a password + ** entry when expanding the alias. By default the regular expression is set + ** to "^[^,]*" which will return the string up to the first "," encountered. + ** If the GECOS field contains a string like "lastname, firstname" then you + ** should set the gecos_mask=".*". + ** .pp + ** This can be useful if you see the following behavior: you address a e-mail + ** to user ID stevef whose full name is Steve Franklin. If mutt expands + ** stevef to "Franklin" stevef@foo.bar then you should set the gecos_mask to + ** a regular expression that will match the whole name so mutt will expand + ** "Franklin" to "Franklin, Steve". + */ +#ifdef USE_NNTP + { "group_index_format", DT_STR, R_BOTH, UL &GroupFormat, UL "%4C %M%N %5s %-45.45f %d" }, + /* + ** .pp + ** This variable allows you to customize the newsgroup browser display to + ** your personal taste. This string is similar to ``$index_format'', but + ** has its own set of printf()-like sequences: + ** .pp + ** .ts + ** %C current newsgroup number + ** %d description of newsgroup (becomes from server) + ** %f newsgroup name + ** %M - if newsgroup not allowed for direct post (moderated for example) + ** %N N if newsgroup is new, u if unsubscribed, blank otherwise + ** %n number of new articles in newsgroup + ** %s number of unread articles in newsgroup + ** %>X right justify the rest of the string and pad with character "X" + ** %|X pad to the end of the line with character "X" + ** .te + */ +#endif + { "hdr_format", DT_SYN, R_NONE, UL "index_format", 0 }, + /* + */ + { "hdrs", DT_BOOL, R_NONE, OPTHDRS, 1 }, + /* + ** .pp + ** When unset, the header fields normally added by the ``$my_hdr'' + ** command are not created. This variable \fImust\fP be unset before + ** composing a new message or replying in order to take effect. If set, + ** the user defined header fields are added to every new message. + */ + { "header", DT_BOOL, R_NONE, OPTHEADER, 0 }, + /* + ** .pp + ** When set, this variable causes Mutt to include the header + ** of the message you are replying to into the edit buffer. + ** The ``$$weed'' setting applies. + */ + { "help", DT_BOOL, R_BOTH, OPTHELP, 1 }, + /* + ** .pp + ** When set, help lines describing the bindings for the major functions + ** provided by each menu are displayed on the first line of the screen. + ** .pp + ** \fBNote:\fP The binding will not be displayed correctly if the + ** function is bound to a sequence rather than a single keystroke. Also, + ** the help line may not be updated if a binding is changed while Mutt is + ** running. Since this variable is primarily aimed at new users, neither + ** of these should present a major problem. + */ + { "hidden_host", DT_BOOL, R_NONE, OPTHIDDENHOST, 0 }, + /* + ** .pp + ** When set, mutt will skip the host name part of ``$$hostname'' variable + ** when adding the domain part to addresses. This variable does not + ** affect the generation of Message-IDs, and it will not lead to the + ** cut-off of first-level domains. + */ + { "hide_limited", DT_BOOL, R_TREE|R_INDEX, OPTHIDELIMITED, 0 }, + /* + ** .pp + ** When set, mutt will not show the presence of messages that are hidden + ** by limiting, in the thread tree. + */ + { "hide_missing", DT_BOOL, R_TREE|R_INDEX, OPTHIDEMISSING, 1 }, + /* + ** .pp + ** When set, mutt will not show the presence of missing messages in the + ** thread tree. + */ + { "hide_top_limited", DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPLIMITED, 0 }, + /* + ** .pp + ** When set, mutt will not show the presence of messages that are hidden + ** by limiting, at the top of threads in the thread tree. Note that when + ** $$hide_missing is set, this option will have no effect. + */ + { "hide_top_missing", DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPMISSING, 1 }, + /* + ** .pp + ** When set, mutt will not show the presence of missing messages at the + ** top of threads in the thread tree. Note that when $$hide_limited is + ** set, this option will have no effect. + */ + { "history", DT_NUM, R_NONE, UL &HistSize, 10 }, + /* + ** .pp + ** This variable controls the size (in number of strings remembered) of + ** the string history buffer. The buffer is cleared each time the + ** variable is set. + */ + { "honor_followup_to", DT_QUAD, R_NONE, OPT_MFUPTO, M_YES }, + /* + ** .pp + ** This variable controls whether or not a Mail-Followup-To header is + ** honored when group-replying to a message. + */ + { "hostname", DT_STR, R_NONE, UL &Fqdn, 0 }, + /* + ** .pp + ** Specifies the hostname to use after the ``@'' in local e-mail + ** addresses. This overrides the compile time definition obtained from + ** /etc/resolv.conf. + */ + { "ignore_list_reply_to", DT_BOOL, R_NONE, OPTIGNORELISTREPLYTO, 0 }, + /* + ** .pp + ** Affects the behaviour of the \fIreply\fP function when replying to + ** messages from mailing lists. When set, if the ``Reply-To:'' field is + ** set to the same value as the ``To:'' field, Mutt assumes that the + ** ``Reply-To:'' field was set by the mailing list to automate responses + ** to the list, and will ignore this field. To direct a response to the + ** mailing list when this option is set, use the \fIlist-reply\fP + ** function; \fIgroup-reply\fP will reply to both the sender and the + ** list. + */ +#ifdef USE_IMAP + { "imap_authenticators", DT_STR, R_NONE, UL &ImapAuthenticators, UL 0 }, + /* + ** .pp + ** This is a colon-delimited list of authentication methods mutt may + ** attempt to use to log in to an IMAP server, in the order mutt should + ** try them. Authentication methods are either 'login' or the right + ** side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', + ** 'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this + ** parameter is unset (the default) mutt will try all available methods, + ** in order from most-secure to least-secure. + ** .pp + ** Example: set imap_authenticators="gssapi:cram-md5:login" + ** .pp + ** \fBNote:\fP Mutt will only fall back to other authentication methods if + ** the previous methods are unavailable. If a method is available but + ** authentication fails, mutt will not connect to the IMAP server. + */ + { "imap_delim_chars", DT_STR, R_NONE, UL &ImapDelimChars, UL "/." }, + /* + ** .pp + ** This contains the list of characters which you would like to treat + ** as folder separators for displaying IMAP paths. In particular it + ** helps in using the '=' shortcut for your \fIfolder\fP variable. + */ +# ifdef USE_SSL + { "imap_force_ssl", DT_BOOL, R_NONE, OPTIMAPFORCESSL, 0 }, + /* + ** .pp + ** If this variable is set, Mutt will always use SSL when + ** connecting to IMAP servers. + */ +# endif + { "imap_home_namespace", DT_STR, R_NONE, UL &ImapHomeNamespace, UL 0}, + /* + ** .pp + ** You normally want to see your personal folders alongside + ** your INBOX in the IMAP browser. If you see something else, you may set + ** this variable to the IMAP path to your folders. + */ + { "imap_keepalive", DT_NUM, R_NONE, UL &ImapKeepalive, 900 }, + /* + ** .pp + ** This variable specifies the maximum amount of time in seconds that mutt + ** will wait before polling open IMAP connections, to prevent the server + ** from closing them before mutt has finished with them. The default is + ** well within the RFC-specified minimum amount of time (30 minutes) before + ** a server is allowed to do this, but in practice the RFC does get + ** violated every now and then. Reduce this number if you find yourself + ** getting disconnected from your IMAP server due to inactivity. + */ + { "imap_list_subscribed", DT_BOOL, R_NONE, OPTIMAPLSUB, 0 }, + /* + ** .pp + ** This variable configures whether IMAP folder browsing will look for + ** only subscribed folders or all folders. This can be toggled in the + ** IMAP browser with the \fItoggle-subscribed\fP function. + */ + { "imap_pass", DT_STR, R_NONE, UL &ImapPass, UL 0 }, + /* + ** .pp + ** Specifies the password for your IMAP account. If unset, Mutt will + ** prompt you for your password when you invoke the fetch-mail function. + ** \fBWarning\fP: you should only use this option when you are on a + ** fairly secure machine, because the superuser can read your muttrc even + ** if you are the only one who can read the file. + */ + { "imap_passive", DT_BOOL, R_NONE, OPTIMAPPASSIVE, 1 }, + /* + ** .pp + ** When set, mutt will not open new IMAP connections to check for new + ** mail. Mutt will only check for new mail over existing IMAP + ** connections. This is useful if you don't want to be prompted to + ** user/password pairs on mutt invocation, or if opening the connection + ** is slow. + */ + { "imap_peek", DT_BOOL, R_NONE, OPTIMAPPEEK, 1 }, + /* + ** .pp + ** If set, mutt will avoid implicitly marking your mail as read whenever + ** you fetch a message from the server. This is generally a good thing, + ** but can make closing an IMAP folder somewhat slower. This option + ** exists to appease speed freaks. + */ + { "imap_servernoise", DT_BOOL, R_NONE, OPTIMAPSERVERNOISE, 1 }, + /* + ** .pp + ** When set, mutt will display warning messages from the IMAP + ** server as error messages. Since these messages are often + ** harmless, or generated due to configuration problems on the + ** server which are out of the users' hands, you may wish to suppress + ** them at some point. + */ + { "imap_user", DT_STR, R_NONE, UL &ImapUser, UL 0 }, + /* + ** .pp + ** Your login name on the IMAP server. + ** .pp + ** This variable defaults to your user name on the local machine. + */ +#endif + { "implicit_autoview", DT_BOOL,R_NONE, OPTIMPLICITAUTOVIEW, 0}, + /* + ** .pp + ** If set to ``yes'', mutt will look for a mailcap entry with the + ** copiousoutput flag set for \fIevery\fP MIME attachment it doesn't have + ** an internal viewer defined for. If such an entry is found, mutt will + ** use the viewer defined in that entry to convert the body part to text + ** form. + */ + { "include", DT_QUAD, R_NONE, OPT_INCLUDE, M_ASKYES }, + /* + ** .pp + ** Controls whether or not a copy of the message(s) you are replying to + ** is included in your reply. + */ + { "indent_string", DT_STR, R_NONE, UL &Prefix, UL "> " }, + /* + ** .pp + ** Specifies the string to prepend to each line of text quoted in a + ** message to which you are replying. You are strongly encouraged not to + ** change this value, as it tends to agitate the more fanatical netizens. + */ + { "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 (%?l?%4l&%4c?) %s" }, + /* + ** .pp + ** This variable allows you to customize the message index display to + ** your personal taste. + ** .pp + ** ``Format strings'' are similar to the strings used in the ``C'' + ** function printf to format output (see the man page for more detail). + ** The following sequences are defined in Mutt: + ** .pp + ** .dl + ** .dt %a .dd address of the author + ** .dt %A .dd reply-to address (if present; otherwise: address of author) + ** .dt %b .dd filename of the original message folder (think mailBox) + ** .dt %B .dd the list to which the letter was sent, or else the folder name (%b). + ** .dt %c .dd number of characters (bytes) in the message + ** .dt %C .dd current message number + ** .dt %d .dd date and time of the message in the format specified by + ** ``date_format'' converted to sender's time zone + ** .dt %D .dd date and time of the message in the format specified by + ** ``date_format'' converted to the local time zone + ** .dt %e .dd current message number in thread + ** .dt %E .dd number of messages in current thread + ** .dt %f .dd entire From: line (address + real name) + ** .dt %F .dd author name, or recipient name if the message is from you + ** .dt %g .dd newsgroup name (if compiled with nntp support) + ** .dt %i .dd message-id of the current message + ** .dt %l .dd number of lines in the message (does not work with maildir, + ** mh, and possibly IMAP folders) + ** .dt %L .dd If an address in the To or CC header field matches an address + ** defined by the users ``subscribe'' command, this displays + ** "To <list-name>", otherwise the same as %F. + ** .dt %m .dd total number of message in the mailbox + ** .dt %M .dd number of hidden messages if the thread is collapsed. + ** .dt %N .dd message score + ** .dt %n .dd author's real name (or address if missing) + ** .dt %O .dd (_O_riginal save folder) Where mutt would formerly have + ** stashed the message: list name or recipient name if no list + ** .dt %s .dd subject of the message + ** .dt %S .dd status of the message (N/D/d/!/r/\(as) + ** .dt %t .dd `to:' field (recipients) + ** .dt %T .dd the appropriate character from the $$to_chars string + ** .dt %u .dd user (login) name of the author + ** .dt %v .dd first name of the author, or the recipient if the message is from you + ** .dt %W .dd name of organization of author (`organization:' field) + ** .dt %y .dd `x-label:' field, if present + ** .dt %Y .dd `x-label' field, if present, and (1) not at part of a thread tree, + ** (2) at the top of a thread, or (3) `x-label' is different from + ** preceding message's `x-label'. + ** .dt %Z .dd message status flags + ** .dt %{fmt} .dd the date and time of the message is converted to sender's + ** time zone, and ``fmt'' is expanded by the library function + ** ``strftime''; a leading bang disables locales + ** .dt %[fmt] .dd the date and time of the message is converted to the local + ** time zone, and ``fmt'' is expanded by the library function + ** ``strftime''; a leading bang disables locales + ** .dt %(fmt) .dd the local date and time when the message was received. + ** ``fmt'' is expanded by the library function ``strftime''; + ** a leading bang disables locales + ** .dt %<fmt> .dd the current local time. ``fmt'' is expanded by the library + ** function ``strftime''; a leading bang disables locales. + ** .dt %>X .dd right justify the rest of the string and pad with character "X" + ** .dt %|X .dd pad to the end of the line with character "X" + ** .de + ** .pp + ** See also: ``$$to_chars''. + */ +#ifdef USE_NNTP + { "inews", DT_PATH, R_NONE, UL &Inews, UL "" }, + /* + ** .pp + ** If set, specifies the program and arguments used to deliver news posted + ** by Mutt. Otherwise, mutt posts article using current connection to + ** news server. The following printf-style sequence is understood: + ** .pp + ** .ts + ** %s newsserver name + ** .te + ** .pp + ** Example: set inews="/usr/local/bin/inews -hS" + */ +#endif + { "ispell", DT_PATH, R_NONE, UL &Ispell, UL ISPELL }, + /* + ** .pp + ** How to invoke ispell (GNU's spell-checking software). + */ + { "keep_flagged", DT_BOOL, R_NONE, OPTKEEPFLAGGED, 0 }, + /* + ** .pp + ** If set, read messages marked as flagged will not be moved + ** from your spool mailbox to your ``$$mbox'' mailbox, or as a result of + ** a ``$mbox-hook'' command. + */ + { "locale", DT_STR, R_BOTH, UL &Locale, UL "C" }, + /* + ** .pp + ** The locale used by \fIstrftime(3)\fP to format dates. Legal values are + ** the strings your system accepts for the locale variable \fILC_TIME\fP. + */ + { "list_reply", DT_QUAD, R_NONE, OPT_LISTREPLY, M_NO }, + /* + ** .pp + ** When set, address replies to the mailing list the original message came + ** from (instead to the author only). Setting this option to ``ask-yes'' or + ** ``ask-no'' will ask if you really intended to reply to the author only. + */ + { "mail_check", DT_NUM, R_NONE, UL &BuffyTimeout, 5 }, + /* + ** .pp + ** This variable configures how often (in seconds) mutt should look for + ** new mail. + */ + { "mailcap_path", DT_STR, R_NONE, UL &MailcapPath, 0 }, + /* + ** .pp + ** This variable specifies which files to consult when attempting to + ** display MIME bodies not directly supported by Mutt. + */ + { "mailcap_sanitize", DT_BOOL, R_NONE, OPTMAILCAPSANITIZE, 1 }, + /* + ** .pp + ** If set, mutt will restrict possible characters in mailcap % expandos + ** to a well-defined set of safe characters. This is the safe setting, + ** but we are not sure it doesn't break some more advanced MIME stuff. + ** .pp + ** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE + ** DOING!\fP + */ + { "maildir_trash", DT_BOOL, R_NONE, OPTMAILDIRTRASH, 0 }, + /* + ** .pp + ** If set, messages marked as deleted will be saved with the maildir + ** (T)rashed flag instead of unlinked. \fBNOTE:\fP this only applies + ** to maildir-style mailboxes. Setting it will have no effect on other + ** mailbox types. + */ + { "mark_old", DT_BOOL, R_BOTH, OPTMARKOLD, 1 }, + /* + ** .pp + ** Controls whether or not mutt marks \fInew\fP \fBunread\fP + ** messages as \fIold\fP if you exit a mailbox without reading them. + ** With this option set, the next time you start mutt, the messages + ** will show up with an "O" next to them in the index menu, + ** indicating that they are old. + */ + { "markers", DT_BOOL, R_PAGER, OPTMARKERS, 1 }, + /* + ** .pp + ** Controls the display of wrapped lines in the internal pager. If set, a + ** ``+'' marker is displayed at the beginning of wrapped lines. Also see + ** the ``$$smart_wrap'' variable. + */ + { "mask", DT_RX, R_NONE, UL &Mask, UL "!^\\.[^.]" }, + /* + ** .pp + ** A regular expression used in the file browser, optionally preceded by + ** the \fInot\fP operator ``!''. Only files whose names match this mask + ** will be shown. The match is always case-sensitive. + */ + { "mbox", DT_PATH, R_BOTH, UL &Inbox, UL "~/mbox" }, + /* + ** .pp + ** This specifies the folder into which read mail in your ``$$spoolfile'' + ** folder will be appended. + */ + { "mbox_type", DT_MAGIC,R_NONE, UL &DefaultMagic, M_MBOX }, + /* + ** .pp + ** The default mailbox type used when creating new folders. May be any of + ** mbox, MMDF, MH and Maildir. + */ + { "metoo", DT_BOOL, R_NONE, OPTMETOO, 0 }, + /* + ** .pp + ** If unset, Mutt will remove your address (see the ``alternates'' + ** command) from the list of recipients when replying to a message. + */ + { "menu_scroll", DT_BOOL, R_NONE, OPTMENUSCROLL, 0 }, + /* + ** .pp + ** When \fIset\fP, menus will be scrolled up or down one line when you + ** attempt to move across a screen boundary. If \fIunset\fP, the screen + ** is cleared and the next or previous page of the menu is displayed + ** (useful for slow links to avoid many redraws). + */ + { "meta_key", DT_BOOL, R_NONE, OPTMETAKEY, 0 }, + /* + ** .pp + ** If set, forces Mutt to interpret keystrokes with the high bit (bit 8) + ** set as if the user had pressed the ESC key and whatever key remains + ** after having the high bit removed. For example, if the key pressed + ** has an ASCII value of 0xf4, then this is treated as if the user had + ** pressed ESC then ``x''. This is because the result of removing the + ** high bit from ``0xf4'' is ``0x74'', which is the ASCII character + ** ``x''. + */ + { "mh_purge", DT_BOOL, R_NONE, OPTMHPURGE, 0 }, + /* + ** .pp + ** When unset, mutt will mimic mh's behaviour and rename deleted messages + ** to \fI,<old file name>\fP in mh folders instead of really deleting + ** them. If the variable is set, the message files will simply be + ** deleted. + */ + { "mh_seq_flagged", DT_STR, R_NONE, UL &MhFlagged, UL "flagged" }, + /* + ** .pp + ** The name of the MH sequence used for flagged messages. + */ + { "mh_seq_replied", DT_STR, R_NONE, UL &MhReplied, UL "replied" }, + /* + ** .pp + ** The name of the MH sequence used to tag replied messages. + */ + { "mh_seq_unseen", DT_STR, R_NONE, UL &MhUnseen, UL "unseen" }, + /* + ** .pp + ** The name of the MH sequence used for unseen messages. + */ + { "mime_forward", DT_QUAD, R_NONE, OPT_MIMEFWD, M_NO }, + /* + ** .pp + ** When set, the message you are forwarding will be attached as a + ** separate MIME part instead of included in the main body of the + ** message. This is useful for forwarding MIME messages so the receiver + ** can properly view the message as it was delivered to you. If you like + ** to switch between MIME and not MIME from mail to mail, set this + ** variable to ask-no or ask-yes. + ** .pp + ** Also see ``$$forward_decode'' and ``$$mime_forward_decode''. + */ + { "mime_forward_decode", DT_BOOL, R_NONE, OPTMIMEFORWDECODE, 0 }, + /* + ** .pp + ** Controls the decoding of complex MIME messages into text/plain when + ** forwarding a message while ``$$mime_forward'' is \fIset\fP. Otherwise + ** ``$$forward_decode'' is used instead. + */ + { "mime_fwd", DT_SYN, R_NONE, UL "mime_forward", 0 }, + /* + */ + + { "mime_forward_rest", DT_QUAD, R_NONE, OPT_MIMEFWDREST, M_YES }, + /* + ** .pp + ** When forwarding multiple attachments of a MIME message from the recvattach + ** menu, attachments which cannot be decoded in a reasonable manner will + ** be attached to the newly composed message if this option is set. + */ + +#ifdef USE_NNTP + { "mime_subject", DT_BOOL, R_NONE, OPTMIMESUBJECT, 1 }, + /* + ** .pp + ** If \fIunset\fP, 8-bit ``subject:'' line in article header will not be + ** encoded according to RFC2047 to base64. This is useful when message + ** is Usenet article, because MIME for news is nonstandard feature. + */ +#endif + +#ifdef MIXMASTER + { "mix_entry_format", DT_STR, R_NONE, UL &MixEntryFormat, UL "%4n %c %-16s %a" }, + /* + ** .pp + ** This variable describes the format of a remailer line on the mixmaster + ** chain selection screen. The following printf-like sequences are + ** supported: + ** .pp + ** .dl + ** .dt %n .dd The running number on the menu. + ** .dt %c .dd Remailer capabilities. + ** .dt %s .dd The remailer's short name. + ** .dt %a .dd The remailer's e-mail address. + ** .de + */ + { "mixmaster", DT_PATH, R_NONE, UL &Mixmaster, UL MIXMASTER }, + /* + ** .pp + ** This variable contains the path to the Mixmaster binary on your + ** system. It is used with various sets of parameters to gather the + ** list of known remailers, and to finally send a message through the + ** mixmaster chain. + */ +#endif + + + { "move", DT_QUAD, R_NONE, OPT_MOVE, M_ASKNO }, + /* + ** .pp + ** Controls whether you will be asked to confirm moving read messages + ** from your spool mailbox to your ``$$mbox'' mailbox, or as a result of + ** a ``$mbox-hook'' command. + */ + { "message_format", DT_STR, R_NONE, UL &MsgFmt, UL "%s" }, + /* + ** .pp + ** This is the string displayed in the ``attachment'' menu for + ** attachments of type message/rfc822. For a full listing of defined + ** printf()-like sequences see the section on ``$$index_format''. + */ + { "msg_format", DT_SYN, R_NONE, UL "message_format", 0 }, + /* + */ + { "narrow_tree", DT_BOOL, R_TREE|R_INDEX, OPTNARROWTREE, 0 }, + /* + ** .pp + ** This variable, when set, makes the thread tree narrower, allowing + ** deeper threads to fit on the screen. + */ +#ifdef USE_NNTP + { "news_cache_dir", DT_PATH, R_NONE, UL &NewsCacheDir, UL "~/.mutt" }, + /* + ** .pp + ** This variable pointing to directory where Mutt will save cached news + ** articles headers in. If \fIunset\fP, headers will not be saved at all + ** and will be reloaded each time when you enter to newsgroup. + */ + { "news_server", DT_STR, R_NONE, UL &NewsServer, 0 }, + /* + ** .pp + ** This variable specifies domain name or address of NNTP server. It + ** defaults to the newsserver specified in the environment variable + ** $$$NNTPSERVER or contained in the file /etc/nntpserver. You can also + ** specify username and an alternative port for each newsserver, ie: + ** .pp + ** [nntp[s]://][username[:password]@]newsserver[:port] + */ + { "newsrc", DT_PATH, R_NONE, UL &NewsRc, UL "~/.newsrc" }, + /* + ** .pp + ** The file, containing info about subscribed newsgroups - names and + ** indexes of read articles. The following printf-style sequence + ** is understood: + ** .pp + ** .ts + ** %s newsserver name + ** .te + */ + { "nntp_context", DT_NUM, R_NONE, UL &NntpContext, 1000 }, + /* + ** .pp + ** This variable defines number of articles which will be in index when + ** newsgroup entered. If active newsgroup have more articles than this + ** number, oldest articles will be ignored. Also controls how many + ** articles headers will be saved in cache when you quit newsgroup. + */ + { "nntp_load_description", DT_BOOL, R_NONE, OPTLOADDESC, 1 }, + /* + ** .pp + ** This variable controls whether or not descriptions for each newsgroup + ** must be loaded when newsgroup is added to list (first time list + ** loading or new newsgroup adding). + */ + { "nntp_user", DT_STR, R_NONE, UL &NntpUser, UL "" }, + /* + ** .pp + ** Your login name on the NNTP server. If \fIunset\fP and NNTP server requires + ** authentification, Mutt will prompt you for your account name when you + ** connect to newsserver. + */ + { "nntp_pass", DT_STR, R_NONE, UL &NntpPass, UL "" }, + /* + ** .pp + ** Your password for NNTP account. + */ + { "nntp_poll", DT_NUM, R_NONE, UL &NewsPollTimeout, 60 }, + /* + ** .pp + ** The time in seconds until any operations on newsgroup except post new + ** article will cause recheck for new news. If set to 0, Mutt will + ** recheck newsgroup on each operation in index (stepping, read article, + ** etc.). + */ + { "nntp_reconnect", DT_QUAD, R_NONE, OPT_NNTPRECONNECT, M_ASKYES }, + /* + ** .pp + ** Controls whether or not Mutt will try to reconnect to newsserver when + ** connection lost. + */ +#endif + { "pager", DT_PATH, R_NONE, UL &Pager, UL "builtin" }, + /* + ** .pp + ** This variable specifies which pager you would like to use to view + ** messages. builtin means to use the builtin pager, otherwise this + ** variable should specify the pathname of the external pager you would + ** like to use. + ** .pp + ** Using an external pager may have some disadvantages: Additional + ** keystrokes are necessary because you can't call mutt functions + ** directly from the pager, and screen resizes cause lines longer than + ** the screen width to be badly formatted in the help menu. + */ + { "pager_context", DT_NUM, R_NONE, UL &PagerContext, 0 }, + /* + ** .pp + ** This variable controls the number of lines of context that are given + ** when displaying the next or previous page in the internal pager. By + ** default, Mutt will display the line after the last one on the screen + ** at the top of the next page (0 lines of context). + */ + { "pager_format", DT_STR, R_PAGER, UL &PagerFmt, UL "-%Z- %C/%m: %-20.20n %s" }, + /* + ** .pp + ** This variable controls the format of the one-line message ``status'' + ** displayed before each message in either the internal or an external + ** pager. The valid sequences are listed in the ``$$index_format'' + ** section. + */ + { "pager_index_lines",DT_NUM, R_PAGER, UL &PagerIndexLines, 0 }, + /* + ** .pp + ** Determines the number of lines of a mini-index which is shown when in + ** the pager. The current message, unless near the top or bottom of the + ** folder, will be roughly one third of the way down this mini-index, + ** giving the reader the context of a few messages before and after the + ** message. This is useful, for example, to determine how many messages + ** remain to be read in the current thread. One of the lines is reserved + ** for the status bar from the index, so a \fIpager_index_lines\fP of 6 + ** will only show 5 lines of the actual index. A value of 0 results in + ** no index being shown. If the number of messages in the current folder + ** is less than \fIpager_index_lines\fP, then the index will only use as + ** many lines as it needs. + */ + { "pager_stop", DT_BOOL, R_NONE, OPTPAGERSTOP, 0 }, + /* + ** .pp + ** When set, the internal-pager will \fBnot\fP move to the next message + ** when you are at the end of a message and invoke the \fInext-page\fP + ** function. + */ + { "pgp_autosign", DT_SYN, R_NONE, UL "crypt_autosign", 0 }, + { "crypt_autosign", DT_BOOL, R_NONE, OPTCRYPTAUTOSIGN, 0 }, + /* + ** .pp + ** Setting this variable will cause Mutt to always attempt to + ** cryptographically sign outgoing messages. This can be overridden + ** by use of the \fIpgp-menu\fP, when signing is not required or + ** encryption is requested as well. If ``$$smime_is_default'' is set, + ** then OpenSSL is used instead to create S/MIME messages and settings can + ** be overridden by use of the \fIsmime-menu\fP. + ** (Crypto only) + */ + { "pgp_autoencrypt", DT_SYN, R_NONE, UL "crypt_autoencrypt", 0 }, + { "crypt_autoencrypt", DT_BOOL, R_NONE, OPTCRYPTAUTOENCRYPT, 0 }, + /* + ** .pp + ** Setting this variable will cause Mutt to always attempt to PGP + ** encrypt outgoing messages. This is probably only useful in + ** connection to the \fIsend-hook\fP command. It can be overridden + ** by use of the \fIpgp-menu\fP, when encryption is not required or + ** signing is requested as well. IF ``$$smime_is_default'' is set, + ** then OpenSSL is used instead to create S/MIME messages and + ** settings can be overridden by use of the \fIsmime-menu\fP. + ** (Crypto only) + */ + { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1}, + /* + ** .pp + ** Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead, + ** the principal key will inherit the subkeys' capabilities. Unset this + ** if you want to play interesting key selection games. + ** (PGP only) + */ + { "pgp_replyencrypt", DT_SYN, R_NONE, UL "crypt_replyencrypt", 1 }, + { "crypt_replyencrypt", DT_BOOL, R_NONE, OPTCRYPTREPLYENCRYPT, 1 }, + /* + ** .pp + ** If set, automatically PGP or OpenSSL encrypt replies to messages which are + ** encrypted. + ** (Crypto only) + */ + { "pgp_replysign", DT_SYN, R_NONE, UL "crypt_replysign", 0 }, + { "crypt_replysign", DT_BOOL, R_NONE, OPTCRYPTREPLYSIGN, 0 }, + /* + ** .pp + ** If set, automatically PGP or OpenSSL sign replies to messages which are + ** signed. + ** .pp + ** \fBNote:\fP this does not work on messages that are encrypted + ** \fBand\fP signed! + ** (Crypto only) + */ + { "pgp_replysignencrypted", DT_SYN, R_NONE, UL "crypt_replysignencrypted", 0}, + { "crypt_replysignencrypted", DT_BOOL, R_NONE, OPTCRYPTREPLYSIGNENCRYPTED, 0 }, + /* + ** .pp + ** If set, automatically PGP or OpenSSL sign replies to messages + ** which are encrypted. This makes sense in combination with + ** ``$$crypt_replyencrypt'', because it allows you to sign all + ** messages which are automatically encrypted. This works around + ** the problem noted in ``$$crypt_replysign'', that mutt is not able + ** to find out whether an encrypted message is also signed. + ** (Crypto only) + */ + { "crypt_timestamp", DT_BOOL, R_NONE, OPTCRYPTTIMESTAMP, 1 }, + /* + ** .pp + ** If set, mutt will include a time stamp in the lines surrounding + ** PGP or S/MIME output, so spoofing such lines is more difficult. + ** If you are using colors to mark these lines, and rely on these, + ** you may unset this setting. + ** (Crypto only) + */ + { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, + /* + ** .pp + ** If set, mutt will use a possibly-running gpg-agent process. + ** (PGP only) + */ + { "pgp_verify_sig", DT_SYN, R_NONE, UL "crypt_verify_sig", 0}, + { "crypt_verify_sig", DT_QUAD, R_NONE, OPT_VERIFYSIG, M_YES }, + /* + ** .pp + ** If ``yes'', always attempt to verify PGP or S/MIME signatures. + ** If ``ask'', ask whether or not to verify the signature. + ** If ``no'', never attempt to verify cryptographic signatures. + ** (Crypto only) + */ + { "smime_is_default", DT_BOOL, R_NONE, OPTSMIMEISDEFAULT, 0}, + /* + ** .pp + ** The default behaviour of mutt is to use PGP on all auto-sign/encryption + ** operations. To override and to use OpenSSL instead this must be set. + ** However, this has no effect while replying, since mutt will automatically + ** select the same application that was used to sign/encrypt the original + ** message. (Note that this variable can be overridden by unsetting $$crypt_autosmime.) + ** (S/MIME only) + */ + { "smime_ask_cert_label", DT_BOOL, R_NONE, OPTASKCERTLABEL, 1 }, + /* + ** .pp + ** This flag controls whether you want to be asked to enter a label + ** for a certificate about to be added to the database or not. It is + ** set by default. + ** (S/MIME only) + */ + { "smime_decrypt_use_default_key", DT_BOOL, R_NONE, OPTSDEFAULTDECRYPTKEY, 1 }, + /* + ** .pp + ** If set (default) this tells mutt to use the default key for decryption. Otherwise, + ** if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address + ** to determine the key to use. It will ask you to supply a key, if it can't find one. + ** (S/MIME only) + */ + { "pgp_entry_format", DT_STR, R_NONE, UL &PgpEntryFormat, UL "%4n %t%f %4l/0x%k %-4a %2c %u" }, + /* + ** .pp + ** This variable allows you to customize the PGP key selection menu to + ** your personal taste. This string is similar to ``$$index_format'', but + ** has its own set of printf()-like sequences: + ** .pp + ** .dl + ** .dt %n .dd number + ** .dt %k .dd key id + ** .dt %u .dd user id + ** .dt %a .dd algorithm + ** .dt %l .dd key length + ** .dt %f .dd flags + ** .dt %c .dd capabilities + ** .dt %t .dd trust/validity of the key-uid association + ** .dt %[<s>] .dd date of the key where <s> is an strftime(3) expression + ** .de + ** .pp + ** (PGP only) + */ + { "pgp_good_sign", DT_RX, R_NONE, UL &PgpGoodSign, 0 }, + /* + ** .pp + ** If you assign a text to this variable, then a PGP signature is only + ** considered verified if the output from $$pgp_verify_command contains + ** the text. Use this variable if the exit code from the command is 0 + ** even for bad signatures. + ** (PGP only) + */ + { "pgp_check_exit", DT_BOOL, R_NONE, OPTPGPCHECKEXIT, 1 }, + /* + ** .pp + ** If set, mutt will check the exit code of the PGP subprocess when + ** signing or encrypting. A non-zero exit code means that the + ** subprocess failed. + ** (PGP only) + */ + { "pgp_long_ids", DT_BOOL, R_NONE, OPTPGPLONGIDS, 0 }, + /* + ** .pp + ** If set, use 64 bit PGP key IDs. Unset uses the normal 32 bit Key IDs. + ** (PGP only) + */ + { "pgp_retainable_sigs", DT_BOOL, R_NONE, OPTPGPRETAINABLESIG, 0 }, + /* + ** .pp + ** If set, signed and encrypted messages will consist of nested + ** multipart/signed and multipart/encrypted body parts. + ** .pp + ** This is useful for applications like encrypted and signed mailing + ** lists, where the outer layer (multipart/encrypted) can be easily + ** removed, while the inner multipart/signed part is retained. + ** (PGP only) + */ + { "pgp_show_unusable", DT_BOOL, R_NONE, OPTPGPSHOWUNUSABLE, 1 }, + /* + ** .pp + ** If set, mutt will display non-usable keys on the PGP key selection + ** menu. This includes keys which have been revoked, have expired, or + ** have been marked as ``disabled'' by the user. + ** (PGP only) + */ + { "pgp_sign_as", DT_STR, R_NONE, UL &PgpSignAs, 0 }, + /* + ** .pp + ** If you have more than one key pair, this option allows you to specify + ** which of your private keys to use. It is recommended that you use the + ** keyid form to specify your key (e.g., ``0x00112233''). + ** (PGP only) + */ + { "pgp_strict_enc", DT_BOOL, R_NONE, OPTPGPSTRICTENC, 1 }, + /* + ** .pp + ** If set, Mutt will automatically encode PGP/MIME signed messages as + ** \fIquoted-printable\fP. Please note that unsetting this variable may + ** lead to problems with non-verifyable PGP signatures, so only change + ** this if you know what you are doing. + ** (PGP only) + */ + { "pgp_timeout", DT_NUM, R_NONE, UL &PgpTimeout, 300 }, + /* + ** .pp + ** The number of seconds after which a cached passphrase will expire if + ** not used. + ** (PGP only) + */ + { "pgp_sort_keys", DT_SORT|DT_SORT_KEYS, R_NONE, UL &PgpSortKeys, SORT_ADDRESS }, + /* + ** .pp + ** Specifies how the entries in the `pgp keys' menu are sorted. The + ** following are legal values: + ** .pp + ** .dl + ** .dt address .dd sort alphabetically by user id + ** .dt keyid .dd sort alphabetically by key id + ** .dt date .dd sort by key creation date + ** .dt trust .dd sort by the trust of the key + ** .de + ** .pp + ** If you prefer reverse order of the above values, prefix it with + ** `reverse-'. + ** (PGP only) + */ + { "pgp_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO }, + /* + ** .pp + ** This option controls whether Mutt generates old-style inline PGP + ** encrypted or signed messages. + ** .pp + ** Note that PGP/MIME will be used automatically for messages which have + ** a character set different from us-ascii, or which consist of more than + ** a single MIME part. + ** .pp + ** Also note that using the old-style PGP message format is \fBstrongly\fP + ** \fBdeprecated\fP. + ** (PGP only) + */ + { "pgp_auto_traditional", DT_BOOL, R_NONE, OPTPGPAUTOTRAD, 0 }, + /* + ** .pp + ** This option causes Mutt to generate an old-style inline PGP + ** encrypted or signed message when replying to an old-style + ** message, and a PGP/MIME message when replying to a PGP/MIME + ** message. Note that this option is only meaningful when using + ** ``$$crypt_replyencrypt'', ``$$crypt_replysign'', or + ** ``$$crypt_replysignencrypted''. + ** .pp + ** Also note that PGP/MIME will be used automatically for messages + ** which have a character set different from us-ascii, or which + ** consist of more than a single MIME part. + ** .pp + ** This option overrides ``$$pgp_create_traditional'' + ** (PGP only) + */ + + /* XXX Default values! */ + + { "pgp_decode_command", DT_STR, R_NONE, UL &PgpDecodeCommand, 0}, + /* + ** .pp + ** This format strings specifies a command which is used to decode + ** application/pgp attachments. + ** .pp + ** The PGP command formats have their own set of printf-like sequences: + ** .pp + ** .dl + ** .dt %p .dd Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty + ** string otherwise. Note: This may be used with a %? construct. + ** .dt %f .dd Expands to the name of a file containing a message. + ** .dt %s .dd Expands to the name of a file containing the signature part + ** . of a multipart/signed attachment when verifying it. + ** .dt %a .dd The value of $$pgp_sign_as. + ** .dt %r .dd One or more key IDs. + ** .de + ** .pp + ** For examples on how to configure these formats for the various versions + ** of PGP which are floating around, see the pgp*.rc and gpg.rc files in + ** the samples/ subdirectory which has been installed on your system + ** alongside the documentation. + ** (PGP only) + */ + { "pgp_getkeys_command", DT_STR, R_NONE, UL &PgpGetkeysCommand, 0}, + /* + ** .pp + ** This command is invoked whenever mutt will need public key information. + ** %r is the only printf-like sequence used with this format. + ** (PGP only) + */ + { "pgp_verify_command", DT_STR, R_NONE, UL &PgpVerifyCommand, 0}, + /* + ** .pp + ** This command is used to verify PGP signatures. + ** (PGP only) + */ + { "pgp_decrypt_command", DT_STR, R_NONE, UL &PgpDecryptCommand, 0}, + /* + ** .pp + ** This command is used to decrypt a PGP encrypted message. + ** (PGP only) + */ + { "pgp_clearsign_command", DT_STR, R_NONE, UL &PgpClearSignCommand, 0 }, + /* + ** .pp + ** This format is used to create a old-style "clearsigned" PGP + ** message. Note that the use of this format is \fBstrongly\fP + ** \fBdeprecated\fP. + ** (PGP only) + */ + { "pgp_sign_command", DT_STR, R_NONE, UL &PgpSignCommand, 0}, + /* + ** .pp + ** This command is used to create the detached PGP signature for a + ** multipart/signed PGP/MIME body part. + ** (PGP only) + */ + { "pgp_encrypt_sign_command", DT_STR, R_NONE, UL &PgpEncryptSignCommand, 0}, + /* + ** .pp + ** This command is used to both sign and encrypt a body part. + ** (PGP only) + */ + { "pgp_encrypt_only_command", DT_STR, R_NONE, UL &PgpEncryptOnlyCommand, 0}, + /* + ** .pp + ** This command is used to encrypt a body part without signing it. + ** (PGP only) + */ + { "pgp_import_command", DT_STR, R_NONE, UL &PgpImportCommand, 0}, + /* + ** .pp + ** This command is used to import a key from a message into + ** the user's public key ring. + ** (PGP only) + */ + { "pgp_export_command", DT_STR, R_NONE, UL &PgpExportCommand, 0}, + /* + ** .pp + ** This command is used to export a public key from the user's + ** key ring. + ** (PGP only) + */ + { "pgp_verify_key_command", DT_STR, R_NONE, UL &PgpVerifyKeyCommand, 0}, + /* + ** .pp + ** This command is used to verify key information from the key selection + ** menu. + ** (PGP only) + */ + { "pgp_list_secring_command", DT_STR, R_NONE, UL &PgpListSecringCommand, 0}, + /* + ** .pp + ** This command is used to list the secret key ring's contents. The + ** output format must be analogous to the one used by + ** gpg --list-keys --with-colons. + ** .pp + ** This format is also generated by the pgpring utility which comes + ** with mutt. + ** (PGP only) + */ + { "pgp_list_pubring_command", DT_STR, R_NONE, UL &PgpListPubringCommand, 0}, + /* + ** .pp + ** This command is used to list the public key ring's contents. The + ** output format must be analogous to the one used by + ** gpg --list-keys --with-colons. + ** .pp + ** This format is also generated by the pgpring utility which comes + ** with mutt. + ** (PGP only) + */ + { "forward_decrypt", DT_BOOL, R_NONE, OPTFORWDECRYPT, 1 }, + /* + ** .pp + ** Controls the handling of encrypted messages when forwarding a message. + ** When set, the outer layer of encryption is stripped off. This + ** variable is only used if ``$$mime_forward'' is \fIset\fP and + ** ``$$mime_forward_decode'' is \fIunset\fP. + ** (PGP only) + */ + { "forw_decrypt", DT_SYN, R_NONE, UL "forward_decrypt", 0 }, + /* + */ + + { "smime_timeout", DT_NUM, R_NONE, UL &SmimeTimeout, 300 }, + /* + ** .pp + ** The number of seconds after which a cached passphrase will expire if + ** not used. + ** (S/MIME only) + */ + { "smime_encrypt_with", DT_STR, R_NONE, UL &SmimeCryptAlg, 0 }, + /* + ** .pp + ** This sets the algorithm that should be used for encryption. + ** Valid choices are "des", "des3", "rc2-40", "rc2-64", "rc2-128". + ** If unset "3des" (TripleDES) is used. + ** (S/MIME only) + */ + { "smime_keys", DT_PATH, R_NONE, UL &SmimeKeys, 0 }, + /* + ** .pp + ** Since there is no pubring/secring as with PGP, mutt has to handle + ** storage ad retrieval of keys/certs by itself. This is very basic right now, + ** and stores keys and certificates in two different directories, both + ** named as the hash-value retrieved from OpenSSL. There is an index file + ** which contains mailbox-address keyid pair, and which can be manually + ** edited. This one points to the location of the private keys. + ** (S/MIME only) + */ + { "smime_ca_location", DT_PATH, R_NONE, UL &SmimeCALocation, 0 }, + /* + ** .pp + ** This variable contains the name of either a directory, or a file which + ** contains trusted certificates for use with OpenSSL. + ** (S/MIME only) + */ + { "smime_certificates", DT_PATH, R_NONE, UL &SmimeCertificates, 0 }, + /* + ** .pp + ** Since there is no pubring/secring as with PGP, mutt has to handle + ** storage and retrieval of keys by itself. This is very basic right + ** now, and keys and certificates are stored in two different + ** directories, both named as the hash-value retrieved from + ** OpenSSL. There is an index file which contains mailbox-address + ** keyid pairs, and which can be manually edited. This one points to + ** the location of the certificates. + ** (S/MIME only) + */ + { "smime_decrypt_command", DT_STR, R_NONE, UL &SmimeDecryptCommand, 0}, + /* + ** .pp + ** This format string specifies a command which is used to decrypt + ** application/x-pkcs7-mime attachments. + ** .pp + ** The OpenSSL command formats have their own set of printf-like sequences + ** similar to PGP's: + ** .pp + ** .dl + ** .dt %f .dd Expands to the name of a file containing a message. + ** .dt %s .dd Expands to the name of a file containing the signature part + ** . of a multipart/signed attachment when verifying it. + ** .dt %k .dd The key-pair specified with $$smime_default_key + ** .dt %c .dd One or more certificate IDs. + ** .dt %a .dd The algorithm used for encryption. + ** .dt %C .dd CA location: Depending on whether $$smime_ca_location + ** . points to a directory or file, this expands to + ** . "-CApath $$smime_ca_location" or "-CAfile $$smime_ca_location". + ** .de + ** .pp + ** For examples on how to configure these formats, see the smime.rc in + ** the samples/ subdirectory which has been installed on your system + ** alongside the documentation. + ** (S/MIME only) + */ + { "smime_verify_command", DT_STR, R_NONE, UL &SmimeVerifyCommand, 0}, + /* + ** .pp + ** This command is used to verify S/MIME signatures of type multipart/signed. + ** (S/MIME only) + */ + { "smime_verify_opaque_command", DT_STR, R_NONE, UL &SmimeVerifyOpaqueCommand, 0}, + /* + ** .pp + ** This command is used to verify S/MIME signatures of type + ** application/x-pkcs7-mime. + ** (S/MIME only) + */ + { "smime_sign_command", DT_STR, R_NONE, UL &SmimeSignCommand, 0}, + /* + ** .pp + ** This command is used to created S/MIME signatures of type + ** multipart/signed, which can be read by all mail clients. + ** (S/MIME only) + */ + { "smime_sign_opaque_command", DT_STR, R_NONE, UL &SmimeSignOpaqueCommand, 0}, + /* + ** .pp + ** This command is used to created S/MIME signatures of type + ** application/x-pkcs7-signature, which can only be handled by mail + ** clients supporting the S/MIME extension. + ** (S/MIME only) + */ + { "smime_encrypt_command", DT_STR, R_NONE, UL &SmimeEncryptCommand, 0}, + /* + ** .pp + ** This command is used to create encrypted S/MIME messages. + ** (S/MIME only) + */ + { "smime_pk7out_command", DT_STR, R_NONE, UL &SmimePk7outCommand, 0}, + /* + ** .pp + ** This command is used to extract PKCS7 structures of S/MIME signatures, + ** in order to extract the public X509 certificate(s). + ** (S/MIME only) + */ + { "smime_get_cert_command", DT_STR, R_NONE, UL &SmimeGetCertCommand, 0}, + /* + ** .pp + ** This command is used to extract X509 certificates from a PKCS7 structure. + ** (S/MIME only) + */ + { "smime_get_signer_cert_command", DT_STR, R_NONE, UL &SmimeGetSignerCertCommand, 0}, + /* + ** .pp + ** This command is used to extract only the signers X509 certificate from a S/MIME + ** signature, so that the certificate's owner may get compared to the email's + ** 'From'-field. + ** (S/MIME only) + */ + { "smime_import_cert_command", DT_STR, R_NONE, UL &SmimeImportCertCommand, 0}, + /* + ** .pp + ** This command is used to import a certificate via smime_keys. + ** (S/MIME only) + */ + { "smime_get_cert_email_command", DT_STR, R_NONE, UL &SmimeGetCertEmailCommand, 0}, + /* + ** .pp + ** This command is used to extract the mail address(es) used for storing + ** X509 certificates, and for verification purposes (to check whether the + ** certificate was issued for the sender's mailbox). + ** (S/MIME only) + */ + { "smime_sign_as", DT_SYN, R_NONE, UL "smime_default_key", 0 }, + { "smime_default_key", DT_STR, R_NONE, UL &SmimeDefaultKey, 0 }, + /* + ** .pp + ** This is the default key-pair to use for signing. This must be set to the + ** keyid (the hash-value that OpenSSL generates) to work properly + ** (S/MIME only) + */ +#if defined(USE_LIBESMTP) + { "smtp_auth_username", DT_STR, R_NONE, UL &SmtpAuthUser, 0 }, + /* + ** .pp + ** Defines the username to use with SMTP AUTH. Setting this variable will + ** cause mutt to attempt to use SMTP AUTH when sending. + */ + { "smtp_auth_password", DT_STR, R_NONE, UL &SmtpAuthPass, 0 }, + /* + ** .pp + ** Defines the password to use with SMTP AUTH. If ``$$smtp_auth_username'' + ** is set, but this variable is not, you will be prompted for a password + ** when sending. + */ + { "smtp_host", DT_STR, R_NONE, UL &SmtpHost, 0 }, + /* + ** .pp + ** Defines the SMTP host which will be used to deliver mail, as opposed + ** to invoking the sendmail binary. Setting this variable overrides the + ** value of ``$$sendmail'', and any associated variables. + */ + { "smtp_port", DT_NUM, R_NONE, UL &SmtpPort, 25 }, + /* + ** .pp + ** Defines the port that the SMTP host is listening on for mail delivery. + ** Must be specified as a number. + ** .pp + ** Defaults to 25, the standard SMTP port, but RFC 2476-compliant SMTP + ** servers will probably desire 587, the mail submission port. + */ +#endif + +#if defined(USE_SSL)||defined(USE_NSS) +# ifndef USE_NSS + { "ssl_starttls", DT_QUAD, R_NONE, OPT_SSLSTARTTLS, M_YES }, + /* + ** .pp + ** If set (the default), mutt will attempt to use STARTTLS on servers + ** advertising the capability. When unset, mutt will not attempt to + ** use STARTTLS regardless of the server's capabilities. + */ +# endif + { "certificate_file", DT_PATH, R_NONE, UL &SslCertFile, 0 }, + /* + ** .pp + ** This variable specifies the file where the certificates you trust + ** are saved. When an unknown certificate is encountered, you are asked + ** if you accept it or not. If you accept it, the certificate can also + ** be saved in this file and further connections are automatically + ** accepted. + ** .pp + ** You can also manually add CA certificates in this file. Any server + ** certificate that is signed with one of these CA certificates are + ** also automatically accepted. + ** .pp + ** Example: set certificate_file=~/.mutt/certificates + */ + { "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 }, + /* + ** .pp + ** If set to \fIyes\fP, mutt will use CA certificates in the + ** system-wide certificate store when checking if server certificate + ** is signed by a trusted CA. + */ + { "entropy_file", DT_PATH, R_NONE, UL &SslEntropyFile, 0 }, + /* + ** .pp + ** The file which includes random data that is used to initialize SSL + ** library functions. + */ + { "ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, 1 }, + /* + ** .pp + ** This variables specifies whether to attempt to use SSLv2 in the + ** SSL authentication process. + */ + { "ssl_use_sslv3", DT_BOOL, R_NONE, OPTSSLV3, 1 }, + /* + ** .pp + ** This variables specifies whether to attempt to use SSLv3 in the + ** SSL authentication process. + */ + { "ssl_use_tlsv1", DT_BOOL, R_NONE, OPTTLSV1, 1 }, + /* + ** .pp + ** This variables specifies whether to attempt to use TLSv1 in the + ** SSL authentication process. + */ +#endif + + { "pipe_split", DT_BOOL, R_NONE, OPTPIPESPLIT, 0 }, + /* + ** .pp + ** Used in connection with the \fIpipe-message\fP command and the ``tag- + ** prefix'' operator. If this variable is unset, when piping a list of + ** tagged messages Mutt will concatenate the messages and will pipe them + ** as a single folder. When set, Mutt will pipe the messages one by one. + ** In both cases the messages are piped in the current sorted order, + ** and the ``$$pipe_sep'' separator is added after each message. + */ + { "pipe_decode", DT_BOOL, R_NONE, OPTPIPEDECODE, 0 }, + /* + ** .pp + ** Used in connection with the \fIpipe-message\fP command. When unset, + ** Mutt will pipe the messages without any preprocessing. When set, Mutt + ** will weed headers and will attempt to PGP/MIME decode the messages + ** first. + */ + { "pipe_sep", DT_STR, R_NONE, UL &PipeSep, UL "\n" }, + /* + ** .pp + ** The separator to add between messages when piping a list of tagged + ** messages to an external Unix command. + */ +#ifdef USE_POP + { "pop_authenticators", DT_STR, R_NONE, UL &PopAuthenticators, UL 0 }, + /* + ** .pp + ** This is a colon-delimited list of authentication methods mutt may + ** attempt to use to log in to an POP server, in the order mutt should + ** try them. Authentication methods are either 'user', 'apop' or any + ** SASL mechanism, eg 'digest-md5', 'gssapi' or 'cram-md5'. + ** This parameter is case-insensitive. If this parameter is unset + ** (the default) mutt will try all available methods, in order from + ** most-secure to least-secure. + ** .pp + ** Example: set pop_authenticators="digest-md5:apop:user" + */ + { "pop_auth_try_all", DT_BOOL, R_NONE, OPTPOPAUTHTRYALL, 1 }, + /* + ** .pp + ** If set, Mutt will try all available methods. When unset, Mutt will + ** only fall back to other authentication methods if the previous + ** methods are unavailable. If a method is available but authentication + ** fails, Mutt will not connect to the POP server. + */ + { "pop_checkinterval", DT_NUM, R_NONE, UL &PopCheckTimeout, 60 }, + /* + ** .pp + ** This variable configures how often (in seconds) POP should look for + ** new mail. + */ + { "pop_delete", DT_QUAD, R_NONE, OPT_POPDELETE, M_ASKNO }, + /* + ** .pp + ** If set, Mutt will delete successfully downloaded messages from the POP + ** server when using the fetch-mail function. When unset, Mutt will + ** download messages but also leave them on the POP server. + */ + { "pop_host", DT_STR, R_NONE, UL &PopHost, UL "" }, + /* + ** .pp + ** The name of your POP server for the fetch-mail function. You + ** can also specify an alternative port, username and password, ie: + ** .pp + ** [pop[s]://][username[:password]@]popserver[:port] + */ + { "pop_last", DT_BOOL, R_NONE, OPTPOPLAST, 0 }, + /* + ** .pp + ** If this variable is set, mutt will try to use the "LAST" POP command + ** for retrieving only unread messages from the POP server when using + ** the fetch-mail function. + */ + { "pop_reconnect", DT_QUAD, R_NONE, OPT_POPRECONNECT, M_ASKYES }, + /* + ** .pp + ** Controls whether or not Mutt will try to reconnect to POP server when + ** connection lost. + */ + { "pop_user", DT_STR, R_NONE, UL &PopUser, 0 }, + /* + ** .pp + ** Your login name on the POP server. + ** .pp + ** This variable defaults to your user name on the local machine. + */ + { "pop_pass", DT_STR, R_NONE, UL &PopPass, UL "" }, + /* + ** .pp + ** Specifies the password for your POP account. If unset, Mutt will + ** prompt you for your password when you open POP mailbox. + ** \fBWarning\fP: you should only use this option when you are on a + ** fairly secure machine, because the superuser can read your muttrc + ** even if you are the only one who can read the file. + */ +#endif /* USE_POP */ + { "post_indent_string",DT_STR, R_NONE, UL &PostIndentString, UL "" }, + /* + ** .pp + ** Similar to the ``$$attribution'' variable, Mutt will append this + ** string after the inclusion of a message which is being replied to. + */ + { "post_indent_str", DT_SYN, R_NONE, UL "post_indent_string", 0 }, + /* + */ +#ifdef USE_NNTP + { "post_moderated", DT_QUAD, R_NONE, OPT_TOMODERATED, M_ASKYES }, + /* + ** .pp + ** If set to \fIyes\fP, Mutt will post article to newsgroup that have + ** not permissions to posting (e.g. moderated). \fBNote:\fP if newsserver + ** does not support posting to that newsgroup or totally read-only, that + ** posting will not have an effect. + */ +#endif + { "postpone", DT_QUAD, R_NONE, OPT_POSTPONE, M_ASKYES }, + /* + ** .pp + ** Controls whether or not messages are saved in the ``$$postponed'' + ** mailbox when you elect not to send immediately. + */ + { "postponed", DT_PATH, R_NONE, UL &Postponed, UL "~/postponed" }, + /* + ** .pp + ** Mutt allows you to indefinitely ``$postpone sending a message'' which + ** you are editing. When you choose to postpone a message, Mutt saves it + ** in the mailbox specified by this variable. Also see the ``$$postpone'' + ** variable. + */ +#ifdef USE_SOCKET + { "preconnect", DT_STR, R_NONE, UL &Preconnect, UL 0}, + /* + ** .pp + ** If set, a shell command to be executed if mutt fails to establish + ** a connection to the server. This is useful for setting up secure + ** connections, e.g. with ssh(1). If the command returns a nonzero + ** status, mutt gives up opening the server. Example: + ** .pp + ** preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net + ** sleep 20 < /dev/null > /dev/null" + ** .pp + ** Mailbox 'foo' on mailhost.net can now be reached + ** as '{localhost:1234}foo'. + ** .pp + ** NOTE: For this example to work, you must be able to log in to the + ** remote machine without having to enter a password. + */ +#endif /* USE_SOCKET */ + { "print", DT_QUAD, R_NONE, OPT_PRINT, M_ASKNO }, + /* + ** .pp + ** Controls whether or not Mutt asks for confirmation before printing. + ** This is useful for people (like me) who accidentally hit ``p'' often. + */ + { "print_command", DT_PATH, R_NONE, UL &PrintCmd, UL "lpr" }, + /* + ** .pp + ** This specifies the command pipe that should be used to print messages. + */ + { "print_cmd", DT_SYN, R_NONE, UL "print_command", 0 }, + /* + */ + { "print_decode", DT_BOOL, R_NONE, OPTPRINTDECODE, 1 }, + /* + ** .pp + ** Used in connection with the print-message command. If this + ** option is set, the message is decoded before it is passed to the + ** external command specified by $$print_command. If this option + ** is unset, no processing will be applied to the message when + ** printing it. The latter setting may be useful if you are using + ** some advanced printer filter which is able to properly format + ** e-mail messages for printing. + */ + { "print_split", DT_BOOL, R_NONE, OPTPRINTSPLIT, 0 }, + /* + ** .pp + ** Used in connection with the print-message command. If this option + ** is set, the command specified by $$print_command is executed once for + ** each message which is to be printed. If this option is unset, + ** the command specified by $$print_command is executed only once, and + ** all the messages are concatenated, with a form feed as the message + ** separator. + ** .pp + ** Those who use the \fBenscript\fP(1) program's mail-printing mode will + ** most likely want to set this option. + */ + { "prompt_after", DT_BOOL, R_NONE, OPTPROMPTAFTER, 1 }, + /* + ** .pp + ** If you use an \fIexternal\fP ``$$pager'', setting this variable will + ** cause Mutt to prompt you for a command when the pager exits rather + ** than returning to the index menu. If unset, Mutt will return to the + ** index menu when the external pager exits. + */ + { "query_command", DT_PATH, R_NONE, UL &QueryCmd, UL "" }, + /* + ** .pp + ** This specifies the command that mutt will use to make external address + ** queries. The string should contain a %s, which will be substituted + ** with the query string the user types. See ``$query'' for more + ** information. + */ + { "quit", DT_QUAD, R_NONE, OPT_QUIT, M_YES }, + /* + ** .pp + ** This variable controls whether ``quit'' and ``exit'' actually quit + ** from mutt. If it set to yes, they do quit, if it is set to no, they + ** have no effect, and if it is set to ask-yes or ask-no, you are + ** prompted for confirmation when you try to quit. + */ + { "quote_empty", DT_BOOL, R_NONE, OPTQUOTEEMPTY, 1 }, + /* + ** .pp + ** Controls whether or not empty lines will be quoted using + ** ``$indent_string''. + */ + { "quote_quoted", DT_BOOL, R_NONE, OPTQUOTEQUOTED, 0 }, + /* + ** .pp + ** Controls how quoted lines will be quoted. If set, one quote + ** character will be added to the end of existing prefix. Otherwise, + ** quoted lines will be prepended by ``$indent_string''. + */ + { "quote_regexp", DT_RX, R_PAGER, UL &QuoteRegexp, UL "^([ \t]*[|>:}#])+" }, + /* + ** .pp + ** A regular expression used in the internal-pager to determine quoted + ** sections of text in the body of a message. + ** .pp + ** \fBNote:\fP In order to use the \fIquoted\fP\fBx\fP patterns in the + ** internal pager, you need to set this to a regular expression that + ** matches \fIexactly\fP the quote characters at the beginning of quoted + ** lines. + */ + { "read_inc", DT_NUM, R_NONE, UL &ReadInc, 10 }, + /* + ** .pp + ** If set to a value greater than 0, Mutt will display which message it + ** is currently on when reading a mailbox. The message is printed after + ** \fIread_inc\fP messages have been read (e.g., if set to 25, Mutt will + ** print a message when it reads message 25, and then again when it gets + ** to message 50). This variable is meant to indicate progress when + ** reading large mailboxes which may take some time. + ** When set to 0, only a single message will appear before the reading + ** the mailbox. + ** .pp + ** Also see the ``$$write_inc'' variable. + */ + { "read_only", DT_BOOL, R_NONE, OPTREADONLY, 0 }, + /* + ** .pp + ** If set, all folders are opened in read-only mode. + */ + { "realname", DT_STR, R_BOTH, UL &Realname, 0 }, + /* + ** .pp + ** This variable specifies what "real" or "personal" name should be used + ** when sending messages. + ** .pp + ** By default, this is the GECOS field from /etc/passwd. Note that this + ** variable will \fInot\fP be used when the user has set a real name + ** in the $$from variable. + */ + { "recall", DT_QUAD, R_NONE, OPT_RECALL, M_ASKYES }, + /* + ** .pp + ** Controls whether or not you are prompted to recall postponed messages + ** when composing a new message. Also see ``$$postponed''. + ** .pp + ** Setting this variable to ``yes'' is not generally useful, and thus not + ** recommended. + */ + { "record", DT_PATH, R_NONE, UL &Outbox, UL "" }, + /* + ** .pp + ** This specifies the file into which your outgoing messages should be + ** appended. (This is meant as the primary method for saving a copy of + ** your messages, but another way to do this is using the ``$my_hdr'' + ** command to create a \fIBcc:\fP field with your email address in it.) + ** .pp + ** The value of \fI$$record\fP is overridden by the ``$$force_name'' and + ** ``$$save_name'' variables, and the ``$fcc-hook'' command. + */ + { "reply_regexp", DT_RX, R_INDEX|R_RESORT, UL &ReplyRegexp, UL "^(re([\\[0-9\\]+])*|aw):[ \t]*" }, + /* + ** .pp + ** A regular expression used to recognize reply messages when threading + ** and replying. The default value corresponds to the English "Re:" and + ** the German "Aw:". + */ + { "reply_self", DT_BOOL, R_NONE, OPTREPLYSELF, 0 }, + /* + ** .pp + ** If unset and you are replying to a message sent by you, Mutt will + ** assume that you want to reply to the recipients of that message rather + ** than to yourself. + */ + { "reply_to", DT_QUAD, R_NONE, OPT_REPLYTO, M_ASKYES }, + /* + ** .pp + ** If set, Mutt will ask you if you want to use the address listed in the + ** Reply-To: header field when replying to a message. If you answer no, + ** it will use the address in the From: header field instead. This + ** option is useful for reading a mailing list that sets the Reply-To: + ** header field to the list address and you want to send a private + ** message to the author of a message. + */ + { "resolve", DT_BOOL, R_NONE, OPTRESOLVE, 1 }, + /* + ** .pp + ** When set, the cursor will be automatically advanced to the next + ** (possibly undeleted) message whenever a command that modifies the + ** current message is executed. + */ + { "reverse_alias", DT_BOOL, R_BOTH, OPTREVALIAS, 0 }, + /* + ** .pp + ** This variable controls whether or not Mutt will display the "personal" + ** name from your aliases in the index menu if it finds an alias that + ** matches the message's sender. For example, if you have the following + ** alias: + ** .pp + ** .ts + ** alias juser abd30425@somewhere.net (Joe User) + ** .te + ** .pp + ** and then you receive mail which contains the following header: + ** .pp + ** .ts + ** From: abd30425@somewhere.net + ** .te + ** .pp + ** It would be displayed in the index menu as ``Joe User'' instead of + ** ``abd30425@somewhere.net.'' This is useful when the person's e-mail + ** address is not human friendly (like CompuServe addresses). + */ + { "reverse_name", DT_BOOL, R_BOTH, OPTREVNAME, 0 }, + /* + ** .pp + ** It may sometimes arrive that you receive mail to a certain machine, + ** move the messages to another machine, and reply to some the messages + ** from there. If this variable is set, the default \fIFrom:\fP line of + ** the reply messages is built using the address where you received the + ** messages you are replying to. If the variable is unset, the + ** \fIFrom:\fP line will use your address on the current machine. + */ + { "reverse_realname", DT_BOOL, R_BOTH, OPTREVREAL, 1 }, + /* + ** .pp + ** This variable fine-tunes the behaviour of the $reverse_name feature. + ** When it is set, mutt will use the address from incoming messages as-is, + ** possibly including eventual real names. When it is unset, mutt will + ** override any such real names with the setting of the $realname variable. + */ + { "rfc2047_parameters", DT_BOOL, R_NONE, OPTRFC2047PARAMS, 0 }, + /* + ** .pp + ** When this variable is set, Mutt will decode RFC-2047-encoded MIME + ** parameters. You want to set this variable when mutt suggests you + ** to save attachments to files named like this: + ** =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?= + ** .pp + ** When this variable is set interactively, the change doesn't have + ** the desired effect before you have changed folders. + ** .pp + ** Note that this use of RFC 2047's encoding is explicitly, + ** prohibited by the standard, but nevertheless encountered in the + ** wild. + ** Also note that setting this parameter will \fInot\fP have the effect + ** that mutt \fIgenerates\fP this kind of encoding. Instead, mutt will + ** unconditionally use the encoding specified in RFC 2231. + */ + { "save_address", DT_BOOL, R_NONE, OPTSAVEADDRESS, 0 }, + /* + ** .pp + ** If set, mutt will take the sender's full address when choosing a + ** default folder for saving a mail. If ``$$save_name'' or ``$$force_name'' + ** is set too, the selection of the fcc folder will be changed as well. + */ + { "save_empty", DT_BOOL, R_NONE, OPTSAVEEMPTY, 1 }, + /* + ** .pp + ** When unset, mailboxes which contain no saved messages will be removed + ** when closed (the exception is ``$$spoolfile'' which is never removed). + ** If set, mailboxes are never removed. + ** .pp + ** \fBNote:\fP This only applies to mbox and MMDF folders, Mutt does not + ** delete MH and Maildir directories. + */ + { "save_name", DT_BOOL, R_NONE, OPTSAVENAME, 0 }, + /* + ** .pp + ** This variable controls how copies of outgoing messages are saved. + ** When set, a check is made to see if a mailbox specified by the + ** recipient address exists (this is done by searching for a mailbox in + ** the ``$$folder'' directory with the \fIusername\fP part of the + ** recipient address). If the mailbox exists, the outgoing message will + ** be saved to that mailbox, otherwise the message is saved to the + ** ``$$record'' mailbox. + ** .pp + ** Also see the ``$$force_name'' variable. + */ + { "score", DT_BOOL, R_NONE, OPTSCORE, 1 }, + /* + ** .pp + ** When this variable is \fIunset\fP, scoring is turned off. This can + ** be useful to selectively disable scoring for certain folders when the + ** ``$$score_threshold_delete'' variable and friends are used. + ** + */ + { "score_threshold_delete", DT_NUM, R_NONE, UL &ScoreThresholdDelete, UL -1 }, + /* + ** .pp + ** Messages which have been assigned a score equal to or lower than the value + ** of this variable are automatically marked for deletion by mutt. Since + ** mutt scores are always greater than or equal to zero, the default setting + ** of this variable will never mark a message for deletion. + */ + { "score_threshold_flag", DT_NUM, R_NONE, UL &ScoreThresholdFlag, 9999 }, + /* + ** .pp + ** Messages which have been assigned a score greater than or equal to this + ** variable's value are automatically marked "flagged". + */ + { "score_threshold_read", DT_NUM, R_NONE, UL &ScoreThresholdRead, UL -1 }, + /* + ** .pp + ** Messages which have been assigned a score equal to or lower than the value + ** of this variable are automatically marked as read by mutt. Since + ** mutt scores are always greater than or equal to zero, the default setting + ** of this variable will never mark a message read. + */ + { "send_charset", DT_STR, R_NONE, UL &SendCharset, UL "us-ascii:iso-8859-1:utf-8" }, + /* + ** .pp + ** A list of character sets for outgoing messages. Mutt will use the + ** first character set into which the text can be converted exactly. + ** If your ``$$charset'' is not iso-8859-1 and recipients may not + ** understand UTF-8, it is advisable to include in the list an + ** appropriate widely used standard character set (such as + ** iso-8859-2, koi8-r or iso-2022-jp) either instead of or after + ** "iso-8859-1". + */ + { "sendmail", DT_PATH, R_NONE, UL &Sendmail, UL SENDMAIL " -oem -oi" }, + /* + ** .pp + ** Specifies the program and arguments used to deliver mail sent by Mutt. + ** Mutt expects that the specified program interprets additional + ** arguments as recipient addresses. + */ + { "sendmail_wait", DT_NUM, R_NONE, UL &SendmailWait, 0 }, + /* + ** .pp + ** Specifies the number of seconds to wait for the ``$$sendmail'' process + ** to finish before giving up and putting delivery in the background. + ** .pp + ** Mutt interprets the value of this variable as follows: + ** .dl + ** .dt >0 .dd number of seconds to wait for sendmail to finish before continuing + ** .dt 0 .dd wait forever for sendmail to finish + ** .dt <0 .dd always put sendmail in the background without waiting + ** .de + ** .pp + ** Note that if you specify a value other than 0, the output of the child + ** process will be put in a temporary file. If there is some error, you + ** will be informed as to where to find the output. + */ + { "shell", DT_PATH, R_NONE, UL &Shell, 0 }, + /* + ** .pp + ** Command to use when spawning a subshell. By default, the user's login + ** shell from /etc/passwd is used. + */ +#ifdef USE_NNTP + { "save_unsubscribed",DT_BOOL, R_NONE, OPTSAVEUNSUB, 0 }, + /* + ** .pp + ** When \fIset\fP, info about unsubscribed newsgroups will be saved into + ** ``newsrc'' file and into cache. + */ + { "show_new_news", DT_BOOL, R_NONE, OPTSHOWNEWNEWS, 1 }, + /* + ** .pp + ** If \fIset\fP, newsserver will be asked for new newsgroups on entering + ** the browser. Otherwise, it will be done only once for a newsserver. + ** Also controls whether or not number of new articles of subscribed + ** newsgroups will be then checked. + */ + { "show_only_unread", DT_BOOL, R_NONE, OPTSHOWONLYUNREAD, 0 }, + /* + ** .pp + ** If \fIset\fP, only subscribed newsgroups that contain unread articles + ** will be displayed in browser. + */ +#endif + { "sig_dashes", DT_BOOL, R_NONE, OPTSIGDASHES, 1 }, + /* + ** .pp + ** If set, a line containing ``-- '' will be inserted before your + ** ``$$signature''. It is \fBstrongly\fP recommended that you not unset + ** this variable unless your ``signature'' contains just your name. The + ** reason for this is because many software packages use ``-- \n'' to + ** detect your signature. For example, Mutt has the ability to highlight + ** the signature in a different color in the builtin pager. + */ + { "sig_on_top", DT_BOOL, R_NONE, OPTSIGONTOP, 0}, + /* + ** .pp + ** If set, the signature will be included before any quoted or forwarded + ** text. It is \fBstrongly\fP recommended that you do not set this variable + ** unless you really know what you are doing, and are prepared to take + ** some heat from netiquette guardians. + */ + { "signature", DT_PATH, R_NONE, UL &Signature, UL "~/.signature" }, + /* + ** .pp + ** Specifies the filename of your signature, which is appended to all + ** outgoing messages. If the filename ends with a pipe (``|''), it is + ** assumed that filename is a shell command and input should be read from + ** its stdout. + */ + { "simple_search", DT_STR, R_NONE, UL &SimpleSearch, UL "~f %s | ~s %s" }, + /* + ** .pp + ** Specifies how Mutt should expand a simple search into a real search + ** pattern. A simple search is one that does not contain any of the ~ + ** operators. See ``$patterns'' for more information on search patterns. + ** .pp + ** For example, if you simply type joe at a search or limit prompt, Mutt + ** will automatically expand it to the value specified by this variable. + ** For the default value it would be: + ** .pp + ** ~f joe | ~s joe + */ + { "smart_wrap", DT_BOOL, R_PAGER, OPTWRAP, 1 }, + /* + ** .pp + ** Controls the display of lines longer than the screen width in the + ** internal pager. If set, long lines are wrapped at a word boundary. If + ** unset, lines are simply wrapped at the screen edge. Also see the + ** ``$$markers'' variable. + */ + { "smileys", DT_RX, R_PAGER, UL &Smileys, UL "(>From )|(:[-^]?[][)(><}{|/DP])" }, + /* + ** .pp + ** The \fIpager\fP uses this variable to catch some common false + ** positives of ``$$quote_regexp'', most notably smileys in the beginning + ** of a line + */ + { "sleep_time", DT_NUM, R_NONE, UL &SleepTime, 1 }, + /* + ** .pp + ** Specifies time, in seconds, to pause while displaying certain informational + ** messages, while moving from folder to folder and after expunging + ** messages from the current folder. The default is to pause one second, so + ** a value of zero for this option suppresses the pause. + */ + { "sort", DT_SORT, R_INDEX|R_RESORT, UL &Sort, SORT_DATE }, + /* + ** .pp + ** Specifies how to sort messages in the \fIindex\fP menu. Valid values + ** are: + ** .pp + ** .ts + ** . date or date-sent + ** . date-received + ** . from + ** . mailbox-order (unsorted) + ** . score + ** . size + ** . subject + ** . threads + ** . to + ** .te + ** .pp + ** You may optionally use the reverse- prefix to specify reverse sorting + ** order (example: set sort=reverse-date-sent). + */ + { "sort_alias", DT_SORT|DT_SORT_ALIAS, R_NONE, UL &SortAlias, SORT_ALIAS }, + /* + ** .pp + ** Specifies how the entries in the `alias' menu are sorted. The + ** following are legal values: + ** .pp + ** .ts + ** . address (sort alphabetically by email address) + ** . alias (sort alphabetically by alias name) + ** . unsorted (leave in order specified in .muttrc) + ** .te + */ + { "sort_aux", DT_SORT|DT_SORT_AUX, R_INDEX|R_RESORT_BOTH, UL &SortAux, SORT_DATE }, + /* + ** .pp + ** When sorting by threads, this variable controls how threads are sorted + ** in relation to other threads, and how the branches of the thread trees + ** are sorted. This can be set to any value that ``$$sort'' can, except + ** threads (in that case, mutt will just use date-sent). You can also + ** specify the last- prefix in addition to the reverse- prefix, but last- + ** must come after reverse-. The last- prefix causes messages to be + ** sorted against its siblings by which has the last descendant, using + ** the rest of sort_aux as an ordering. For instance, set sort_aux=last- + ** date-received would mean that if a new message is received in a + ** thread, that thread becomes the last one displayed (or the first, if + ** you have set sort=reverse-threads.) Note: For reversed ``$$sort'' + ** order $$sort_aux is reversed again (which is not the right thing to do, + ** but kept to not break any existing configuration setting). + */ + { "sort_browser", DT_SORT|DT_SORT_BROWSER, R_NONE, UL &BrowserSort, SORT_SUBJECT }, + /* + ** .pp + ** Specifies how to sort entries in the file browser. By default, the + ** entries are sorted alphabetically. Valid values: + ** .pp + ** .ts + ** . alpha (alphabetically) + ** . date + ** . size + ** . unsorted + ** .te + ** .pp + ** You may optionally use the reverse- prefix to specify reverse sorting + ** order (example: set sort_browser=reverse-date). + */ + { "sort_re", DT_BOOL, R_INDEX|R_RESORT|R_RESORT_INIT, OPTSORTRE, 1 }, + /* + ** .pp + ** This variable is only useful when sorting by threads with + ** ``$$strict_threads'' unset. In that case, it changes the heuristic + ** mutt uses to thread messages by subject. With sort_re set, mutt will + ** only attach a message as the child of another message by subject if + ** the subject of the child message starts with a substring matching the + ** setting of ``$$reply_regexp''. With sort_re unset, mutt will attach + ** the message whether or not this is the case, as long as the + ** non-``$$reply_regexp'' parts of both messages are identical. + */ + { "spoolfile", DT_PATH, R_NONE, UL &Spoolfile, 0 }, + /* + ** .pp + ** If your spool mailbox is in a non-default place where Mutt cannot find + ** it, you can specify its location with this variable. Mutt will + ** automatically set this variable to the value of the environment + ** variable $$$MAIL if it is not set. + */ + { "status_chars", DT_STR, R_BOTH, UL &StChars, UL "-*%A" }, + /* + ** .pp + ** Controls the characters used by the "%r" indicator in + ** ``$$status_format''. The first character is used when the mailbox is + ** unchanged. The second is used when the mailbox has been changed, and + ** it needs to be resynchronized. The third is used if the mailbox is in + ** read-only mode, or if the mailbox will not be written when exiting + ** that mailbox (You can toggle whether to write changes to a mailbox + ** with the toggle-write operation, bound by default to "%"). The fourth + ** is used to indicate that the current folder has been opened in attach- + ** message mode (Certain operations like composing a new mail, replying, + ** forwarding, etc. are not permitted in this mode). + */ + { "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)---" }, + /* + ** .pp + ** Controls the format of the status line displayed in the \fIindex\fP + ** menu. This string is similar to ``$$index_format'', but has its own + ** set of printf()-like sequences: + ** .pp + ** .dl + ** .dt %b .dd number of mailboxes with new mail * + ** .dt %d .dd number of deleted messages * + ** .dt %f .dd the full pathname of the current mailbox + ** .dt %F .dd number of flagged messages * + ** .dt %h .dd local hostname + ** .dt %l .dd size (in bytes) of the current mailbox * + ** .dt %L .dd size (in bytes) of the messages shown + ** (i.e., which match the current limit) * + ** .dt %m .dd the number of messages in the mailbox * + ** .dt %M .dd the number of messages shown (i.e., which match the current limit) * + ** .dt %n .dd number of new messages in the mailbox * + ** .dt %o .dd number of old unread messages + ** .dt %p .dd number of postponed messages * + ** .dt %P .dd percentage of the way through the index + ** .dt %r .dd modified/read-only/won't-write/attach-message indicator, + ** according to $$status_chars + ** .dt %s .dd current sorting mode ($$sort) + ** .dt %S .dd current aux sorting method ($$sort_aux) + ** .dt %t .dd number of tagged messages * + ** .dt %u .dd number of unread messages * + ** .dt %v .dd Mutt version string + ** .dt %V .dd currently active limit pattern, if any * + ** .dt %>X .dd right justify the rest of the string and pad with "X" + ** .dt %|X .dd pad to the end of the line with "X" + ** .de + ** .pp + ** * = can be optionally printed if nonzero + ** .pp + ** Some of the above sequences can be used to optionally print a string + ** if their value is nonzero. For example, you may only want to see the + ** number of flagged messages if such messages exist, since zero is not + ** particularly meaningful. To optionally print a string based upon one + ** of the above sequences, the following construct is used + ** .pp + ** %?<sequence_char>?<optional_string>? + ** .pp + ** where \fIsequence_char\fP is a character from the table above, and + ** \fIoptional_string\fP is the string you would like printed if + ** \fIstatus_char\fP is nonzero. \fIoptional_string\fP \fBmay\fP contain + ** other sequence as well as normal text, but you may \fBnot\fP nest + ** optional strings. + ** .pp + ** Here is an example illustrating how to optionally print the number of + ** new messages in a mailbox: + ** %?n?%n new messages.? + ** .pp + ** Additionally you can switch between two strings, the first one, if a + ** value is zero, the second one, if the value is nonzero, by using the + ** following construct: + ** %?<sequence_char>?<if_string>&<else_string>? + ** .pp + ** You can additionally force the result of any printf-like sequence to + ** be lowercase by prefixing the sequence character with an underscore + ** (_) sign. For example, if you want to display the local hostname in + ** lowercase, you would use: + ** %_h + ** .pp + ** If you prefix the sequence character with a colon (:) character, mutt + ** will replace any dots in the expansion by underscores. This might be helpful + ** with IMAP folders that don't like dots in folder names. + */ + { "status_on_top", DT_BOOL, R_BOTH, OPTSTATUSONTOP, 0 }, + /* + ** .pp + ** Setting this variable causes the ``status bar'' to be displayed on + ** the first line of the screen rather than near the bottom. + */ + { "strict_threads", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTSTRICTTHREADS, 0 }, + /* + ** .pp + ** If set, threading will only make use of the ``In-Reply-To'' and + ** ``References'' fields when you ``$$sort'' by message threads. By + ** default, messages with the same subject are grouped together in + ** ``pseudo threads.'' This may not always be desirable, such as in a + ** personal mailbox where you might have several unrelated messages with + ** the subject ``hi'' which will get grouped together. + */ + { "suspend", DT_BOOL, R_NONE, OPTSUSPEND, 1 }, + /* + ** .pp + ** When \fIunset\fP, mutt won't stop when the user presses the terminal's + ** \fIsusp\fP key, usually ``control-Z''. This is useful if you run mutt + ** inside an xterm using a command like xterm -e mutt. + */ + { "text_flowed", DT_BOOL, R_NONE, OPTTEXTFLOWED, 0 }, + /* + ** .pp + ** When set, mutt will generate text/plain; format=flowed attachments. + ** This format is easier to handle for some mailing software, and generally + ** just looks like ordinary text. To actually make use of this format's + ** features, you'll need support in your editor. + ** .pp + ** Note that $$indent_string is ignored when this option is set. + */ + { "thread_received", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTTHREADRECEIVED, 0 }, + /* + ** .pp + ** When set, mutt uses the date received rather than the date sent + ** to thread messages by subject. + */ + { "thorough_search", DT_BOOL, R_NONE, OPTTHOROUGHSRC, 0 }, + /* + ** .pp + ** Affects the \fI~b\fP and \fI~h\fP search operations described in + ** section ``$patterns'' above. If set, the headers and attachments of + ** messages to be searched are decoded before searching. If unset, + ** messages are searched as they appear in the folder. + */ + { "tilde", DT_BOOL, R_PAGER, OPTTILDE, 0 }, + /* + ** .pp + ** When set, the internal-pager will pad blank lines to the bottom of the + ** screen with a tilde (~). + */ + { "timeout", DT_NUM, R_NONE, UL &Timeout, 600 }, + /* + ** .pp + ** This variable controls the \fInumber of seconds\fP Mutt will wait + ** for a key to be pressed in the main menu before timing out and + ** checking for new mail. A value of zero or less will cause Mutt + ** to never time out. + */ + { "tmpdir", DT_PATH, R_NONE, UL &Tempdir, 0 }, + /* + ** .pp + ** This variable allows you to specify where Mutt will place its + ** temporary files needed for displaying and composing messages. If + ** this variable is not set, the environment variable TMPDIR is + ** used. If TMPDIR is not set then "/tmp" is used. + */ + { "to_chars", DT_STR, R_BOTH, UL &Tochars, UL " +TCFL" }, + /* + ** .pp + ** Controls the character used to indicate mail addressed to you. The + ** first character is the one used when the mail is NOT addressed to your + ** address (default: space). The second is used when you are the only + ** recipient of the message (default: +). The third is when your address + ** appears in the TO header field, but you are not the only recipient of + ** the message (default: T). The fourth character is used when your + ** address is specified in the CC header field, but you are not the only + ** recipient. The fifth character is used to indicate mail that was sent + ** by \fIyou\fP. The sixth character is used to indicate when a mail + ** was sent to a mailing-list you subscribe to (default: L). + */ + { "trash", DT_PATH, R_NONE, UL &TrashPath, 0 }, + /* + ** .pp + ** If set, this variable specifies the path of the trash folder where the + ** mails marked for deletion will be moved, instead of being irremediably + ** purged. + ** .pp + ** NOTE: When you delete a message in the trash folder, it is really + ** deleted, so that you have a way to clean the trash. + */ +#ifdef USE_SOCKET + { "tunnel", DT_STR, R_NONE, UL &Tunnel, UL 0 }, + /* + ** .pp + ** Setting this variable will cause mutt to open a pipe to a command + ** instead of a raw socket. You may be able to use this to set up + ** preauthenticated connections to your IMAP/POP3 server. Example: + ** .pp + ** tunnel="ssh -q mailhost.net /usr/local/libexec/imapd" + ** .pp + ** NOTE: For this example to work you must be able to log in to the remote + ** machine without having to enter a password. + */ +#endif + { "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 }, + /* + ** .pp + ** \fBWarning:\fP do not set this variable unless you are using a version + ** of sendmail which supports the -B8BITMIME flag (such as sendmail + ** 8.8.x) or you may not be able to send mail. + ** .pp + ** When \fIset\fP, Mutt will invoke ``$$sendmail'' with the -B8BITMIME + ** flag when sending 8-bit messages to enable ESMTP negotiation. + */ + { "use_domain", DT_BOOL, R_NONE, OPTUSEDOMAIN, 1 }, + /* + ** .pp + ** When set, Mutt will qualify all local addresses (ones without the + ** @host portion) with the value of ``$$hostname''. If \fIunset\fP, no + ** addresses will be qualified. + */ + { "use_from", DT_BOOL, R_NONE, OPTUSEFROM, 1 }, + /* + ** .pp + ** When \fIset\fP, Mutt will generate the `From:' header field when + ** sending messages. If \fIunset\fP, no `From:' header field will be + ** generated unless the user explicitly sets one using the ``$my_hdr'' + ** command. + */ +#ifdef HAVE_GETADDRINFO + { "use_ipv6", DT_BOOL, R_NONE, OPTUSEIPV6, 1}, + /* + ** .pp + ** When \fIset\fP, Mutt will look for IPv6 addresses of hosts it tries to + ** contact. If this option is unset, Mutt will restrict itself to IPv4 addresses. + ** Normally, the default should work. + */ +#endif /* HAVE_GETADDRINFO */ + { "user_agent", DT_BOOL, R_NONE, OPTXMAILER, 1}, + /* + ** .pp + ** When \fIset\fP, mutt will add a "User-Agent" header to outgoing + ** messages, indicating which version of mutt was used for composing + ** them. + */ + { "visual", DT_PATH, R_NONE, UL &Visual, 0 }, + /* + ** .pp + ** Specifies the visual editor to invoke when the \fI~v\fP command is + ** given in the builtin editor. + */ + { "wait_key", DT_BOOL, R_NONE, OPTWAITKEY, 1 }, + /* + ** .pp + ** Controls whether Mutt will ask you to press a key after \fIshell- + ** escape\fP, \fIpipe-message\fP, \fIpipe-entry\fP, \fIprint-message\fP, + ** and \fIprint-entry\fP commands. + ** .pp + ** It is also used when viewing attachments with ``$auto_view'', provided + ** that the corresponding mailcap entry has a \fIneedsterminal\fP flag, + ** and the external program is interactive. + ** .pp + ** When set, Mutt will always ask for a key. When unset, Mutt will wait + ** for a key only if the external command returned a non-zero status. + */ + { "weed", DT_BOOL, R_NONE, OPTWEED, 1 }, + /* + ** .pp + ** When set, mutt will weed headers when when displaying, forwarding, + ** printing, or replying to messages. + */ + { "wrap_search", DT_BOOL, R_NONE, OPTWRAPSEARCH, 1 }, + /* + ** .pp + ** Controls whether searches wrap around the end of the mailbox. + ** .pp + ** When set, searches will wrap around the first (or last) message. When + ** unset, searches will not wrap. + */ + { "wrapmargin", DT_NUM, R_PAGER, UL &WrapMargin, 0 }, + /* + ** .pp + ** Controls the size of the margin remaining at the right side of + ** the terminal when mutt's pager does smart wrapping. + */ + { "write_inc", DT_NUM, R_NONE, UL &WriteInc, 10 }, + /* + ** .pp + ** When writing a mailbox, a message will be printed every + ** \fIwrite_inc\fP messages to indicate progress. If set to 0, only a + ** single message will be displayed before writing a mailbox. + ** .pp + ** Also see the ``$$read_inc'' variable. + */ + { "write_bcc", DT_BOOL, R_NONE, OPTWRITEBCC, 1}, + /* + ** .pp + ** Controls whether mutt writes out the Bcc header when preparing + ** messages to be sent. Exim users may wish to use this. + */ +#ifdef USE_NNTP + { "x_comment_to", DT_BOOL, R_NONE, OPTXCOMMENTTO, 0 }, + /* + ** .pp + ** If \fIset\fP, Mutt will add ``X-Comment-To:'' field (that contains full + ** name of original article author) to article that followuped to newsgroup. + */ +#endif + /*--*/ + { 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 } +}; + +/* same as SortMethods, but with "threads" replaced by "date" */ + +const struct mapping_t SortAuxMethods[] = { + { "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_DATE }, /* note: sort_aux == threads + * isn't possible. + */ + { "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 } +}; + +const struct mapping_t SortKeyMethods[] = { + { "address", SORT_ADDRESS }, + { "date", SORT_DATE }, + { "keyid", SORT_KEYID }, + { "trust", SORT_TRUST }, + { NULL } +}; + + +/* functions used to parse commands in a rc file */ + +static int parse_list (BUFFER *, BUFFER *, unsigned long, BUFFER *); +static int parse_rx_list (BUFFER *, BUFFER *, unsigned long, BUFFER *); +static int parse_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *); +static int parse_rx_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *); + +static int parse_unlists (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 *); +static int parse_subscribe (BUFFER *, BUFFER *, unsigned long, BUFFER *); + +struct command_t +{ + char *name; + int (*func) (BUFFER *, BUFFER *, unsigned long, BUFFER *); + unsigned long data; +}; + +struct command_t Commands[] = { + { "alternates", parse_rx_list, UL &Alternates }, + { "unalternates", parse_rx_unlist, UL &Alternates }, +#ifdef USE_SOCKET + { "account-hook", mutt_parse_hook, M_ACCOUNTHOOK }, +#endif + { "alias", parse_alias, 0 }, + { "auto_view", parse_list, UL &AutoViewList }, + { "alternative_order", parse_list, UL &AlternativeOrderList}, + { "bind", mutt_parse_bind, 0 }, + { "charset-hook", mutt_parse_hook, M_CHARSETHOOK }, +#ifdef HAVE_COLOR + { "color", mutt_parse_color, 0 }, + { "uncolor", mutt_parse_uncolor, 0 }, +#endif + { "exec", mutt_parse_exec, 0 }, + { "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 }, +#ifdef HAVE_ICONV + { "iconv-hook", mutt_parse_hook, M_ICONVHOOK }, +#endif + { "ignore", parse_ignore, 0 }, + { "lists", parse_rx_list, UL &MailLists }, + { "macro", mutt_parse_macro, 0 }, + { "mailboxes", mutt_parse_mailboxes, M_MAILBOXES }, + { "unmailboxes", mutt_parse_mailboxes, M_UNMAILBOXES }, + { "message-hook", mutt_parse_hook, M_MESSAGEHOOK }, + { "mbox-hook", mutt_parse_hook, M_MBOXHOOK }, + { "mime_lookup", parse_list, UL &MimeLookupList }, + { "unmime_lookup", parse_unlist, UL &MimeLookupList }, + { "mono", mutt_parse_mono, 0 }, + { "my_hdr", parse_my_hdr, 0 }, + { "pgp-hook", mutt_parse_hook, M_CRYPTHOOK }, + { "crypt-hook", mutt_parse_hook, M_CRYPTHOOK }, + { "push", mutt_parse_push, 0 }, + { "reply-hook", mutt_parse_hook, M_REPLYHOOK }, + { "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 }, + { "subscribe", parse_subscribe, 0 }, + { "toggle", parse_set, M_SET_INV }, + { "unalias", parse_unalias, 0 }, + { "unalternative_order",parse_unlist, UL &AlternativeOrderList }, + { "unauto_view", parse_unlist, UL &AutoViewList }, + { "unhdr_order", parse_unlist, UL &HeaderOrderList }, + { "unhook", mutt_parse_unhook, 0 }, + { "unignore", parse_unignore, 0 }, + { "unlists", parse_unlists, 0 }, + { "unmono", mutt_parse_unmono, 0 }, + { "unmy_hdr", parse_unmy_hdr, 0 }, + { "unscore", mutt_parse_unscore, 0 }, + { "unset", parse_set, M_SET_UNSET }, + { "unsubscribe", parse_rx_unlist, UL &SubscribedLists }, + { NULL } +}; diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..57a2fbd --- /dev/null +++ b/install-sh @@ -0,0 +1,269 @@ +#!/bin/sh +# install - install a program, script, or datafile +# This originally came from X11R5 (mit/util/scripts/install.sh). + +scriptversion=2003-01-17.15 + +# Copyright 1991 by the Massachusetts Institute of Technology +# (FSF changes in the public domain.) +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename= +transform_arg= +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= + +usage="Usage: $0 [OPTION]... SRCFILE DSTFILE + or: $0 -d DIR1 DIR2... + +In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. +In the second, create the directory path DIR. + +Options: +-b=TRANSFORMBASENAME +-c copy source (using $cpprog) instead of moving (using $mvprog). +-d create directories instead of installing files. +-g GROUP $chgrp installed files to GROUP. +-m MODE $chmod installed files to MODE. +-o USER $chown installed files to USER. +-s strip installed files (using $stripprog). +-t=TRANSFORM +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit 0;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + --version) echo "$0 $scriptversion"; exit 0;; + + *) if test -z "$src"; then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if test -z "$src"; then + echo "$0: no input file specified." >&2 + exit 1 +fi + +if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + instcmd=: + chmodcmd= + else + instcmd=$mkdirprog + fi +else + # Waiting for this to be detected by the "$instcmd $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + dst=$dst/`basename "$src"` + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# (this part is taken from Noah Friedman's mkinstalldirs script.) + +# Skip lots of stat calls in the usual case. +if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + test -d "$pathcomp" || $mkdirprog "$pathcomp" + pathcomp=$pathcomp/ + done +fi + +if test -n "$dir_arg"; then + $doit $instcmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + +else + # If we're going to rename the final executable, determine the name now. + if test -z "$transformarg"; then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename \ + | sed $transformarg`$transformbasename + fi + + # don't allow the sed command to completely eliminate the filename. + test -z "$dstfile" && dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/#inst.$$# + rmtmp=$dstdir/#rm.$$# + + # Trap to clean up those temp files at exit. + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + + # Move or copy the file name to the temp name + $doit $instcmd "$src" "$dsttmp" && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $instcmd $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && + + # Now remove or move aside any old file at destination location. We + # try this two ways since rm can't unlink itself on some systems and + # the destination file might be busy for other reasons. In this case, + # the final cleanup might fail but the new file should still install + # successfully. + { + if test -f "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/intl/ChangeLog b/intl/ChangeLog new file mode 100644 index 0000000..84e2b37 --- /dev/null +++ b/intl/ChangeLog @@ -0,0 +1,4 @@ +2001-09-13 GNU <bug-gnu-utils@gnu.org> + + * Version 0.10.40 released. + diff --git a/intl/Makefile.in b/intl/Makefile.in new file mode 100644 index 0000000..19ed4a7 --- /dev/null +++ b/intl/Makefile.in @@ -0,0 +1,313 @@ +# Makefile for directory with message catalog handling in GNU NLS Utilities. +# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +transform = @program_transform_name@ +libdir = @libdir@ +includedir = @includedir@ +datadir = @datadir@ +localedir = $(datadir)/locale +gettextsrcdir = $(datadir)/gettext/intl +aliaspath = $(localedir) +subdir = intl + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` + +l = @INTL_LIBTOOL_SUFFIX_PREFIX@ + +AR = ar +CC = @CC@ +LIBTOOL = @LIBTOOL@ +RANLIB = @RANLIB@ +YACC = @INTLBISON@ -y -d +YFLAGS = --name-prefix=__gettext + +DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ +-DLIBDIR=\"$(libdir)\" @DEFS@ +CPPFLAGS = @CPPFLAGS@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h +COMHDRS = gettext.h gettextP.h hash-string.h +SOURCES = $(COMSRCS) intl-compat.c +COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ +finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ +explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \ +localcharset.c +OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ +finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ +explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \ +plural.$lo localcharset.$lo +GETTOBJS = intl-compat.$lo +DISTFILES.common = Makefile.in \ +config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) +DISTFILES.generated = plural.c +DISTFILES.normal = VERSION +DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc +DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c + +# Libtool's library version information for libintl. +# Before making a gettext release, the gettext maintainer must change this +# according to the libtool documentation, section "Library interface versions". +# Maintainers of other packages that include the intl directory must *not* +# change these values. +LTV_CURRENT=1 +LTV_REVISION=1 +LTV_AGE=0 + +.SUFFIXES: +.SUFFIXES: .c .y .o .lo .sin .sed +.c.o: + $(COMPILE) $< +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) $< + +.y.c: + $(YACC) $(YFLAGS) --output $@ $< + rm -f $*.h + +.sin.sed: + sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@ + mv t-$@ $@ + +INCLUDES = -I.. -I. -I$(top_srcdir)/intl + +all: all-@USE_INCLUDED_LIBINTL@ +all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed +all-no: all-no-@BUILD_INCLUDED_LIBINTL@ +all-no-yes: libgnuintl.$la +all-no-no: + +libintl.a libgnuintl.a: $(OBJECTS) + rm -f $@ + $(AR) cru $@ $(OBJECTS) + $(RANLIB) $@ + +libintl.la libgnuintl.la: $(OBJECTS) + $(LIBTOOL) --mode=link \ + $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ + $(OBJECTS) @LIBICONV@ \ + -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ + -rpath $(libdir) \ + -no-undefined + +libintl.h: libgnuintl.h + cp $(srcdir)/libgnuintl.h libintl.h + +charset.alias: config.charset + $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ + mv t-$@ $@ + +check: all + +# This installation goal is only used in GNU gettext. Packages which +# only use the library should use install instead. + +# We must not install the libintl.h/libintl.a files if we are on a +# system which has the GNU gettext() function in its C library or in a +# separate library. +# If you want to use the one which comes with this version of the +# package, you have to use `configure --with-included-gettext'. +install: install-exec install-data +install-exec: all + if test "$(PACKAGE)" = "gettext" \ + && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ + $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ + $(LIBTOOL) --mode=install \ + $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ + else \ + : ; \ + fi + if test '@USE_INCLUDED_LIBINTL@' = yes; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir); \ + temp=$(DESTDIR)$(libdir)/t-charset.alias; \ + dest=$(DESTDIR)$(libdir)/charset.alias; \ + if test -f $(DESTDIR)$(libdir)/charset.alias; then \ + orig=$(DESTDIR)$(libdir)/charset.alias; \ + sed -f ref-add.sed $$orig > $$temp; \ + $(INSTALL_DATA) $$temp $$dest; \ + rm -f $$temp; \ + else \ + if test @GLIBC21@ = no; then \ + orig=charset.alias; \ + sed -f ref-add.sed $$orig > $$temp; \ + $(INSTALL_DATA) $$temp $$dest; \ + rm -f $$temp; \ + fi; \ + fi; \ + $(mkinstalldirs) $(DESTDIR)$(localedir); \ + test -f $(DESTDIR)$(localedir)/locale.alias \ + && orig=$(DESTDIR)$(localedir)/locale.alias \ + || orig=$(srcdir)/locale.alias; \ + temp=$(DESTDIR)$(localedir)/t-locale.alias; \ + dest=$(DESTDIR)$(localedir)/locale.alias; \ + sed -f ref-add.sed $$orig > $$temp; \ + $(INSTALL_DATA) $$temp $$dest; \ + rm -f $$temp; \ + else \ + : ; \ + fi +install-data: all + if test "$(PACKAGE)" = "gettext"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ + $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ + dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \ + for file in $$dists; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ + dists="$(DISTFILES.generated)"; \ + for file in $$dists; do \ + if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ + $(INSTALL_DATA) $$dir/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + dists="$(DISTFILES.obsolete)"; \ + for file in $$dists; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + if test "$(PACKAGE)" = "gettext" \ + && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ + rm -f $(DESTDIR)$(includedir)/libintl.h; \ + $(LIBTOOL) --mode=uninstall \ + rm -f $(DESTDIR)$(libdir)/libintl.$la; \ + else \ + : ; \ + fi + if test '@USE_INCLUDED_LIBINTL@' = yes; then \ + if test -f $(DESTDIR)$(libdir)/charset.alias; then \ + temp=$(DESTDIR)$(libdir)/t-charset.alias; \ + dest=$(DESTDIR)$(libdir)/charset.alias; \ + sed -f ref-del.sed $$dest > $$temp; \ + if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ + rm -f $$dest; \ + else \ + $(INSTALL_DATA) $$temp $$dest; \ + fi; \ + rm -f $$temp; \ + fi; \ + if test -f $(DESTDIR)$(localedir)/locale.alias; then \ + temp=$(DESTDIR)$(localedir)/t-locale.alias; \ + dest=$(DESTDIR)$(localedir)/locale.alias; \ + sed -f ref-del.sed $$dest > $$temp; \ + if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ + rm -f $$dest; \ + else \ + $(INSTALL_DATA) $$temp $$dest; \ + fi; \ + rm -f $$temp; \ + fi; \ + else \ + : ; \ + fi + if test "$(PACKAGE)" = "gettext"; then \ + for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi + +info dvi: + +$(OBJECTS): ../config.h libgnuintl.h +bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h +dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h + +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) + here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) + +id: ID + +ID: $(HEADERS) $(SOURCES) + here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) + + +mostlyclean: + rm -f *.a *.la *.o *.lo core core.* + rm -f libintl.h charset.alias ref-add.sed ref-del.sed + rm -f -r .libs _libs + +clean: mostlyclean + +distclean: clean + rm -f Makefile ID TAGS + if test "$(PACKAGE)" = gettext; then \ + rm -f ChangeLog.inst $(DISTFILES.normal); \ + else \ + : ; \ + fi + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + + +# GNU gettext needs not contain the file `VERSION' but contains some +# other files which should not be distributed in other packages. +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: Makefile + if test "$(PACKAGE)" = gettext; then \ + additional="$(DISTFILES.gettext)"; \ + else \ + additional="$(DISTFILES.normal)"; \ + fi; \ + $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ + for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ + if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ + ln $$dir/$$file $(distdir) 2> /dev/null \ + || cp -p $$dir/$$file $(distdir); \ + done + +Makefile: Makefile.in ../config.status + cd .. \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/intl/VERSION b/intl/VERSION new file mode 100644 index 0000000..cb8a01a --- /dev/null +++ b/intl/VERSION @@ -0,0 +1 @@ +GNU gettext library from gettext-0.10.40 diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c new file mode 100644 index 0000000..c6a9bd1 --- /dev/null +++ b/intl/bindtextdom.c @@ -0,0 +1,369 @@ +/* Implementation of the bindtextdomain(3) function + Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif +#include "gettextP.h" + +#ifdef _LIBC +/* We have to handle multi-threaded applications. */ +# include <bits/libc-lock.h> +#else +/* Provide dummy implementation if this is outside glibc. */ +# define __libc_rwlock_define(CLASS, NAME) +# define __libc_rwlock_wrlock(NAME) +# define __libc_rwlock_unlock(NAME) +#endif + +/* The internal variables in the standalone libintl.a must have different + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ +#if !defined _LIBC +# define _nl_default_dirname _nl_default_dirname__ +# define _nl_domain_bindings _nl_domain_bindings__ +#endif + +/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */ +#ifndef offsetof +# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) +#endif + +/* @@ end of prolog @@ */ + +/* Contains the default location of the message catalogs. */ +extern const char _nl_default_dirname[]; + +/* List with bindings of specific domains. */ +extern struct binding *_nl_domain_bindings; + +/* Lock variable to protect the global data in the gettext implementation. */ +__libc_rwlock_define (extern, _nl_state_lock) + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define BINDTEXTDOMAIN __bindtextdomain +# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset +# ifndef strdup +# define strdup(str) __strdup (str) +# endif +#else +# define BINDTEXTDOMAIN bindtextdomain__ +# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__ +#endif + +/* Prototypes for local functions. */ +static void set_binding_values PARAMS ((const char *domainname, + const char **dirnamep, + const char **codesetp)); + +/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP + to be used for the DOMAINNAME message catalog. + If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not + modified, only the current value is returned. + If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither + modified nor returned. */ +static void +set_binding_values (domainname, dirnamep, codesetp) + const char *domainname; + const char **dirnamep; + const char **codesetp; +{ + struct binding *binding; + int modified; + + /* Some sanity checks. */ + if (domainname == NULL || domainname[0] == '\0') + { + if (dirnamep) + *dirnamep = NULL; + if (codesetp) + *codesetp = NULL; + return; + } + + __libc_rwlock_wrlock (_nl_state_lock); + + modified = 0; + + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (binding != NULL) + { + if (dirnamep) + { + const char *dirname = *dirnamep; + + if (dirname == NULL) + /* The current binding has be to returned. */ + *dirnamep = binding->dirname; + else + { + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + char *result = binding->dirname; + if (strcmp (dirname, result) != 0) + { + if (strcmp (dirname, _nl_default_dirname) == 0) + result = (char *) _nl_default_dirname; + else + { +#if defined _LIBC || defined HAVE_STRDUP + result = strdup (dirname); +#else + size_t len = strlen (dirname) + 1; + result = (char *) malloc (len); + if (__builtin_expect (result != NULL, 1)) + memcpy (result, dirname, len); +#endif + } + + if (__builtin_expect (result != NULL, 1)) + { + if (binding->dirname != _nl_default_dirname) + free (binding->dirname); + + binding->dirname = result; + modified = 1; + } + } + *dirnamep = result; + } + } + + if (codesetp) + { + const char *codeset = *codesetp; + + if (codeset == NULL) + /* The current binding has be to returned. */ + *codesetp = binding->codeset; + else + { + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + char *result = binding->codeset; + if (result == NULL || strcmp (codeset, result) != 0) + { +#if defined _LIBC || defined HAVE_STRDUP + result = strdup (codeset); +#else + size_t len = strlen (codeset) + 1; + result = (char *) malloc (len); + if (__builtin_expect (result != NULL, 1)) + memcpy (result, codeset, len); +#endif + + if (__builtin_expect (result != NULL, 1)) + { + if (binding->codeset != NULL) + free (binding->codeset); + + binding->codeset = result; + binding->codeset_cntr++; + modified = 1; + } + } + *codesetp = result; + } + } + } + else if ((dirnamep == NULL || *dirnamep == NULL) + && (codesetp == NULL || *codesetp == NULL)) + { + /* Simply return the default values. */ + if (dirnamep) + *dirnamep = _nl_default_dirname; + if (codesetp) + *codesetp = NULL; + } + else + { + /* We have to create a new binding. */ + size_t len = strlen (domainname) + 1; + struct binding *new_binding = + (struct binding *) malloc (offsetof (struct binding, domainname) + len); + + if (__builtin_expect (new_binding == NULL, 0)) + goto failed; + + memcpy (new_binding->domainname, domainname, len); + + if (dirnamep) + { + const char *dirname = *dirnamep; + + if (dirname == NULL) + /* The default value. */ + dirname = _nl_default_dirname; + else + { + if (strcmp (dirname, _nl_default_dirname) == 0) + dirname = _nl_default_dirname; + else + { + char *result; +#if defined _LIBC || defined HAVE_STRDUP + result = strdup (dirname); + if (__builtin_expect (result == NULL, 0)) + goto failed_dirname; +#else + size_t len = strlen (dirname) + 1; + result = (char *) malloc (len); + if (__builtin_expect (result == NULL, 0)) + goto failed_dirname; + memcpy (result, dirname, len); +#endif + dirname = result; + } + } + *dirnamep = dirname; + new_binding->dirname = (char *) dirname; + } + else + /* The default value. */ + new_binding->dirname = (char *) _nl_default_dirname; + + new_binding->codeset_cntr = 0; + + if (codesetp) + { + const char *codeset = *codesetp; + + if (codeset != NULL) + { + char *result; + +#if defined _LIBC || defined HAVE_STRDUP + result = strdup (codeset); + if (__builtin_expect (result == NULL, 0)) + goto failed_codeset; +#else + size_t len = strlen (codeset) + 1; + result = (char *) malloc (len); + if (__builtin_expect (result == NULL, 0)) + goto failed_codeset; + memcpy (result, codeset, len); +#endif + codeset = result; + new_binding->codeset_cntr++; + } + *codesetp = codeset; + new_binding->codeset = (char *) codeset; + } + else + new_binding->codeset = NULL; + + /* Now enqueue it. */ + if (_nl_domain_bindings == NULL + || strcmp (domainname, _nl_domain_bindings->domainname) < 0) + { + new_binding->next = _nl_domain_bindings; + _nl_domain_bindings = new_binding; + } + else + { + binding = _nl_domain_bindings; + while (binding->next != NULL + && strcmp (domainname, binding->next->domainname) > 0) + binding = binding->next; + + new_binding->next = binding->next; + binding->next = new_binding; + } + + modified = 1; + + /* Here we deal with memory allocation failures. */ + if (0) + { + failed_codeset: + if (new_binding->dirname != _nl_default_dirname) + free (new_binding->dirname); + failed_dirname: + free (new_binding); + failed: + if (dirnamep) + *dirnamep = NULL; + if (codesetp) + *codesetp = NULL; + } + } + + /* If we modified any binding, we flush the caches. */ + if (modified) + ++_nl_msg_cat_cntr; + + __libc_rwlock_unlock (_nl_state_lock); +} + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +char * +BINDTEXTDOMAIN (domainname, dirname) + const char *domainname; + const char *dirname; +{ + set_binding_values (domainname, &dirname, NULL); + return (char *) dirname; +} + +/* Specify the character encoding in which the messages from the + DOMAINNAME message catalog will be returned. */ +char * +BIND_TEXTDOMAIN_CODESET (domainname, codeset) + const char *domainname; + const char *codeset; +{ + set_binding_values (domainname, NULL, &codeset); + return (char *) codeset; +} + +#ifdef _LIBC +/* Aliases for function names in GNU C Library. */ +weak_alias (__bindtextdomain, bindtextdomain); +weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); +#endif diff --git a/intl/config.charset b/intl/config.charset new file mode 100644 index 0000000..f4f2611 --- /dev/null +++ b/intl/config.charset @@ -0,0 +1,438 @@ +#! /bin/sh +# Output a system dependent table of character encoding aliases. +# +# Copyright (C) 2000-2001 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. +# +# The table consists of lines of the form +# ALIAS CANONICAL +# +# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". +# ALIAS is compared in a case sensitive way. +# +# CANONICAL is the GNU canonical name for this character encoding. +# It must be an encoding supported by libiconv. Support by GNU libc is +# also desirable. CANONICAL is case insensitive. Usually an upper case +# MIME charset name is preferred. +# The current list of GNU canonical charset names is as follows. +# +# name used by which systems a MIME name? +# ASCII, ANSI_X3.4-1968 glibc solaris freebsd +# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes +# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes +# ISO-8859-3 glibc yes +# ISO-8859-4 osf solaris freebsd yes +# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes +# ISO-8859-6 glibc aix hpux solaris yes +# ISO-8859-7 glibc aix hpux irix osf solaris yes +# ISO-8859-8 glibc aix hpux osf solaris yes +# ISO-8859-9 glibc aix hpux irix osf solaris yes +# ISO-8859-13 glibc +# ISO-8859-15 glibc aix osf solaris freebsd +# KOI8-R glibc solaris freebsd yes +# KOI8-U glibc freebsd yes +# CP437 dos +# CP775 dos +# CP850 aix osf dos +# CP852 dos +# CP855 dos +# CP856 aix +# CP857 dos +# CP861 dos +# CP862 dos +# CP864 dos +# CP865 dos +# CP866 freebsd dos +# CP869 dos +# CP874 win32 dos +# CP922 aix +# CP932 aix win32 dos +# CP943 aix +# CP949 osf win32 dos +# CP950 win32 dos +# CP1046 aix +# CP1124 aix +# CP1129 aix +# CP1250 win32 +# CP1251 glibc win32 +# CP1252 aix win32 +# CP1253 win32 +# CP1254 win32 +# CP1255 win32 +# CP1256 win32 +# CP1257 win32 +# GB2312 glibc aix hpux irix solaris freebsd yes +# EUC-JP glibc aix hpux irix osf solaris freebsd yes +# EUC-KR glibc aix hpux irix osf solaris freebsd yes +# EUC-TW glibc aix hpux irix osf solaris +# BIG5 glibc aix hpux osf solaris freebsd yes +# BIG5-HKSCS glibc +# GBK aix osf win32 dos +# GB18030 glibc +# SHIFT_JIS hpux osf solaris freebsd yes +# JOHAB glibc win32 +# TIS-620 glibc aix hpux osf solaris +# VISCII glibc yes +# HP-ROMAN8 hpux +# HP-ARABIC8 hpux +# HP-GREEK8 hpux +# HP-HEBREW8 hpux +# HP-TURKISH8 hpux +# HP-KANA8 hpux +# DEC-KANJI osf +# DEC-HANYU osf +# UTF-8 glibc aix hpux osf solaris yes +# +# Note: Names which are not marked as being a MIME name should not be used in +# Internet protocols for information interchange (mail, news, etc.). +# +# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications +# must understand both names and treat them as equivalent. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + +host="$1" +os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` +echo "# This file contains a table of character encoding aliases," +echo "# suitable for operating system '${os}'." +echo "# It was automatically generated from config.charset." +# List of references, updated during installation: +echo "# Packages using this file: " +case "$os" in + linux* | *-gnu*) + # With glibc-2.1 or newer, we don't need any canonicalization, + # because glibc has iconv and both glibc and libiconv support all + # GNU canonical names directly. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "BIG5 BIG5" + echo "gb2312 GB2312" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + beos*) + # BeOS has a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>" + echo "# and Bruno Haible <haible@clisp.cons.org>." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru KOI8-R" # not CP866 ?? + echo "ru_RU KOI8-R" # not CP866 ?? + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; +esac diff --git a/intl/dcgettext.c b/intl/dcgettext.c new file mode 100644 index 0000000..b7c9652 --- /dev/null +++ b/intl/dcgettext.c @@ -0,0 +1,58 @@ +/* Implementation of the dcgettext(3) function. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DCGETTEXT __dcgettext +# define DCIGETTEXT __dcigettext +#else +# define DCGETTEXT dcgettext__ +# define DCIGETTEXT dcigettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +char * +DCGETTEXT (domainname, msgid, category) + const char *domainname; + const char *msgid; + int category; +{ + return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dcgettext, dcgettext); +#endif diff --git a/intl/dcigettext.c b/intl/dcigettext.c new file mode 100644 index 0000000..6acde19 --- /dev/null +++ b/intl/dcigettext.c @@ -0,0 +1,1259 @@ +/* Implementation of the internal dcigettext function. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Tell glibc's <string.h> to provide a prototype for mempcpy(). + This must come before <config.h> because <config.h> may include + <features.h>, and once <features.h> has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> + +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#include <errno.h> +#ifndef errno +extern int errno; +#endif +#ifndef __set_errno +# define __set_errno(val) errno = (val) +#endif + +#include <stddef.h> +#include <stdlib.h> + +#include <string.h> +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#include <locale.h> + +#if defined HAVE_SYS_PARAM_H || defined _LIBC +# include <sys/param.h> +#endif + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif +#include "hash-string.h" + +/* Thread safetyness. */ +#ifdef _LIBC +# include <bits/libc-lock.h> +#else +/* Provide dummy implementation if this is outside glibc. */ +# define __libc_lock_define_initialized(CLASS, NAME) +# define __libc_lock_lock(NAME) +# define __libc_lock_unlock(NAME) +# define __libc_rwlock_define_initialized(CLASS, NAME) +# define __libc_rwlock_rdlock(NAME) +# define __libc_rwlock_unlock(NAME) +#endif + +/* Alignment of types. */ +#if defined __GNUC__ && __GNUC__ >= 2 +# define alignof(TYPE) __alignof__ (TYPE) +#else +# define alignof(TYPE) \ + ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) +#endif + +/* The internal variables in the standalone libintl.a must have different + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ +#if !defined _LIBC +# define _nl_default_default_domain _nl_default_default_domain__ +# define _nl_current_default_domain _nl_current_default_domain__ +# define _nl_default_dirname _nl_default_dirname__ +# define _nl_domain_bindings _nl_domain_bindings__ +#endif + +/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */ +#ifndef offsetof +# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) +#endif + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# define getcwd __getcwd +# ifndef stpcpy +# define stpcpy __stpcpy +# endif +# define tfind __tfind +#else +# if !defined HAVE_GETCWD +char *getwd (); +# define getcwd(buf, max) getwd (buf) +# else +char *getcwd (); +# endif +# ifndef HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +# endif +# ifndef HAVE_MEMPCPY +static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); +# endif +#endif + +/* Amount to increase buffer size by in each try. */ +#define PATH_INCR 32 + +/* The following is from pathmax.h. */ +/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define + PATH_MAX but might cause redefinition warnings when sys/param.h is + later included (as on MORE/BSD 4.3). */ +#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) +# include <limits.h> +#endif + +#ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 255 +#endif + +#if !defined PATH_MAX && defined _PC_PATH_MAX +# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) +#endif + +/* Don't include sys/param.h if it already has been. */ +#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include <sys/param.h> +#endif + +#if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +#endif + +#ifndef PATH_MAX +# define PATH_MAX _POSIX_PATH_MAX +#endif + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, + it may be concatenated to a directory pathname. + IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. + */ +#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ + /* Win32, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +# define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') +# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) +# define IS_PATH_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) +# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) +#endif + +/* XPG3 defines the result of `setlocale (category, NULL)' as: + ``Directs `setlocale()' to query `category' and return the current + setting of `local'.'' + However it does not specify the exact format. Neither do SUSV2 and + ISO C 99. So we can use this feature only on selected systems (e.g. + those using GNU C Library). */ +#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) +# define HAVE_LOCALE_NULL +#endif + +/* This is the type used for the search tree where known translations + are stored. */ +struct known_translation_t +{ + /* Domain in which to search. */ + char *domainname; + + /* The category. */ + int category; + + /* State of the catalog counter at the point the string was found. */ + int counter; + + /* Catalog where the string was found. */ + struct loaded_l10nfile *domain; + + /* And finally the translation. */ + const char *translation; + size_t translation_length; + + /* Pointer to the string in question. */ + char msgid[ZERO]; +}; + +/* Root of the search tree with known translations. We can use this + only if the system provides the `tsearch' function family. */ +#if defined HAVE_TSEARCH || defined _LIBC +# include <search.h> + +static void *root; + +# ifdef _LIBC +# define tsearch __tsearch +# endif + +/* Function to compare two entries in the table of known translations. */ +static int transcmp PARAMS ((const void *p1, const void *p2)); +static int +transcmp (p1, p2) + const void *p1; + const void *p2; +{ + const struct known_translation_t *s1; + const struct known_translation_t *s2; + int result; + + s1 = (const struct known_translation_t *) p1; + s2 = (const struct known_translation_t *) p2; + + result = strcmp (s1->msgid, s2->msgid); + if (result == 0) + { + result = strcmp (s1->domainname, s2->domainname); + if (result == 0) + /* We compare the category last (though this is the cheapest + operation) since it is hopefully always the same (namely + LC_MESSAGES). */ + result = s1->category - s2->category; + } + + return result; +} +#endif + +/* Name of the default domain used for gettext(3) prior any call to + textdomain(3). The default value for this is "messages". */ +const char _nl_default_default_domain[] = "messages"; + +/* Value used as the default domain for gettext(3). */ +const char *_nl_current_default_domain = _nl_default_default_domain; + +/* Contains the default location of the message catalogs. */ +const char _nl_default_dirname[] = LOCALEDIR; + +/* List with bindings of specific domains created by bindtextdomain() + calls. */ +struct binding *_nl_domain_bindings; + +/* Prototypes for local functions. */ +static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain, + unsigned long int n, + const char *translation, + size_t translation_len)) + internal_function; +static unsigned long int plural_eval PARAMS ((struct expression *pexp, + unsigned long int n)) + internal_function; +static const char *category_to_name PARAMS ((int category)) internal_function; +static const char *guess_category_value PARAMS ((int category, + const char *categoryname)) + internal_function; + + +/* For those loosing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +/* Nothing has to be done. */ +# define ADD_BLOCK(list, address) /* nothing */ +# define FREE_BLOCKS(list) /* nothing */ +#else +struct block_list +{ + void *address; + struct block_list *next; +}; +# define ADD_BLOCK(list, addr) \ + do { \ + struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ + /* If we cannot get a free block we cannot add the new element to \ + the list. */ \ + if (newp != NULL) { \ + newp->address = (addr); \ + newp->next = (list); \ + (list) = newp; \ + } \ + } while (0) +# define FREE_BLOCKS(list) \ + do { \ + while (list != NULL) { \ + struct block_list *old = list; \ + list = list->next; \ + free (old); \ + } \ + } while (0) +# undef alloca +# define alloca(size) (malloc (size)) +#endif /* have alloca */ + + +#ifdef _LIBC +/* List of blocks allocated for translations. */ +typedef struct transmem_list +{ + struct transmem_list *next; + char data[ZERO]; +} transmem_block_t; +static struct transmem_list *transmem_list; +#else +typedef unsigned char transmem_block_t; +#endif + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DCIGETTEXT __dcigettext +#else +# define DCIGETTEXT dcigettext__ +#endif + +/* Lock variable to protect the global data in the gettext implementation. */ +#ifdef _LIBC +__libc_rwlock_define_initialized (, _nl_state_lock) +#endif + +/* Checking whether the binaries runs SUID must be done and glibc provides + easier methods therefore we make a difference here. */ +#ifdef _LIBC +# define ENABLE_SECURE __libc_enable_secure +# define DETERMINE_SECURE +#else +# ifndef HAVE_GETUID +# define getuid() 0 +# endif +# ifndef HAVE_GETGID +# define getgid() 0 +# endif +# ifndef HAVE_GETEUID +# define geteuid() getuid() +# endif +# ifndef HAVE_GETEGID +# define getegid() getgid() +# endif +static int enable_secure; +# define ENABLE_SECURE (enable_secure == 1) +# define DETERMINE_SECURE \ + if (enable_secure == 0) \ + { \ + if (getuid () != geteuid () || getgid () != getegid ()) \ + enable_secure = 1; \ + else \ + enable_secure = -1; \ + } +#endif + +/* Look up MSGID in the DOMAINNAME message catalog for the current + CATEGORY locale and, if PLURAL is nonzero, search over string + depending on the plural form determined by N. */ +char * +DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) + const char *domainname; + const char *msgid1; + const char *msgid2; + int plural; + unsigned long int n; + int category; +{ +#ifndef HAVE_ALLOCA + struct block_list *block_list = NULL; +#endif + struct loaded_l10nfile *domain; + struct binding *binding; + const char *categoryname; + const char *categoryvalue; + char *dirname, *xdomainname; + char *single_locale; + char *retval; + size_t retlen; + int saved_errno; +#if defined HAVE_TSEARCH || defined _LIBC + struct known_translation_t *search; + struct known_translation_t **foundp = NULL; + size_t msgid_len; +#endif + size_t domainname_len; + + /* If no real MSGID is given return NULL. */ + if (msgid1 == NULL) + return NULL; + + __libc_rwlock_rdlock (_nl_state_lock); + + /* If DOMAINNAME is NULL, we are interested in the default domain. If + CATEGORY is not LC_MESSAGES this might not make much sense but the + definition left this undefined. */ + if (domainname == NULL) + domainname = _nl_current_default_domain; + +#if defined HAVE_TSEARCH || defined _LIBC + msgid_len = strlen (msgid1) + 1; + + /* Try to find the translation among those which we found at + some time. */ + search = (struct known_translation_t *) + alloca (offsetof (struct known_translation_t, msgid) + msgid_len); + memcpy (search->msgid, msgid1, msgid_len); + search->domainname = (char *) domainname; + search->category = category; + + foundp = (struct known_translation_t **) tfind (search, &root, transcmp); + if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) + { + /* Now deal with plural. */ + if (plural) + retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, + (*foundp)->translation_length); + else + retval = (char *) (*foundp)->translation; + + __libc_rwlock_unlock (_nl_state_lock); + return retval; + } +#endif + + /* Preserve the `errno' value. */ + saved_errno = errno; + + /* See whether this is a SUID binary or not. */ + DETERMINE_SECURE; + + /* First find matching binding. */ + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (binding == NULL) + dirname = (char *) _nl_default_dirname; + else if (IS_ABSOLUTE_PATH (binding->dirname)) + dirname = binding->dirname; + else + { + /* We have a relative path. Make it absolute now. */ + size_t dirname_len = strlen (binding->dirname) + 1; + size_t path_max; + char *ret; + + path_max = (unsigned int) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ + + for (;;) + { + dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, dirname); + + __set_errno (0); + ret = getcwd (dirname, path_max); + if (ret != NULL || errno != ERANGE) + break; + + path_max += path_max / 2; + path_max += PATH_INCR; + } + + if (ret == NULL) + { + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + FREE_BLOCKS (block_list); + __libc_rwlock_unlock (_nl_state_lock); + __set_errno (saved_errno); + return (plural == 0 + ? (char *) msgid1 + /* Use the Germanic plural rule. */ + : n == 1 ? (char *) msgid1 : (char *) msgid2); + } + + stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); + } + + /* Now determine the symbolic name of CATEGORY and its value. */ + categoryname = category_to_name (category); + categoryvalue = guess_category_value (category, categoryname); + + domainname_len = strlen (domainname); + xdomainname = (char *) alloca (strlen (categoryname) + + domainname_len + 5); + ADD_BLOCK (block_list, xdomainname); + + stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), + domainname, domainname_len), + ".mo"); + + /* Creating working area. */ + single_locale = (char *) alloca (strlen (categoryvalue) + 1); + ADD_BLOCK (block_list, single_locale); + + + /* Search for the given string. This is a loop because we perhaps + got an ordered list of languages to consider for the translation. */ + while (1) + { + /* Make CATEGORYVALUE point to the next element of the list. */ + while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') + ++categoryvalue; + if (categoryvalue[0] == '\0') + { + /* The whole contents of CATEGORYVALUE has been searched but + no valid entry has been found. We solve this situation + by implicitly appending a "C" entry, i.e. no translation + will take place. */ + single_locale[0] = 'C'; + single_locale[1] = '\0'; + } + else + { + char *cp = single_locale; + while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') + *cp++ = *categoryvalue++; + *cp = '\0'; + + /* When this is a SUID binary we must not allow accessing files + outside the dedicated directories. */ + if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) + /* Ingore this entry. */ + continue; + } + + /* If the current locale value is C (or POSIX) we don't load a + domain. Return the MSGID. */ + if (strcmp (single_locale, "C") == 0 + || strcmp (single_locale, "POSIX") == 0) + { + FREE_BLOCKS (block_list); + __libc_rwlock_unlock (_nl_state_lock); + __set_errno (saved_errno); + return (plural == 0 + ? (char *) msgid1 + /* Use the Germanic plural rule. */ + : n == 1 ? (char *) msgid1 : (char *) msgid2); + } + + + /* Find structure describing the message catalog matching the + DOMAINNAME and CATEGORY. */ + domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); + + if (domain != NULL) + { + retval = _nl_find_msg (domain, binding, msgid1, &retlen); + + if (retval == NULL) + { + int cnt; + + for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) + { + retval = _nl_find_msg (domain->successor[cnt], binding, + msgid1, &retlen); + + if (retval != NULL) + { + domain = domain->successor[cnt]; + break; + } + } + } + + if (retval != NULL) + { + /* Found the translation of MSGID1 in domain DOMAIN: + starting at RETVAL, RETLEN bytes. */ + FREE_BLOCKS (block_list); + __set_errno (saved_errno); +#if defined HAVE_TSEARCH || defined _LIBC + if (foundp == NULL) + { + /* Create a new entry and add it to the search tree. */ + struct known_translation_t *newp; + + newp = (struct known_translation_t *) + malloc (offsetof (struct known_translation_t, msgid) + + msgid_len + domainname_len + 1); + if (newp != NULL) + { + newp->domainname = + mempcpy (newp->msgid, msgid1, msgid_len); + memcpy (newp->domainname, domainname, domainname_len + 1); + newp->category = category; + newp->counter = _nl_msg_cat_cntr; + newp->domain = domain; + newp->translation = retval; + newp->translation_length = retlen; + + /* Insert the entry in the search tree. */ + foundp = (struct known_translation_t **) + tsearch (newp, &root, transcmp); + if (foundp == NULL + || __builtin_expect (*foundp != newp, 0)) + /* The insert failed. */ + free (newp); + } + } + else + { + /* We can update the existing entry. */ + (*foundp)->counter = _nl_msg_cat_cntr; + (*foundp)->domain = domain; + (*foundp)->translation = retval; + (*foundp)->translation_length = retlen; + } +#endif + /* Now deal with plural. */ + if (plural) + retval = plural_lookup (domain, n, retval, retlen); + + __libc_rwlock_unlock (_nl_state_lock); + return retval; + } + } + } + /* NOTREACHED */ +} + + +char * +internal_function +_nl_find_msg (domain_file, domainbinding, msgid, lengthp) + struct loaded_l10nfile *domain_file; + struct binding *domainbinding; + const char *msgid; + size_t *lengthp; +{ + struct loaded_domain *domain; + size_t act; + char *result; + size_t resultlen; + + if (domain_file->decided == 0) + _nl_load_domain (domain_file, domainbinding); + + if (domain_file->data == NULL) + return NULL; + + domain = (struct loaded_domain *) domain_file->data; + + /* Locate the MSGID and its translation. */ + if (domain->hash_size > 2 && domain->hash_tab != NULL) + { + /* Use the hashing table. */ + nls_uint32 len = strlen (msgid); + nls_uint32 hash_val = hash_string (msgid); + nls_uint32 idx = hash_val % domain->hash_size; + nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); + + while (1) + { + nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + + /* Compare msgid with the original string at index nstr-1. + We compare the lengths with >=, not ==, because plural entries + are represented by strings with an embedded NUL. */ + if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len + && (strcmp (msgid, + domain->data + W (domain->must_swap, + domain->orig_tab[nstr - 1].offset)) + == 0)) + { + act = nstr - 1; + goto found; + } + + if (idx >= domain->hash_size - incr) + idx -= domain->hash_size - incr; + else + idx += incr; + } + /* NOTREACHED */ + } + else + { + /* Try the default method: binary search in the sorted array of + messages. */ + size_t top, bottom; + + bottom = 0; + top = domain->nstrings; + while (bottom < top) + { + int cmp_val; + + act = (bottom + top) / 2; + cmp_val = strcmp (msgid, (domain->data + + W (domain->must_swap, + domain->orig_tab[act].offset))); + if (cmp_val < 0) + top = act; + else if (cmp_val > 0) + bottom = act + 1; + else + goto found; + } + /* No translation was found. */ + return NULL; + } + + found: + /* The translation was found at index ACT. If we have to convert the + string to use a different character set, this is the time. */ + result = ((char *) domain->data + + W (domain->must_swap, domain->trans_tab[act].offset)); + resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; + +#if defined _LIBC || HAVE_ICONV + if (domain->codeset_cntr + != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) + { + /* The domain's codeset has changed through bind_textdomain_codeset() + since the message catalog was initialized or last accessed. We + have to reinitialize the converter. */ + _nl_free_domain_conv (domain); + _nl_init_domain_conv (domain_file, domain, domainbinding); + } + + if ( +# ifdef _LIBC + domain->conv != (__gconv_t) -1 +# else +# if HAVE_ICONV + domain->conv != (iconv_t) -1 +# endif +# endif + ) + { + /* We are supposed to do a conversion. First allocate an + appropriate table with the same structure as the table + of translations in the file, where we can put the pointers + to the converted strings in. + There is a slight complication with plural entries. They + are represented by consecutive NUL terminated strings. We + handle this case by converting RESULTLEN bytes, including + NULs. */ + + if (domain->conv_tab == NULL + && ((domain->conv_tab = (char **) calloc (domain->nstrings, + sizeof (char *))) + == NULL)) + /* Mark that we didn't succeed allocating a table. */ + domain->conv_tab = (char **) -1; + + if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) + /* Nothing we can do, no more memory. */ + goto converted; + + if (domain->conv_tab[act] == NULL) + { + /* We haven't used this string so far, so it is not + translated yet. Do this now. */ + /* We use a bit more efficient memory handling. + We allocate always larger blocks which get used over + time. This is faster than many small allocations. */ + __libc_lock_define_initialized (static, lock) +# define INITIAL_BLOCK_SIZE 4080 + static unsigned char *freemem; + static size_t freemem_size; + + const unsigned char *inbuf; + unsigned char *outbuf; + int malloc_count; +# ifndef _LIBC + transmem_block_t *transmem_list = NULL; +# endif + + __libc_lock_lock (lock); + + inbuf = (const unsigned char *) result; + outbuf = freemem + sizeof (size_t); + + malloc_count = 0; + while (1) + { + transmem_block_t *newmem; +# ifdef _LIBC + size_t non_reversible; + int res; + + if (freemem_size < sizeof (size_t)) + goto resize_freemem; + + res = __gconv (domain->conv, + &inbuf, inbuf + resultlen, + &outbuf, + outbuf + freemem_size - sizeof (size_t), + &non_reversible); + + if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) + break; + + if (res != __GCONV_FULL_OUTPUT) + { + __libc_lock_unlock (lock); + goto converted; + } + + inbuf = result; +# else +# if HAVE_ICONV + const char *inptr = (const char *) inbuf; + size_t inleft = resultlen; + char *outptr = (char *) outbuf; + size_t outleft; + + if (freemem_size < sizeof (size_t)) + goto resize_freemem; + + outleft = freemem_size - sizeof (size_t); + if (iconv (domain->conv, + (ICONV_CONST char **) &inptr, &inleft, + &outptr, &outleft) + != (size_t) (-1)) + { + outbuf = (unsigned char *) outptr; + break; + } + if (errno != E2BIG) + { + __libc_lock_unlock (lock); + goto converted; + } +# endif +# endif + + resize_freemem: + /* We must allocate a new buffer or resize the old one. */ + if (malloc_count > 0) + { + ++malloc_count; + freemem_size = malloc_count * INITIAL_BLOCK_SIZE; + newmem = (transmem_block_t *) realloc (transmem_list, + freemem_size); +# ifdef _LIBC + if (newmem != NULL) + transmem_list = transmem_list->next; + else + { + struct transmem_list *old = transmem_list; + + transmem_list = transmem_list->next; + free (old); + } +# endif + } + else + { + malloc_count = 1; + freemem_size = INITIAL_BLOCK_SIZE; + newmem = (transmem_block_t *) malloc (freemem_size); + } + if (__builtin_expect (newmem == NULL, 0)) + { + freemem = NULL; + freemem_size = 0; + __libc_lock_unlock (lock); + goto converted; + } + +# ifdef _LIBC + /* Add the block to the list of blocks we have to free + at some point. */ + newmem->next = transmem_list; + transmem_list = newmem; + + freemem = newmem->data; + freemem_size -= offsetof (struct transmem_list, data); +# else + transmem_list = newmem; + freemem = newmem; +# endif + + outbuf = freemem + sizeof (size_t); + } + + /* We have now in our buffer a converted string. Put this + into the table of conversions. */ + *(size_t *) freemem = outbuf - freemem - sizeof (size_t); + domain->conv_tab[act] = (char *) freemem; + /* Shrink freemem, but keep it aligned. */ + freemem_size -= outbuf - freemem; + freemem = outbuf; + freemem += freemem_size & (alignof (size_t) - 1); + freemem_size = freemem_size & ~ (alignof (size_t) - 1); + + __libc_lock_unlock (lock); + } + + /* Now domain->conv_tab[act] contains the translation of all + the plural variants. */ + result = domain->conv_tab[act] + sizeof (size_t); + resultlen = *(size_t *) domain->conv_tab[act]; + } + + converted: + /* The result string is converted. */ + +#endif /* _LIBC || HAVE_ICONV */ + + *lengthp = resultlen; + return result; +} + + +/* Look up a plural variant. */ +static char * +internal_function +plural_lookup (domain, n, translation, translation_len) + struct loaded_l10nfile *domain; + unsigned long int n; + const char *translation; + size_t translation_len; +{ + struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; + unsigned long int index; + const char *p; + + index = plural_eval (domaindata->plural, n); + if (index >= domaindata->nplurals) + /* This should never happen. It means the plural expression and the + given maximum value do not match. */ + index = 0; + + /* Skip INDEX strings at TRANSLATION. */ + p = translation; + while (index-- > 0) + { +#ifdef _LIBC + p = __rawmemchr (p, '\0'); +#else + p = strchr (p, '\0'); +#endif + /* And skip over the NUL byte. */ + p++; + + if (p >= translation + translation_len) + /* This should never happen. It means the plural expression + evaluated to a value larger than the number of variants + available for MSGID1. */ + return (char *) translation; + } + return (char *) p; +} + + +/* Function to evaluate the plural expression and return an index value. */ +static unsigned long int +internal_function +plural_eval (pexp, n) + struct expression *pexp; + unsigned long int n; +{ + switch (pexp->nargs) + { + case 0: + switch (pexp->operation) + { + case var: + return n; + case num: + return pexp->val.num; + default: + break; + } + /* NOTREACHED */ + break; + case 1: + { + /* pexp->operation must be lnot. */ + unsigned long int arg = plural_eval (pexp->val.args[0], n); + return ! arg; + } + case 2: + { + unsigned long int leftarg = plural_eval (pexp->val.args[0], n); + if (pexp->operation == lor) + return leftarg || plural_eval (pexp->val.args[1], n); + else if (pexp->operation == land) + return leftarg && plural_eval (pexp->val.args[1], n); + else + { + unsigned long int rightarg = plural_eval (pexp->val.args[1], n); + + switch (pexp->operation) + { + case mult: + return leftarg * rightarg; + case divide: + return leftarg / rightarg; + case module: + return leftarg % rightarg; + case plus: + return leftarg + rightarg; + case minus: + return leftarg - rightarg; + case less_than: + return leftarg < rightarg; + case greater_than: + return leftarg > rightarg; + case less_or_equal: + return leftarg <= rightarg; + case greater_or_equal: + return leftarg >= rightarg; + case equal: + return leftarg == rightarg; + case not_equal: + return leftarg != rightarg; + default: + break; + } + } + /* NOTREACHED */ + break; + } + case 3: + { + /* pexp->operation must be qmop. */ + unsigned long int boolarg = plural_eval (pexp->val.args[0], n); + return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); + } + } + /* NOTREACHED */ + return 0; +} + + +/* Return string representation of locale CATEGORY. */ +static const char * +internal_function +category_to_name (category) + int category; +{ + const char *retval; + + switch (category) + { +#ifdef LC_COLLATE + case LC_COLLATE: + retval = "LC_COLLATE"; + break; +#endif +#ifdef LC_CTYPE + case LC_CTYPE: + retval = "LC_CTYPE"; + break; +#endif +#ifdef LC_MONETARY + case LC_MONETARY: + retval = "LC_MONETARY"; + break; +#endif +#ifdef LC_NUMERIC + case LC_NUMERIC: + retval = "LC_NUMERIC"; + break; +#endif +#ifdef LC_TIME + case LC_TIME: + retval = "LC_TIME"; + break; +#endif +#ifdef LC_MESSAGES + case LC_MESSAGES: + retval = "LC_MESSAGES"; + break; +#endif +#ifdef LC_RESPONSE + case LC_RESPONSE: + retval = "LC_RESPONSE"; + break; +#endif +#ifdef LC_ALL + case LC_ALL: + /* This might not make sense but is perhaps better than any other + value. */ + retval = "LC_ALL"; + break; +#endif + default: + /* If you have a better idea for a default value let me know. */ + retval = "LC_XXX"; + } + + return retval; +} + +/* Guess value of current locale from value of the environment variables. */ +static const char * +internal_function +guess_category_value (category, categoryname) + int category; + const char *categoryname; +{ + const char *language; + const char *retval; + + /* The highest priority value is the `LANGUAGE' environment + variable. But we don't use the value if the currently selected + locale is the C locale. This is a GNU extension. */ + language = getenv ("LANGUAGE"); + if (language != NULL && language[0] == '\0') + language = NULL; + + /* We have to proceed with the POSIX methods of looking to `LC_ALL', + `LC_xxx', and `LANG'. On some systems this can be done by the + `setlocale' function itself. */ +#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL) + retval = setlocale (category, NULL); +#else + /* Setting of LC_ALL overwrites all other. */ + retval = getenv ("LC_ALL"); + if (retval == NULL || retval[0] == '\0') + { + /* Next comes the name of the desired category. */ + retval = getenv (categoryname); + if (retval == NULL || retval[0] == '\0') + { + /* Last possibility is the LANG environment variable. */ + retval = getenv ("LANG"); + if (retval == NULL || retval[0] == '\0') + /* We use C as the default domain. POSIX says this is + implementation defined. */ + return "C"; + } + } +#endif + + return language != NULL && strcmp (retval, "C") != 0 ? language : retval; +} + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif + +#if !_LIBC && !HAVE_MEMPCPY +static void * +mempcpy (dest, src, n) + void *dest; + const void *src; + size_t n; +{ + return (void *) ((char *) memcpy (dest, src, n) + n); +} +#endif + + +#ifdef _LIBC +/* If we want to free all resources we have to do some work at + program's end. */ +static void __attribute__ ((unused)) +free_mem (void) +{ + void *old; + + while (_nl_domain_bindings != NULL) + { + struct binding *oldp = _nl_domain_bindings; + _nl_domain_bindings = _nl_domain_bindings->next; + if (oldp->dirname != _nl_default_dirname) + /* Yes, this is a pointer comparison. */ + free (oldp->dirname); + free (oldp->codeset); + free (oldp); + } + + if (_nl_current_default_domain != _nl_default_default_domain) + /* Yes, again a pointer comparison. */ + free ((char *) _nl_current_default_domain); + + /* Remove the search tree with the known translations. */ + __tdestroy (root, free); + root = NULL; + + while (transmem_list != NULL) + { + old = transmem_list; + transmem_list = transmem_list->next; + free (old); + } +} + +text_set_element (__libc_subfreeres, free_mem); +#endif diff --git a/intl/dcngettext.c b/intl/dcngettext.c new file mode 100644 index 0000000..c16af21 --- /dev/null +++ b/intl/dcngettext.c @@ -0,0 +1,60 @@ +/* Implementation of the dcngettext(3) function. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DCNGETTEXT __dcngettext +# define DCIGETTEXT __dcigettext +#else +# define DCNGETTEXT dcngettext__ +# define DCIGETTEXT dcigettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +char * +DCNGETTEXT (domainname, msgid1, msgid2, n, category) + const char *domainname; + const char *msgid1; + const char *msgid2; + unsigned long int n; + int category; +{ + return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dcngettext, dcngettext); +#endif diff --git a/intl/dgettext.c b/intl/dgettext.c new file mode 100644 index 0000000..3651207 --- /dev/null +++ b/intl/dgettext.c @@ -0,0 +1,59 @@ +/* Implementation of the dgettext(3) function. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <locale.h> + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DGETTEXT __dgettext +# define DCGETTEXT __dcgettext +#else +# define DGETTEXT dgettext__ +# define DCGETTEXT dcgettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog of the current + LC_MESSAGES locale. */ +char * +DGETTEXT (domainname, msgid) + const char *domainname; + const char *msgid; +{ + return DCGETTEXT (domainname, msgid, LC_MESSAGES); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dgettext, dgettext); +#endif diff --git a/intl/dngettext.c b/intl/dngettext.c new file mode 100644 index 0000000..f214e95 --- /dev/null +++ b/intl/dngettext.c @@ -0,0 +1,61 @@ +/* Implementation of the dngettext(3) function. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <locale.h> + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DNGETTEXT __dngettext +# define DCNGETTEXT __dcngettext +#else +# define DNGETTEXT dngettext__ +# define DCNGETTEXT dcngettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog of the current + LC_MESSAGES locale and skip message according to the plural form. */ +char * +DNGETTEXT (domainname, msgid1, msgid2, n) + const char *domainname; + const char *msgid1; + const char *msgid2; + unsigned long int n; +{ + return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dngettext, dngettext); +#endif diff --git a/intl/explodename.c b/intl/explodename.c new file mode 100644 index 0000000..2985064 --- /dev/null +++ b/intl/explodename.c @@ -0,0 +1,192 @@ +/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> + +#include "loadinfo.h" + +/* On some strange systems still no definition of NULL is found. Sigh! */ +#ifndef NULL +# if defined __STDC__ && __STDC__ +# define NULL ((void *) 0) +# else +# define NULL 0 +# endif +#endif + +/* @@ end of prolog @@ */ + +char * +_nl_find_language (name) + const char *name; +{ + while (name[0] != '\0' && name[0] != '_' && name[0] != '@' + && name[0] != '+' && name[0] != ',') + ++name; + + return (char *) name; +} + + +int +_nl_explode_name (name, language, modifier, territory, codeset, + normalized_codeset, special, sponsor, revision) + char *name; + const char **language; + const char **modifier; + const char **territory; + const char **codeset; + const char **normalized_codeset; + const char **special; + const char **sponsor; + const char **revision; +{ + enum { undecided, xpg, cen } syntax; + char *cp; + int mask; + + *modifier = NULL; + *territory = NULL; + *codeset = NULL; + *normalized_codeset = NULL; + *special = NULL; + *sponsor = NULL; + *revision = NULL; + + /* Now we determine the single parts of the locale name. First + look for the language. Termination symbols are `_' and `@' if + we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + mask = 0; + syntax = undecided; + *language = cp = name; + cp = _nl_find_language (*language); + + if (*language == cp) + /* This does not make sense: language has to be specified. Use + this entry as it is without exploding. Perhaps it is an alias. */ + cp = strchr (*language, '\0'); + else if (cp[0] == '_') + { + /* Next is the territory. */ + cp[0] = '\0'; + *territory = ++cp; + + while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' + && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= TERRITORY; + + if (cp[0] == '.') + { + /* Next is the codeset. */ + syntax = xpg; + cp[0] = '\0'; + *codeset = ++cp; + + while (cp[0] != '\0' && cp[0] != '@') + ++cp; + + mask |= XPG_CODESET; + + if (*codeset != cp && (*codeset)[0] != '\0') + { + *normalized_codeset = _nl_normalize_codeset (*codeset, + cp - *codeset); + if (strcmp (*codeset, *normalized_codeset) == 0) + free ((char *) *normalized_codeset); + else + mask |= XPG_NORM_CODESET; + } + } + } + + if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) + { + /* Next is the modifier. */ + syntax = cp[0] == '@' ? xpg : cen; + cp[0] = '\0'; + *modifier = ++cp; + + while (syntax == cen && cp[0] != '\0' && cp[0] != '+' + && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= XPG_MODIFIER | CEN_AUDIENCE; + } + + if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) + { + syntax = cen; + + if (cp[0] == '+') + { + /* Next is special application (CEN syntax). */ + cp[0] = '\0'; + *special = ++cp; + + while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= CEN_SPECIAL; + } + + if (cp[0] == ',') + { + /* Next is sponsor (CEN syntax). */ + cp[0] = '\0'; + *sponsor = ++cp; + + while (cp[0] != '\0' && cp[0] != '_') + ++cp; + + mask |= CEN_SPONSOR; + } + + if (cp[0] == '_') + { + /* Next is revision (CEN syntax). */ + cp[0] = '\0'; + *revision = ++cp; + + mask |= CEN_REVISION; + } + } + + /* For CEN syntax values it might be important to have the + separator character in the file name, not for XPG syntax. */ + if (syntax == xpg) + { + if (*territory != NULL && (*territory)[0] == '\0') + mask &= ~TERRITORY; + + if (*codeset != NULL && (*codeset)[0] == '\0') + mask &= ~XPG_CODESET; + + if (*modifier != NULL && (*modifier)[0] == '\0') + mask &= ~XPG_MODIFIER; + } + + return mask; +} diff --git a/intl/finddomain.c b/intl/finddomain.c new file mode 100644 index 0000000..2f103d5 --- /dev/null +++ b/intl/finddomain.c @@ -0,0 +1,198 @@ +/* Handle list of needed message catalogs + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@gnu.org>, 1995. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> +#include <sys/types.h> +#include <stdlib.h> +#include <string.h> + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +/* @@ end of prolog @@ */ +/* List of already loaded domains. */ +static struct loaded_l10nfile *_nl_loaded_domains; + + +/* Return a data structure describing the message catalog described by + the DOMAINNAME and CATEGORY parameters with respect to the currently + established bindings. */ +struct loaded_l10nfile * +internal_function +_nl_find_domain (dirname, locale, domainname, domainbinding) + const char *dirname; + char *locale; + const char *domainname; + struct binding *domainbinding; +{ + struct loaded_l10nfile *retval; + const char *language; + const char *modifier; + const char *territory; + const char *codeset; + const char *normalized_codeset; + const char *special; + const char *sponsor; + const char *revision; + const char *alias_value; + int mask; + + /* LOCALE can consist of up to four recognized parts for the XPG syntax: + + language[_territory[.codeset]][@modifier] + + and six parts for the CEN syntax: + + language[_territory][+audience][+special][,[sponsor][_revision]] + + Beside the first part all of them are allowed to be missing. If + the full specified locale is not found, the less specific one are + looked for. The various parts will be stripped off according to + the following order: + (1) revision + (2) sponsor + (3) special + (4) codeset + (5) normalized codeset + (6) territory + (7) audience/modifier + */ + + /* If we have already tested for this locale entry there has to + be one data set in the list of loaded domains. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, 0, locale, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, domainname, 0); + if (retval != NULL) + { + /* We know something about this locale. */ + int cnt; + + if (retval->decided == 0) + _nl_load_domain (retval, domainbinding); + + if (retval->data != NULL) + return retval; + + for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) + { + if (retval->successor[cnt]->decided == 0) + _nl_load_domain (retval->successor[cnt], domainbinding); + + if (retval->successor[cnt]->data != NULL) + break; + } + return cnt >= 0 ? retval : NULL; + /* NOTREACHED */ + } + + /* See whether the locale value is an alias. If yes its value + *overwrites* the alias name. No test for the original value is + done. */ + alias_value = _nl_expand_alias (locale); + if (alias_value != NULL) + { +#if defined _LIBC || defined HAVE_STRDUP + locale = strdup (alias_value); + if (locale == NULL) + return NULL; +#else + size_t len = strlen (alias_value) + 1; + locale = (char *) malloc (len); + if (locale == NULL) + return NULL; + + memcpy (locale, alias_value, len); +#endif + } + + /* Now we determine the single parts of the locale name. First + look for the language. Termination symbols are `_' and `@' if + we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + mask = _nl_explode_name (locale, &language, &modifier, &territory, + &codeset, &normalized_codeset, &special, + &sponsor, &revision); + + /* Create all possible locale entries which might be interested in + generalization. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, mask, language, territory, + codeset, normalized_codeset, modifier, special, + sponsor, revision, domainname, 1); + if (retval == NULL) + /* This means we are out of core. */ + return NULL; + + if (retval->decided == 0) + _nl_load_domain (retval, domainbinding); + if (retval->data == NULL) + { + int cnt; + for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) + { + if (retval->successor[cnt]->decided == 0) + _nl_load_domain (retval->successor[cnt], domainbinding); + if (retval->successor[cnt]->data != NULL) + break; + } + } + + /* The room for an alias was dynamically allocated. Free it now. */ + if (alias_value != NULL) + free (locale); + + /* The space for normalized_codeset is dynamically allocated. Free it. */ + if (mask & XPG_NORM_CODESET) + free ((void *) normalized_codeset); + + return retval; +} + + +#ifdef _LIBC +static void __attribute__ ((unused)) +free_mem (void) +{ + struct loaded_l10nfile *runp = _nl_loaded_domains; + + while (runp != NULL) + { + struct loaded_l10nfile *here = runp; + if (runp->data != NULL) + _nl_unload_domain ((struct loaded_domain *) runp->data); + runp = runp->next; + free ((char *) here->filename); + free (here); + } +} + +text_set_element (__libc_subfreeres, free_mem); +#endif diff --git a/intl/gettext.c b/intl/gettext.c new file mode 100644 index 0000000..22a6c24 --- /dev/null +++ b/intl/gettext.c @@ -0,0 +1,64 @@ +/* Implementation of gettext(3) function. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef _LIBC +# define __need_NULL +# include <stddef.h> +#else +# include <stdlib.h> /* Just for NULL. */ +#endif + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define GETTEXT __gettext +# define DCGETTEXT __dcgettext +#else +# define GETTEXT gettext__ +# define DCGETTEXT dcgettext__ +#endif + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +char * +GETTEXT (msgid) + const char *msgid; +{ + return DCGETTEXT (NULL, msgid, LC_MESSAGES); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__gettext, gettext); +#endif diff --git a/intl/gettext.h b/intl/gettext.h new file mode 100644 index 0000000..6f5d760 --- /dev/null +++ b/intl/gettext.h @@ -0,0 +1,102 @@ +/* Description of GNU message catalog format: general file layout. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _GETTEXT_H +#define _GETTEXT_H 1 + +#if HAVE_LIMITS_H || _LIBC +# include <limits.h> +#endif + +/* @@ end of prolog @@ */ + +/* The magic number of the GNU message catalog format. */ +#define _MAGIC 0x950412de +#define _MAGIC_SWAPPED 0xde120495 + +/* Revision number of the currently used .mo (binary) file format. */ +#define MO_REVISION_NUMBER 0 + +/* The following contortions are an attempt to use the C preprocessor + to determine an unsigned integral type that is 32 bits wide. An + alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but + as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work + when cross-compiling. */ + +#if __STDC__ +# define UINT_MAX_32_BITS 4294967295U +#else +# define UINT_MAX_32_BITS 0xFFFFFFFF +#endif + +/* If UINT_MAX isn't defined, assume it's a 32-bit type. + This should be valid for all systems GNU cares about because + that doesn't include 16-bit systems, and only modern systems + (that certainly have <limits.h>) have 64+-bit integral types. */ + +#ifndef UINT_MAX +# define UINT_MAX UINT_MAX_32_BITS +#endif + +#if UINT_MAX == UINT_MAX_32_BITS +typedef unsigned nls_uint32; +#else +# if USHRT_MAX == UINT_MAX_32_BITS +typedef unsigned short nls_uint32; +# else +# if ULONG_MAX == UINT_MAX_32_BITS +typedef unsigned long nls_uint32; +# else + /* The following line is intended to throw an error. Using #error is + not portable enough. */ + "Cannot determine unsigned 32-bit data type." +# endif +# endif +#endif + + +/* Header for binary .mo file format. */ +struct mo_file_header +{ + /* The magic number. */ + nls_uint32 magic; + /* The revision number of the file format. */ + nls_uint32 revision; + /* The number of strings pairs. */ + nls_uint32 nstrings; + /* Offset of table with start offsets of original strings. */ + nls_uint32 orig_tab_offset; + /* Offset of table with start offsets of translation strings. */ + nls_uint32 trans_tab_offset; + /* Size of hashing table. */ + nls_uint32 hash_tab_size; + /* Offset of first hashing entry. */ + nls_uint32 hash_tab_offset; +}; + +struct string_desc +{ + /* Length of addressed string. */ + nls_uint32 length; + /* Offset of string in file. */ + nls_uint32 offset; +}; + +/* @@ begin of epilog @@ */ + +#endif /* gettext.h */ diff --git a/intl/gettextP.h b/intl/gettextP.h new file mode 100644 index 0000000..43de1cd --- /dev/null +++ b/intl/gettextP.h @@ -0,0 +1,252 @@ +/* Header describing internals of libintl library. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@cygnus.com>, 1995. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _GETTEXTP_H +#define _GETTEXTP_H + +#include <stddef.h> /* Get size_t. */ + +#ifdef _LIBC +# include "../iconv/gconv_int.h" +#else +# if HAVE_ICONV +# include <iconv.h> +# endif +#endif + +#include "loadinfo.h" + +#include "gettext.h" /* Get nls_uint32. */ + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifndef internal_function +# define internal_function +#endif + +/* Tell the compiler when a conditional or integer expression is + almost always true or almost always false. */ +#ifndef HAVE_BUILTIN_EXPECT +# define __builtin_expect(expr, val) (expr) +#endif + +#ifndef W +# define W(flag, data) ((flag) ? SWAP (data) : (data)) +#endif + + +#ifdef _LIBC +# include <byteswap.h> +# define SWAP(i) bswap_32 (i) +#else +static inline nls_uint32 +SWAP (i) + nls_uint32 i; +{ + return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); +} +#endif + + +/* This is the representation of the expressions to determine the + plural form. */ +struct expression +{ + int nargs; /* Number of arguments. */ + enum operator + { + /* Without arguments: */ + var, /* The variable "n". */ + num, /* Decimal number. */ + /* Unary operators: */ + lnot, /* Logical NOT. */ + /* Binary operators: */ + mult, /* Multiplication. */ + divide, /* Division. */ + module, /* Module operation. */ + plus, /* Addition. */ + minus, /* Subtraction. */ + less_than, /* Comparison. */ + greater_than, /* Comparison. */ + less_or_equal, /* Comparison. */ + greater_or_equal, /* Comparison. */ + equal, /* Comparision for equality. */ + not_equal, /* Comparision for inequality. */ + land, /* Logical AND. */ + lor, /* Logical OR. */ + /* Ternary operators: */ + qmop /* Question mark operator. */ + } operation; + union + { + unsigned long int num; /* Number value for `num'. */ + struct expression *args[3]; /* Up to three arguments. */ + } val; +}; + +/* This is the data structure to pass information to the parser and get + the result in a thread-safe way. */ +struct parse_args +{ + const char *cp; + struct expression *res; +}; + + +/* The representation of an opened message catalog. */ +struct loaded_domain +{ + const char *data; + int use_mmap; + size_t mmap_size; + int must_swap; + nls_uint32 nstrings; + struct string_desc *orig_tab; + struct string_desc *trans_tab; + nls_uint32 hash_size; + nls_uint32 *hash_tab; + int codeset_cntr; +#ifdef _LIBC + __gconv_t conv; +#else +# if HAVE_ICONV + iconv_t conv; +# endif +#endif + char **conv_tab; + + struct expression *plural; + unsigned long int nplurals; +}; + +/* We want to allocate a string at the end of the struct. But ISO C + doesn't allow zero sized arrays. */ +#ifdef __GNUC__ +# define ZERO 0 +#else +# define ZERO 1 +#endif + +/* A set of settings bound to a message domain. Used to store settings + from bindtextdomain() and bind_textdomain_codeset(). */ +struct binding +{ + struct binding *next; + char *dirname; + int codeset_cntr; /* Incremented each time codeset changes. */ + char *codeset; + char domainname[ZERO]; +}; + +/* A counter which is incremented each time some previous translations + become invalid. + This variable is part of the external ABI of the GNU libintl. */ +extern int _nl_msg_cat_cntr; + +struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, + char *__locale, + const char *__domainname, + struct binding *__domainbinding)) + internal_function; +void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, + struct binding *__domainbinding)) + internal_function; +void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) + internal_function; +const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, + struct loaded_domain *__domain, + struct binding *__domainbinding)) + internal_function; +void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) + internal_function; + +char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, + struct binding *domainbinding, + const char *msgid, size_t *lengthp)) + internal_function; + +#ifdef _LIBC +extern char *__gettext PARAMS ((const char *__msgid)); +extern char *__dgettext PARAMS ((const char *__domainname, + const char *__msgid)); +extern char *__dcgettext PARAMS ((const char *__domainname, + const char *__msgid, int __category)); +extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *__dngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int n)); +extern char *__dcngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); +extern char *__dcigettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); +extern char *__textdomain PARAMS ((const char *__domainname)); +extern char *__bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, + const char *__codeset)); +#else +extern char *gettext__ PARAMS ((const char *__msgid)); +extern char *dgettext__ PARAMS ((const char *__domainname, + const char *__msgid)); +extern char *dcgettext__ PARAMS ((const char *__domainname, + const char *__msgid, int __category)); +extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *dngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *dcngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); +extern char *dcigettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); +extern char *textdomain__ PARAMS ((const char *__domainname)); +extern char *bindtextdomain__ PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, + const char *__codeset)); +#endif + +#ifdef _LIBC +extern void __gettext_free_exp PARAMS ((struct expression *exp)) + internal_function; +extern int __gettextparse PARAMS ((void *arg)); +#else +extern void gettext_free_exp__ PARAMS ((struct expression *exp)) + internal_function; +extern int gettextparse__ PARAMS ((void *arg)); +#endif + +/* @@ begin of epilog @@ */ + +#endif /* gettextP.h */ diff --git a/intl/hash-string.h b/intl/hash-string.h new file mode 100644 index 0000000..ccb7acc --- /dev/null +++ b/intl/hash-string.h @@ -0,0 +1,59 @@ +/* Description of GNU message catalog format: string hashing function. + Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +#endif + +/* We assume to have `unsigned long int' value with at least 32 bits. */ +#define HASHWORDBITS 32 + + +/* Defines the so called `hashpjw' function by P.J. Weinberger + [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, + 1986, 1987 Bell Telephone Laboratories, Inc.] */ +static unsigned long int hash_string PARAMS ((const char *__str_param)); + +static inline unsigned long int +hash_string (str_param) + const char *str_param; +{ + unsigned long int hval, g; + const char *str = str_param; + + /* Compute the hash value for the given string. */ + hval = 0; + while (*str != '\0') + { + hval <<= 4; + hval += (unsigned long int) *str++; + g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); + if (g != 0) + { + hval ^= g >> (HASHWORDBITS - 8); + hval ^= g; + } + } + return hval; +} diff --git a/intl/intl-compat.c b/intl/intl-compat.c new file mode 100644 index 0000000..0a06ce9 --- /dev/null +++ b/intl/intl-compat.c @@ -0,0 +1,166 @@ +/* intl-compat.c - Stub functions to call gettext functions from GNU gettext + Library. + Copyright (C) 1995, 2000, 2001 Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libgnuintl.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +/* This file redirects the gettext functions (without prefix or suffix) to + those defined in the included GNU gettext library (with "__" suffix). + It is compiled into libintl when the included GNU gettext library is + configured --with-included-gettext. + + This redirection works also in the case that the system C library or + the system libintl library contain gettext/textdomain/... functions. + If it didn't, we would need to add preprocessor level redirections to + libgnuintl.h of the following form: + +# define gettext gettext__ +# define dgettext dgettext__ +# define dcgettext dcgettext__ +# define ngettext ngettext__ +# define dngettext dngettext__ +# define dcngettext dcngettext__ +# define textdomain textdomain__ +# define bindtextdomain bindtextdomain__ +# define bind_textdomain_codeset bind_textdomain_codeset__ + + How does this redirection work? There are two cases. + A. When libintl.a is linked into an executable, it works because + functions defined in the executable always override functions in + the shared libraries. + B. When libintl.so is used, it works because + 1. those systems defining gettext/textdomain/... in the C library + (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are + ELF systems and define these symbols as weak, thus explicitly + letting other shared libraries override it. + 2. those systems defining gettext/textdomain/... in a standalone + libintl.so library (namely, Solaris 2.3 and newer) have this + shared library in /usr/lib, and the linker will search /usr/lib + *after* the directory where the GNU gettext library is installed. + + A third case, namely when libintl.a is linked into a shared library + whose name is not libintl.so, is not supported. In this case, on + Solaris, when -lintl precedes the linker option for the shared library + containing GNU gettext, the system's gettext would indeed override + the GNU gettext. Anyone doing this kind of stuff must be clever enough + to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker + command line. */ + + +#undef gettext +#undef dgettext +#undef dcgettext +#undef ngettext +#undef dngettext +#undef dcngettext +#undef textdomain +#undef bindtextdomain +#undef bind_textdomain_codeset + + +char * +gettext (msgid) + const char *msgid; +{ + return gettext__ (msgid); +} + + +char * +dgettext (domainname, msgid) + const char *domainname; + const char *msgid; +{ + return dgettext__ (domainname, msgid); +} + + +char * +dcgettext (domainname, msgid, category) + const char *domainname; + const char *msgid; + int category; +{ + return dcgettext__ (domainname, msgid, category); +} + + +char * +ngettext (msgid1, msgid2, n) + const char *msgid1; + const char *msgid2; + unsigned long int n; +{ + return ngettext__ (msgid1, msgid2, n); +} + + +char * +dngettext (domainname, msgid1, msgid2, n) + const char *domainname; + const char *msgid1; + const char *msgid2; + unsigned long int n; +{ + return dngettext__ (domainname, msgid1, msgid2, n); +} + + +char * +dcngettext (domainname, msgid1, msgid2, n, category) + const char *domainname; + const char *msgid1; + const char *msgid2; + unsigned long int n; + int category; +{ + return dcngettext__ (domainname, msgid1, msgid2, n, category); +} + + +char * +textdomain (domainname) + const char *domainname; +{ + return textdomain__ (domainname); +} + + +char * +bindtextdomain (domainname, dirname) + const char *domainname; + const char *dirname; +{ + return bindtextdomain__ (domainname, dirname); +} + + +char * +bind_textdomain_codeset (domainname, codeset) + const char *domainname; + const char *codeset; +{ + return bind_textdomain_codeset__ (domainname, codeset); +} diff --git a/intl/l10nflist.c b/intl/l10nflist.c new file mode 100644 index 0000000..8e2605b --- /dev/null +++ b/intl/l10nflist.c @@ -0,0 +1,405 @@ +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Tell glibc's <string.h> to provide a prototype for stpcpy(). + This must come before <config.h> because <config.h> may include + <features.h>, and once <features.h> has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined _LIBC || defined HAVE_ARGZ_H +# include <argz.h> +#endif +#include <ctype.h> +#include <sys/types.h> +#include <stdlib.h> + +#include "loadinfo.h" + +/* On some strange systems still no definition of NULL is found. Sigh! */ +#ifndef NULL +# if defined __STDC__ && __STDC__ +# define NULL ((void *) 0) +# else +# define NULL 0 +# endif +#endif + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# ifndef stpcpy +# define stpcpy(dest, src) __stpcpy(dest, src) +# endif +#else +# ifndef HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +# endif +#endif + +/* Define function which are usually not available. */ + +#if !defined _LIBC && !defined HAVE___ARGZ_COUNT +/* Returns the number of strings in ARGZ. */ +static size_t argz_count__ PARAMS ((const char *argz, size_t len)); + +static size_t +argz_count__ (argz, len) + const char *argz; + size_t len; +{ + size_t count = 0; + while (len > 0) + { + size_t part_len = strlen (argz); + argz += part_len + 1; + len -= part_len + 1; + count++; + } + return count; +} +# undef __argz_count +# define __argz_count(argz, len) argz_count__ (argz, len) +#endif /* !_LIBC && !HAVE___ARGZ_COUNT */ + +#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into the character SEP. */ +static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); + +static void +argz_stringify__ (argz, len, sep) + char *argz; + size_t len; + int sep; +{ + while (len > 0) + { + size_t part_len = strlen (argz); + argz += part_len; + len -= part_len + 1; + if (len > 0) + *argz++ = sep; + } +} +# undef __argz_stringify +# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) +#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ + +#if !defined _LIBC && !defined HAVE___ARGZ_NEXT +static char *argz_next__ PARAMS ((char *argz, size_t argz_len, + const char *entry)); + +static char * +argz_next__ (argz, argz_len, entry) + char *argz; + size_t argz_len; + const char *entry; +{ + if (entry) + { + if (entry < argz + argz_len) + entry = strchr (entry, '\0') + 1; + + return entry >= argz + argz_len ? NULL : (char *) entry; + } + else + if (argz_len > 0) + return argz; + else + return 0; +} +# undef __argz_next +# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) +#endif /* !_LIBC && !HAVE___ARGZ_NEXT */ + + +/* Return number of bits set in X. */ +static int pop PARAMS ((int x)); + +static inline int +pop (x) + int x; +{ + /* We assume that no more than 16 bits are used. */ + x = ((x & ~0x5555) >> 1) + (x & 0x5555); + x = ((x & ~0x3333) >> 2) + (x & 0x3333); + x = ((x >> 4) + x) & 0x0f0f; + x = ((x >> 8) + x) & 0xff; + + return x; +} + + +struct loaded_l10nfile * +_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, + territory, codeset, normalized_codeset, modifier, special, + sponsor, revision, filename, do_allocate) + struct loaded_l10nfile **l10nfile_list; + const char *dirlist; + size_t dirlist_len; + int mask; + const char *language; + const char *territory; + const char *codeset; + const char *normalized_codeset; + const char *modifier; + const char *special; + const char *sponsor; + const char *revision; + const char *filename; + int do_allocate; +{ + char *abs_filename; + struct loaded_l10nfile *last = NULL; + struct loaded_l10nfile *retval; + char *cp; + size_t entries; + int cnt; + + /* Allocate room for the full file name. */ + abs_filename = (char *) malloc (dirlist_len + + strlen (language) + + ((mask & TERRITORY) != 0 + ? strlen (territory) + 1 : 0) + + ((mask & XPG_CODESET) != 0 + ? strlen (codeset) + 1 : 0) + + ((mask & XPG_NORM_CODESET) != 0 + ? strlen (normalized_codeset) + 1 : 0) + + (((mask & XPG_MODIFIER) != 0 + || (mask & CEN_AUDIENCE) != 0) + ? strlen (modifier) + 1 : 0) + + ((mask & CEN_SPECIAL) != 0 + ? strlen (special) + 1 : 0) + + (((mask & CEN_SPONSOR) != 0 + || (mask & CEN_REVISION) != 0) + ? (1 + ((mask & CEN_SPONSOR) != 0 + ? strlen (sponsor) + 1 : 0) + + ((mask & CEN_REVISION) != 0 + ? strlen (revision) + 1 : 0)) : 0) + + 1 + strlen (filename) + 1); + + if (abs_filename == NULL) + return NULL; + + retval = NULL; + last = NULL; + + /* Construct file name. */ + memcpy (abs_filename, dirlist, dirlist_len); + __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR); + cp = abs_filename + (dirlist_len - 1); + *cp++ = '/'; + cp = stpcpy (cp, language); + + if ((mask & TERRITORY) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, territory); + } + if ((mask & XPG_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, codeset); + } + if ((mask & XPG_NORM_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, normalized_codeset); + } + if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) + { + /* This component can be part of both syntaces but has different + leading characters. For CEN we use `+', else `@'. */ + *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; + cp = stpcpy (cp, modifier); + } + if ((mask & CEN_SPECIAL) != 0) + { + *cp++ = '+'; + cp = stpcpy (cp, special); + } + if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) + { + *cp++ = ','; + if ((mask & CEN_SPONSOR) != 0) + cp = stpcpy (cp, sponsor); + if ((mask & CEN_REVISION) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, revision); + } + } + + *cp++ = '/'; + stpcpy (cp, filename); + + /* Look in list of already loaded domains whether it is already + available. */ + last = NULL; + for (retval = *l10nfile_list; retval != NULL; retval = retval->next) + if (retval->filename != NULL) + { + int compare = strcmp (retval->filename, abs_filename); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It's not in the list. */ + retval = NULL; + break; + } + + last = retval; + } + + if (retval != NULL || do_allocate == 0) + { + free (abs_filename); + return retval; + } + + retval = (struct loaded_l10nfile *) + malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len) + * (1 << pop (mask)) + * sizeof (struct loaded_l10nfile *))); + if (retval == NULL) + return NULL; + + retval->filename = abs_filename; + retval->decided = (__argz_count (dirlist, dirlist_len) != 1 + || ((mask & XPG_CODESET) != 0 + && (mask & XPG_NORM_CODESET) != 0)); + retval->data = NULL; + + if (last == NULL) + { + retval->next = *l10nfile_list; + *l10nfile_list = retval; + } + else + { + retval->next = last->next; + last->next = retval; + } + + entries = 0; + /* If the DIRLIST is a real list the RETVAL entry corresponds not to + a real file. So we have to use the DIRLIST separation mechanism + of the inner loop. */ + cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask; + for (; cnt >= 0; --cnt) + if ((cnt & ~mask) == 0 + && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) + && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) + { + /* Iterate over all elements of the DIRLIST. */ + char *dir = NULL; + + while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) + != NULL) + retval->successor[entries++] + = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, + language, territory, codeset, + normalized_codeset, modifier, special, + sponsor, revision, filename, 1); + } + retval->successor[entries] = NULL; + + return retval; +} + +/* Normalize codeset name. There is no standard for the codeset + names. Normalization allows the user to use any of the common + names. The return value is dynamically allocated and has to be + freed by the caller. */ +const char * +_nl_normalize_codeset (codeset, name_len) + const char *codeset; + size_t name_len; +{ + int len = 0; + int only_digit = 1; + char *retval; + char *wp; + size_t cnt; + + for (cnt = 0; cnt < name_len; ++cnt) + if (isalnum ((unsigned char) codeset[cnt])) + { + ++len; + + if (isalpha ((unsigned char) codeset[cnt])) + only_digit = 0; + } + + retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); + + if (retval != NULL) + { + if (only_digit) + wp = stpcpy (retval, "iso"); + else + wp = retval; + + for (cnt = 0; cnt < name_len; ++cnt) + if (isalpha ((unsigned char) codeset[cnt])) + *wp++ = tolower ((unsigned char) codeset[cnt]); + else if (isdigit ((unsigned char) codeset[cnt])) + *wp++ = codeset[cnt]; + + *wp = '\0'; + } + + return (const char *) retval; +} + + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif diff --git a/intl/libgettext.h b/intl/libgettext.h new file mode 100644 index 0000000..c5be54a --- /dev/null +++ b/intl/libgettext.h @@ -0,0 +1,49 @@ +/* Convenience header for conditional use of GNU <libintl.h>. + Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include <libintl.h> + +#else + +# define gettext(Msgid) (Msgid) +# define dgettext(Domainname, Msgid) (Msgid) +# define dcgettext(Domainname, Msgid, Category) (Msgid) +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) +# define textdomain(Domainname) ((char *) (Domainname)) +# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname)) +# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset)) + +#endif + +/* For automatical extraction of messages sometimes no real + translation is needed. Instead the string itself is the result. */ +#define gettext_noop(Str) (Str) + +#endif /* _LIBGETTEXT_H */ diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h new file mode 100644 index 0000000..f891deb --- /dev/null +++ b/intl/libgnuintl.h @@ -0,0 +1,128 @@ +/* Message catalogs for internationalization. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _LIBINTL_H +#define _LIBINTL_H 1 + +#include <locale.h> + +/* The LC_MESSAGES locale category is the category used by the functions + gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. + On systems that don't define it, use an arbitrary value instead. + On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e. + this file!) and then only defines LC_MESSAGES. To avoid a redefinition + warning, don't define LC_MESSAGES in this case. */ +#if !defined LC_MESSAGES && !defined __LOCALE_H +# define LC_MESSAGES 1729 +#endif + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +/* Resolve a platform specific conflict on DJGPP. GNU gettext takes + precedence over _conio_gettext. */ +#ifdef __DJGPP__ +# undef gettext +# define gettext gettext +#endif + +#ifndef PARAMS +# if __STDC__ || defined __cplusplus +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +extern char *gettext PARAMS ((const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ +extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, + int __category)); + + +/* Similar to `gettext' but select the plural form corresponding to the + number N. */ +extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); + +/* Similar to `dgettext' but select the plural form corresponding to the + number N. */ +extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1, + const char *__msgid2, unsigned long int __n)); + +/* Similar to `dcgettext' but select the plural form corresponding to the + number N. */ +extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1, + const char *__msgid2, unsigned long int __n, + int __category)); + + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +extern char *textdomain PARAMS ((const char *__domainname)); + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +extern char *bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); + +/* Specify the character encoding in which the messages from the + DOMAINNAME message catalog will be returned. */ +extern char *bind_textdomain_codeset PARAMS ((const char *__domainname, + const char *__codeset)); + + +/* Optimized version of the functions above. */ +#if defined __OPTIMIZED +/* These are macros, but could also be inline functions. */ + +# define gettext(msgid) \ + dgettext (NULL, msgid) + +# define dgettext(domainname, msgid) \ + dcgettext (domainname, msgid, LC_MESSAGES) + +# define ngettext(msgid1, msgid2, n) \ + dngettext (NULL, msgid1, msgid2, n) + +# define dngettext(domainname, msgid1, msgid2, n) \ + dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES) + +#endif /* Optimizing. */ + + +#ifdef __cplusplus +} +#endif + +#endif /* libintl.h */ diff --git a/intl/loadinfo.h b/intl/loadinfo.h new file mode 100644 index 0000000..b861260 --- /dev/null +++ b/intl/loadinfo.h @@ -0,0 +1,109 @@ +/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _LOADINFO_H +#define _LOADINFO_H 1 + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifndef internal_function +# define internal_function +#endif + +/* Tell the compiler when a conditional or integer expression is + almost always true or almost always false. */ +#ifndef HAVE_BUILTIN_EXPECT +# define __builtin_expect(expr, val) (expr) +#endif + +/* Separator in PATH like lists of pathnames. */ +#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ + /* Win32, OS/2, DOS */ +# define PATH_SEPARATOR ';' +#else + /* Unix */ +# define PATH_SEPARATOR ':' +#endif + +/* Encoding of locale name parts. */ +#define CEN_REVISION 1 +#define CEN_SPONSOR 2 +#define CEN_SPECIAL 4 +#define XPG_NORM_CODESET 8 +#define XPG_CODESET 16 +#define TERRITORY 32 +#define CEN_AUDIENCE 64 +#define XPG_MODIFIER 128 + +#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) +#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) + + +struct loaded_l10nfile +{ + const char *filename; + int decided; + + const void *data; + + struct loaded_l10nfile *next; + struct loaded_l10nfile *successor[1]; +}; + + +/* Normalize codeset name. There is no standard for the codeset + names. Normalization allows the user to use any of the common + names. The return value is dynamically allocated and has to be + freed by the caller. */ +extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, + size_t name_len)); + +extern struct loaded_l10nfile * +_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, + const char *dirlist, size_t dirlist_len, int mask, + const char *language, const char *territory, + const char *codeset, + const char *normalized_codeset, + const char *modifier, const char *special, + const char *sponsor, const char *revision, + const char *filename, int do_allocate)); + + +extern const char *_nl_expand_alias PARAMS ((const char *name)); + +/* normalized_codeset is dynamically allocated and has to be freed by + the caller. */ +extern int _nl_explode_name PARAMS ((char *name, const char **language, + const char **modifier, + const char **territory, + const char **codeset, + const char **normalized_codeset, + const char **special, + const char **sponsor, + const char **revision)); + +extern char *_nl_find_language PARAMS ((const char *name)); + +#endif /* loadinfo.h */ diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c new file mode 100644 index 0000000..a06134a --- /dev/null +++ b/intl/loadmsgcat.c @@ -0,0 +1,567 @@ +/* Load needed message catalogs. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Tell glibc's <string.h> to provide a prototype for mempcpy(). + This must come before <config.h> because <config.h> may include + <features.h>, and once <features.h> has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#include <stdlib.h> +#include <string.h> + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#ifdef _LIBC +# include <langinfo.h> +# include <locale.h> +#endif + +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || (defined _LIBC && defined _POSIX_MAPPED_FILES) +# include <sys/mman.h> +# undef HAVE_MMAP +# define HAVE_MMAP 1 +#else +# undef HAVE_MMAP +#endif + +#include "gettext.h" +#include "gettextP.h" + +#ifdef _LIBC +# include "../locale/localeinfo.h" +#endif + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ISO C functions. This is required by the standard + because some ISO C functions will require linking with this object + file and the name space must not be polluted. */ +# define open __open +# define close __close +# define read __read +# define mmap __mmap +# define munmap __munmap +#endif + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define PLURAL_PARSE __gettextparse +#else +# define PLURAL_PARSE gettextparse__ +#endif + +/* For those losing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +# define freea(p) /* nothing */ +#else +# define alloca(n) malloc (n) +# define freea(p) free (p) +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in <fcntl.h>. */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif +#ifdef __BEOS__ + /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif +/* On reasonable systems, binary I/O is the default. */ +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +/* We need a sign, whether a new catalog was loaded, which can be associated + with all translations. This is important if the translations are + cached by one of GCC's features. */ +int _nl_msg_cat_cntr; + +#if (defined __GNUC__ && !defined __APPLE_CC__) \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + +/* These structs are the constant expression for the germanic plural + form determination. It represents the expression "n != 1". */ +static const struct expression plvar = +{ + .nargs = 0, + .operation = var, +}; +static const struct expression plone = +{ + .nargs = 0, + .operation = num, + .val = + { + .num = 1 + } +}; +static struct expression germanic_plural = +{ + .nargs = 2, + .operation = not_equal, + .val = + { + .args = + { + [0] = (struct expression *) &plvar, + [1] = (struct expression *) &plone + } + } +}; + +# define INIT_GERMANIC_PLURAL() + +#else + +/* For compilers without support for ISO C 99 struct/union initializers: + Initialization at run-time. */ + +static struct expression plvar; +static struct expression plone; +static struct expression germanic_plural; + +static void +init_germanic_plural () +{ + if (plone.val.num == 0) + { + plvar.nargs = 0; + plvar.operation = var; + + plone.nargs = 0; + plone.operation = num; + plone.val.num = 1; + + germanic_plural.nargs = 2; + germanic_plural.operation = not_equal; + germanic_plural.val.args[0] = &plvar; + germanic_plural.val.args[1] = &plone; + } +} + +# define INIT_GERMANIC_PLURAL() init_germanic_plural () + +#endif + + +/* Initialize the codeset dependent parts of an opened message catalog. + Return the header entry. */ +const char * +internal_function +_nl_init_domain_conv (domain_file, domain, domainbinding) + struct loaded_l10nfile *domain_file; + struct loaded_domain *domain; + struct binding *domainbinding; +{ + /* Find out about the character set the file is encoded with. + This can be found (in textual form) in the entry "". If this + entry does not exist or if this does not contain the `charset=' + information, we will assume the charset matches the one the + current locale and we don't have to perform any conversion. */ + char *nullentry; + size_t nullentrylen; + + /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ + domain->codeset_cntr = + (domainbinding != NULL ? domainbinding->codeset_cntr : 0); +#ifdef _LIBC + domain->conv = (__gconv_t) -1; +#else +# if HAVE_ICONV + domain->conv = (iconv_t) -1; +# endif +#endif + domain->conv_tab = NULL; + + /* Get the header entry. */ + nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); + + if (nullentry != NULL) + { +#if defined _LIBC || HAVE_ICONV + const char *charsetstr; + + charsetstr = strstr (nullentry, "charset="); + if (charsetstr != NULL) + { + size_t len; + char *charset; + const char *outcharset; + + charsetstr += strlen ("charset="); + len = strcspn (charsetstr, " \t\n"); + + charset = (char *) alloca (len + 1); +# if defined _LIBC || HAVE_MEMPCPY + *((char *) mempcpy (charset, charsetstr, len)) = '\0'; +# else + memcpy (charset, charsetstr, len); + charset[len] = '\0'; +# endif + + /* The output charset should normally be determined by the + locale. But sometimes the locale is not used or not correctly + set up, so we provide a possibility for the user to override + this. Moreover, the value specified through + bind_textdomain_codeset overrides both. */ + if (domainbinding != NULL && domainbinding->codeset != NULL) + outcharset = domainbinding->codeset; + else + { + outcharset = getenv ("OUTPUT_CHARSET"); + if (outcharset == NULL || outcharset[0] == '\0') + { +# ifdef _LIBC + outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; +# else +# if HAVE_ICONV + extern const char *locale_charset (void); + outcharset = locale_charset (); +# endif +# endif + } + } + +# ifdef _LIBC + /* We always want to use transliteration. */ + outcharset = norm_add_slashes (outcharset, "TRANSLIT"); + charset = norm_add_slashes (charset, NULL); + if (__gconv_open (outcharset, charset, &domain->conv, + GCONV_AVOID_NOCONV) + != __GCONV_OK) + domain->conv = (__gconv_t) -1; +# else +# if HAVE_ICONV + /* When using GNU libiconv, we want to use transliteration. */ +# if _LIBICONV_VERSION >= 0x0105 + len = strlen (outcharset); + { + char *tmp = (char *) alloca (len + 10 + 1); + memcpy (tmp, outcharset, len); + memcpy (tmp + len, "//TRANSLIT", 10 + 1); + outcharset = tmp; + } +# endif + domain->conv = iconv_open (outcharset, charset); +# if _LIBICONV_VERSION >= 0x0105 + freea (outcharset); +# endif +# endif +# endif + + freea (charset); + } +#endif /* _LIBC || HAVE_ICONV */ + } + + return nullentry; +} + +/* Frees the codeset dependent parts of an opened message catalog. */ +void +internal_function +_nl_free_domain_conv (domain) + struct loaded_domain *domain; +{ + if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) + free (domain->conv_tab); + +#ifdef _LIBC + if (domain->conv != (__gconv_t) -1) + __gconv_close (domain->conv); +#else +# if HAVE_ICONV + if (domain->conv != (iconv_t) -1) + iconv_close (domain->conv); +# endif +#endif +} + +/* Load the message catalogs specified by FILENAME. If it is no valid + message catalog do nothing. */ +void +internal_function +_nl_load_domain (domain_file, domainbinding) + struct loaded_l10nfile *domain_file; + struct binding *domainbinding; +{ + int fd; + size_t size; +#ifdef _LIBC + struct stat64 st; +#else + struct stat st; +#endif + struct mo_file_header *data = (struct mo_file_header *) -1; + int use_mmap = 0; + struct loaded_domain *domain; + const char *nullentry; + + domain_file->decided = 1; + domain_file->data = NULL; + + /* Note that it would be useless to store domainbinding in domain_file + because domainbinding might be == NULL now but != NULL later (after + a call to bind_textdomain_codeset). */ + + /* If the record does not represent a valid locale the FILENAME + might be NULL. This can happen when according to the given + specification the locale file name is different for XPG and CEN + syntax. */ + if (domain_file->filename == NULL) + return; + + /* Try to open the addressed file. */ + fd = open (domain_file->filename, O_RDONLY | O_BINARY); + if (fd == -1) + return; + + /* We must know about the size of the file. */ + if ( +#ifdef _LIBC + __builtin_expect (fstat64 (fd, &st) != 0, 0) +#else + __builtin_expect (fstat (fd, &st) != 0, 0) +#endif + || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) + || __builtin_expect (size < sizeof (struct mo_file_header), 0)) + { + /* Something went wrong. */ + close (fd); + return; + } + +#ifdef HAVE_MMAP + /* Now we are ready to load the file. If mmap() is available we try + this first. If not available or it failed we try to load it. */ + data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, + MAP_PRIVATE, fd, 0); + + if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) + { + /* mmap() call was successful. */ + close (fd); + use_mmap = 1; + } +#endif + + /* If the data is not yet available (i.e. mmap'ed) we try to load + it manually. */ + if (data == (struct mo_file_header *) -1) + { + size_t to_read; + char *read_ptr; + + data = (struct mo_file_header *) malloc (size); + if (data == NULL) + return; + + to_read = size; + read_ptr = (char *) data; + do + { + long int nb = (long int) read (fd, read_ptr, to_read); + if (nb <= 0) + { +#ifdef EINTR + if (nb == -1 && errno == EINTR) + continue; +#endif + close (fd); + return; + } + read_ptr += nb; + to_read -= nb; + } + while (to_read > 0); + + close (fd); + } + + /* Using the magic number we can test whether it really is a message + catalog file. */ + if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, + 0)) + { + /* The magic number is wrong: not a message catalog file. */ +#ifdef HAVE_MMAP + if (use_mmap) + munmap ((caddr_t) data, size); + else +#endif + free (data); + return; + } + + domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); + if (domain == NULL) + return; + domain_file->data = domain; + + domain->data = (char *) data; + domain->use_mmap = use_mmap; + domain->mmap_size = size; + domain->must_swap = data->magic != _MAGIC; + + /* Fill in the information about the available tables. */ + switch (W (domain->must_swap, data->revision)) + { + case 0: + domain->nstrings = W (domain->must_swap, data->nstrings); + domain->orig_tab = (struct string_desc *) + ((char *) data + W (domain->must_swap, data->orig_tab_offset)); + domain->trans_tab = (struct string_desc *) + ((char *) data + W (domain->must_swap, data->trans_tab_offset)); + domain->hash_size = W (domain->must_swap, data->hash_tab_size); + domain->hash_tab = (nls_uint32 *) + ((char *) data + W (domain->must_swap, data->hash_tab_offset)); + break; + default: + /* This is an invalid revision. */ +#ifdef HAVE_MMAP + if (use_mmap) + munmap ((caddr_t) data, size); + else +#endif + free (data); + free (domain); + domain_file->data = NULL; + return; + } + + /* Now initialize the character set converter from the character set + the file is encoded with (found in the header entry) to the domain's + specified character set or the locale's character set. */ + nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); + + /* Also look for a plural specification. */ + if (nullentry != NULL) + { + const char *plural; + const char *nplurals; + + plural = strstr (nullentry, "plural="); + nplurals = strstr (nullentry, "nplurals="); + if (plural == NULL || nplurals == NULL) + goto no_plural; + else + { + /* First get the number. */ + char *endp; + unsigned long int n; + struct parse_args args; + + nplurals += 9; + while (*nplurals != '\0' && isspace ((unsigned char) *nplurals)) + ++nplurals; +#if defined HAVE_STRTOUL || defined _LIBC + n = strtoul (nplurals, &endp, 10); +#else + for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) + n = n * 10 + (*endp - '0'); +#endif + domain->nplurals = n; + if (nplurals == endp) + goto no_plural; + + /* Due to the restrictions bison imposes onto the interface of the + scanner function we have to put the input string and the result + passed up from the parser into the same structure which address + is passed down to the parser. */ + plural += 7; + args.cp = plural; + if (PLURAL_PARSE (&args) != 0) + goto no_plural; + domain->plural = args.res; + } + } + else + { + /* By default we are using the Germanic form: singular form only + for `one', the plural form otherwise. Yes, this is also what + English is using since English is a Germanic language. */ + no_plural: + INIT_GERMANIC_PLURAL (); + domain->plural = &germanic_plural; + domain->nplurals = 2; + } +} + + +#ifdef _LIBC +void +internal_function +_nl_unload_domain (domain) + struct loaded_domain *domain; +{ + if (domain->plural != &germanic_plural) + __gettext_free_exp (domain->plural); + + _nl_free_domain_conv (domain); + +# ifdef _POSIX_MAPPED_FILES + if (domain->use_mmap) + munmap ((caddr_t) domain->data, domain->mmap_size); + else +# endif /* _POSIX_MAPPED_FILES */ + free ((void *) domain->data); + + free (domain); +} +#endif diff --git a/intl/localcharset.c b/intl/localcharset.c new file mode 100644 index 0000000..61f8f3e --- /dev/null +++ b/intl/localcharset.c @@ -0,0 +1,271 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Written by Bruno Haible <haible@clisp.cons.org>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if HAVE_STDDEF_H +# include <stddef.h> +#endif + +#include <stdio.h> +#if HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif +#if HAVE_STDLIB_H +# include <stdlib.h> +#endif + +#if defined _WIN32 || defined __WIN32__ +# undef WIN32 /* avoid warning on mingw32 */ +# define WIN32 +#endif + +#ifndef WIN32 +# if HAVE_LANGINFO_CODESET +# include <langinfo.h> +# else +# if HAVE_SETLOCALE +# include <locale.h> +# endif +# endif +#else /* WIN32 */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif + +#ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +#endif + +#ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +#endif + +/* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ +#if __STDC__ != 1 +# define volatile /* empty */ +#endif +/* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ +static const char * volatile charset_aliases; + +/* Return a pointer to the contents of the charset.alias file. */ +static const char * +get_charset_aliases () +{ + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +#ifndef WIN32 + FILE *fp; + const char *dir = LIBDIR; + const char *base = "charset.alias"; + char *file_name; + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) + /* Out of memory or file not found, treat it as empty. */ + cp = ""; + else + { + /* Parse the file's contents. */ + int c; + char buf1[50+1]; + char buf2[50+1]; + char *res_ptr = NULL; + size_t res_size = 0; + size_t l1, l2; + + for (;;) + { + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf(fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + + if (file_name != NULL) + free (file_name); + +#else /* WIN32 */ + + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0"; +#endif + + charset_aliases = cp; + } + + return cp; +} + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset () +{ + const char *codeset; + const char *aliases; + +#ifndef WIN32 + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't + use setlocale here; it would return "C" when it doesn't support the + locale name the user has set. */ +# if HAVE_SETLOCALE && 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + +# endif + +#else /* WIN32 */ + + static char buf[2 + 10 + 1]; + + /* Win32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + +#endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + return codeset; +} diff --git a/intl/locale.alias b/intl/locale.alias new file mode 100644 index 0000000..bd7b9b3 --- /dev/null +++ b/intl/locale.alias @@ -0,0 +1,78 @@ +# Locale name alias data base. +# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. + +# The format of this file is the same as for the corresponding file of +# the X Window System, which normally can be found in +# /usr/lib/X11/locale/locale.alias +# A single line contains two fields: an alias and a substitution value. +# All entries are case independent. + +# Note: This file is far from being complete. If you have a value for +# your own site which you think might be useful for others too, share +# it with the rest of us. Send it using the `glibcbug' script to +# bugs@gnu.org. + +# Packages using this file: + +bokmal no_NO.ISO-8859-1 +bokmål no_NO.ISO-8859-1 +catalan ca_ES.ISO-8859-1 +croatian hr_HR.ISO-8859-2 +czech cs_CZ.ISO-8859-2 +danish da_DK.ISO-8859-1 +dansk da_DK.ISO-8859-1 +deutsch de_DE.ISO-8859-1 +dutch nl_NL.ISO-8859-1 +eesti et_EE.ISO-8859-1 +estonian et_EE.ISO-8859-1 +finnish fi_FI.ISO-8859-1 +français fr_FR.ISO-8859-1 +french fr_FR.ISO-8859-1 +galego gl_ES.ISO-8859-1 +galician gl_ES.ISO-8859-1 +german de_DE.ISO-8859-1 +greek el_GR.ISO-8859-7 +hebrew he_IL.ISO-8859-8 +hrvatski hr_HR.ISO-8859-2 +hungarian hu_HU.ISO-8859-2 +icelandic is_IS.ISO-8859-1 +italian it_IT.ISO-8859-1 +japanese ja_JP.eucJP +japanese.euc ja_JP.eucJP +ja_JP ja_JP.eucJP +ja_JP.ujis ja_JP.eucJP +japanese.sjis ja_JP.SJIS +korean ko_KR.eucKR +korean.euc ko_KR.eucKR +ko_KR ko_KR.eucKR +lithuanian lt_LT.ISO-8859-13 +nb_NO no_NO.ISO-8859-1 +nb_NO.ISO-8859-1 no_NO.ISO-8859-1 +norwegian no_NO.ISO-8859-1 +nynorsk nn_NO.ISO-8859-1 +polish pl_PL.ISO-8859-2 +portuguese pt_PT.ISO-8859-1 +romanian ro_RO.ISO-8859-2 +russian ru_RU.ISO-8859-5 +slovak sk_SK.ISO-8859-2 +slovene sl_SI.ISO-8859-2 +slovenian sl_SI.ISO-8859-2 +spanish es_ES.ISO-8859-1 +swedish sv_SE.ISO-8859-1 +thai th_TH.TIS-620 +turkish tr_TR.ISO-8859-9 diff --git a/intl/localealias.c b/intl/localealias.c new file mode 100644 index 0000000..f57d764 --- /dev/null +++ b/intl/localealias.c @@ -0,0 +1,404 @@ +/* Handle aliases for locale names. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Tell glibc's <string.h> to provide a prototype for mempcpy(). + This must come before <config.h> because <config.h> may include + <features.h>, and once <features.h> has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <stdio.h> +#include <sys/types.h> + +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#include <stdlib.h> + +#include <string.h> +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# define strcasecmp __strcasecmp + +# ifndef mempcpy +# define mempcpy __mempcpy +# endif +# define HAVE_MEMPCPY 1 + +/* We need locking here since we can be called from different places. */ +# include <bits/libc-lock.h> + +__libc_lock_define_initialized (static, lock); +#endif + +#ifndef internal_function +# define internal_function +#endif + +/* For those losing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +# define freea(p) /* nothing */ +#else +# define alloca(n) malloc (n) +# define freea(p) free (p) +#endif + +#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED +# undef fgets +# define fgets(buf, len, s) fgets_unlocked (buf, len, s) +#endif +#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED +# undef feof +# define feof(s) feof_unlocked (s) +#endif + + +struct alias_map +{ + const char *alias; + const char *value; +}; + + +static char *string_space; +static size_t string_space_act; +static size_t string_space_max; +static struct alias_map *map; +static size_t nmap; +static size_t maxmap; + + +/* Prototypes for local functions. */ +static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) + internal_function; +static int extend_alias_table PARAMS ((void)); +static int alias_compare PARAMS ((const struct alias_map *map1, + const struct alias_map *map2)); + + +const char * +_nl_expand_alias (name) + const char *name; +{ + static const char *locale_alias_path = LOCALE_ALIAS_PATH; + struct alias_map *retval; + const char *result = NULL; + size_t added; + +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + + do + { + struct alias_map item; + + item.alias = name; + + if (nmap > 0) + retval = (struct alias_map *) bsearch (&item, map, nmap, + sizeof (struct alias_map), + (int (*) PARAMS ((const void *, + const void *)) + ) alias_compare); + else + retval = NULL; + + /* We really found an alias. Return the value. */ + if (retval != NULL) + { + result = retval->value; + break; + } + + /* Perhaps we can find another alias file. */ + added = 0; + while (added == 0 && locale_alias_path[0] != '\0') + { + const char *start; + + while (locale_alias_path[0] == PATH_SEPARATOR) + ++locale_alias_path; + start = locale_alias_path; + + while (locale_alias_path[0] != '\0' + && locale_alias_path[0] != PATH_SEPARATOR) + ++locale_alias_path; + + if (start < locale_alias_path) + added = read_alias_file (start, locale_alias_path - start); + } + } + while (added != 0); + +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + + return result; +} + + +static size_t +internal_function +read_alias_file (fname, fname_len) + const char *fname; + int fname_len; +{ + FILE *fp; + char *full_fname; + size_t added; + static const char aliasfile[] = "/locale.alias"; + + full_fname = (char *) alloca (fname_len + sizeof aliasfile); +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (full_fname, fname, fname_len), + aliasfile, sizeof aliasfile); +#else + memcpy (full_fname, fname, fname_len); + memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); +#endif + + fp = fopen (full_fname, "r"); + freea (full_fname); + if (fp == NULL) + return 0; + + added = 0; + while (!feof (fp)) + { + /* It is a reasonable approach to use a fix buffer here because + a) we are only interested in the first two fields + b) these fields must be usable as file names and so must not + be that long + */ + char buf[BUFSIZ]; + char *alias; + char *value; + char *cp; + + if (fgets (buf, sizeof buf, fp) == NULL) + /* EOF reached. */ + break; + + /* Possibly not the whole line fits into the buffer. Ignore + the rest of the line. */ + if (strchr (buf, '\n') == NULL) + { + char altbuf[BUFSIZ]; + do + if (fgets (altbuf, sizeof altbuf, fp) == NULL) + /* Make sure the inner loop will be left. The outer loop + will exit at the `feof' test. */ + break; + while (strchr (altbuf, '\n') == NULL); + } + + cp = buf; + /* Ignore leading white space. */ + while (isspace ((unsigned char) cp[0])) + ++cp; + + /* A leading '#' signals a comment line. */ + if (cp[0] != '\0' && cp[0] != '#') + { + alias = cp++; + while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) + ++cp; + /* Terminate alias name. */ + if (cp[0] != '\0') + *cp++ = '\0'; + + /* Now look for the beginning of the value. */ + while (isspace ((unsigned char) cp[0])) + ++cp; + + if (cp[0] != '\0') + { + size_t alias_len; + size_t value_len; + + value = cp++; + while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) + ++cp; + /* Terminate value. */ + if (cp[0] == '\n') + { + /* This has to be done to make the following test + for the end of line possible. We are looking for + the terminating '\n' which do not overwrite here. */ + *cp++ = '\0'; + *cp = '\n'; + } + else if (cp[0] != '\0') + *cp++ = '\0'; + + if (nmap >= maxmap) + if (__builtin_expect (extend_alias_table (), 0)) + return added; + + alias_len = strlen (alias) + 1; + value_len = strlen (value) + 1; + + if (string_space_act + alias_len + value_len > string_space_max) + { + /* Increase size of memory pool. */ + size_t new_size = (string_space_max + + (alias_len + value_len > 1024 + ? alias_len + value_len : 1024)); + char *new_pool = (char *) realloc (string_space, new_size); + if (new_pool == NULL) + return added; + + if (__builtin_expect (string_space != new_pool, 0)) + { + size_t i; + + for (i = 0; i < nmap; i++) + { + map[i].alias += new_pool - string_space; + map[i].value += new_pool - string_space; + } + } + + string_space = new_pool; + string_space_max = new_size; + } + + map[nmap].alias = memcpy (&string_space[string_space_act], + alias, alias_len); + string_space_act += alias_len; + + map[nmap].value = memcpy (&string_space[string_space_act], + value, value_len); + string_space_act += value_len; + + ++nmap; + ++added; + } + } + } + + /* Should we test for ferror()? I think we have to silently ignore + errors. --drepper */ + fclose (fp); + + if (added > 0) + qsort (map, nmap, sizeof (struct alias_map), + (int (*) PARAMS ((const void *, const void *))) alias_compare); + + return added; +} + + +static int +extend_alias_table () +{ + size_t new_size; + struct alias_map *new_map; + + new_size = maxmap == 0 ? 100 : 2 * maxmap; + new_map = (struct alias_map *) realloc (map, (new_size + * sizeof (struct alias_map))); + if (new_map == NULL) + /* Simply don't extend: we don't have any more core. */ + return -1; + + map = new_map; + maxmap = new_size; + return 0; +} + + +#ifdef _LIBC +static void __attribute__ ((unused)) +free_mem (void) +{ + if (string_space != NULL) + free (string_space); + if (map != NULL) + free (map); +} +text_set_element (__libc_subfreeres, free_mem); +#endif + + +static int +alias_compare (map1, map2) + const struct alias_map *map1; + const struct alias_map *map2; +{ +#if defined _LIBC || defined HAVE_STRCASECMP + return strcasecmp (map1->alias, map2->alias); +#else + const unsigned char *p1 = (const unsigned char *) map1->alias; + const unsigned char *p2 = (const unsigned char *) map2->alias; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + /* I know this seems to be odd but the tolower() function in + some systems libc cannot handle nonalpha characters. */ + c1 = isupper (*p1) ? tolower (*p1) : *p1; + c2 = isupper (*p2) ? tolower (*p2) : *p2; + if (c1 == '\0') + break; + ++p1; + ++p2; + } + while (c1 == c2); + + return c1 - c2; +#endif +} diff --git a/intl/ngettext.c b/intl/ngettext.c new file mode 100644 index 0000000..fb3ec5a --- /dev/null +++ b/intl/ngettext.c @@ -0,0 +1,68 @@ +/* Implementation of ngettext(3) function. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef _LIBC +# define __need_NULL +# include <stddef.h> +#else +# include <stdlib.h> /* Just for NULL. */ +#endif + +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif + +#include <locale.h> + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define NGETTEXT __ngettext +# define DCNGETTEXT __dcngettext +#else +# define NGETTEXT ngettext__ +# define DCNGETTEXT dcngettext__ +#endif + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +char * +NGETTEXT (msgid1, msgid2, n) + const char *msgid1; + const char *msgid2; + unsigned long int n; +{ + return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__ngettext, ngettext); +#endif diff --git a/intl/plural.c b/intl/plural.c new file mode 100644 index 0000000..640d43c --- /dev/null +++ b/intl/plural.c @@ -0,0 +1,1326 @@ + +/* A Bison parser, made from plural.y + by GNU Bison version 1.28 */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define yyparse __gettextparse +#define yylex __gettextlex +#define yyerror __gettexterror +#define yylval __gettextlval +#define yychar __gettextchar +#define yydebug __gettextdebug +#define yynerrs __gettextnerrs +#define EQUOP2 257 +#define CMPOP2 258 +#define ADDOP2 259 +#define MULOP2 260 +#define NUMBER 261 + +#line 1 "plural.y" + +/* Expression parsing for plural form selection. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@cygnus.com>, 2000. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* The bison generated parser uses alloca. AIX 3 forces us to put this + declaration at the beginning of the file. The declaration in bison's + skeleton file comes too late. This must come before <config.h> + because <config.h> may include arbitrary system headers. */ +#if defined _AIX && !defined __GNUC__ + #pragma alloca +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include "gettextP.h" + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define FREE_EXPRESSION __gettext_free_exp +#else +# define FREE_EXPRESSION gettext_free_exp__ +# define __gettextparse gettextparse__ +#endif + +#define YYLEX_PARAM &((struct parse_args *) arg)->cp +#define YYPARSE_PARAM arg + +#line 53 "plural.y" +typedef union { + unsigned long int num; + enum operator op; + struct expression *exp; +} YYSTYPE; +#line 59 "plural.y" + +/* Prototypes for local functions. */ +static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); +static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); +static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); +static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); +static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +static void yyerror PARAMS ((const char *str)); + +/* Allocation of expressions. */ + +static struct expression * +new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; +{ + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; +} + +static inline struct expression * +new_exp_0 (op) + enum operator op; +{ + return new_exp (0, op, NULL); +} + +static inline struct expression * +new_exp_1 (op, right) + enum operator op; + struct expression *right; +{ + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); +} + +static struct expression * +new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; +{ + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); +} + +static inline struct expression * +new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; +{ + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); +} + +#include <stdio.h> + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define YYFINAL 27 +#define YYFLAG -32768 +#define YYNTBASE 16 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, + 11 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, + 37, 39 +}; + +static const short yyrhs[] = { 17, + 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, + 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, + 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, + 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, + 15, 0 +}; + +#endif + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 178, 186, 190, 194, 198, 202, 206, 210, 214, 218, + 222, 227 +}; +#endif + + +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) + +static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", +"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", +"start","exp", NULL +}; +#endif + +static const short yyr1[] = { 0, + 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17 +}; + +static const short yyr2[] = { 0, + 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, + 1, 3 +}; + +static const short yydefact[] = { 0, + 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, + 7, 8, 0, 2, 0, 0, 0 +}; + +static const short yydefgoto[] = { 25, + 5 +}; + +static const short yypact[] = { -9, + -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, + -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, + -3,-32768, -9, 34, 21, 53,-32768 +}; + +static const short yypgoto[] = {-32768, + -1 +}; + + +#define YYLAST 53 + + +static const short yytable[] = { 6, + 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, + 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, + 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, + 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, + 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, + 13, 14, 27 +}; + +static const short yycheck[] = { 1, + 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, + 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, + 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, + 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, + 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, + 8, 9, 0 +}; +#define YYPURE 1 + +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" +/* This file comes from bison-1.28. */ + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + 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, 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include <alloca.h> +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include <malloc.h> +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include <malloc.h> */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ + +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +#define YYMAXDEPTH 10000 +#endif + +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *to, char *from, unsigned int count) +{ + register char *t = to; + register char *f = from; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +#ifdef YYPARSE_PARAM +int yyparse (void *); +#else +int yyparse (void); +#endif +#endif + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 1: +#line 179 "plural.y" +{ + if (yyvsp[0].exp == NULL) + YYABORT; + ((struct parse_args *) arg)->res = yyvsp[0].exp; + ; + break;} +case 2: +#line 187 "plural.y" +{ + yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 3: +#line 191 "plural.y" +{ + yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 4: +#line 195 "plural.y" +{ + yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 5: +#line 199 "plural.y" +{ + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 6: +#line 203 "plural.y" +{ + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 7: +#line 207 "plural.y" +{ + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 8: +#line 211 "plural.y" +{ + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} +case 9: +#line 215 "plural.y" +{ + yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); + ; + break;} +case 10: +#line 219 "plural.y" +{ + yyval.exp = new_exp_0 (var); + ; + break;} +case 11: +#line 223 "plural.y" +{ + if ((yyval.exp = new_exp_0 (num)) != NULL) + yyval.exp->val.num = yyvsp[0].num; + ; + break;} +case 12: +#line 228 "plural.y" +{ + yyval.exp = yyvsp[-1].exp; + ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++yyvsp = yyval; + +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + +yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + +yyerrdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; + + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 0; + + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 1; +} +#line 233 "plural.y" + + +void +internal_function +FREE_EXPRESSION (exp) + struct expression *exp; +{ + if (exp == NULL) + return; + + /* Handle the recursive case. */ + switch (exp->nargs) + { + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); + /* FALLTHROUGH */ + default: + break; + } + + free (exp); +} + + +static int +yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; +{ + const char *exp = *pexp; + int result; + + while (1) + { + if (exp[0] == '\0') + { + *pexp = exp; + return YYEOF; + } + + if (exp[0] != ' ' && exp[0] != '\t') + break; + + ++exp; + } + + result = *exp++; + switch (result) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + unsigned long int n = result - '0'; + while (exp[0] >= '0' && exp[0] <= '9') + { + n *= 10; + n += exp[0] - '0'; + ++exp; + } + lval->num = n; + result = NUMBER; + } + break; + + case '=': + if (exp[0] == '=') + { + ++exp; + lval->op = equal; + result = EQUOP2; + } + else + result = YYERRCODE; + break; + + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + + case '&': + case '|': + if (exp[0] == result) + ++exp; + else + result = YYERRCODE; + break; + + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + + case '*': + lval->op = mult; + result = MULOP2; + break; + + case '/': + lval->op = divide; + result = MULOP2; + break; + + case '%': + lval->op = module; + result = MULOP2; + break; + + case '+': + lval->op = plus; + result = ADDOP2; + break; + + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': + case '?': + case ':': + case '(': + case ')': + /* Nothing, just return the character. */ + break; + + case ';': + case '\n': + case '\0': + /* Be safe and let the user call this function again. */ + --exp; + result = YYEOF; + break; + + default: + result = YYERRCODE; +#if YYDEBUG != 0 + --exp; +#endif + break; + } + + *pexp = exp; + + return result; +} + + +static void +yyerror (str) + const char *str; +{ + /* Do nothing. We don't print error messages here. */ +} diff --git a/intl/plural.y b/intl/plural.y new file mode 100644 index 0000000..be049a6 --- /dev/null +++ b/intl/plural.y @@ -0,0 +1,413 @@ +%{ +/* Expression parsing for plural form selection. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@cygnus.com>, 2000. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* The bison generated parser uses alloca. AIX 3 forces us to put this + declaration at the beginning of the file. The declaration in bison's + skeleton file comes too late. This must come before <config.h> + because <config.h> may include arbitrary system headers. */ +#if defined _AIX && !defined __GNUC__ + #pragma alloca +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include "gettextP.h" + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define FREE_EXPRESSION __gettext_free_exp +#else +# define FREE_EXPRESSION gettext_free_exp__ +# define __gettextparse gettextparse__ +#endif + +#define YYLEX_PARAM &((struct parse_args *) arg)->cp +#define YYPARSE_PARAM arg +%} +%pure_parser +%expect 10 + +%union { + unsigned long int num; + enum operator op; + struct expression *exp; +} + +%{ +/* Prototypes for local functions. */ +static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); +static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); +static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); +static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); +static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +static void yyerror PARAMS ((const char *str)); + +/* Allocation of expressions. */ + +static struct expression * +new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; +{ + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; +} + +static inline struct expression * +new_exp_0 (op) + enum operator op; +{ + return new_exp (0, op, NULL); +} + +static inline struct expression * +new_exp_1 (op, right) + enum operator op; + struct expression *right; +{ + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); +} + +static struct expression * +new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; +{ + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); +} + +static inline struct expression * +new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; +{ + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); +} + +%} + +/* This declares that all operators have the same associativity and the + precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. + There is no unary minus and no bitwise operators. + Operators with the same syntactic behaviour have been merged into a single + token, to save space in the array generated by bison. */ +%right '?' /* ? */ +%left '|' /* || */ +%left '&' /* && */ +%left EQUOP2 /* == != */ +%left CMPOP2 /* < > <= >= */ +%left ADDOP2 /* + - */ +%left MULOP2 /* * / % */ +%right '!' /* ! */ + +%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2 +%token <num> NUMBER +%type <exp> exp + +%% + +start: exp + { + if ($1 == NULL) + YYABORT; + ((struct parse_args *) arg)->res = $1; + } + ; + +exp: exp '?' exp ':' exp + { + $$ = new_exp_3 (qmop, $1, $3, $5); + } + | exp '|' exp + { + $$ = new_exp_2 (lor, $1, $3); + } + | exp '&' exp + { + $$ = new_exp_2 (land, $1, $3); + } + | exp EQUOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | exp CMPOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | exp ADDOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | exp MULOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | '!' exp + { + $$ = new_exp_1 (lnot, $2); + } + | 'n' + { + $$ = new_exp_0 (var); + } + | NUMBER + { + if (($$ = new_exp_0 (num)) != NULL) + $$->val.num = $1; + } + | '(' exp ')' + { + $$ = $2; + } + ; + +%% + +void +internal_function +FREE_EXPRESSION (exp) + struct expression *exp; +{ + if (exp == NULL) + return; + + /* Handle the recursive case. */ + switch (exp->nargs) + { + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); + /* FALLTHROUGH */ + default: + break; + } + + free (exp); +} + + +static int +yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; +{ + const char *exp = *pexp; + int result; + + while (1) + { + if (exp[0] == '\0') + { + *pexp = exp; + return YYEOF; + } + + if (exp[0] != ' ' && exp[0] != '\t') + break; + + ++exp; + } + + result = *exp++; + switch (result) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + unsigned long int n = result - '0'; + while (exp[0] >= '0' && exp[0] <= '9') + { + n *= 10; + n += exp[0] - '0'; + ++exp; + } + lval->num = n; + result = NUMBER; + } + break; + + case '=': + if (exp[0] == '=') + { + ++exp; + lval->op = equal; + result = EQUOP2; + } + else + result = YYERRCODE; + break; + + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + + case '&': + case '|': + if (exp[0] == result) + ++exp; + else + result = YYERRCODE; + break; + + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + + case '*': + lval->op = mult; + result = MULOP2; + break; + + case '/': + lval->op = divide; + result = MULOP2; + break; + + case '%': + lval->op = module; + result = MULOP2; + break; + + case '+': + lval->op = plus; + result = ADDOP2; + break; + + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': + case '?': + case ':': + case '(': + case ')': + /* Nothing, just return the character. */ + break; + + case ';': + case '\n': + case '\0': + /* Be safe and let the user call this function again. */ + --exp; + result = YYEOF; + break; + + default: + result = YYERRCODE; +#if YYDEBUG != 0 + --exp; +#endif + break; + } + + *pexp = exp; + + return result; +} + + +static void +yyerror (str) + const char *str; +{ + /* Do nothing. We don't print error messages here. */ +} diff --git a/intl/ref-add.sin b/intl/ref-add.sin new file mode 100644 index 0000000..167374e --- /dev/null +++ b/intl/ref-add.sin @@ -0,0 +1,31 @@ +# Add this package to a list of references stored in a text file. +# +# Copyright (C) 2000 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. +# +# Written by Bruno Haible <haible@clisp.cons.org>. +# +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ +} diff --git a/intl/ref-del.sin b/intl/ref-del.sin new file mode 100644 index 0000000..613cf37 --- /dev/null +++ b/intl/ref-del.sin @@ -0,0 +1,26 @@ +# Remove this package from a list of references stored in a text file. +# +# Copyright (C) 2000 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2, 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. +# +# Written by Bruno Haible <haible@clisp.cons.org>. +# +/^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ +} diff --git a/intl/textdomain.c b/intl/textdomain.c new file mode 100644 index 0000000..2e420ad --- /dev/null +++ b/intl/textdomain.c @@ -0,0 +1,142 @@ +/* Implementation of the textdomain(3) function. + Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include <string.h> + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgnuintl.h" +#endif +#include "gettextP.h" + +#ifdef _LIBC +/* We have to handle multi-threaded applications. */ +# include <bits/libc-lock.h> +#else +/* Provide dummy implementation if this is outside glibc. */ +# define __libc_rwlock_define(CLASS, NAME) +# define __libc_rwlock_wrlock(NAME) +# define __libc_rwlock_unlock(NAME) +#endif + +/* The internal variables in the standalone libintl.a must have different + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ +#if !defined _LIBC +# define _nl_default_default_domain _nl_default_default_domain__ +# define _nl_current_default_domain _nl_current_default_domain__ +#endif + +/* @@ end of prolog @@ */ + +/* Name of the default text domain. */ +extern const char _nl_default_default_domain[]; + +/* Default text domain in which entries for gettext(3) are to be found. */ +extern const char *_nl_current_default_domain; + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define TEXTDOMAIN __textdomain +# ifndef strdup +# define strdup(str) __strdup (str) +# endif +#else +# define TEXTDOMAIN textdomain__ +#endif + +/* Lock variable to protect the global data in the gettext implementation. */ +__libc_rwlock_define (extern, _nl_state_lock) + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +char * +TEXTDOMAIN (domainname) + const char *domainname; +{ + char *new_domain; + char *old_domain; + + /* A NULL pointer requests the current setting. */ + if (domainname == NULL) + return (char *) _nl_current_default_domain; + + __libc_rwlock_wrlock (_nl_state_lock); + + old_domain = (char *) _nl_current_default_domain; + + /* If domain name is the null string set to default domain "messages". */ + if (domainname[0] == '\0' + || strcmp (domainname, _nl_default_default_domain) == 0) + { + _nl_current_default_domain = _nl_default_default_domain; + new_domain = (char *) _nl_current_default_domain; + } + else if (strcmp (domainname, old_domain) == 0) + /* This can happen and people will use it to signal that some + environment variable changed. */ + new_domain = old_domain; + else + { + /* If the following malloc fails `_nl_current_default_domain' + will be NULL. This value will be returned and so signals we + are out of core. */ +#if defined _LIBC || defined HAVE_STRDUP + new_domain = strdup (domainname); +#else + size_t len = strlen (domainname) + 1; + new_domain = (char *) malloc (len); + if (new_domain != NULL) + memcpy (new_domain, domainname, len); +#endif + + if (new_domain != NULL) + _nl_current_default_domain = new_domain; + } + + /* We use this possibility to signal a change of the loaded catalogs + since this is most likely the case and there is no other easy we + to do it. Do it only when the call was successful. */ + if (new_domain != NULL) + { + ++_nl_msg_cat_cntr; + + if (old_domain != new_domain && old_domain != _nl_default_default_domain) + free (old_domain); + } + + __libc_rwlock_unlock (_nl_state_lock); + + return new_domain; +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__textdomain, textdomain); +#endif diff --git a/keymap.c b/keymap.c new file mode 100644 index 0000000..665a5fc --- /dev/null +++ b/keymap.c @@ -0,0 +1,923 @@ +/* + * Copyright (C) 1996-2000,2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mutt_curses.h" +#include "keymap.h" +#include "mapping.h" +#include "mutt_crypt.h" + +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +#include "functions.h" + +struct mapping_t Menus[] = { + { "alias", MENU_ALIAS }, + { "attach", MENU_ATTACH }, + { "browser", MENU_FOLDER }, + { "compose", MENU_COMPOSE }, + { "editor", MENU_EDITOR }, + { "index", MENU_MAIN }, + { "pager", MENU_PAGER }, + { "postpone", MENU_POST }, + { "pgp", MENU_PGP }, + { "smime", MENU_SMIME }, + +#ifdef MIXMASTER + { "mix", MENU_MIX }, +#endif + + + { "query", MENU_QUERY }, + { "generic", MENU_GENERIC }, + { NULL, 0 } +}; + +#define mutt_check_menu(s) mutt_getvaluebyname(s, Menus) + +static struct mapping_t KeyNames[] = { + { "<PageUp>", KEY_PPAGE }, + { "<PageDown>", KEY_NPAGE }, + { "<Up>", KEY_UP }, + { "<Down>", KEY_DOWN }, + { "<Right>", KEY_RIGHT }, + { "<Left>", KEY_LEFT }, + { "<Delete>", KEY_DC }, + { "<BackSpace>",KEY_BACKSPACE }, + { "<Insert>", KEY_IC }, + { "<Home>", KEY_HOME }, + { "<End>", KEY_END }, +#ifdef KEY_ENTER + { "<Enter>", KEY_ENTER }, +#endif + { "<Return>", M_ENTER_C }, + { "<Esc>", '\033' }, + { "<Tab>", '\t' }, + { "<Space>", ' ' }, +#ifdef KEY_BTAB + { "<BackTab>", KEY_BTAB }, +#endif + { NULL, 0 } +}; + +/* contains the last key the user pressed */ +int LastKey; + +struct keymap_t *Keymaps[MENU_MAX]; + +static struct keymap_t *allocKeys (int len, keycode_t *keys) +{ + struct keymap_t *p; + + p = safe_calloc (1, sizeof (struct keymap_t)); + p->len = len; + p->keys = safe_malloc (len * sizeof (keycode_t)); + memcpy (p->keys, keys, len * sizeof (keycode_t)); + return (p); +} + +static int parse_fkey(char *s) +{ + char *t; + int n = 0; + + if(s[0] != '<' || ascii_tolower(s[1]) != 'f') + return -1; + + for(t = s + 2; *t && isdigit((unsigned char) *t); t++) + { + n *= 10; + n += *t - '0'; + } + + if(*t != '>') + return -1; + else + return n; +} + +/* + * This function parses the string <NNN> and uses the octal value as the key + * to bind. + */ +static int parse_keycode (const char *s) +{ + if (isdigit ((unsigned char) s[1]) && + isdigit ((unsigned char) s[2]) && + isdigit ((unsigned char) s[3]) && + s[4] == '>') + { + return (s[3] - '0') + (s[2] - '0') * 8 + (s[1] - '0') * 64; + } + return -1; +} + +static int parsekeys (char *str, keycode_t *d, int max) +{ + int n, len = max; + char buff[SHORT_STRING]; + char c; + char *s, *t; + + strfcpy(buff, str, sizeof(buff)); + s = buff; + + while (*s && len) + { + *d = '\0'; + if(*s == '<' && (t = strchr(s, '>'))) + { + t++; c = *t; *t = '\0'; + + if ((n = mutt_getvaluebyname (s, KeyNames)) != -1) + { + s = t; + *d = n; + } + else if ((n = parse_fkey(s)) > 0) + { + s = t; + *d = KEY_F (n); + } + else if ((n = parse_keycode(s)) > 0) + { + s = t; + *d = n; + } + + *t = c; + } + + if(!*d) + { + *d = (unsigned char)*s; + s++; + } + d++; + len--; + } + + return (max - len); +} + +/* insert a key sequence into the specified map. the map is sorted by ASCII + * value (lowest to highest) + */ +void km_bind (char *s, int menu, int op, char *macro, char *descr) +{ + struct keymap_t *map, *tmp, *last = NULL, *next; + keycode_t buf[MAX_SEQ]; + int len, pos = 0, lastpos = 0; + + len = parsekeys (s, buf, MAX_SEQ); + + map = allocKeys (len, buf); + map->op = op; + map->macro = safe_strdup (macro); + map->descr = safe_strdup (descr); + + tmp = Keymaps[menu]; + + while (tmp) + { + if (pos >= len || pos >= tmp->len) + { + /* map and tmp match, but have different lengths, so overwrite */ + do + { + len = tmp->eq; + next = tmp->next; + FREE (&tmp->macro); + FREE (&tmp->keys); + FREE (&tmp->descr); + FREE (&tmp); + tmp = next; + } + while (tmp && len >= pos); + map->eq = len; + break; + } + else if (buf[pos] == tmp->keys[pos]) + pos++; + else if (buf[pos] < tmp->keys[pos]) + { + /* found location to insert between last and tmp */ + map->eq = pos; + break; + } + else /* buf[pos] > tmp->keys[pos] */ + { + last = tmp; + lastpos = pos; + if (pos > tmp->eq) + pos = tmp->eq; + tmp = tmp->next; + } + } + + map->next = tmp; + if (last) + { + last->next = map; + last->eq = lastpos; + } + else + Keymaps[menu] = map; +} + +void km_bindkey (char *s, int menu, int op) +{ + km_bind (s, menu, op, NULL, NULL); +} + +static int get_op (struct binding_t *bindings, const char *start, size_t len) +{ + int i; + + for (i = 0; bindings[i].name; i++) + { + if (!ascii_strncasecmp (start, bindings[i].name, len) && + mutt_strlen (bindings[i].name) == len) + return bindings[i].op; + } + + return OP_NULL; +} + +static char *get_func (struct binding_t *bindings, int op) +{ + int i; + + for (i = 0; bindings[i].name; i++) + { + if (bindings[i].op == op) + return bindings[i].name; + } + + return NULL; +} + +static void push_string (char *s) +{ + char *pp, *p = s + mutt_strlen (s) - 1; + size_t l; + int i, op = OP_NULL; + + while (p >= s) + { + /* if we see something like "<PageUp>", look to see if it is a real + function name and return the corresponding value */ + if (*p == '>') + { + for (pp = p - 1; pp >= s && *pp != '<'; pp--) + ; + if (pp >= s) + { + if ((i = parse_fkey (pp)) > 0) + { + mutt_ungetch (KEY_F (i), 0); + p = pp - 1; + continue; + } + + l = p - pp + 1; + for (i = 0; KeyNames[i].name; i++) + { + if (!ascii_strncasecmp (pp, KeyNames[i].name, l)) + break; + } + if (KeyNames[i].name) + { + /* found a match */ + mutt_ungetch (KeyNames[i].value, 0); + p = pp - 1; + continue; + } + + /* See if it is a valid command + * skip the '<' and the '>' when comparing */ + for (i = 0; Menus[i].name; i++) + { + struct binding_t *binding = km_get_table (Menus[i].value); + if (binding) + { + op = get_op (binding, pp + 1, l - 2); + if (op != OP_NULL) + break; + } + } + + if (op != OP_NULL) + { + mutt_ungetch (0, op); + p = pp - 1; + continue; + } + } + } + mutt_ungetch (*p--, 0); + } +} + +static int retry_generic (int menu, keycode_t *keys, int keyslen, int lastkey) +{ + if (menu != MENU_EDITOR && menu != MENU_GENERIC && menu != MENU_PAGER) + { + if (lastkey) + mutt_ungetch (lastkey, 0); + for (; keyslen; keyslen--) + mutt_ungetch (keys[keyslen - 1], 0); + return (km_dokey (MENU_GENERIC)); + } + if (menu != MENU_EDITOR) + { + /* probably a good idea to flush input here so we can abort macros */ + mutt_flushinp (); + } + return OP_NULL; +} + +/* return values: + * >0 function to execute + * OP_NULL no function bound to key sequence + * -1 error occured while reading input + */ +int km_dokey (int menu) +{ + event_t tmp; + struct keymap_t *map = Keymaps[menu]; + int pos = 0; + int n = 0; + int i; + + if (!map) + return (retry_generic (menu, NULL, 0, 0)); + + FOREVER + { + /* ncurses doesn't return on resized screen when timeout is set to zero */ + if (menu != MENU_EDITOR) + timeout ((Timeout > 0 ? Timeout : 60) * 1000); + + tmp = mutt_getch(); + + if (menu != MENU_EDITOR) + timeout (-1); /* restore blocking operation */ + + LastKey = tmp.ch; + if (LastKey == -1) + return -1; + + /* do we have an op already? */ + if (tmp.op) + { + char *func = NULL; + struct binding_t *bindings; + + /* is this a valid op for this menu? */ + if ((bindings = km_get_table (menu)) && + (func = get_func (bindings, tmp.op))) + return tmp.op; + + if (menu == MENU_EDITOR && get_func (OpEditor, tmp.op)) + return tmp.op; + + if (menu != MENU_EDITOR && menu != MENU_PAGER) + { + /* check generic menu */ + bindings = OpGeneric; + if ((func = get_func (bindings, tmp.op))) + return tmp.op; + } + + /* Sigh. Valid function but not in this context. + * Find the literal string and push it back */ + for (i = 0; Menus[i].name; i++) + { + bindings = km_get_table (Menus[i].value); + if (bindings) + { + func = get_func (bindings, tmp.op); + if (func) + { + /* careful not to feed the <..> as one token. otherwise + * push_string() will push the bogus op right back! */ + mutt_ungetch ('>', 0); + push_string (func); + mutt_ungetch ('<', 0); + break; + } + } + } + /* continue to chew */ + if (func) + continue; + } + + /* Nope. Business as usual */ + while (LastKey > map->keys[pos]) + { + if (pos > map->eq || !map->next) + return (retry_generic (menu, map->keys, pos, LastKey)); + map = map->next; + } + + if (LastKey != map->keys[pos]) + return (retry_generic (menu, map->keys, pos, LastKey)); + + if (++pos == map->len) + { + + if (map->op != OP_MACRO) + return map->op; + + if (n++ == 10) + { + mutt_flushinp (); + mutt_error _("Macro loop detected."); + return -1; + } + + push_string (map->macro); + map = Keymaps[menu]; + pos = 0; + } + } + + /* not reached */ +} + +static void create_bindings (struct binding_t *map, int menu) +{ + int i; + + for (i = 0 ; map[i].name ; i++) + if (map[i].seq) + km_bindkey (map[i].seq, menu, map[i].op); +} + +char *km_keyname (int c) +{ + static char buf[10]; + char *p; + + if ((p = mutt_getnamebyvalue (c, KeyNames))) + return p; + + if (c < 256 && c > -128 && iscntrl ((unsigned char) c)) + { + if (c < 0) + c += 256; + + if (c < 128) + { + buf[0] = '^'; + buf[1] = (c + '@') & 0x7f; + buf[2] = 0; + } + else + snprintf (buf, sizeof (buf), "\\%d%d%d", c >> 6, (c >> 3) & 7, c & 7); + } + else if (c >= KEY_F0 && c < KEY_F(256)) /* this maximum is just a guess */ + sprintf (buf, "<F%d>", c - KEY_F0); + else if (IsPrint (c)) + snprintf (buf, sizeof (buf), "%c", (unsigned char) c); + else + snprintf (buf, sizeof (buf), "\\x%hx", (unsigned short) c); + return (buf); +} + +int km_expand_key (char *s, size_t len, struct keymap_t *map) +{ + size_t l; + int p = 0; + + if (!map) + return (0); + + FOREVER + { + strfcpy (s, km_keyname (map->keys[p]), len); + len -= (l = mutt_strlen (s)); + + if (++p >= map->len || !len) + return (1); + + s += l; + } + + /* not reached */ +} + +struct keymap_t *km_find_func (int menu, int func) +{ + struct keymap_t *map = Keymaps[menu]; + + for (; map; map = map->next) + if (map->op == func) + break; + return (map); +} + +void km_init (void) +{ + memset (Keymaps, 0, sizeof (struct keymap_t *) * MENU_MAX); + + create_bindings (OpAttach, MENU_ATTACH); + create_bindings (OpBrowser, MENU_FOLDER); + create_bindings (OpCompose, MENU_COMPOSE); + create_bindings (OpMain, MENU_MAIN); + create_bindings (OpPager, MENU_PAGER); + create_bindings (OpPost, MENU_POST); + create_bindings (OpQuery, MENU_QUERY); + create_bindings (OpAlias, MENU_ALIAS); + + + if ((WithCrypto & APPLICATION_PGP)) + create_bindings (OpPgp, MENU_PGP); + + if ((WithCrypto & APPLICATION_SMIME)) + create_bindings (OpSmime, MENU_SMIME); + +#ifdef MIXMASTER + create_bindings (OpMix, MENU_MIX); + + km_bindkey ("<space>", MENU_MIX, OP_GENERIC_SELECT_ENTRY); + km_bindkey ("h", MENU_MIX, OP_MIX_CHAIN_PREV); + km_bindkey ("l", MENU_MIX, OP_MIX_CHAIN_NEXT); +#endif + + /* bindings for the line editor */ + create_bindings (OpEditor, MENU_EDITOR); + + km_bindkey ("<up>", MENU_EDITOR, OP_EDITOR_HISTORY_UP); + km_bindkey ("<down>", MENU_EDITOR, OP_EDITOR_HISTORY_DOWN); + km_bindkey ("<left>", MENU_EDITOR, OP_EDITOR_BACKWARD_CHAR); + km_bindkey ("<right>", MENU_EDITOR, OP_EDITOR_FORWARD_CHAR); + km_bindkey ("<home>", MENU_EDITOR, OP_EDITOR_BOL); + km_bindkey ("<end>", MENU_EDITOR, OP_EDITOR_EOL); + km_bindkey ("<backspace>", MENU_EDITOR, OP_EDITOR_BACKSPACE); + km_bindkey ("<delete>", MENU_EDITOR, OP_EDITOR_BACKSPACE); + km_bindkey ("\177", MENU_EDITOR, OP_EDITOR_BACKSPACE); + + /* generic menu keymap */ + create_bindings (OpGeneric, MENU_GENERIC); + + km_bindkey ("<home>", MENU_GENERIC, OP_FIRST_ENTRY); + km_bindkey ("<end>", MENU_GENERIC, OP_LAST_ENTRY); + km_bindkey ("<pagedown>", MENU_GENERIC, OP_NEXT_PAGE); + km_bindkey ("<pageup>", MENU_GENERIC, OP_PREV_PAGE); + km_bindkey ("<right>", MENU_GENERIC, OP_NEXT_PAGE); + km_bindkey ("<left>", MENU_GENERIC, OP_PREV_PAGE); + km_bindkey ("<up>", MENU_GENERIC, OP_PREV_ENTRY); + km_bindkey ("<down>", MENU_GENERIC, OP_NEXT_ENTRY); + km_bindkey ("1", MENU_GENERIC, OP_JUMP); + km_bindkey ("2", MENU_GENERIC, OP_JUMP); + km_bindkey ("3", MENU_GENERIC, OP_JUMP); + km_bindkey ("4", MENU_GENERIC, OP_JUMP); + km_bindkey ("5", MENU_GENERIC, OP_JUMP); + km_bindkey ("6", MENU_GENERIC, OP_JUMP); + km_bindkey ("7", MENU_GENERIC, OP_JUMP); + km_bindkey ("8", MENU_GENERIC, OP_JUMP); + km_bindkey ("9", MENU_GENERIC, OP_JUMP); + + km_bindkey ("<enter>", MENU_GENERIC, OP_GENERIC_SELECT_ENTRY); + + /* Miscellaneous extra bindings */ + + km_bindkey (" ", MENU_MAIN, OP_DISPLAY_MESSAGE); + km_bindkey ("<up>", MENU_MAIN, OP_MAIN_PREV_UNDELETED); + km_bindkey ("<down>", MENU_MAIN, OP_MAIN_NEXT_UNDELETED); + km_bindkey ("J", MENU_MAIN, OP_NEXT_ENTRY); + km_bindkey ("K", MENU_MAIN, OP_PREV_ENTRY); + km_bindkey ("x", MENU_MAIN, OP_EXIT); + + km_bindkey ("<enter>", MENU_MAIN, OP_DISPLAY_MESSAGE); + + km_bindkey ("x", MENU_PAGER, OP_EXIT); + km_bindkey ("<backspace>", MENU_PAGER, OP_PREV_LINE); + km_bindkey ("<pagedown>", MENU_PAGER, OP_NEXT_PAGE); + km_bindkey ("<pageup>", MENU_PAGER, OP_PREV_PAGE); + km_bindkey ("<up>", MENU_PAGER, OP_MAIN_PREV_UNDELETED); + km_bindkey ("<right>", MENU_PAGER, OP_MAIN_NEXT_UNDELETED); + km_bindkey ("<down>", MENU_PAGER, OP_MAIN_NEXT_UNDELETED); + km_bindkey ("<left>", MENU_PAGER, OP_MAIN_PREV_UNDELETED); + km_bindkey ("<home>", MENU_PAGER, OP_PAGER_TOP); + km_bindkey ("<end>", MENU_PAGER, OP_PAGER_BOTTOM); + km_bindkey ("1", MENU_PAGER, OP_JUMP); + km_bindkey ("2", MENU_PAGER, OP_JUMP); + km_bindkey ("3", MENU_PAGER, OP_JUMP); + km_bindkey ("4", MENU_PAGER, OP_JUMP); + km_bindkey ("5", MENU_PAGER, OP_JUMP); + km_bindkey ("6", MENU_PAGER, OP_JUMP); + km_bindkey ("7", MENU_PAGER, OP_JUMP); + km_bindkey ("8", MENU_PAGER, OP_JUMP); + km_bindkey ("9", MENU_PAGER, OP_JUMP); + + km_bindkey ("<enter>", MENU_PAGER, OP_NEXT_LINE); + + km_bindkey ("<return>", MENU_ALIAS, OP_GENERIC_SELECT_ENTRY); + km_bindkey ("<enter>", MENU_ALIAS, OP_GENERIC_SELECT_ENTRY); + km_bindkey ("<space>", MENU_ALIAS, OP_TAG); + + km_bindkey ("<enter>", MENU_ATTACH, OP_VIEW_ATTACH); + km_bindkey ("<enter>", MENU_COMPOSE, OP_VIEW_ATTACH); + + /* edit-to (default "t") hides generic tag-entry in Compose menu + This will bind tag-entry to "T" in the Compose menu */ + km_bindkey ("T", MENU_COMPOSE, OP_TAG); +} + +void km_error_key (int menu) +{ + char buf[SHORT_STRING]; + struct keymap_t *key; + + if(!(key = km_find_func(menu, OP_HELP))) + key = km_find_func(MENU_GENERIC, OP_HELP); + + if(!(km_expand_key(buf, sizeof(buf), key))) + { + mutt_error _("Key is not bound."); + return; + } + + /* make sure the key is really the help key in this menu */ + push_string (buf); + if (km_dokey (menu) != OP_HELP) + { + mutt_error _("Key is not bound."); + return; + } + + mutt_error (_("Key is not bound. Press '%s' for help."), buf); + return; +} + +int mutt_parse_push (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + int r = 0; + + mutt_extract_token (buf, s, M_TOKEN_CONDENSE); + if (MoreArgs (s)) + { + strfcpy (err->data, _("push: too many arguments"), err->dsize); + r = -1; + } + else + push_string (buf->data); + return (r); +} + +/* expects to see: <menu-string> <key-string> */ +char *parse_keymap (int *menu, BUFFER *s, BUFFER *err) +{ + BUFFER buf; + + memset (&buf, 0, sizeof (buf)); + + /* menu name */ + mutt_extract_token (&buf, s, 0); + if (MoreArgs (s)) + { + if ((*menu = mutt_check_menu (buf.data)) == -1) + { + snprintf (err->data, err->dsize, _("%s: no such menu"), buf.data); + } + else + { + /* key sequence */ + mutt_extract_token (&buf, s, 0); + + if (!*buf.data) + { + strfcpy (err->data, _("null key sequence"), err->dsize); + } + else if (MoreArgs (s)) + return (buf.data); + } + } + else + { + strfcpy (err->data, _("too few arguments"), err->dsize); + } + FREE (&buf.data); + return (NULL); +} + +static int +try_bind (char *key, int menu, char *func, struct binding_t *bindings) +{ + int i; + + for (i = 0; bindings[i].name; i++) + if (mutt_strcmp (func, bindings[i].name) == 0) + { + km_bindkey (key, menu, bindings[i].op); + return (0); + } + return (-1); +} + +struct binding_t *km_get_table (int menu) +{ + switch (menu) + { + case MENU_MAIN: + return OpMain; + case MENU_GENERIC: + return OpGeneric; + case MENU_COMPOSE: + return OpCompose; + case MENU_PAGER: + return OpPager; + case MENU_POST: + return OpPost; + case MENU_FOLDER: + return OpBrowser; + case MENU_ALIAS: + return OpAlias; + case MENU_ATTACH: + return OpAttach; + case MENU_EDITOR: + return OpEditor; + case MENU_QUERY: + return OpQuery; + + case MENU_PGP: + return (WithCrypto & APPLICATION_PGP)? OpPgp:NULL; + +#ifdef MIXMASTER + case MENU_MIX: + return OpMix; +#endif + + } + return NULL; +} + +/* bind menu-name '<key_sequence>' function-name */ +int mutt_parse_bind (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + struct binding_t *bindings = NULL; + char *key; + int menu, r = 0; + + if ((key = parse_keymap (&menu, s, err)) == NULL) + return (-1); + + /* function to execute */ + mutt_extract_token (buf, s, 0); + if (MoreArgs (s)) + { + strfcpy (err->data, _("bind: too many arguments"), err->dsize); + r = -1; + } + else if (ascii_strcasecmp ("noop", buf->data) == 0) + km_bindkey (key, menu, OP_NULL); /* the `unbind' command */ + else + { + /* First check the "generic" list of commands */ + if (menu == MENU_PAGER || menu == MENU_EDITOR || menu == MENU_GENERIC || + try_bind (key, menu, buf->data, OpGeneric) != 0) + { + /* Now check the menu-specific list of commands (if they exist) */ + bindings = km_get_table (menu); + if (bindings && try_bind (key, menu, buf->data, bindings) != 0) + { + snprintf (err->data, err->dsize, _("%s: no such function in map"), buf->data); + r = -1; + } + } + } + FREE (&key); + return (r); +} + +/* macro <menu> <key> <macro> <description> */ +int mutt_parse_macro (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + int menu, r = -1; + char *seq = NULL; + char *key; + + if ((key = parse_keymap (&menu, s, err)) == NULL) + return (-1); + + mutt_extract_token (buf, s, M_TOKEN_CONDENSE); + /* make sure the macro sequence is not an empty string */ + if (!*buf->data) + { + strfcpy (err->data, _("macro: empty key sequence"), err->dsize); + } + else + { + if (MoreArgs (s)) + { + seq = safe_strdup (buf->data); + mutt_extract_token (buf, s, M_TOKEN_CONDENSE); + + if (MoreArgs (s)) + { + strfcpy (err->data, _("macro: too many arguments"), err->dsize); + } + else + { + km_bind (key, menu, OP_MACRO, seq, buf->data); + r = 0; + } + + FREE (&seq); + } + else + { + km_bind (key, menu, OP_MACRO, buf->data, NULL); + r = 0; + } + } + FREE (&key); + return (r); +} + +/* exec function-name */ +int mutt_parse_exec (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + int ops[128]; + int nops = 0; + struct binding_t *bindings = NULL; + char *function; + + if (!MoreArgs (s)) + { + strfcpy (err->data, _("exec: no arguments"), err->dsize); + return (-1); + } + + do + { + mutt_extract_token (buf, s, 0); + function = buf->data; + + if ((bindings = km_get_table (CurrentMenu)) == NULL + && CurrentMenu != MENU_PAGER) + bindings = OpGeneric; + + ops[nops] = get_op (bindings, function, mutt_strlen(function)); + if (ops[nops] == OP_NULL && CurrentMenu != MENU_PAGER) + ops[nops] = get_op (OpGeneric, function, mutt_strlen(function)); + + if (ops[nops] == OP_NULL) + { + mutt_flushinp (); + mutt_error (_("%s: no such function"), function); + return (-1); + } + nops++; + } + while(MoreArgs(s) && nops < sizeof(ops)/sizeof(ops[0])); + + while(nops) + mutt_ungetch(0, ops[--nops]); + + return 0; +} + +/* + * prompts the user to enter a keystroke, and displays the octal value back + * to the user. + */ +void mutt_what_key (void) +{ + int ch; + + mvprintw(LINES-1,0, _("Enter keys (^G to abort): ")); + do { + ch = getch(); + if (ch != ERR && ch != ctrl ('G')) + { + mutt_message(_("Char = %s, Octal = %o, Decimal = %d"), + km_keyname(ch), ch, ch); + } + } + while (ch != ERR && ch != ctrl ('G')); + + mutt_flushinp(); +} diff --git a/keymap.h b/keymap.h new file mode 100644 index 0000000..a88bbf4 --- /dev/null +++ b/keymap.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 1996-2000,2 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef KEYMAP_H +#define KEYMAP_H + +#include "mapping.h" + +/* maximal length of a key binding sequence used for buffer in km_bindkey */ +#define MAX_SEQ 8 + +/* type for key storage, the rest of mutt works fine with int type */ +typedef short keycode_t; + +void km_bind (char *, int, int, char *, char *); +void km_bindkey (char *, int, int); +int km_dokey (int); + +/* entry in the keymap tree */ +struct keymap_t +{ + char *macro; /* macro expansion (op == OP_MACRO) */ + char *descr; /* description of a macro for the help menu */ + struct keymap_t *next; /* next key in map */ + short op; /* operation to perform */ + short eq; /* number of leading keys equal to next entry */ + short len; /* length of key sequence (unit: sizeof (keycode_t)) */ + keycode_t *keys; /* key sequence */ +}; + +char *km_keyname (int); +int km_expand_key (char *, size_t, struct keymap_t *); +struct keymap_t *km_find_func (int, int); +void km_init (void); +void km_error_key (int); +void mutt_what_key (void); + +enum +{ + MENU_ALIAS, + MENU_ATTACH, + MENU_COMPOSE, + MENU_EDITOR, + MENU_FOLDER, + MENU_GENERIC, + MENU_MAIN, + MENU_PAGER, + MENU_POST, + MENU_QUERY, + + + MENU_PGP, + + MENU_SMIME, + +#ifdef MIXMASTER + MENU_MIX, +#endif + + + + MENU_MAX +}; + +/* the keymap trees (one for each menu) */ +extern struct keymap_t *Keymaps[]; + +/* dokey() records the last real key pressed */ +extern int LastKey; + +extern struct mapping_t Menus[]; + +struct binding_t +{ + char *name; /* name of the function */ + int op; /* function id number */ + char *seq; /* default key binding */ +}; + +struct binding_t *km_get_table (int menu); + +extern struct binding_t OpGeneric[]; +extern struct binding_t OpPost[]; +extern struct binding_t OpMain[]; +extern struct binding_t OpAttach[]; +extern struct binding_t OpPager[]; +extern struct binding_t OpCompose[]; +extern struct binding_t OpBrowser[]; +extern struct binding_t OpEditor[]; +extern struct binding_t OpQuery[]; +extern struct binding_t OpAlias[]; + +extern struct binding_t OpPgp[]; + +extern struct binding_t OpSmime[]; + +#ifdef MIXMASTER +extern struct binding_t OpMix[]; +#endif + +#include "keymap_defs.h" + +#endif /* KEYMAP_H */ diff --git a/lib.c b/lib.c new file mode 100644 index 0000000..33d5757 --- /dev/null +++ b/lib.c @@ -0,0 +1,657 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* + * This file used to contain some more functions, namely those + * which are now in muttlib.c. They have been removed, so we have + * some of our "standard" functions in external programs, too. + */ + +#include <string.h> +#include <ctype.h> +#include <unistd.h> +#include <stdlib.h> +#include <sys/wait.h> +#include <errno.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <pwd.h> + +#include "lib.h" + +void mutt_nocurses_error (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fputc ('\n', stderr); +} + +void *safe_calloc (size_t nmemb, size_t size) +{ + void *p; + + if (!nmemb || !size) + return NULL; + + if (((size_t) -1) / nmemb <= size) + { + mutt_error _("Integer overflow -- can't allocate memory!"); + sleep (1); + mutt_exit (1); + } + + if (!(p = calloc (nmemb, size))) + { + mutt_error _("Out of memory!"); + sleep (1); + mutt_exit (1); + } + return p; +} + +void *safe_malloc (size_t siz) +{ + void *p; + + if (siz == 0) + return 0; + if ((p = (void *) malloc (siz)) == 0) /* __MEM_CHECKED__ */ + { + mutt_error _("Out of memory!"); + sleep (1); + mutt_exit (1); + } + return (p); +} + +void safe_realloc (void *ptr, size_t siz) +{ + void *r; + void **p = (void **)ptr; + + if (siz == 0) + { + if (*p) + { + free (*p); /* __MEM_CHECKED__ */ + *p = NULL; + } + return; + } + + if (*p) + r = (void *) realloc (*p, siz); /* __MEM_CHECKED__ */ + else + { + /* realloc(NULL, nbytes) doesn't seem to work under SunOS 4.1.x --- __MEM_CHECKED__ */ + r = (void *) malloc (siz); /* __MEM_CHECKED__ */ + } + + if (!r) + { + mutt_error _("Out of memory!"); + sleep (1); + mutt_exit (1); + } + + *p = r; +} + +void safe_free (void *ptr) +{ + void **p = (void **)ptr; + if (*p) + { + free (*p); /* __MEM_CHECKED__ */ + *p = 0; + } +} + +int safe_fclose (FILE **f) +{ + int r = 0; + + if (*f) + r = fclose (*f); + + *f = NULL; + return r; +} + +char *safe_strdup (const char *s) +{ + char *p; + size_t l; + + if (!s || !*s) + return 0; + l = strlen (s) + 1; + p = (char *)safe_malloc (l); + memcpy (p, s, l); + return (p); +} + +void mutt_str_replace (char **p, const char *s) +{ + FREE (p); + *p = safe_strdup (s); +} + +void mutt_str_adjust (char **p) +{ + if (!p || !*p) return; + safe_realloc (p, strlen (*p) + 1); +} + +/* convert all characters in the string to lowercase */ +char *mutt_strlower (char *s) +{ + char *p = s; + + while (*p) + { + *p = tolower ((unsigned char) *p); + p++; + } + + return (s); +} + +void mutt_unlink (const char *s) +{ + FILE *f; + struct stat sb; + char buf[2048]; + + if (stat (s, &sb) == 0) + { + if ((f = fopen (s, "r+"))) + { + unlink (s); + memset (buf, 0, sizeof (buf)); + while (sb.st_size > 0) + { + fwrite (buf, 1, MIN (sizeof (buf), sb.st_size), f); + sb.st_size -= MIN (sizeof (buf), sb.st_size); + } + fclose (f); + } + } +} + +int mutt_copy_bytes (FILE *in, FILE *out, size_t size) +{ + char buf[2048]; + size_t chunk; + + while (size > 0) + { + chunk = (size > sizeof (buf)) ? sizeof (buf) : size; + if ((chunk = fread (buf, 1, chunk, in)) < 1) + break; + if (fwrite (buf, 1, chunk, out) != chunk) + { + /* dprint (1, (debugfile, "mutt_copy_bytes(): fwrite() returned short byte count\n")); */ + return (-1); + } + size -= chunk; + } + + return 0; +} + +int mutt_copy_stream (FILE *fin, FILE *fout) +{ + size_t l; + char buf[LONG_STRING]; + + while ((l = fread (buf, 1, sizeof (buf), fin)) > 0) + { + if (fwrite (buf, 1, l, fout) != l) + return (-1); + } + + return 0; +} + +static int +compare_stat (struct stat *osb, struct stat *nsb) +{ + if (osb->st_dev != nsb->st_dev || osb->st_ino != nsb->st_ino || + osb->st_rdev != nsb->st_rdev) + { + return -1; + } + + return 0; +} + +int safe_symlink(const char *oldpath, const char *newpath) +{ + struct stat osb, nsb; + + if(!oldpath || !newpath) + return -1; + + if(unlink(newpath) == -1 && errno != ENOENT) + return -1; + + if (oldpath[0] == '/') + { + if (symlink (oldpath, newpath) == -1) + return -1; + } + else + { + char abs_oldpath[_POSIX_PATH_MAX]; + + if ((getcwd (abs_oldpath, sizeof abs_oldpath) == NULL) || + (strlen (abs_oldpath) + 1 + strlen (oldpath) + 1 > sizeof abs_oldpath)) + return -1; + + strcat (abs_oldpath, "/"); /* __STRCAT_CHECKED__ */ + strcat (abs_oldpath, oldpath); /* __STRCAT_CHECKED__ */ + if (symlink (abs_oldpath, newpath) == -1) + return -1; + } + + if(stat(oldpath, &osb) == -1 || stat(newpath, &nsb) == -1 + || compare_stat(&osb, &nsb) == -1) + { + unlink(newpath); + return -1; + } + + return 0; +} + +/* + * This function is supposed to do nfs-safe renaming of files. + * + * Warning: We don't check whether src and target are equal. + */ + +int safe_rename (const char *src, const char *target) +{ + struct stat ssb, tsb; + + if (!src || !target) + return -1; + + if (link (src, target) != 0) + { + + /* + * Coda does not allow cross-directory links, but tells + * us it's a cross-filesystem linking attempt. + * + * However, the Coda rename call is allegedly safe to use. + * + * With other file systems, rename should just fail when + * the files reside on different file systems, so it's safe + * to try it here. + * + */ + + if (errno == EXDEV) + return rename (src, target); + + return -1; + } + + /* + * Stat both links and check if they are equal. + */ + + if (stat (src, &ssb) == -1) + { + return -1; + } + + if (stat (target, &tsb) == -1) + { + return -1; + } + + /* + * pretend that the link failed because the target file + * did already exist. + */ + + if (compare_stat (&ssb, &tsb) == -1) + { + errno = EEXIST; + return -1; + } + + /* + * Unlink the original link. Should we really ignore the return + * value here? XXX + */ + + unlink (src); + + return 0; +} + +int safe_open (const char *path, int flags) +{ + struct stat osb, nsb; + int fd; + + if ((fd = open (path, flags, 0600)) < 0) + return fd; + + /* make sure the file is not symlink */ + if (lstat (path, &osb) < 0 || fstat (fd, &nsb) < 0 || + compare_stat(&osb, &nsb) == -1) + { +/* dprint (1, (debugfile, "safe_open(): %s is a symlink!\n", path)); */ + close (fd); + return (-1); + } + + return (fd); +} + +/* when opening files for writing, make sure the file doesn't already exist + * to avoid race conditions. + */ +FILE *safe_fopen (const char *path, const char *mode) +{ + if (mode[0] == 'w') + { + int fd; + int flags = O_CREAT | O_EXCL; + +#ifdef O_NOFOLLOW + flags |= O_NOFOLLOW; +#endif + + if (mode[1] == '+') + flags |= O_RDWR; + else + flags |= O_WRONLY; + + if ((fd = safe_open (path, flags)) < 0) + return (NULL); + + return (fdopen (fd, mode)); + } + else + return (fopen (path, mode)); +} + +static char safe_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+@{}._-:%/"; + +void mutt_sanitize_filename (char *f, short slash) +{ + if (!f) return; + + for (; *f; f++) + { + if ((slash && *f == '/') || !strchr (safe_chars, *f)) + *f = '_'; + } +} + +/* these characters must be escaped in regular expressions */ + +static char rx_special_chars[] = "^.[$()|*+?{\\"; + +int mutt_rx_sanitize_string (char *dest, size_t destlen, const char *src) +{ + while (*src && --destlen > 2) + { + if (strchr (rx_special_chars, *src)) + { + *dest++ = '\\'; + destlen--; + } + *dest++ = *src++; + } + + *dest = '\0'; + + if (*src) + return -1; + else + return 0; +} + +/* Read a line from ``fp'' into the dynamically allocated ``s'', + * increasing ``s'' if necessary. The ending "\n" or "\r\n" is removed. + * If a line ends with "\", this char and the linefeed is removed, + * and the next line is read too. + */ +char *mutt_read_line (char *s, size_t *size, FILE *fp, int *line) +{ + size_t offset = 0; + char *ch; + + if (!s) + { + s = safe_malloc (STRING); + *size = STRING; + } + + FOREVER + { + if (fgets (s + offset, *size - offset, fp) == NULL) + { + FREE (&s); + return NULL; + } + if ((ch = strchr (s + offset, '\n')) != NULL) + { + (*line)++; + *ch = 0; + if (ch > s && *(ch - 1) == '\r') + *--ch = 0; + if (ch == s || *(ch - 1) != '\\') + return s; + offset = ch - s - 1; + } + else + { + int c; + c = getc (fp); /* This is kind of a hack. We want to know if the + char at the current point in the input stream is EOF. + feof() will only tell us if we've already hit EOF, not + if the next character is EOF. So, we need to read in + the next character and manually check if it is EOF. */ + if (c == EOF) + { + /* The last line of fp isn't \n terminated */ + (*line)++; + return s; + } + else + { + ungetc (c, fp); /* undo our dammage */ + /* There wasn't room for the line -- increase ``s'' */ + offset = *size - 1; /* overwrite the terminating 0 */ + *size += STRING; + safe_realloc (&s, *size); + } + } + } +} + +char * +mutt_substrcpy (char *dest, const char *beg, const char *end, size_t destlen) +{ + size_t len; + + len = end - beg; + if (len > destlen - 1) + len = destlen - 1; + memcpy (dest, beg, len); + dest[len] = 0; + return dest; +} + +char *mutt_substrdup (const char *begin, const char *end) +{ + size_t len; + char *p; + + if (end) + len = end - begin; + else + len = strlen (begin); + + p = safe_malloc (len + 1); + memcpy (p, begin, len); + p[len] = 0; + return p; +} + +/* prepare a file name to survive the shell's quoting rules. + * From the Unix programming FAQ by way of Liviu. + */ + +size_t mutt_quote_filename (char *d, size_t l, const char *f) +{ + size_t i, j = 0; + + if(!f) + { + *d = '\0'; + return 0; + } + + /* leave some space for the trailing characters. */ + l -= 6; + + d[j++] = '\''; + + for(i = 0; j < l && f[i]; i++) + { + if(f[i] == '\'' || f[i] == '`') + { + d[j++] = '\''; + d[j++] = '\\'; + d[j++] = f[i]; + d[j++] = '\''; + } + else + d[j++] = f[i]; + } + + d[j++] = '\''; + d[j] = '\0'; + + return j; +} + +/* NULL-pointer aware string comparison functions */ + +int mutt_strcmp(const char *a, const char *b) +{ + return strcmp(NONULL(a), NONULL(b)); +} + +int mutt_strcasecmp(const char *a, const char *b) +{ + return strcasecmp(NONULL(a), NONULL(b)); +} + +int mutt_strncmp(const char *a, const char *b, size_t l) +{ + return strncmp(NONULL(a), NONULL(b), l); +} + +int mutt_strncasecmp(const char *a, const char *b, size_t l) +{ + return strncasecmp(NONULL(a), NONULL(b), l); +} + +size_t mutt_strlen(const char *a) +{ + return a ? strlen (a) : 0; +} + +int mutt_strcoll(const char *a, const char *b) +{ + return strcoll(NONULL(a), NONULL(b)); +} + +const char *mutt_stristr (const char *haystack, const char *needle) +{ + const char *p, *q; + + if (!haystack) + return NULL; + if (!needle) + return (haystack); + + while (*(p = haystack)) + { + for (q = needle; + *p && *q && + tolower ((unsigned char) *p) == tolower ((unsigned char) *q); + p++, q++) + ; + if (!*q) + return (haystack); + haystack++; + } + return NULL; +} + +char *mutt_skip_whitespace (char *p) +{ + SKIPWS (p); + return p; +} + +void mutt_remove_trailing_ws (char *s) +{ + char *p; + + for (p = s + mutt_strlen (s) - 1 ; p >= s && ISSPACE (*p) ; p--) + *p = 0; +} + +char *mutt_concat_path (char *d, const char *dir, const char *fname, size_t l) +{ + const char *fmt = "%s/%s"; + + if (!*fname || (*dir && dir[strlen(dir)-1] == '/')) + fmt = "%s%s"; + + snprintf (d, l, fmt, dir, fname); + return d; +} + +const char *mutt_basename (const char *f) +{ + const char *p = strrchr (f, '/'); + if (p) + return p + 1; + else + return f; +} diff --git a/lib.h b/lib.h new file mode 100644 index 0000000..2bda25d --- /dev/null +++ b/lib.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* mutt functions which are generally useful. */ + +#ifndef _LIB_H +# define _LIB_H + +# include "config.h" + +# include <stdio.h> +# include <string.h> +# ifdef HAVE_UNISTD_H +# include <unistd.h> /* needed for SEEK_SET */ +# endif +# include <sys/types.h> +# include <sys/stat.h> +# include <time.h> +# include <limits.h> +# include <stdarg.h> +# include <signal.h> + +# ifndef _POSIX_PATH_MAX +# include <posix1_lim.h> +# endif + +# ifdef ENABLE_NLS +# include <libintl.h> +# define _(a) (gettext (a)) +# ifdef gettext_noop +# define N_(a) gettext_noop (a) +# else +# define N_(a) (a) +# endif +# else +# define _(a) (a) +# define N_(a) a +# endif + +# define TRUE 1 +# define FALSE 0 + +# define HUGE_STRING 5120 +# define LONG_STRING 1024 +# define STRING 256 +# define SHORT_STRING 128 + +/* + * Create a format string to be used with scanf. + * To use it, write, for instance, MUTT_FORMAT(HUGE_STRING). + * + * See K&R 2nd ed, p. 231 for an explanation. + */ +# define _MUTT_FORMAT_2(a,b) "%" a b +# define _MUTT_FORMAT_1(a, b) _MUTT_FORMAT_2(#a, b) +# define MUTT_FORMAT(a) _MUTT_FORMAT_1(a, "s") +# define MUTT_FORMAT2(a,b) _MUTT_FORMAT_1(a, b) + + +# define FREE(x) safe_free(x) +# define NONULL(x) x?x:"" +# define ISSPACE(c) isspace((unsigned char)c) +# define strfcpy(A,B,C) strncpy(A,B,C), *(A+(C)-1)=0 + +# undef MAX +# undef MIN +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +# define MIN(a,b) ((a) < (b) ? (a) : (b)) + + +#define FOREVER while (1) + +/* this macro must check for *c == 0 since isspace(0) has unreliable behavior + on some systems */ +# define SKIPWS(c) while (*(c) && isspace ((unsigned char) *(c))) c++; + +/* + * These functions aren't defined in lib.c, but + * they are used there. + * + * A non-mutt "implementation" (ahem) can be found in extlib.c. + */ + +# ifndef _EXTLIB_C +extern void (*mutt_error) (const char *, ...); +# endif +void mutt_exit (int); + +/* The actual library functions. */ + +FILE *safe_fopen (const char *, const char *); + +char *mutt_concat_path (char *, const char *, const char *, size_t); +char *mutt_read_line (char *, size_t *, FILE *, int *); +char *mutt_skip_whitespace (char *); +char *mutt_strlower (char *); +char *mutt_substrcpy (char *, const char *, const char *, size_t); +char *mutt_substrdup (const char *, const char *); +char *safe_strdup (const char *); + +const char *mutt_stristr (const char *, const char *); +const char *mutt_basename (const char *); + +int mutt_copy_stream (FILE *, FILE *); +int mutt_copy_bytes (FILE *, FILE *, size_t); +int mutt_rx_sanitize_string (char *, size_t, const char *); +int mutt_strcasecmp (const char *, const char *); +int mutt_strcmp (const char *, const char *); +int mutt_strncasecmp (const char *, const char *, size_t); +int mutt_strncmp (const char *, const char *, size_t); +int mutt_strcoll (const char *, const char *); +int safe_open (const char *, int); +int safe_symlink (const char *, const char *); +int safe_rename (const char *, const char *); +int safe_fclose (FILE **); + +size_t mutt_quote_filename (char *, size_t, const char *); +size_t mutt_strlen (const char *); + +void *safe_calloc (size_t, size_t); +void *safe_malloc (size_t); +void mutt_nocurses_error (const char *, ...); +void mutt_remove_trailing_ws (char *); +void mutt_sanitize_filename (char *, short); +void mutt_str_replace (char **p, const char *s); +void mutt_str_adjust (char **p); +void mutt_unlink (const char *); +void safe_free (void *); +void safe_realloc (void *, size_t); + +#endif diff --git a/m4/Makefile.am b/m4/Makefile.am new file mode 100644 index 0000000..50663ec --- /dev/null +++ b/m4/Makefile.am @@ -0,0 +1,25 @@ +## Process this file with automake to produce Makefile.in -*-Makefile-*- + +##m4-files-begin +EXTRA_DIST = README Makefile.am.in \ +codeset.m4 \ +curslib.m4 \ +funcdecl.m4 \ +gettext.m4 \ +glibc21.m4 \ +gssapi.m4 \ +iconv.m4 \ +lcmessage.m4 \ +progtest.m4 +##m4-files-end + +Makefile.am: Makefile.am.in + rm -f $@ $@t + sed -n '1,/^##m4-files-begin/p' Makefile.am.in > $@t + ( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \ + (echo *.m4|tr ' ' @) ) \ + |sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \ + >> $@t + sed -n '/^##m4-files-end/,$$p' Makefile.am.in >> $@t + chmod a-w $@t + mv $@t $@ diff --git a/m4/Makefile.am.in b/m4/Makefile.am.in new file mode 100644 index 0000000..d4802c3 --- /dev/null +++ b/m4/Makefile.am.in @@ -0,0 +1,15 @@ +## Process this file with automake to produce Makefile.in -*-Makefile-*- + +##m4-files-begin +##m4-files-end + +Makefile.am: Makefile.am.in + rm -f $@ $@t + sed -n '1,/^##m4-files-begin/p' Makefile.am.in > $@t + ( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \ + (echo *.m4|tr ' ' @) ) \ + |sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \ + >> $@t + sed -n '/^##m4-files-end/,$$p' Makefile.am.in >> $@t + chmod a-w $@t + mv $@t $@ diff --git a/m4/Makefile.in b/m4/Makefile.in new file mode 100644 index 0000000..2026ab3 --- /dev/null +++ b/m4/Makefile.in @@ -0,0 +1,228 @@ +# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AR = @AR@ +BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DBX = @DBX@ +DEBUGGER = @DEBUGGER@ +DOTLOCK_GROUP = @DOTLOCK_GROUP@ +DOTLOCK_PERMISSION = @DOTLOCK_PERMISSION@ +DOTLOCK_TARGET = @DOTLOCK_TARGET@ +GDB = @GDB@ +GENCAT = @GENCAT@ +GLIBC21 = @GLIBC21@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +HAVE_LIB = @HAVE_LIB@ +INSTOBJEXT = @INSTOBJEXT@ +INTLBISON = @INTLBISON@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ +ISPELL = @ISPELL@ +KRB5CFGPATH = @KRB5CFGPATH@ +LIB = @LIB@ +LIBICONV = @LIBICONV@ +LIBIMAP = @LIBIMAP@ +LIBIMAPDEPS = @LIBIMAPDEPS@ +LTLIB = @LTLIB@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MUTTLIBS = @MUTTLIBS@ +MUTT_LIB_OBJECTS = @MUTT_LIB_OBJECTS@ +OPS = @OPS@ +PACKAGE = @PACKAGE@ +PGPAUX_TARGET = @PGPAUX_TARGET@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SDB = @SDB@ +SENDMAIL = @SENDMAIL@ +SMIMEAUX_TARGET = @SMIMEAUX_TARGET@ +SUBVERSION = @SUBVERSION@ +U = @U@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +docdir = @docdir@ +mutt_libesmtp_config_path = @mutt_libesmtp_config_path@ + +EXTRA_DIST = README Makefile.am.in codeset.m4 curslib.m4 funcdecl.m4 gettext.m4 glibc21.m4 gssapi.m4 iconv.m4 lcmessage.m4 progtest.m4 + +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = README Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps m4/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = m4 + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: tags distdir info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +Makefile.am: Makefile.am.in + rm -f $@ $@t + sed -n '1,/^##m4-files-begin/p' Makefile.am.in > $@t + ( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \ + (echo *.m4|tr ' ' @) ) \ + |sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \ + >> $@t + sed -n '/^##m4-files-end/,$$p' Makefile.am.in >> $@t + chmod a-w $@t + mv $@t $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/m4/README b/m4/README new file mode 100644 index 0000000..5e9b3a8 --- /dev/null +++ b/m4/README @@ -0,0 +1,8 @@ +These files are used by a program called aclocal (part of the GNU automake +package). aclocal uses these files to create aclocal.m4 which is in turn +used by autoconf to create the configure script at the the top level in +this distribution. + +The Makefile.am file in this directory is automatically generated +from the template file, Makefile.am.in. + diff --git a/m4/codeset.m4 b/m4/codeset.m4 new file mode 100644 index 0000000..1669694 --- /dev/null +++ b/m4/codeset.m4 @@ -0,0 +1,17 @@ +#serial AM1 + +dnl From Bruno Haible. + +AC_DEFUN([MUTT_AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include <langinfo.h>], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) + fi +]) diff --git a/m4/curslib.m4 b/m4/curslib.m4 new file mode 100644 index 0000000..5d443ec --- /dev/null +++ b/m4/curslib.m4 @@ -0,0 +1,83 @@ +dnl --------------------------------------------------------------------------- +dnl Look for the curses libraries. Older curses implementations may require +dnl termcap/termlib to be linked as well. +AC_DEFUN([CF_CURSES_LIBS],[ +AC_CHECK_FUNC(initscr,,[ +case $host_os in #(vi +freebsd*) #(vi + AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"]) + ;; +hpux10.*|hpux11.*) + AC_CHECK_LIB(cur_colr,initscr,[ + LIBS="-lcur_colr $LIBS" + CFLAGS="-I/usr/include/curses_colr $CFLAGS" + ac_cv_func_initscr=yes + ],[ + AC_CHECK_LIB(Hcurses,initscr,[ + # HP's header uses __HP_CURSES, but user claims _HP_CURSES. + LIBS="-lHcurses $LIBS" + CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS" + ac_cv_func_initscr=yes + ])]) + ;; +linux*) # Suse Linux does not follow /usr/lib convention + LIBS="$LIBS -L/lib" + ;; +esac + +if test ".$With5lib" != ".no" ; then +if test -d /usr/5lib ; then + # SunOS 3.x or 4.x + CPPFLAGS="$CPPFLAGS -I/usr/5include" + LIBS="$LIBS -L/usr/5lib" +fi +fi + +if test ".$ac_cv_func_initscr" != .yes ; then + cf_save_LIBS="$LIBS" + cf_term_lib="" + cf_curs_lib="" + + # Check for library containing tgoto. Do this before curses library + # because it may be needed to link the test-case for initscr. + AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[ + for cf_term_lib in termcap termlib unknown + do + AC_CHECK_LIB($cf_term_lib,tgoto,[break]) + done + ]) + + # Check for library containing initscr + test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS" + for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown + do + AC_CHECK_LIB($cf_curs_lib,initscr,[break]) + done + test $cf_curs_lib = unknown && AC_ERROR(no curses library found) + + LIBS="-l$cf_curs_lib $cf_save_LIBS" + if test "$cf_term_lib" = unknown ; then + AC_MSG_CHECKING(if we can link with $cf_curs_lib library) + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + [cf_result=yes], + [cf_result=no]) + AC_MSG_RESULT($cf_result) + test $cf_result = no && AC_ERROR(Cannot link curses library) + elif test "$cf_term_lib" != predefined ; then + AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries) + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr(); tgoto((char *)0, 0, 0);], + [cf_result=no], + [ + LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS" + AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>], + [initscr()], + [cf_result=yes], + [cf_result=error]) + ]) + AC_MSG_RESULT($cf_result) + fi +fi + +])]) diff --git a/m4/funcdecl.m4 b/m4/funcdecl.m4 new file mode 100644 index 0000000..f46be2e --- /dev/null +++ b/m4/funcdecl.m4 @@ -0,0 +1,62 @@ +dnl --------------------------------------------------------------------------- +dnl Check if a function is declared by including a set of include files. +dnl Invoke the corresponding actions according to whether it is found or not. +dnl +dnl Gcc (unlike other compilers) will only warn about the miscast assignment +dnl in the first test, but most compilers will oblige with an error in the +dnl second test. +dnl +dnl CF_CHECK_FUNCDECL(INCLUDES, FUNCTION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +AC_DEFUN([CF_CHECK_FUNCDECL], +[ +AC_MSG_CHECKING([for $2 declaration]) +AC_CACHE_VAL(ac_cv_func_decl_$2, +[AC_TRY_COMPILE([$1], +[#ifndef ${ac_func} +extern int ${ac_func}(); +#endif],[ +AC_TRY_COMPILE([$1], +[#ifndef ${ac_func} +int (*p)() = ${ac_func}; +#endif],[ +eval "ac_cv_func_decl_$2=yes"],[ +eval "ac_cv_func_decl_$2=no"])],[ +eval "ac_cv_func_decl_$2=yes"])]) +if eval "test \"`echo '$ac_cv_func_'decl_$2`\" = yes"; then + AC_MSG_RESULT(yes) + ifelse([$3], , :, [$3]) +else + AC_MSG_RESULT(no) +ifelse([$4], , , [$4 +])dnl +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl Check if functions are declared by including a set of include files. +dnl and define DECL_XXX if not. +dnl +dnl CF_CHECK_FUNCDECLS(INCLUDES, FUNCTION... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +AC_DEFUN([CF_CHECK_FUNCDECLS], +[for ac_func in $2 +do +CF_CHECK_FUNCDECL([$1], $ac_func, +[ + CF_UPPER(ac_tr_func,HAVE_$ac_func) + AC_DEFINE_UNQUOTED($ac_tr_func) $3], +[$4])dnl +dnl [$3], +dnl [ +dnl CF_UPPER(ac_tr_func,DECL_$ac_func) +dnl AC_DEFINE_UNQUOTED($ac_tr_func) $4])dnl +done +])dnl +dnl --------------------------------------------------------------------------- +dnl Make an uppercase version of a variable +dnl $1=uppercase($2) +AC_DEFUN([CF_UPPER], +[ +changequote(,)dnl +$1=`echo $2 | tr '[a-z]' '[A-Z]'` +changequote([,])dnl +])dnl +dnl --------------------------------------------------------------------------- diff --git a/m4/gettext.m4 b/m4/gettext.m4 new file mode 100644 index 0000000..4e2c4ec --- /dev/null +++ b/m4/gettext.m4 @@ -0,0 +1,376 @@ +# Macro to add for using GNU gettext. +# Ulrich Drepper <drepper@cygnus.com>, 1995. + +# +# Slightly modified by Thomas Roessler <roessler@does-not-exist.org> +# Updated to gettext-0.10.38 by Edmund Grimley Evans <edmundo@rano.org> +# Updated to gettext-0.10.40 by Andrew W. Nosenko <awn@bcs.zp.ua> +# + +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License or the GNU Library General Public License but which still want +# to provide support for the GNU gettext functionality. +# Please note that the actual code of the GNU gettext library is covered +# by the GNU Library General Public License, and the rest of the GNU +# gettext package package is covered by the GNU General Public License. +# They are *not* in the public domain. + +# serial 10 + +dnl Usage: MUTT_AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]). +dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). Otherwise, a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. +dnl LIBDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([MUTT_AM_WITH_NLS], + [AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls Do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + INTLLIBS= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext Use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + CATOBJEXT=NONE + + dnl Add a version number to the cache macros. + define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc]) + define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl]) + + AC_CHECK_HEADER(libintl.h, + [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include <libintl.h> +extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $LIBICONV" + AC_TRY_LINK([#include <libintl.h> +extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + dnl If iconv() is in a separate libiconv library, then anyone + dnl linking with libintl{.a,.so} also needs to link with + dnl libiconv. + INTLLIBS="-lintl $LIBICONV" + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + LIBS="$gt_save_LIBS" + + dnl Search for GNU msgfmt in the PATH. + MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext in the PATH. + MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + + CATOBJEXT=.gmo + fi + ]) + + if test "$CATOBJEXT" = "NONE"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + MUTT_AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + MUTT_AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + AC_SUBST(MSGFMT) + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found msgfmt program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the MUTT_PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + AC_OUTPUT_COMMANDS( + [for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + fi + ;; + esac + done]) + + + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(GMOFILES) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLOBJS) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + ]) + +dnl Usage: Just like MUTT_AM_WITH_NLS, which see. +AC_DEFUN([MUTT_AM_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([MUTT_jm_GLIBC21])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ +getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ +strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + + MUTT_AM_ICONV + MUTT_AM_LANGINFO_CODESET + MUTT_AM_LC_MESSAGES + MUTT_AM_WITH_NLS([$1],[$2],[$3]) + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) diff --git a/m4/glibc21.m4 b/m4/glibc21.m4 new file mode 100644 index 0000000..caaba76 --- /dev/null +++ b/m4/glibc21.m4 @@ -0,0 +1,26 @@ +#serial 2 + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([MUTT_jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/m4/gssapi.m4 b/m4/gssapi.m4 new file mode 100644 index 0000000..e8451ea --- /dev/null +++ b/m4/gssapi.m4 @@ -0,0 +1,77 @@ +# gssapi.m4: Find GSSAPI libraries in either Heimdal or MIT implementations +# Brendan Cully <brendan@kublai.com> 20010529 + +dnl MUTT_AM_PATH_GSSAPI(PREFIX) +dnl Search for a GSSAPI implementation in the standard locations plus PREFIX, +dnl if it is set and not "yes". +dnl Defines GSSAPI_CFLAGS and GSSAPI_LIBS if found. +dnl Defines GSSAPI_IMPL to "Heimdal", "MIT", or "OldMIT", or "none" if not found +AC_DEFUN([MUTT_AM_PATH_GSSAPI], +[ + GSSAPI_PREFIX=[$]$1 + GSSAPI_IMPL="none" + saved_CPPFLAGS="$CPPFLAGS" + saved_LDFLAGS="$LDFLAGS" + saved_LIBS="$LIBS" + dnl First try krb5-config + if test "$GSSAPI_PREFIX" != "yes" + then + krb5_path="$GSSAPI_PREFIX/bin" + else + krb5_path="$PATH" + fi + AC_PATH_PROG(KRB5CFGPATH, krb5-config, none, $krb5_path) + if test "$KRB5CFGPATH" != "none" + then + GSSAPI_CFLAGS="$CPPFLAGS `$KRB5CFGPATH --cflags gssapi`" + GSSAPI_LIBS="$MUTTLIBS `$KRB5CFGPATH --libs gssapi`" + case "`$KRB5CFGPATH --version`" in + "Kerberos 5 "*) GSSAPI_IMPL="MIT";; + ?eimdal*) GSSAPI_IMPL="Heimdal";; + *) GSSAPI_IMPL="Unknown";; + esac + else + dnl No krb5-config, run the old code + if test "$GSSAPI_PREFIX" != "yes" + then + GSSAPI_CFLAGS="-I$GSSAPI_PREFIX/include" + GSSAPI_LDFLAGS="-L$GSSAPI_PREFIX/lib" + CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS" + LDFLAGS="$LDFLAGS $GSSAPI_LDFLAGS" + fi + + dnl New MIT kerberos V support + AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context, [ + GSSAPI_IMPL="MIT", + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" + ],, -lkrb5 -lk5crypto -lcom_err) + + dnl Heimdal kerberos V support + if test "$GSSAPI_IMPL" = "none" + then + AC_CHECK_LIB(gssapi, gss_init_sec_context, [ + GSSAPI_IMPL="Heimdal" + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi -lkrb5 -ldes -lasn1 -lroken" + GSSAPI_LIBS="$GSSAPI_LIBS -lcrypt -lcom_err" + ],, -lkrb5 -ldes -lasn1 -lroken -lcrypt -lcom_err) + fi + + dnl Old MIT Kerberos V + dnl Note: older krb5 distributions use -lcrypto instead of + dnl -lk5crypto, which collides with OpenSSL. One way of dealing + dnl with that is to extract all objects from krb5's libcrypto + dnl and from openssl's libcrypto into the same directory, then + dnl to create a new libcrypto from these. + if test "$GSSAPI_IMPL" = "none" + then + AC_CHECK_LIB(gssapi_krb5, g_order_init, [ + GSSAPI_IMPL="OldMIT", + GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" + ],, -lkrb5 -lcrypto -lcom_err) + fi + fi + + CPPFLAGS="$saved_CPPFLAGS" + LDFLAGS="$saved_LDFLAGS" + LIBS="$saved_LIBS" +]) diff --git a/m4/iconv.m4 b/m4/iconv.m4 new file mode 100644 index 0000000..601be4c --- /dev/null +++ b/m4/iconv.m4 @@ -0,0 +1,69 @@ +#serial AM2 + +dnl From Bruno Haible. + +AC_DEFUN([MUTT_AM_ICONV], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + AC_ARG_WITH([libiconv-prefix], +[ --with-libiconv-prefix=DIR Search for libiconv in DIR/include and DIR/lib], [ + for dir in `echo "$withval" | tr : ' '`; do + if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi + if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi + done + ]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include <stdlib.h> +#include <iconv.h>], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS -liconv" + AC_TRY_LINK([#include <stdlib.h> +#include <iconv.h>], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi + LIBICONV= + if test "$am_cv_lib_iconv" = yes; then + LIBICONV="-liconv" + fi + AC_SUBST(LIBICONV) +]) diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4 new file mode 100644 index 0000000..3a34f86 --- /dev/null +++ b/m4/lcmessage.m4 @@ -0,0 +1,24 @@ +# Check whether LC_MESSAGES is available in <locale.h>. +# Ulrich Drepper <drepper@cygnus.com>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License or the GNU Library General Public License but which still want +# to provide support for the GNU gettext functionality. +# Please note that the actual code of the GNU gettext library is covered +# by the GNU Library General Public License, and the rest of the GNU +# gettext package package is covered by the GNU General Public License. +# They are *not* in the public domain. + +# serial 2 + +AC_DEFUN([MUTT_AM_LC_MESSAGES], + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your <locale.h> file defines LC_MESSAGES.]) + fi + fi]) diff --git a/m4/libesmtp.m4 b/m4/libesmtp.m4 new file mode 100644 index 0000000..b6b10db --- /dev/null +++ b/m4/libesmtp.m4 @@ -0,0 +1,63 @@ +dnl vim:ft=config: + +dnl Search for libesmtp, by Steven Engelhardt <sengelha@yahoo.com> +dnl +dnl libesmtp often requires linking against -lpthread or -lc_r (BSD). +dnl This macro attempts to centralize this code. + +AC_DEFUN([MUTT_AM_LIBESMTP], +[ + AC_ARG_WITH( + [libesmtp], + [ --with-libesmtp=DIR Compile in support for libesmtp for the MTA], + [ if test "$with_libesmtp" != "no" + then + mutt_libesmtp_check_path="$PATH" + + if test "$with_libesmtp" != "yes" + then + mutt_libesmtp_check_path="$tmp_path:$withval/bin" + fi + + dnl 1. Find libesmtp-config + AC_PATH_PROG([mutt_libesmtp_config_path], + [libesmtp-config], + [no], + [$mutt_libesmtp_check_path]) + + if test "$mutt_libesmtp_config_path" = "no" + then + AC_MSG_ERROR([libesmtp-config binary not found.]) + fi + + dnl 2. Get CFLAGS and LIBS from libesmtp-config + mutt_libesmtp_cflags=`$mutt_libesmtp_config_path --cflags` + mutt_libesmtp_libs=`$mutt_libesmtp_config_path --libs` + + dnl 3. Verify libesmtp.h can be found with these settings + temp_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + AC_CHECK_HEADER([libesmtp.h], + [], + AC_MSG_ERROR([Could not find libesmtp.h])) + CFLAGS="$temp_CFLAGS" + + dnl 4. Verify the libesmtp library can be linked in + temp_CFLAGS="$CFLAGS" + temp_LIBS="$LIBS" + CFLAGS="$CFLAGS $mutt_libesmtp_cflags" + LIBS="$LIBS $mutt_libesmtp_libs" + AC_CHECK_LIB([esmtp], + [smtp_create_session], + [], + AC_MSG_ERROR([Could not find libesmtp])) + CFLAGS="$temp_CFLAGS" + LIBS="$temp_LIBS" + + dnl 5. Export use_libesmtp variable so configure.in can + dnl act accordingly. + use_libesmtp=yes + fi + ] + ) +]) diff --git a/m4/progtest.m4 b/m4/progtest.m4 new file mode 100644 index 0000000..6b0500e --- /dev/null +++ b/m4/progtest.m4 @@ -0,0 +1,51 @@ +# Search path for a program which passes the given test. +# Ulrich Drepper <drepper@cygnus.com>, 1996. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License or the GNU Library General Public License but which still want +# to provide support for the GNU gettext functionality. +# Please note that the actual code of the GNU gettext library is covered +# by the GNU Library General Public License, and the rest of the GNU +# gettext package package is covered by the GNU General Public License. +# They are *not* in the public domain. + +# serial 2 + +dnl MUTT_AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([MUTT_AM_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) diff --git a/mailbox.h b/mailbox.h new file mode 100644 index 0000000..45e3f83 --- /dev/null +++ b/mailbox.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _MAILBOX_H +#define _MAILBOX_H + +/* flags for mutt_open_mailbox() */ +#define M_NOSORT (1<<0) /* do not sort the mailbox after opening it */ +#define M_APPEND (1<<1) /* open mailbox for appending messages */ +#define M_READONLY (1<<2) /* open in read-only mode */ +#define M_QUIET (1<<3) /* do not print any messages */ +#define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses + * safe_fopen() for mbox-style folders. + */ + +/* mx_open_new_message() */ +#define M_ADD_FROM 1 /* add a From_ line */ + +/* return values from mx_check_mailbox() */ +enum +{ + M_NEW_MAIL = 1, /* new mail received in mailbox */ + M_LOCKED, /* couldn't lock the mailbox */ + M_REOPENED, /* mailbox was reopened */ + M_FLAGS /* nondestructive flags change (IMAP) */ +}; + +typedef struct +{ + FILE *fp; /* pointer to the message data */ + char *path; /* path to temp file */ + short magic; /* type of mailbox this message belongs to */ + short write; /* nonzero if message is open for writing */ + struct { + unsigned read : 1; + unsigned flagged : 1; + unsigned replied : 1; + } flags; + time_t received; /* the time at which this message was received */ +} MESSAGE; + +CONTEXT *mx_open_mailbox (const char *, int, CONTEXT *); + +MESSAGE *mx_open_message (CONTEXT *, int); +MESSAGE *mx_open_new_message (CONTEXT *, HEADER *, int); + +void mx_fastclose_mailbox (CONTEXT *); + +int mx_close_mailbox (CONTEXT *, int *); +int mx_sync_mailbox (CONTEXT *, int *); +int mx_commit_message (MESSAGE *, CONTEXT *); +int mx_close_message (MESSAGE **); +int mx_get_magic (const char *); +int mx_set_magic (const char *); +int mx_check_mailbox (CONTEXT *, int *, int); +#ifdef USE_IMAP +int mx_is_imap (const char *); +#endif +#ifdef USE_POP +int mx_is_pop (const char *); +#endif +#ifdef USE_NNTP +int mx_is_nntp (const char *); +#endif + +int mx_access (const char*, int); +int mx_check_empty (const char *); + +#endif diff --git a/main.c b/main.c new file mode 100644 index 0000000..58e6079 --- /dev/null +++ b/main.c @@ -0,0 +1,975 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#define MAIN_C 1 + +#include "mutt.h" +#include "mutt_curses.h" +#include "keymap.h" +#include "mailbox.h" +#include "url.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#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> +#endif + +#ifdef USE_NNTP +#include <nntp.h> +#endif + +static const char *ReachingUs = N_("\ +To contact the developers, please mail to <mutt-dev@mutt.org>.\n\ +To report a bug, please use the flea(1) utility.\n"); + +static const char *Notice = N_("\ +Copyright (C) 1996-2002 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-2002 Michael R. Elkins <me@mutt.org>\n\ +Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n\ +Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n\ +Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n\ +Copyright (C) 1999-2002 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\ +Lots of others not mentioned here contributed lots of code,\n\ +fixes, and suggestions.\n\ +\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\ +\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., 59 Temple Place - Suite 330, Boston, MA 02111, 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 [ -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\ +\n\ +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\ + -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\ + -g <server>\tspecify a newsserver (if compiled with NNTP)\n\ + -G\t\tselect a newsgroup (if compiled with NNTP)\n\ + -H <file>\tspecify a draft file to read header from\n\ + -i <file>\tspecify a file which Mutt should include in the reply\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\n\ + -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 + ); + puts ( +#ifdef USE_POP + "+USE_POP " +#else + "-USE_POP " +#endif + +#ifdef USE_NNTP + "+USE_NNTP " +#else + "-USE_NNTP " +#endif + +#ifdef USE_IMAP + "+USE_IMAP " +#else + "-USE_IMAP " +#endif + +#ifdef USE_GSS + "+USE_GSS " +#else + "-USE_GSS " +#endif + + +#ifdef USE_SSL + "+USE_SSL " +#else + "-USE_SSL " +#endif + +#ifdef USE_SASL + "+USE_SASL " +#else + "-USE_SASL " +#endif +#ifdef USE_SASL2 + "+USE_SASL2 " +#else + "-USE_SASL2 " +#endif + +#ifdef USE_LIBESMTP + "+USE_LIBESMTP " +#else + "-USE_LIBESMTP " +#endif + "\n" + +#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 + +#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 HAVE_GETADDRINFO + "+HAVE_GETADDRINFO " +#else + "-HAVE_GETADDRINFO " +#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 */ +#else + /* should come before initscr() so that ncurses 4.2 doesn't try to install + its own SIGWINCH handler */ + mutt_signal_init (); +#endif + if (initscr () == NULL) + { + puts _("Error initializing terminal."); + exit (1); + } +#if 1 /* USE_SLANG_CURSES - commenting out suggested in #455. */ + /* slang requires the signal handlers to be set after initializing */ + mutt_signal_init (); +#endif + ci_start_color (); + keypad (stdscr, TRUE); + cbreak (); + noecho (); +#if HAVE_TYPEAHEAD + typeahead (-1); /* simulate smooth scrolling */ +#endif +#if HAVE_META + meta (stdscr, TRUE); +#endif +} + +#define M_IGNORE (1<<0) /* -z */ +#define M_BUFFY (1<<1) /* -Z */ +#define M_NOSYSRC (1<<2) /* -n */ +#define M_RO (1<<3) /* -R */ +#define M_SELECT (1<<4) /* -y */ +#ifdef USE_NNTP +#define M_NEWS (1<<5) /* -g and -G */ +#endif + +int main (int argc, char **argv) +{ + char folder[_POSIX_PATH_MAX] = ""; + char *subject = NULL; + char *includeFile = NULL; + char *draftFile = NULL; + char *newMagic = NULL; + HEADER *msg = NULL; + LIST *attach = NULL; + LIST *commands = NULL; + LIST *queries = NULL; + LIST *alias_queries = NULL; + int sendflags = 0; + int flags = 0; + int version = 0; + int i; + int explicit_folder = 0; + extern char *optarg; + extern int optind; + + /* sanity check against stupid administrators */ + + if(getegid() != getgid()) + { + fprintf(stderr, "%s: I don't want to run with privileges!\n", + argv[0]); + exit(1); + } + +#ifdef ENABLE_NLS + /* FIXME what about init.c:1439 ? */ + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, MUTTLOCALEDIR); + textdomain (PACKAGE); +#endif + + setlocale (LC_CTYPE, ""); + + mutt_error = mutt_nocurses_error; + mutt_message = mutt_nocurses_error; + SRAND (time (NULL)); + umask (077); + + memset (Options, 0, sizeof (Options)); + memset (QuadOptions, 0, sizeof (QuadOptions)); + +#ifdef USE_NNTP + while ((i = getopt (argc, argv, "A:a:b:F:f:c:d:e:g:GH:s:i:hm:npQ:RvxyzZ")) != EOF) +#else + while ((i = getopt (argc, argv, "A:a:b:F:f:c:d:e:H:s:i:hm:npQ:RvxyzZ")) != EOF) +#endif + switch (i) + { + case 'A': + alias_queries = mutt_add_list (alias_queries, optarg); + break; + case 'a': + attach = mutt_add_list (attach, optarg); + break; + + case 'F': + mutt_str_replace (&Muttrc, optarg); + break; + + case 'f': + strfcpy (folder, optarg, sizeof (folder)); + explicit_folder = 1; + break; + + case 'b': + case 'c': + if (!msg) + msg = mutt_new_header (); + if (!msg->env) + msg->env = mutt_new_envelope (); + if (i == 'b') + msg->env->bcc = rfc822_parse_adrlist (msg->env->bcc, optarg); + else + msg->env->cc = rfc822_parse_adrlist (msg->env->cc, optarg); + break; + + case 'd': +#ifdef DEBUG + debuglevel = atoi (optarg); + printf (_("Debugging at level %d.\n"), debuglevel); +#else + printf _("DEBUG was not defined during compilation. Ignored.\n"); +#endif + break; + + case 'e': + commands = mutt_add_list (commands, optarg); + break; + + case 'H': + draftFile = optarg; + break; + + case 'i': + includeFile = optarg; + break; + + case 'm': + /* should take precedence over .muttrc setting, so save it for later */ + newMagic = optarg; + break; + + case 'n': + flags |= M_NOSYSRC; + break; + + case 'p': + sendflags |= SENDPOSTPONED; + break; + + case 'Q': + queries = mutt_add_list (queries, optarg); + break; + + case 'R': + flags |= M_RO; /* read-only mode */ + break; + + case 's': + subject = optarg; + break; + + case 'v': + version++; + break; + + case 'x': /* mailx compatible send mode */ + sendflags |= SENDMAILX; + break; + + case 'y': /* My special hack mode */ + flags |= M_SELECT; + break; + +#ifdef USE_NNTP + case 'g': /* Specify a newsserver */ + { + char buf[LONG_STRING]; + + snprintf (buf, sizeof (buf), "set news_server=%s", optarg); + commands = mutt_add_list (commands, buf); + } + + case 'G': /* List of newsgroups */ + flags |= M_SELECT | M_NEWS; + break; +#endif + + case 'z': + flags |= M_IGNORE; + break; + + case 'Z': + flags |= M_BUFFY | M_IGNORE; + break; + + default: + mutt_usage (); + } + + switch (version) + { + case 0: + break; + case 1: + show_version (); + break; + default: + puts (mutt_make_version ()); + puts (_(Copyright)); + puts (_(ReachingUs)); + exit (0); + } + + /* Check for a batch send. */ + if (!isatty (0) || queries || alias_queries) + { + set_option (OPTNOCURSES); + sendflags = SENDBATCH; + } + + /* This must come before mutt_init() because curses needs to be started + before calling the init_pair() function to set the color scheme. */ + if (!option (OPTNOCURSES)) + start_curses (); + + /* set defaults and read init files */ + mutt_init (flags & M_NOSYSRC, commands); + mutt_free_list (&commands); + + if (queries) + return mutt_query_variables (queries); + + if (alias_queries) + { + int rv = 0; + ADDRESS *a; + for (; alias_queries; alias_queries = alias_queries->next) + { + if ((a = mutt_lookup_alias (alias_queries->data))) + { + /* output in machine-readable form */ + mutt_addrlist_to_idna (a, NULL); + mutt_write_address_list (a, stdout, 0, 0); + } + else + { + rv = 1; + printf ("%s\n", alias_queries->data); + } + } + return rv; + } + + if (newMagic) + mx_set_magic (newMagic); + + if (!option (OPTNOCURSES)) + { + SETCOLOR (MT_COLOR_NORMAL); + clear (); + mutt_error = mutt_curses_error; + mutt_message = mutt_curses_message; + } + + /* Create the Maildir directory if it doesn't exist. */ + if (!option (OPTNOCURSES) && Maildir) + { + struct stat sb; + char fpath[_POSIX_PATH_MAX]; + char msg[STRING]; + + strfcpy (fpath, Maildir, sizeof (fpath)); + mutt_expand_path (fpath, sizeof (fpath)); +#ifdef USE_IMAP + /* we're not connected yet - skip mail folder creation */ + if (!mx_is_imap (fpath)) +#endif + if (stat (fpath, &sb) == -1 && errno == ENOENT) + { + snprintf (msg, sizeof (msg), _("%s does not exist. Create it?"), Maildir); + if (mutt_yesorno (msg, M_YES) == M_YES) + { + if (mkdir (fpath, 0700) == -1 && errno != EEXIST) + mutt_error ( _("Can't create %s: %s."), Maildir, strerror (errno)); + } + } + } + + if (sendflags & SENDPOSTPONED) + { + if (!option (OPTNOCURSES)) + mutt_flushinp (); + ci_send_message (SENDPOSTPONED, NULL, NULL, NULL, NULL); + mutt_endwin (NULL); + } + else if (subject || msg || sendflags || draftFile || includeFile || attach || + optind < argc) + { + FILE *fin = NULL; + char buf[LONG_STRING]; + char *tempfile = NULL, *infile = NULL; + char *bodytext = NULL; + + if (!option (OPTNOCURSES)) + mutt_flushinp (); + + if (!msg) + msg = mutt_new_header (); + + if (draftFile) + infile = draftFile; + else + { + if (!msg->env) + msg->env = mutt_new_envelope (); + + for (i = optind; i < argc; i++) + { + if (url_check_scheme (argv[i]) == U_MAILTO) + url_parse_mailto (msg->env, &bodytext, argv[i]); + else + msg->env->to = rfc822_parse_adrlist (msg->env->to, argv[i]); + } + + if (option (OPTAUTOEDIT) && !msg->env->to && !msg->env->cc) + { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + fputs (_("No recipients specified.\n"), stderr); + exit (1); + } + + if (subject) + msg->env->subject = safe_strdup (subject); + + if (includeFile) + infile = includeFile; + } + + if (infile || bodytext) + { + if (infile) + { + if (mutt_strcmp ("-", infile) == 0) + fin = stdin; + else + { + char path[_POSIX_PATH_MAX]; + + strfcpy (path, infile, sizeof (path)); + mutt_expand_path (path, sizeof (path)); + if ((fin = fopen (path, "r")) == NULL) + { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + perror (path); + exit (1); + } + } + } + else + fin = NULL; + + mutt_mktemp (buf); + tempfile = safe_strdup (buf); + + if (draftFile) + msg->env = mutt_read_rfc822_header (fin, NULL, 1, 0); + + /* is the following if still needed? */ + + if (tempfile) + { + FILE *fout; + + if ((fout = safe_fopen (tempfile, "w")) == NULL) + { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + perror (tempfile); + fclose (fin); + FREE (&tempfile); + exit (1); + } + if (fin) + mutt_copy_stream (fin, fout); + else if (bodytext) + fputs (bodytext, fout); + fclose (fout); + if (fin && fin != stdin) + fclose (fin); + } + } + + FREE (&bodytext); + + if (attach) + { + LIST *t = attach; + BODY *a = NULL; + + while (t) + { + if (a) + { + a->next = mutt_make_file_attach (t->data); + a = a->next; + } + else + msg->content = a = mutt_make_file_attach (t->data); + if (!a) + { + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + fprintf (stderr, _("%s: unable to attach file.\n"), t->data); + mutt_free_list (&attach); + exit (1); + } + t = t->next; + } + mutt_free_list (&attach); + } + + ci_send_message (sendflags, msg, tempfile, NULL, NULL); + + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + } + else + { + if (flags & M_BUFFY) + { + if (!mutt_buffy_check (0)) + { + mutt_endwin _("No mailbox with new mail."); + exit (1); + } + folder[0] = 0; + mutt_buffy (folder, sizeof (folder)); + } + else if (flags & M_SELECT) + { +#ifdef USE_NNTP + if (flags & M_NEWS) + { + set_option (OPTNEWS); + if(!(CurrentNewsSrv = mutt_select_newsserver (NewsServer))) + { + mutt_endwin (Errorbuf); + exit (1); + } + } + else +#endif + if (!Incoming) { + mutt_endwin _("No incoming mailboxes defined."); + exit (1); + } + folder[0] = 0; + mutt_select_file (folder, sizeof (folder), M_SEL_FOLDER | M_SEL_BUFFY); + if (!folder[0]) + { + mutt_endwin (NULL); + exit (0); + } + } + + if (!folder[0]) + strfcpy (folder, NONULL(Spoolfile), sizeof (folder)); + +#ifdef USE_NNTP + if (option (OPTNEWS)) + { + unset_option (OPTNEWS); + nntp_expand_path (folder, sizeof (folder), &CurrentNewsSrv->conn->account); + } + else +#endif + mutt_expand_path (folder, sizeof (folder)); + + mutt_str_replace (&LastFolder, folder); + + if (flags & M_IGNORE) + { + /* check to see if there are any messages in the folder */ + switch (mx_check_empty (folder)) + { + case -1: + mutt_endwin (strerror (errno)); + exit (1); + case 1: + mutt_endwin _("Mailbox is empty."); + exit (1); + } + } + + mutt_folder_hook (folder); + + if((Context = mx_open_mailbox (folder, ((flags & M_RO) || option (OPTREADONLY)) ? M_READONLY : 0, NULL)) + || !explicit_folder) + { + mutt_index_menu (); + if (Context) + FREE (&Context); + } + mutt_endwin (Errorbuf); + } + + exit (0); +} diff --git a/makedoc.c b/makedoc.c new file mode 100644 index 0000000..4d3011e --- /dev/null +++ b/makedoc.c @@ -0,0 +1,1208 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/** + ** This program parses mutt's init.h and generates documentation in + ** three different formats: + ** + ** -> a commented muttrc configuration file + ** -> nroff, suitable for inclusion in a manual page + ** -> linuxdoc-sgml, suitable for inclusion in the + ** SGML-based manual + ** + **/ + + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +#include <errno.h> + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#ifdef HAVE_GETOPT_H +# include <getopt.h> +#endif + +#ifndef HAVE_STRERROR +#ifndef STDC_HEADERS +extern int sys_nerr; +extern char *sys_errlist[]; +#endif + +#define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0 +#endif /* !HAVE_STRERROR */ + +extern int optind; + +#define BUFFSIZE 2048 + +enum output_formats_t +{ + F_CONF, F_MAN, F_SGML, F_NONE +}; + +#define D_NL (1 << 0) +#define D_EM (1 << 1) +#define D_BF (1 << 2) +#define D_TAB (1 << 3) +#define D_NP (1 << 4) +#define D_INIT (1 << 5) +#define D_DL (1 << 6) +#define D_DT (1 << 7) + +enum +{ + SP_START_EM, + SP_START_BF, + SP_END_FT, + SP_NEWLINE, + SP_NEWPAR, + SP_STR, + SP_START_TAB, + SP_END_TAB, + SP_START_DL, + SP_DT, + SP_DD, + SP_END_DL, + SP_REFER +}; + +enum output_formats_t OutputFormat = F_NONE; +char *Progname; +short Debug = 0; + +static char *get_token (char *, size_t, char *); +static char *skip_ws (char *); +static const char *type2human (int); +static int buff2type (const char *); +static int flush_doc (int, FILE *); +static int handle_docline (char *, FILE *, int); +static int print_it (int, char *, FILE *, int); +static void print_confline (const char *, int, const char *, FILE *); +static void handle_confline (char *, FILE *); +static void makedoc (FILE *, FILE *); +static void pretty_default (char *, size_t, const char *, int); +static int sgml_fputc (int, FILE *); +static int sgml_fputs (const char *, FILE *); + +int main (int argc, char *argv[]) +{ + int c; + FILE *f; + + if ((Progname = strrchr (argv[0], '/'))) + Progname++; + else + Progname = argv[0]; + + while ((c = getopt (argc, argv, "cmsd")) != EOF) + { + switch (c) + { + case 'c': OutputFormat = F_CONF; break; + case 'm': OutputFormat = F_MAN; break; + case 's': OutputFormat = F_SGML; break; + case 'd': Debug++; break; + default: + { + fprintf (stderr, "%s: bad command line parameter.\n", Progname); + exit (1); + } + } + } + + if (optind != argc) + { + if ((f = fopen (argv[optind], "r")) == NULL) + { + fprintf (stderr, "%s: Can't open %s (%s).\n", + Progname, argv[optind], strerror (errno)); + exit (1); + } + } + else + f = stdin; + + switch (OutputFormat) + { + case F_CONF: + case F_MAN: + case F_SGML: makedoc (f, stdout); break; + default: + { + fprintf (stderr, "%s: No output format specified.\n", + Progname); + exit (1); + } + } + + if (f != stdin) + fclose (f); + + exit (1); +} + + +static void makedoc (FILE *in, FILE *out) +{ + char buffer[BUFFSIZE]; + char token[BUFFSIZE]; + char *p; + int active = 0; + int line = 0; + int docstat = D_INIT; + + while ((fgets (buffer, sizeof (buffer), in))) + { + line++; + if ((p = strchr (buffer, '\n')) == NULL) + { + fprintf (stderr, "%s: Line %d too long. Ask a wizard to enlarge\n" + "%s: my buffer size.\n", Progname, line, Progname); + exit (1); + } + else + *p = '\0'; + + if (!(p = get_token (token, sizeof (token), buffer))) + continue; + + if (Debug) + { + fprintf (stderr, "%s: line %d. first token: \"%s\".\n", + Progname, line, token); + } + + if (!strcmp (token, "/*++*/")) + active = 1; + else if (!strcmp (token, "/*--*/")) + { + docstat = flush_doc (docstat, out); + active = 0; + } + else if (active && (!strcmp (token, "/**") || !strcmp (token, "**"))) + docstat = handle_docline (p, out, docstat); + else if (active && !strcmp (token, "{")) + { + docstat = flush_doc (docstat, out); + handle_confline (p, out); + } + } + flush_doc (docstat, out); + fputs ("\n", out); +} + +/* skip whitespace */ + +static char *skip_ws (char *s) +{ + while (*s && isspace ((unsigned char) *s)) + s++; + + return s; +} + +/* isolate a token */ + +static char single_char_tokens[] = "[]{},;|"; + +static char *get_token (char *d, size_t l, char *s) +{ + char *t; + short is_quoted = 0; + char *dd = d; + + if (Debug) + fprintf (stderr, "%s: get_token called for `%s'.\n", + Progname, s); + + s = skip_ws (s); + + if (Debug > 1) + fprintf (stderr, "%s: argumet after skip_ws(): `%s'.\n", + Progname, s); + + if (!*s) + { + if (Debug) + fprintf (stderr, "%s: no more tokens on this line.\n", Progname); + return NULL; + } + + if (strchr (single_char_tokens, *s)) + { + if (Debug) + { + fprintf (stderr, "%s: found single character token `%c'.\n", + Progname, *s); + } + d[0] = *s++; + d[1] = 0; + return s; + } + + if (*s == '"') + { + if (Debug) + { + fprintf (stderr, "%s: found quote character.\n", Progname); + } + + s++; + is_quoted = 1; + } + + for (t = s; *t && --l > 0; t++) + { + if (*t == '\\' && !t[1]) + break; + + if (is_quoted && *t == '\\') + { + switch ((*d = *++t)) + { + case 'n': *d = '\n'; break; + case 't': *d = '\t'; break; + case 'r': *d = '\r'; break; + case 'a': *d = '\a'; break; + } + + d++; + continue; + } + + if (is_quoted && *t == '"') + { + t++; + break; + } + else if (!is_quoted && strchr (single_char_tokens, *t)) + break; + else if (!is_quoted && isspace ((unsigned char) *t)) + break; + else + *d++ = *t; + } + + *d = '\0'; + + if (Debug) + { + fprintf (stderr, "%s: Got %stoken: `%s'.\n", + Progname, is_quoted ? "quoted " : "", dd); + fprintf (stderr, "%s: Remainder: `%s'.\n", + Progname, t); + } + + return t; +} + + +/** + ** Configuration line parser + ** + ** The following code parses a line from init.h which declares + ** a configuration variable. + ** + **/ + +/* note: the following enum must be in the same order as the + * following string definitions! + */ + +enum +{ + DT_NONE = 0, + DT_BOOL, + DT_NUM, + DT_STR, + DT_PATH, + DT_QUAD, + DT_SORT, + DT_RX, + DT_MAGIC, + DT_SYN, + DT_ADDR +}; + +struct +{ + char *machine; + char *human; +} +types[] = +{ + { "DT_NONE", "-none-" }, + { "DT_BOOL", "boolean" }, + { "DT_NUM", "number" }, + { "DT_STR", "string" }, + { "DT_PATH", "path" }, + { "DT_QUAD", "quadoption" }, + { "DT_SORT", "sort order" }, + { "DT_RX", "regular expression" }, + { "DT_MAGIC", "folder magic" }, + { "DT_SYN", NULL }, + { "DT_ADDR", "e-mail address" }, + { NULL, NULL } +}; + + +static int buff2type (const char *s) +{ + int type; + + for (type = DT_NONE; types[type].machine; type++) + if (!strcmp (types[type].machine, s)) + return type; + + return DT_NONE; +} + +static const char *type2human (int type) +{ + return types[type].human; +} +static void handle_confline (char *s, FILE *out) +{ + char varname[BUFFSIZE]; + char buff[BUFFSIZE]; + char tmp[BUFFSIZE]; + int type; + + char val[BUFFSIZE]; + + /* xxx - put this into an actual state machine? */ + + /* variable name */ + if (!(s = get_token (varname, sizeof (varname), s))) return; + + /* comma */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + + /* type */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + + type = buff2type (buff); + + /* possibly a "|" or comma */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + + if (!strcmp (buff, "|")) + { + if (Debug) fprintf (stderr, "%s: Expecting <subtype> <comma>.\n", Progname); + /* ignore subtype and comma */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + if (!(s = get_token (buff, sizeof (buff), s))) return; + } + + /* redraw, comma */ + + while (1) + { + if (!(s = get_token (buff, sizeof (buff), s))) return; + if (!strcmp (buff, ",")) + break; + } + + /* option name or UL &address */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + if (!strcmp (buff, "UL")) + if (!(s = get_token (buff, sizeof (buff), s))) return; + + /* comma */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + + if (Debug) fprintf (stderr, "%s: Expecting default value.\n", Progname); + + /* <default value> or UL <default value> */ + if (!(s = get_token (buff, sizeof (buff), s))) return; + if (!strcmp (buff, "UL")) + { + if (Debug) fprintf (stderr, "%s: Skipping UL.\n", Progname); + if (!(s = get_token (buff, sizeof (buff), s))) return; + } + + memset (tmp, 0, sizeof (tmp)); + + do + { + if (!strcmp (buff, "}")) + break; + + strncpy (tmp + strlen (tmp), buff, sizeof (tmp) - strlen (tmp)); + } + while ((s = get_token (buff, sizeof (buff), s))); + + pretty_default (val, sizeof (val), tmp, type); + print_confline (varname, type, val, out); +} + +static void pretty_default (char *t, size_t l, const char *s, int type) +{ + memset (t, 0, l); + l--; + + switch (type) + { + case DT_QUAD: + { + if (!strcasecmp (s, "M_YES")) strncpy (t, "yes", l); + else if (!strcasecmp (s, "M_NO")) strncpy (t, "no", l); + else if (!strcasecmp (s, "M_ASKYES")) strncpy (t, "ask-yes", l); + else if (!strcasecmp (s, "M_ASKNO")) strncpy (t, "ask-no", l); + break; + } + case DT_BOOL: + { + if (atoi (s)) + strncpy (t, "yes", l); + else + strncpy (t, "no", l); + break; + } + case DT_SORT: + { + /* heuristic! */ + strncpy (t, s + 5, l); + for (; *t; t++) *t = tolower ((unsigned char) *t); + break; + } + case DT_MAGIC: + { + /* heuristic! */ + strncpy (t, s + 2, l); + for (; *t; t++) *t = tolower ((unsigned char) *t); + break; + } + case DT_STR: + case DT_RX: + case DT_ADDR: + case DT_PATH: + { + if (!strcmp (s, "0")) + break; + /* fallthrough */ + } + default: + { + strncpy (t, s, l); + break; + } + } +} + +static void char_to_escape (char *dest, unsigned int c) +{ + switch (c) + { + case '\r': strcpy (dest, "\\r"); break; /* __STRCPY_CHECKED__ */ + case '\n': strcpy (dest, "\\n"); break; /* __STRCPY_CHECKED__ */ + case '\t': strcpy (dest, "\\t"); break; /* __STRCPY_CHECKED__ */ + case '\f': strcpy (dest, "\\f"); break; /* __STRCPY_CHECKED__ */ + default: sprintf (dest, "\\%03o", c); break; + } +} +static void conf_char_to_escape (unsigned int c , FILE *out) +{ + char buff[16]; + char_to_escape (buff, c); + fputs (buff, out); +} + +static void conf_print_strval (const char *v, FILE *out) +{ + for (; *v; v++) + { + if (*v < ' ' || *v & 0x80) + { + conf_char_to_escape ((unsigned int) *v, out); + continue; + } + + if (*v == '"' || *v == '\\') + fputc ('\\', out); + fputc (*v, out); + } +} + +static void man_print_strval (const char *v, FILE *out) +{ + for (; *v; v++) + { + if (*v < ' ' || *v & 0x80) + { + fputc ('\\', out); + conf_char_to_escape ((unsigned int) *v, out); + continue; + } + + if (*v == '"') + fputs ("\\(rq", out); + else if (*v == '\\') + fputs ("\\\\", out); + else + fputc (*v, out); + } +} + +static void sgml_print_strval (const char *v, FILE *out) +{ + char buff[16]; + for (; *v; v++) + { + if (*v < ' ' || *v & 0x80) + { + char_to_escape (buff, (unsigned int) *v); + sgml_fputs (buff, out); + continue; + } + sgml_fputc ((unsigned int) *v, out); + } +} + +static int sgml_fputc (int c, FILE *out) +{ + switch (c) + { + case '<': return fputs ("<", out); + case '>': return fputs (">", out); + case '$': return fputs ("$", out); + case '_': return fputs ("_", out); + case '%': return fputs ("%", out); + case '&': return fputs ("&", out); + case '\\': return fputs ("\", out); + case '"': return fputs ("&dquot;", out); + case '[': return fputs ("[", out); + case ']': return fputs ("]", out); + case '~': return fputs ("˜", out); + default: return fputc (c, out); + } +} + +static int sgml_fputs (const char *s, FILE *out) +{ + for (; *s; s++) + if (sgml_fputc ((unsigned int) *s, out) == EOF) + return EOF; + + return 0; +} + +static void print_confline (const char *varname, int type, const char *val, FILE *out) +{ + if (type == DT_SYN) return; + + switch (OutputFormat) + { + /* configuration file */ + case F_CONF: + { + if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH) + { + fprintf (out, "\n# set %s=\"", varname); + conf_print_strval (val, out); + fputs ("\"", out); + } + else if (type != DT_SYN) + fprintf (out, "\n# set %s=%s", varname, val); + + fprintf (out, "\n#\n# Name: %s", varname); + fprintf (out, "\n# Type: %s", type2human (type)); + if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH) + { + fputs ("\n# Default: \"", out); + conf_print_strval (val, out); + fputs ("\"", out); + } + else + fprintf (out, "\n# Default: %s", val); + + fputs ("\n# ", out); + break; + } + + /* manual page */ + case F_MAN: + { + fprintf (out, "\n.TP\n.B %s\n", varname); + fputs (".nf\n", out); + fprintf (out, "Type: %s\n", type2human (type)); + if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH) + { + fputs ("Default: \\(lq", out); + man_print_strval (val, out); + fputs ("\\(rq\n", out); + } + else + fprintf (out, "Default: %s\n", val); + + fputs (".fi", out); + + break; + } + + /* SGML based manual */ + case F_SGML: + { + fputs ("\n<sect2>", out); sgml_fputs (varname, out); + fprintf (out, "<label id=\"%s\">", varname); + fprintf (out, "\n<p>\nType: %s<newline>", type2human (type)); + + if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH) + { + fputs ("\nDefault: &dquot;", out); + sgml_print_strval (val, out); + fputs ("&dquot;\n", out); + } + else + fprintf (out, "\nDefault: %s\n", val); + break; + } + /* make gcc happy */ + default: + break; + } +} + +/** + ** Documentation line parser + ** + ** The following code parses specially formatted documentation + ** comments in init.h. + ** + ** The format is very remotely inspired by nroff. Most important, it's + ** easy to parse and convert, and it was easy to generate from the SGML + ** source of mutt's original manual. + ** + ** - \fI switches to italics + ** - \fB switches to boldface + ** - \fP switches to normal display + ** - .dl on a line starts a definition list (name taken taken from HTML). + ** - .dt starts a term in a definition list. + ** - .dd starts a definition in a definition list. + ** - .de on a line finishes a definition list. + ** - .ts on a line starts a "tscreen" environment (name taken from SGML). + ** - .te on a line finishes this environment. + ** - .pp on a line starts a paragraph. + ** - \$word will be converted to a reference to word, where appropriate. + ** Note that \$$word is possible as well. + ** - '. ' in the beginning of a line expands to two space characters. + ** This is used to protect indentations in tables. + **/ + +/* close eventually-open environments. */ + +static int fd_recurse = 0; + +static int flush_doc (int docstat, FILE *out) +{ + if (docstat & D_INIT) + return D_INIT; + + if (fd_recurse++) + { + fprintf (stderr, "%s: Internal error, recursion in flush_doc()!\n", Progname); + exit (1); + } + + if (docstat & (D_TAB)) + docstat = print_it (SP_END_TAB, NULL, out, docstat); + + if (docstat & (D_DL)) + docstat = print_it (SP_END_DL, NULL, out, docstat); + + if (docstat & (D_EM | D_BF)) + docstat = print_it (SP_END_FT, NULL, out, docstat); + + docstat = print_it (SP_NEWLINE, NULL, out, 0); + + fd_recurse--; + return D_INIT; +} + +/* print something. */ + +static int print_it (int special, char *str, FILE *out, int docstat) +{ + int onl = docstat & (D_NL|D_NP); + + docstat &= ~(D_NL|D_NP|D_INIT); + + switch (OutputFormat) + { + /* configuration file */ + case F_CONF: + { + switch (special) + { + static int Continuation = 0; + + case SP_END_FT: docstat &= ~(D_EM|D_BF); break; + case SP_START_BF: docstat |= D_BF; break; + case SP_START_EM: docstat |= D_EM; break; + case SP_NEWLINE: + { + if (onl) + docstat |= onl; + else + { + fputs ("\n# ", out); + docstat |= D_NL; + } + if (docstat & D_DL) + ++ Continuation; + break; + } + case SP_NEWPAR: + { + if (onl & D_NP) + { + docstat |= onl; + break; + } + + if (!(onl & D_NL)) + fputs ("\n# ", out); + fputs ("\n# ", out); + docstat |= D_NP; + break; + } + case SP_START_TAB: + { + if (!onl) + fputs ("\n# ", out); + docstat |= D_TAB; + break; + } + case SP_END_TAB: + { + docstat &= ~D_TAB; + docstat |= D_NL; + break; + } + case SP_START_DL: + { + docstat |= D_DL; + break; + } + case SP_DT: + { + Continuation = 0; + docstat |= D_DT; + break; + } + case SP_DD: + { + Continuation = 0; + break; + } + case SP_END_DL: + { + Continuation = 0; + docstat &= ~D_DL; + break; + } + case SP_STR: + { + if (Continuation) + { + Continuation = 0; + fputs (" ", out); + } + fputs (str, out); + if (docstat & D_DT) + { + int i; + + for (i = strlen (str) ; i < 8 ; i++) + putc (' ', out); + docstat &= ~D_DT; + docstat |= D_NL; + } + break; + } + } + break; + } + + /* manual page */ + case F_MAN: + { + switch (special) + { + case SP_END_FT: + { + fputs ("\\fP", out); + docstat &= ~(D_EM|D_BF); + break; + } + case SP_START_BF: + { + fputs ("\\fB", out); + docstat |= D_BF; + docstat &= ~D_EM; + break; + } + case SP_START_EM: + { + fputs ("\\fI", out); + docstat |= D_EM; + docstat &= ~D_BF; + break; + } + case SP_NEWLINE: + { + if (onl) + docstat |= onl; + else + { + fputc ('\n', out); + docstat |= D_NL; + } + break; + } + case SP_NEWPAR: + { + if (onl & D_NP) + { + docstat |= onl; + break; + } + + if (!(onl & D_NL)) + fputc ('\n', out); + fputs (".IP\n", out); + + docstat |= D_NP; + break; + } + case SP_START_TAB: + { + fputs ("\n.IP\n.DS\n.sp\n.ft CR\n.nf\n", out); + docstat |= D_TAB | D_NL; + break; + } + case SP_END_TAB: + { + fputs ("\n.fi\n.ec\n.ft P\n.sp\n", out); + docstat &= ~D_TAB; + docstat |= D_NL; + break; + } + case SP_START_DL: + { + fputs ("\n.RS", out); + docstat |= D_DL; + break; + } + case SP_DT: + { + fputs ("\n.IP ", out); + break; + } + case SP_DD: + { + fputs ("\n", out); + break; + } + case SP_END_DL: + { + fputs ("\n.RE", out); + docstat &= ~D_DL; + break; + } + case SP_STR: + { + while (*str) + { + for (; *str; str++) + { + if (*str == '"') + fputs ("\\(rq", out); + else if (*str == '\\') + fputs ("\\\\", out); + else if (!strncmp (str, "``", 2)) + { + fputs ("\\(lq", out); + str++; + } + else if (!strncmp (str, "''", 2)) + { + fputs ("\\(rq", out); + str++; + } + else + fputc (*str, out); + } + } + break; + } + } + break; + } + + /* SGML based manual */ + case F_SGML: + { + switch (special) + { + case SP_END_FT: + { + if (docstat & D_EM) fputs ("</em>", out); + if (docstat & D_BF) fputs ("</bf>", out); + docstat &= ~(D_EM|D_BF); + break; + } + case SP_START_BF: + { + fputs ("<bf>", out); + docstat |= D_BF; + docstat &= ~D_EM; + break; + } + case SP_START_EM: + { + fputs ("<em>", out); + docstat |= D_EM; + docstat &= ~D_BF; + break; + } + case SP_NEWLINE: + { + if (onl) + docstat |= onl; + else + { + fputc ('\n', out); + docstat |= D_NL; + } + break; + } + case SP_NEWPAR: + { + if (onl & D_NP) + { + docstat |= onl; + break; + } + + if (!(onl & D_NL)) + fputc ('\n', out); + fputs ("<p>\n", out); + + docstat |= D_NP; + break; + } + case SP_START_TAB: + { + fputs ("\n<tscreen><verb>\n", out); + docstat |= D_TAB | D_NL; + break; + } + case SP_END_TAB: + { + fputs ("\n</verb></tscreen>", out); + docstat &= ~D_TAB; + docstat |= D_NL; + break; + } + case SP_START_DL: + { + fputs ("\n<descrip>\n", out); + docstat |= D_DL; + break; + } + case SP_DT: + { + fputs ("<tag>", out); + break; + } + case SP_DD: + { + fputs ("</tag>", out); + break; + } + case SP_END_DL: + { + fputs ("</descrip>\n", out); + docstat &= ~D_DL; + break; + } + case SP_STR: + { + if (docstat & D_TAB) + fputs (str, out); + else + sgml_fputs (str, out); + break; + } + } + break; + } + /* make gcc happy (unreached) */ + default: + break; + } + + return docstat; +} + +void print_ref (FILE *out, int output_dollar, const char *ref) +{ + switch (OutputFormat) + { + case F_CONF: + case F_MAN: + if (output_dollar) + putc ('$', out); + fputs (ref, out); + break; + + case F_SGML: + fprintf (out, "<ref id=\"%s\" name=\"", ref); + if (output_dollar) + fputs ("$", out); + sgml_fputs (ref, out); + fputs ("\">", out); + break; + + default: + break; + } +} + +static int commit_buff (char *buff, char **d, FILE *out, int docstat) +{ + if (*d > buff) + { + **d = '\0'; + docstat = print_it (SP_STR, buff, out, docstat); + *d = buff; + } + + return docstat; +} + +static int handle_docline (char *l, FILE *out, int docstat) +{ + char buff[BUFFSIZE]; + char *s, *d; + l = skip_ws (l); + + if (Debug) + fprintf (stderr, "%s: handle_docline `%s'\n", Progname, l); + + if (!strncmp (l, ".pp", 3)) + return print_it (SP_NEWPAR, NULL, out, docstat); + else if (!strncmp (l, ".ts", 3)) + return print_it (SP_START_TAB, NULL, out, docstat); + else if (!strncmp (l, ".te", 3)) + return print_it (SP_END_TAB, NULL, out, docstat); + else if (!strncmp (l, ".dl", 3)) + return print_it (SP_START_DL, NULL, out, docstat); + else if (!strncmp (l, ".de", 3)) + return print_it (SP_END_DL, NULL, out, docstat); + else if (!strncmp (l, ". ", 2)) + *l = ' '; + + for (s = l, d = buff; *s; s++) + { + if (!strncmp (s, "\\(as", 4)) + { + *d++ = '*'; + s += 3; + } + else if (!strncmp (s, "\\(rs", 4)) + { + *d++ = '\\'; + s += 3; + } + else if (!strncmp (s, "\\fI", 3)) + { + docstat = commit_buff (buff, &d, out, docstat); + docstat = print_it (SP_START_EM, NULL, out, docstat); + s += 2; + } + else if (!strncmp (s, "\\fB", 3)) + { + docstat = commit_buff (buff, &d, out, docstat); + docstat = print_it (SP_START_BF, NULL, out, docstat); + s += 2; + } + else if (!strncmp (s, "\\fP", 3)) + { + docstat = commit_buff (buff, &d, out, docstat); + docstat = print_it (SP_END_FT, NULL, out, docstat); + s += 2; + } + else if (!strncmp (s, ".dt", 3)) + { + docstat = commit_buff (buff, &d, out, docstat); + docstat = print_it (SP_DT, NULL, out, docstat); + s += 3; + } + else if (!strncmp (s, ".dd", 3)) + { + docstat = commit_buff (buff, &d, out, docstat); + docstat = print_it (SP_DD, NULL, out, docstat); + s += 3; + } + else if (*s == '$') + { + int output_dollar = 0; + char *ref; + char save; + + ++s; + if (*s == '$') + { + output_dollar = 1; + ++s; + } + if (*s == '$') + { + *d++ = '$'; + } + else + { + ref = s; + while (isalnum ((unsigned char) *s) || *s == '-' || *s == '_') + ++s; + + docstat = commit_buff (buff, &d, out, docstat); + save = *s; + *s = 0; + print_ref (out, output_dollar, ref); + *s = save; + --s; + } + } + else + *d++ = *s; + } + + docstat = commit_buff (buff, &d, out, docstat); + return print_it (SP_NEWLINE, NULL, out, docstat); +} diff --git a/mapping.h b/mapping.h new file mode 100644 index 0000000..b944e2a --- /dev/null +++ b/mapping.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef MAPPING_H +#define MAPPING_H + +struct mapping_t +{ + char *name; + int value; +}; + +char *mutt_getnamebyvalue (int, const struct mapping_t *); +char *mutt_compile_help (char *, size_t, int, struct mapping_t *); + +int mutt_getvaluebyname (const char *, const struct mapping_t *); + +#endif diff --git a/mbox.c b/mbox.c new file mode 100644 index 0000000..dc900e4 --- /dev/null +++ b/mbox.c @@ -0,0 +1,1214 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* This file contains code to parse ``mbox'' and ``mmdf'' style mailboxes */ + +#include "mutt.h" +#include "mailbox.h" +#include "mx.h" +#include "sort.h" +#include "copy.h" + +#include <sys/stat.h> +#include <dirent.h> +#include <string.h> +#include <utime.h> +#include <sys/file.h> +#include <errno.h> +#include <unistd.h> +#include <fcntl.h> + +/* struct used by mutt_sync_mailbox() to store new offsets */ +struct m_update_t +{ + short valid; + long hdr; + long body; + long lines; + long length; +}; + +/* parameters: + * ctx - context to lock + * excl - exclusive lock? + * retry - should retry if unable to lock? + */ +int mbox_lock_mailbox (CONTEXT *ctx, int excl, int retry) +{ + int r; + + if ((r = mx_lock_file (ctx->path, fileno (ctx->fp), excl, 1, retry)) == 0) + ctx->locked = 1; + else if (retry && !excl) + { + ctx->readonly = 1; + return 0; + } + + return (r); +} + +void mbox_unlock_mailbox (CONTEXT *ctx) +{ + if (ctx->locked) + { + fflush (ctx->fp); + + mx_unlock_file (ctx->path, fileno (ctx->fp), 1); + ctx->locked = 0; + } +} + +int mmdf_parse_mailbox (CONTEXT *ctx) +{ + char buf[HUGE_STRING]; + char return_path[LONG_STRING]; + int count = 0, oldmsgcount = ctx->msgcount; + int lines; + time_t t, tz; + long loc, tmploc; + HEADER *hdr; + struct stat sb; +#ifdef NFS_ATTRIBUTE_HACK + struct utimbuf newtime; +#endif + + if (stat (ctx->path, &sb) == -1) + { + mutt_perror (ctx->path); + return (-1); + } + ctx->mtime = sb.st_mtime; + ctx->size = sb.st_size; + +#ifdef NFS_ATTRIBUTE_HACK + if (sb.st_mtime > sb.st_atime) + { + newtime.modtime = sb.st_mtime; + newtime.actime = time (NULL); + utime (ctx->path, &newtime); + } +#endif + + /* precompute the local timezone to speed up calculation of the + received time */ + tz = mutt_local_tz (0); + + buf[sizeof (buf) - 1] = 0; + + FOREVER + { + if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) + break; + + if (mutt_strcmp (buf, MMDF_SEP) == 0) + { + loc = ftell (ctx->fp); + + count++; + if (!ctx->quiet && ReadInc && ((count % ReadInc == 0) || count == 1)) + mutt_message (_("Reading %s... %d (%d%%)"), ctx->path, count, + loc / (ctx->size / 100 + 1)); + + + if (ctx->msgcount == ctx->hdrmax) + mx_alloc_memory (ctx); + ctx->hdrs[ctx->msgcount] = hdr = mutt_new_header (); + hdr->offset = loc; + hdr->index = ctx->msgcount; + + if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) + { + /* TODO: memory leak??? */ + dprint (1, (debugfile, "mmdf_parse_mailbox: unexpected EOF\n")); + break; + } + + return_path[0] = 0; + + if (!is_from (buf, return_path, sizeof (return_path), &t)) + { + if (fseek (ctx->fp, loc, SEEK_SET) != 0) + { + dprint (1, (debugfile, "mmdf_parse_mailbox: fseek() failed\n")); + mutt_error _("Mailbox is corrupt!"); + return (-1); + } + } + else + hdr->received = t - tz; + + hdr->env = mutt_read_rfc822_header (ctx->fp, hdr, 0, 0); + + loc = ftell (ctx->fp); + + if (hdr->content->length > 0 && hdr->lines > 0) + { + tmploc = loc + hdr->content->length; + + if (0 < tmploc && tmploc < ctx->size) + { + if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 || + fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL || + mutt_strcmp (MMDF_SEP, buf) != 0) + { + if (fseek (ctx->fp, loc, SEEK_SET) != 0) + dprint (1, (debugfile, "mmdf_parse_mailbox: fseek() failed\n")); + hdr->content->length = -1; + } + } + else + hdr->content->length = -1; + } + else + hdr->content->length = -1; + + if (hdr->content->length < 0) + { + lines = -1; + do { + loc = ftell (ctx->fp); + if (fgets (buf, sizeof (buf) - 1, ctx->fp) == NULL) + break; + lines++; + } while (mutt_strcmp (buf, MMDF_SEP) != 0); + + hdr->lines = lines; + hdr->content->length = loc - hdr->content->offset; + } + + if (!hdr->env->return_path && return_path[0]) + hdr->env->return_path = rfc822_parse_adrlist (hdr->env->return_path, return_path); + + if (!hdr->env->from) + hdr->env->from = rfc822_cpy_adr (hdr->env->return_path); + + ctx->msgcount++; + } + else + { + dprint (1, (debugfile, "mmdf_parse_mailbox: corrupt mailbox!\n")); + mutt_error _("Mailbox is corrupt!"); + return (-1); + } + } + + if (ctx->msgcount > oldmsgcount) + mx_update_context (ctx, ctx->msgcount - oldmsgcount); + + return (0); +} + +/* Note that this function is also called when new mail is appended to the + * currently open folder, and NOT just when the mailbox is initially read. + * + * NOTE: it is assumed that the mailbox being read has been locked before + * this routine gets called. Strange things could happen if it's not! + */ +int mbox_parse_mailbox (CONTEXT *ctx) +{ + struct stat sb; + char buf[HUGE_STRING], return_path[STRING]; + HEADER *curhdr; + time_t t, tz; + int count = 0, lines = 0; + long loc; +#ifdef NFS_ATTRIBUTE_HACK + struct utimbuf newtime; +#endif + + /* Save information about the folder at the time we opened it. */ + if (stat (ctx->path, &sb) == -1) + { + mutt_perror (ctx->path); + return (-1); + } + + ctx->size = sb.st_size; + ctx->mtime = sb.st_mtime; + +#ifdef NFS_ATTRIBUTE_HACK + if (sb.st_mtime > sb.st_atime) + { + newtime.modtime = sb.st_mtime; + newtime.actime = time (NULL); + utime (ctx->path, &newtime); + } +#endif + + if (!ctx->readonly) + ctx->readonly = access (ctx->path, W_OK) ? 1 : 0; + + /* precompute the local timezone to speed up calculation of the + date received */ + tz = mutt_local_tz (0); + + loc = ftell (ctx->fp); + while (fgets (buf, sizeof (buf), ctx->fp) != NULL) + { + if (is_from (buf, return_path, sizeof (return_path), &t)) + { + /* Save the Content-Length of the previous message */ + if (count > 0) + { +#define PREV ctx->hdrs[ctx->msgcount-1] + + if (PREV->content->length < 0) + { + PREV->content->length = loc - PREV->content->offset - 1; + if (PREV->content->length < 0) + PREV->content->length = 0; + } + if (!PREV->lines) + PREV->lines = lines ? lines - 1 : 0; + } + + count++; + + if (!ctx->quiet && ReadInc && ((count % ReadInc == 0) || count == 1)) + mutt_message (_("Reading %s... %d (%d%%)"), ctx->path, count, + ftell (ctx->fp) / (ctx->size / 100 + 1)); + + if (ctx->msgcount == ctx->hdrmax) + mx_alloc_memory (ctx); + + curhdr = ctx->hdrs[ctx->msgcount] = mutt_new_header (); + curhdr->received = t - tz; + curhdr->offset = loc; + curhdr->index = ctx->msgcount; + + curhdr->env = mutt_read_rfc822_header (ctx->fp, curhdr, 0, 0); + + /* if we know how long this message is, either just skip over the body, + * or if we don't know how many lines there are, count them now (this will + * save time by not having to search for the next message marker). + */ + if (curhdr->content->length > 0) + { + long tmploc; + + loc = ftell (ctx->fp); + tmploc = loc + curhdr->content->length + 1; + + if (0 < tmploc && tmploc < ctx->size) + { + /* + * check to see if the content-length looks valid. we expect to + * to see a valid message separator at this point in the stream + */ + if (fseek (ctx->fp, tmploc, SEEK_SET) != 0 || + fgets (buf, sizeof (buf), ctx->fp) == NULL || + mutt_strncmp ("From ", buf, 5) != 0) + { + dprint (1, (debugfile, "mbox_parse_mailbox: bad content-length in message %d (cl=%ld)\n", curhdr->index, curhdr->content->length)); + dprint (1, (debugfile, "\tLINE: %s", buf)); + if (fseek (ctx->fp, loc, SEEK_SET) != 0) /* nope, return the previous position */ + { + dprint (1, (debugfile, "mbox_parse_mailbox: fseek() failed\n")); + } + curhdr->content->length = -1; + } + } + else if (tmploc != ctx->size) + { + /* content-length would put us past the end of the file, so it + * must be wrong + */ + curhdr->content->length = -1; + } + + if (curhdr->content->length != -1) + { + /* good content-length. check to see if we know how many lines + * are in this message. + */ + if (curhdr->lines == 0) + { + int cl = curhdr->content->length; + + /* count the number of lines in this message */ + if (fseek (ctx->fp, loc, SEEK_SET) != 0) + dprint (1, (debugfile, "mbox_parse_mailbox: fseek() failed\n")); + while (cl-- > 0) + { + if (fgetc (ctx->fp) == '\n') + curhdr->lines++; + } + } + + /* return to the offset of the next message separator */ + if (fseek (ctx->fp, tmploc, SEEK_SET) != 0) + dprint (1, (debugfile, "mbox_parse_mailbox: fseek() failed\n")); + } + } + + ctx->msgcount++; + + if (!curhdr->env->return_path && return_path[0]) + curhdr->env->return_path = rfc822_parse_adrlist (curhdr->env->return_path, return_path); + + if (!curhdr->env->from) + curhdr->env->from = rfc822_cpy_adr (curhdr->env->return_path); + + lines = 0; + } + else + lines++; + + loc = ftell (ctx->fp); + } + + /* + * Only set the content-length of the previous message if we have read more + * than one message during _this_ invocation. If this routine is called + * when new mail is received, we need to make sure not to clobber what + * previously was the last message since the headers may be sorted. + */ + if (count > 0) + { + if (PREV->content->length < 0) + { + PREV->content->length = ftell (ctx->fp) - PREV->content->offset - 1; + if (PREV->content->length < 0) + PREV->content->length = 0; + } + + if (!PREV->lines) + PREV->lines = lines ? lines - 1 : 0; + + mx_update_context (ctx, count); + } + + return (0); +} + +#undef PREV + +/* open a mbox or mmdf style mailbox */ +int mbox_open_mailbox (CONTEXT *ctx) +{ + int rc; + + if ((ctx->fp = fopen (ctx->path, "r")) == NULL) + { + mutt_perror (ctx->path); + return (-1); + } + mutt_block_signals (); + if (mbox_lock_mailbox (ctx, 0, 1) == -1) + { + mutt_unblock_signals (); + return (-1); + } + + if (ctx->magic == M_MBOX) + rc = mbox_parse_mailbox (ctx); + else if (ctx->magic == M_MMDF) + rc = mmdf_parse_mailbox (ctx); + else + rc = -1; + + mbox_unlock_mailbox (ctx); + mutt_unblock_signals (); + return (rc); +} + +/* return 1 if address lists are strictly identical */ +static int strict_addrcmp (const ADDRESS *a, const ADDRESS *b) +{ + while (a && b) + { + if (mutt_strcmp (a->mailbox, b->mailbox) || + mutt_strcmp (a->personal, b->personal)) + return (0); + + a = a->next; + b = b->next; + } + if (a || b) + return (0); + + return (1); +} + +static int strict_cmp_lists (const LIST *a, const LIST *b) +{ + while (a && b) + { + if (mutt_strcmp (a->data, b->data)) + return (0); + + a = a->next; + b = b->next; + } + if (a || b) + return (0); + + return (1); +} + +static int strict_cmp_envelopes (const ENVELOPE *e1, const ENVELOPE *e2) +{ + if (e1 && e2) + { + if (mutt_strcmp (e1->message_id, e2->message_id) || + mutt_strcmp (e1->subject, e2->subject) || + !strict_cmp_lists (e1->references, e2->references) || + !strict_addrcmp (e1->from, e2->from) || + !strict_addrcmp (e1->sender, e2->sender) || + !strict_addrcmp (e1->reply_to, e2->reply_to) || + !strict_addrcmp (e1->to, e2->to) || + !strict_addrcmp (e1->cc, e2->cc) || + !strict_addrcmp (e1->return_path, e2->return_path)) + return (0); + else + return (1); + } + else + { + if (e1 == NULL && e2 == NULL) + return (1); + else + return (0); + } +} + +static int strict_cmp_parameters (const PARAMETER *p1, const PARAMETER *p2) +{ + while (p1 && p2) + { + if (mutt_strcmp (p1->attribute, p2->attribute) || + mutt_strcmp (p1->value, p2->value)) + return (0); + + p1 = p1->next; + p2 = p2->next; + } + if (p1 || p2) + return (0); + + return (1); +} + +static int strict_cmp_bodies (const BODY *b1, const BODY *b2) +{ + if (b1->type != b2->type || + b1->encoding != b2->encoding || + mutt_strcmp (b1->subtype, b2->subtype) || + mutt_strcmp (b1->description, b2->description) || + !strict_cmp_parameters (b1->parameter, b2->parameter) || + b1->length != b2->length) + return (0); + return (1); +} + +/* return 1 if headers are strictly identical */ +int mbox_strict_cmp_headers (const HEADER *h1, const HEADER *h2) +{ + if (h1 && h2) + { + if (h1->received != h2->received || + h1->date_sent != h2->date_sent || + h1->content->length != h2->content->length || + h1->lines != h2->lines || + h1->zhours != h2->zhours || + h1->zminutes != h2->zminutes || + h1->zoccident != h2->zoccident || + h1->mime != h2->mime || + !strict_cmp_envelopes (h1->env, h2->env) || + !strict_cmp_bodies (h1->content, h2->content)) + return (0); + else + return (1); + } + else + { + if (h1 == NULL && h2 == NULL) + return (1); + else + return (0); + } +} + +/* check to see if the mailbox has changed on disk. + * + * return values: + * M_REOPENED mailbox has been reopened + * M_NEW_MAIL new mail has arrived! + * M_LOCKED couldn't lock the file + * 0 no change + * -1 error + */ +int mbox_check_mailbox (CONTEXT *ctx, int *index_hint) +{ + struct stat st; + char buffer[LONG_STRING]; + int unlock = 0; + int modified = 0; + + if (stat (ctx->path, &st) == 0) + { + if (st.st_mtime == ctx->mtime && st.st_size == ctx->size) + return (0); + + if (st.st_size == ctx->size) + { + /* the file was touched, but it is still the same length, so just exit */ + ctx->mtime = st.st_mtime; + return (0); + } + + if (st.st_size > ctx->size) + { + /* lock the file if it isn't already */ + if (!ctx->locked) + { + mutt_block_signals (); + if (mbox_lock_mailbox (ctx, 0, 0) == -1) + { + mutt_unblock_signals (); + /* we couldn't lock the mailbox, but nothing serious happened: + * probably the new mail arrived: no reason to wait till we can + * parse it: we'll get it on the next pass + */ + return (M_LOCKED); + } + unlock = 1; + } + + /* + * Check to make sure that the only change to the mailbox is that + * message(s) were appended to this file. My heuristic is that we should + * see the message separator at *exactly* what used to be the end of the + * folder. + */ + if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0) + dprint (1, (debugfile, "mbox_check_mailbox: fseek() failed\n")); + if (fgets (buffer, sizeof (buffer), ctx->fp) != NULL) + { + if ((ctx->magic == M_MBOX && mutt_strncmp ("From ", buffer, 5) == 0) || + (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buffer) == 0)) + { + if (fseek (ctx->fp, ctx->size, SEEK_SET) != 0) + dprint (1, (debugfile, "mbox_check_mailbox: fseek() failed\n")); + if (ctx->magic == M_MBOX) + mbox_parse_mailbox (ctx); + else + mmdf_parse_mailbox (ctx); + + /* Only unlock the folder if it was locked inside of this routine. + * It may have been locked elsewhere, like in + * mutt_checkpoint_mailbox(). + */ + + if (unlock) + { + mbox_unlock_mailbox (ctx); + mutt_unblock_signals (); + } + + return (M_NEW_MAIL); /* signal that new mail arrived */ + } + else + modified = 1; + } + else + { + dprint (1, (debugfile, "mbox_check_mailbox: fgets returned NULL.\n")); + modified = 1; + } + } + else + modified = 1; + } + + if (modified) + { + if (mutt_reopen_mailbox (ctx, index_hint) != -1) + { + if (unlock) + { + mbox_unlock_mailbox (ctx); + mutt_unblock_signals (); + } + return (M_REOPENED); + } + } + + /* fatal error */ + + mbox_unlock_mailbox (ctx); + mx_fastclose_mailbox (ctx); + mutt_unblock_signals (); + mutt_error _("Mailbox was corrupted!"); + return (-1); +} + +/* return values: + * 0 success + * -1 failure + */ +int mbox_sync_mailbox (CONTEXT *ctx, int *index_hint) +{ + char tempfile[_POSIX_PATH_MAX]; + char buf[32]; + int i, j, save_sort = SORT_ORDER; + int rc = -1; + int need_sort = 0; /* flag to resort mailbox if new mail arrives */ + int first = -1; /* first message to be written */ + long offset; /* location in mailbox to write changed messages */ + struct stat statbuf; + struct utimbuf utimebuf; + struct m_update_t *newOffset = NULL; + struct m_update_t *oldOffset = NULL; + FILE *fp = NULL; + + /* sort message by their position in the mailbox on disk */ + if (Sort != SORT_ORDER) + { + save_sort = Sort; + Sort = SORT_ORDER; + mutt_sort_headers (ctx, 0); + } + + /* need to open the file for writing in such a way that it does not truncate + * the file, so use read-write mode. + */ + if ((ctx->fp = freopen (ctx->path, "r+", ctx->fp)) == NULL) + { + mx_fastclose_mailbox (ctx); + mutt_error _("Fatal error! Could not reopen mailbox!"); + return (-1); + } + + mutt_block_signals (); + + if (mbox_lock_mailbox (ctx, 1, 1) == -1) + { + mutt_unblock_signals (); + mutt_error _("Unable to lock mailbox!"); + goto bail; + } + + /* Check to make sure that the file hasn't changed on disk */ + if ((i = mbox_check_mailbox (ctx, index_hint)) == M_NEW_MAIL || i == M_REOPENED) + { + /* new mail arrived, or mailbox reopened */ + need_sort = i; + rc = i; + goto bail; + } + else if (i < 0) + { + /* fatal error */ + Sort = save_sort; + return (-1); + } + + /* Create a temporary file to write the new version of the mailbox in. */ + mutt_mktemp (tempfile); + if ((i = open (tempfile, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1 || + (fp = fdopen (i, "w")) == NULL) + { + if (-1 != i) + { + close (i); + unlink (tempfile); + } + mutt_error _("Could not create temporary file!"); + mutt_sleep (5); + goto bail; + } + + /* find the first deleted/changed message. we save a lot of time by only + * rewriting the mailbox from the point where it has actually changed. + */ + for (i = 0 ; i < ctx->msgcount && !ctx->hdrs[i]->deleted && + !ctx->hdrs[i]->changed && !ctx->hdrs[i]->attach_del; i++) + ; + if (i == ctx->msgcount) + { + /* this means ctx->changed or ctx->deleted was set, but no + * messages were found to be changed or deleted. This should + * never happen, is we presume it is a bug in mutt. + */ + mutt_error _("sync: mbox modified, but no modified messages! (report this bug)"); + mutt_sleep(5); /* the mutt_error /will/ get cleared! */ + dprint(1, (debugfile, "mbox_sync_mailbox(): no modified messages.\n")); + unlink (tempfile); + goto bail; + } + + /* save the index of the first changed/deleted message */ + first = i; + /* where to start overwriting */ + offset = ctx->hdrs[i]->offset; + + /* the offset stored in the header does not include the MMDF_SEP, so make + * sure we seek to the correct location + */ + if (ctx->magic == M_MMDF) + offset -= (sizeof MMDF_SEP - 1); + + /* allocate space for the new offsets */ + newOffset = safe_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); + oldOffset = safe_calloc (ctx->msgcount - first, sizeof (struct m_update_t)); + + for (i = first, j = 0; i < ctx->msgcount; i++) + { + /* + * back up some information which is needed to restore offsets when + * something fails. + */ + + oldOffset[i-first].valid = 1; + oldOffset[i-first].hdr = ctx->hdrs[i]->offset; + oldOffset[i-first].body = ctx->hdrs[i]->content->offset; + oldOffset[i-first].lines = ctx->hdrs[i]->lines; + oldOffset[i-first].length = ctx->hdrs[i]->content->length; + + if (! ctx->hdrs[i]->deleted) + { + j++; + if (!ctx->quiet && WriteInc && ((i % WriteInc) == 0 || j == 1)) + mutt_message (_("Writing messages... %d (%d%%)"), i, + ftell (ctx->fp) / (ctx->size / 100 + 1)); + + if (ctx->magic == M_MMDF) + { + if (fputs (MMDF_SEP, fp) == EOF) + { + mutt_perror (tempfile); + mutt_sleep (5); + unlink (tempfile); + goto bail; + } + + } + + /* save the new offset for this message. we add `offset' because the + * temporary file only contains saved message which are located after + * `offset' in the real mailbox + */ + newOffset[i - first].hdr = ftell (fp) + offset; + + if (mutt_copy_message (fp, ctx, ctx->hdrs[i], M_CM_UPDATE, CH_FROM | CH_UPDATE | CH_UPDATE_LEN) == -1) + { + mutt_perror (tempfile); + mutt_sleep (5); + unlink (tempfile); + goto bail; + } + + /* Since messages could have been deleted, the offsets stored in memory + * will be wrong, so update what we can, which is the offset of this + * message, and the offset of the body. If this is a multipart message, + * we just flush the in memory cache so that the message will be reparsed + * if the user accesses it later. + */ + newOffset[i - first].body = ftell (fp) - ctx->hdrs[i]->content->length + offset; + mutt_free_body (&ctx->hdrs[i]->content->parts); + + switch(ctx->magic) + { + case M_MMDF: + if(fputs(MMDF_SEP, fp) == EOF) + { + mutt_perror (tempfile); + mutt_sleep (5); + unlink (tempfile); + goto bail; + } + break; + default: + if(fputs("\n", fp) == EOF) + { + mutt_perror (tempfile); + mutt_sleep (5); + unlink (tempfile); + goto bail; + } + } + } + } + + if (fclose (fp) != 0) + { + fp = NULL; + dprint(1, (debugfile, "mbox_sync_mailbox: fclose() returned non-zero.\n")); + unlink (tempfile); + mutt_perror (tempfile); + mutt_sleep (5); + goto bail; + } + fp = NULL; + + /* Save the state of this folder. */ + if (stat (ctx->path, &statbuf) == -1) + { + mutt_perror (ctx->path); + mutt_sleep (5); + unlink (tempfile); + goto bail; + } + + if ((fp = fopen (tempfile, "r")) == NULL) + { + mutt_unblock_signals (); + mx_fastclose_mailbox (ctx); + dprint (1, (debugfile, "mbox_sync_mailbox: unable to reopen temp copy of mailbox!\n")); + mutt_perror (tempfile); + mutt_sleep (5); + return (-1); + } + + if (fseek (ctx->fp, offset, SEEK_SET) != 0 || /* seek the append location */ + /* do a sanity check to make sure the mailbox looks ok */ + fgets (buf, sizeof (buf), ctx->fp) == NULL || + (ctx->magic == M_MBOX && mutt_strncmp ("From ", buf, 5) != 0) || + (ctx->magic == M_MMDF && mutt_strcmp (MMDF_SEP, buf) != 0)) + { + dprint (1, (debugfile, "mbox_sync_mailbox: message not in expected position.")); + dprint (1, (debugfile, "\tLINE: %s\n", buf)); + i = -1; + } + else + { + if (fseek (ctx->fp, offset, SEEK_SET) != 0) /* return to proper offset */ + { + i = -1; + dprint (1, (debugfile, "mbox_sync_mailbox: fseek() failed\n")); + } + else + { + /* copy the temp mailbox back into place starting at the first + * change/deleted message + */ + mutt_message _("Committing changes..."); + i = mutt_copy_stream (fp, ctx->fp); + + if (ferror (ctx->fp)) + i = -1; + } + if (i == 0) + { + ctx->size = ftell (ctx->fp); /* update the size of the mailbox */ + ftruncate (fileno (ctx->fp), ctx->size); + } + } + + fclose (fp); + fp = NULL; + mbox_unlock_mailbox (ctx); + + if (fclose (ctx->fp) != 0 || i == -1) + { + /* error occured while writing the mailbox back, so keep the temp copy + * around + */ + + char savefile[_POSIX_PATH_MAX]; + + snprintf (savefile, sizeof (savefile), "%s/mutt.%s-%s-%d", + NONULL (Tempdir), NONULL(Username), NONULL(Hostname), getpid ()); + rename (tempfile, savefile); + mutt_unblock_signals (); + mx_fastclose_mailbox (ctx); + mutt_pretty_mailbox (savefile); + mutt_error (_("Write failed! Saved partial mailbox to %s"), savefile); + mutt_sleep (5); + return (-1); + } + + /* Restore the previous access/modification times */ + utimebuf.actime = statbuf.st_atime; + utimebuf.modtime = statbuf.st_mtime; + utime (ctx->path, &utimebuf); + + /* reopen the mailbox in read-only mode */ + if ((ctx->fp = fopen (ctx->path, "r")) == NULL) + { + unlink (tempfile); + mutt_unblock_signals (); + mx_fastclose_mailbox (ctx); + mutt_error _("Fatal error! Could not reopen mailbox!"); + Sort = save_sort; + return (-1); + } + + /* update the offsets of the rewritten messages */ + for (i = first, j = first; i < ctx->msgcount; i++) + { + if (!ctx->hdrs[i]->deleted) + { + ctx->hdrs[i]->offset = newOffset[i - first].hdr; + ctx->hdrs[i]->content->hdr_offset = newOffset[i - first].hdr; + ctx->hdrs[i]->content->offset = newOffset[i - first].body; + ctx->hdrs[i]->index = j++; + } + } + FREE (&newOffset); + FREE (&oldOffset); + unlink (tempfile); /* remove partial copy of the mailbox */ + mutt_unblock_signals (); + Sort = save_sort; /* Restore the default value. */ + + return (0); /* signal success */ + +bail: /* Come here in case of disaster */ + + safe_fclose (&fp); + + /* restore offsets, as far as they are valid */ + if (first >= 0 && oldOffset) + { + for (i = first; i < ctx->msgcount && oldOffset[i-first].valid; i++) + { + ctx->hdrs[i]->offset = oldOffset[i-first].hdr; + ctx->hdrs[i]->content->hdr_offset = oldOffset[i-first].hdr; + ctx->hdrs[i]->content->offset = oldOffset[i-first].body; + ctx->hdrs[i]->lines = oldOffset[i-first].lines; + ctx->hdrs[i]->content->length = oldOffset[i-first].length; + } + } + + /* this is ok to call even if we haven't locked anything */ + mbox_unlock_mailbox (ctx); + + mutt_unblock_signals (); + FREE (&newOffset); + FREE (&oldOffset); + + if ((ctx->fp = freopen (ctx->path, "r", ctx->fp)) == NULL) + { + mutt_error _("Could not reopen mailbox!"); + mx_fastclose_mailbox (ctx); + return (-1); + } + + if (need_sort || save_sort != Sort) + { + Sort = save_sort; + /* if the mailbox was reopened, the thread tree will be invalid so make + * sure to start threading from scratch. */ + mutt_sort_headers (ctx, (need_sort == M_REOPENED)); + } + + return rc; +} + +/* close a mailbox opened in write-mode */ +int mbox_close_mailbox (CONTEXT *ctx) +{ + mx_unlock_file (ctx->path, fileno (ctx->fp), 1); + mutt_unblock_signals (); + mx_fastclose_mailbox (ctx); + return 0; +} + +int mutt_reopen_mailbox (CONTEXT *ctx, int *index_hint) +{ + int (*cmp_headers) (const HEADER *, const HEADER *) = NULL; + HEADER **old_hdrs; + int old_msgcount; + int msg_mod = 0; + int index_hint_set; + int i, j; + int rc = -1; + + /* silent operations */ + ctx->quiet = 1; + + mutt_message _("Reopening mailbox..."); + + /* our heuristics require the old mailbox to be unsorted */ + if (Sort != SORT_ORDER) + { + short old_sort; + + old_sort = Sort; + Sort = SORT_ORDER; + mutt_sort_headers (ctx, 1); + Sort = old_sort; + } + + old_hdrs = NULL; + old_msgcount = 0; + + /* simulate a close */ + if (ctx->id_hash) + hash_destroy (&ctx->id_hash, NULL); + if (ctx->subj_hash) + hash_destroy (&ctx->subj_hash, NULL); + mutt_clear_threads (ctx); + FREE (&ctx->v2r); + if (ctx->readonly) + { + for (i = 0; i < ctx->msgcount; i++) + mutt_free_header (&(ctx->hdrs[i])); /* nothing to do! */ + FREE (&ctx->hdrs); + } + else + { + /* save the old headers */ + old_msgcount = ctx->msgcount; + old_hdrs = ctx->hdrs; + ctx->hdrs = NULL; + } + + ctx->hdrmax = 0; /* force allocation of new headers */ + ctx->msgcount = 0; + ctx->vcount = 0; + ctx->tagged = 0; + ctx->deleted = 0; + ctx->new = 0; + ctx->unread = 0; + ctx->flagged = 0; + ctx->changed = 0; + ctx->id_hash = NULL; + ctx->subj_hash = NULL; + + switch (ctx->magic) + { + case M_MBOX: + case M_MMDF: + if (fseek (ctx->fp, 0, SEEK_SET) != 0) + { + dprint (1, (debugfile, "mutt_reopen_mailbox: fseek() failed\n")); + rc = -1; + } + else + { + cmp_headers = mbox_strict_cmp_headers; + rc = ((ctx->magic == M_MBOX) ? mbox_parse_mailbox + : mmdf_parse_mailbox) (ctx); + } + break; + + default: + rc = -1; + break; + } + + if (rc == -1) + { + /* free the old headers */ + for (j = 0; j < old_msgcount; j++) + mutt_free_header (&(old_hdrs[j])); + FREE (&old_hdrs); + + ctx->quiet = 0; + return (-1); + } + + /* now try to recover the old flags */ + + index_hint_set = (index_hint == NULL); + + if (!ctx->readonly) + { + for (i = 0; i < ctx->msgcount; i++) + { + int found = 0; + + /* some messages have been deleted, and new messages have been + * appended at the end; the heuristic is that old messages have then + * "advanced" towards the beginning of the folder, so we begin the + * search at index "i" + */ + for (j = i; j < old_msgcount; j++) + { + if (old_hdrs[j] == NULL) + continue; + if (cmp_headers (ctx->hdrs[i], old_hdrs[j])) + { + found = 1; + break; + } + } + if (!found) + { + for (j = 0; j < i && j < old_msgcount; j++) + { + if (old_hdrs[j] == NULL) + continue; + if (cmp_headers (ctx->hdrs[i], old_hdrs[j])) + { + found = 1; + break; + } + } + } + + if (found) + { + /* this is best done here */ + if (!index_hint_set && *index_hint == j) + *index_hint = i; + + if (old_hdrs[j]->changed) + { + /* Only update the flags if the old header was changed; + * otherwise, the header may have been modified externally, + * and we don't want to lose _those_ changes + */ + mutt_set_flag (ctx, ctx->hdrs[i], M_FLAG, old_hdrs[j]->flagged); + mutt_set_flag (ctx, ctx->hdrs[i], M_REPLIED, old_hdrs[j]->replied); + mutt_set_flag (ctx, ctx->hdrs[i], M_OLD, old_hdrs[j]->old); + mutt_set_flag (ctx, ctx->hdrs[i], M_READ, old_hdrs[j]->read); + } + mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, old_hdrs[j]->deleted); + mutt_set_flag (ctx, ctx->hdrs[i], M_TAG, old_hdrs[j]->tagged); + + /* we don't need this header any more */ + mutt_free_header (&(old_hdrs[j])); + } + } + + /* free the remaining old headers */ + for (j = 0; j < old_msgcount; j++) + { + if (old_hdrs[j]) + { + mutt_free_header (&(old_hdrs[j])); + msg_mod = 1; + } + } + FREE (&old_hdrs); + } + + ctx->quiet = 0; + + return ((ctx->changed || msg_mod) ? M_REOPENED : M_NEW_MAIL); +} + +/* + * Returns: + * 1 if the mailbox is not empty + * 0 if the mailbox is empty + * -1 on error + */ +int mbox_check_empty (const char *path) +{ + struct stat st; + + if (stat (path, &st) == -1) + return -1; + + return ((st.st_size == 0)); +} diff --git a/mbyte.c b/mbyte.c new file mode 100644 index 0000000..3c14c6f --- /dev/null +++ b/mbyte.c @@ -0,0 +1,467 @@ +/* + * Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * Japanese support by TAKIZAWA Takashi <taki@luna.email.ne.jp>. + */ + +#include "mutt.h" +#include "mbyte.h" +#include "charset.h" + +#include <errno.h> + +#include <ctype.h> + +#ifndef EILSEQ +#define EILSEQ EINVAL +#endif + +int Charset_is_utf8 = 0; +#ifndef HAVE_WC_FUNCS +static int charset_is_ja = 0; +static iconv_t charset_to_utf8 = (iconv_t)(-1); +static iconv_t charset_from_utf8 = (iconv_t)(-1); +#endif + +void mutt_set_charset (char *charset) +{ + char buffer[STRING]; + + mutt_canonical_charset (buffer, sizeof (buffer), charset); + + Charset_is_utf8 = 0; +#ifndef HAVE_WC_FUNCS + charset_is_ja = 0; + if (charset_to_utf8 != (iconv_t)(-1)) + { + iconv_close (charset_to_utf8); + charset_to_utf8 = (iconv_t)(-1); + } + if (charset_from_utf8 != (iconv_t)(-1)) + { + iconv_close (charset_from_utf8); + charset_from_utf8 = (iconv_t)(-1); + } +#endif + + if (!strcmp(buffer, "utf-8")) + Charset_is_utf8 = 1; +#ifndef HAVE_WC_FUNCS + else if (!strcmp(buffer, "euc-jp") || !strcmp(buffer, "shift_jis") + || !strcmp(buffer, "cp932")) + { + charset_is_ja = 1; + charset_to_utf8 = iconv_open ("UTF-8", charset); + charset_from_utf8 = iconv_open (charset, "UTF-8"); + } +#endif + +#ifdef HAVE_BIND_TEXTDOMAIN_CODESET + bind_textdomain_codeset(PACKAGE, buffer); +#endif +} + +#ifndef HAVE_WC_FUNCS + +/* + * For systems that don't have them, we provide here our own + * implementations of wcrtomb(), mbrtowc(), iswprint() and wcwidth(). + * Instead of using the locale, as these functions normally would, + * we use Mutt's Charset variable. We support 3 types of charset: + * (1) For 8-bit charsets, wchar_t uses the same encoding as char. + * (2) For UTF-8, wchar_t uses UCS. + * (3) For stateless Japanese encodings, we use UCS and convert + * via UTF-8 using iconv. + * Unfortunately, we can't handle non-stateless encodings. + */ + +static size_t wcrtomb_iconv (char *s, wchar_t wc, iconv_t cd) +{ + char buf[MB_LEN_MAX]; + ICONV_CONST char *ib; + char *ob; + size_t ibl, obl, r; + + if (s) + { + ibl = mutt_wctoutf8 (buf, wc); + if (ibl == (size_t)(-1)) + return (size_t)(-1); + ib = buf; + ob = s; + obl = MB_LEN_MAX; + r = iconv (cd, &ib, &ibl, &ob, &obl); + } + else + { + ib = ""; + ibl = 1; + ob = buf; + obl = sizeof (buf); + r = iconv (cd, &ib, &ibl, &ob, &obl); + } + return ob - s; +} + +size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) +{ + /* We only handle stateless encodings, so we can ignore ps. */ + + if (Charset_is_utf8) + return mutt_wctoutf8 (s, wc); + else if (charset_from_utf8 != (iconv_t)(-1)) + return wcrtomb_iconv (s, wc, charset_from_utf8); + else + { + if (!s) + return 1; + if (wc < 0x100) + { + *s = wc; + return 1; + } + errno = EILSEQ; + return (size_t)(-1); + } +} + +size_t mbrtowc_iconv (wchar_t *pwc, const char *s, size_t n, + mbstate_t *ps, iconv_t cd) +{ + static mbstate_t mbstate; + ICONV_CONST char *ib, *ibmax; + char *ob, *t; + size_t ibl, obl, k, r; + char bufi[8], bufo[6]; + + if (!n) + return (size_t)(-2); + + t = memchr (ps, 0, sizeof (*ps)); + k = t ? (t - (char *)ps) : sizeof (*ps); + if (k > sizeof (bufi)) + k = 0; + if (k) + { + /* use the buffer for input */ + memcpy (bufi, ps, k); + ib = bufi; + ibmax = bufi + (k + n < sizeof (bufi) ? k + n : sizeof (bufi)); + memcpy (bufi + k, s, ibmax - bufi - k); + } + else + { + /* use the real input */ + ib = s; + ibmax = s + n; + } + + ob = bufo; + obl = sizeof (bufo); + ibl = 1; + + for (;;) + { + r = iconv (cd, &ib, &ibl, &ob, &obl); + if (ob > bufo && (!k || ib > bufi + k)) + { + /* we have a character */ + memset (ps, 0, sizeof (*ps)); + utf8rtowc (pwc, bufo, ob - bufo, &mbstate); + return (pwc && *pwc) ? (ib - (k ? bufi + k : s)) : 0; + } + else if (!r || (r == (size_t)(-1) && errno == EINVAL)) + { + if (ib + ibl < ibmax) + /* try using more input */ + ++ibl; + else if (k && ib > bufi + k && bufi + k + n > ibmax) + { + /* switch to using real input */ + ib = s + (ib - bufi - k); + ibmax = s + n; + k = 0; + ++ibl; + } + else + { + /* save the state and give up */ + memset (ps, 0, sizeof (*ps)); + if (ibl <= sizeof (mbstate_t)) /* need extra condition here! */ + memcpy (ps, ib, ibl); + return (size_t)(-2); + } + } + else + { + /* bad input */ + errno = EILSEQ; + return (size_t)(-1); + } + } +} + +size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + static mbstate_t mbstate; + + if (!ps) + ps = &mbstate; + + if (Charset_is_utf8) + return utf8rtowc (pwc, s, n, ps); + else if (charset_to_utf8 != (iconv_t)(-1)) + return mbrtowc_iconv (pwc, s, n, ps, charset_to_utf8); + else + { + if (!s) + { + memset(ps, 0, sizeof(*ps)); + return 0; + } + if (!n) + return (size_t)-2; + if (pwc) + *pwc = (wchar_t)(unsigned char)*s; + return (*s != 0); + } +} + +int iswprint (wint_t wc) +{ + if (Charset_is_utf8 || charset_is_ja) + return ((0x20 <= wc && wc < 0x7f) || 0xa0 <= wc); + else + return (0 <= wc && wc < 256) ? IsPrint (wc) : 0; +} + +int iswspace (wint_t wc) +{ + if (Charset_is_utf8 || charset_is_ja) + return (9 <= wc && wc <= 13) || wc == 32; + else + return (0 <= wc && wc < 256) ? isspace (wc) : 0; +} + +static wint_t towupper_ucs (wint_t x) +{ + /* Only works for x < 0x130 */ + if ((0x60 < x && x < 0x7b) || (0xe0 <= x && x < 0xff && x != 0xf7)) + return x - 32; + else if (0x100 <= x && x < 0x130) + return x & ~1; + else if (x == 0xb5) + return 0x39c; + else if (x == 0xff) + return 0x178; + else + return x; +} + +static wint_t towlower_ucs (wint_t x) +{ + /* Only works for x < 0x130 */ + if ((0x40 < x && x < 0x5b) || (0xc0 <= x && x < 0xdf && x != 0xd7)) + return x + 32; + else if (0x100 <= x && x < 0x130) + return x | 1; + else + return x; +} + +static int iswalnum_ucs (wint_t wc) +{ + /* Only works for x < 0x220 */ + if (wc >= 0x100) + return 1; + else if (wc < 0x30) + return 0; + else if (wc < 0x3a) + return 1; + else if (wc < 0xa0) + return (0x40 < (wc & ~0x20) && (wc & ~0x20) < 0x5b); + else if (wc < 0xc0) + return (wc == 0xaa || wc == 0xb5 || wc == 0xba); + else + return !(wc == 0xd7 || wc == 0xf7); +} + +wint_t towupper (wint_t wc) +{ + if (Charset_is_utf8 || charset_is_ja) + return towupper_ucs (wc); + else + return (0 <= wc && wc < 256) ? toupper (wc) : wc; +} + +wint_t towlower (wint_t wc) +{ + if (Charset_is_utf8 || charset_is_ja) + return towlower_ucs (wc); + else + return (0 <= wc && wc < 256) ? tolower (wc) : wc; +} + +int iswalnum (wint_t wc) +{ + if (Charset_is_utf8 || charset_is_ja) + return iswalnum_ucs (wc); + else + return (0 <= wc && wc < 256) ? isalnum (wc) : 0; +} + +/* + * l10n for Japanese: + * Symbols, Greek and Cyrillic in JIS X 0208, Japanese Kanji + * Character Set, have a column width of 2. + */ +int wcwidth_ja (wchar_t ucs) +{ + if (ucs >= 0x3021) + return -1; /* continue with the normal check */ + /* a rough range for quick check */ + if ((ucs >= 0x00a1 && ucs <= 0x00fe) || /* Latin-1 Supplement */ + (ucs >= 0x0391 && ucs <= 0x0451) || /* Greek and Cyrillic */ + (ucs >= 0x2010 && ucs <= 0x266f) || /* Symbols */ + (ucs >= 0x3000 && ucs <= 0x3020)) /* CJK Symbols and Punctuation */ + return 2; + else + return -1; +} + +int wcwidth_ucs(wchar_t ucs); + +int wcwidth (wchar_t wc) +{ + if (!Charset_is_utf8) + { + if (!charset_is_ja) + { + /* 8-bit case */ + if (!wc) + return 0; + else if ((0 <= wc && wc < 256) && IsPrint (wc)) + return 1; + else + return -1; + } + else + { + /* Japanese */ + int k = wcwidth_ja (wc); + if (k != -1) + return k; + } + } + return wcwidth_ucs (wc); +} + +size_t utf8rtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *_ps) +{ + static wchar_t mbstate; + wchar_t *ps = (wchar_t *)_ps; + size_t k = 1; + unsigned char c; + wchar_t wc; + int count; + + if (!ps) + ps = &mbstate; + + if (!s) + { + *ps = 0; + return 0; + } + if (!n) + return (size_t)-2; + + if (!*ps) + { + c = (unsigned char)*s; + if (c < 0x80) + { + if (pwc) + *pwc = c; + return (c != 0); + } + else if (c < 0xc2) + { + errno = EILSEQ; + return (size_t)-1; + } + else if (c < 0xe0) + wc = ((c & 0x1f) << 6) + (count = 0); + else if (c < 0xf0) + wc = ((c & 0x0f) << 12) + (count = 1); + else if (c < 0xf8) + wc = ((c & 0x07) << 18) + (count = 2); + else if (c < 0xfc) + wc = ((c & 0x03) << 24) + (count = 3); + else if (c < 0xfe) + wc = ((c & 0x01) << 30) + (count = 4); + else + { + errno = EILSEQ; + return (size_t)-1; + } + ++s, --n, ++k; + } + else + { + wc = *ps & 0x7fffffff; + count = wc & 7; /* if count > 4 it will be caught below */ + } + + for (; n; ++s, --n, ++k) + { + c = (unsigned char)*s; + if (0x80 <= c && c < 0xc0) + { + wc |= (c & 0x3f) << (6 * count); + if (!count) + { + if (pwc) + *pwc = wc; + *ps = 0; + return wc ? k : 0; + } + --count, --wc; + if (!(wc >> (11+count*5))) + { + errno = count < 4 ? EILSEQ : EINVAL; + return (size_t)-1; + } + } + else + { + errno = EILSEQ; + return (size_t)-1; + } + } + *ps = wc; + return (size_t)-2; +} + +#endif /* !HAVE_WC_FUNCS */ + +wchar_t replacement_char () +{ + return Charset_is_utf8 ? 0xfffd : '?'; +} diff --git a/mbyte.h b/mbyte.h new file mode 100644 index 0000000..797a2da --- /dev/null +++ b/mbyte.h @@ -0,0 +1,32 @@ +#ifndef _MBYTE_H +# define _MBYTE_H + +# include "config.h" + +# ifdef HAVE_WC_FUNCS +# ifdef HAVE_WCHAR_H +# include <wchar.h> +# endif +# ifdef HAVE_WCTYPE_H +# include <wctype.h> +# endif +# endif + +# ifndef HAVE_WC_FUNCS +size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps); +size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps); +int iswprint (wint_t wc); +int iswspace (wint_t wc); +int iswalnum (wint_t wc); +wint_t towupper (wint_t wc); +wint_t towlower (wint_t wc); +int wcwidth (wchar_t wc); +# endif /* !HAVE_WC_FUNCS */ + + +void mutt_set_charset (char *charset); +extern int Charset_is_utf8; +size_t utf8rtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *_ps); +wchar_t replacement_char (void); + +#endif /* _MBYTE_H */ diff --git a/md5.h b/md5.h new file mode 100644 index 0000000..f825432 --- /dev/null +++ b/md5.h @@ -0,0 +1,62 @@ +/* MD5.H - header file for MD5C.C + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + */ + +#ifndef MD5_H +#define MD5_H 1 + +#include "config.h" + +#include <sys/types.h> +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif + +/* POINTER defines a generic pointer type */ +typedef unsigned char *POINTER; + +#ifndef HAVE_UINT32_T +# if SIZEOF_INT == 4 +typedef unsigned int uint32_t; +# elif SIZEOF_LONG == 4 +typedef unsigned long int uint32_t; +# endif +#endif + +/* MD5 context. */ +typedef struct { + uint32_t state[4]; /* state (ABCD) */ + uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ + unsigned char buffer[64]; /* input buffer */ +} MD5_CTX; + +void MD5Init (MD5_CTX *); +void MD5Update (MD5_CTX *, unsigned char *, unsigned int); +void MD5Final (unsigned char [16], MD5_CTX *); + +#endif diff --git a/md5c.c b/md5c.c new file mode 100644 index 0000000..2c2c564 --- /dev/null +++ b/md5c.c @@ -0,0 +1,330 @@ +/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + */ + +#include "md5.h" + +/* Constants for MD5Transform routine. + */ + +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + +static void MD5Transform (uint32_t [4], unsigned char [64]); +static void Encode (unsigned char *, uint32_t *, unsigned int); +static void Decode (uint32_t *, unsigned char *, unsigned int); +static void MD5_memcpy (POINTER, POINTER, unsigned int); +static void MD5_memset (POINTER, int, unsigned int); + +static unsigned char PADDING[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* F, G, H and I are basic MD5 functions. + */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits. + */ +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. +Rotation is separate from addition to prevent recomputation. + */ +#define FF(a, b, c, d, x, s, ac) { \ + (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define GG(a, b, c, d, x, s, ac) { \ + (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define HH(a, b, c, d, x, s, ac) { \ + (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define II(a, b, c, d, x, s, ac) { \ + (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } + +/* MD5 initialization. Begins an MD5 operation, writing a new context. + */ +void MD5Init (context) +MD5_CTX *context; /* context */ +{ + context->count[0] = context->count[1] = 0; + /* Load magic initialization constants. +*/ + context->state[0] = 0x67452301; + context->state[1] = 0xefcdab89; + context->state[2] = 0x98badcfe; + context->state[3] = 0x10325476; +} + +/* MD5 block update operation. Continues an MD5 message-digest + operation, processing another message block, and updating the + context. + */ +void MD5Update (context, input, inputLen) +MD5_CTX *context; /* context */ +unsigned char *input; /* input block */ +unsigned int inputLen; /* length of input block */ +{ + unsigned int i, index, partLen; + + /* Compute number of bytes mod 64 */ + index = (unsigned int)((context->count[0] >> 3) & 0x3F); + + /* Update number of bits */ + if ((context->count[0] += ((uint32_t)inputLen << 3)) + < ((uint32_t)inputLen << 3)) + context->count[1]++; + context->count[1] += ((uint32_t)inputLen >> 29); + + partLen = 64 - index; + + /* Transform as many times as possible. +*/ + if (inputLen >= partLen) { + MD5_memcpy + ((POINTER)&context->buffer[index], (POINTER)input, partLen); + MD5Transform (context->state, context->buffer); + + for (i = partLen; i + 63 < inputLen; i += 64) + MD5Transform (context->state, &input[i]); + + index = 0; + } + else + i = 0; + + /* Buffer remaining input */ + MD5_memcpy + ((POINTER)&context->buffer[index], (POINTER)&input[i], + inputLen-i); +} + +/* MD5 finalization. Ends an MD5 message-digest operation, writing the + the message digest and zeroizing the context. + */ +void MD5Final (digest, context) +unsigned char digest[16]; /* message digest */ +MD5_CTX *context; /* context */ +{ + unsigned char bits[8]; + unsigned int index, padLen; + + /* Save number of bits */ + Encode (bits, context->count, 8); + + /* Pad out to 56 mod 64. +*/ + index = (unsigned int)((context->count[0] >> 3) & 0x3f); + padLen = (index < 56) ? (56 - index) : (120 - index); + MD5Update (context, PADDING, padLen); + + /* Append length (before padding) */ + MD5Update (context, bits, 8); + /* Store state in digest */ + Encode (digest, context->state, 16); + + /* Zeroize sensitive information. +*/ + MD5_memset ((POINTER)context, 0, sizeof (*context)); +} + +/* MD5 basic transformation. Transforms state based on block. + */ +static void MD5Transform (state, block) +uint32_t state[4]; +unsigned char block[64]; +{ + uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16]; + + Decode (x, block, 64); + + /* Round 1 */ + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ + FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ + FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ + FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ + FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ + FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ + GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ + GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ + GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ + GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ + GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ + HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ + HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ + HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ + HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ + HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ + II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ + II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ + II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ + II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ + II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ + II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ + II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + + /* Zeroize sensitive information. */ + MD5_memset ((POINTER)x, 0, sizeof (x)); +} + +/* Encodes input (uint32_t) into output (unsigned char). Assumes len is + a multiple of 4. + */ +static void Encode (output, input, len) +unsigned char *output; +uint32_t *input; +unsigned int len; +{ + unsigned int i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) { + output[j] = (unsigned char)(input[i] & 0xff); + output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); + output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); + output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); + } +} + +/* Decodes input (unsigned char) into output (uint32_t). Assumes len is + a multiple of 4. + */ +static void Decode (output, input, len) +uint32_t *output; +unsigned char *input; +unsigned int len; +{ + unsigned int i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) + output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) | + (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24); +} + +/* Note: Replace "for loop" with standard memcpy if possible. + */ + +static void MD5_memcpy (output, input, len) +POINTER output; +POINTER input; +unsigned int len; +{ + unsigned int i; + + for (i = 0; i < len; i++) + output[i] = input[i]; +} + +/* Note: Replace "for loop" with standard memset if possible. + */ +static void MD5_memset (output, value, len) +POINTER output; +int value; +unsigned int len; +{ + unsigned int i; + + for (i = 0; i < len; i++) + ((char *)output)[i] = (char)value; +} diff --git a/menu.c b/menu.c new file mode 100644 index 0000000..ecb8117 --- /dev/null +++ b/menu.c @@ -0,0 +1,1070 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "mbyte.h" + +#ifdef USE_IMAP +#include "imap.h" +#endif + +#include <string.h> +#include <stdlib.h> + +extern int Charset_is_utf8; /* FIXME: bad modularisation */ + +extern size_t UngetCount; + +static void print_enriched_string (int attr, unsigned char *s, int do_color) +{ + wchar_t wc; + size_t k; + size_t n = mutt_strlen ((char *)s); + mbstate_t mbstate; + short f1, f2, b1, b2; + + memset (&mbstate, 0, sizeof (mbstate)); + while (*s) + { + if (*s < M_TREE_MAX) + { + if (do_color) + { + pair_content(PAIR_NUMBER(ColorDefs[MT_COLOR_TREE]), &f1, &b1); + pair_content(PAIR_NUMBER(attr), &f2, &b2); + if (b1 == b2) + SETCOLOR (MT_COLOR_TREE); + } + while (*s && *s < M_TREE_MAX) + { + switch (*s) + { + case M_TREE_LLCORNER: + if (option (OPTASCIICHARS)) + addch ('`'); + else if (Charset_is_utf8) + addstr ("\342\224\224"); /* WACS_LLCORNER */ + else + addch (ACS_LLCORNER); + break; + case M_TREE_ULCORNER: + if (option (OPTASCIICHARS)) + addch (','); + else if (Charset_is_utf8) + addstr ("\342\224\214"); /* WACS_ULCORNER */ + else + addch (ACS_ULCORNER); + break; + case M_TREE_LTEE: + if (option (OPTASCIICHARS)) + addch ('|'); + else if (Charset_is_utf8) + addstr ("\342\224\234"); /* WACS_LTEE */ + else + addch (ACS_LTEE); + break; + case M_TREE_HLINE: + if (option (OPTASCIICHARS)) + addch ('-'); + else if (Charset_is_utf8) + addstr ("\342\224\200"); /* WACS_HLINE */ + else + addch (ACS_HLINE); + break; + case M_TREE_VLINE: + if (option (OPTASCIICHARS)) + addch ('|'); + else if (Charset_is_utf8) + addstr ("\342\224\202"); /* WACS_VLINE */ + else + addch (ACS_VLINE); + break; + case M_TREE_TTEE: + if (option (OPTASCIICHARS)) + addch ('-'); + else if (Charset_is_utf8) + addstr ("\342\224\254"); /* WACS_TTEE */ + else + addch (ACS_TTEE); + break; + case M_TREE_BTEE: + if (option (OPTASCIICHARS)) + addch ('-'); + else if (Charset_is_utf8) + addstr ("\342\224\264"); /* WACS_BTEE */ + else + addch (ACS_BTEE); + break; + case M_TREE_SPACE: + addch (' '); + break; + case M_TREE_RARROW: + addch ('>'); + break; + case M_TREE_STAR: + addch ('*'); /* fake thread indicator */ + break; + case M_TREE_HIDDEN: + addch ('&'); + break; + case M_TREE_EQUALS: + addch ('='); + break; + case M_TREE_MISSING: + addch ('?'); + break; + } + s++, n--; + } + if (do_color) attrset(attr); + } + else if ((k = mbrtowc (&wc, (char *)s, n, &mbstate)) > 0) + { + addnstr ((char *)s, k); + s += k, n-= k; + } + else + break; + } +} + +static void menu_make_entry (char *s, int l, MUTTMENU *menu, int i) +{ + if (menu->dialog) + { + strncpy (s, menu->dialog[i], l); + menu->current = -1; /* hide menubar */ + } + else + menu->make_entry (s, l, menu, i); +} + +void menu_pad_string (char *s, size_t n) +{ + int shift = option (OPTARROWCURSOR) ? 3 : 0; + int cols = COLS - shift; + + mutt_format_string (s, n, cols, cols, 0, ' ', s, strlen (s), 1); + s[n - 1] = 0; +} + +void menu_redraw_full (MUTTMENU *menu) +{ + SETCOLOR (MT_COLOR_NORMAL); + /* clear() doesn't optimize screen redraws */ + move (0, 0); + clrtobot (); + + if (option (OPTHELP)) + { + SETCOLOR (MT_COLOR_STATUS); + move (option (OPTSTATUSONTOP) ? LINES-2 : 0, 0); + mutt_paddstr (COLS, menu->help); + SETCOLOR (MT_COLOR_NORMAL); + menu->offset = 1; + menu->pagelen = LINES - 3; + } + else + { + menu->offset = option (OPTSTATUSONTOP) ? 1 : 0; + menu->pagelen = LINES - 2; + } + + mutt_show_error (); + + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; +} + +void menu_redraw_status (MUTTMENU *menu) +{ + char buf[STRING]; + + snprintf (buf, sizeof (buf), M_MODEFMT, menu->title); + SETCOLOR (MT_COLOR_STATUS); + move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, 0); + mutt_paddstr (COLS, buf); + SETCOLOR (MT_COLOR_NORMAL); + menu->redraw &= ~REDRAW_STATUS; +} + +void menu_redraw_index (MUTTMENU *menu) +{ + char buf[STRING]; + int i; + + for (i = menu->top; i < menu->top + menu->pagelen; i++) + { + if (i < menu->max) + { + menu_make_entry (buf, sizeof (buf), menu, i); + menu_pad_string (buf, sizeof (buf)); + + if (option (OPTARROWCURSOR)) + { + attrset (menu->color (i)); + CLEARLINE (i - menu->top + menu->offset); + + if (i == menu->current) + { + attrset (menu->color (i)); + ADDCOLOR (MT_COLOR_INDICATOR); + addstr ("->"); + attrset (menu->color (i)); + addch (' '); + } + else + move (i - menu->top + menu->offset, 3); + + print_enriched_string (menu->color(i), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + else + { + attrset (menu->color (i)); + + if (i == menu->current) + { + ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); + } + + CLEARLINE (i - menu->top + menu->offset); + print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } + } + else + CLEARLINE (i - menu->top + menu->offset); + } + menu->redraw = 0; +} + +void menu_redraw_motion (MUTTMENU *menu) +{ + char buf[STRING]; + + if (menu->dialog) + { + menu->redraw &= ~REDRAW_MOTION; + return; + } + + move (menu->oldcurrent + menu->offset - menu->top, 0); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + + if (option (OPTARROWCURSOR)) + { + /* clear the pointer */ + attrset (menu->color (menu->oldcurrent)); + addstr (" "); + + if (menu->redraw & REDRAW_MOTION_RESYNCH) + { + clrtoeol (); + menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); + menu_pad_string (buf, sizeof (buf)); + move (menu->oldcurrent + menu->offset - menu->top, 3); + print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + + /* now draw it in the new location */ + move (menu->current + menu->offset - menu->top, 0); + attrset (menu->color (menu->current)); + ADDCOLOR (MT_COLOR_INDICATOR); + addstr ("->"); + SETCOLOR (MT_COLOR_NORMAL); + } + else + { + /* erase the current indicator */ + attrset (menu->color (menu->oldcurrent)); + clrtoeol (); + menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); + menu_pad_string (buf, sizeof (buf)); + print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); + + /* now draw the new one to reflect the change */ + menu_make_entry (buf, sizeof (buf), menu, menu->current); + menu_pad_string (buf, sizeof (buf)); + attrset (menu->color (menu->current)); + ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); + CLEARLINE (menu->current - menu->top + menu->offset); + print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } + menu->redraw &= REDRAW_STATUS; +} + +void menu_redraw_current (MUTTMENU *menu) +{ + char buf[STRING]; + + move (menu->current + menu->offset - menu->top, 0); + menu_make_entry (buf, sizeof (buf), menu, menu->current); + menu_pad_string (buf, sizeof (buf)); + + if (option (OPTARROWCURSOR)) + { + int attr = menu->color (menu->current); + attrset (attr); + clrtoeol (); + attrset (menu->color (menu->current)); + ADDCOLOR (MT_COLOR_INDICATOR); + addstr ("->"); + attrset (attr); + addch (' '); + menu_pad_string (buf, sizeof (buf)); + print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + else + { + attrset (menu->color (menu->current)); + ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); + clrtoeol (); + print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } + menu->redraw &= REDRAW_STATUS; +} + +void menu_redraw_prompt (MUTTMENU *menu) +{ + if (menu->dialog) + { + if (option (OPTMSGERR)) + { + mutt_sleep (1); + unset_option (OPTMSGERR); + } + + if (*Errorbuf) + mutt_clear_error (); + + SETCOLOR (MT_COLOR_NORMAL); + mvaddstr (LINES - 1, 0, menu->prompt); + clrtoeol (); + } +} + +void menu_check_recenter (MUTTMENU *menu) +{ + if (menu->max <= menu->pagelen && menu->top != 0) + { + menu->top = 0; + set_option (OPTNEEDREDRAW); + menu->redraw |= REDRAW_INDEX; + } + else if (menu->current >= menu->top + menu->pagelen) + { + if (option (OPTMENUSCROLL) || (menu->pagelen <= 0)) + menu->top = menu->current - menu->pagelen + 1; + else + menu->top += menu->pagelen * ((menu->current - menu->top) / menu->pagelen); + menu->redraw |= REDRAW_INDEX; + } + else if (menu->current < menu->top) + { + if (option (OPTMENUSCROLL) || (menu->pagelen <= 0)) + menu->top = menu->current; + else + { + menu->top -= menu->pagelen * ((menu->top + menu->pagelen - 1 - menu->current) / menu->pagelen); + if (menu->top < 0) + menu->top = 0; + } + menu->redraw |= REDRAW_INDEX; + } +} + +void menu_jump (MUTTMENU *menu) +{ + int n; + char buf[SHORT_STRING]; + + if (menu->max) + { + mutt_ungetch (LastKey, 0); + buf[0] = 0; + if (mutt_get_field (_("Jump to: "), buf, sizeof (buf), 0) == 0 && buf[0]) + { + n = atoi (buf) - 1; + if (n >= 0 && n < menu->max) + { + menu->current = n; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("Invalid index number."); + } + } + else + mutt_error _("No entries."); +} + +void menu_next_line (MUTTMENU *menu) +{ + if (menu->max) + { + if (menu->top + 1 < menu->max) + { + menu->top++; + if (menu->current < menu->top) + menu->current++; + menu->redraw = REDRAW_INDEX; + } + else + mutt_error _("You cannot scroll down farther."); + } + else + mutt_error _("No entries."); +} + +void menu_prev_line (MUTTMENU *menu) +{ + if (menu->top > 0) + { + menu->top--; + if (menu->current >= menu->top + menu->pagelen) + menu->current--; + menu->redraw = REDRAW_INDEX; + } + else + mutt_error _("You cannot scroll up farther."); +} + +void menu_next_page (MUTTMENU *menu) +{ + if (menu->max) + { + if (menu->top + menu->pagelen < menu->max) + { + menu->top += menu->pagelen; + if (menu->current < menu->top) + menu->current = menu->top; + menu->redraw = REDRAW_INDEX; + } + else if (menu->current != menu->max - 1 && !menu->dialog) + { + menu->current = menu->max - 1; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("You are on the last page."); + } + else + mutt_error _("No entries."); +} + +void menu_prev_page (MUTTMENU *menu) +{ + if (menu->top > 0) + { + if ((menu->top -= menu->pagelen) < 0) + menu->top = 0; + if (menu->current >= menu->top + menu->pagelen) + menu->current = menu->top + menu->pagelen - 1; + menu->redraw = REDRAW_INDEX; + } + else if (menu->current && !menu->dialog) + { + menu->current = 0; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("You are on the first page."); +} + +void menu_top_page (MUTTMENU *menu) +{ + if (menu->current != menu->top) + { + menu->current = menu->top; + menu->redraw = REDRAW_MOTION; + } +} + +void menu_bottom_page (MUTTMENU *menu) +{ + if (menu->max) + { + menu->current = menu->top + menu->pagelen - 1; + if (menu->current > menu->max - 1) + menu->current = menu->max - 1; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("No entries."); +} + +void menu_middle_page (MUTTMENU *menu) +{ + int i; + + if (menu->max) + { + i = menu->top + menu->pagelen; + if (i > menu->max - 1) + i = menu->max - 1; + menu->current = menu->top + (i - menu->top) / 2; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("No entries."); +} + +void menu_first_entry (MUTTMENU *menu) +{ + if (menu->max) + { + menu->current = 0; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("No entries."); +} + +void menu_last_entry (MUTTMENU *menu) +{ + if (menu->max) + { + menu->current = menu->max - 1; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("No entries."); +} + +void menu_half_up (MUTTMENU *menu) +{ + if (menu->top > 0) + { + if ((menu->top -= menu->pagelen / 2) < 0) + menu->top = 0; + if (menu->current >= menu->top + menu->pagelen) + menu->current = menu->top + menu->pagelen - 1; + menu->redraw = REDRAW_INDEX; + } + else if (menu->current && !menu->dialog) + { + menu->current = 0; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("First entry is shown."); +} + +void menu_half_down (MUTTMENU *menu) +{ + if (menu->max) + { + if (menu->top + menu->pagelen < menu->max) + { + menu->top += menu->pagelen / 2; + if (menu->current < menu->top) + menu->current = menu->top; + menu->redraw = REDRAW_INDEX; + } + else if (menu->current != menu->max - 1 && !menu->dialog) + { + menu->current = menu->max - 1; + menu->redraw = REDRAW_INDEX; + } + else + mutt_error _("Last entry is shown."); + } + else + mutt_error _("No entries."); +} + +void menu_current_top (MUTTMENU *menu) +{ + if (menu->max) + { + menu->top = menu->current; + menu->redraw = REDRAW_INDEX; + } + else + mutt_error _("No entries."); +} + +void menu_current_middle (MUTTMENU *menu) +{ + if (menu->max) + { + menu->top = menu->current - menu->pagelen / 2; + if (menu->top < 0) + menu->top = 0; + menu->redraw = REDRAW_INDEX; + } + else + mutt_error _("No entries."); +} + +void menu_current_bottom (MUTTMENU *menu) +{ + if (menu->max) + { + menu->top = menu->current - menu->pagelen + 1; + if (menu->top < 0) + menu->top = 0; + menu->redraw = REDRAW_INDEX; + } + else + mutt_error _("No entries."); +} + +void menu_next_entry (MUTTMENU *menu) +{ + if (menu->current < menu->max - 1) + { + menu->current++; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("You are on the last entry."); +} + +void menu_prev_entry (MUTTMENU *menu) +{ + if (menu->current) + { + menu->current--; + menu->redraw = REDRAW_MOTION; + } + else + mutt_error _("You are on the first entry."); +} + +static int default_color (int i) +{ + return ColorDefs[MT_COLOR_NORMAL]; +} + +static int menu_search_generic (MUTTMENU *m, regex_t *re, int n) +{ + char buf[LONG_STRING]; + + menu_make_entry (buf, sizeof (buf), m, n); + return (regexec (re, buf, 0, NULL, 0)); +} + +MUTTMENU *mutt_new_menu (void) +{ + MUTTMENU *p = (MUTTMENU *) safe_calloc (1, sizeof (MUTTMENU)); + + p->current = 0; + p->top = 0; + p->offset = 1; + p->redraw = REDRAW_FULL; + p->pagelen = PAGELEN; + p->color = default_color; + p->search = menu_search_generic; + return (p); +} + +void mutt_menuDestroy (MUTTMENU **p) +{ + int i; + + FREE (&(*p)->searchBuf); + + if ((*p)->dialog) + { + for (i=0; i < (*p)->max; i++) + FREE (&(*p)->dialog[i]); + + FREE ((*p)->dialog); + } + + FREE (p); +} + +#define M_SEARCH_UP 1 +#define M_SEARCH_DOWN 2 + +static int menu_search (MUTTMENU *menu, int op) +{ + int r; + int searchDir; + regex_t re; + char buf[SHORT_STRING]; + + if (op != OP_SEARCH_NEXT && op != OP_SEARCH_OPPOSITE) + { + strfcpy (buf, menu->searchBuf ? menu->searchBuf : "", sizeof (buf)); + if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") : + _("Reverse search for: "), + buf, sizeof (buf), M_CLEAR) != 0 || !buf[0]) + return (-1); + mutt_str_replace (&menu->searchBuf, buf); + menu->searchDir = (op == OP_SEARCH) ? M_SEARCH_DOWN : M_SEARCH_UP; + } + else + { + if (!menu->searchBuf) + { + mutt_error _("No search pattern."); + return (-1); + } + } + + searchDir = (menu->searchDir == M_SEARCH_UP) ? -1 : 1; + if (op == OP_SEARCH_OPPOSITE) + searchDir = -searchDir; + + if ((r = REGCOMP (&re, menu->searchBuf, REG_NOSUB | mutt_which_case (menu->searchBuf))) != 0) + { + regerror (r, &re, buf, sizeof (buf)); + regfree (&re); + mutt_error ("%s", buf); + return (-1); + } + + r = menu->current + searchDir; + while (r >= 0 && r < menu->max) + { + if (menu->search (menu, &re, r) == 0) + { + regfree (&re); + return r; + } + + r += searchDir; + } + + regfree (&re); + mutt_error _("Not found."); + return (-1); +} + +static int menu_dialog_translate_op (int i) +{ + switch (i) + { + case OP_NEXT_ENTRY: + return OP_NEXT_LINE; + case OP_PREV_ENTRY: + return OP_PREV_LINE; + case OP_CURRENT_TOP: case OP_FIRST_ENTRY: + return OP_TOP_PAGE; + case OP_CURRENT_BOTTOM: case OP_LAST_ENTRY: + return OP_BOTTOM_PAGE; + case OP_CURRENT_MIDDLE: + return OP_MIDDLE_PAGE; + } + + return i; +} + +static int menu_dialog_dokey (MUTTMENU *menu, int *ip) +{ + event_t ch; + char *p; + + ch = mutt_getch (); + + if (ch.ch == -1) + { + *ip = -1; + return 0; + } + + if (ch.ch && (p = strchr (menu->keys, ch.ch))) + { + *ip = OP_MAX + (p - menu->keys + 1); + return 0; + } + else + { + mutt_ungetch (ch.op ? 0 : ch.ch, ch.op ? ch.op : 0); + return -1; + } +} + +int menu_redraw (MUTTMENU *menu) +{ + /* See if all or part of the screen needs to be updated. */ + if (menu->redraw & REDRAW_FULL) + { + menu_redraw_full (menu); + /* allow the caller to do any local configuration */ + return (OP_REDRAW); + } + + if (!menu->dialog) + menu_check_recenter (menu); + + if (menu->redraw & REDRAW_STATUS) + menu_redraw_status (menu); + if (menu->redraw & REDRAW_INDEX) + menu_redraw_index (menu); + else if (menu->redraw & (REDRAW_MOTION | REDRAW_MOTION_RESYNCH)) + menu_redraw_motion (menu); + else if (menu->redraw == REDRAW_CURRENT) + menu_redraw_current (menu); + + if (menu->dialog) + menu_redraw_prompt (menu); + + return OP_NULL; +} + +int mutt_menuLoop (MUTTMENU *menu) +{ + int i = OP_NULL; + + FOREVER + { + if (option (OPTMENUCALLER)) + { + unset_option (OPTMENUCALLER); + return OP_NULL; + } + + + mutt_curs_set (0); + +#ifdef USE_IMAP + imap_keepalive (); +#endif + + if (menu_redraw (menu) == OP_REDRAW) + return OP_REDRAW; + + menu->oldcurrent = menu->current; + + + /* move the cursor out of the way */ + move (menu->current - menu->top + menu->offset, + (option (OPTARROWCURSOR) ? 2 : COLS-1)); + + mutt_refresh (); + + /* try to catch dialog keys before ops */ + if (menu->dialog && menu_dialog_dokey (menu, &i) == 0) + return i; + + i = km_dokey (menu->menu); + if (i == OP_TAG_PREFIX || i == OP_TAG_PREFIX_COND) + { + if (menu->tagged) + { + mvaddstr (LINES - 1, 0, "Tag-"); + clrtoeol (); + i = km_dokey (menu->menu); + menu->tagprefix = 1; + CLEARLINE (LINES - 1); + } + else if (i == OP_TAG_PREFIX) + { + mutt_error _("No tagged entries."); + i = -1; + } + else /* None tagged, OP_TAG_PREFIX_COND */ + { + event_t tmp; + while(UngetCount>0) + { + tmp=mutt_getch(); + if(tmp.op==OP_END_COND)break; + } + mutt_message _("Nothing to do."); + i = -1; + } + } + else if (menu->tagged && option (OPTAUTOTAG)) + menu->tagprefix = 1; + else + menu->tagprefix = 0; + + mutt_curs_set (1); + +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + if (SigWinch) + { + mutt_resize_screen (); + menu->redraw = REDRAW_FULL; + SigWinch = 0; + clearok(stdscr,TRUE);/*force complete redraw*/ + } +#endif + + if (i == -1) + continue; + + if (!menu->dialog) + mutt_clear_error (); + + /* Convert menubar movement to scrolling */ + if (menu->dialog) + i = menu_dialog_translate_op (i); + + switch (i) + { + case OP_NEXT_ENTRY: + menu_next_entry (menu); + break; + case OP_PREV_ENTRY: + menu_prev_entry (menu); + break; + case OP_HALF_DOWN: + menu_half_down (menu); + break; + case OP_HALF_UP: + menu_half_up (menu); + break; + case OP_NEXT_PAGE: + menu_next_page (menu); + break; + case OP_PREV_PAGE: + menu_prev_page (menu); + break; + case OP_NEXT_LINE: + menu_next_line (menu); + break; + case OP_PREV_LINE: + menu_prev_line (menu); + break; + case OP_FIRST_ENTRY: + menu_first_entry (menu); + break; + case OP_LAST_ENTRY: + menu_last_entry (menu); + break; + case OP_TOP_PAGE: + menu_top_page (menu); + break; + case OP_MIDDLE_PAGE: + menu_middle_page (menu); + break; + case OP_BOTTOM_PAGE: + menu_bottom_page (menu); + break; + case OP_CURRENT_TOP: + menu_current_top (menu); + break; + case OP_CURRENT_MIDDLE: + menu_current_middle (menu); + break; + case OP_CURRENT_BOTTOM: + menu_current_bottom (menu); + break; + case OP_SEARCH: + case OP_SEARCH_REVERSE: + case OP_SEARCH_NEXT: + case OP_SEARCH_OPPOSITE: + if (menu->search && !menu->dialog) /* Searching dialogs won't work */ + { + menu->oldcurrent = menu->current; + if ((menu->current = menu_search (menu, i)) != -1) + menu->redraw = REDRAW_MOTION; + else + menu->current = menu->oldcurrent; + } + else + mutt_error _("Search is not implemented for this menu."); + break; + + case OP_JUMP: + if (menu->dialog) + mutt_error _("Jumping is not implemented for dialogs."); + else + menu_jump (menu); + break; + + case OP_ENTER_COMMAND: + CurrentMenu = menu->menu; + mutt_enter_command (); + if (option (OPTFORCEREDRAWINDEX)) + { + menu->redraw = REDRAW_FULL; + unset_option (OPTFORCEREDRAWINDEX); + unset_option (OPTFORCEREDRAWPAGER); + } + break; + + case OP_TAG: + if (menu->tag && !menu->dialog) + { + if (menu->tagprefix && !option (OPTAUTOTAG)) + { + for (i = 0; i < menu->max; i++) + menu->tagged += menu->tag (menu, i, 0); + menu->redraw = REDRAW_INDEX; + } + else if (menu->max) + { + int i = menu->tag (menu, menu->current, -1); + menu->tagged += i; + if (i && option (OPTRESOLVE) && menu->current < menu->max - 1) + { + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + } + else + mutt_error _("No entries."); + } + else + mutt_error _("Tagging is not supported."); + break; + + case OP_SHELL_ESCAPE: + mutt_shell_escape (); + MAYBE_REDRAW (menu->redraw); + break; + + case OP_WHAT_KEY: + mutt_what_key (); + break; + + case OP_REDRAW: + clearok (stdscr, TRUE); + menu->redraw = REDRAW_FULL; + break; + + case OP_HELP: + mutt_help (menu->menu); + menu->redraw = REDRAW_FULL; + break; + + case OP_NULL: + km_error_key (menu->menu); + break; + + case OP_END_COND: + break; + + default: + return (i); + } + } + /* not reached */ +} diff --git a/mh.c b/mh.c new file mode 100644 index 0000000..56265b5 --- /dev/null +++ b/mh.c @@ -0,0 +1,1845 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * This file contains routines specific to MH and ``maildir'' style + * mailboxes. + */ + +#include "mutt.h" +#include "mailbox.h" +#include "mx.h" +#include "copy.h" +#include "buffy.h" +#include "sort.h" + +#include <sys/stat.h> +#include <dirent.h> +#include <limits.h> +#include <unistd.h> +#include <fcntl.h> + +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> +#include <errno.h> +#include <string.h> +#include <utime.h> + +struct maildir +{ + HEADER *h; + char *canon_fname; + unsigned header_parsed:1; + struct maildir *next; +}; + +struct mh_sequences +{ + int max; + short *flags; +}; + +/* mh_sequences support */ + +#define MH_SEQ_UNSEEN (1 << 0) +#define MH_SEQ_REPLIED (1 << 1) +#define MH_SEQ_FLAGGED (1 << 2) + +static void mhs_alloc (struct mh_sequences *mhs, int i) +{ + int j; + int newmax; + + if (i > mhs->max || !mhs->flags) + { + newmax = i + 128; + safe_realloc (&mhs->flags, sizeof (mhs->flags[0]) * (newmax + 1)); + for (j = mhs->max + 1; j <= newmax; j++) + mhs->flags[j] = 0; + + mhs->max = newmax; + } +} + +static void mhs_free_sequences (struct mh_sequences *mhs) +{ + FREE (&mhs->flags); +} + +static short mhs_check (struct mh_sequences *mhs, int i) +{ + if (!mhs->flags || i > mhs->max) + return 0; + else + return mhs->flags[i]; +} + +static short mhs_set (struct mh_sequences *mhs, int i, short f) +{ + mhs_alloc (mhs, i); + mhs->flags[i] |= f; + return mhs->flags[i]; +} + +#if 0 + +/* unused */ + +static short mhs_unset (struct mh_sequences *mhs, int i, short f) +{ + mhs_alloc (mhs, i); + mhs->flags[i] &= ~f; + return mhs->flags[i]; +} + +#endif + +static void mh_read_token (char *t, int *first, int *last) +{ + char *p; + if ((p = strchr (t, '-'))) + { + *p++ = '\0'; + *first = atoi (t); + *last = atoi (p); + } + else + *first = *last = atoi (t); +} + +static void mh_read_sequences (struct mh_sequences *mhs, const char *path) +{ + FILE *fp; + int line = 1; + char *buff = NULL; + char *t; + size_t sz = 0; + + short f; + int first, last; + + char pathname[_POSIX_PATH_MAX]; + snprintf (pathname, sizeof (pathname), "%s/.mh_sequences", path); + + if (!(fp = fopen (pathname, "r"))) + return; + + while ((buff = mutt_read_line (buff, &sz, fp, &line))) + { + if (!(t = strtok (buff, " \t:"))) + continue; + + if (!mutt_strcmp (t, MhUnseen)) + f = MH_SEQ_UNSEEN; + else if (!mutt_strcmp (t, MhFlagged)) + f = MH_SEQ_FLAGGED; + else if (!mutt_strcmp (t, MhReplied)) + f = MH_SEQ_REPLIED; + else /* unknown sequence */ + continue; + + while ((t = strtok (NULL, " \t:"))) + { + mh_read_token (t, &first, &last); + for (; first <= last; first++) + mhs_set (mhs, first, f); + } + } + + FREE (&buff); + safe_fclose (&fp); +} + +int mh_buffy (const char *path) +{ + int i, r = 0; + struct mh_sequences mhs; + memset (&mhs, 0, sizeof (mhs)); + + mh_read_sequences (&mhs, path); + for (i = 0; !r && i <= mhs.max; i++) + if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) + r = 1; + mhs_free_sequences (&mhs); + return r; +} + +static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) +{ + int fd; + char path[_POSIX_PATH_MAX]; + + FOREVER + { + snprintf (path, _POSIX_PATH_MAX, "%s/.mutt-%s-%d-%d", + dest->path, NONULL (Hostname), (int) getpid (), Counter++); + if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1) + { + if (errno != EEXIST) + { + mutt_perror (path); + return -1; + } + } + else + { + *tgt = safe_strdup (path); + break; + } + } + + if ((*fp = fdopen (fd, "w")) == NULL) + { + FREE (tgt); + close (fd); + unlink (path); + return (-1); + } + + return 0; +} + +static void mhs_write_one_sequence (FILE * fp, struct mh_sequences *mhs, + short f, const char *tag) +{ + int i; + int first, last; + fprintf (fp, "%s:", tag); + + first = -1; + last = -1; + + for (i = 0; i <= mhs->max; i++) + { + if ((mhs_check (mhs, i) & f)) + { + if (first < 0) + first = i; + else + last = i; + } + else if (first >= 0) + { + if (last < 0) + fprintf (fp, " %d", first); + else + fprintf (fp, " %d-%d", first, last); + + first = -1; + last = -1; + } + } + + if (first >= 0) + { + if (last < 0) + fprintf (fp, " %d", first); + else + fprintf (fp, " %d-%d", first, last); + } + + fputc ('\n', fp); +} + +/* XXX - we don't currently remove deleted messages from sequences we don't know. Should we? */ + +void mh_update_sequences (CONTEXT * ctx) +{ + FILE *ofp, *nfp; + + char sequences[_POSIX_PATH_MAX]; + char *tmpfname; + char *buff = NULL; + char *p; + size_t s; + int l = 0; + int i; + + int unseen = 0; + int flagged = 0; + int replied = 0; + + char seq_unseen[STRING]; + char seq_replied[STRING]; + char seq_flagged[STRING]; + + + struct mh_sequences mhs; + memset (&mhs, 0, sizeof (mhs)); + + snprintf (seq_unseen, sizeof (seq_unseen), "%s:", NONULL (MhUnseen)); + snprintf (seq_replied, sizeof (seq_replied), "%s:", NONULL (MhReplied)); + snprintf (seq_flagged, sizeof (seq_flagged), "%s:", NONULL (MhFlagged)); + + if (mh_mkstemp (ctx, &nfp, &tmpfname) != 0) + { + /* error message? */ + return; + } + + snprintf (sequences, sizeof (sequences), "%s/.mh_sequences", ctx->path); + + + /* first, copy unknown sequences */ + if ((ofp = fopen (sequences, "r"))) + { + while ((buff = mutt_read_line (buff, &s, ofp, &l))) + { + if (!mutt_strncmp (buff, seq_unseen, mutt_strlen (seq_unseen))) + continue; + if (!mutt_strncmp (buff, seq_flagged, mutt_strlen (seq_flagged))) + continue; + if (!mutt_strncmp (buff, seq_replied, mutt_strlen (seq_replied))) + continue; + + fprintf (nfp, "%s\n", buff); + } + } + safe_fclose (&ofp); + + /* now, update our unseen, flagged, and replied sequences */ + for (l = 0; l < ctx->msgcount; l++) + { + if (ctx->hdrs[l]->deleted) + continue; + + if ((p = strrchr (ctx->hdrs[l]->path, '/'))) + p++; + else + p = ctx->hdrs[l]->path; + + i = atoi (p); + + if (!ctx->hdrs[l]->read) + { + mhs_set (&mhs, i, MH_SEQ_UNSEEN); + unseen++; + } + if (ctx->hdrs[l]->flagged) + { + mhs_set (&mhs, i, MH_SEQ_FLAGGED); + flagged++; + } + if (ctx->hdrs[l]->replied) + { + mhs_set (&mhs, i, MH_SEQ_REPLIED); + replied++; + } + } + + /* write out the new sequences */ + if (unseen) + mhs_write_one_sequence (nfp, &mhs, MH_SEQ_UNSEEN, NONULL (MhUnseen)); + if (flagged) + mhs_write_one_sequence (nfp, &mhs, MH_SEQ_FLAGGED, NONULL (MhFlagged)); + if (replied) + mhs_write_one_sequence (nfp, &mhs, MH_SEQ_REPLIED, NONULL (MhReplied)); + + mhs_free_sequences (&mhs); + + + /* try to commit the changes - no guarantee here */ + safe_fclose (&nfp); + + unlink (sequences); + if (safe_rename (tmpfname, sequences) != 0) + { + /* report an error? */ + unlink (tmpfname); + } + + FREE (&tmpfname); +} + +static void mh_sequences_add_one (CONTEXT * ctx, int n, short unseen, + short flagged, short replied) +{ + short unseen_done = 0; + short flagged_done = 0; + short replied_done = 0; + + FILE *ofp = NULL, *nfp = NULL; + + char *tmpfname; + char sequences[_POSIX_PATH_MAX]; + + char seq_unseen[STRING]; + char seq_replied[STRING]; + char seq_flagged[STRING]; + + char *buff = NULL; + int line; + size_t sz; + + if (mh_mkstemp (ctx, &nfp, &tmpfname) == -1) + return; + + snprintf (seq_unseen, sizeof (seq_unseen), "%s:", NONULL (MhUnseen)); + snprintf (seq_replied, sizeof (seq_replied), "%s:", NONULL (MhReplied)); + snprintf (seq_flagged, sizeof (seq_flagged), "%s:", NONULL (MhFlagged)); + + snprintf (sequences, sizeof (sequences), "%s/.mh_sequences", ctx->path); + if ((ofp = fopen (sequences, "r"))) + { + while ((buff = mutt_read_line (buff, &sz, ofp, &line))) + { + if (unseen && !strncmp (buff, seq_unseen, mutt_strlen (seq_unseen))) + { + fprintf (nfp, "%s %d\n", buff, n); + unseen_done = 1; + } + else if (flagged + && !strncmp (buff, seq_flagged, mutt_strlen (seq_flagged))) + { + fprintf (nfp, "%s %d\n", buff, n); + flagged_done = 1; + } + else if (replied + && !strncmp (buff, seq_replied, mutt_strlen (seq_replied))) + { + fprintf (nfp, "%s %d\n", buff, n); + replied_done = 1; + } + else + fprintf (nfp, "%s\n", buff); + } + } + safe_fclose (&ofp); + FREE (&buff); + + if (!unseen_done && unseen) + fprintf (nfp, "%s: %d\n", NONULL (MhUnseen), n); + if (!flagged_done && flagged) + fprintf (nfp, "%s: %d\n", NONULL (MhFlagged), n); + if (!replied_done && replied) + fprintf (nfp, "%s: %d\n", NONULL (MhReplied), n); + + safe_fclose (&nfp); + + unlink (sequences); + if (safe_rename (tmpfname, sequences) != 0) + unlink (tmpfname); + + FREE (&tmpfname); +} + +static void mh_update_maildir (struct maildir *md, struct mh_sequences *mhs) +{ + int i; + short f; + char *p; + + for (; md; md = md->next) + { + if ((p = strrchr (md->h->path, '/'))) + p++; + else + p = md->h->path; + + i = atoi (p); + f = mhs_check (mhs, i); + + md->h->read = (f & MH_SEQ_UNSEEN) ? 0 : 1; + md->h->flagged = (f & MH_SEQ_FLAGGED) ? 1 : 0; + md->h->replied = (f & MH_SEQ_REPLIED) ? 1 : 0; + } +} + +/* maildir support */ + +static void maildir_free_entry (struct maildir **md) +{ + if (!md || !*md) + return; + + FREE (&(*md)->canon_fname); + if ((*md)->h) + mutt_free_header (&(*md)->h); + + FREE (md); +} + +static void maildir_free_maildir (struct maildir **md) +{ + struct maildir *p, *q; + + if (!md || !*md) + return; + + for (p = *md; p; p = q) + { + q = p->next; + maildir_free_entry (&p); + } +} + +static void maildir_parse_flags (HEADER * h, const char *path) +{ + char *p, *q = NULL; + + h->flagged = 0; + h->read = 0; + h->replied = 0; + + if ((p = strrchr (path, ':')) != NULL && mutt_strncmp (p + 1, "2,", 2) == 0) + { + p += 3; + + mutt_str_replace (&h->maildir_flags, p); + q = h->maildir_flags; + + while (*p) + { + switch (*p) + { + case 'F': + + h->flagged = 1; + break; + + case 'S': /* seen */ + + h->read = 1; + break; + + case 'R': /* replied */ + + h->replied = 1; + break; + + case 'T': /* trashed */ + h->trash = 1; + h->deleted = 1; + break; + + default: + *q++ = *p; + break; + } + p++; + } + } + + if (q == h->maildir_flags) + FREE (&h->maildir_flags); + else if (q) + *q = '\0'; +} + +static void maildir_update_mtime (CONTEXT * ctx) +{ + char buf[_POSIX_PATH_MAX]; + struct stat st; + + if (ctx->magic == M_MAILDIR) + { + snprintf (buf, sizeof (buf), "%s/%s", ctx->path, "cur"); + if (stat (buf, &st) == 0) + ctx->mtime_cur = st.st_mtime; + snprintf (buf, sizeof (buf), "%s/%s", ctx->path, "new"); + } + else + { + snprintf (buf, sizeof (buf), "%s/.mh_sequences", ctx->path); + if (stat (buf, &st) == 0) + ctx->mtime_cur = st.st_mtime; + + strfcpy (buf, ctx->path, sizeof (buf)); + } + + if (stat (buf, &st) == 0) + ctx->mtime = st.st_mtime; +} + +/* + * Actually parse a maildir message. This may also be used to fill + * out a fake header structure generated by lazy maildir parsing. + */ +static HEADER *maildir_parse_message (int magic, const char *fname, + int is_old, HEADER * _h) +{ + FILE *f; + HEADER *h = _h; + struct stat st; + + if ((f = fopen (fname, "r")) != NULL) + { + if (!h) + h = mutt_new_header (); + h->env = mutt_read_rfc822_header (f, h, 0, 0); + + fstat (fileno (f), &st); + fclose (f); + + if (!h->received) + h->received = h->date_sent; + + if (h->content->length <= 0) + h->content->length = st.st_size - h->content->offset; + + h->index = -1; + + if (magic == M_MAILDIR) + { + /* + * maildir stores its flags in the filename, so ignore the + * flags in the header of the message + */ + + h->old = is_old; + maildir_parse_flags (h, fname); + } + return h; + } + return NULL; +} + +/* + * Note that this routine will _not_ modify the context given by + * ctx. + * + * It's used in the first parsing pass on maildir and MH folders. + * In the MH case, this means full parsing of the folder. In the + * maildir case, it means that we only look at flags, and create a + * fake HEADER structure, which may later be filled in by + * maildir_parse_message(), when called from + * maildir_delayed_parsing(). + * + */ + +static int maildir_parse_entry (CONTEXT * ctx, struct maildir ***last, + const char *subdir, const char *fname, + int *count, int is_old) +{ + struct maildir *entry; + HEADER *h = NULL; + char buf[_POSIX_PATH_MAX]; + + if (subdir) + snprintf (buf, sizeof (buf), "%s/%s/%s", ctx->path, subdir, fname); + else + snprintf (buf, sizeof (buf), "%s/%s", ctx->path, fname); + + if (ctx->magic == M_MH) + h = maildir_parse_message (ctx->magic, buf, is_old, NULL); + else + { + h = mutt_new_header (); + h->old = is_old; + maildir_parse_flags (h, buf); + } + + if (h != NULL) + { + if (count) + { + (*count)++; + if (!ctx->quiet && ReadInc && ((*count % ReadInc) == 0 || *count == 1)) + mutt_message (_("Reading %s... %d"), ctx->path, *count); + } + + if (subdir) + { + snprintf (buf, sizeof (buf), "%s/%s", subdir, fname); + h->path = safe_strdup (buf); + } + else + h->path = safe_strdup (fname); + + entry = safe_calloc (sizeof (struct maildir), 1); + entry->h = h; + entry->header_parsed = (ctx->magic == M_MH); + **last = entry; + *last = &entry->next; + + return 0; + } + + return -1; +} + + + +/* Ignore the garbage files. A valid MH message consists of only + * digits. Deleted message get moved to a filename with a comma before + * it. + */ + +int mh_valid_message (const char *s) +{ + for (; *s; s++) + { + if (!isdigit ((unsigned char) *s)) + return 0; + } + return 1; +} + +static int maildir_parse_dir (CONTEXT * ctx, struct maildir ***last, + const char *subdir, int *count) +{ + DIR *dirp; + struct dirent *de; + char buf[_POSIX_PATH_MAX]; + int is_old = 0; + + if (subdir) + { + snprintf (buf, sizeof (buf), "%s/%s", ctx->path, subdir); + is_old = (mutt_strcmp ("cur", subdir) == 0); + } + else + strfcpy (buf, ctx->path, sizeof (buf)); + + if ((dirp = opendir (buf)) == NULL) + return -1; + + while ((de = readdir (dirp)) != NULL) + { + + if ((ctx->magic == M_MH && !mh_valid_message (de->d_name)) + || (ctx->magic == M_MAILDIR && *de->d_name == '.')) + continue; + + /* FOO - really ignore the return value? */ + + dprint (2, + (debugfile, "%s:%d: parsing %s\n", __FILE__, __LINE__, + de->d_name)); + maildir_parse_entry (ctx, last, subdir, de->d_name, count, is_old); + } + + closedir (dirp); + return 0; +} + +static int maildir_add_to_context (CONTEXT * ctx, struct maildir *md) +{ + int oldmsgcount = ctx->msgcount; + + while (md) + { + + dprint (2, (debugfile, "%s:%d maildir_add_to_context(): Considering %s\n", + __FILE__, __LINE__, NONULL (md->canon_fname))); + + if (md->h) + { + dprint (2, + (debugfile, + "%s:%d Adding header structure. Flags: %s%s%s%s%s\n", __FILE__, + __LINE__, md->h->flagged ? "f" : "", md->h->deleted ? "D" : "", + md->h->replied ? "r" : "", md->h->old ? "O" : "", + md->h->read ? "R" : "")); + if (ctx->msgcount == ctx->hdrmax) + mx_alloc_memory (ctx); + + ctx->hdrs[ctx->msgcount] = md->h; + ctx->hdrs[ctx->msgcount]->index = ctx->msgcount; + ctx->size += + md->h->content->length + md->h->content->offset - + md->h->content->hdr_offset; + + md->h = NULL; + ctx->msgcount++; + } + md = md->next; + } + + if (ctx->msgcount > oldmsgcount) + { + mx_update_context (ctx, ctx->msgcount - oldmsgcount); + return 1; + } + return 0; +} + +static int maildir_move_to_context (CONTEXT * ctx, struct maildir **md) +{ + int r; + r = maildir_add_to_context (ctx, *md); + maildir_free_maildir (md); + return r; +} + + +/* + * This function does the second parsing pass for a maildir-style + * folder. + */ + +void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) +{ + struct maildir *p; + char fn[_POSIX_PATH_MAX]; + + for (p = md; p; p = p->next) + if (p && p->h && !p->header_parsed) + { + snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path); + if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h)) + p->header_parsed = 1; + else + mutt_free_header (&p->h); + } +} + + + +/* Read a MH/maildir style mailbox. + * + * args: + * ctx [IN/OUT] context for this mailbox + * subdir [IN] NULL for MH mailboxes, otherwise the subdir of the + * maildir mailbox to read from + */ +int mh_read_dir (CONTEXT * ctx, const char *subdir) +{ + struct maildir *md; + struct mh_sequences mhs; + struct maildir **last; + int count; + + + memset (&mhs, 0, sizeof (mhs)); + + maildir_update_mtime (ctx); + + md = NULL; + last = &md; + count = 0; + if (maildir_parse_dir (ctx, &last, subdir, &count) == -1) + return -1; + + if (ctx->magic == M_MH) + { + mh_read_sequences (&mhs, ctx->path); + mh_update_maildir (md, &mhs); + mhs_free_sequences (&mhs); + } + + if (ctx->magic == M_MAILDIR) + maildir_delayed_parsing (ctx, md); + + maildir_move_to_context (ctx, &md); + return 0; +} + +/* read a maildir style mailbox */ +int maildir_read_dir (CONTEXT * ctx) +{ + /* maildir looks sort of like MH, except that there are two subdirectories + * of the main folder path from which to read messages + */ + if (mh_read_dir (ctx, "new") == -1 || mh_read_dir (ctx, "cur") == -1) + return (-1); + + return 0; +} + +/* + * Open a new (temporary) message in an MH folder. + */ + +int mh_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr) +{ + return mh_mkstemp (dest, &msg->fp, &msg->path); +} + +int ch_compar (const void *a, const void *b) +{ + return (int)( *((const char *) a) - *((const char *) b)); +} + +static void maildir_flags (char *dest, size_t destlen, HEADER * hdr) +{ + *dest = '\0'; + + /* + * The maildir specification requires that all files in the cur + * subdirectory have the :unique string appeneded, regardless of whether + * or not there are any flags. If .old is set, we know that this message + * will end up in the cur directory, so we include it in the following + * test even though there is no associated flag. + */ + + if (hdr && (hdr->flagged || hdr->replied || hdr->read || hdr->deleted || hdr->old || hdr->maildir_flags)) + { + char tmp[LONG_STRING]; + snprintf (tmp, sizeof (tmp), + "%s%s%s%s%s", + hdr->flagged ? "F" : "", + hdr->replied ? "R" : "", + hdr->read ? "S" : "", hdr->deleted ? "T" : "", + NONULL(hdr->maildir_flags)); + if (hdr->maildir_flags) + qsort (tmp, strlen (tmp), 1, ch_compar); + snprintf (dest, destlen, ":2,%s", tmp); + } +} + + +/* + * Open a new (temporary) message in a maildir folder. + * + * Note that this uses _almost_ the maildir file name format, but + * with a {cur,new} prefix. + * + */ + +int maildir_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr) +{ + int fd; + char path[_POSIX_PATH_MAX]; + char suffix[16]; + char subdir[16]; + + if (hdr) + { + short deleted = hdr->deleted; + hdr->deleted = 0; + + maildir_flags (suffix, sizeof (suffix), hdr); + + hdr->deleted = deleted; + } + else + *suffix = '\0'; + + if (hdr && (hdr->read || hdr->old)) + strfcpy (subdir, "cur", sizeof (subdir)); + else + strfcpy (subdir, "new", sizeof (subdir)); + + FOREVER + { + snprintf (path, _POSIX_PATH_MAX, "%s/tmp/%s.%ld.%d_%d.%s%s", + dest->path, subdir, time (NULL), getpid (), Counter++, + NONULL (Hostname), suffix); + + dprint (2, (debugfile, "maildir_open_new_message (): Trying %s.\n", + path)); + + if ((fd = open (path, O_WRONLY | O_EXCL | O_CREAT, 0600)) == -1) + { + if (errno != EEXIST) + { + mutt_perror (path); + return -1; + } + } + else + { + dprint (2, (debugfile, "maildir_open_new_message (): Success.\n")); + msg->path = safe_strdup (path); + break; + } + } + + if ((msg->fp = fdopen (fd, "w")) == NULL) + { + FREE (&msg->path); + close (fd); + unlink (path); + return (-1); + } + + return 0; +} + + + +/* + * Commit a message to a maildir folder. + * + * msg->path contains the file name of a file in tmp/. We take the + * flags from this file's name. + * + * ctx is the mail folder we commit to. + * + * hdr is a header structure to which we write the message's new + * file name. This is used in the mh and maildir folder synch + * routines. When this routine is invoked from mx_commit_message, + * hdr is NULL. + * + * msg->path looks like this: + * + * tmp/{cur,new}.mutt-HOSTNAME-PID-COUNTER:flags + * + * See also maildir_open_new_message(). + * + */ + +int maildir_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) +{ + char subdir[4]; + char suffix[16]; + char path[_POSIX_PATH_MAX]; + char full[_POSIX_PATH_MAX]; + char *s; + + if (safe_fclose (&msg->fp) != 0) + return -1; + + /* extract the subdir */ + s = strrchr (msg->path, '/') + 1; + strfcpy (subdir, s, 4); + + /* extract the flags */ + if ((s = strchr (s, ':'))) + strfcpy (suffix, s, sizeof (suffix)); + else + suffix[0] = '\0'; + + /* construct a new file name. */ + FOREVER + { + snprintf (path, _POSIX_PATH_MAX, "%s/%ld.%d_%d.%s%s", subdir, + time (NULL), getpid (), Counter++, NONULL (Hostname), suffix); + snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path); + + dprint (2, (debugfile, "maildir_commit_message (): renaming %s to %s.\n", + msg->path, full)); + + if (safe_rename (msg->path, full) == 0) + { + if (hdr) + mutt_str_replace (&hdr->path, path); + FREE (&msg->path); + + /* + * Adjust the mtime on the file to match the time at which this + * message was received. Currently this is only set when copying + * messages between mailboxes, so we test to ensure that it is + * actually set. + */ + if (msg->received) + { + struct utimbuf ut; + + ut.actime = msg->received; + ut.modtime = msg->received; + if (utime (full, &ut)) + { + mutt_perror (_("maildir_commit_message(): unable to set time on file")); + return -1; + } + } + + return 0; + } + else if (errno != EEXIST) + { + mutt_perror (ctx->path); + return -1; + } + } +} + +/* + * commit a message to an MH folder. + * + */ + + +static int _mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr, + short updseq) +{ + DIR *dirp; + struct dirent *de; + char *cp, *dep; + unsigned int n, hi = 0; + char path[_POSIX_PATH_MAX]; + char tmp[16]; + + if (safe_fclose (&msg->fp) != 0) + return -1; + + if ((dirp = opendir (ctx->path)) == NULL) + { + mutt_perror (ctx->path); + return (-1); + } + + /* figure out what the next message number is */ + while ((de = readdir (dirp)) != NULL) + { + dep = de->d_name; + if (*dep == ',') + dep++; + cp = dep; + while (*cp) + { + if (!isdigit ((unsigned char) *cp)) + break; + cp++; + } + if (!*cp) + { + n = atoi (dep); + if (n > hi) + hi = n; + } + } + closedir (dirp); + + /* + * Now try to rename the file to the proper name. + * + * Note: We may have to try multiple times, until we find a free + * slot. + */ + + FOREVER + { + hi++; + snprintf (tmp, sizeof (tmp), "%d", hi); + snprintf (path, sizeof (path), "%s/%s", ctx->path, tmp); + if (safe_rename (msg->path, path) == 0) + { + if (hdr) + mutt_str_replace (&hdr->path, tmp); + FREE (&msg->path); + break; + } + else if (errno != EEXIST) + { + mutt_perror (ctx->path); + return -1; + } + } + if (updseq) + mh_sequences_add_one (ctx, hi, !msg->flags.read, msg->flags.flagged, + msg->flags.replied); + return 0; +} + +int mh_commit_message (CONTEXT * ctx, MESSAGE * msg, HEADER * hdr) +{ + return _mh_commit_message (ctx, msg, hdr, 1); +} + + +/* Sync a message in an MH folder. + * + * This code is also used for attachment deletion in maildir + * folders. + */ + +static int mh_rewrite_message (CONTEXT * ctx, int msgno) +{ + HEADER *h = ctx->hdrs[msgno]; + MESSAGE *dest; + + int rc; + short restore = 1; + char oldpath[_POSIX_PATH_MAX]; + char newpath[_POSIX_PATH_MAX]; + char partpath[_POSIX_PATH_MAX]; + + long old_body_offset = h->content->offset; + long old_body_length = h->content->length; + long old_hdr_lines = h->lines; + + if ((dest = mx_open_new_message (ctx, h, 0)) == NULL) + return -1; + + if ((rc = mutt_copy_message (dest->fp, ctx, h, + M_CM_UPDATE, CH_UPDATE | CH_UPDATE_LEN)) == 0) + { + snprintf (oldpath, _POSIX_PATH_MAX, "%s/%s", ctx->path, h->path); + strfcpy (partpath, h->path, _POSIX_PATH_MAX); + + if (ctx->magic == M_MAILDIR) + rc = maildir_commit_message (ctx, dest, h); + else + rc = _mh_commit_message (ctx, dest, h, 0); + + mx_close_message (&dest); + + if (rc == 0) + { + unlink (oldpath); + restore = 0; + } + + /* + * Try to move the new message to the old place. + * (MH only.) + * + * This is important when we are just updating flags. + * + * Note that there is a race condition against programs which + * use the first free slot instead of the maximum message + * number. Mutt does _not_ behave like this. + * + * Anyway, if this fails, the message is in the folder, so + * all what happens is that a concurrently runnung mutt will + * lose flag modifications. + */ + + if (ctx->magic == M_MH && rc == 0) + { + snprintf (newpath, _POSIX_PATH_MAX, "%s/%s", ctx->path, h->path); + if ((rc = safe_rename (newpath, oldpath)) == 0) + mutt_str_replace (&h->path, partpath); + } + } + else + mx_close_message (&dest); + + if (rc == -1 && restore) + { + h->content->offset = old_body_offset; + h->content->length = old_body_length; + h->lines = old_hdr_lines; + } + + mutt_free_body (&h->content->parts); + return rc; +} + +static int mh_sync_message (CONTEXT * ctx, int msgno) +{ + HEADER *h = ctx->hdrs[msgno]; + + if (h->attach_del) + if (mh_rewrite_message (ctx, msgno) != 0) + return -1; + + return 0; +} + +static int maildir_sync_message (CONTEXT * ctx, int msgno) +{ + HEADER *h = ctx->hdrs[msgno]; + + if (h->attach_del) + { + /* when doing attachment deletion, fall back to the MH case. */ + if (mh_rewrite_message (ctx, msgno) != 0) + return (-1); + } + else + { + /* we just have to rename the file. */ + + char newpath[_POSIX_PATH_MAX]; + char partpath[_POSIX_PATH_MAX]; + char fullpath[_POSIX_PATH_MAX]; + char oldpath[_POSIX_PATH_MAX]; + char suffix[16]; + char *p; + + if ((p = strrchr (h->path, '/')) == NULL) + { + dprint (1, + (debugfile, + "maildir_sync_message: %s: unable to find subdir!\n", + h->path)); + return (-1); + } + p++; + strfcpy (newpath, p, sizeof (newpath)); + + /* kill the previous flags */ + if ((p = strchr (newpath, ':')) != NULL) + *p = 0; + + maildir_flags (suffix, sizeof (suffix), h); + + snprintf (partpath, sizeof (partpath), "%s/%s%s", + (h->read || h->old) ? "cur" : "new", newpath, suffix); + snprintf (fullpath, sizeof (fullpath), "%s/%s", ctx->path, partpath); + snprintf (oldpath, sizeof (oldpath), "%s/%s", ctx->path, h->path); + + if (mutt_strcmp (fullpath, oldpath) == 0) + { + /* message hasn't really changed */ + return 0; + } + + /* record that the message is possibly marked as trashed on disk */ + h->trash = h->deleted; + + if (rename (oldpath, fullpath) != 0) + { + mutt_perror ("rename"); + return (-1); + } + mutt_str_replace (&h->path, partpath); + } + return (0); +} + +int mh_sync_mailbox (CONTEXT * ctx, int *index_hint) +{ + char path[_POSIX_PATH_MAX], tmp[_POSIX_PATH_MAX]; + int i, j; + + if (ctx->magic == M_MH) + i = mh_check_mailbox (ctx, index_hint); + else + i = maildir_check_mailbox (ctx, index_hint); + + if (i != 0) + return i; + + for (i = 0; i < ctx->msgcount; i++) + { + if (ctx->hdrs[i]->deleted + && (ctx->magic != M_MAILDIR || !option (OPTMAILDIRTRASH))) + { + snprintf (path, sizeof (path), "%s/%s", ctx->path, ctx->hdrs[i]->path); + if (ctx->magic == M_MAILDIR + || (option (OPTMHPURGE) && ctx->magic == M_MH)) + unlink (path); + else if (ctx->magic == M_MH) + { + /* MH just moves files out of the way when you delete them */ + if (*ctx->hdrs[i]->path != ',') + { + snprintf (tmp, sizeof (tmp), "%s/,%s", ctx->path, + ctx->hdrs[i]->path); + unlink (tmp); + rename (path, tmp); + } + + } + } + else if (ctx->hdrs[i]->changed || ctx->hdrs[i]->attach_del || + (ctx->magic == M_MAILDIR + && (option (OPTMAILDIRTRASH) || ctx->hdrs[i]->trash) + && (ctx->hdrs[i]->deleted != ctx->hdrs[i]->trash))) + { + if (ctx->magic == M_MAILDIR) + { + if (maildir_sync_message (ctx, i) == -1) + return -1; + } + else + { + if (mh_sync_message (ctx, i) == -1) + return -1; + } + } + } + + if (ctx->magic == M_MH) + mh_update_sequences (ctx); + + /* XXX race condition? */ + + maildir_update_mtime (ctx); + + /* adjust indices */ + + if (ctx->deleted) + { + for (i = 0, j = 0; i < ctx->msgcount; i++) + { + if (!ctx->hdrs[i]->deleted + || (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH))) + ctx->hdrs[i]->index = j++; + } + } + + return 0; +} + +static char *maildir_canon_filename (char *dest, const char *src, size_t l) +{ + char *t, *u; + + if ((t = strrchr (src, '/'))) + src = t + 1; + + strfcpy (dest, src, l); + if ((u = strrchr (dest, ':'))) + *u = '\0'; + + return dest; +} + +static void maildir_update_tables (CONTEXT *ctx, int *index_hint) +{ + short old_sort; + int old_count; + int i, j; + + if (Sort != SORT_ORDER) + { + old_sort = Sort; + Sort = SORT_ORDER; + mutt_sort_headers (ctx, 1); + Sort = old_sort; + } + + old_count = ctx->msgcount; + for (i = 0, j = 0; i < old_count; i++) + { + if (ctx->hdrs[i]->active && index_hint && *index_hint == i) + *index_hint = j; + + if (ctx->hdrs[i]->active) + ctx->hdrs[i]->index = j++; + } + + mx_update_tables (ctx, 0); + mutt_clear_threads (ctx); +} + +static void maildir_update_flags (CONTEXT *ctx, HEADER *o, HEADER *n) +{ + /* save the global state here so we can reset it at the + * end of list block if required. + */ + int context_changed = ctx->changed; + + /* user didn't modify this message. alter the flags to + * match the current state on disk. This may not actually + * do anything, but we can't tell right now. mutt_set_flag() + * will just ignore the call if the status bits are + * already properly set. + */ + mutt_set_flag (ctx, o, M_FLAG, n->flagged); + mutt_set_flag (ctx, o, M_REPLIED, n->replied); + mutt_set_flag (ctx, o, M_READ, n->read); + mutt_set_flag (ctx, o, M_OLD, n->old); + + /* mutt_set_flag() will set this, but we don't need to + * sync the changes we made because we just updated the + * context to match the current on-disk state of the + * message. + */ + o->changed = 0; + + /* if the mailbox was not modified before we made these + * changes, unset the changed flag since nothing needs to + * be synchronized. + */ + if (!context_changed) + ctx->changed = 0; +} + + +/* This function handles arrival of new mail and reopening of + * maildir folders. The basic idea here is we check to see if either + * the new or cur subdirectories have changed, and if so, we scan them + * for the list of files. We check for newly added messages, and + * then merge the flags messages we already knew about. We don't treat + * either subdirectory differently, as mail could be copied directly into + * the cur directory from another agent. + */ +int maildir_check_mailbox (CONTEXT * ctx, int *index_hint) +{ + struct stat st_new; /* status of the "new" subdirectory */ + struct stat st_cur; /* status of the "cur" subdirectory */ + char buf[_POSIX_PATH_MAX]; + int changed = 0; /* bitmask representing which subdirectories + have changed. 0x1 = new, 0x2 = cur */ + int occult = 0; /* messages were removed from the mailbox */ + int have_new = 0; /* messages were added to the mailbox */ + struct maildir *md; /* list of messages in the mailbox */ + struct maildir **last, *p; + int i; + HASH *fnames; /* hash table for quickly looking up the base filename + for a maildir message */ + + /* XXX seems like this check belongs in mx_check_mailbox() + * rather than here. + */ + if (!option (OPTCHECKNEW)) + return 0; + + snprintf (buf, sizeof (buf), "%s/new", ctx->path); + if (stat (buf, &st_new) == -1) + return -1; + + snprintf (buf, sizeof (buf), "%s/cur", ctx->path); + if (stat (buf, &st_cur) == -1) + return -1; + + /* determine which subdirectories need to be scanned */ + if (st_new.st_mtime > ctx->mtime) + changed = 1; + if (st_cur.st_mtime > ctx->mtime_cur) + changed |= 2; + + if (!changed) + return 0; /* nothing to do */ + + /* update the modification times on the mailbox */ + ctx->mtime_cur = st_cur.st_mtime; + ctx->mtime = st_new.st_mtime; + + /* do a fast scan of just the filenames in + * the subdirectories that have changed. + */ + md = NULL; + last = &md; + if (changed & 1) + maildir_parse_dir (ctx, &last, "new", NULL); + if (changed & 2) + maildir_parse_dir (ctx, &last, "cur", NULL); + + /* we create a hash table keyed off the canonical (sans flags) filename + * of each message we scanned. This is used in the loop over the + * existing messages below to do some correlation. + */ + fnames = hash_create (1031); + + for (p = md; p; p = p->next) + { + maildir_canon_filename (buf, p->h->path, sizeof (buf)); + p->canon_fname = safe_strdup (buf); + hash_insert (fnames, p->canon_fname, p, 0); + } + + /* check for modifications and adjust flags */ + for (i = 0; i < ctx->msgcount; i++) + { + ctx->hdrs[i]->active = 0; + maildir_canon_filename (buf, ctx->hdrs[i]->path, sizeof (buf)); + p = hash_find (fnames, buf); + if (p && p->h) + { + /* message already exists, merge flags */ + ctx->hdrs[i]->active = 1; + + /* check to see if the message has moved to a different + * subdirectory. If so, update the associated filename. + */ + if (mutt_strcmp (ctx->hdrs[i]->path, p->h->path)) + mutt_str_replace (&ctx->hdrs[i]->path, p->h->path); + + /* if the user hasn't modified the flags on this message, update + * the flags we just detected. + */ + if (!ctx->hdrs[i]->changed) + maildir_update_flags (ctx, ctx->hdrs[i], p->h); + + if (ctx->hdrs[i]->deleted == ctx->hdrs[i]->trash) + ctx->hdrs[i]->deleted = p->h->deleted; + ctx->hdrs[i]->trash = p->h->trash; + + /* this is a duplicate of an existing header, so remove it */ + mutt_free_header (&p->h); + } + /* This message was not in the list of messages we just scanned. + * Check to see if we have enough information to know if the + * message has disappeared out from underneath us. + */ + else if (((changed & 1) && (!strncmp (ctx->hdrs[i]->path, "new/", 4))) || + ((changed & 2) && (!strncmp (ctx->hdrs[i]->path, "cur/", 4)))) + { + /* This message disappeared, so we need to simulate a "reopen" + * event. We know it disappeared because we just scanned the + * subdirectory it used to reside in. + */ + occult = 1; + } + else + { + /* This message resides in a subdirectory which was not + * modified, so we assume that it is still present and + * unchanged. + */ + ctx->hdrs[i]->active = 1; + } + } + + /* destroy the file name hash */ + hash_destroy (&fnames, NULL); + + /* If we didn't just get new mail, update the tables. */ + if (occult) + maildir_update_tables (ctx, index_hint); + + /* do any delayed parsing we need to do. */ + maildir_delayed_parsing (ctx, md); + + /* Incorporate new messages */ + have_new = maildir_move_to_context (ctx, &md); + + return occult ? M_REOPENED : (have_new ? M_NEW_MAIL : 0); +} + +/* + * This function handles arrival of new mail and reopening of + * mh/maildir folders. Things are getting rather complex because we + * don't have a well-defined "mailbox order", so the tricks from + * mbox.c and mx.c won't work here. + * + * Don't change this code unless you _really_ understand what + * happens. + * + */ + +int mh_check_mailbox (CONTEXT * ctx, int *index_hint) +{ + char buf[_POSIX_PATH_MAX]; + struct stat st, st_cur; + short modified = 0, have_new = 0, occult = 0; + struct maildir *md, *p; + struct maildir **last = NULL; + struct mh_sequences mhs; + HASH *fnames; + int i; + + if (!option (OPTCHECKNEW)) + return 0; + + strfcpy (buf, ctx->path, sizeof (buf)); + if (stat (buf, &st) == -1) + return -1; + + /* create .mh_sequences when there isn't one. */ + snprintf (buf, sizeof (buf), "%s/.mh_sequences", ctx->path); + if ((i = stat (buf, &st_cur) == -1) && errno == ENOENT) + { + char *tmp; + FILE *fp = NULL; + + if (mh_mkstemp (ctx, &fp, &tmp) == 0) + { + safe_fclose (&fp); + if (safe_rename (tmp, buf) == -1) + unlink (tmp); + FREE (&tmp); + } + } + + if (i == -1 && stat (buf, &st_cur) == -1) + modified = 1; + + if (st.st_mtime > ctx->mtime || st_cur.st_mtime > ctx->mtime_cur) + modified = 1; + + if (!modified) + return 0; + + ctx->mtime_cur = st_cur.st_mtime; + ctx->mtime = st.st_mtime; + + memset (&mhs, 0, sizeof (mhs)); + + md = NULL; + last = &md; + maildir_parse_dir (ctx, &last, NULL, NULL); + mh_read_sequences (&mhs, ctx->path); + mh_update_maildir (md, &mhs); + mhs_free_sequences (&mhs); + + /* check for modifications and adjust flags */ + fnames = hash_create (1031); + + for (p = md; p; p = p->next) + hash_insert (fnames, p->h->path, p, 0); + + for (i = 0; i < ctx->msgcount; i++) + { + ctx->hdrs[i]->active = 0; + + if ((p = hash_find (fnames, ctx->hdrs[i]->path)) && p->h && + (mbox_strict_cmp_headers (ctx->hdrs[i], p->h))) + { + ctx->hdrs[i]->active = 1; + /* found the right message */ + if (!ctx->hdrs[i]->changed) + maildir_update_flags (ctx, ctx->hdrs[i], p->h); + + mutt_free_header (&p->h); + } + else /* message has disappeared */ + occult = 1; + } + + /* destroy the file name hash */ + + hash_destroy (&fnames, NULL); + + /* If we didn't just get new mail, update the tables. */ + if (occult) + maildir_update_tables (ctx, index_hint); + + /* Incorporate new messages */ + have_new = maildir_move_to_context (ctx, &md); + + return occult ? M_REOPENED : (have_new ? M_NEW_MAIL : 0); +} + + + + +/* + * These functions try to find a message in a maildir folder when it + * has moved under our feet. Note that this code is rather expensive, but + * then again, it's called rarely. + */ + +FILE *_maildir_open_find_message (const char *folder, const char *unique, + const char *subfolder) +{ + char dir[_POSIX_PATH_MAX]; + char tunique[_POSIX_PATH_MAX]; + char fname[_POSIX_PATH_MAX]; + + DIR *dp; + struct dirent *de; + + FILE *fp = NULL; + int oe = ENOENT; + + snprintf (dir, sizeof (dir), "%s/%s", folder, subfolder); + + if ((dp = opendir (dir)) == NULL) + { + errno = ENOENT; + return NULL; + } + + while ((de = readdir (dp))) + { + maildir_canon_filename (tunique, de->d_name, sizeof (tunique)); + + if (!mutt_strcmp (tunique, unique)) + { + snprintf (fname, sizeof (fname), "%s/%s/%s", folder, subfolder, + de->d_name); + fp = fopen (fname, "r"); /* __FOPEN_CHECKED__ */ + oe = errno; + break; + } + } + + closedir (dp); + + errno = oe; + return fp; +} + +FILE *maildir_open_find_message (const char *folder, const char *msg) +{ + char unique[_POSIX_PATH_MAX]; + FILE *fp; + + static unsigned int new_hits = 0, cur_hits = 0; /* simple dynamic optimization */ + + maildir_canon_filename (unique, msg, sizeof (unique)); + + if ( + (fp = + _maildir_open_find_message (folder, unique, + new_hits > cur_hits ? "new" : "cur")) + || errno != ENOENT) + { + if (new_hits < UINT_MAX && cur_hits < UINT_MAX) + { + new_hits += (new_hits > cur_hits ? 1 : 0); + cur_hits += (new_hits > cur_hits ? 0 : 1); + } + + return fp; + } + if ( + (fp = + _maildir_open_find_message (folder, unique, + new_hits > cur_hits ? "cur" : "new")) + || errno != ENOENT) + { + if (new_hits < UINT_MAX && cur_hits < UINT_MAX) + { + new_hits += (new_hits > cur_hits ? 0 : 1); + cur_hits += (new_hits > cur_hits ? 1 : 0); + } + + return fp; + } + + return NULL; +} + + +/* + * Returns: + * 1 if there are no messages in the mailbox + * 0 if there are messages in the mailbox + * -1 on error + */ +int maildir_check_empty (const char *path) +{ + DIR *dp; + struct dirent *de; + int r = 1; /* assume empty until we find a message */ + char realpath[_POSIX_PATH_MAX]; + int iter = 0; + + /* Strategy here is to look for any file not beginning with a period */ + + do { + /* we do "cur" on the first iteration since its more likely that we'll + * find old messages without having to scan both subdirs + */ + snprintf (realpath, sizeof (realpath), "%s/%s", path, + iter == 0 ? "cur" : "new"); + if ((dp = opendir (realpath)) == NULL) + return -1; + while ((de = readdir (dp))) + { + if (*de->d_name != '.') + { + r = 0; + break; + } + } + closedir (dp); + iter++; + } while (r && iter < 2); + + return r; +} + +/* + * Returns: + * 1 if there are no messages in the mailbox + * 0 if there are messages in the mailbox + * -1 on error + */ +int mh_check_empty (const char *path) +{ + DIR *dp; + struct dirent *de; + int r = 1; /* assume empty until we find a message */ + + if ((dp = opendir (path)) == NULL) + return -1; + while ((de = readdir (dp))) + { + if (mh_valid_message (de->d_name)) + { + r = 0; + break; + } + } + closedir (dp); + + return r; +} diff --git a/mime.h b/mime.h new file mode 100644 index 0000000..ebef53e --- /dev/null +++ b/mime.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* Content-Type */ +enum +{ + TYPEOTHER, + TYPEAUDIO, + TYPEAPPLICATION, + TYPEIMAGE, + TYPEMESSAGE, + TYPEMODEL, + TYPEMULTIPART, + TYPETEXT, + TYPEVIDEO +}; + +/* Content-Transfer-Encoding */ +enum +{ + ENCOTHER, + ENC7BIT, + ENC8BIT, + ENCQUOTEDPRINTABLE, + ENCBASE64, + ENCBINARY, + ENCUUENCODED +}; + +/* Content-Disposition values */ +enum +{ + DISPINLINE, + DISPATTACH, + DISPFORMDATA +}; + +/* MIME encoding/decoding global vars */ + +#ifndef _SENDLIB_C +extern int Index_hex[]; +extern int Index_64[]; +extern char B64Chars[]; +#endif + +#define hexval(c) Index_hex[(unsigned int)(c)] +#define base64val(c) Index_64[(unsigned int)(c)] + +#define is_multipart(x) \ + ((x)->type == TYPEMULTIPART \ + || ((x)->type == TYPEMESSAGE && (!strcasecmp((x)->subtype, "rfc822") \ + || !strcasecmp((x)->subtype, "news")))) + +extern const char *BodyTypes[]; +extern const char *BodyEncodings[]; + +#define TYPE(X) ((X->type == TYPEOTHER) && (X->xtype != NULL) ? X->xtype : BodyTypes[(X->type)]) +#define ENCODING(X) BodyEncodings[(X)] + +/* other MIME-related global variables */ +#ifndef _SENDLIB_C +extern char MimeSpecials[]; +#endif diff --git a/mime.types b/mime.types new file mode 100644 index 0000000..23640f6 --- /dev/null +++ b/mime.types @@ -0,0 +1,83 @@ +# $Id: mime.types,v 3.0 2002/01/24 12:10:50 roessler Exp $ + +# +# sample mime.types +# + +application/andrew-inset ez +application/excel xls +application/octet-stream bin +application/oda oda +application/pdf pdf +application/pgp pgp +application/postscript ps PS eps +application/rtf rtf +application/x-arj-compressed arj +application/x-bcpio bcpio +application/x-chess-pgn pgn +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb +application/x-msdos-program com exe bat +application/x-dvi dvi +application/x-gtar gtar +application/x-gunzip gz +application/x-hdf hdf +application/x-latex latex +application/x-mif mif +application/x-netcdf cdf nc +application/x-perl pl pm +application/x-rar-compressed rar +application/x-sh sh +application/x-shar shar +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-tar tar +application/x-tar-gz tgz tar.gz +application/x-tcl tcl +application/x-tex tex +application/x-texinfo texi texinfo +application/x-troff t tr roff +application/x-troff-man man +application/x-troff-me me +application/x-troff-ms ms +application/x-ustar ustar +application/x-wais-source src +application/x-zip-compressed zip + +audio/basic snd +audio/midi mid midi +audio/ulaw au +audio/x-aiff aif aifc aiff +audio/x-wav wav + +image/gif gif +image/ief ief +image/jpeg jpe jpeg jpg +image/png png +image/tiff tif tiff +image/x-cmu-raster ras +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd + +text/html html htm +text/plain asc txt +text/richtext rtx +text/tab-separated-values tsv +text/x-setext etx + +video/dl dl +video/fli fli +video/gl gl +video/mpeg mp2 mpe mpeg mpg +video/quicktime mov qt +video/x-msvideo avi +video/x-sgi-movie movie + +x-world/x-vrml vrm vrml wrl diff --git a/missing b/missing new file mode 100755 index 0000000..6a37006 --- /dev/null +++ b/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# 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, 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., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/mkchangelog.sh b/mkchangelog.sh new file mode 100755 index 0000000..f13bec1 --- /dev/null +++ b/mkchangelog.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +TZ=GMT; export TZ +date="`head -1 ChangeLog | awk '{print $1, $2}'`" +cvs -z9 log -d ">$date" | perl ./cvslog2changelog.pl diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..d2d5f21 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/mutt.h b/mutt.h new file mode 100644 index 0000000..84ac4e9 --- /dev/null +++ b/mutt.h @@ -0,0 +1,896 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef MUTT_H +#define MUTT_H + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#ifdef HAVE_UNISTD_H +# include <unistd.h> /* needed for SEEK_SET */ +#endif +#ifdef HAVE_UNIX_H +# include <unix.h> /* needed for snprintf on QNX. */ +#endif +#include <sys/types.h> +#include <sys/stat.h> +#include <time.h> +#include <limits.h> +#include <stdarg.h> +#include <signal.h> +#ifdef HAVE_WCHAR_H +# include <wchar.h> +#endif +#if defined(HAVE_WCTYPE_H) && defined(HAVE_WC_FUNCS) +# include <wctype.h> +#endif + +#ifndef _POSIX_PATH_MAX +#include <posix1_lim.h> +#endif + +#include <pwd.h> +#include <grp.h> + +#include "rfc822.h" +#include "hash.h" +#include "charset.h" + +#ifndef HAVE_WC_FUNCS +# ifdef MB_LEN_MAX +# undef MB_LEN_MAX +# endif +# define MB_LEN_MAX 16 +#endif + +#ifdef SUBVERSION +# define MUTT_VERSION (VERSION SUBVERSION) +#else +# define MUTT_VERSION (VERSION) +#endif + +/* nifty trick I stole from ELM 2.5alpha. */ +#ifdef MAIN_C +#define WHERE +#define INITVAL(x) = x +#else +#define WHERE extern +#define INITVAL(x) +#endif + +#include "mutt_regex.h" + +/* flags for mutt_copy_header() */ +#define CH_UPDATE 1 /* update the status and x-status fields? */ +#define CH_WEED (1<<1) /* weed the headers? */ +#define CH_DECODE (1<<2) /* do RFC1522 decoding? */ +#define CH_XMIT (1<<3) /* transmitting this message? */ +#define CH_FROM (1<<4) /* retain the "From " message separator? */ +#define CH_PREFIX (1<<5) /* use Prefix string? */ +#define CH_NOSTATUS (1<<6) /* supress the status and x-status fields */ +#define CH_REORDER (1<<7) /* Re-order output of headers */ +#define CH_NONEWLINE (1<<8) /* don't output terminating newline */ +#define CH_MIME (1<<9) /* ignore MIME fields */ +#define CH_UPDATE_LEN (1<<10) /* update Lines: and Content-Length: */ +#define CH_TXTPLAIN (1<<11) /* generate text/plain MIME headers */ +#define CH_NOLEN (1<<12) /* don't write Content-Length: and Lines: */ +#define CH_WEED_DELIVERED (1<<13) /* weed eventual Delivered-To headers */ +#define CH_FORCE_FROM (1<<14) /* give CH_FROM precedence over CH_WEED? */ +#define CH_NOQFROM (1<<15) /* give CH_FROM precedence over CH_WEED? */ + +/* flags for mutt_enter_string() */ +#define M_ALIAS 1 /* do alias "completion" by calling up the alias-menu */ +#define M_FILE (1<<1) /* do file completion */ +#define M_EFILE (1<<2) /* do file completion, plus incoming folders */ +#define M_CMD (1<<3) /* do completion on previous word */ +#define M_PASS (1<<4) /* password mode (no echo) */ +#define M_CLEAR (1<<5) /* clear input if printable character is pressed */ +#define M_COMMAND (1<<6) /* do command completion */ +#define M_PATTERN (1<<7) /* pattern mode - only used for history classes */ + +/* flags for mutt_get_token() */ +#define M_TOKEN_EQUAL 1 /* treat '=' as a special */ +#define M_TOKEN_CONDENSE (1<<1) /* ^(char) to control chars (macros) */ +#define M_TOKEN_SPACE (1<<2) /* don't treat whitespace as a term */ +#define M_TOKEN_QUOTE (1<<3) /* don't interpret quotes */ +#define M_TOKEN_PATTERN (1<<4) /* !)|~ are terms (for patterns) */ +#define M_TOKEN_COMMENT (1<<5) /* don't reap comments */ +#define M_TOKEN_SEMICOLON (1<<6) /* don't treat ; as special */ + +/* flags for km_dokey() */ +#define M_KM_UNBUFFERED 1 /* don't read from the key buffer */ + +typedef struct +{ + char *data; /* pointer to data */ + char *dptr; /* current read/write position */ + size_t dsize; /* length of data */ + int destroy; /* destroy `data' when done? */ +} BUFFER; + +typedef struct +{ + int ch; /* raw key pressed */ + int op; /* function op */ +} event_t; + +/* flags for _mutt_system() */ +#define M_DETACH_PROCESS 1 /* detach subprocess from group */ + +/* flags for mutt_FormatString() */ +typedef enum +{ + M_FORMAT_FORCESUBJ = (1<<0), /* print the subject even if unchanged */ + M_FORMAT_TREE = (1<<1), /* draw the thread tree */ + M_FORMAT_MAKEPRINT = (1<<2), /* make sure that all chars are printable */ + M_FORMAT_OPTIONAL = (1<<3), + M_FORMAT_STAT_FILE = (1<<4), /* used by mutt_attach_fmt */ + M_FORMAT_ARROWCURSOR = (1<<5), /* reserve space for arrow_cursor */ + M_FORMAT_INDEX = (1<<6) /* this is a main index entry */ +} format_flag; + +/* types for mutt_add_hook() */ +#define M_FOLDERHOOK 1 +#define M_MBOXHOOK (1<<1) +#define M_SENDHOOK (1<<2) +#define M_FCCHOOK (1<<3) +#define M_SAVEHOOK (1<<4) +#define M_CHARSETHOOK (1<<5) +#define M_ICONVHOOK (1<<6) +#define M_MESSAGEHOOK (1<<7) +#define M_CRYPTHOOK (1<<8) +#define M_ACCOUNTHOOK (1<<9) +#define M_REPLYHOOK (1<<10) + +/* tree characters for linearize_tree and print_enriched_string */ +#define M_TREE_LLCORNER 1 +#define M_TREE_ULCORNER 2 +#define M_TREE_LTEE 3 +#define M_TREE_HLINE 4 +#define M_TREE_VLINE 5 +#define M_TREE_SPACE 6 +#define M_TREE_RARROW 7 +#define M_TREE_STAR 8 +#define M_TREE_HIDDEN 9 +#define M_TREE_EQUALS 10 +#define M_TREE_TTEE 11 +#define M_TREE_BTEE 12 +#define M_TREE_MISSING 13 +#define M_TREE_MAX 14 + +#define M_THREAD_COLLAPSE (1<<0) +#define M_THREAD_UNCOLLAPSE (1<<1) +#define M_THREAD_GET_HIDDEN (1<<2) +#define M_THREAD_UNREAD (1<<3) +#define M_THREAD_NEXT_UNREAD (1<<4) + +enum +{ + /* modes for mutt_view_attachment() */ + M_REGULAR = 1, + M_MAILCAP, + M_AS_TEXT, + + /* action codes used by mutt_set_flag() and mutt_pattern_function() */ + M_ALL, + M_NONE, + M_NEW, + M_OLD, + M_REPLIED, + M_READ, + M_UNREAD, + M_DELETE, + M_UNDELETE, + M_DELETED, + M_APPENDED, + M_PURGED, + M_FLAG, + M_TAG, + M_UNTAG, + M_LIMIT, + M_EXPIRED, + M_SUPERSEDED, + + /* actions for mutt_pattern_comp/mutt_pattern_exec */ + M_AND, + M_OR, + M_TO, + M_CC, + M_COLLAPSED, + M_SUBJECT, + M_FROM, + M_DATE, + M_DATE_RECEIVED, + M_DUPLICATED, + M_ID, + M_BODY, + M_HEADER, + M_WHOLE_MSG, + M_SENDER, + M_MESSAGE, + M_SCORE, + M_SIZE, + M_REFERENCE, + M_RECIPIENT, + M_LIST, + M_PERSONAL_RECIP, + M_PERSONAL_FROM, + M_ADDRESS, + M_CRYPT_SIGN, + M_CRYPT_VERIFIED, + M_CRYPT_ENCRYPT, + M_PGP_KEY, + M_XLABEL, +#ifdef USE_NNTP + M_NEWSGROUPS, +#endif + + /* Options for Mailcap lookup */ + M_EDIT, + M_COMPOSE, + M_PRINT, + M_AUTOVIEW, + + /* options for socket code */ + M_NEW_SOCKET, +#ifdef USE_SSL + M_NEW_SSL_SOCKET, +#endif + + /* Options for mutt_save_attachment */ + M_SAVE_APPEND, + M_SAVE_OVERWRITE +}; + +/* possible arguments to set_quadoption() */ +enum +{ + M_NO, + M_YES, + M_ASKNO, + M_ASKYES +}; + +/* quad-option vars */ +enum +{ + OPT_ABORT, + OPT_BOUNCE, + OPT_COPY, + OPT_DELETE, + OPT_FORWEDIT, + OPT_INCLUDE, + OPT_MFUPTO, + OPT_MIMEFWD, + OPT_MIMEFWDREST, + OPT_MOVE, + OPT_PGPTRADITIONAL, /* create old-style PGP messages */ +#ifdef USE_POP + OPT_POPDELETE, + OPT_POPRECONNECT, +#endif + OPT_POSTPONE, + OPT_PRINT, + OPT_QUIT, + OPT_REPLYTO, + OPT_RECALL, +#ifdef USE_SSL + OPT_SSLSTARTTLS, +#endif + OPT_SUBJECT, + OPT_VERIFYSIG, /* verify PGP signatures */ + OPT_LISTREPLY, +#ifdef USE_NNTP + OPT_TOMODERATED, + OPT_NNTPRECONNECT, + OPT_CATCHUP, + OPT_FOLLOWUPTOPOSTER, +#endif /* USE_NNTP */ + + /* THIS MUST BE THE LAST VALUE. */ + OPT_MAX +}; + +/* flags to ci_send_message() */ +#define SENDREPLY (1<<0) +#define SENDGROUPREPLY (1<<1) +#define SENDLISTREPLY (1<<2) +#define SENDFORWARD (1<<3) +#define SENDPOSTPONED (1<<4) +#define SENDBATCH (1<<5) +#define SENDMAILX (1<<6) +#define SENDKEY (1<<7) +#define SENDRESEND (1<<8) +#define SENDNEWS (1<<9) + +/* flags to _mutt_select_file() */ +#define M_SEL_BUFFY (1<<0) +#define M_SEL_MULTI (1<<1) +#define M_SEL_FOLDER (1<<2) + + +/* boolean vars */ +enum +{ + OPTALLOW8BIT, + OPTALLOWANSI, + OPTARROWCURSOR, + OPTASCIICHARS, + OPTASKBCC, + OPTASKCC, + OPTASKFOLLOWUP, + OPTASKXCOMMENTTO, + OPTATTACHSPLIT, + OPTAUTOEDIT, + OPTAUTOTAG, + OPTBEEP, + OPTBEEPNEW, + OPTBOUNCEDELIVERED, + OPTCHECKNEW, + OPTCOLLAPSEUNREAD, + OPTCONFIRMAPPEND, + OPTCONFIRMCREATE, + OPTDELETEUNTAG, + OPTDIGESTCOLLAPSE, + OPTDUPTHREADS, + OPTEDITHDRS, + OPTENCODEFROM, + OPTENVFROM, + OPTFASTREPLY, + OPTFCCATTACH, + OPTFCCCLEAR, + OPTFOLLOWUPTO, + OPTFORCENAME, + OPTFORWDECODE, + OPTFORWQUOTE, + OPTHDRS, + OPTHEADER, + OPTHELP, + OPTHIDDENHOST, + OPTHIDELIMITED, + OPTHIDEMISSING, + OPTHIDETOPLIMITED, + OPTHIDETOPMISSING, + OPTIGNORELISTREPLYTO, +#ifdef USE_IMAP + OPTIMAPLSUB, + OPTIMAPPASSIVE, + OPTIMAPPEEK, + OPTIMAPSERVERNOISE, +# ifdef USE_SSL + OPTIMAPFORCESSL, +# endif +#endif +#if defined(USE_SSL) || defined(USE_NSS) + OPTSSLV2, + OPTSSLV3, + OPTTLSV1, + OPTSSLSYSTEMCERTS, +#endif + OPTIMPLICITAUTOVIEW, + OPTKEEPFLAGGED, + OPTMAILCAPSANITIZE, + OPTMAILDIRTRASH, + OPTMARKERS, + OPTMARKOLD, + OPTMENUSCROLL, /* scroll menu instead of implicit next-page */ + OPTMETAKEY, /* interpret ALT-x as ESC-x */ + OPTMETOO, + OPTMHPURGE, + OPTMIMEFORWDECODE, +#ifdef USE_NNTP + OPTMIMESUBJECT, /* encode subject line with RFC2047 */ +#endif + OPTNARROWTREE, + OPTPAGERSTOP, + OPTPIPEDECODE, + OPTPIPESPLIT, +#ifdef USE_POP + OPTPOPAUTHTRYALL, + OPTPOPLAST, +#endif + OPTPRINTDECODE, + OPTPRINTSPLIT, + OPTPROMPTAFTER, + OPTQUOTEEMPTY, + OPTQUOTEQUOTED, + OPTREADONLY, + OPTREPLYSELF, + OPTRESOLVE, + OPTREVALIAS, + OPTREVNAME, + OPTREVREAL, + OPTRFC2047PARAMS, + OPTSAVEADDRESS, + OPTSAVEEMPTY, + OPTSAVENAME, + OPTSCORE, + OPTSIGDASHES, + OPTSIGONTOP, + OPTSORTRE, + OPTSTATUSONTOP, + OPTSTRICTTHREADS, + OPTSUSPEND, + OPTTEXTFLOWED, + OPTTHOROUGHSRC, + OPTTHREADRECEIVED, + OPTTILDE, + OPTUNCOLLAPSEJUMP, + OPTUSE8BITMIME, + OPTUSEDOMAIN, + OPTUSEFROM, + OPTUSEGPGAGENT, +#ifdef HAVE_GETADDRINFO + OPTUSEIPV6, +#endif + OPTWAITKEY, + OPTWEED, + OPTWRAP, + OPTWRAPSEARCH, + OPTWRITEBCC, /* write out a bcc header? */ + OPTXMAILER, + + /* PGP options */ + + OPTCRYPTAUTOSIGN, + OPTCRYPTAUTOENCRYPT, + OPTCRYPTAUTOPGP, + OPTCRYPTAUTOSMIME, + OPTCRYPTREPLYENCRYPT, + OPTCRYPTREPLYSIGN, + OPTCRYPTREPLYSIGNENCRYPTED, + OPTCRYPTTIMESTAMP, + OPTSMIMEISDEFAULT, + OPTASKCERTLABEL, + OPTSDEFAULTDECRYPTKEY, + OPTPGPIGNORESUB, + OPTPGPCHECKEXIT, + OPTPGPLONGIDS, + OPTPGPAUTOTRAD, +#if 0 + OPTPGPENCRYPTSELF, +#endif + OPTPGPRETAINABLESIG, + OPTPGPSTRICTENC, + OPTFORWDECRYPT, + OPTPGPSHOWUNUSABLE, + + /* news options */ + +#ifdef USE_NNTP + OPTSHOWNEWNEWS, + OPTSHOWONLYUNREAD, + OPTSAVEUNSUB, + OPTLOADDESC, + OPTXCOMMENTTO, +#endif /* USE_NNTP */ + + /* pseudo options */ + + OPTAUXSORT, /* (pseudo) using auxillary sort function */ + OPTFORCEREFRESH, /* (pseudo) refresh even during macros */ + OPTLOCALES, /* (pseudo) set if user has valid locale definition */ + OPTNOCURSES, /* (pseudo) when sending in batch mode */ + OPTNEEDREDRAW, /* (pseudo) to notify caller of a submenu */ + OPTSEARCHREVERSE, /* (pseudo) used by ci_search_command */ + OPTMSGERR, /* (pseudo) used by mutt_error/mutt_message */ + OPTSEARCHINVALID, /* (pseudo) used to invalidate the search pat */ + OPTSIGNALSBLOCKED, /* (pseudo) using by mutt_block_signals () */ + OPTSYSSIGNALSBLOCKED, /* (pseudo) using by mutt_block_signals_system () */ + OPTNEEDRESORT, /* (pseudo) used to force a re-sort */ + OPTRESORTINIT, /* (pseudo) used to force the next resort to be from scratch */ + OPTVIEWATTACH, /* (pseudo) signals that we are viewing attachments */ + OPTFORCEREDRAWINDEX, /* (pseudo) used to force a redraw in the main index */ + OPTFORCEREDRAWPAGER, /* (pseudo) used to force a redraw in the pager */ + OPTSORTSUBTHREADS, /* (pseudo) used when $sort_aux changes */ + OPTNEEDRESCORE, /* (pseudo) set when the `score' command is used */ + OPTATTACHMSG, /* (pseudo) used by attach-message */ + OPTHIDEREAD, /* (pseudo) whether or not hide read messages */ + OPTKEEPQUIET, /* (pseudo) shut up the message and refresh + * functions while we are executing an + * external program. + */ + OPTMENUCALLER, /* (pseudo) tell menu to give caller a take */ + OPTREDRAWTREE, /* (pseudo) redraw the thread tree */ + OPTPGPCHECKTRUST, /* (pseudo) used by pgp_select_key () */ + OPTDONTHANDLEPGPKEYS, /* (pseudo) used to extract PGP keys */ + OPTUNBUFFEREDINPUT, /* (pseudo) don't use key buffer */ + +#ifdef USE_NNTP + OPTNEWS, /* (pseudo) used to change reader mode */ + OPTNEWSSEND, /* (pseudo) used to change behavior when posting */ + OPTNEWSCACHE, /* (pseudo) used to indicate if news cache exist */ +#endif + + OPTMAX +}; + +#define mutt_bit_alloc(n) calloc ((n + 7) / 8, sizeof (char)) +#define mutt_bit_set(v,n) v[n/8] |= (1 << (n % 8)) +#define mutt_bit_unset(v,n) v[n/8] &= ~(1 << (n % 8)) +#define mutt_bit_toggle(v,n) v[n/8] ^= (1 << (n % 8)) +#define mutt_bit_isset(v,n) (v[n/8] & (1 << (n % 8))) + +#define set_option(x) mutt_bit_set(Options,x) +#define unset_option(x) mutt_bit_unset(Options,x) +#define toggle_option(x) mutt_bit_toggle(Options,x) +#define option(x) mutt_bit_isset(Options,x) + +/* Exit values used in send_msg() */ +#define S_ERR 127 +#define S_BKG 126 + +typedef struct list_t +{ + char *data; + struct list_t *next; +} LIST; + +typedef struct rx_list_t +{ + REGEXP *rx; + struct rx_list_t *next; +} RX_LIST; + +#define mutt_new_list() safe_calloc (1, sizeof (LIST)) +#define mutt_new_rx_list() safe_calloc (1, sizeof (RX_LIST)) +void mutt_free_list (LIST **); +void mutt_free_rx_list (RX_LIST **); +int mutt_matches_ignore (const char *, LIST *); + +/* add an element to a list */ +LIST *mutt_add_list (LIST *, const char *); + +void mutt_init (int, LIST *); + +typedef struct alias +{ + struct alias *self; /* XXX - ugly hack */ + char *name; + ADDRESS *addr; + struct alias *next; + short tagged; + short del; + short num; +} ALIAS; + +typedef struct envelope +{ + ADDRESS *return_path; + ADDRESS *from; + ADDRESS *to; + ADDRESS *cc; + ADDRESS *bcc; + ADDRESS *sender; + ADDRESS *reply_to; + ADDRESS *mail_followup_to; + char *subject; + char *real_subj; /* offset of the real subject */ + char *message_id; + char *supersedes; + char *date; + char *x_label; + char *organization; +#ifdef USE_NNTP + char *newsgroups; + char *xref; + char *followup_to; + char *x_comment_to; +#endif + LIST *references; /* message references (in reverse order) */ + LIST *in_reply_to; /* in-reply-to header content */ + LIST *userhdrs; /* user defined headers */ +} ENVELOPE; + +typedef struct parameter +{ + char *attribute; + char *value; + struct parameter *next; +} PARAMETER; + +/* Information that helps in determing the Content-* of an attachment */ +typedef struct content +{ + long hibin; /* 8-bit characters */ + long lobin; /* unprintable 7-bit chars (eg., control chars) */ + long crlf; /* '\r' and '\n' characters */ + long ascii; /* number of ascii chars */ + long linemax; /* length of the longest line in the file */ + unsigned int space : 1; /* whitespace at the end of lines? */ + unsigned int binary : 1; /* long lines, or CR not in CRLF pair */ + unsigned int from : 1; /* has a line beginning with "From "? */ + unsigned int dot : 1; /* has a line consisting of a single dot? */ + unsigned int cr : 1; /* has CR, even when in a CRLF pair */ +} CONTENT; + +typedef struct body +{ + char *xtype; /* content-type if x-unknown */ + char *subtype; /* content-type subtype */ + PARAMETER *parameter; /* parameters of the content-type */ + char *description; /* content-description */ + char *form_name; /* Content-Disposition form-data name param */ + long hdr_offset; /* offset in stream where the headers begin. + * this info is used when invoking metamail, + * where we need to send the headers of the + * attachment + */ + long offset; /* offset where the actual data begins */ + long length; /* length (in bytes) of attachment */ + char *filename; /* when sending a message, this is the file + * to which this structure refers + */ + char *d_filename; /* filename to be used for the + * content-disposition header. + * If NULL, filename is used + * instead. + */ + CONTENT *content; /* structure used to store detailed info about + * the content of the attachment. this is used + * to determine what content-transfer-encoding + * is required when sending mail. + */ + struct body *next; /* next attachment in the list */ + struct body *parts; /* parts of a multipart or message/rfc822 */ + struct header *hdr; /* header information for message/rfc822 */ + + struct attachptr *aptr; /* Menu information, used in recvattach.c */ + + time_t stamp; /* time stamp of last + * encoding update. + */ + + unsigned int type : 4; /* content-type primary type */ + unsigned int encoding : 3; /* content-transfer-encoding */ + unsigned int disposition : 2; /* content-disposition */ + unsigned int use_disp : 1; /* Content-Disposition uses filename= ? */ + unsigned int unlink : 1; /* flag to indicate the the file named by + * "filename" should be unlink()ed before + * free()ing this structure + */ + unsigned int tagged : 1; + unsigned int deleted : 1; /* attachment marked for deletion */ + + unsigned int noconv : 1; /* don't do character set conversion */ + unsigned int force_charset : 1; + /* send mode: don't adjust the character + * set when in send-mode. + */ + + unsigned int goodsig : 1; /* good cryptographic signature */ + unsigned int badsig : 1; /* bad cryptographic signature (needed to check encrypted s/mime-signatures) */ + + unsigned int collapsed : 1; /* used by recvattach */ + +} BODY; + +typedef struct header +{ + unsigned int security : 9; /* bit 0-6: flags, bit 7,8: application. + see: crypt.h pgplib.h, smime.h */ + + unsigned int mime : 1; /* has a Mime-Version header? */ + unsigned int flagged : 1; /* marked important? */ + unsigned int tagged : 1; + unsigned int appended : 1; /* has been saved */ + unsigned int purged : 1; /* bypassing the trash folder */ + unsigned int deleted : 1; + unsigned int changed : 1; + unsigned int attach_del : 1; /* has an attachment marked for deletion */ + unsigned int old : 1; + unsigned int read : 1; + unsigned int expired : 1; /* already expired? */ + unsigned int superseded : 1; /* got superseded? */ + unsigned int replied : 1; + unsigned int subject_changed : 1; /* used for threading */ + unsigned int threaded : 1; /* used for threading */ + unsigned int display_subject : 1; /* used for threading */ + unsigned int recip_valid : 1; /* is_recipient is valid */ + unsigned int active : 1; /* message is not to be removed */ + unsigned int trash : 1; /* message is marked as trashed on disk. + * This flag is used by the maildir_trash + * option. + */ + + /* timezone of the sender of this message */ + unsigned int zhours : 5; + unsigned int zminutes : 6; + unsigned int zoccident : 1; + + /* bits used for caching when searching */ + unsigned int searched : 1; + unsigned int matched : 1; + + /* the following are used to support collapsing threads */ + unsigned int collapsed : 1; /* is this message part of a collapsed thread? */ + unsigned int limited : 1; /* is this message in a limited view? */ + size_t num_hidden; /* number of hidden messages in this view */ + + short recipient; /* user_is_recipient()'s return value, cached */ + + int pair; /* color-pair to use when displaying in the index */ + + time_t date_sent; /* time when the message was sent (UTC) */ + time_t received; /* time when the message was placed in the mailbox */ + long offset; /* where in the stream does this message begin? */ + int lines; /* how many lines in the body of this message? */ + int index; /* the absolute (unsorted) message number */ + int msgno; /* number displayed to the user */ + int virtual; /* virtual message number */ + int score; + ENVELOPE *env; /* envelope information */ + BODY *content; /* list of MIME parts */ + char *path; +#ifdef USE_NNTP + int article_num; +#endif + + char *tree; /* character string to print thread tree */ + struct thread *thread; + +#ifdef MIXMASTER + LIST *chain; +#endif + +#ifdef USE_POP + int refno; /* message number on server */ +#endif + +#if defined USE_POP || defined USE_IMAP || defined USE_NNTP + void *data; /* driver-specific data */ +#endif + + char *maildir_flags; /* unknown maildir flags */ +} HEADER; + +typedef struct thread +{ + unsigned int fake_thread : 1; + unsigned int duplicate_thread : 1; + unsigned int sort_children : 1; + unsigned int check_subject : 1; + unsigned int visible : 1; + unsigned int deep : 1; + unsigned int subtree_visible : 2; + unsigned int next_subtree_visible : 1; + struct thread *parent; + struct thread *child; + struct thread *next; + struct thread *prev; + HEADER *message; + HEADER *sort_key; +} THREAD; + + +/* flag to mutt_pattern_comp() */ +#define M_FULL_MSG 1 /* enable body and header matching */ + +typedef enum { + M_MATCH_FULL_ADDRESS = 1 +} pattern_exec_flag; + +typedef struct pattern_t +{ + short op; + short not; + short alladdr; + int min; + int max; + struct pattern_t *next; + struct pattern_t *child; /* arguments to logical op */ + regex_t *rx; +} pattern_t; + +typedef struct +{ + char *path; + FILE *fp; + time_t mtime; + time_t mtime_cur; /* used with maildir folders */ + off_t size; + off_t vsize; + char *pattern; /* limit pattern string */ + pattern_t *limit_pattern; /* compiled limit pattern */ + HEADER **hdrs; + THREAD *tree; /* top of thread tree */ + HASH *id_hash; /* hash table by msg id */ + HASH *subj_hash; /* hash table by subject */ + HASH *thread_hash; /* hash table for threading */ + int *v2r; /* mapping from virtual to real msgno */ + int hdrmax; /* number of pointers in hdrs */ + int msgcount; /* number of messages in the mailbox */ + int vcount; /* the number of virtual messages */ + int tagged; /* how many messages are tagged? */ + int new; /* how many new messages? */ + int unread; /* how many unread messages? */ + int deleted; /* how many deleted messages */ + int appended; /* how many saved messages? */ + int flagged; /* how many flagged messages */ + int msgnotreadyet; /* which msg "new" in pager, -1 if none */ +#if defined USE_POP || defined USE_IMAP || defined USE_NNTP + void *data; /* driver specific data */ +#endif /* USE_IMAP */ + + short magic; /* mailbox type */ + + unsigned int locked : 1; /* is the mailbox locked? */ + unsigned int changed : 1; /* mailbox has been modified */ + unsigned int readonly : 1; /* don't allow changes to the mailbox */ + unsigned int dontwrite : 1; /* dont write the mailbox on close */ + unsigned int append : 1; /* mailbox is opened in append mode */ + unsigned int quiet : 1; /* inhibit status messages? */ + unsigned int collapsed : 1; /* are all threads collapsed? */ + unsigned int closing : 1; /* mailbox is being closed */ +} CONTEXT; + +typedef struct attachptr +{ + BODY *content; + int parent_type; + char *tree; + int level; + int num; +} ATTACHPTR; + +typedef struct +{ + FILE *fpin; + FILE *fpout; + char *prefix; + int flags; +} STATE; + +/* used by enter.c */ + +typedef struct +{ + wchar_t *wbuf; + size_t wbuflen; + size_t lastchar; + size_t curpos; + size_t begin; + int tabs; +} ENTER_STATE; + +/* flags for the STATE struct */ +#define M_DISPLAY (1<<0) /* output is displayed to the user */ +#define M_VERIFY (1<<1) /* perform signature verification */ +#define M_PENDINGPREFIX (1<<2) /* prefix to write, but character must follow */ +#define M_WEED (1<<3) /* weed headers even when not in display mode */ +#define M_CHARCONV (1<<4) /* Do character set conversions */ +#define M_PRINTING (1<<5) /* are we printing? - M_DISPLAY "light" */ + +#define state_set_prefix(s) ((s)->flags |= M_PENDINGPREFIX) +#define state_reset_prefix(s) ((s)->flags &= ~M_PENDINGPREFIX) +#define state_puts(x,y) fputs(x,(y)->fpout) +#define state_putc(x,y) fputc(x,(y)->fpout) + +void state_mark_attach (STATE *); +void state_attach_puts (const char *, STATE *); +void state_prefix_putc (char, STATE *); +int state_printf(STATE *, const char *, ...); + +#include "ascii.h" +#include "protos.h" +#include "lib.h" +#include "globals.h" + +#endif /*MUTT_H*/ diff --git a/mutt_crypt.h b/mutt_crypt.h new file mode 100644 index 0000000..bd3c8c5 --- /dev/null +++ b/mutt_crypt.h @@ -0,0 +1,253 @@ +/* + * Copyright (C) 2003 Werner Koch <wk@gnupg.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + Common definitions and prototypes for the crypt functions. They are + all defined in crypt.c and cryptglue.c +*/ + +#ifndef MUTT_CRYPT_H +#define MUTT_CRYPT_H + +#include "mutt.h" /* Need this to declare BODY, ADDRESS. STATE etc. */ +/* FIXME: They should be pointer to anonymous structures for better + information hiding. */ + + + +#define ENCRYPT (1 << 0) +#define SIGN (1 << 1) +#define GOODSIGN (1 << 2) +#define BADSIGN (1 << 3) +#define PARTSIGN (1 << 4) +#define SIGNOPAQUE (1 << 5) +/* (1 << 6) is used by PGPKEY below. */ + +#define APPLICATION_PGP (1 << 7) +#define APPLICATION_SMIME (1 << 8) + +#define PGPENCRYPT (APPLICATION_PGP | ENCRYPT) +#define PGPSIGN (APPLICATION_PGP | SIGN) +#define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN) +#define PGPKEY (APPLICATION_PGP | (1 << 6)) + +#define SMIMEENCRYPT (APPLICATION_SMIME | ENCRYPT) +#define SMIMESIGN (APPLICATION_SMIME | SIGN) +#define SMIMEGOODSIGN (APPLICATION_SMIME | GOODSIGN) +#define SMIMEBADSIGN (APPLICATION_SMIME | BADSIGN) +#define SMIMEOPAQUE (APPLICATION_SMIME | SIGNOPAQUE) + + +/* WITHCRYPTO actually replaces ifdefs so make the code more readable. + Because it is defined as a constant and known at compile time, the + compiler can do dead code elimination and thus it behaves + effectively as a conditional compile directive. It is set to false + if no crypto backend is configures or to a bit vector denoting the + configured backends. */ +#if defined(CRYPT_BACKEND_CLASSIC_PGP) && defined(CRYPT_BACKEND_CLASSIC_SMIME) +# define WithCrypto (APPLICATION_PGP | APPLICATION_SMIME) +#elif defined(CRYPT_BACKEND_CLASSIC_PGP) +# define WithCrypto APPLICATION_PGP +#elif defined(CRYPT_BACKEND_CLASSIC_SMIME) +# define WithCrypto APPLICATION_SMIME +#elif defined(CRYPT_BACKEND_GPGME) +# define WithCrypto (APPLICATION_PGP | APPLICATION_SMIME) +#else +# define WithCrypto 0 +#endif + + +#define KEYFLAG_CANSIGN (1 << 0) +#define KEYFLAG_CANENCRYPT (1 << 1) +#define KEYFLAG_SECRET (1 << 7) +#define KEYFLAG_EXPIRED (1 << 8) +#define KEYFLAG_REVOKED (1 << 9) +#define KEYFLAG_DISABLED (1 << 10) +#define KEYFLAG_SUBKEY (1 << 11) +#define KEYFLAG_CRITICAL (1 << 12) +#define KEYFLAG_PREFER_ENCRYPTION (1 << 13) +#define KEYFLAG_PREFER_SIGNING (1 << 14) + +#define KEYFLAG_CANTUSE (KEYFLAG_DISABLED|KEYFLAG_REVOKED|KEYFLAG_EXPIRED) +#define KEYFLAG_RESTRICTIONS (KEYFLAG_CANTUSE|KEYFLAG_CRITICAL) + +#define KEYFLAG_ABILITIES (KEYFLAG_CANSIGN|KEYFLAG_CANENCRYPT|KEYFLAG_PREFER_ENCRYPTION|KEYFLAG_PREFER_SIGNING) + +enum pgp_ring +{ + PGP_PUBRING, + PGP_SECRING +}; +typedef enum pgp_ring pgp_ring_t; + + +struct pgp_keyinfo; +typedef struct pgp_keyinfo *pgp_key_t; + + + +/* Some prototypes -- old crypt.h. */ + +int mutt_protect (HEADER *, HEADER *, char *); + +int mutt_is_multipart_encrypted (BODY *); + +int mutt_is_multipart_signed (BODY *); + +int mutt_is_application_pgp (BODY *); + +int mutt_is_application_smime (BODY *); + +void mutt_signed_handler (BODY *, STATE *); + +int mutt_parse_crypt_hdr (char *, int); + + +void convert_to_7bit (BODY *); + + + +/*-- crypt.c --*/ + +/* Print the current time. */ +void crypt_current_time(STATE *s, char *app_name); + +/* Check out the type of encryption used and set the cached status + values if there are any. */ +int crypt_query (BODY *m); + +/* Fixme: To be documented. */ +void crypt_extract_keys_from_messages (HEADER *h); + +/* Do a quick check to make sure that we can find all of the + encryption keys if the user has requested this service. + Return the list of keys in KEYLIST. */ +int crypt_get_keys (HEADER *msg, char **keylist); + +/* Forget a passphrase and display a message. */ +void crypt_forget_passphrase (void); + +/* Check that we have a usable passphrase, ask if not. */ +int crypt_valid_passphrase (int); + +/* Write the message body/part A described by state S to a the given + TEMPFILE. */ +int crypt_write_signed(BODY *a, STATE *s, const char *tempf); + + + +/*-- cryptglue.c --*/ + +/* Show a message that a backend will be invoked. */ +void crypt_invoke_message (int type); + + +/* Silently forget about a passphrase. */ +void crypt_pgp_void_passphrase (void); + +/* Decrypt a PGP/MIME message. */ +int crypt_pgp_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d); + +/* MIME handler for the application/pgp content-type. */ +void crypt_pgp_application_pgp_handler (BODY *m, STATE *s); + +/* MIME handler for an PGP/MIME encrypted message. */ +void crypt_pgp_encrypted_handler (BODY *a, STATE *s); + +/* fixme: needs documentation. */ +void crypt_pgp_invoke_getkeys (ADDRESS *addr); + +/* Ask for a PGP key. */ +pgp_key_t crypt_pgp_ask_for_key (char *tag, char *whatfor, + short abilities, pgp_ring_t keyring); + +/* Check for a traditional PGP message in body B. */ +int crypt_pgp_check_traditional (FILE *fp, BODY *b, int tagged_only); + +/* fixme: needs documentation. */ +BODY *crypt_pgp_traditional_encryptsign (BODY *a, int flags, char *keylist); + +/* Release the PGP key KPP (note, that we pass a pointer to it). */ +void crypt_pgp_free_key (pgp_key_t *kpp); + +/* Generate a PGP public key attachment. */ +BODY *crypt_pgp_make_key_attachment (char *tempf); + +/* This routine attempts to find the keyids of the recipients of a + message. It returns NULL if any of the keys can not be found. */ +char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc); + +/* Create a new body with a PGP signed message from A. */ +BODY *crypt_pgp_sign_message (BODY *a); + +/* Warning: A is no longer freed in this routine, you need to free it + later. This is necessary for $fcc_attach. */ +BODY *crypt_pgp_encrypt_message (BODY *a, char *keylist, int sign); + +/* Invoke the PGP command to import a key. */ +void crypt_pgp_invoke_import (const char *fname); + +/* fixme: needs documentation */ +int crypt_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf); + +/* Access the keyID in K. */ +char *crypt_pgp_keyid (pgp_key_t k); + +/* fixme: needs documentation */ +void crypt_pgp_extract_keys_from_attachment_list (FILE *fp, int tag,BODY *top); + + + + + +/* Silently forget about a passphrase. */ +void crypt_smime_void_passphrase (void); + +/* Decrypt an S/MIME message. */ +int crypt_smime_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d); + +/* MIME handler for the application/smime content-type. */ +void crypt_smime_application_smime_handler (BODY *m, STATE *s); + +/* fixme: Needs documentation. */ +void crypt_smime_getkeys (ENVELOPE *env); + +/* Check that the sender matches. */ +int crypt_smime_verify_sender(HEADER *h); + +/* Ask for an SMIME key. */ +char *crypt_smime_ask_for_key (char *prompt, char *mailbox, short public); + +/* This routine attempts to find the keyids of the recipients of a + message. It returns NULL if any of the keys can not be found. */ +char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc); + +/* fixme: Needs documentation. */ +BODY *crypt_smime_sign_message (BODY *a); + +/* fixme: needs documentation. */ +BODY *crypt_smime_build_smime_entity (BODY *a, char *certlist); + +/* Add a certificate and update index file (externally). */ +void crypt_smime_invoke_import (char *infile, char *mailbox); + +/* fixme: needs documentation */ +int crypt_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf); + + +#endif /*MUTT_CRYPT_H*/ diff --git a/mutt_curses.h b/mutt_curses.h new file mode 100644 index 0000000..b7b1a82 --- /dev/null +++ b/mutt_curses.h @@ -0,0 +1,174 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifdef USE_SLANG_CURSES + +#ifndef unix /* this symbol is not defined by the hp-ux compiler (sigh) */ +#define unix +#endif /* unix */ + +#include "slcurses.h" + +#define KEY_DC SL_KEY_DELETE +#define KEY_IC SL_KEY_IC + +/* + * ncurses and SLang seem to send different characters when the Enter key is + * pressed, so define some macros to properly detect the Enter key. + */ +#define M_ENTER_C '\r' +#define M_ENTER_S "\r" + +#else + +#ifdef HAVE_NCURSESW_NCURSES_H +#include <ncursesw/ncurses.h> +#else +#ifdef HAVE_NCURSES_H +#include <ncurses.h> +#else +#include <curses.h> +#endif +#endif + +#define M_ENTER_C '\n' +#define M_ENTER_S "\n" + +#endif /* USE_SLANG_CURSES */ + +/* AIX defines ``lines'' in <term.h>, but it's used as a var name in + * various places in Mutt + */ +#ifdef lines +#undef lines +#endif /* lines */ + +#define CLEARLINE(x) move(x,0), clrtoeol() +#define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) +#define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) + +#if ! (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET)) +#define curs_set(x) +#endif + +#if !defined(USE_SLANG_CURSES) && defined(HAVE_BKGDSET) +#define BKGDSET(x) bkgdset (ColorDefs[x] | ' ') +#else +#define BKGDSET(x) +#endif + +#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET)) +void mutt_curs_set (int); +#else +#define mutt_curs_set(x) +#endif +#define PAGELEN (LINES-3) + +#define ctrl(c) ((c)-'@') + +#ifdef KEY_ENTER +#define CI_is_return(c) ((c) == '\r' || (c) == '\n' || (c) == KEY_ENTER) +#else +#define CI_is_return(c) ((c) == '\r' || (c) == '\n') +#endif + +event_t mutt_getch (void); + +void mutt_endwin (const char *); +void mutt_flushinp (void); +void mutt_refresh (void); +void mutt_resize_screen (void); +void mutt_ungetch (int, int); + +/* ---------------------------------------------------------------------------- + * Support for color + */ + +enum +{ + MT_COLOR_HDEFAULT = 0, + MT_COLOR_QUOTED, + MT_COLOR_SIGNATURE, + MT_COLOR_INDICATOR, + MT_COLOR_STATUS, + MT_COLOR_TREE, + MT_COLOR_NORMAL, + MT_COLOR_ERROR, + MT_COLOR_TILDE, + MT_COLOR_MARKERS, + MT_COLOR_BODY, + MT_COLOR_HEADER, + MT_COLOR_MESSAGE, + MT_COLOR_ATTACHMENT, + MT_COLOR_SEARCH, + MT_COLOR_BOLD, + MT_COLOR_UNDERLINE, + MT_COLOR_INDEX, + MT_COLOR_MAX +}; + +typedef struct color_line +{ + regex_t rx; + char *pattern; + pattern_t *color_pattern; /* compiled pattern to speed up index color + calculation */ + short fg; + short bg; + int pair; + struct color_line *next; +} COLOR_LINE; + +extern int *ColorQuote; +extern int ColorQuoteUsed; +extern int ColorDefs[]; +extern COLOR_LINE *ColorHdrList; +extern COLOR_LINE *ColorBodyList; +extern COLOR_LINE *ColorIndexList; + +void ci_init_color (void); +void ci_start_color (void); + +#define SETCOLOR(X) attrset(ColorDefs[X]) +#define ADDCOLOR(X) attron(ColorDefs[X]) + +#define MAYBE_REDRAW(x) if (option (OPTNEEDREDRAW)) { unset_option (OPTNEEDREDRAW); x = REDRAW_FULL; } + +/* ---------------------------------------------------------------------------- + * These are here to avoid compiler warnings with -Wall under SunOS 4.1.x + */ + +#if !defined(STDC_HEADERS) && !defined(NCURSES_VERSION) && !defined(USE_SLANG_CURSES) +extern int endwin(); +extern int printw(); +extern int beep(); +extern int isendwin(); +extern int w32addch(); +extern int keypad(); +extern int wclrtobot(); +extern int mvprintw(); +extern int getcurx(); +extern int getcury(); +extern int noecho(); +extern int wdelch(); +extern int wrefresh(); +extern int wmove(); +extern int wclear(); +extern int waddstr(); +extern int wclrtoeol(); +#endif diff --git a/mutt_idna.c b/mutt_idna.c new file mode 100644 index 0000000..9a3fbb4 --- /dev/null +++ b/mutt_idna.c @@ -0,0 +1,267 @@ +/* + * Copyright (C) 2003 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "config.h" +#include "mutt.h" +#include "charset.h" +#include "mutt_idna.h" + +/* The low-level interface we use. */ + +#ifndef HAVE_LIBIDN + +int mutt_idna_to_local (const char *in, char **out, int flags) +{ + *out = safe_strdup (in); + return 1; +} + +int mutt_local_to_idna (const char *in, char **out) +{ + *out = safe_strdup (in); + return 0; +} + +#else + +int mutt_idna_to_local (const char *in, char **out, int flags) +{ + *out = NULL; + + if (!in) + goto notrans; + + /* Is this the right function? Interesting effects with some bad identifiers! */ + if (idna_to_unicode_8z8z (in, out, 1) != IDNA_SUCCESS) + goto notrans; + if (mutt_convert_string (out, "utf-8", Charset, M_ICONV_HOOK_TO) == -1) + goto notrans; + + /* + * make sure that we can convert back and come out with the same + * domain name. */ + + if ((flags & MI_MAY_BE_IRREVERSIBLE) == 0) + { + int irrev = 0; + char *t2 = NULL; + char *tmp = safe_strdup (*out); + if (mutt_convert_string (&tmp, Charset, "utf-8", M_ICONV_HOOK_FROM) == -1) + irrev = 1; + if (!irrev && idna_to_ascii_8z (tmp, &t2, 1) != IDNA_SUCCESS) + irrev = 1; + if (!irrev && ascii_strcasecmp (t2, in)) + { + dprint (1, (debugfile, "mutt_idna_to_local: Not reversible. in = '%s', t2 = '%s'.\n", + in, t2)); + irrev = 1; + } + + FREE (&t2); + FREE (&tmp); + + if (irrev) + goto notrans; + } + + return 0; + + notrans: + FREE (out); + *out = safe_strdup (in); + return 1; +} + +int mutt_local_to_idna (const char *in, char **out) +{ + int rv = 0; + char *tmp = safe_strdup (in); + *out = NULL; + + if (!in) + { + *out = NULL; + return -1; + } + + if (mutt_convert_string (&tmp, Charset, "utf-8", M_ICONV_HOOK_FROM) == -1) + rv = -1; + if (!rv && idna_to_ascii_8z (tmp, out, 1) != IDNA_SUCCESS) + rv = -2; + + FREE (&tmp); + if (rv < 0) + { + FREE (out); + *out = safe_strdup (in); + } + return rv; +} + +#endif + + +/* higher level functions */ + +static int mbox_to_udomain (const char *mbx, char **user, char **domain) +{ + char *p; + *user = NULL; + *domain = NULL; + + p = strchr (mbx, '@'); + if (!p) + return -1; + *user = safe_calloc((p - mbx + 1), sizeof(mbx[0])); + strfcpy (*user, mbx, (p - mbx + 1)); + *domain = safe_strdup(p + 1); + return 0; +} + +int mutt_addrlist_to_idna (ADDRESS *a, char **err) +{ + char *user = NULL, *domain = NULL; + char *tmp = NULL; + int e = 0; + + if (err) + *err = NULL; + + for (; a; a = a->next) + { + if (!a->mailbox) + continue; + if (mbox_to_udomain (a->mailbox, &user, &domain) == -1) + continue; + + if (mutt_local_to_idna (domain, &tmp) < 0) + { + e = 1; + if (err) + *err = safe_strdup (domain); + } + else + { + safe_realloc (&a->mailbox, mutt_strlen (user) + mutt_strlen (tmp) + 2); + sprintf (a->mailbox, "%s@%s", NONULL(user), NONULL(tmp)); /* __SPRINTF_CHECKED__ */ + } + + FREE (&domain); + FREE (&user); + FREE (&tmp); + + if (e) + return -1; + } + + return 0; +} + +int mutt_addrlist_to_local (ADDRESS *a) +{ + char *user, *domain; + char *tmp = NULL; + + for (; a; a = a->next) + { + if (!a->mailbox) + continue; + if (mbox_to_udomain (a->mailbox, &user, &domain) == -1) + continue; + + if (mutt_idna_to_local (domain, &tmp, 0) == 0) + { + safe_realloc (&a->mailbox, mutt_strlen (user) + mutt_strlen (tmp) + 2); + sprintf (a->mailbox, "%s@%s", NONULL (user), NONULL (tmp)); /* __SPRINTF_CHECKED__ */ + } + + FREE (&domain); + FREE (&user); + FREE (&tmp); + } + + return 0; +} + +/* convert just for displaying purposes */ +const char *mutt_addr_for_display (ADDRESS *a) +{ + static char *buff = NULL; + char *tmp = NULL; + /* user and domain will be either allocated or reseted to the NULL in + * the mbox_to_udomain(), but for safety... */ + char *domain = NULL; + char *user = NULL; + + FREE (&buff); + + if (mbox_to_udomain (a->mailbox, &user, &domain) != 0) + return a->mailbox; + if (mutt_idna_to_local (domain, &tmp, MI_MAY_BE_IRREVERSIBLE) != 0) + { + FREE (&user); + FREE (&domain); + FREE (&tmp); + return a->mailbox; + } + + safe_realloc (&buff, mutt_strlen (tmp) + mutt_strlen (user) + 2); + sprintf (buff, "%s@%s", NONULL(user), NONULL(tmp)); /* __SPRINTF_CHECKED__ */ + FREE (&tmp); + FREE (&user); + FREE (&domain); + return buff; +} + +/* Convert an ENVELOPE structure */ + +void mutt_env_to_local (ENVELOPE *e) +{ + mutt_addrlist_to_local (e->return_path); + mutt_addrlist_to_local (e->from); + mutt_addrlist_to_local (e->to); + mutt_addrlist_to_local (e->cc); + mutt_addrlist_to_local (e->bcc); + mutt_addrlist_to_local (e->reply_to); + mutt_addrlist_to_local (e->mail_followup_to); +} + +/* Note that `a' in the `env->a' expression is macro argument, not + * "real" name of an `env' compound member. Real name will be substituted + * by preprocessor at the macro-expansion time. + */ +#define H_TO_IDNA(a) \ + if (mutt_addrlist_to_idna (env->a, err) && !e) \ + { \ + if (tag) *tag = #a; e = 1; err = NULL; \ + } + +int mutt_env_to_idna (ENVELOPE *env, char **tag, char **err) +{ + int e = 0; + H_TO_IDNA(return_path); + H_TO_IDNA(from); + H_TO_IDNA(to); + H_TO_IDNA(cc); + H_TO_IDNA(bcc); + H_TO_IDNA(reply_to); + H_TO_IDNA(mail_followup_to); + return e; +} + +#undef H_TO_IDNA diff --git a/mutt_idna.h b/mutt_idna.h new file mode 100644 index 0000000..0e2534a --- /dev/null +++ b/mutt_idna.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2003 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _MUTT_IDNA_H +# define _MUTT_IDNA_H + +#include "config.h" +#include "rfc822.h" +#include "charset.h" + +#ifdef HAVE_LIBIDN +#include <idna.h> +#endif + +#define MI_MAY_BE_IRREVERSIBLE (1 << 0) + +int mutt_idna_to_local (const char *, char **, int); +int mutt_local_to_idna (const char *, char **); + +int mutt_addrlist_to_idna (ADDRESS *, char **); +int mutt_addrlist_to_local (ADDRESS *); + +void mutt_env_to_local (ENVELOPE *); +int mutt_env_to_idna (ENVELOPE *, char **, char **); + +const char *mutt_addr_for_display (ADDRESS *a); + +/* Work around incompatibilities in the libidn API */ + +#ifdef HAVE_LIBIDN +# if (!defined(HAVE_IDNA_TO_ASCII_8Z) && defined(HAVE_IDNA_TO_ASCII_FROM_UTF8)) +# define idna_to_ascii_8z(a,b,c) idna_to_ascii_from_utf8(a,b,(c)&1,((c)&2)?1:0) +# endif +# if (!defined(HAVE_IDNA_TO_ASCII_LZ) && defined(HAVE_IDNA_TO_ASCII_FROM_LOCALE)) +# define idna_to_ascii_lz(a,b,c) idna_to_ascii_from_locale(a,b,(c)&1,((c)&2)?1:0) +# endif +# if (!defined(HAVE_IDNA_TO_UNICODE_8Z8Z) && defined(HAVE_IDNA_TO_UNICODE_UTF8_FROM_UTF8)) +# define idna_to_unicode_8z8z(a,b,c) idna_to_unicode_utf8_from_utf8(a,b,(c)&1,((c)&2)?1:0) +# endif +#endif + +#endif diff --git a/mutt_libesmtp.c b/mutt_libesmtp.c new file mode 100644 index 0000000..2d1fecc --- /dev/null +++ b/mutt_libesmtp.c @@ -0,0 +1,228 @@ +#include "mutt.h" +#include <errno.h> +#include <auth-client.h> +#include <libesmtp.h> + +static char authpass[STRING] = ""; + +#define FAIL() \ + do { \ + ret = -1; \ + goto Done; \ + } while (0) +#define MSGFAIL(msg) \ + do { \ + mutt_error("%s", msg); \ + FAIL(); \ + } while (0) +#define LIBCFAIL(msg) \ + do { \ + mutt_error("%s: %s", msg, strerror(errno)); \ + FAIL(); \ + } while (0) +#define SMTPFAIL(msg) \ + do { \ + _mutt_libesmtp_perror(msg); \ + FAIL(); \ + } while (0) + +/* + * _mutt_libesmtp_ensure_init + * Make sure the libESMTP support in mutt is initialized at some time. + */ +static void +_mutt_libesmtp_ensure_init() +{ + static int libesmtp_init = 0; + + if (!libesmtp_init) { + if (SmtpAuthUser) + auth_client_init(); + libesmtp_init = 1; + } +} + +/* + * _mutt_libesmtp_perror + * Prints 'msg', a colon, and then a string representation of the + * libesmtp errno as a mutt error. + */ +static void +_mutt_libesmtp_perror(const char* msg) +{ + char buf[512]; + + mutt_error("%s: %s", msg, smtp_strerror(smtp_errno(), buf, sizeof(buf))); +} + +/* + * _mutt_libesmtp_add_recipients + * Adds every address in 'addr' as a recipient to the smtp message + * 'message'. Note that this does not mean that they will necessarily + * show up in the mail headers (e.g., when bcc'ing). Returns 0 upon + * success, -1 upon failure (and prints an error message). + * + * Very similar to sendlib.c::add_args + */ +static int +_mutt_libesmtp_add_recipients(smtp_message_t message, ADDRESS *addr) +{ + int ret = 0; + + for (; addr; addr = addr->next) { + /* weed out group mailboxes, since those are for display only */ + if (addr->mailbox && !addr->group) { + if (!smtp_add_recipient(message, addr->mailbox)) + SMTPFAIL("smtp_add_recipient"); + } + } + +Done: + return ret; +} + +static int +_mutt_libesmtp_auth_interact(auth_client_request_t request, + char **result, int fields, void *arg) +{ + int i; + + for (i = 0; i < fields; i++) { + if (request[i].flags & AUTH_USER) { + result[i] = SmtpAuthUser; + } else if (request[i].flags & AUTH_PASS) { + if (SmtpAuthPass) { + result[i] = SmtpAuthPass; + } else { + if (authpass[0] == '\0') { + char prompt[STRING]; + + snprintf(prompt, sizeof(prompt), "%s%s: ", request[i].prompt, + (request[i].flags & AUTH_CLEARTEXT) ? " (not encrypted)" : ""); + mutt_get_password(prompt, authpass, sizeof(authpass)); + } + result[i] = authpass; + } + } + } + + return 1; +} + +#define BUFLEN 8192 + +static const char* +_mutt_libesmtp_messagefp_cb(void **buf, int *len, void *arg) +{ + int octets; + + if (*buf == NULL) + *buf = malloc(BUFLEN); + + if (len == NULL) { + rewind((FILE*) arg); + return NULL; + } + + if (fgets(*buf, BUFLEN - 2, (FILE*) arg) == NULL) { + octets = 0; + } else { + char* p = strchr(*buf, '\0'); + + if (p[-1] == '\n' && p[-2] != '\r') { + strcpy(p - 1, "\r\n"); + p++; + } + octets = p - (char*) *buf; + } + + *len = octets; + return *buf; +} + +/* + * mutt_invoke_libesmtp + * Sends a mail message to the provided recipients using libesmtp. + * Returns 0 upon success, -1 upon failure (and prints an error + * message). + */ +int +mutt_invoke_libesmtp(ADDRESS *from, /* the sender */ + ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */ + const char *msg, /* file containing message */ + int eightbit) /* message contains 8bit chars */ +{ + int ret = 0; /* return value, default = success */ + smtp_session_t session; + smtp_message_t message; + char* hostportstr = NULL; + size_t hostportlen; + FILE* fp = NULL; + auth_context_t authctx = NULL; + const smtp_status_t* status; + + _mutt_libesmtp_ensure_init(); + + if ((session = smtp_create_session()) == NULL) + SMTPFAIL("smtp_create_session"); + + /* Create hostname:port string and tell libesmtp */ + /* len = SmtpHost len + colon + max port (65536 => 5 chars) + terminator */ + hostportlen = strlen(SmtpHost) + 7; + hostportstr = safe_malloc(hostportlen); + snprintf(hostportstr, hostportlen, "%s:%d", SmtpHost, SmtpPort); + if (!smtp_set_server(session, hostportstr)) + SMTPFAIL("smtp_set_server"); + + if (SmtpAuthUser) { + if ((authctx = auth_create_context()) == NULL) + MSGFAIL("auth_create_context failed"); + auth_set_mechanism_flags(authctx, AUTH_PLUGIN_PLAIN, 0); + auth_set_interact_cb(authctx, _mutt_libesmtp_auth_interact, NULL); + + if (!smtp_auth_set_context(session, authctx)) + SMTPFAIL("smtp_auth_set_context"); + } + + if ((message = smtp_add_message(session)) == NULL) + SMTPFAIL("smtp_add_message"); + /* Initialize envelope sender */ + if (!smtp_set_reverse_path(message, from->mailbox)) + SMTPFAIL("smtp_set_reverse_path"); + + if ((fp = fopen(msg, "r")) == NULL) + LIBCFAIL("fopen"); + if (!smtp_set_messagecb(message, _mutt_libesmtp_messagefp_cb, fp)) + SMTPFAIL("smtp_set_messagecb"); + if (_mutt_libesmtp_add_recipients(message, to)) + FAIL(); + if (_mutt_libesmtp_add_recipients(message, cc)) + FAIL(); + if (_mutt_libesmtp_add_recipients(message, bcc)) + FAIL(); + if (!smtp_start_session(session)) + SMTPFAIL("smtp_start_session"); + + status = smtp_message_transfer_status(message); + if (status->code < 200 || status->code > 299) { + char buf[256]; + snprintf(buf, sizeof(buf), "SMTP error while sending: %d %s", status->code, status->text); + MSGFAIL(buf); + } + +Done: + if (fp != NULL) + fclose(fp); + if (hostportstr != NULL) + free(hostportstr); + if (session != NULL) + smtp_destroy_session(session); + if (authctx != NULL) + auth_destroy_context(authctx); + + /* Forget user-entered SMTP AUTH password if send fails */ + if (ret != 0) + authpass[0] = '\0'; + + return ret; +} diff --git a/mutt_libesmtp.h b/mutt_libesmtp.h new file mode 100644 index 0000000..9470792 --- /dev/null +++ b/mutt_libesmtp.h @@ -0,0 +1,10 @@ +#if !defined(LIBESMTP_H) +#define LIBESMTP_H + +int +mutt_invoke_libesmtp (ADDRESS *from, /* the sender */ + ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */ + const char *msg, /* file containing message */ + int eightbit); /* message contains 8bit chars */ + +#endif /* !defined(LIBESMTP_H) */ diff --git a/mutt_menu.h b/mutt_menu.h new file mode 100644 index 0000000..9ed85bb --- /dev/null +++ b/mutt_menu.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * This file is named mutt_menu.h so it doesn't collide with ncurses menu.h + */ + +#include "keymap.h" +#include "mutt_regex.h" + +#define REDRAW_INDEX (1) +#define REDRAW_MOTION (1<<1) +#define REDRAW_MOTION_RESYNCH (1<<2) +#define REDRAW_CURRENT (1<<3) +#define REDRAW_STATUS (1<<4) +#define REDRAW_FULL (1<<5) +#define REDRAW_BODY (1<<6) +#define REDRAW_SIGWINCH (1<<7) + +#define M_MODEFMT "-- Mutt: %s" + +typedef struct menu_t +{ + char *title; /* the title of this menu */ + char *help; /* quickref for the current menu */ + void *data; /* extra data for the current menu */ + int current; /* current entry */ + int max; /* the number of entries in the menu */ + int redraw; /* when to redraw the screen */ + int menu; /* menu definition for keymap entries. */ + int offset; /* which screen row to start the index */ + int pagelen; /* number of entries per screen */ + int tagprefix; + + /* Setting dialog != NULL overrides normal menu behaviour. + * In dialog mode menubar is hidden and prompt keys are checked before + * normal menu movement keys. This can cause problems with scrolling, if + * prompt keys override movement keys. + */ + char **dialog; /* dialog lines themselves */ + char *prompt; /* prompt for user, similar to mutt_multi_choice */ + char *keys; /* keys used in the prompt */ + + /* callback to generate an index line for the requested element */ + void (*make_entry) (char *, size_t, struct menu_t *, int); + + /* how to search the menu */ + int (*search) (struct menu_t *, regex_t *re, int n); + + int (*tag) (struct menu_t *, int i, int m); + + /* color pair to be used for the requested element + * (default function returns ColorDefs[MT_COLOR_NORMAL]) + */ + int (*color) (int i); + + /* the following are used only by mutt_menuLoop() */ + int top; /* entry that is the top of the current page */ + int oldcurrent; /* for driver use only. */ + char *searchBuf; /* last search pattern */ + int searchDir; /* direction of search */ + int tagged; /* number of tagged entries */ +} MUTTMENU; + +void menu_jump (MUTTMENU *); +void menu_redraw_full (MUTTMENU *); +void menu_redraw_index (MUTTMENU *); +void menu_redraw_status (MUTTMENU *); +void menu_redraw_motion (MUTTMENU *); +void menu_redraw_current (MUTTMENU *); +int menu_redraw (MUTTMENU *); +void menu_first_entry (MUTTMENU *); +void menu_last_entry (MUTTMENU *); +void menu_top_page (MUTTMENU *); +void menu_bottom_page (MUTTMENU *); +void menu_middle_page (MUTTMENU *); +void menu_next_page (MUTTMENU *); +void menu_prev_page (MUTTMENU *); +void menu_next_line (MUTTMENU *); +void menu_prev_line (MUTTMENU *); +void menu_half_up (MUTTMENU *); +void menu_half_down (MUTTMENU *); +void menu_current_top (MUTTMENU *); +void menu_current_middle (MUTTMENU *); +void menu_current_bottom (MUTTMENU *); +void menu_check_recenter (MUTTMENU *); +void menu_status_line (char *, size_t, MUTTMENU *, const char *); + +MUTTMENU *mutt_new_menu (void); +void mutt_menuDestroy (MUTTMENU **); +int mutt_menuLoop (MUTTMENU *); + +/* used in both the index and pager index to make an entry. */ +void index_make_entry (char *, size_t, struct menu_t *, int); +int index_color (int); diff --git a/mutt_regex.h b/mutt_regex.h new file mode 100644 index 0000000..0f37d9d --- /dev/null +++ b/mutt_regex.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * A (more) generic interface to regular expression matching + */ + +#ifndef MUTT_REGEX_H +#define MUTT_REGEX_H + +#ifdef USE_GNU_REGEX +#include "_regex.h" +#else +#include <regex.h> +#endif + +/* this is a non-standard option supported by Solaris 2.5.x which allows + * patterns of the form \<...\> + */ +#ifndef REG_WORDS +#define REG_WORDS 0 +#endif + +#define REGCOMP(X,Y,Z) regcomp(X, Y, REG_WORDS|REG_EXTENDED|(Z)) +#define REGEXEC(X,Y) regexec(&X, Y, (size_t)0, (regmatch_t *)0, (int)0) + +typedef struct +{ + char *pattern; /* printable version */ + regex_t *rx; /* compiled expression */ + int not; /* do not match */ +} REGEXP; + +WHERE REGEXP Mask; +WHERE REGEXP QuoteRegexp; +WHERE REGEXP ReplyRegexp; +WHERE REGEXP Smileys; +WHERE REGEXP GecosMask; + +#endif /* MUTT_REGEX_H */ diff --git a/mutt_sasl.c b/mutt_sasl.c new file mode 100644 index 0000000..6a20137 --- /dev/null +++ b/mutt_sasl.c @@ -0,0 +1,670 @@ +/* + * Copyright (C) 2000-3 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* common SASL helper routines */ + +#include "mutt.h" +#include "account.h" +#include "mutt_sasl.h" +#include "mutt_socket.h" + +#ifdef USE_SASL2 +#include <netdb.h> +#include <sasl/sasl.h> +#else +#include <sasl.h> +#endif +#include <sys/socket.h> +#include <netinet/in.h> + +#ifdef USE_SASL2 +static int getnameinfo_err(int ret) +{ + int err; + dprint (1, (debugfile, "getnameinfo: ")); + switch(ret) + { + case EAI_AGAIN: + dprint (1, (debugfile, "The name could not be resolved at this time. Future attempts may succeed.\n")); + err=SASL_TRYAGAIN; + break; + case EAI_BADFLAGS: + dprint (1, (debugfile, "The flags had an invalid value.\n")); + err=SASL_BADPARAM; + break; + case EAI_FAIL: + dprint (1, (debugfile, "A non-recoverable error occurred.\n")); + err=SASL_FAIL; + break; + case EAI_FAMILY: + dprint (1, (debugfile, "The address family was not recognized or the address length was invalid for the specified family.\n")); + err=SASL_BADPROT; + break; + case EAI_MEMORY: + dprint (1, (debugfile, "There was a memory allocation failure.\n")); + err=SASL_NOMEM; + break; + case EAI_NONAME: + dprint (1, (debugfile, "The name does not resolve for the supplied parameters. NI_NAMEREQD is set and the host's name cannot be located, or both nodename and servname were null.\n")); + err=SASL_FAIL; /* no real equivalent */ + break; + case EAI_SYSTEM: + dprint (1, (debugfile, "A system error occurred. The error code can be found in errno(%d,%s)).\n",errno,strerror(errno))); + err=SASL_FAIL; /* no real equivalent */ + break; + default: + dprint (1, (debugfile, "Unknown error %d\n",ret)); + err=SASL_FAIL; /* no real equivalent */ + break; + } + return err; +} +#endif + +/* arbitrary. SASL will probably use a smaller buffer anyway. OTOH it's + * been a while since I've had access to an SASL server which negotiated + * a protection buffer. */ +#define M_SASL_MAXBUF 65536 + +#ifdef USE_SASL2 +#define IP_PORT_BUFLEN 1024 +#endif + +static sasl_callback_t mutt_sasl_callbacks[5]; + +static int mutt_sasl_start (void); + +/* callbacks */ +static int mutt_sasl_cb_log (void* context, int priority, const char* message); +static int mutt_sasl_cb_authname (void* context, int id, const char** result, + unsigned int* len); +static int mutt_sasl_cb_pass (sasl_conn_t* conn, void* context, int id, + sasl_secret_t** psecret); + +/* socket wrappers for a SASL security layer */ +static int mutt_sasl_conn_open (CONNECTION* conn); +static int mutt_sasl_conn_close (CONNECTION* conn); +static int mutt_sasl_conn_read (CONNECTION* conn, char* buf, size_t len); +static int mutt_sasl_conn_write (CONNECTION* conn, const char* buf, + size_t count); + +#ifdef USE_SASL2 +/* utility function, stolen from sasl2 sample code */ +static int iptostring(const struct sockaddr *addr, socklen_t addrlen, + char *out, unsigned outlen) { + char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV]; + int ret; + + if(!addr || !out) return SASL_BADPARAM; + + ret=getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), + NI_NUMERICHOST | +#ifdef NI_WITHSCOPEID + NI_WITHSCOPEID | +#endif + NI_NUMERICSERV); + if(ret) + return getnameinfo_err(ret); + + if(outlen < strlen(hbuf) + strlen(pbuf) + 2) + return SASL_BUFOVER; + + snprintf(out, outlen, "%s;%s", hbuf, pbuf); + + return SASL_OK; +} +#endif + +/* mutt_sasl_start: called before doing a SASL exchange - initialises library + * (if neccessary). */ +int mutt_sasl_start (void) +{ + static unsigned char sasl_init = 0; + + static sasl_callback_t callbacks[2]; + int rc; + + if (sasl_init) + return SASL_OK; + + /* set up default logging callback */ + callbacks[0].id = SASL_CB_LOG; + callbacks[0].proc = mutt_sasl_cb_log; + callbacks[0].context = NULL; + + callbacks[1].id = SASL_CB_LIST_END; + callbacks[1].proc = NULL; + callbacks[1].context = NULL; + + rc = sasl_client_init (callbacks); + + if (rc != SASL_OK) + { + dprint (1, (debugfile, "mutt_sasl_start: libsasl initialisation failed.\n")); + return SASL_FAIL; + } + + sasl_init = 1; + + return SASL_OK; +} + +/* mutt_sasl_client_new: wrapper for sasl_client_new which also sets various + * security properties. If this turns out to be fine for POP too we can + * probably stop exporting mutt_sasl_get_callbacks(). */ +int mutt_sasl_client_new (CONNECTION* conn, sasl_conn_t** saslconn) +{ + sasl_security_properties_t secprops; +#ifdef USE_SASL2 + struct sockaddr_storage local, remote; + socklen_t size; + char iplocalport[IP_PORT_BUFLEN], ipremoteport[IP_PORT_BUFLEN]; +#else + sasl_external_properties_t extprops; +#endif + const char* service; + int rc; + + if (mutt_sasl_start () != SASL_OK) + return -1; + + switch (conn->account.type) + { + case M_ACCT_TYPE_IMAP: + service = "imap"; + break; + case M_ACCT_TYPE_POP: + service = "pop-3"; + break; + default: + dprint (1, (debugfile, "mutt_sasl_client_new: account type unset\n")); + return -1; + } + +#ifdef USE_SASL2 + size = sizeof (local); + if (getsockname (conn->fd, (struct sockaddr *)&local, &size)){ + dprint (1, (debugfile, "mutt_sasl_client_new: getsockname for local failed\n")); + return -1; + } + else + if (iptostring((struct sockaddr *)&local, size, iplocalport, IP_PORT_BUFLEN) != SASL_OK){ + dprint (1, (debugfile, "mutt_sasl_client_new: iptostring for local failed\n")); + return -1; + } + + size = sizeof (remote); + if (getpeername (conn->fd, (struct sockaddr *)&remote, &size)){ + dprint (1, (debugfile, "mutt_sasl_client_new: getsockname for remote failed\n")); + return -1; + } + else + if (iptostring((struct sockaddr *)&remote, size, ipremoteport, IP_PORT_BUFLEN) != SASL_OK){ + dprint (1, (debugfile, "mutt_sasl_client_new: iptostring for remote failed\n")); + return -1; + } + +dprint(1,(debugfile, "local ip: %s, remote ip:%s\n", iplocalport, ipremoteport)); + + rc = sasl_client_new (service, conn->account.host, iplocalport, ipremoteport, + mutt_sasl_get_callbacks (&conn->account), 0, saslconn); + +#else + rc = sasl_client_new (service, conn->account.host, + mutt_sasl_get_callbacks (&conn->account), SASL_SECURITY_LAYER, saslconn); +#endif + + if (rc != SASL_OK) + { + dprint (1, (debugfile, + "mutt_sasl_client_new: Error allocating SASL connection\n")); + return -1; + } + + /*** set sasl IP properties, necessary for use with krb4 ***/ + /* Do we need to fail if this fails? I would assume having these unset + * would just disable KRB4. Who wrote this code? I'm not sure how this + * interacts with the NSS code either, since that mucks with the fd. */ +#ifndef USE_SASL2 /* with SASLv2 this all happens in sasl_client_new */ + { + struct sockaddr_in local, remote; + socklen_t size; + + size = sizeof (local); + if (getsockname (conn->fd, (struct sockaddr*) &local, &size)) + return -1; + + size = sizeof(remote); + if (getpeername(conn->fd, (struct sockaddr*) &remote, &size)) + return -1; + +#ifdef SASL_IP_LOCAL + if (sasl_setprop(*saslconn, SASL_IP_LOCAL, &local) != SASL_OK) + { + dprint (1, (debugfile, + "mutt_sasl_client_new: Error setting local IP address\n")); + return -1; + } +#endif + +#ifdef SASL_IP_REMOTE + if (sasl_setprop(*saslconn, SASL_IP_REMOTE, &remote) != SASL_OK) + { + dprint (1, (debugfile, + "mutt_sasl_client_new: Error setting remote IP address\n")); + return -1; + } +#endif + } +#endif + + /* set security properties. We use NOPLAINTEXT globally, since we can + * just fall back to LOGIN in the IMAP case anyway. If that doesn't + * work for POP, we can make it a flag or move this code into + * imap/auth_sasl.c */ + memset (&secprops, 0, sizeof (secprops)); + /* Work around a casting bug in the SASL krb4 module */ + secprops.max_ssf = 0x7fff; + secprops.maxbufsize = M_SASL_MAXBUF; + secprops.security_flags |= SASL_SEC_NOPLAINTEXT; + if (sasl_setprop (*saslconn, SASL_SEC_PROPS, &secprops) != SASL_OK) + { + dprint (1, (debugfile, + "mutt_sasl_client_new: Error setting security properties\n")); + return -1; + } + + /* we currently don't have an SSF finder for NSS (I don't know the API). + * If someone does it'd probably be trivial to write mutt_nss_get_ssf(). + * I have a feeling more SSL code could be shared between those two files, + * but I haven't looked into it yet, since I still don't know the APIs. */ +#if defined(USE_SSL) && !defined(USE_NSS) + if (conn->account.flags & M_ACCT_SSL) + { +#ifdef USE_SASL2 /* I'm not sure this actually has an effect, at least with SASLv2 */ + dprint (2, (debugfile, "External SSF: %d\n", conn->ssf)); + if (sasl_setprop (*saslconn, SASL_SSF_EXTERNAL, &(conn->ssf)) != SASL_OK) +#else + memset (&extprops, 0, sizeof (extprops)); + extprops.ssf = conn->ssf; + dprint (2, (debugfile, "External SSF: %d\n", extprops.ssf)); + if (sasl_setprop (*saslconn, SASL_SSF_EXTERNAL, &extprops) != SASL_OK) +#endif + { + dprint (1, (debugfile, "mutt_sasl_client_new: Error setting external properties\n")); + return -1; + } +#ifdef USE_SASL2 + dprint (2, (debugfile, "External authentication name: %s\n","NULL")); + if (sasl_setprop (*saslconn, SASL_AUTH_EXTERNAL, NULL) != SASL_OK) + { + dprint (1, (debugfile, "mutt_sasl_client_new: Error setting external properties\n")); + return -1; + } +#endif + } +#endif + + return 0; +} + +sasl_callback_t* mutt_sasl_get_callbacks (ACCOUNT* account) +{ + sasl_callback_t* callback; + + callback = mutt_sasl_callbacks; + + callback->id = SASL_CB_AUTHNAME; + callback->proc = mutt_sasl_cb_authname; + callback->context = account; + callback++; + + callback->id = SASL_CB_USER; + callback->proc = mutt_sasl_cb_authname; + callback->context = account; + callback++; + + callback->id = SASL_CB_PASS; + callback->proc = mutt_sasl_cb_pass; + callback->context = account; + callback++; + + callback->id = SASL_CB_GETREALM; + callback->proc = NULL; + callback->context = NULL; + callback++; + + callback->id = SASL_CB_LIST_END; + callback->proc = NULL; + callback->context = NULL; + + return mutt_sasl_callbacks; +} + +int mutt_sasl_interact (sasl_interact_t* interaction) +{ + char prompt[SHORT_STRING]; + char resp[SHORT_STRING]; + + while (interaction->id != SASL_CB_LIST_END) + { + dprint (2, (debugfile, "mutt_sasl_interact: filling in SASL interaction %ld.\n", interaction->id)); + + snprintf (prompt, sizeof (prompt), "%s: ", interaction->prompt); + resp[0] = '\0'; + if (mutt_get_field (prompt, resp, sizeof (resp), 0)) + return SASL_FAIL; + + interaction->len = mutt_strlen (resp)+1; + interaction->result = safe_malloc (interaction->len); + memcpy (interaction->result, resp, interaction->len); + + interaction++; + } + + return SASL_OK; +} + +/* SASL can stack a protection layer on top of an existing connection. + * To handle this, we store a saslconn_t in conn->sockdata, and write + * wrappers which en/decode the read/write stream, then replace sockdata + * with an embedded copy of the old sockdata and call the underlying + * functions (which we've also preserved). I thought about trying to make + * a general stackable connection system, but it seemed like overkill - + * something is wrong if we have 15 filters on top of a socket. Anyway, + * anything else which wishes to stack can use the same method. The only + * disadvantage is we have to write wrappers for all the socket methods, + * even if we only stack over read and write. Thinking about it, the + * abstraction problem is that there is more in CONNECTION than there + * needs to be. Ideally it would have only (void*)data and methods. */ + +/* mutt_sasl_setup_conn: replace connection methods, sockdata with + * SASL wrappers, for protection layers. Also get ssf, as a fastpath + * for the read/write methods. */ +void mutt_sasl_setup_conn (CONNECTION* conn, sasl_conn_t* saslconn) +{ + SASL_DATA* sasldata = (SASL_DATA*) safe_malloc (sizeof (SASL_DATA)); + + sasldata->saslconn = saslconn; + /* get ssf so we know whether we have to (en|de)code read/write */ +#ifdef USE_SASL2 + sasl_getprop (saslconn, SASL_SSF, (const void**) &sasldata->ssf); +#else + sasl_getprop (saslconn, SASL_SSF, (void**) &sasldata->ssf); +#endif + dprint (3, (debugfile, "SASL protection strength: %u\n", *sasldata->ssf)); + /* Add SASL SSF to transport SSF */ + conn->ssf += *sasldata->ssf; +#ifdef USE_SASL2 + sasl_getprop (saslconn, SASL_MAXOUTBUF, (const void**) &sasldata->pbufsize); +#else + sasl_getprop (saslconn, SASL_MAXOUTBUF, (void**) &sasldata->pbufsize); +#endif + dprint (3, (debugfile, "SASL protection buffer size: %u\n", *sasldata->pbufsize)); + + /* clear input buffer */ + sasldata->buf = NULL; + sasldata->bpos = 0; + sasldata->blen = 0; + + /* preserve old functions */ + sasldata->sockdata = conn->sockdata; + sasldata->open = conn->open; + sasldata->close = conn->close; + sasldata->read = conn->read; + sasldata->write = conn->write; + + /* and set up new functions */ + conn->sockdata = sasldata; + conn->open = mutt_sasl_conn_open; + conn->close = mutt_sasl_conn_close; + conn->read = mutt_sasl_conn_read; + conn->write = mutt_sasl_conn_write; +} + +/* mutt_sasl_cb_log: callback to log SASL messages */ +static int mutt_sasl_cb_log (void* context, int priority, const char* message) +{ + dprint (priority, (debugfile, "SASL: %s\n", message)); + + return SASL_OK; +} + +/* mutt_sasl_cb_authname: callback to retrieve authname or user (mutt + * doesn't distinguish, even if some SASL plugins do) from ACCOUNT */ +static int mutt_sasl_cb_authname (void* context, int id, const char** result, + unsigned* len) +{ + ACCOUNT* account = (ACCOUNT*) context; + + *result = NULL; + if (len) + *len = 0; + + if (!account) + return SASL_BADPARAM; + + dprint (2, (debugfile, "mutt_sasl_cb_authname: getting %s for %s:%u\n", + id == SASL_CB_AUTHNAME ? "authname" : "user", + account->host, account->port)); + + if (mutt_account_getuser (account)) + return SASL_FAIL; + + *result = account->user; + + if (len) + *len = strlen (*result); + + return SASL_OK; +} + +static int mutt_sasl_cb_pass (sasl_conn_t* conn, void* context, int id, + sasl_secret_t** psecret) +{ + ACCOUNT* account = (ACCOUNT*) context; + int len; + + if (!account || !psecret) + return SASL_BADPARAM; + + dprint (2, (debugfile, + "mutt_sasl_cb_pass: getting password for %s@%s:%u\n", account->user, + account->host, account->port)); + + if (mutt_account_getpass (account)) + return SASL_FAIL; + + len = strlen (account->pass); + + *psecret = (sasl_secret_t*) safe_malloc (sizeof (sasl_secret_t) + len); + (*psecret)->len = len; + strcpy ((*psecret)->data, account->pass); /* __STRCPY_CHECKED__ */ + + return SASL_OK; +} + +/* mutt_sasl_conn_open: empty wrapper for underlying open function. We + * don't know in advance that a connection will use SASL, so we + * replace conn's methods with sasl methods when authentication + * is successful, using mutt_sasl_setup_conn */ +static int mutt_sasl_conn_open (CONNECTION* conn) +{ + SASL_DATA* sasldata; + int rc; + + sasldata = (SASL_DATA*) conn->sockdata; + conn->sockdata = sasldata->sockdata; + rc = (sasldata->open) (conn); + conn->sockdata = sasldata; + + return rc; +} + +/* mutt_sasl_conn_close: calls underlying close function and disposes of + * the sasl_conn_t object, then restores connection to pre-sasl state */ +static int mutt_sasl_conn_close (CONNECTION* conn) +{ + SASL_DATA* sasldata; + int rc; + + sasldata = (SASL_DATA*) conn->sockdata; + + /* restore connection's underlying methods */ + conn->sockdata = sasldata->sockdata; + conn->open = sasldata->open; + conn->close = sasldata->close; + conn->read = sasldata->read; + conn->write = sasldata->write; + + /* release sasl resources */ + sasl_dispose (&sasldata->saslconn); +#ifndef USE_SASL2 + FREE (&sasldata->buf); +#endif + FREE (&sasldata); + + /* call underlying close */ + rc = (conn->close) (conn); + + return rc; +} + +static int mutt_sasl_conn_read (CONNECTION* conn, char* buf, size_t len) +{ + SASL_DATA* sasldata; + int rc; + + unsigned int olen; + + sasldata = (SASL_DATA*) conn->sockdata; + + /* if we still have data in our read buffer, copy it into buf */ + if (sasldata->blen > sasldata->bpos) + { + olen = (sasldata->blen - sasldata->bpos > len) ? len : + sasldata->blen - sasldata->bpos; + + memcpy (buf, sasldata->buf+sasldata->bpos, olen); + sasldata->bpos += olen; + + return olen; + } + + conn->sockdata = sasldata->sockdata; + +#ifndef USE_SASL2 + FREE (&sasldata->buf); +#endif + sasldata->bpos = 0; + sasldata->blen = 0; + + /* and decode the result, if necessary */ + if (*sasldata->ssf) + { + do + { + /* call the underlying read function to fill the buffer */ + rc = (sasldata->read) (conn, buf, len); + if (rc <= 0) + goto out; + + rc = sasl_decode (sasldata->saslconn, buf, rc, &sasldata->buf, + &sasldata->blen); + if (rc != SASL_OK) + { + dprint (1, (debugfile, "SASL decode failed: %s\n", + sasl_errstring (rc, NULL, NULL))); + goto out; + } + } + while (!sasldata->blen); + + olen = (sasldata->blen - sasldata->bpos > len) ? len : + sasldata->blen - sasldata->bpos; + + memcpy (buf, sasldata->buf, olen); + sasldata->bpos += olen; + + rc = olen; + } + else + rc = (sasldata->read) (conn, buf, len); + + out: + conn->sockdata = sasldata; + + return rc; +} + +static int mutt_sasl_conn_write (CONNECTION* conn, const char* buf, + size_t len) +{ + SASL_DATA* sasldata; + int rc; + +#ifdef USE_SASL2 + const char *pbuf; +#else + char* pbuf; +#endif + unsigned int olen, plen; + + sasldata = (SASL_DATA*) conn->sockdata; + conn->sockdata = sasldata->sockdata; + + /* encode data, if necessary */ + if (*sasldata->ssf) + { + /* handle data larger than MAXOUTBUF */ + do + { + olen = (len > *sasldata->pbufsize) ? *sasldata->pbufsize : len; + + rc = sasl_encode (sasldata->saslconn, buf, olen, &pbuf, &plen); + if (rc != SASL_OK) + { + dprint (1, (debugfile, "SASL encoding failed: %s\n", + sasl_errstring (rc, NULL, NULL))); + goto fail; + } + + rc = (sasldata->write) (conn, pbuf, plen); +#ifndef USE_SASL2 + FREE (&pbuf); +#endif + if (rc != plen) + goto fail; + + len -= olen; + buf += olen; + } + while (len > *sasldata->pbufsize); + } + else + /* just write using the underlying socket function */ + rc = (sasldata->write) (conn, buf, len); + + conn->sockdata = sasldata; + + return rc; + + fail: + conn->sockdata = sasldata; + return -1; +} diff --git a/mutt_sasl.h b/mutt_sasl.h new file mode 100644 index 0000000..eaba032 --- /dev/null +++ b/mutt_sasl.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2000-1 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* common SASL helper routines */ + +#ifndef _MUTT_SASL_H_ +#define _MUTT_SASL_H_ 1 + +#ifdef USE_SASL2 +#include <sasl/sasl.h> +#else +#include <sasl.h> +#endif + +#include "mutt_socket.h" + +int mutt_sasl_client_new (CONNECTION*, sasl_conn_t**); +sasl_callback_t* mutt_sasl_get_callbacks (ACCOUNT*); +int mutt_sasl_interact (sasl_interact_t*); +void mutt_sasl_setup_conn (CONNECTION*, sasl_conn_t*); + +typedef struct +{ + sasl_conn_t* saslconn; + const sasl_ssf_t* ssf; + const unsigned int* pbufsize; + + /* read buffer */ +#ifdef USE_SASL2 + const char *buf; +#else + char* buf; +#endif + unsigned int blen; + unsigned int bpos; + + /* underlying socket data */ + void* sockdata; + int (*open) (CONNECTION* conn); + int (*close) (CONNECTION* conn); + int (*read) (CONNECTION* conn, char* buf, size_t len); + int (*write) (CONNECTION* conn, const char* buf, size_t count); +} +SASL_DATA; + +#endif /* _MUTT_SASL_H_ */ diff --git a/mutt_socket.c b/mutt_socket.c new file mode 100644 index 0000000..50ee94d --- /dev/null +++ b/mutt_socket.c @@ -0,0 +1,526 @@ +/* + * Copyright (C) 1998 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com> + * Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "globals.h" +#include "mutt_socket.h" +#include "mutt_tunnel.h" +#ifdef USE_SSL +# include "mutt_ssl.h" +#endif + +#include "mutt_idna.h" + +#include <unistd.h> +#include <netinet/in.h> +#include <netdb.h> +#include <stdlib.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <string.h> +#include <errno.h> + +/* support for multiple socket connections */ +static CONNECTION *Connections = NULL; + +/* forward declarations */ +static int socket_preconnect (void); +static int socket_connect (int fd, struct sockaddr* sa); +static CONNECTION* socket_new_conn (); + +/* Wrappers */ +int mutt_socket_open (CONNECTION* conn) +{ + if (socket_preconnect ()) + return -1; + + return conn->open (conn); +} + +int mutt_socket_close (CONNECTION* conn) +{ + int rc = -1; + + if (conn->fd < 0) + dprint (1, (debugfile, "mutt_socket_close: Attempt to close closed connection.\n")); + else + rc = conn->close (conn); + + conn->fd = -1; + conn->ssf = 0; + + return rc; +} + +int mutt_socket_read (CONNECTION* conn, char* buf, size_t len) +{ + int rc; + + if (conn->fd < 0) + { + dprint (1, (debugfile, "mutt_socket_read: attempt to read from closed connection\n")); + return -1; + } + + rc = conn->read (conn, buf, len); + /* EOF */ + if (rc == 0) + { + mutt_error (_("Connection to %s closed"), conn->account.host); + mutt_sleep (2); + } + if (rc <= 0) + mutt_socket_close (conn); + + return rc; +} + +int mutt_socket_write_d (CONNECTION *conn, const char *buf, int dbg) +{ + int rc; + int len; + + dprint (dbg, (debugfile,"> %s", buf)); + + if (conn->fd < 0) + { + dprint (1, (debugfile, "mutt_socket_write: attempt to write to closed connection\n")); + return -1; + } + + len = mutt_strlen (buf); + if ((rc = conn->write (conn, buf, len)) < 0) + { + dprint (1, (debugfile, + "mutt_socket_write: error writing, closing socket\n")); + mutt_socket_close (conn); + + return -1; + } + + if (rc < len) + { + dprint (1, (debugfile, + "mutt_socket_write: ERROR: wrote %d of %d bytes!\n", rc, len)); + } + + return rc; +} + +/* simple read buffering to speed things up. */ +int mutt_socket_readchar (CONNECTION *conn, char *c) +{ + if (conn->bufpos >= conn->available) + { + if (conn->fd >= 0) + conn->available = conn->read (conn, conn->inbuf, sizeof (conn->inbuf)); + else + { + dprint (1, (debugfile, "mutt_socket_readchar: attempt to read from closed connection.\n")); + return -1; + } + conn->bufpos = 0; + if (conn->available == 0) + { + mutt_error (_("Connection to %s closed"), conn->account.host); + mutt_sleep (2); + } + if (conn->available <= 0) + { + mutt_socket_close (conn); + return -1; + } + } + *c = conn->inbuf[conn->bufpos]; + conn->bufpos++; + return 1; +} + +int mutt_socket_readln_d (char* buf, size_t buflen, CONNECTION* conn, int dbg) +{ + char ch; + int i; + + for (i = 0; i < buflen-1; i++) + { + if (mutt_socket_readchar (conn, &ch) != 1) + { + buf[i] = '\0'; + return -1; + } + + if (ch == '\n') + break; + buf[i] = ch; + } + + /* strip \r from \r\n termination */ + if (i && buf[i-1] == '\r') + buf[--i] = '\0'; + else + buf[i] = '\0'; + + dprint (dbg, (debugfile, "< %s\n", buf)); + + /* number of bytes read, not strlen */ + return i + 1; +} + +CONNECTION* mutt_socket_head (void) +{ + return Connections; +} + +/* mutt_socket_free: remove connection from connection list and free it */ +void mutt_socket_free (CONNECTION* conn) +{ + CONNECTION* iter; + CONNECTION* tmp; + + iter = Connections; + + /* head is special case, doesn't need prev updated */ + if (iter == conn) + { + Connections = iter->next; + FREE (&iter); + return; + } + + while (iter->next) + { + if (iter->next == conn) + { + tmp = iter->next; + iter->next = tmp->next; + FREE (&tmp); + return; + } + iter = iter->next; + } +} + +/* mutt_conn_find: find a connection off the list of connections whose + * account matches account. If start is not null, only search for + * connections after the given connection (allows higher level socket code + * to make more fine-grained searches than account info - eg in IMAP we may + * wish to find a connection which is not in IMAP_SELECTED state) */ +CONNECTION* mutt_conn_find (const CONNECTION* start, const ACCOUNT* account) +{ + CONNECTION* conn; + ciss_url_t url; + char hook[LONG_STRING]; + + /* account isn't actually modified, since url isn't either */ + mutt_account_tourl ((ACCOUNT*) account, &url); + url.path = NULL; + url_ciss_tostring (&url, hook, sizeof (hook), 0); + mutt_account_hook (hook); + + conn = start ? start->next : Connections; + while (conn) + { + if (mutt_account_match (account, &(conn->account))) + return conn; + conn = conn->next; + } + + conn = socket_new_conn (); + memcpy (&conn->account, account, sizeof (ACCOUNT)); + + conn->next = Connections; + Connections = conn; + + if (Tunnel && *Tunnel) + mutt_tunnel_socket_setup (conn); + else if (account->flags & M_ACCT_SSL) + { +#ifdef USE_SSL + ssl_socket_setup (conn); +#elif USE_NSS + mutt_nss_socket_setup (conn); +#else + mutt_error _("SSL is unavailable."); + mutt_sleep (2); + mutt_socket_free (conn); + + return NULL; +#endif + } + else + { + conn->read = raw_socket_read; + conn->write = raw_socket_write; + conn->open = raw_socket_open; + conn->close = raw_socket_close; + } + + return conn; +} + +static int socket_preconnect (void) +{ + int rc; + int save_errno; + + if (mutt_strlen (Preconnect)) + { + dprint (2, (debugfile, "Executing preconnect: %s\n", Preconnect)); + rc = mutt_system (Preconnect); + dprint (2, (debugfile, "Preconnect result: %d\n", rc)); + if (rc) + { + save_errno = errno; + mutt_perror (_("Preconnect command failed.")); + mutt_sleep (1); + + return save_errno; + } + } + + return 0; +} + +/* socket_connect: set up to connect to a socket fd. */ +static int socket_connect (int fd, struct sockaddr* sa) +{ + int sa_size; + int save_errno; + + if (sa->sa_family == AF_INET) + sa_size = sizeof (struct sockaddr_in); +#ifdef HAVE_GETADDRINFO + else if (sa->sa_family == AF_INET6) + sa_size = sizeof (struct sockaddr_in6); +#endif + else + { + dprint (1, (debugfile, "Unknown address family!\n")); + return -1; + } + + if (ConnectTimeout > 0) + alarm (ConnectTimeout); + + mutt_allow_interrupt (1); + + save_errno = 0; + + if (connect (fd, sa, sa_size) < 0) + { + save_errno = errno; + dprint (2, (debugfile, "Connection failed. errno: %d...\n", errno)); + SigInt = 0; /* reset in case we caught SIGINTR while in connect() */ + } + + if (ConnectTimeout > 0) + alarm (0); + mutt_allow_interrupt (0); + + return save_errno; +} + +/* socket_new_conn: allocate and initialise a new connection. */ +static CONNECTION* socket_new_conn () +{ + CONNECTION* conn; + + conn = (CONNECTION *) safe_calloc (1, sizeof (CONNECTION)); + conn->fd = -1; + + return conn; +} + +int raw_socket_close (CONNECTION *conn) +{ + return close (conn->fd); +} + +int raw_socket_read (CONNECTION* conn, char* buf, size_t len) +{ + int rc; + + if ((rc = read (conn->fd, buf, len)) == -1) + { + mutt_error (_("Error talking to %s (%s)"), conn->account.host, + strerror (errno)); + mutt_sleep (2); + } + + return rc; +} + +int raw_socket_write (CONNECTION* conn, const char* buf, size_t count) +{ + int rc; + + if ((rc = write (conn->fd, buf, count)) == -1) + { + mutt_error (_("Error talking to %s (%s)"), conn->account.host, + strerror (errno)); + mutt_sleep (2); + } + + return rc; +} + +int raw_socket_open (CONNECTION* conn) +{ + int rc; + int fd; + + char *host_idna = NULL; + +#ifdef HAVE_GETADDRINFO +/* --- IPv4/6 --- */ + + /* "65536\0" */ + char port[6]; + struct addrinfo hints; + struct addrinfo* res; + struct addrinfo* cur; + + /* we accept v4 or v6 STREAM sockets */ + memset (&hints, 0, sizeof (hints)); + + if (option (OPTUSEIPV6)) + hints.ai_family = AF_UNSPEC; + else + hints.ai_family = AF_INET; + + hints.ai_socktype = SOCK_STREAM; + + snprintf (port, sizeof (port), "%d", conn->account.port); + +# ifdef HAVE_LIBIDN + if (idna_to_ascii_lz (conn->account.host, &host_idna, 1) != IDNA_SUCCESS) + { + mutt_error (_("Bad IDN \"%s\"."), conn->account.host); + return -1; + } +# else + host_idna = conn->account.host; +# endif + + mutt_message (_("Looking up %s..."), conn->account.host); + + + rc = getaddrinfo (host_idna, port, &hints, &res); + +# ifdef HAVE_LIBIDN + FREE (&host_idna); +# endif + + if (rc) + { + mutt_error (_("Could not find the host \"%s\""), conn->account.host); + return -1; + } + + mutt_message (_("Connecting to %s..."), conn->account.host); + + rc = -1; + for (cur = res; cur != NULL; cur = cur->ai_next) + { + fd = socket (cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd >= 0) + { + if ((rc = socket_connect (fd, cur->ai_addr)) == 0) + { + fcntl (fd, F_SETFD, FD_CLOEXEC); + conn->fd = fd; + break; + } + else + close (fd); + } + } + + freeaddrinfo (res); + +#else + /* --- IPv4 only --- */ + + struct sockaddr_in sin; + struct hostent* he; + int i; + + memset (&sin, 0, sizeof (sin)); + sin.sin_port = htons (conn->account.port); + sin.sin_family = AF_INET; + +# ifdef HAVE_LIBIDN + if (idna_to_ascii_lz (conn->account.host, &host_idna, 1) != IDNA_SUCCESS) + { + mutt_error (_("Bad IDN \"%s\"."), conn->account.host); + return -1; + } +# else + host_idna = conn->account.host; +# endif + + mutt_message (_("Looking up %s..."), conn->account.host); + + if ((he = gethostbyname (host_idna)) == NULL) + { +# ifdef HAVE_LIBIDN + FREE (&host_idna); +# endif + mutt_error (_("Could not find the host \"%s\""), conn->account.host); + + return -1; + } + +# ifdef HAVE_LIBIDN + FREE (&host_idna); +# endif + + mutt_message (_("Connecting to %s..."), conn->account.host); + + rc = -1; + for (i = 0; he->h_addr_list[i] != NULL; i++) + { + memcpy (&sin.sin_addr, he->h_addr_list[i], he->h_length); + fd = socket (PF_INET, SOCK_STREAM, IPPROTO_IP); + + if (fd >= 0) + { + if ((rc = socket_connect (fd, (struct sockaddr*) &sin)) == 0) + { + conn->fd = fd; + break; + } + else + close (fd); + } + } + +#endif + if (rc) + { + mutt_error (_("Could not connect to %s (%s)."), conn->account.host, + (rc > 0) ? strerror (rc) : _("unknown error")); + mutt_sleep (2); + return -1; + } + + return 0; +} diff --git a/mutt_socket.h b/mutt_socket.h new file mode 100644 index 0000000..ce191fb --- /dev/null +++ b/mutt_socket.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 1998 Brandon Long <blong@fiction.net> + * Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _MUTT_SOCKET_H_ +#define _MUTT_SOCKET_H_ 1 + +#include "account.h" +#include "lib.h" + +/* logging levels */ +#define M_SOCK_LOG_CMD 2 +#define M_SOCK_LOG_HDR 3 +#define M_SOCK_LOG_FULL 4 + +typedef struct _connection +{ + ACCOUNT account; + /* security strength factor, in bits */ + unsigned int ssf; + void *data; + + char inbuf[LONG_STRING]; + int bufpos; + + int fd; + int available; + + struct _connection *next; + + void *sockdata; + int (*read) (struct _connection* conn, char* buf, size_t len); + int (*write) (struct _connection *conn, const char *buf, size_t count); + int (*open) (struct _connection *conn); + int (*close) (struct _connection *conn); +} CONNECTION; + +int mutt_socket_open (CONNECTION* conn); +int mutt_socket_close (CONNECTION* conn); +int mutt_socket_read (CONNECTION* conn, char* buf, size_t len); +int mutt_socket_readchar (CONNECTION *conn, char *c); +#define mutt_socket_readln(A,B,C) mutt_socket_readln_d(A,B,C,M_SOCK_LOG_CMD) +int mutt_socket_readln_d (char *buf, size_t buflen, CONNECTION *conn, int dbg); +#define mutt_socket_write(A,B) mutt_socket_write_d(A,B,M_SOCK_LOG_CMD); +int mutt_socket_write_d (CONNECTION *conn, const char *buf, int dbg); + +/* stupid hack for imap_logout_all */ +CONNECTION* mutt_socket_head (void); +void mutt_socket_free (CONNECTION* conn); +CONNECTION* mutt_conn_find (const CONNECTION* start, const ACCOUNT* account); + +int raw_socket_read (CONNECTION* conn, char* buf, size_t len); +int raw_socket_write (CONNECTION* conn, const char* buf, size_t count); +int raw_socket_open (CONNECTION *conn); +int raw_socket_close (CONNECTION *conn); + +#endif /* _MUTT_SOCKET_H_ */ diff --git a/mutt_ssl.c b/mutt_ssl.c new file mode 100644 index 0000000..1f847a4 --- /dev/null +++ b/mutt_ssl.c @@ -0,0 +1,669 @@ +/* + * Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* for SSL NO_* defines */ +#include "config.h" + +#include <openssl/ssl.h> +#include <openssl/x509.h> +#include <openssl/err.h> +#include <openssl/rand.h> + +#undef _ + +#include <string.h> + +#include "mutt.h" +#include "mutt_socket.h" +#include "mutt_menu.h" +#include "mutt_curses.h" +#include "mutt_ssl.h" + +#if OPENSSL_VERSION_NUMBER >= 0x00904000L +#define READ_X509_KEY(fp, key) PEM_read_X509(fp, key, NULL, NULL) +#else +#define READ_X509_KEY(fp, key) PEM_read_X509(fp, key, NULL) +#endif + +/* Just in case OpenSSL doesn't define DEVRANDOM */ +#ifndef DEVRANDOM +#define DEVRANDOM "/dev/urandom" +#endif + +/* This is ugly, but as RAND_status came in on OpenSSL version 0.9.5 + * and the code has to support older versions too, this is seemed to + * be cleaner way compared to having even uglier #ifdefs all around. + */ +#ifdef HAVE_RAND_STATUS +#define HAVE_ENTROPY() (RAND_status() == 1) +#else +static int entropy_byte_count = 0; +/* OpenSSL fills the entropy pool from /dev/urandom if it exists */ +#define HAVE_ENTROPY() (!access(DEVRANDOM, R_OK) || entropy_byte_count >= 16) +#endif + +typedef struct _sslsockdata +{ + SSL_CTX *ctx; + SSL *ssl; + X509 *cert; +} +sslsockdata; + +/* local prototypes */ +int ssl_init (void); +static int add_entropy (const char *file); +static int ssl_check_certificate (sslsockdata * data); +static int ssl_socket_read (CONNECTION* conn, char* buf, size_t len); +static int ssl_socket_write (CONNECTION* conn, const char* buf, size_t len); +static int ssl_socket_open (CONNECTION * conn); +static int ssl_socket_close (CONNECTION * conn); +static int tls_close (CONNECTION* conn); +int ssl_negotiate (sslsockdata*); + +/* mutt_ssl_starttls: Negotiate TLS over an already opened connection. + * TODO: Merge this code better with ssl_socket_open. */ +int mutt_ssl_starttls (CONNECTION* conn) +{ + sslsockdata* ssldata; + int maxbits; + + if (ssl_init()) + goto bail; + + ssldata = (sslsockdata*) safe_calloc (1, sizeof (sslsockdata)); + /* the ssl_use_xxx protocol options don't apply. We must use TLS in TLS. */ + if (! (ssldata->ctx = SSL_CTX_new (TLSv1_client_method ()))) + { + dprint (1, (debugfile, "mutt_ssl_starttls: Error allocating SSL_CTX\n")); + goto bail_ssldata; + } + + if (! (ssldata->ssl = SSL_new (ssldata->ctx))) + { + dprint (1, (debugfile, "mutt_ssl_starttls: Error allocating SSL\n")); + goto bail_ctx; + } + + if (SSL_set_fd (ssldata->ssl, conn->fd) != 1) + { + dprint (1, (debugfile, "mutt_ssl_starttls: Error setting fd\n")); + goto bail_ssl; + } + + if (ssl_negotiate (ssldata)) + goto bail_ssl; + + /* hmm. watch out if we're starting TLS over any method other than raw. */ + conn->sockdata = ssldata; + conn->read = ssl_socket_read; + conn->write = ssl_socket_write; + conn->close = tls_close; + + conn->ssf = SSL_CIPHER_get_bits (SSL_get_current_cipher (ssldata->ssl), + &maxbits); + + return 0; + + bail_ssl: + FREE (&ssldata->ssl); + bail_ctx: + FREE (&ssldata->ctx); + bail_ssldata: + FREE (&ssldata); + bail: + return -1; +} + +/* + * OpenSSL library needs to be fed with sufficient entropy. On systems + * with /dev/urandom, this is done transparently by the library itself, + * on other systems we need to fill the entropy pool ourselves. + * + * Even though only OpenSSL 0.9.5 and later will complain about the + * lack of entropy, we try to our best and fill the pool with older + * versions also. (That's the reason for the ugly #ifdefs and macros, + * otherwise I could have simply #ifdef'd the whole ssl_init funcion) + */ +int ssl_init (void) +{ + char path[_POSIX_PATH_MAX]; + static unsigned char init_complete = 0; + + if (init_complete) + return 0; + + if (! HAVE_ENTROPY()) + { + /* load entropy from files */ + add_entropy (SslEntropyFile); + add_entropy (RAND_file_name (path, sizeof (path))); + + /* load entropy from egd sockets */ +#ifdef HAVE_RAND_EGD + add_entropy (getenv ("EGDSOCKET")); + snprintf (path, sizeof(path), "%s/.entropy", NONULL(Homedir)); + add_entropy (path); + add_entropy ("/tmp/entropy"); +#endif + + /* shuffle $RANDFILE (or ~/.rnd if unset) */ + RAND_write_file (RAND_file_name (path, sizeof (path))); + mutt_clear_error (); + if (! HAVE_ENTROPY()) + { + mutt_error (_("Failed to find enough entropy on your system")); + mutt_sleep (2); + return -1; + } + } + + /* I don't think you can do this just before reading the error. The call + * itself might clobber the last SSL error. */ + SSL_load_error_strings(); + SSL_library_init(); + init_complete = 1; + return 0; +} + +static int add_entropy (const char *file) +{ + struct stat st; + int n = -1; + + if (!file) return 0; + + if (stat (file, &st) == -1) + return errno == ENOENT ? 0 : -1; + + mutt_message (_("Filling entropy pool: %s...\n"), + file); + + /* check that the file permissions are secure */ + if (st.st_uid != getuid () || + ((st.st_mode & (S_IWGRP | S_IRGRP)) != 0) || + ((st.st_mode & (S_IWOTH | S_IROTH)) != 0)) + { + mutt_error (_("%s has insecure permissions!"), file); + mutt_sleep (2); + return -1; + } + +#ifdef HAVE_RAND_EGD + n = RAND_egd (file); +#endif + if (n <= 0) + n = RAND_load_file (file, -1); + +#ifndef HAVE_RAND_STATUS + if (n > 0) entropy_byte_count += n; +#endif + return n; +} + +static int ssl_socket_open_err (CONNECTION *conn) +{ + mutt_error (_("SSL disabled due the lack of entropy")); + mutt_sleep (2); + return -1; +} + + +int ssl_socket_setup (CONNECTION * conn) +{ + if (ssl_init() < 0) + { + conn->open = ssl_socket_open_err; + return -1; + } + + conn->open = ssl_socket_open; + conn->read = ssl_socket_read; + conn->write = ssl_socket_write; + conn->close = ssl_socket_close; + + return 0; +} + +static int ssl_socket_read (CONNECTION* conn, char* buf, size_t len) +{ + sslsockdata *data = conn->sockdata; + return SSL_read (data->ssl, buf, len); +} + +static int ssl_socket_write (CONNECTION* conn, const char* buf, size_t len) +{ + sslsockdata *data = conn->sockdata; + return SSL_write (data->ssl, buf, len); +} + +static int ssl_socket_open (CONNECTION * conn) +{ + sslsockdata *data; + int maxbits; + + if (raw_socket_open (conn) < 0) + return -1; + + data = (sslsockdata *) safe_calloc (1, sizeof (sslsockdata)); + conn->sockdata = data; + + data->ctx = SSL_CTX_new (SSLv23_client_method ()); + + /* disable SSL protocols as needed */ + if (!option(OPTTLSV1)) + { + SSL_CTX_set_options(data->ctx, SSL_OP_NO_TLSv1); + } + if (!option(OPTSSLV2)) + { + SSL_CTX_set_options(data->ctx, SSL_OP_NO_SSLv2); + } + if (!option(OPTSSLV3)) + { + SSL_CTX_set_options(data->ctx, SSL_OP_NO_SSLv3); + } + + data->ssl = SSL_new (data->ctx); + SSL_set_fd (data->ssl, conn->fd); + + if (ssl_negotiate(data)) + { + mutt_socket_close (conn); + return -1; + } + + conn->ssf = SSL_CIPHER_get_bits (SSL_get_current_cipher (data->ssl), + &maxbits); + + return 0; +} + +/* ssl_negotiate: After SSL state has been initialised, attempt to negotiate + * SSL over the wire, including certificate checks. */ +int ssl_negotiate (sslsockdata* ssldata) +{ + int err; + const char* errmsg; + +#if OPENSSL_VERSION_NUMBER >= 0x00906000L + /* This only exists in 0.9.6 and above. Without it we may get interrupted + * reads or writes. Bummer. */ + SSL_set_mode (ssldata->ssl, SSL_MODE_AUTO_RETRY); +#endif + + if ((err = SSL_connect (ssldata->ssl)) != 1) + { + switch (SSL_get_error (ssldata->ssl, err)) + { + case SSL_ERROR_SYSCALL: + errmsg = _("I/O error"); + break; + case SSL_ERROR_SSL: + errmsg = _("unspecified protocol error"); + break; + default: + errmsg = _("unknown error"); + } + + mutt_error (_("SSL failed: %s"), errmsg); + mutt_sleep (1); + + return -1; + } + + ssldata->cert = SSL_get_peer_certificate (ssldata->ssl); + if (!ssldata->cert) + { + mutt_error (_("Unable to get certificate from peer")); + mutt_sleep (1); + return -1; + } + + if (!ssl_check_certificate (ssldata)) + return -1; + + mutt_message (_("SSL connection using %s (%s)"), + SSL_get_cipher_version (ssldata->ssl), SSL_get_cipher_name (ssldata->ssl)); + mutt_sleep (0); + + return 0; +} + +static int ssl_socket_close (CONNECTION * conn) +{ + sslsockdata *data = conn->sockdata; + if (data) + { + SSL_shutdown (data->ssl); + + X509_free (data->cert); + SSL_free (data->ssl); + SSL_CTX_free (data->ctx); + FREE (&conn->sockdata); + } + + return raw_socket_close (conn); +} + +static int tls_close (CONNECTION* conn) +{ + int rc; + + rc = ssl_socket_close (conn); + conn->read = raw_socket_read; + conn->write = raw_socket_write; + conn->close = raw_socket_close; + + return rc; +} + +static char *x509_get_part (char *line, const char *ndx) +{ + static char ret[SHORT_STRING]; + char *c, *c2; + + strfcpy (ret, _("Unknown"), sizeof (ret)); + + c = strstr (line, ndx); + if (c) + { + c += strlen (ndx); + c2 = strchr (c, '/'); + if (c2) + *c2 = '\0'; + strfcpy (ret, c, sizeof (ret)); + if (c2) + *c2 = '/'; + } + + return ret; +} + +static void x509_fingerprint (char *s, int l, X509 * cert) +{ + unsigned char md[EVP_MAX_MD_SIZE]; + unsigned int n; + int j; + + if (!X509_digest (cert, EVP_md5 (), md, &n)) + { + snprintf (s, l, _("[unable to calculate]")); + } + else + { + for (j = 0; j < (int) n; j++) + { + char ch[8]; + snprintf (ch, 8, "%02X%s", md[j], (j % 2 ? " " : "")); + strncat (s, ch, l); + } + } +} + +static char *asn1time_to_string (ASN1_UTCTIME *tm) +{ + static char buf[64]; + BIO *bio; + + strfcpy (buf, _("[invalid date]"), sizeof (buf)); + + bio = BIO_new (BIO_s_mem()); + if (bio) + { + if (ASN1_TIME_print (bio, tm)) + (void) BIO_read (bio, buf, sizeof (buf)); + BIO_free (bio); + } + + return buf; +} + +static int check_certificate_by_signer (X509 *peercert) +{ + X509_STORE_CTX xsc; + X509_STORE *ctx; + int pass = 0; + + ctx = X509_STORE_new (); + if (ctx == NULL) return 0; + + if (option (OPTSSLSYSTEMCERTS)) + { + if (X509_STORE_set_default_paths (ctx)) + pass++; + else + dprint (2, (debugfile, "X509_STORE_set_default_paths failed\n")); + } + + if (X509_STORE_load_locations (ctx, SslCertFile, NULL)) + pass++; + else + dprint (2, (debugfile, "X509_STORE_load_locations_failed\n")); + + if (pass == 0) + { + /* nothing to do */ + X509_STORE_free (ctx); + return 0; + } + + X509_STORE_CTX_init (&xsc, ctx, peercert, NULL); + + pass = (X509_verify_cert (&xsc) > 0); +#ifdef DEBUG + if (! pass) + { + char buf[SHORT_STRING]; + int err; + + err = X509_STORE_CTX_get_error (&xsc); + snprintf (buf, sizeof (buf), "%s (%d)", + X509_verify_cert_error_string(err), err); + dprint (2, (debugfile, "X509_verify_cert: %s\n", buf)); + } +#endif + X509_STORE_CTX_cleanup (&xsc); + X509_STORE_free (ctx); + + return pass; +} + +static int check_certificate_by_digest (X509 *peercert) +{ + unsigned char peermd[EVP_MAX_MD_SIZE]; + unsigned int peermdlen; + X509 *cert = NULL; + int pass = 0; + FILE *fp; + + /* expiration check */ + if (X509_cmp_current_time (X509_get_notBefore (peercert)) >= 0) + { + dprint (2, (debugfile, "Server certificate is not yet valid\n")); + mutt_error (_("Server certificate is not yet valid")); + mutt_sleep (2); + return 0; + } + if (X509_cmp_current_time (X509_get_notAfter (peercert)) <= 0) + { + dprint (2, (debugfile, "Server certificate has expired")); + mutt_error (_("Server certificate has expired")); + mutt_sleep (2); + return 0; + } + + if ((fp = fopen (SslCertFile, "rt")) == NULL) + return 0; + + if (!X509_digest (peercert, EVP_sha1(), peermd, &peermdlen)) + { + fclose (fp); + return 0; + } + + while ((cert = READ_X509_KEY (fp, &cert)) != NULL) + { + unsigned char md[EVP_MAX_MD_SIZE]; + unsigned int mdlen; + + /* Avoid CPU-intensive digest calculation if the certificates are + * not even remotely equal. + */ + if (X509_subject_name_cmp (cert, peercert) != 0 || + X509_issuer_name_cmp (cert, peercert) != 0) + continue; + + if (!X509_digest (cert, EVP_sha1(), md, &mdlen) || peermdlen != mdlen) + continue; + + if (memcmp(peermd, md, mdlen) != 0) + continue; + + pass = 1; + break; + } + X509_free (cert); + fclose (fp); + + return pass; +} + +static int ssl_check_certificate (sslsockdata * data) +{ + char *part[] = + {"/CN=", "/Email=", "/O=", "/OU=", "/L=", "/ST=", "/C="}; + char helpstr[SHORT_STRING]; + char buf[SHORT_STRING]; + MUTTMENU *menu; + int done, row, i; + FILE *fp; + char *name = NULL, *c; + + if (check_certificate_by_signer (data->cert)) + { + dprint (1, (debugfile, "ssl_check_certificate: signer check passed\n")); + return 1; + } + + /* automatic check from user's database */ + if (SslCertFile && check_certificate_by_digest (data->cert)) + { + dprint (1, (debugfile, "ssl_check_certificate: digest check passed\n")); + return 1; + } + + /* interactive check from user */ + menu = mutt_new_menu (); + menu->max = 19; + menu->dialog = (char **) safe_calloc (1, menu->max * sizeof (char *)); + for (i = 0; i < menu->max; i++) + menu->dialog[i] = (char *) safe_calloc (1, SHORT_STRING * sizeof (char)); + + row = 0; + strfcpy (menu->dialog[row], _("This certificate belongs to:"), SHORT_STRING); + row++; + name = X509_NAME_oneline (X509_get_subject_name (data->cert), + buf, sizeof (buf)); + for (i = 0; i < 5; i++) + { + c = x509_get_part (name, part[i]); + snprintf (menu->dialog[row++], SHORT_STRING, " %s", c); + } + + row++; + strfcpy (menu->dialog[row], _("This certificate was issued by:"), SHORT_STRING); + row++; + name = X509_NAME_oneline (X509_get_issuer_name (data->cert), + buf, sizeof (buf)); + for (i = 0; i < 5; i++) + { + c = x509_get_part (name, part[i]); + snprintf (menu->dialog[row++], SHORT_STRING, " %s", c); + } + + row++; + snprintf (menu->dialog[row++], SHORT_STRING, _("This certificate is valid")); + snprintf (menu->dialog[row++], SHORT_STRING, _(" from %s"), + asn1time_to_string (X509_get_notBefore (data->cert))); + snprintf (menu->dialog[row++], SHORT_STRING, _(" to %s"), + asn1time_to_string (X509_get_notAfter (data->cert))); + + row++; + buf[0] = '\0'; + x509_fingerprint (buf, sizeof (buf), data->cert); + snprintf (menu->dialog[row++], SHORT_STRING, _("Fingerprint: %s"), buf); + + menu->title = _("SSL Certificate check"); + if (SslCertFile) + { + menu->prompt = _("(r)eject, accept (o)nce, (a)ccept always"); + menu->keys = _("roa"); + } + else + { + menu->prompt = _("(r)eject, accept (o)nce"); + menu->keys = _("ro"); + } + + helpstr[0] = '\0'; + mutt_make_help (buf, sizeof (buf), _("Exit "), MENU_GENERIC, OP_EXIT); + strncat (helpstr, buf, sizeof (helpstr)); + mutt_make_help (buf, sizeof (buf), _("Help"), MENU_GENERIC, OP_HELP); + strncat (helpstr, buf, sizeof (helpstr)); + menu->help = helpstr; + + done = 0; + set_option(OPTUNBUFFEREDINPUT); + while (!done) + { + switch (mutt_menuLoop (menu)) + { + case -1: /* abort */ + case OP_MAX + 1: /* reject */ + case OP_EXIT: + done = 1; + break; + case OP_MAX + 3: /* accept always */ + done = 0; + if ((fp = fopen (SslCertFile, "a"))) + { + if (PEM_write_X509 (fp, data->cert)) + done = 1; + fclose (fp); + } + if (!done) + { + mutt_error (_("Warning: Couldn't save certificate")); + mutt_sleep (2); + } + else + { + mutt_message (_("Certificate saved")); + mutt_sleep (0); + } + /* fall through */ + case OP_MAX + 2: /* accept once */ + done = 2; + break; + } + } + unset_option(OPTUNBUFFEREDINPUT); + mutt_menuDestroy (&menu); + return (done == 2); +} diff --git a/mutt_ssl.h b/mutt_ssl.h new file mode 100644 index 0000000..37e0af2 --- /dev/null +++ b/mutt_ssl.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _MUTT_SSL_H_ +#define _MUTT_SSL_H_ 1 + +#include "mutt_socket.h" + +int mutt_ssl_starttls (CONNECTION* conn); + +extern int ssl_socket_setup (CONNECTION *conn); + +#endif /* _MUTT_SSL_H_ */ diff --git a/mutt_ssl_nss.c b/mutt_ssl_nss.c new file mode 100644 index 0000000..9549d99 --- /dev/null +++ b/mutt_ssl_nss.c @@ -0,0 +1,378 @@ +/* Copyright (C) 2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include <prinit.h> +#include <pk11func.h> +#include <prtypes.h> +#include <prio.h> +#include <prnetdb.h> +#include "nss.h" +#include "ssl.h" +#include "sechash.h" +#include "cert.h" +#include "cdbhdl.h" +#include "mutt.h" +#include "mutt_socket.h" +#include "mutt_curses.h" + +static int MuttNssInitialized = 0; + +/* internal data struct we use with the CONNECTION. this is where NSS-specific + * data gets stuffed so that the main mutt_socket.h doesn't have to be + * modified. + */ +typedef struct +{ + PRFileDesc *fd; + CERTCertDBHandle *db; +} +mutt_nss_t; + +/* nss callback to grab the user's password. */ +static char * +mutt_nss_password_func (PK11SlotInfo * slot, PRBool retry, void *arg) +{ + return NULL; +} + +static int +mutt_nss_error (const char *call) +{ + mutt_error (_("%s failed (error %d)"), call, PR_GetError ()); + return -1; +} + +/* initialize the NSS library for use. must be called prior to any other + * functions in this module. + */ +static int +mutt_nss_init (void) +{ + if (!MuttNssInitialized) + { + PK11_SetPasswordFunc (mutt_nss_password_func); + if (NSS_Init (SslCertFile) == SECFailure) + return mutt_nss_error ("NSS_Init"); + + /* always use strong crypto. */ + if (NSS_SetDomesticPolicy () == SECFailure) + return mutt_nss_error ("NSS_SetDomesticPolicy"); + + /* intialize the session cache */ + SSL_ClearSessionCache (); + + MuttNssInitialized = 1; + } + return 0; +} + +/* convert from int64 to a readable string and print on the screen */ +static void +mutt_nss_pretty_time (int64 usecs) +{ + struct tm t; + PRExplodedTime ex; + char timebuf[128]; + + PR_ExplodeTime (usecs, PR_LocalTimeParameters, &ex); + + t.tm_sec = ex.tm_sec; + t.tm_min = ex.tm_min; + t.tm_hour = ex.tm_hour; + t.tm_mday = ex.tm_mday; + t.tm_mon = ex.tm_month; + t.tm_year = ex.tm_year - 1900; /* PRExplodedTime uses the absolute year */ + t.tm_wday = ex.tm_wday; + t.tm_yday = ex.tm_yday; + + strfcpy (timebuf, asctime (&t), sizeof (timebuf)); + timebuf[strlen (timebuf) - 1] = 0; + + addstr (timebuf); +} + +/* this function is called by the default hook CERT_AuthCertificate when it + * can't verify a cert based upon the contents of the user's certificate + * database. we are given the option to override the decision and accept + * it anyway. + */ +static SECStatus +mutt_nss_bad_cert (void *arg, PRFileDesc * fd) +{ + PRErrorCode err; + CERTCertificate *cert, *issuer; + unsigned char hash[16]; + int i; + CERTCertTrust trust; + int64 not_before, not_after; + event_t ch; + char status[256]; + + /* first lets see why this certificate failed. we only want to override + * in the case where the cert was not found. + */ + err = PR_GetError (); + mutt_error (_("SSL_AuthCertificate failed (error %d)"), err); + + /* fetch the cert in question */ + cert = SSL_PeerCertificate (fd); + + move (LINES - 8, 0); + clrtoeol (); + move (LINES - 7, 0); + clrtoeol (); + addstr ("Issuer: "); + addstr (CERT_NameToAscii (&cert->issuer)); + move (LINES - 6, 0); + clrtoeol (); + addstr ("Subject: "); + addstr (CERT_NameToAscii (&cert->subject)); + + move (LINES - 5, 0); + clrtoeol (); + addstr ("Valid: "); + CERT_GetCertTimes (cert, ¬_before, ¬_after); + mutt_nss_pretty_time (not_before); + addstr (" to "); + mutt_nss_pretty_time (not_after); + + move (LINES - 4, 0); + clrtoeol (); + addstr ("Fingerprint: "); + + /* calculate the MD5 hash of the raw certificate */ + HASH_HashBuf (HASH_AlgMD5, hash, cert->derCert.data, cert->derCert.len); + for (i = 0; i < 16; i++) + { + printw ("%0x", hash[i]); + if (i != 15) + addch (':'); + } + + mvaddstr (LINES - 3, 0, "Signature: "); + clrtoeol (); + + /* find the cert which signed this cert */ + issuer = CERT_FindCertByName ((CERTCertDBHandle *) arg, &cert->derIssuer); + + /* verify the sig (only) if we have the issuer cert handy */ + if (issuer && + CERT_VerifySignedData (&cert->signatureWrap, issuer, PR_Now (), NULL) + == SECSuccess) + addstr ("GOOD"); + else + addstr ("BAD"); + + move (LINES - 2, 0); + SETCOLOR (MT_COLOR_STATUS); + memset (status, ' ', sizeof (status) - 1); + if (COLS < sizeof (status)) + status[COLS - 1] = 0; + else + status[sizeof (status) - 1] = 0; + memcpy (status, "--- SSL Certificate Check", + sizeof ("--- SSL Certificate Check") - 1); + addstr (status); + clrtoeol (); + SETCOLOR (MT_COLOR_NORMAL); + + for (;;) + { + mvaddstr (LINES - 1, 0, "(r)eject, accept (o)nce, (a)lways accept?"); + clrtoeol (); + ch = mutt_getch (); + if (ch.ch == -1) + { + i = SECFailure; + break; + } + else if (ascii_tolower (ch.ch) == 'r') + { + i = SECFailure; + break; + } + else if (ascii_tolower (ch.ch) == 'o') + { + i = SECSuccess; + break; + } + else if (ascii_tolower (ch.ch) == 'a') + { + /* push this certificate onto the user's certificate store so it + * automatically becomes valid next time we see it + */ + + /* set this certificate as a valid peer for SSL-auth ONLY. */ + CERT_DecodeTrustString (&trust, "P,,"); + + CERT_AddTempCertToPerm (cert, NULL, &trust); + i = SECSuccess; + break; + } + BEEP (); + } + + /* SSL_PeerCertificate() returns a copy with an updated ref count, so + * we have to destroy our copy here. + */ + CERT_DestroyCertificate (cert); + + return i; +} + +static int +mutt_nss_socket_open (CONNECTION * con) +{ + mutt_nss_t *sockdata; + PRNetAddr addr; + struct hostent *he; + + memset (&addr, 0, sizeof (addr)); + addr.inet.family = AF_INET; + addr.inet.port = PR_htons (con->account.port); + he = gethostbyname (con->account.host); + if (!he) + { + mutt_error (_("Unable to find ip for host %s"), con->account.host); + return -1; + } + addr.inet.ip = *((int *) he->h_addr_list[0]); + + sockdata = safe_calloc (1, sizeof (mutt_nss_t)); + + do + { + sockdata->fd = PR_NewTCPSocket (); + if (sockdata->fd == NULL) + { + mutt_error (_("PR_NewTCPSocket failed.")); + break; + } + /* make this a SSL socket */ + sockdata->fd = SSL_ImportFD (NULL, sockdata->fd); + + /* set SSL version options based upon user's preferences */ + if (!option (OPTTLSV1)) + SSL_OptionSet (sockdata->fd, SSL_ENABLE_TLS, PR_FALSE); + + if (!option (OPTSSLV2)) + SSL_OptionSet (sockdata->fd, SSL_ENABLE_SSL2, PR_FALSE); + + if (!option (OPTSSLV3)) + SSL_OptionSet (sockdata->fd, SSL_ENABLE_SSL3, PR_FALSE); + + /* set the host we were attempting to connect to in order to verify + * the name in the certificate we get back. + */ + if (SSL_SetURL (sockdata->fd, con->account.host)) + { + mutt_nss_error ("SSL_SetURL"); + break; + } + + /* we don't need no stinking pin. we don't authenticate ourself + * via SSL. + */ + SSL_SetPKCS11PinArg (sockdata->fd, 0); + + sockdata->db = CERT_GetDefaultCertDB (); + + /* use the default supplied hook. it takes an argument to our + * certificate database. the manual lies, you can't really specify + * NULL for the callback to get the default! + */ + SSL_AuthCertificateHook (sockdata->fd, SSL_AuthCertificate, + sockdata->db); + /* set the callback to be used when SSL_AuthCertificate() fails. this + * allows us to override and insert the cert back into the db + */ + SSL_BadCertHook (sockdata->fd, mutt_nss_bad_cert, sockdata->db); + + if (PR_Connect (sockdata->fd, &addr, PR_INTERVAL_NO_TIMEOUT) == + PR_FAILURE) + { + mutt_error (_("Unable to connect to host %s"), con->account.host); + break; + } + + /* store the extra info in the CONNECTION struct for later use. */ + con->sockdata = sockdata; + + /* HACK. some of the higher level calls in mutt_socket.c depend on this + * being >0 when we are in the connected state. we just set this to + * an arbitrary value to avoid hitting that bug, since we neve have the + * real fd. + */ + con->fd = 42; + + /* success */ + return 0; + } + while (0); + + /* we get here when we had an oops. clean up the mess. */ + + if (sockdata) + { + if (sockdata->fd) + PR_Close (sockdata->fd); + if (sockdata->db) + CERT_ClosePermCertDB (sockdata->db); + FREE (&sockdata); + } + return -1; +} + +static int +mutt_nss_socket_close (CONNECTION * con) +{ + mutt_nss_t *sockdata = (mutt_nss_t *) con->sockdata; + + if (PR_Close (sockdata->fd) == PR_FAILURE) + return -1; + + if (sockdata->db) + CERT_ClosePermCertDB (sockdata->db); + /* free up the memory we used for this connection specific to NSS. */ + FREE (&con->sockdata); + return 0; +} + +static int +mutt_nss_socket_read (CONNECTION* conn, char* buf, size_t len) +{ + return PR_Read (((mutt_nss_t*) conn->sockdata)->fd, buf, len); +} + +static int +mutt_nss_socket_write (CONNECTION * con, const char *buf, size_t count) +{ + return PR_Write (((mutt_nss_t *) con->sockdata)->fd, buf, count); +} + +/* initialize a new connection for use with NSS */ +int +mutt_nss_socket_setup (CONNECTION * con) +{ + if (mutt_nss_init ()) + return -1; + con->open = mutt_nss_socket_open; + con->read = mutt_nss_socket_read; + con->write = mutt_nss_socket_write; + con->close = mutt_nss_socket_close; + return 0; +} diff --git a/mutt_tunnel.c b/mutt_tunnel.c new file mode 100644 index 0000000..01e1d72 --- /dev/null +++ b/mutt_tunnel.c @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2000 Manoj Kasichainula <manoj@io.com> + * Copyright (C) 2001 Brendan Cully <brendan@kublai.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_socket.h" +#include "mutt_tunnel.h" + +#include <netinet/in.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/wait.h> +#include <fcntl.h> +#include <errno.h> + +/* -- data types -- */ +typedef struct +{ + pid_t pid; + int readfd; + int writefd; +} TUNNEL_DATA; + +/* forward declarations */ +static int tunnel_socket_open (CONNECTION*); +static int tunnel_socket_close (CONNECTION*); +static int tunnel_socket_read (CONNECTION* conn, char* buf, size_t len); +static int tunnel_socket_write (CONNECTION* conn, const char* buf, size_t len); + +/* -- public functions -- */ +int mutt_tunnel_socket_setup (CONNECTION *conn) +{ + conn->open = tunnel_socket_open; + conn->close = tunnel_socket_close; + conn->read = tunnel_socket_read; + conn->write = tunnel_socket_write; + + return 0; +} + +static int tunnel_socket_open (CONNECTION *conn) +{ + TUNNEL_DATA* tunnel; + int pid; + int rc; + int pin[2], pout[2]; + + tunnel = (TUNNEL_DATA*) safe_malloc (sizeof (TUNNEL_DATA)); + conn->sockdata = tunnel; + + mutt_message (_("Connecting with \"%s\"..."), Tunnel); + + if ((rc = pipe (pin)) == -1) + { + mutt_perror ("pipe"); + return -1; + } + if ((rc = pipe (pout)) == -1) + { + mutt_perror ("pipe"); + return -1; + } + + mutt_block_signals_system (); + if ((pid = fork ()) == 0) + { + mutt_unblock_signals_system (0); + if (dup2 (pout[0], STDIN_FILENO) < 0 || dup2 (pin[1], STDOUT_FILENO) < 0) + _exit (127); + close (pin[0]); + close (pin[1]); + close (pout[0]); + close (pout[1]); + close (STDERR_FILENO); + + /* Don't let the subprocess think it can use the controlling tty */ + setsid (); + + execl (EXECSHELL, "sh", "-c", Tunnel, NULL); + _exit (127); + } + mutt_unblock_signals_system (1); + + if (pid == -1) + { + close (pin[0]); + close (pin[1]); + close (pout[0]); + close (pout[1]); + mutt_perror ("fork"); + return -1; + } + if (close (pin[1]) < 0 || close (pout[0]) < 0) + mutt_perror ("close"); + + fcntl (pin[0], F_SETFD, FD_CLOEXEC); + fcntl (pout[1], F_SETFD, FD_CLOEXEC); + + tunnel->readfd = pin[0]; + tunnel->writefd = pout[1]; + tunnel->pid = pid; + + conn->fd = 42; /* stupid hack */ + + return 0; +} + +static int tunnel_socket_close (CONNECTION* conn) +{ + TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata; + + close (tunnel->readfd); + close (tunnel->writefd); + waitpid (tunnel->pid, NULL, 0); + FREE (&conn->sockdata); + + return 0; +} + +static int tunnel_socket_read (CONNECTION* conn, char* buf, size_t len) +{ + TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata; + int rc; + + rc = read (tunnel->readfd, buf, len); + if (rc == -1) + { + mutt_error (_("Tunnel error talking to %s: %s"), conn->account.host, + strerror (errno)); + mutt_sleep (1); + } + + return rc; +} + +static int tunnel_socket_write (CONNECTION* conn, const char* buf, size_t len) +{ + TUNNEL_DATA* tunnel = (TUNNEL_DATA*) conn->sockdata; + int rc; + + rc = write (tunnel->writefd, buf, len); + if (rc == -1) + { + mutt_error (_("Tunnel error talking to %s: %s"), conn->account.host, + strerror (errno)); + mutt_sleep (1); + } + + return rc; +} diff --git a/mutt_tunnel.h b/mutt_tunnel.h new file mode 100644 index 0000000..b6e20af --- /dev/null +++ b/mutt_tunnel.h @@ -0,0 +1,24 @@ +/* + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _MUTT_TUNNEL_H_ +#define _MUTT_TUNNEL_H_ 1 + +#include "mutt_socket.h" + +int mutt_tunnel_socket_setup (CONNECTION *); + +#endif /* _MUTT_TUNNEL_H_ */ diff --git a/muttbug b/muttbug new file mode 100755 index 0000000..e94d8cd --- /dev/null +++ b/muttbug @@ -0,0 +1,3 @@ +#!/bin/sh + +exec flea "$@" diff --git a/muttbug.sh.in b/muttbug.sh.in new file mode 100644 index 0000000..df65431 --- /dev/null +++ b/muttbug.sh.in @@ -0,0 +1,336 @@ +#!/bin/sh + +# +# File a bug against the Mutt mail user agent. +# + +# +# $Id: muttbug.sh.in,v 3.6 2003/09/20 06:24:10 roessler Exp $ +# + +# +# Copyright (c) 2000 Thomas Roessler <roessler@guug.de> +# +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +# + +SUBMIT="submit@bugs.guug.de" +DEBIAN_SUBMIT="submit@bugs.debian.org" + +prefix=@prefix@ + +DEBUGGER=@DEBUGGER@ +SENDMAIL=@SENDMAIL@ +sysconfdir=@sysconfdir@ +pkgdatadir=@pkgdatadir@ + +include_file () +{ + echo + echo "--- Begin $1" + sed -e 's/^-/- -/' $1 | egrep -v '^[ ]*(#|$)' + echo "--- End $1" + echo +} + +debug_gdb () +{ + cat << EOF > $SCRATCH/gdb.rc +bt +list +quit +EOF + $DEBUGGER -n -x $SCRATCH/gdb.rc -c $CORE mutt +} + +debug_dbx () +{ + cat << EOF > $SCRATCH/dbx.rc +where +list +quit +EOF + $DEBUGGER -s $SCRATCH/dbx.rc mutt $CORE +} + +debug_sdb () +{ + cat << EOF > $SCRATCH/sdb.rc +t +w +q +EOF + $DEBUGGER mutt $CORE < $SCRATCH/sdb.rc +} + +case `echo -n` in +"") n=-n; c= ;; + *) n=; c='\c' ;; +esac + + +exec > /dev/tty +exec < /dev/tty + +SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$ + +mkdir ${SCRATCH} || \ +{ + echo "`basename $0`: Can't create temporary directory." >& 2 ; + exit 1 ; +} + +trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2 + +TEMPLATE=${SCRATCH}/template.txt + +if test -z "$EMAIL" ; then + EMAIL="`mutt -Q from 2> /dev/null | sed -e 's/^from=.\(.*\).$/\1/'`" +fi + +echo "Please enter your e-mail address [$EMAIL]:" +echo $n "> $c" +read EMAILTMP + +if test -n "$EMAILTMP" ; then + EMAIL="$EMAILTMP" +fi + +echo "Please enter a one-line description of the problem you experience:" +echo $n "> $c" +read SUBJECT + +cat <<EOF +What should the severity for this bug report be? + + 0) Feature request, or maybe a bug which is very difficult to + fix due to major design considerations. + + 1) The package fails to perform correctly in some conditions, + or on some systems, or fails to comply with current policy + documents. Most bugs are in this category. + + 2) This bug makes this version of the package unsuitable for + a stable release. + + 3) Dangerous bug. Makes the package in question unusable by + anyone or mostly so, or causes data loss, or introduces a + security hole allowing access to the accounts of users who + use the package. + + 4) Critical bug. Makes unrelated software on the system (or + the whole system) break, or causes serious data loss, or + introduces a security hole on systems where you install the + package. + +EOF +echo $n "Severity? [01234] $c" +read severity +case "$severity" in +0|[Ww]) severity=wishlist ;; +2|[Ii]) severity=important ;; +3|[Gg]) severity=grave ;; +4|[Cc]) severity=critical ;; + *) severity=normal ;; +esac + +if test -x $DEBUGGER ; then + test -f core && CORE=core + echo "If mutt has crashed, it may have saved some program state in" + echo "a file named core. We can include this information with the bug" + echo "report if you wish so." + echo "Do you want to include information gathered from a core file?" + echo "If yes, please enter the path - otherwise just say no: [$CORE]" + echo $n "> $c" + read _CORE + test "$_CORE" && CORE="$_CORE" +fi + +echo $n "Do you want to include your personal mutt configuration files? [Y|n] $c" +read personal +case "$personal" in +[nN]*) personal=no ;; + *) personal=yes ;; +esac + +echo $n "Do you want to include your system's global mutt configuration file? [Y|n] $c" +read global +case "$global" in +[nN]*) global=no ;; + *) global=yes ;; +esac + +if test -f /etc/debian_version ; then + DEBIAN=yes + echo $n "Checking whether mutt has been installed as a package... $c" + DEBIANVERSION="`dpkg -l mutt | grep '^[ih]' | awk '{print $3}'`" 2> /dev/null + if test "$DEBIANVERSION" ; then + DPKG=yes + else + DPKG=no + unset DEBIANVERSION + fi + echo "$DPKG" + echo $n "File this bug with Debian? [Y|n] $c" + read DPKG + case "$DPKG" in + [nN]) DPKG=no ;; + *) DPKG=yes ;; + esac +else + DEBIAN=no + DPKG=no +fi + +if rpm -q mutt > /dev/null 2> /dev/null ; then + echo "Mutt seems to come from an RPM package." + RPMVERSION="`rpm -q mutt`" + RPMPACKAGER="`rpm -q -i mutt | sed -n -e 's/^Packager *: *//p'`" +fi + +MUTTVERSION="`mutt -v | awk '{print $2; exit; }'`" +test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT" + +exec > ${TEMPLATE} + +test "$EMAIL" && echo "From: $EMAIL" +test "$REPLYTO" && echo "Reply-To: $REPLYTO" +test "$ORGANIZATION" && echo "Organization: $ORGANIZATION" + +echo "Subject: mutt-$MUTTVERSION: $SUBJECT" +echo "To: $SUBMIT" +test "$EMAIL" && echo "Bcc: ${EMAIL}" +echo +echo "Package: mutt" +echo "Version: ${DEBIANVERSION-${RPMVERSION-$MUTTVERSION}}" +echo "Severity: $severity" +echo +echo "-- Please type your report below this line" +echo +echo +echo + +if test "$DEBIAN" = "yes" ; then + echo "Obtaining Debian-specific information..." > /dev/tty + bug -p -s dummy mutt < /dev/null 2> /dev/null | \ + sed -n -e "/^-- System Information/,/^---/p" | \ + grep -v '^---' +else + echo "-- System Information" + echo "System Version: `uname -a`" + test -z "$RPMPACKAGER" || echo "RPM Packager: $RPMPACKAGER"; + test -f /etc/redhat-release && echo "RedHat Release: `cat /etc/redhat-release`" + test -f /etc/SuSE-release && echo "SuSE Release: `sed 1q /etc/SuSE-release`" + # Please provide more of these if you have any. +fi + +echo +echo "-- Build environment information" +echo +echo "(Note: This is the build environment installed on the system" +echo "muttbug is run on. Information may or may not match the environment" +echo "used to build mutt.)" +echo +echo "- gcc version information" +echo "@CC@" +@CC@ -v 2>&1 +echo +echo "- CFLAGS" +echo @CFLAGS@ + + +echo +echo "-- Mutt Version Information" +echo +mutt -v + +if test "$CORE" && test -f "$CORE" ; then + echo + echo "-- Core Dump Analysis Output" + echo + + case "$DEBUGGER" in + *sdb) debug_sdb $CORE ;; + *dbx) debug_dbx $CORE ;; + *gdb) debug_gdb $CORE ;; + esac + + echo +fi + +if test "$personal" = "yes" ; then + CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc" + MATCHED="none" + for f in $CANDIDATES; do + if test -f "${HOME}/$f" ; then + MATCHED="${HOME}/$f" + break + fi + done + + if test "$MATCHED" = "none" ; then + echo "Warning: Can't find your personal .muttrc." >&2 + else + include_file $MATCHED + fi +fi + + +if test "$global" = "yes" ; then + CANDIDATES="Muttrc-${MUTTVERSION} Muttrc" + DIRECTORIES="$sysconfdir $pkgdatadir" + MATCHED="none" + for d in $DIRECTORIES ; do + for f in $CANDIDATES; do + if test -f $d/$f ; then + MATCHED="$d/$f" + break + fi + done + test "$MATCHED" = "none" || break + done + + if test "$MATCHED" = "none" ; then + echo "Warning: Can't find global Muttrc." >&2 + else + include_file $MATCHED + fi +fi + +exec > /dev/tty + +cp $TEMPLATE $SCRATCH/mutt-bug.txt + +input="e" +while : ; do + if test "$input" = "e" ; then + ${VISUAL-${EDITOR-vi}} $SCRATCH/mutt-bug.txt + if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then + echo "Warning: Bug report was not modified!" + fi + fi + + echo $n "Submit, Edit, View, Quit? [S|e|v|q] $c" + read _input + input="`echo $_input | tr EVSQ evsq`" + case $input in + e*) ;; + v*) ${PAGER-more} $SCRATCH/mutt-bug.txt ;; + s*|"") $SENDMAIL -t < $SCRATCH/mutt-bug.txt ; exit ;; + q*) exit + esac +done + diff --git a/muttlib.c b/muttlib.c new file mode 100644 index 0000000..038010d --- /dev/null +++ b/muttlib.c @@ -0,0 +1,1443 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mime.h" +#include "mailbox.h" +#include "mx.h" +#include "url.h" + +#include "reldate.h" + +#ifdef USE_IMAP +#include "imap.h" +#endif + +#include "mutt_crypt.h" + +#include <string.h> +#include <ctype.h> +#include <unistd.h> +#include <stdlib.h> +#include <sys/wait.h> +#include <errno.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <time.h> +#include <sys/types.h> +#include <utime.h> + +BODY *mutt_new_body (void) +{ + BODY *p = (BODY *) safe_calloc (1, sizeof (BODY)); + + p->disposition = DISPATTACH; + p->use_disp = 1; + return (p); +} + + +/* Modified by blong to accept a "suggestion" for file name. If + * that file exists, then construct one with unique name but + * keep any extension. This might fail, I guess. + * Renamed to mutt_adv_mktemp so I only have to change where it's + * called, and not all possible cases. + */ +void mutt_adv_mktemp (char *s, size_t l) +{ + char buf[_POSIX_PATH_MAX]; + char tmp[_POSIX_PATH_MAX]; + char *period; + size_t sl; + struct stat sb; + + strfcpy (buf, NONULL (Tempdir), sizeof (buf)); + mutt_expand_path (buf, sizeof (buf)); + if (s[0] == '\0') + { + snprintf (s, l, "%s/muttXXXXXX", buf); + mktemp (s); + } + else + { + strfcpy (tmp, s, sizeof (tmp)); + mutt_sanitize_filename (tmp, 1); + snprintf (s, l, "%s/%s", buf, tmp); + if (lstat (s, &sb) == -1 && errno == ENOENT) + return; + if ((period = strrchr (tmp, '.')) != NULL) + *period = 0; + snprintf (s, l, "%s/%s.XXXXXX", buf, tmp); + mktemp (s); + if (period != NULL) + { + *period = '.'; + sl = mutt_strlen(s); + strfcpy(s + sl, period, l - sl); + } + } +} + +/* create a send-mode duplicate from a receive-mode body */ + +int mutt_copy_body (FILE *fp, BODY **tgt, BODY *src) +{ + char tmp[_POSIX_PATH_MAX]; + BODY *b; + + PARAMETER *par, **ppar; + + short use_disp; + + if (src->filename) + { + use_disp = 1; + strfcpy (tmp, src->filename, sizeof (tmp)); + } + else + { + use_disp = 0; + tmp[0] = '\0'; + } + + mutt_adv_mktemp (tmp, sizeof (tmp)); + if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1) + return -1; + + *tgt = mutt_new_body (); + b = *tgt; + + memcpy (b, src, sizeof (BODY)); + b->parts = NULL; + b->next = NULL; + + b->filename = safe_strdup (tmp); + b->use_disp = use_disp; + b->unlink = 1; + + if (mutt_is_text_part (b)) + b->noconv = 1; + + b->xtype = safe_strdup (b->xtype); + b->subtype = safe_strdup (b->subtype); + b->form_name = safe_strdup (b->form_name); + b->filename = safe_strdup (b->filename); + b->d_filename = safe_strdup (b->d_filename); + b->description = safe_strdup (b->description); + + /* + * we don't seem to need the HEADER structure currently. + * XXX - this may change in the future + */ + + if (b->hdr) b->hdr = NULL; + + /* copy parameters */ + for (par = b->parameter, ppar = &b->parameter; par; ppar = &(*ppar)->next, par = par->next) + { + *ppar = mutt_new_parameter (); + (*ppar)->attribute = safe_strdup (par->attribute); + (*ppar)->value = safe_strdup (par->value); + } + + mutt_stamp_attachment (b); + + return 0; +} + + + +void mutt_free_body (BODY **p) +{ + BODY *a = *p, *b; + + while (a) + { + b = a; + a = a->next; + + if (b->parameter) + mutt_free_parameter (&b->parameter); + if (b->unlink && b->filename) + { + dprint (1, (debugfile, "mutt_free_body: Unlinking %s.\n", b->filename)); + unlink (b->filename); + } + else if (b->filename) + dprint (1, (debugfile, "mutt_free_body: Not unlinking %s.\n", b->filename)); + + FREE (&b->filename); + FREE (&b->content); + FREE (&b->xtype); + FREE (&b->subtype); + FREE (&b->description); + FREE (&b->form_name); + + if (b->hdr) + { + /* Don't free twice (b->hdr->content = b->parts) */ + b->hdr->content = NULL; + mutt_free_header(&b->hdr); + } + + if (b->parts) + mutt_free_body (&b->parts); + + FREE (&b); + } + + *p = 0; +} + +void mutt_free_parameter (PARAMETER **p) +{ + PARAMETER *t = *p; + PARAMETER *o; + + while (t) + { + FREE (&t->attribute); + FREE (&t->value); + o = t; + t = t->next; + FREE (&o); + } + *p = 0; +} + +LIST *mutt_add_list (LIST *head, const char *data) +{ + LIST *tmp; + + for (tmp = head; tmp && tmp->next; tmp = tmp->next) + ; + if (tmp) + { + tmp->next = safe_malloc (sizeof (LIST)); + tmp = tmp->next; + } + else + head = tmp = safe_malloc (sizeof (LIST)); + + tmp->data = safe_strdup (data); + tmp->next = NULL; + return head; +} + +void mutt_free_list (LIST **list) +{ + LIST *p; + + if (!list) return; + while (*list) + { + p = *list; + *list = (*list)->next; + FREE (&p->data); + FREE (&p); + } +} + +HEADER *mutt_dup_header(HEADER *h) +{ + HEADER *hnew; + + hnew = mutt_new_header(); + memcpy(hnew, h, sizeof (HEADER)); + return hnew; +} + +void mutt_free_header (HEADER **h) +{ + if(!h || !*h) return; + mutt_free_envelope (&(*h)->env); + mutt_free_body (&(*h)->content); + FREE (&(*h)->maildir_flags); + FREE (&(*h)->tree); + FREE (&(*h)->path); +#ifdef MIXMASTER + mutt_free_list (&(*h)->chain); +#endif +#if defined USE_POP || defined USE_IMAP || defined USE_NNTP + FREE (&(*h)->data); +#endif + FREE (h); +} + +/* returns true if the header contained in "s" is in list "t" */ +int mutt_matches_ignore (const char *s, LIST *t) +{ + for (; t; t = t->next) + { + if (!ascii_strncasecmp (s, t->data, mutt_strlen (t->data)) || *t->data == '*') + return 1; + } + return 0; +} + +/* prepend the path part of *path to *link */ +void mutt_expand_link (char *newpath, const char *path, const char *link) +{ + const char *lb = NULL; + size_t len; + + /* link is full path */ + if (*link == '/') + { + strfcpy (newpath, link, _POSIX_PATH_MAX); + return; + } + + if ((lb = strrchr (path, '/')) == NULL) + { + /* no path in link */ + strfcpy (newpath, link, _POSIX_PATH_MAX); + return; + } + + len = lb - path + 1; + memcpy (newpath, path, len); + strfcpy (newpath + len, link, _POSIX_PATH_MAX - len); +} + +char *mutt_expand_path (char *s, size_t slen) +{ + return _mutt_expand_path (s, slen, 0); +} + +char *_mutt_expand_path (char *s, size_t slen, int rx) +{ + char p[_POSIX_PATH_MAX] = ""; + char q[_POSIX_PATH_MAX] = ""; + char tmp[_POSIX_PATH_MAX]; + char *t; + + char *tail = ""; + + int recurse = 0; + + do + { + recurse = 0; + + switch (*s) + { + case '~': + { + if (*(s + 1) == '/' || *(s + 1) == 0) + { + strfcpy (p, NONULL(Homedir), sizeof (p)); + tail = s + 1; + } + else + { + struct passwd *pw; + if ((t = strchr (s + 1, '/'))) + *t = 0; + + if ((pw = getpwnam (s + 1))) + { + strfcpy (p, pw->pw_dir, sizeof (p)); + if (t) + { + *t = '/'; + tail = t; + } + else + tail = ""; + } + else + { + /* user not found! */ + if (t) + *t = '/'; + *p = '\0'; + tail = s; + } + } + } + break; + + case '=': + case '+': + { +#ifdef USE_IMAP + /* if folder = {host} or imap[s]://host/: don't append slash */ + if (mx_is_imap (NONULL (Maildir)) && + (Maildir[strlen (Maildir) - 1] == '}' || + Maildir[strlen (Maildir) - 1] == '/')) + strfcpy (p, NONULL (Maildir), sizeof (p)); + else +#endif + snprintf (p, sizeof (p), "%s/", NONULL (Maildir)); + + tail = s + 1; + } + break; + + /* elm compatibility, @ expands alias to user name */ + + case '@': + { + HEADER *h; + ADDRESS *alias; + + if ((alias = mutt_lookup_alias (s + 1))) + { + h = mutt_new_header(); + h->env = mutt_new_envelope(); + h->env->from = h->env->to = alias; + mutt_default_save (p, sizeof (p), h); + h->env->from = h->env->to = NULL; + mutt_free_header (&h); + /* Avoid infinite recursion if the resulting folder starts with '@' */ + if (*p != '@') + recurse = 1; + + tail = ""; + } + } + break; + + case '>': + { + strfcpy (p, NONULL(Inbox), sizeof (p)); + tail = s + 1; + } + break; + + case '<': + { + strfcpy (p, NONULL(Outbox), sizeof (p)); + tail = s + 1; + } + break; + + case '!': + { + if (*(s+1) == '!') + { + strfcpy (p, NONULL(LastFolder), sizeof (p)); + tail = s + 2; + } + else + { + strfcpy (p, NONULL(Spoolfile), sizeof (p)); + tail = s + 1; + } + } + break; + + case '-': + { + strfcpy (p, NONULL(LastFolder), sizeof (p)); + tail = s + 1; + } + break; + + default: + { + *p = '\0'; + tail = s; + } + } + + if (rx && *p && !recurse) + { + mutt_rx_sanitize_string (q, sizeof (q), p); + snprintf (tmp, sizeof (tmp), "%s%s", q, tail); + } + else + snprintf (tmp, sizeof (tmp), "%s%s", p, tail); + + strfcpy (s, tmp, slen); + } + while (recurse); + +#ifdef USE_IMAP + /* Rewrite IMAP path in canonical form - aids in string comparisons of + * folders. May possibly fail, in which case s should be the same. */ + if (mx_is_imap (s)) + imap_expand_path (s, slen); +#endif + + return (s); +} + +/* Extract the real name from /etc/passwd's GECOS field. + * When set, honor the regular expression in GecosMask, + * otherwise assume that the GECOS field is a + * comma-separated list. + * Replace "&" by a capitalized version of the user's login + * name. + */ + +char *mutt_gecos_name (char *dest, size_t destlen, struct passwd *pw) +{ + regmatch_t pat_match[1]; + size_t pwnl; + int idx; + char *p; + + if (!pw || !pw->pw_gecos) + return NULL; + + memset (dest, 0, destlen); + + if (GecosMask.rx) + { + if (regexec (GecosMask.rx, pw->pw_gecos, 1, pat_match, 0) == 0) + strfcpy (dest, pw->pw_gecos + pat_match[0].rm_so, + MIN (pat_match[0].rm_eo - pat_match[0].rm_so + 1, destlen)); + } + else if ((p = strchr (pw->pw_gecos, ','))) + strfcpy (dest, pw->pw_gecos, MIN (destlen, p - pw->pw_gecos + 1)); + else + strfcpy (dest, pw->pw_gecos, destlen); + + pwnl = strlen (pw->pw_name); + + for (idx = 0; dest[idx]; idx++) + { + if (dest[idx] == '&') + { + memmove (&dest[idx + pwnl], &dest[idx + 1], + MAX(destlen - idx - pwnl - 1, 0)); + memcpy (&dest[idx], pw->pw_name, MIN(destlen - idx - 1, pwnl)); + dest[idx] = toupper ((unsigned char) dest[idx]); + } + } + + return dest; +} + + +char *mutt_get_parameter (const char *s, PARAMETER *p) +{ + for (; p; p = p->next) + if (ascii_strcasecmp (s, p->attribute) == 0) + return (p->value); + + return NULL; +} + +void mutt_set_parameter (const char *attribute, const char *value, PARAMETER **p) +{ + PARAMETER *q; + + if (!value) + { + mutt_delete_parameter (attribute, p); + return; + } + + for(q = *p; q; q = q->next) + { + if (ascii_strcasecmp (attribute, q->attribute) == 0) + { + mutt_str_replace (&q->value, value); + return; + } + } + + q = mutt_new_parameter(); + q->attribute = safe_strdup(attribute); + q->value = safe_strdup(value); + q->next = *p; + *p = q; +} + +void mutt_delete_parameter (const char *attribute, PARAMETER **p) +{ + PARAMETER *q; + + for (q = *p; q; p = &q->next, q = q->next) + { + if (ascii_strcasecmp (attribute, q->attribute) == 0) + { + *p = q->next; + q->next = NULL; + mutt_free_parameter (&q); + return; + } + } +} + +/* returns 1 if Mutt can't display this type of data, 0 otherwise */ +int mutt_needs_mailcap (BODY *m) +{ + switch (m->type) + { + case TYPETEXT: + + if (!ascii_strcasecmp ("plain", m->subtype) || + !ascii_strcasecmp ("rfc822-headers", m->subtype) || + !ascii_strcasecmp ("enriched", m->subtype)) + return 0; + break; + + case TYPEAPPLICATION: + if((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp(m)) + return 0; + if((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime(m)) + return 0; + break; + + case TYPEMULTIPART: + case TYPEMESSAGE: + return 0; + } + + return 1; +} + +int mutt_is_text_part (BODY *b) +{ + int t = b->type; + char *s = b->subtype; + + if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b)) + return 0; + + if (t == TYPETEXT) + return 1; + + if (t == TYPEMESSAGE) + { + if (!ascii_strcasecmp ("delivery-status", s)) + return 1; + } + + if ((WithCrypto & APPLICATION_PGP) && t == TYPEAPPLICATION) + { + if (!ascii_strcasecmp ("pgp-keys", s)) + return 1; + } + + return 0; +} + +void mutt_free_envelope (ENVELOPE **p) +{ + if (!*p) return; + rfc822_free_address (&(*p)->return_path); + rfc822_free_address (&(*p)->to); + rfc822_free_address (&(*p)->cc); + rfc822_free_address (&(*p)->bcc); + rfc822_free_address (&(*p)->sender); + rfc822_free_address (&(*p)->from); + rfc822_free_address (&(*p)->reply_to); + rfc822_free_address (&(*p)->mail_followup_to); + FREE (&(*p)->subject); + FREE (&(*p)->message_id); + FREE (&(*p)->supersedes); + FREE (&(*p)->date); + FREE (&(*p)->organization); +#ifdef USE_NNTP + FREE (&(*p)->newsgroups); + FREE (&(*p)->xref); + FREE (&(*p)->followup_to); + FREE (&(*p)->x_comment_to); +#endif + mutt_free_list (&(*p)->references); + mutt_free_list (&(*p)->in_reply_to); + mutt_free_list (&(*p)->userhdrs); + FREE (p); +} + +void _mutt_mktemp (char *s, const char *src, int line) +{ + snprintf (s, _POSIX_PATH_MAX, "%s/mutt-%s-%d-%d", NONULL (Tempdir), NONULL(Hostname), (int) getpid (), Counter++); + dprint (1, (debugfile, "%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s)); + unlink (s); +} + +void mutt_free_alias (ALIAS **p) +{ + ALIAS *t; + + while (*p) + { + t = *p; + *p = (*p)->next; + FREE (&t->name); + rfc822_free_address (&t->addr); + FREE (&t); + } +} + +/* collapse the pathname using ~ or = when possible */ +void mutt_pretty_mailbox (char *s) +{ + char *p = s, *q = s; + size_t len; + url_scheme_t scheme; + + scheme = url_check_scheme (s); + +#ifdef USE_IMAP + if (scheme == U_IMAP || scheme == U_IMAPS) + { + imap_pretty_mailbox (s); + return; + } +#endif + + /* if s is an url, only collapse path component */ + if (scheme != U_UNKNOWN) + { + p = strchr(s, ':')+1; + if (!strncmp (p, "//", 2)) + q = strchr (p+2, '/'); + if (!q) + q = strchr (p, '\0'); + p = q; + } + + /* first attempt to collapse the pathname */ + while (*p) + { + if (*p == '/' && p[1] == '/') + { + *q++ = '/'; + p += 2; + } + else if (p[0] == '/' && p[1] == '.' && p[2] == '/') + { + *q++ = '/'; + p += 3; + } + else + *q++ = *p++; + } + *q = 0; + + if (mutt_strncmp (s, Maildir, (len = mutt_strlen (Maildir))) == 0 && + s[len] == '/') + { + *s++ = '='; + memmove (s, s + len, mutt_strlen (s + len) + 1); + } + else if (mutt_strncmp (s, Homedir, (len = mutt_strlen (Homedir))) == 0 && + s[len] == '/') + { + *s++ = '~'; + memmove (s, s + len - 1, mutt_strlen (s + len - 1) + 1); + } +} + +void mutt_pretty_size (char *s, size_t len, long n) +{ + if (n == 0) + strfcpy (s, "0K", len); + else if (n < 10189) /* 0.1K - 9.9K */ + snprintf (s, len, "%3.1fK", (n < 103) ? 0.1 : n / 1024.0); + else if (n < 1023949) /* 10K - 999K */ + { + /* 51 is magic which causes 10189/10240 to be rounded up to 10 */ + snprintf (s, len, "%ldK", (n + 51) / 1024); + } + else if (n < 10433332) /* 1.0M - 9.9M */ + snprintf (s, len, "%3.1fM", n / 1048576.0); + else /* 10M+ */ + { + /* (10433332 + 52428) / 1048576 = 10 */ + snprintf (s, len, "%ldM", (n + 52428) / 1048576); + } +} + +void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt, const char *src) +{ + char tmp[LONG_STRING]; + + mutt_quote_filename (tmp, sizeof (tmp), src); + mutt_expand_fmt (dest, destlen, fmt, tmp); +} + +void mutt_expand_fmt (char *dest, size_t destlen, const char *fmt, const char *src) +{ + const char *p; + char *d; + size_t slen; + int found = 0; + + slen = mutt_strlen (src); + destlen--; + + for (p = fmt, d = dest; destlen && *p; p++) + { + if (*p == '%') + { + switch (p[1]) + { + case '%': + *d++ = *p++; + destlen--; + break; + case 's': + found = 1; + strfcpy (d, src, destlen + 1); + d += destlen > slen ? slen : destlen; + destlen -= destlen > slen ? slen : destlen; + p++; + break; + default: + *d++ = *p; + destlen--; + break; + } + } + else + { + *d++ = *p; + destlen--; + } + } + + *d = '\0'; + + if (!found && destlen > 0) + { + strncat (dest, " ", destlen); + strncat (dest, src, destlen-1); + } + +} + +/* return 0 on success, -1 on abort, 1 on error */ +int mutt_check_overwrite (const char *attname, const char *path, + char *fname, size_t flen, int *append, char **directory) +{ + int rc = 0; + char tmp[_POSIX_PATH_MAX]; + struct stat st; + + strfcpy (fname, path, flen); + if (access (fname, F_OK) != 0) + return 0; + if (stat (fname, &st) != 0) + return -1; + if (S_ISDIR (st.st_mode)) + { + if (directory) + { + switch (mutt_multi_choice + (_("File is a directory, save under it? [(y)es, (n)o, (a)ll]"), _("yna"))) + { + case 3: /* all */ + mutt_str_replace (directory, fname); + break; + case 1: /* yes */ + FREE (directory); + break; + case -1: /* abort */ + FREE (directory); + return -1; + case 2: /* no */ + FREE (directory); + return 1; + } + } + else if ((rc = mutt_yesorno (_("File is a directory, save under it?"), M_YES)) != M_YES) + return (rc == M_NO) ? 1 : -1; + + if (!attname || !attname[0]) + { + tmp[0] = 0; + if (mutt_get_field (_("File under directory: "), tmp, sizeof (tmp), + M_FILE | M_CLEAR) != 0 || !tmp[0]) + return (-1); + mutt_concat_path (fname, path, tmp, flen); + } + else + mutt_concat_path (fname, path, mutt_basename (attname), flen); + } + + if (*append == 0 && access (fname, F_OK) == 0) + { + switch (mutt_multi_choice + (_("File exists, (o)verwrite, (a)ppend, or (c)ancel?"), _("oac"))) + { + case -1: /* abort */ + return -1; + case 3: /* cancel */ + return 1; + + case 2: /* append */ + *append = M_SAVE_APPEND; + break; + case 1: /* overwrite */ + *append = M_SAVE_OVERWRITE; + break; + } + } + return 0; +} + +void mutt_save_path (char *d, size_t dsize, ADDRESS *a) +{ + if (a && a->mailbox) + { + strfcpy (d, a->mailbox, dsize); + if (!option (OPTSAVEADDRESS)) + { + char *p; + + if ((p = strpbrk (d, "%@"))) + *p = 0; + } + mutt_strlower (d); + } + else + *d = 0; +} + +void mutt_safe_path (char *s, size_t l, ADDRESS *a) +{ + char *p; + + mutt_save_path (s, l, a); + for (p = s; *p; p++) + if (*p == '/' || ISSPACE (*p) || !IsPrint ((unsigned char) *p)) + *p = '_'; +} + + +void mutt_FormatString (char *dest, /* output buffer */ + size_t destlen, /* output buffer len */ + const char *src, /* template string */ + format_t *callback, /* callback for processing */ + unsigned long data, /* callback data */ + format_flag flags) /* callback flags */ +{ + char prefix[SHORT_STRING], buf[LONG_STRING], *cp, *wptr = dest, ch; + char ifstring[SHORT_STRING], elsestring[SHORT_STRING]; + size_t wlen, count, len; + + prefix[0] = '\0'; + destlen--; /* save room for the terminal \0 */ + wlen = (flags & M_FORMAT_ARROWCURSOR && option (OPTARROWCURSOR)) ? 3 : 0; + + while (*src && wlen < destlen) + { + if (*src == '%') + { + if (*++src == '%') + { + *wptr++ = '%'; + wlen++; + src++; + continue; + } + + if (*src == '?') + { + flags |= M_FORMAT_OPTIONAL; + src++; + } + else + { + flags &= ~M_FORMAT_OPTIONAL; + + /* eat the format string */ + cp = prefix; + count = 0; + while (count < sizeof (prefix) && + (isdigit ((unsigned char) *src) || *src == '.' || *src == '-')) + { + *cp++ = *src++; + count++; + } + *cp = 0; + } + + if (!*src) + break; /* bad format */ + + ch = *src++; /* save the character to switch on */ + + if (flags & M_FORMAT_OPTIONAL) + { + if (*src != '?') + break; /* bad format */ + src++; + + /* eat the `if' part of the string */ + cp = ifstring; + count = 0; + while (count < sizeof (ifstring) && *src && *src != '?' && *src != '&') + { + *cp++ = *src++; + count++; + } + *cp = 0; + + /* eat the `else' part of the string (optional) */ + if (*src == '&') + src++; /* skip the & */ + cp = elsestring; + count = 0; + while (count < sizeof (elsestring) && *src && *src != '?') + { + *cp++ = *src++; + count++; + } + *cp = 0; + + if (!*src) + break; /* bad format */ + + src++; /* move past the trailing `?' */ + } + + /* handle generic cases first */ + if (ch == '>') + { + /* right justify to EOL */ + ch = *src++; /* pad char */ + /* calculate space left on line. if we've already written more data + than will fit on the line, ignore the rest of the line */ + count = (COLS < destlen ? COLS : destlen); + if (count > wlen) + { + count -= wlen; /* how many chars left on this line */ + mutt_FormatString (buf, sizeof (buf), src, callback, data, flags); + len = mutt_strlen (buf); + if (count > len) + { + count -= len; /* how many chars to pad */ + memset (wptr, ch, count); + wptr += count; + wlen += count; + } + if (len + wlen > destlen) + len = destlen - wlen; + memcpy (wptr, buf, len); + wptr += len; + wlen += len; + } + break; /* skip rest of input */ + } + else if (ch == '|') + { + /* pad to EOL */ + ch = *src++; + if (destlen > COLS) + destlen = COLS; + if (destlen > wlen) + { + count = destlen - wlen; + memset (wptr, ch, count); + wptr += count; + } + break; /* skip rest of input */ + } + else + { + short tolower = 0; + short nodots = 0; + + while (ch == '_' || ch == ':') + { + if (ch == '_') + tolower = 1; + else if (ch == ':') + nodots = 1; + + ch = *src++; + } + + /* use callback function to handle this case */ + src = callback (buf, sizeof (buf), ch, src, prefix, ifstring, elsestring, data, flags); + + if (tolower) + mutt_strlower (buf); + if (nodots) + { + char *p = buf; + for (; *p; p++) + if (*p == '.') + *p = '_'; + } + + if ((len = mutt_strlen (buf)) + wlen > destlen) + len = (destlen - wlen > 0) ? (destlen - wlen) : 0; + + memcpy (wptr, buf, len); + wptr += len; + wlen += len; + } + } + else if (*src == '\\') + { + if (!*++src) + break; + switch (*src) + { + case 'n': + *wptr = '\n'; + break; + case 't': + *wptr = '\t'; + break; + case 'r': + *wptr = '\r'; + break; + case 'f': + *wptr = '\f'; + break; + case 'v': + *wptr = '\v'; + break; + default: + *wptr = *src; + break; + } + src++; + wptr++; + wlen++; + } + else + { + *wptr++ = *src++; + wlen++; + } + } + *wptr = 0; + +#if 0 + if (flags & M_FORMAT_MAKEPRINT) + { + /* Make sure that the string is printable by changing all non-printable + chars to dots, or spaces for non-printable whitespace */ + for (cp = dest ; *cp ; cp++) + if (!IsPrint (*cp) && + !((flags & M_FORMAT_TREE) && (*cp <= M_TREE_MAX))) + *cp = isspace ((unsigned char) *cp) ? ' ' : '.'; + } +#endif +} + +/* This function allows the user to specify a command to read stdout from in + place of a normal file. If the last character in the string is a pipe (|), + then we assume it is a commmand to run instead of a normal file. */ +FILE *mutt_open_read (const char *path, pid_t *thepid) +{ + FILE *f; + int len = mutt_strlen (path); + + if (path[len - 1] == '|') + { + /* read from a pipe */ + + char *s = safe_strdup (path); + + s[len - 1] = 0; + mutt_endwin (NULL); + *thepid = mutt_create_filter (s, NULL, &f, NULL); + FREE (&s); + } + else + { + f = fopen (path, "r"); + *thepid = -1; + } + return (f); +} + +/* returns 0 if OK to proceed, -1 to abort, 1 to retry */ +int mutt_save_confirm (const char *s, struct stat *st) +{ + char tmp[_POSIX_PATH_MAX]; + int ret = 0; + int rc; + int magic = 0; + + magic = mx_get_magic (s); + +#ifdef USE_POP + if (magic == M_POP) + { + mutt_error _("Can't save message to POP mailbox."); + return 1; + } +#endif + +#ifdef USE_NNTP + if (magic == M_NNTP) + { + mutt_error _("Can't save message to newsserver."); + return 0; + } +#endif + + if (stat (s, st) != -1) + { + if (magic == -1) + { + mutt_error (_("%s is not a mailbox!"), s); + return 1; + } + + if (option (OPTCONFIRMAPPEND) && + (!TrashPath || (mutt_strcmp (s, TrashPath) != 0))) + /* if we're appending to the trash, there's no point in asking */ + { + snprintf (tmp, sizeof (tmp), _("Append messages to %s?"), s); + if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO) + ret = 1; + else if (rc == -1) + ret = -1; + } + } + else + { +#ifdef USE_IMAP + if (magic != M_IMAP) +#endif /* execute the block unconditionally if we don't use imap */ + { + st->st_mtime = 0; + st->st_atime = 0; + + if (errno == ENOENT) + { + if (option (OPTCONFIRMCREATE)) + { + snprintf (tmp, sizeof (tmp), _("Create %s?"), s); + if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO) + ret = 1; + else if (rc == -1) + ret = -1; + } + } + else + { + mutt_perror (s); + return 1; + } + } + } + + CLEARLINE (LINES-1); + return (ret); +} + +void state_prefix_putc (char c, STATE *s) +{ + if (s->flags & M_PENDINGPREFIX) + { + int i; + + i = strlen (Quotebuf); + Quotebuf[i++] = c; + Quotebuf[i] = '\0'; + if (i == sizeof (Quotebuf) - 1 || c == '\n') + { + char buf[2 * SHORT_STRING]; + int j = 0, offset = 0; + regmatch_t pmatch[1]; + + state_reset_prefix (s); + while (regexec ((regex_t *) QuoteRegexp.rx, &Quotebuf[offset], 1, pmatch, 0) == 0) + offset += pmatch->rm_eo; + + if (!option (OPTQUOTEEMPTY) && Quotebuf[0] == '\n') + strcpy (buf, Quotebuf); + else if (option (OPTQUOTEQUOTED) && offset) + { + for (i = 0; i < offset; i++) + if (Quotebuf[i] != ' ') + j = i; + strncpy (buf, Quotebuf, j + 1); + strcpy (buf + j + 1, Quotebuf + j); + } + else + snprintf (buf, sizeof (buf), "%s%s", NONULL(s->prefix), Quotebuf); + + state_puts (buf, s); + } + } + else + state_putc (c, s); + + if (c == '\n') + { + state_set_prefix (s); + Quotebuf[0] = '\0'; + } +} + +int state_printf (STATE *s, const char *fmt, ...) +{ + int rv; + va_list ap; + + va_start (ap, fmt); + rv = vfprintf (s->fpout, fmt, ap); + va_end (ap); + + return rv; +} + +void state_mark_attach (STATE *s) +{ + if ((s->flags & M_DISPLAY) && !mutt_strcmp (Pager, "builtin")) + state_puts (AttachmentMarker, s); +} + +void state_attach_puts (const char *t, STATE *s) +{ + if (*t != '\n') state_mark_attach (s); + while (*t) + { + state_putc (*t, s); + if (*t++ == '\n' && *t) + if (*t != '\n') state_mark_attach (s); + } +} + +void mutt_display_sanitize (char *s) +{ + for (; *s; s++) + { + if (!IsPrint (*s)) + *s = '?'; + } +} + +void mutt_sleep (short s) +{ + if (SleepTime > s) + sleep (SleepTime); + else if (s) + sleep (s); +} + +void mutt_buffer_addstr (BUFFER* buf, const char* s) +{ + mutt_buffer_add (buf, s, mutt_strlen (s)); +} + +void mutt_buffer_addch (BUFFER* buf, char c) +{ + mutt_buffer_add (buf, &c, 1); +} + +/* dynamically grows a BUFFER to accomodate s, in increments of 128 bytes. + * Always one byte bigger than necessary for the null terminator, and + * the buffer is always null-terminated */ +void mutt_buffer_add (BUFFER* buf, const char* s, size_t len) +{ + size_t offset; + + if (buf->dptr + len + 1 > buf->data + buf->dsize) + { + offset = buf->dptr - buf->data; + buf->dsize += len < 128 ? 128 : len + 1; + safe_realloc ((void**) &buf->data, buf->dsize); + buf->dptr = buf->data + offset; + } + memcpy (buf->dptr, s, len); + buf->dptr += len; + *(buf->dptr) = '\0'; +} + +/* Decrease a file's modification time by 1 second */ + +time_t mutt_decrease_mtime (const char *f, struct stat *st) +{ + struct utimbuf utim; + struct stat _st; + time_t mtime; + + if (!st) + { + if (stat (f, &_st) == -1) + return -1; + st = &_st; + } + + if ((mtime = st->st_mtime) == time (NULL)) + { + mtime -= 1; + utim.actime = mtime; + utim.modtime = mtime; + utime (f, &utim); + } + + return mtime; +} + +const char *mutt_make_version (void) +{ + static char vstring[STRING]; + snprintf (vstring, sizeof (vstring), "Mutt %s (%s)", + MUTT_VERSION, ReleaseDate); + return vstring; +} + +REGEXP *mutt_compile_regexp (const char *s, int flags) +{ + REGEXP *pp = safe_calloc (sizeof (REGEXP), 1); + pp->pattern = safe_strdup (s); + pp->rx = safe_calloc (sizeof (regex_t), 1); + if (REGCOMP (pp->rx, NONULL(s), flags) != 0) + mutt_free_regexp (&pp); + + return pp; +} + +void mutt_free_regexp (REGEXP **pp) +{ + FREE (&(*pp)->pattern); + regfree ((*pp)->rx); + FREE (&(*pp)->rx); + FREE (pp); +} + +void mutt_free_rx_list (RX_LIST **list) +{ + RX_LIST *p; + + if (!list) return; + while (*list) + { + p = *list; + *list = (*list)->next; + mutt_free_regexp (&p->rx); + FREE (&p); + } +} + +int mutt_match_rx_list (const char *s, RX_LIST *l) +{ + if (!s) return 0; + + for (; l; l = l->next) + { + if (regexec (l->rx->rx, s, (size_t) 0, (regmatch_t *) 0, (int) 0) == 0) + { + dprint (5, (debugfile, "mutt_match_rx_list: %s matches %s\n", s, l->rx->pattern)); + return 1; + } + } + + return 0; +} diff --git a/mx.c b/mx.c new file mode 100644 index 0000000..2186651 --- /dev/null +++ b/mx.c @@ -0,0 +1,1779 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mx.h" +#include "rfc2047.h" +#include "sort.h" +#include "mailbox.h" +#include "copy.h" +#include "keymap.h" +#include "url.h" + +#ifdef USE_IMAP +#include "imap.h" +#endif + +#ifdef USE_POP +#include "pop.h" +#endif + +#ifdef USE_NNTP +#include "nntp.h" +#endif + +#ifdef BUFFY_SIZE +#include "buffy.h" +#endif + +#ifdef USE_DOTLOCK +#include "dotlock.h" +#endif + +#include "mutt_crypt.h" + +#include <dirent.h> +#include <fcntl.h> +#include <sys/file.h> +#include <sys/stat.h> +#include <errno.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#ifndef BUFFY_SIZE +#include <utime.h> +#endif + + +#define mutt_is_spool(s) (mutt_strcmp (Spoolfile, s) == 0) + +#ifdef USE_DOTLOCK +/* parameters: + * path - file to lock + * retry - should retry if unable to lock? + */ + +#ifdef DL_STANDALONE + +static int invoke_dotlock (const char *path, int dummy, int flags, int retry) +{ + char cmd[LONG_STRING + _POSIX_PATH_MAX]; + char f[SHORT_STRING + _POSIX_PATH_MAX]; + char r[SHORT_STRING]; + + if (flags & DL_FL_RETRY) + snprintf (r, sizeof (r), "-r %d ", retry ? MAXLOCKATTEMPT : 0); + + mutt_quote_filename (f, sizeof (f), path); + + snprintf (cmd, sizeof (cmd), + "%s %s%s%s%s%s%s%s", + NONULL (MuttDotlock), + flags & DL_FL_TRY ? "-t " : "", + flags & DL_FL_UNLOCK ? "-u " : "", + flags & DL_FL_USEPRIV ? "-p " : "", + flags & DL_FL_FORCE ? "-f " : "", + flags & DL_FL_UNLINK ? "-d " : "", + flags & DL_FL_RETRY ? r : "", + f); + + return mutt_system (cmd); +} + +#else + +#define invoke_dotlock dotlock_invoke + +#endif + +static int dotlock_file (const char *path, int fd, int retry) +{ + int r; + int flags = DL_FL_USEPRIV | DL_FL_RETRY; + + if (retry) retry = 1; + +retry_lock: + if ((r = invoke_dotlock(path, fd, flags, retry)) == DL_EX_EXIST) + { + if (!option (OPTNOCURSES)) + { + char msg[LONG_STRING]; + + snprintf(msg, sizeof(msg), _("Lock count exceeded, remove lock for %s?"), + path); + if(retry && mutt_yesorno(msg, M_YES) == M_YES) + { + flags |= DL_FL_FORCE; + retry--; + mutt_clear_error (); + goto retry_lock; + } + } + else + { + mutt_error ( _("Can't dotlock %s.\n"), path); + } + } + return (r == DL_EX_OK ? 0 : -1); +} + +static int undotlock_file (const char *path, int fd) +{ + return (invoke_dotlock(path, fd, DL_FL_USEPRIV | DL_FL_UNLOCK, 0) == DL_EX_OK ? + 0 : -1); +} + +#endif /* USE_DOTLOCK */ + +/* Args: + * excl if excl != 0, request an exclusive lock + * dot if dot != 0, try to dotlock the file + * timeout should retry locking? + */ +int mx_lock_file (const char *path, int fd, int excl, int dot, int timeout) +{ +#if defined (USE_FCNTL) || defined (USE_FLOCK) + int count; + int attempt; + struct stat prev_sb; +#endif + int r = 0; + +#ifdef USE_FCNTL + struct flock lck; + + + memset (&lck, 0, sizeof (struct flock)); + lck.l_type = excl ? F_WRLCK : F_RDLCK; + lck.l_whence = SEEK_SET; + + count = 0; + attempt = 0; + while (fcntl (fd, F_SETLK, &lck) == -1) + { + struct stat sb; + dprint(1,(debugfile, "mx_lock_file(): fcntl errno %d.\n", errno)); + if (errno != EAGAIN && errno != EACCES) + { + mutt_perror ("fcntl"); + return (-1); + } + + if (fstat (fd, &sb) != 0) + sb.st_size = 0; + + if (count == 0) + prev_sb = sb; + + /* only unlock file if it is unchanged */ + if (prev_sb.st_size == sb.st_size && ++count >= (timeout?MAXLOCKATTEMPT:0)) + { + if (timeout) + mutt_error _("Timeout exceeded while attempting fcntl lock!"); + return (-1); + } + + prev_sb = sb; + + mutt_message (_("Waiting for fcntl lock... %d"), ++attempt); + sleep (1); + } +#endif /* USE_FCNTL */ + +#ifdef USE_FLOCK + count = 0; + attempt = 0; + while (flock (fd, (excl ? LOCK_EX : LOCK_SH) | LOCK_NB) == -1) + { + struct stat sb; + if (errno != EWOULDBLOCK) + { + mutt_perror ("flock"); + r = -1; + break; + } + + if (fstat(fd,&sb) != 0 ) + sb.st_size=0; + + if (count == 0) + prev_sb=sb; + + /* only unlock file if it is unchanged */ + if (prev_sb.st_size == sb.st_size && ++count >= (timeout?MAXLOCKATTEMPT:0)) + { + if (timeout) + mutt_error _("Timeout exceeded while attempting flock lock!"); + r = -1; + break; + } + + prev_sb = sb; + + mutt_message (_("Waiting for flock attempt... %d"), ++attempt); + sleep (1); + } +#endif /* USE_FLOCK */ + +#ifdef USE_DOTLOCK + if (r == 0 && dot) + r = dotlock_file (path, fd, timeout); +#endif /* USE_DOTLOCK */ + + if (r == -1) + { + /* release any other locks obtained in this routine */ + +#ifdef USE_FCNTL + lck.l_type = F_UNLCK; + fcntl (fd, F_SETLK, &lck); +#endif /* USE_FCNTL */ + +#ifdef USE_FLOCK + flock (fd, LOCK_UN); +#endif /* USE_FLOCK */ + + return (-1); + } + + return 0; +} + +int mx_unlock_file (const char *path, int fd, int dot) +{ +#ifdef USE_FCNTL + struct flock unlockit = { F_UNLCK, 0, 0, 0 }; + + memset (&unlockit, 0, sizeof (struct flock)); + unlockit.l_type = F_UNLCK; + unlockit.l_whence = SEEK_SET; + fcntl (fd, F_SETLK, &unlockit); +#endif + +#ifdef USE_FLOCK + flock (fd, LOCK_UN); +#endif + +#ifdef USE_DOTLOCK + if (dot) + undotlock_file (path, fd); +#endif + + return 0; +} + +void mx_unlink_empty (const char *path) +{ + int fd; +#ifndef USE_DOTLOCK + struct stat sb; +#endif + + if ((fd = open (path, O_RDWR)) == -1) + return; + + if (mx_lock_file (path, fd, 1, 0, 1) == -1) + { + close (fd); + return; + } + +#ifdef USE_DOTLOCK + invoke_dotlock (path, fd, DL_FL_UNLINK, 1); +#else + if (fstat (fd, &sb) == 0 && sb.st_size == 0) + unlink (path); +#endif + + mx_unlock_file (path, fd, 0); + close (fd); +} + +/* try to figure out what type of mailbox ``path'' is + * + * return values: + * M_* mailbox type + * 0 not a mailbox + * -1 error + */ + +#ifdef USE_IMAP + +int mx_is_imap(const char *p) +{ + url_scheme_t scheme; + + if (!p) + return 0; + + if (*p == '{') + return 1; + + scheme = url_check_scheme (p); + if (scheme == U_IMAP || scheme == U_IMAPS) + return 1; + + return 0; +} + +#endif + +#ifdef USE_POP +int mx_is_pop (const char *p) +{ + url_scheme_t scheme; + + if (!p) + return 0; + + scheme = url_check_scheme (p); + if (scheme == U_POP || scheme == U_POPS) + return 1; + + return 0; +} +#endif + +#ifdef USE_NNTP +int mx_is_nntp (const char *p) +{ + url_scheme_t scheme; + + if (!p) + return 0; + + scheme = url_check_scheme (p); + if (scheme == U_NNTP || scheme == U_NNTPS) + return 1; + + return 0; +} +#endif + +int mx_get_magic (const char *path) +{ + struct stat st; + int magic = 0; + char tmp[_POSIX_PATH_MAX]; + FILE *f; + +#ifdef USE_IMAP + if(mx_is_imap(path)) + return M_IMAP; +#endif /* USE_IMAP */ + +#ifdef USE_POP + if (mx_is_pop (path)) + return M_POP; +#endif /* USE_POP */ + +#ifdef USE_NNTP + if (mx_is_nntp (path)) + return M_NNTP; +#endif /* USE_NNTP */ + + if (stat (path, &st) == -1) + { + dprint (1, (debugfile, "mx_get_magic(): unable to stat %s: %s (errno %d).\n", + path, strerror (errno), errno)); + return (-1); + } + + if (S_ISDIR (st.st_mode)) + { + /* check for maildir-style mailbox */ + + snprintf (tmp, sizeof (tmp), "%s/cur", path); + if (stat (tmp, &st) == 0 && S_ISDIR (st.st_mode)) + return (M_MAILDIR); + + /* check for mh-style mailbox */ + + snprintf (tmp, sizeof (tmp), "%s/.mh_sequences", path); + if (access (tmp, F_OK) == 0) + return (M_MH); + + snprintf (tmp, sizeof (tmp), "%s/.xmhcache", path); + if (access (tmp, F_OK) == 0) + return (M_MH); + + snprintf (tmp, sizeof (tmp), "%s/.mew_cache", path); + if (access (tmp, F_OK) == 0) + return (M_MH); + + snprintf (tmp, sizeof (tmp), "%s/.mew-cache", path); + if (access (tmp, F_OK) == 0) + return (M_MH); + + snprintf (tmp, sizeof (tmp), "%s/.sylpheed_cache", path); + if (access (tmp, F_OK) == 0) + return (M_MH); + + /* + * ok, this isn't an mh folder, but mh mode can be used to read + * Usenet news from the spool. ;-) + */ + + snprintf (tmp, sizeof (tmp), "%s/.overview", path); + if (access (tmp, F_OK) == 0) + return (M_MH); + + } + else if (st.st_size == 0) + { + /* hard to tell what zero-length files are, so assume the default magic */ + if (DefaultMagic == M_MBOX || DefaultMagic == M_MMDF) + return (DefaultMagic); + else + return (M_MBOX); + } + else if ((f = fopen (path, "r")) != NULL) + { +#ifndef BUFFY_SIZE + struct utimbuf times; +#endif + + fgets (tmp, sizeof (tmp), f); + if (mutt_strncmp ("From ", tmp, 5) == 0) + magic = M_MBOX; + else if (mutt_strcmp (MMDF_SEP, tmp) == 0) + magic = M_MMDF; + safe_fclose (&f); +#ifndef BUFFY_SIZE + /* need to restore the times here, the file was not really accessed, + * only the type was accessed. This is important, because detection + * of "new mail" depends on those times set correctly. + */ + times.actime = st.st_atime; + times.modtime = st.st_mtime; + utime (path, ×); +#endif + } + else + { + dprint (1, (debugfile, "mx_get_magic(): unable to open file %s for reading.\n", + path)); + mutt_perror (path); + return (-1); + } + + return (magic); +} + +/* + * set DefaultMagic to the given value + */ +int mx_set_magic (const char *s) +{ + if (ascii_strcasecmp (s, "mbox") == 0) + DefaultMagic = M_MBOX; + else if (ascii_strcasecmp (s, "mmdf") == 0) + DefaultMagic = M_MMDF; + else if (ascii_strcasecmp (s, "mh") == 0) + DefaultMagic = M_MH; + else if (ascii_strcasecmp (s, "maildir") == 0) + DefaultMagic = M_MAILDIR; + else + return (-1); + + return 0; +} + +/* mx_access: Wrapper for access, checks permissions on a given mailbox. + * We may be interested in using ACL-style flags at some point, currently + * we use the normal access() flags. */ +int mx_access (const char* path, int flags) +{ +#ifdef USE_IMAP + if (mx_is_imap (path)) + return imap_access (path, flags); +#endif + + return access (path, flags); +} + +static int mx_open_mailbox_append (CONTEXT *ctx, int flags) +{ + struct stat sb; + + ctx->append = 1; + +#ifdef USE_IMAP + + if(mx_is_imap(ctx->path)) + return imap_open_mailbox_append (ctx); + +#endif + + if(stat(ctx->path, &sb) == 0) + { + ctx->magic = mx_get_magic (ctx->path); + + switch (ctx->magic) + { + case 0: + mutt_error (_("%s is not a mailbox."), ctx->path); + /* fall through */ + case -1: + return (-1); + } + } + else if (errno == ENOENT) + { + ctx->magic = DefaultMagic; + + if (ctx->magic == M_MH || ctx->magic == M_MAILDIR) + { + char tmp[_POSIX_PATH_MAX]; + + if (mkdir (ctx->path, S_IRWXU)) + { + mutt_perror (ctx->path); + return (-1); + } + + if (ctx->magic == M_MAILDIR) + { + snprintf (tmp, sizeof (tmp), "%s/cur", ctx->path); + if (mkdir (tmp, S_IRWXU)) + { + mutt_perror (tmp); + rmdir (ctx->path); + return (-1); + } + + snprintf (tmp, sizeof (tmp), "%s/new", ctx->path); + if (mkdir (tmp, S_IRWXU)) + { + mutt_perror (tmp); + snprintf (tmp, sizeof (tmp), "%s/cur", ctx->path); + rmdir (tmp); + rmdir (ctx->path); + return (-1); + } + snprintf (tmp, sizeof (tmp), "%s/tmp", ctx->path); + if (mkdir (tmp, S_IRWXU)) + { + mutt_perror (tmp); + snprintf (tmp, sizeof (tmp), "%s/cur", ctx->path); + rmdir (tmp); + snprintf (tmp, sizeof (tmp), "%s/new", ctx->path); + rmdir (tmp); + rmdir (ctx->path); + return (-1); + } + } + else + { + int i; + + snprintf (tmp, sizeof (tmp), "%s/.mh_sequences", ctx->path); + if ((i = creat (tmp, S_IRWXU)) == -1) + { + mutt_perror (tmp); + rmdir (ctx->path); + return (-1); + } + close (i); + } + } + } + else + { + mutt_perror (ctx->path); + return (-1); + } + + switch (ctx->magic) + { + case M_MBOX: + case M_MMDF: + if ((ctx->fp = safe_fopen (ctx->path, flags & M_NEWFOLDER ? "w" : "a")) == NULL || + mbox_lock_mailbox (ctx, 1, 1) != 0) + { + if (!ctx->fp) + mutt_perror (ctx->path); + else + { + mutt_error (_("Couldn't lock %s\n"), ctx->path); + safe_fclose (&ctx->fp); + } + return (-1); + } + fseek (ctx->fp, 0, 2); + break; + + case M_MH: + case M_MAILDIR: + /* nothing to do */ + break; + + default: + return (-1); + } + + return 0; +} + +/* + * open a mailbox and parse it + * + * Args: + * flags M_NOSORT do not sort mailbox + * M_APPEND open mailbox for appending + * M_READONLY open mailbox in read-only mode + * M_QUIET only print error messages + * ctx if non-null, context struct to use + */ +CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) +{ + CONTEXT *ctx = pctx; + int rc; + + if (!ctx) + ctx = safe_malloc (sizeof (CONTEXT)); + memset (ctx, 0, sizeof (CONTEXT)); + ctx->path = safe_strdup (path); + + ctx->msgnotreadyet = -1; + ctx->collapsed = 0; + + if (flags & M_QUIET) + ctx->quiet = 1; + if (flags & M_READONLY) + ctx->readonly = 1; + + if (flags & (M_APPEND|M_NEWFOLDER)) + { + if (mx_open_mailbox_append (ctx, flags) != 0) + { + mx_fastclose_mailbox (ctx); + if (!pctx) + FREE (&ctx); + return NULL; + } + return ctx; + } + + ctx->magic = mx_get_magic (path); + + if(ctx->magic == 0) + mutt_error (_("%s is not a mailbox."), path); + + if(ctx->magic == -1) + mutt_perror(path); + + if(ctx->magic <= 0) + { + mx_fastclose_mailbox (ctx); + if (!pctx) + FREE (&ctx); + return (NULL); + } + + /* if the user has a `push' command in their .muttrc, or in a folder-hook, + * it will cause the progress messages not to be displayed because + * mutt_refresh() will think we are in the middle of a macro. so set a + * flag to indicate that we should really refresh the screen. + */ + set_option (OPTFORCEREFRESH); + + if (!ctx->quiet) + mutt_message (_("Reading %s..."), ctx->path); + + switch (ctx->magic) + { + case M_MH: + rc = mh_read_dir (ctx, NULL); + break; + + case M_MAILDIR: + rc = maildir_read_dir (ctx); + break; + + case M_MMDF: + case M_MBOX: + rc = mbox_open_mailbox (ctx); + break; + +#ifdef USE_IMAP + case M_IMAP: + rc = imap_open_mailbox (ctx); + break; +#endif /* USE_IMAP */ + +#ifdef USE_POP + case M_POP: + rc = pop_open_mailbox (ctx); + break; +#endif /* USE_POP */ + +#ifdef USE_NNTP + case M_NNTP: + rc = nntp_open_mailbox (ctx); + break; +#endif /* USE_NNTP */ + + default: + rc = -1; + break; + } + + if (rc == 0) + { + if ((flags & M_NOSORT) == 0) + { + /* avoid unnecessary work since the mailbox is completely unthreaded + to begin with */ + unset_option (OPTSORTSUBTHREADS); + unset_option (OPTNEEDRESCORE); + mutt_sort_headers (ctx, 1); + } + if (!ctx->quiet) + mutt_clear_error (); + } + else + { + mx_fastclose_mailbox (ctx); + if (!pctx) + FREE (&ctx); + } + + unset_option (OPTFORCEREFRESH); + return (ctx); +} + +/* free up memory associated with the mailbox context */ +void mx_fastclose_mailbox (CONTEXT *ctx) +{ + int i; + + if(!ctx) + return; + +#ifdef USE_IMAP + if (ctx->magic == M_IMAP) + imap_close_mailbox (ctx); +#endif /* USE_IMAP */ +#ifdef USE_POP + if (ctx->magic == M_POP) + pop_close_mailbox (ctx); +#endif /* USE_POP */ +#ifdef USE_NNTP + if (ctx->magic == M_NNTP) + nntp_fastclose_mailbox (ctx); +#endif /* USE_NNTP */ + if (ctx->subj_hash) + hash_destroy (&ctx->subj_hash, NULL); + if (ctx->id_hash) + hash_destroy (&ctx->id_hash, NULL); + mutt_clear_threads (ctx); + for (i = 0; i < ctx->msgcount; i++) + mutt_free_header (&ctx->hdrs[i]); + FREE (&ctx->hdrs); + FREE (&ctx->v2r); + FREE (&ctx->path); + FREE (&ctx->pattern); + if (ctx->limit_pattern) + mutt_pattern_free (&ctx->limit_pattern); + safe_fclose (&ctx->fp); + memset (ctx, 0, sizeof (CONTEXT)); +} + +/* save changes to disk */ +static int sync_mailbox (CONTEXT *ctx, int *index_hint) +{ +#ifdef BUFFY_SIZE + BUFFY *tmp = NULL; +#endif + int rc = -1; + + if (!ctx->quiet) + mutt_message (_("Writing %s..."), ctx->path); + + switch (ctx->magic) + { + case M_MBOX: + case M_MMDF: + rc = mbox_sync_mailbox (ctx, index_hint); +#ifdef BUFFY_SIZE + tmp = mutt_find_mailbox (ctx->path); +#endif + break; + + case M_MH: + case M_MAILDIR: + rc = mh_sync_mailbox (ctx, index_hint); + break; + +#ifdef USE_IMAP + case M_IMAP: + /* extra argument means EXPUNGE */ + rc = imap_sync_mailbox (ctx, 1, index_hint); + break; +#endif /* USE_IMAP */ + +#ifdef USE_POP + case M_POP: + rc = pop_sync_mailbox (ctx, index_hint); + break; +#endif /* USE_POP */ + +#ifdef USE_NNTP + case M_NNTP: + rc = nntp_sync_mailbox (ctx); + break; +#endif /* USE_NNTP */ + } + +#if 0 + if (!ctx->quiet && !ctx->shutup && rc == -1) + mutt_error ( _("Could not synchronize mailbox %s!"), ctx->path); +#endif + +#ifdef BUFFY_SIZE + if (tmp && tmp->new == 0) + mutt_update_mailbox (tmp); +#endif + return rc; +} + +/* move deleted mails to the trash folder */ +static int trash_append (CONTEXT *ctx) +{ + CONTEXT *ctx_trash; + int i = 0; + struct stat st, stc; + + if (!TrashPath || !ctx->deleted || + (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH))) + return 0; + + for (;i < ctx->msgcount && (!ctx->hdrs[i]->deleted || + ctx->hdrs[i]->appended); i++); + if (i == ctx->msgcount) + return 0; /* nothing to be done */ + + if (mutt_save_confirm (TrashPath, &st) != 0) + { + mutt_error _("message(s) not deleted"); + return -1; + } + + if (lstat (ctx->path, &stc) == 0 && stc.st_ino == st.st_ino + && stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev) + return 0; /* we are in the trash folder: simple sync */ + + if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL) + { + for (i = 0 ; i < ctx->msgcount ; i++) + if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended + && !ctx->hdrs[i]->purged + && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1) + { + mx_close_mailbox (ctx_trash, NULL); + return -1; + } + + mx_close_mailbox (ctx_trash, NULL); + } + else + { + mutt_error _("Can't open trash folder"); + return -1; + } + + return 0; +} + +/* save changes and close mailbox */ +int mx_close_mailbox (CONTEXT *ctx, int *index_hint) +{ + int i, move_messages = 0, purge = 1, read_msgs = 0; + int check; + int isSpool = 0; + CONTEXT f; + char mbox[_POSIX_PATH_MAX]; + char buf[SHORT_STRING]; + + if (!ctx) return 0; + + ctx->closing = 1; + +#ifdef USE_NNTP + if (ctx->magic == M_NNTP) + { + int ret; + + ret = nntp_close_mailbox (ctx); + mx_fastclose_mailbox (ctx); + return ret; + } +#endif + if (ctx->readonly || ctx->dontwrite) + { + /* mailbox is readonly or we don't want to write */ + mx_fastclose_mailbox (ctx); + return 0; + } + + if (ctx->append) + { + /* mailbox was opened in write-mode */ + if (ctx->magic == M_MBOX || ctx->magic == M_MMDF) + mbox_close_mailbox (ctx); + else + mx_fastclose_mailbox (ctx); + return 0; + } + + for (i = 0; i < ctx->msgcount; i++) + { + if (!ctx->hdrs[i]->deleted && ctx->hdrs[i]->read + && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED))) + read_msgs++; + } + + if (read_msgs && quadoption (OPT_MOVE) != M_NO) + { + char *p; + + if ((p = mutt_find_hook (M_MBOXHOOK, ctx->path))) + { + isSpool = 1; + strfcpy (mbox, p, sizeof (mbox)); + } + else + { + strfcpy (mbox, NONULL(Inbox), sizeof (mbox)); + isSpool = mutt_is_spool (ctx->path) && !mutt_is_spool (mbox); + } + mutt_expand_path (mbox, sizeof (mbox)); + + if (isSpool) + { + snprintf (buf, sizeof (buf), _("Move read messages to %s?"), mbox); + if ((move_messages = query_quadoption (OPT_MOVE, buf)) == -1) + { + ctx->closing = 0; + return (-1); + } + } + } + + /* + * There is no point in asking whether or not to purge if we are + * just marking messages as "trash". + */ + if (ctx->deleted && !(ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH))) + { + snprintf (buf, sizeof (buf), ctx->deleted == 1 + ? _("Purge %d deleted message?") : _("Purge %d deleted messages?"), + ctx->deleted); + if ((purge = query_quadoption (OPT_DELETE, buf)) < 0) + { + ctx->closing = 0; + return (-1); + } + } + +#ifdef USE_IMAP + /* IMAP servers manage the OLD flag themselves */ + if (ctx->magic != M_IMAP) +#endif + if (option (OPTMARKOLD)) + { + for (i = 0; i < ctx->msgcount; i++) + { + if (!ctx->hdrs[i]->deleted && !ctx->hdrs[i]->old) + mutt_set_flag (ctx, ctx->hdrs[i], M_OLD, 1); + } + } + + if (move_messages) + { + mutt_message (_("Moving read messages to %s..."), mbox); + +#ifdef USE_IMAP + /* try to use server-side copy first */ + i = 1; + + if (ctx->magic == M_IMAP && mx_is_imap (mbox)) + { + /* tag messages for moving, and clear old tags, if any */ + for (i = 0; i < ctx->msgcount; i++) + if (ctx->hdrs[i]->read && !ctx->hdrs[i]->deleted + && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED))) + ctx->hdrs[i]->tagged = 1; + else + ctx->hdrs[i]->tagged = 0; + + i = imap_copy_messages (ctx, NULL, mbox, 1); + } + + if (i == 0) /* success */ + mutt_clear_error (); + else if (i == -1) /* horrible error, bail */ + { + ctx->closing=0; + return -1; + } + else /* use regular append-copy mode */ +#endif + { + if (mx_open_mailbox (mbox, M_APPEND, &f) == NULL) + { + ctx->closing = 0; + return -1; + } + + for (i = 0; i < ctx->msgcount; i++) + { + if (ctx->hdrs[i]->read && !ctx->hdrs[i]->deleted + && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED))) + { + if (mutt_append_message (&f, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN) == 0) + { + mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, 1); + mutt_set_flag (ctx, ctx->hdrs[i], M_APPENDED, 1); + } + else + { + mx_close_mailbox (&f, NULL); + ctx->closing = 0; + return -1; + } + } + } + + mx_close_mailbox (&f, NULL); + } + + } + else if (!ctx->changed && ctx->deleted == 0) + { + mutt_message _("Mailbox is unchanged."); + mx_fastclose_mailbox (ctx); + return 0; + } + + /* copy mails to the trash before expunging */ + if (purge && ctx->deleted) + if (trash_append (ctx) != 0) + { + ctx->closing = 0; + return -1; + } + +#ifdef USE_IMAP + /* allow IMAP to preserve the deleted flag across sessions */ + if (ctx->magic == M_IMAP) + { + if ((check = imap_sync_mailbox (ctx, purge, index_hint)) != 0) + { + ctx->closing = 0; + return check; + } + } + else +#endif + { + if (!purge) + { + for (i = 0; i < ctx->msgcount; i++) + ctx->hdrs[i]->deleted = 0; + ctx->deleted = 0; + } + + if (ctx->changed || ctx->deleted) + { + if ((check = sync_mailbox (ctx, index_hint)) != 0) + { + ctx->closing = 0; + return check; + } + } + } + + if (move_messages) + mutt_message (_("%d kept, %d moved, %d deleted."), + ctx->msgcount - ctx->deleted, read_msgs, ctx->deleted); + else + mutt_message (_("%d kept, %d deleted."), + ctx->msgcount - ctx->deleted, ctx->deleted); + + if (ctx->msgcount == ctx->deleted && + (ctx->magic == M_MMDF || ctx->magic == M_MBOX) && + !mutt_is_spool(ctx->path) && !option (OPTSAVEEMPTY)) + mx_unlink_empty (ctx->path); + + mx_fastclose_mailbox (ctx); + + return 0; +} + + +/* update a Context structure's internal tables. */ + +void mx_update_tables(CONTEXT *ctx, int committing) +{ + int i, j; + + /* update memory to reflect the new state of the mailbox */ + ctx->vcount = 0; + ctx->vsize = 0; + ctx->tagged = 0; + ctx->deleted = 0; + ctx->new = 0; + ctx->unread = 0; + ctx->changed = 0; + ctx->flagged = 0; +#define this_body ctx->hdrs[j]->content + for (i = 0, j = 0; i < ctx->msgcount; i++) + { + if ((committing && (!ctx->hdrs[i]->deleted || + (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))) || + (!committing && ctx->hdrs[i]->active)) + { + if (i != j) + { + ctx->hdrs[j] = ctx->hdrs[i]; + ctx->hdrs[i] = NULL; + } + ctx->hdrs[j]->msgno = j; + if (ctx->hdrs[j]->virtual != -1) + { + ctx->v2r[ctx->vcount] = j; + ctx->hdrs[j]->virtual = ctx->vcount++; + ctx->vsize += this_body->length + this_body->offset - + this_body->hdr_offset; + } + + if (committing) + ctx->hdrs[j]->changed = 0; + else if (ctx->hdrs[j]->changed) + ctx->changed++; + + if (!committing || (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH))) + { + if (ctx->hdrs[j]->deleted) + ctx->deleted++; + } + + if (ctx->hdrs[j]->tagged) + ctx->tagged++; + if (ctx->hdrs[j]->flagged) + ctx->flagged++; + if (!ctx->hdrs[j]->read) + { + ctx->unread++; + if (!ctx->hdrs[j]->old) + ctx->new++; + } + + j++; + } + else + { + if (ctx->magic == M_MH || ctx->magic == M_MAILDIR) + ctx->size -= (ctx->hdrs[i]->content->length + + ctx->hdrs[i]->content->offset - + ctx->hdrs[i]->content->hdr_offset); + /* remove message from the hash tables */ + if (ctx->subj_hash && ctx->hdrs[i]->env->real_subj) + hash_delete (ctx->subj_hash, ctx->hdrs[i]->env->real_subj, ctx->hdrs[i], NULL); + if (ctx->id_hash && ctx->hdrs[i]->env->message_id) + hash_delete (ctx->id_hash, ctx->hdrs[i]->env->message_id, ctx->hdrs[i], NULL); + mutt_free_header (&ctx->hdrs[i]); + } + } +#undef this_body + ctx->msgcount = j; +} + + +/* save changes to mailbox + * + * return values: + * 0 success + * -1 error + */ +int mx_sync_mailbox (CONTEXT *ctx, int *index_hint) +{ + int rc, i; + int purge = 1; + int msgcount, deleted; + + if (ctx->dontwrite) + { + char buf[STRING], tmp[STRING]; + if (km_expand_key (buf, sizeof(buf), + km_find_func (MENU_MAIN, OP_TOGGLE_WRITE))) + snprintf (tmp, sizeof(tmp), _(" Press '%s' to toggle write"), buf); + else + strfcpy (tmp, _("Use 'toggle-write' to re-enable write!"), sizeof(tmp)); + + mutt_error (_("Mailbox is marked unwritable. %s"), tmp); + return -1; + } + else if (ctx->readonly) + { + mutt_error _("Mailbox is read-only."); + return -1; + } + + if (!ctx->changed && !ctx->deleted) + { + mutt_message _("Mailbox is unchanged."); + return (0); + } + + if (ctx->deleted) + { + char buf[SHORT_STRING]; + + snprintf (buf, sizeof (buf), ctx->deleted == 1 + ? _("Purge %d deleted message?") : _("Purge %d deleted messages?"), + ctx->deleted); + if ((purge = query_quadoption (OPT_DELETE, buf)) < 0) + return (-1); + else if (purge == M_NO) + { + if (!ctx->changed) + return 0; /* nothing to do! */ +#ifdef USE_IMAP + /* let IMAP servers hold on to D flags */ + if (ctx->magic != M_IMAP) +#endif + { + for (i = 0 ; i < ctx->msgcount ; i++) + ctx->hdrs[i]->deleted = 0; + ctx->deleted = 0; + } + } + } + + /* really only for IMAP - imap_sync_mailbox results in a call to + * mx_update_tables, so ctx->deleted is 0 when it comes back */ + msgcount = ctx->msgcount; + deleted = ctx->deleted; + + if (purge && ctx->deleted) + { + if (trash_append (ctx) == -1) + return -1; + } + +#ifdef USE_IMAP + if (ctx->magic == M_IMAP) + rc = imap_sync_mailbox (ctx, purge, index_hint); + else +#endif + rc = sync_mailbox (ctx, index_hint); + if (rc == 0) + { +#ifdef USE_IMAP + if (ctx->magic == M_IMAP && !purge) + mutt_message _("Mailbox checkpointed."); + else +#endif + mutt_message (_("%d kept, %d deleted."), msgcount - deleted, + deleted); + + mutt_sleep (0); + + if (ctx->msgcount == ctx->deleted && + (ctx->magic == M_MBOX || ctx->magic == M_MMDF) && + !mutt_is_spool (ctx->path) && !option (OPTSAVEEMPTY)) + { + unlink (ctx->path); + mx_fastclose_mailbox (ctx); + return 0; + } + + /* if we haven't deleted any messages, we don't need to resort */ + /* ... except for certain folder formats which need "unsorted" + * sort order in order to synchronize folders. + * + * MH and maildir are safe. mbox-style seems to need re-sorting, + * at least with the new threading code. + */ + if (purge || (ctx->magic != M_MAILDIR && ctx->magic != M_MH)) + { +#ifdef USE_IMAP + /* IMAP does this automatically after handling EXPUNGE */ + if (ctx->magic != M_IMAP) +#endif + { + mx_update_tables (ctx, 1); + mutt_sort_headers (ctx, 1); /* rethread from scratch */ + } + } + } + + return (rc); +} + + +/* {maildir,mh}_open_new_message are in mh.c. */ + +int mbox_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr) +{ + msg->fp = dest->fp; + return 0; +} + +#ifdef USE_IMAP +int imap_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr) +{ + char tmp[_POSIX_PATH_MAX]; + + mutt_mktemp(tmp); + if ((msg->fp = safe_fopen (tmp, "w")) == NULL) + return (-1); + msg->path = safe_strdup(tmp); + return 0; +} +#endif + +/* args: + * dest destintation mailbox + * hdr message being copied (required for maildir support, because + * the filename depends on the message flags) + */ +MESSAGE *mx_open_new_message (CONTEXT *dest, HEADER *hdr, int flags) +{ + MESSAGE *msg; + int (*func) (MESSAGE *, CONTEXT *, HEADER *); + ADDRESS *p = NULL; + + switch (dest->magic) + { + case M_MMDF: + case M_MBOX: + func = mbox_open_new_message; + break; + case M_MAILDIR: + func = maildir_open_new_message; + break; + case M_MH: + func = mh_open_new_message; + break; +#ifdef USE_IMAP + case M_IMAP: + func = imap_open_new_message; + break; +#endif + default: + dprint (1, (debugfile, "mx_open_new_message(): function unimplemented for mailbox type %d.\n", + dest->magic)); + return (NULL); + } + + msg = safe_calloc (1, sizeof (MESSAGE)); + msg->magic = dest->magic; + msg->write = 1; + + if (hdr) + { + msg->flags.flagged = hdr->flagged; + msg->flags.replied = hdr->replied; + msg->flags.read = hdr->read; + msg->received = hdr->received; + } + + if(msg->received == 0) + time(&msg->received); + + if (func (msg, dest, hdr) == 0) + { + if (dest->magic == M_MMDF) + fputs (MMDF_SEP, msg->fp); + + if ((msg->magic == M_MBOX || msg->magic == M_MMDF) && + flags & M_ADD_FROM) + { + if (hdr) + { + if (hdr->env->return_path) + p = hdr->env->return_path; + else if (hdr->env->sender) + p = hdr->env->sender; + else + p = hdr->env->from; + } + + fprintf (msg->fp, "From %s %s", p ? p->mailbox : NONULL(Username), ctime (&msg->received)); + } + } + else + FREE (&msg); + + return msg; +} + +/* check for new mail */ +int mx_check_mailbox (CONTEXT *ctx, int *index_hint, int lock) +{ + int rc; + + if (ctx) + { + if (ctx->locked) lock = 0; + + switch (ctx->magic) + { + case M_MBOX: + case M_MMDF: + + if (lock) + { + mutt_block_signals (); + if (mbox_lock_mailbox (ctx, 0, 0) == -1) + { + mutt_unblock_signals (); + return M_LOCKED; + } + } + + rc = mbox_check_mailbox (ctx, index_hint); + + if (lock) + { + mutt_unblock_signals (); + mbox_unlock_mailbox (ctx); + } + + return rc; + + + case M_MH: + return (mh_check_mailbox (ctx, index_hint)); + case M_MAILDIR: + return (maildir_check_mailbox (ctx, index_hint)); + +#ifdef USE_IMAP + case M_IMAP: + return (imap_check_mailbox (ctx, index_hint, 0)); +#endif /* USE_IMAP */ + +#ifdef USE_POP + case M_POP: + return (pop_check_mailbox (ctx, index_hint)); +#endif /* USE_POP */ + +#ifdef USE_NNTP + case M_NNTP: + return (nntp_check_mailbox (ctx)); +#endif /* USE_NNTP */ + } + } + + dprint (1, (debugfile, "mx_check_mailbox: null or invalid context.\n")); + return (-1); +} + +/* return a stream pointer for a message */ +MESSAGE *mx_open_message (CONTEXT *ctx, int msgno) +{ + MESSAGE *msg; + + msg = safe_calloc (1, sizeof (MESSAGE)); + switch (msg->magic = ctx->magic) + { + case M_MBOX: + case M_MMDF: + msg->fp = ctx->fp; + break; + + case M_MH: + case M_MAILDIR: + { + HEADER *cur = ctx->hdrs[msgno]; + char path[_POSIX_PATH_MAX]; + + snprintf (path, sizeof (path), "%s/%s", ctx->path, cur->path); + + if ((msg->fp = fopen (path, "r")) == NULL && errno == ENOENT && + ctx->magic == M_MAILDIR) + msg->fp = maildir_open_find_message (ctx->path, cur->path); + + if (msg->fp == NULL) + { + mutt_perror (path); + dprint (1, (debugfile, "mx_open_message: fopen: %s: %s (errno %d).\n", + path, strerror (errno), errno)); + FREE (&msg); + } + } + break; + +#ifdef USE_IMAP + case M_IMAP: + { + if (imap_fetch_message (msg, ctx, msgno) != 0) + FREE (&msg); + break; + } +#endif /* USE_IMAP */ + +#ifdef USE_POP + case M_POP: + { + if (pop_fetch_message (msg, ctx, msgno) != 0) + FREE (&msg); + break; + } +#endif /* USE_POP */ + +#ifdef USE_NNTP + case M_NNTP: + { + if (nntp_fetch_message (msg, ctx, msgno) != 0) + FREE (&msg); + break; + } +#endif /* USE_NNTP */ + + default: + dprint (1, (debugfile, "mx_open_message(): function not implemented for mailbox type %d.\n", ctx->magic)); + FREE (&msg); + break; + } + return (msg); +} + +/* commit a message to a folder */ + +int mx_commit_message (MESSAGE *msg, CONTEXT *ctx) +{ + int r = 0; + + if (!(msg->write && ctx->append)) + { + dprint (1, (debugfile, "mx_commit_message(): msg->write = %d, ctx->append = %d\n", + msg->write, ctx->append)); + return -1; + } + + switch (msg->magic) + { + case M_MMDF: + { + if (fputs (MMDF_SEP, msg->fp) == EOF) + r = -1; + break; + } + + case M_MBOX: + { + if (fputc ('\n', msg->fp) == EOF) + r = -1; + break; + } + +#ifdef USE_IMAP + case M_IMAP: + { + if ((r = safe_fclose (&msg->fp)) == 0) + r = imap_append_message (ctx, msg); + break; + } +#endif + + case M_MAILDIR: + { + r = maildir_commit_message (ctx, msg, NULL); + break; + } + + case M_MH: + { + r = mh_commit_message (ctx, msg, NULL); + break; + } + } + + if (r == 0 && (ctx->magic == M_MBOX || ctx->magic == M_MMDF) + && (fflush (msg->fp) == EOF || fsync (fileno (msg->fp)) == -1)) + { + mutt_perror _("Can't write message"); + r = -1; + } + + return r; +} + +/* close a pointer to a message */ +int mx_close_message (MESSAGE **msg) +{ + int r = 0; + + if ((*msg)->magic == M_MH || (*msg)->magic == M_MAILDIR +#ifdef USE_IMAP + || (*msg)->magic == M_IMAP +#endif +#ifdef USE_POP + || (*msg)->magic == M_POP +#endif +#ifdef USE_NNTP + || (*msg)->magic == M_NNTP +#endif + ) + { + r = safe_fclose (&(*msg)->fp); + } + else + (*msg)->fp = NULL; + + if ((*msg)->path) + { + dprint (1, (debugfile, "mx_close_message (): unlinking %s\n", + (*msg)->path)); + unlink ((*msg)->path); + FREE (&(*msg)->path); + } + + FREE (msg); + return (r); +} + +void mx_alloc_memory (CONTEXT *ctx) +{ + int i; + size_t s = MAX (sizeof (HEADER *), sizeof (int)); + + if ((ctx->hdrmax + 25) * s < ctx->hdrmax * s) + { + mutt_error _("Integer overflow -- can't allocate memory."); + sleep (1); + mutt_exit (1); + } + + if (ctx->hdrs) + { + safe_realloc (&ctx->hdrs, sizeof (HEADER *) * (ctx->hdrmax += 25)); + safe_realloc (&ctx->v2r, sizeof (int) * ctx->hdrmax); + } + else + { + ctx->hdrs = safe_calloc ((ctx->hdrmax += 25), sizeof (HEADER *)); + ctx->v2r = safe_calloc (ctx->hdrmax, sizeof (int)); + } + for (i = ctx->msgcount ; i < ctx->hdrmax ; i++) + { + ctx->hdrs[i] = NULL; + ctx->v2r[i] = -1; + } +} + +/* this routine is called to update the counts in the context structure for + * the last message header parsed. + */ +void mx_update_context (CONTEXT *ctx, int new_messages) +{ + HEADER *h; + int msgno; + + for (msgno = ctx->msgcount - new_messages; msgno < ctx->msgcount; msgno++) + { + h = ctx->hdrs[msgno]; + + if (WithCrypto) + { + /* NOTE: this _must_ be done before the check for mailcap! */ + h->security = crypt_query (h->content); + } + + if (!ctx->pattern) + { + ctx->v2r[ctx->vcount] = msgno; + h->virtual = ctx->vcount++; + } + else + h->virtual = -1; + h->msgno = msgno; + + if (h->env->supersedes) + { + HEADER *h2; + + if (!ctx->id_hash) + ctx->id_hash = mutt_make_id_hash (ctx); + + h2 = hash_find (ctx->id_hash, h->env->supersedes); + + /* FREE (&h->env->supersedes); should I ? */ + if (h2) + { + h2->superseded = 1; + if (option (OPTSCORE)) + mutt_score_message (ctx, h2, 1); + } + } + + /* add this message to the hash tables */ + if (ctx->id_hash && h->env->message_id) + hash_insert (ctx->id_hash, h->env->message_id, h, 0); + if (ctx->subj_hash && h->env->real_subj) + hash_insert (ctx->subj_hash, h->env->real_subj, h, 1); + + if (option (OPTSCORE)) + mutt_score_message (ctx, h, 0); + + if (h->changed) + ctx->changed = 1; + if (h->flagged) + ctx->flagged++; + if (h->deleted) + ctx->deleted++; + if (!h->read) + { + ctx->unread++; + if (!h->old) + ctx->new++; + } + } +} + +/* + * Return: + * 1 if the specified mailbox contains 0 messages. + * 0 if the mailbox contains messages + * -1 on error + */ +int mx_check_empty (const char *path) +{ + switch (mx_get_magic (path)) + { + case M_MBOX: + case M_MMDF: + return mbox_check_empty (path); + case M_MH: + return mh_check_empty (path); + case M_MAILDIR: + return maildir_check_empty (path); + default: + errno = EINVAL; + return -1; + } + /* not reached */ +} diff --git a/mx.h b/mx.h new file mode 100644 index 0000000..3750928 --- /dev/null +++ b/mx.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * This header file contains prototypes for internal functions used by the + * generic mailbox api. None of these functions should be called directly. + */ + +#ifndef _MX_H +#define _MX_H + +#include "mailbox.h" + +/* supported mailbox formats */ +enum +{ + M_MBOX = 1, + M_MMDF, + M_MH, + M_MAILDIR +#ifdef USE_IMAP + , M_IMAP +#endif +#ifdef USE_POP + , M_POP +#endif +#ifdef USE_NNTP + , M_NNTP +#endif +}; + +WHERE short DefaultMagic INITVAL (M_MBOX); + +#define MMDF_SEP "\001\001\001\001\n" +#define MAXLOCKATTEMPT 5 + +int mbox_sync_mailbox (CONTEXT *, int *); +int mbox_open_mailbox (CONTEXT *); +int mbox_check_mailbox (CONTEXT *, int *); +int mbox_close_mailbox (CONTEXT *); +int mbox_lock_mailbox (CONTEXT *, int, int); +int mbox_parse_mailbox (CONTEXT *); +int mmdf_parse_mailbox (CONTEXT *); +void mbox_unlock_mailbox (CONTEXT *); +int mbox_check_empty (const char *); + +int mh_read_dir (CONTEXT *, const char *); +int mh_sync_mailbox (CONTEXT *, int *); +int mh_check_mailbox (CONTEXT *, int *); +int mh_buffy (const char *); +int mh_check_empty (const char *); + +int maildir_read_dir (CONTEXT *); +int maildir_check_mailbox (CONTEXT *, int *); +int maildir_check_empty (const char *); + +int maildir_commit_message (CONTEXT *, MESSAGE *, HEADER *); +int mh_commit_message (CONTEXT *, MESSAGE *, HEADER *); + +int maildir_open_new_message (MESSAGE *, CONTEXT *, HEADER *); +int mh_open_new_message (MESSAGE *, CONTEXT *, HEADER *); + +FILE *maildir_open_find_message (const char *, const char *); + +int mbox_strict_cmp_headers (const HEADER *, const HEADER *); +int mutt_reopen_mailbox (CONTEXT *, int *); + +void mx_alloc_memory (CONTEXT *); +void mx_update_context (CONTEXT *, int); +void mx_update_tables (CONTEXT *, int); + + +int mx_lock_file (const char *, int, int, int, int); +int mx_unlock_file (const char *path, int fd, int dot); + + +#endif diff --git a/newsrc.c b/newsrc.c new file mode 100644 index 0000000..0679216 --- /dev/null +++ b/newsrc.c @@ -0,0 +1,1043 @@ +/* + * Copyright (C) 1998 Brandon Long <blong@fiction.net> + * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net> + * Copyright (C) 2000-2001 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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 "mutt.h" +#include "mutt_curses.h" +#include "sort.h" +#include "mx.h" +#include "mime.h" +#include "mailbox.h" +#include "nntp.h" +#include "rfc822.h" +#include "rfc1524.h" +#include "rfc2047.h" + +#include <unistd.h> +#include <string.h> +#include <ctype.h> +#include <stdlib.h> +#include <sys/stat.h> + +void nntp_add_to_list (NNTP_SERVER *s, NNTP_DATA *d) +{ + LIST *l; + + if (!s || !d) + return; + + l = safe_calloc (1, sizeof (LIST)); + if (s->list) + s->tail->next = l; + else + s->list = l; + s->tail = l; + l->data = (void *) d; +} + +static int nntp_parse_newsrc_line (NNTP_SERVER *news, char *line) +{ + NNTP_DATA *data; + char group[LONG_STRING]; + int x = 1; + char *p = line, *b, *h; + size_t len; + + while (*p) + { + if (*p++ == ',') + x++; + } + + p = line; + while (*p && (*p != ':' && *p != '!')) p++; + if (!*p) + return -1; + len = p + 1 - line; + if (len > sizeof (group)) + len = sizeof (group); + strfcpy (group, line, len); + if ((data = (NNTP_DATA *)hash_find (news->newsgroups, group)) == NULL) + { + data = (NNTP_DATA *) safe_calloc (1, sizeof (NNTP_DATA) + strlen (group) + 1); + data->group = (char *) data + sizeof (NNTP_DATA); + strcpy (data->group, group); + data->nserv = news; + data->deleted = 1; + if (news->newsgroups->nelem < news->newsgroups->curnelem * 2) + news->newsgroups = hash_resize (news->newsgroups, news->newsgroups->nelem * 2); + hash_insert (news->newsgroups, data->group, data, 0); + nntp_add_to_list (news, data); + } + else + FREE ((void **) &data->entries); + + data->rc = 1; + data->entries = safe_calloc (x*2, sizeof (NEWSRC_ENTRY)); + data->max = x*2; + + if (*p == ':') + data->subscribed = 1; + else + data->subscribed = 0; + + p++; + b = p; + x = 0; + while (*b) + { + while (*p && *p != ',' && *p != '\n') p++; + if (*p) + { + *p = '\0'; + p++; + } + if ((h = strchr(b, '-'))) + { + *h = '\0'; + h++; + data->entries[x].first = atoi(b); + data->entries[x].last = atoi(h); + } + else + { + data->entries[x].first = atoi(b); + data->entries[x].last = data->entries[x].first; + } + b = p; + if (data->entries[x].last != 0) + x++; + } + if (x && !data->lastMessage) + data->lastMessage = data->entries[x-1].last; + data->num = x; + mutt_newsgroup_stat (data); + dprint (2, (debugfile, "parse_line: Newsgroup %s\n", data->group)); + + return 0; +} + +static int slurp_newsrc (NNTP_SERVER *news) +{ + FILE *fp; + char *buf; + struct stat sb; + + news->stat = stat (news->newsrc, &sb); + news->size = sb.st_size; + news->mtime = sb.st_mtime; + + if ((fp = safe_fopen (news->newsrc, "r")) == NULL) + return -1; + /* hmm, should we use dotlock? */ + if (mx_lock_file (news->newsrc, fileno (fp), 0, 0, 1)) + { + fclose (fp); + return -1; + } + + buf = safe_malloc (sb.st_size + 1); + while (fgets (buf, sb.st_size + 1, fp)) + nntp_parse_newsrc_line (news, buf); + FREE (&buf); + + mx_unlock_file (news->newsrc, fileno (fp), 0); + fclose (fp); + return 0; +} + +void nntp_cache_expand (char *dst, const char *src) +{ + snprintf (dst, _POSIX_PATH_MAX, "%s/%s", NewsCacheDir, src); + mutt_expand_path (dst, _POSIX_PATH_MAX); +} + +/* Loads $news_cache_dir/.index into memory, loads newsserver data + * and newsgroup cache names */ +static int nntp_parse_cacheindex (NNTP_SERVER *news) +{ + struct stat st; + char buf[HUGE_STRING], *cp; + char dir[_POSIX_PATH_MAX], file[_POSIX_PATH_MAX]; + FILE *index; + NNTP_DATA *data; + int l, m, t; + + /* check is server name defined or not */ + if (!news || !news->conn || !news->conn->account.host) + return -1; + unset_option (OPTNEWSCACHE); + if (!NewsCacheDir || !*NewsCacheDir) + return 0; + + strfcpy (dir, NewsCacheDir, sizeof (dir)); + mutt_expand_path (dir, sizeof(dir)); + + if (lstat (dir, &st) || (st.st_mode & S_IFDIR) == 0) + { + snprintf (buf, sizeof(buf), _("Directory %s not exist. Create it?"), dir); + if (mutt_yesorno (buf, M_YES) != M_YES || mkdir (dir, (S_IRWXU+S_IRWXG+ + S_IRWXO))) + { + mutt_error _("Cache directory not created!"); + return -1; + } + mutt_clear_error(); + } + + set_option (OPTNEWSCACHE); + + FREE (&news->cache); + snprintf (buf, sizeof(buf), "%s/.index", dir); + if (!(index = safe_fopen (buf, "a+"))) + return 0; + rewind (index); + while (fgets (buf, sizeof(buf), index)) + { + buf[strlen(buf) - 1] = 0; /* strip ending '\n' */ + if (!mutt_strncmp (buf, "#: ", 3) && + !mutt_strcasecmp (buf+3, news->conn->account.host)) + break; + } + while (fgets (buf, sizeof(buf), index)) + { + cp = buf; + while (*cp && *cp != ' ') cp++; + if (!*cp) continue; + cp[0] = 0; + if (!mutt_strcmp (buf, "#:")) + break; + sscanf (cp + 1, "%s %d %d", file, &l, &m); + if (!mutt_strcmp (buf, "ALL")) + { + news->cache = safe_strdup (file); + news->newgroups_time = m; + } + else if (news->newsgroups) + { + if ((data = (NNTP_DATA *)hash_find (news->newsgroups, buf)) == NULL) + { + data = (NNTP_DATA *) safe_calloc (1, sizeof (NNTP_DATA) + strlen (buf) + 1); + data->group = (char *) data + sizeof (NNTP_DATA); + strcpy(data->group, buf); + data->nserv = news; + data->deleted = 1; + if (news->newsgroups->nelem < news->newsgroups->curnelem * 2) + news->newsgroups = hash_resize (news->newsgroups, news->newsgroups->nelem * 2); + hash_insert (news->newsgroups, data->group, data, 0); + nntp_add_to_list (news, data); + } + data->cache = safe_strdup (file); + t = 0; + if (!data->firstMessage || data->lastMessage < m) + t = 1; + if (!data->firstMessage) + data->firstMessage = l; + if (data->lastMessage < m) + data->lastMessage = m; + data->lastCached = m; + if (t || !data->unread) + mutt_newsgroup_stat (data); + } + } + fclose (index); + return 0; +} + +const char * +nntp_format_str (char *dest, size_t destlen, char op, const char *src, + const char *fmt, const char *ifstring, const char *elsestring, + unsigned long data, format_flag flags) +{ + char fn[SHORT_STRING], tmp[SHORT_STRING]; + + switch (op) + { + case 's': + strncpy (fn, NewsServer, sizeof(fn) - 1); + mutt_strlower (fn); + snprintf (tmp, sizeof (tmp), "%%%ss", fmt); + snprintf (dest, destlen, tmp, fn); + break; + } + return (src); +} + +/* nntp_parse_url: given an NNPT URL, return host, port, + * username, password and newsgroup will recognise. */ +int nntp_parse_url (const char *server, ACCOUNT *acct, + char *group, size_t group_len) +{ + ciss_url_t url; + char *c; + int ret = -1; + + /* Defaults */ + acct->flags = 0; + acct->port = NNTP_PORT; + acct->type = M_ACCT_TYPE_NNTP; + + c = safe_strdup (server); + url_parse_ciss (&url, c); + + if (url.scheme == U_NNTP || url.scheme == U_NNTPS) + { + if (url.scheme == U_NNTPS) + { + acct->flags |= M_ACCT_SSL; + acct->port = NNTP_SSL_PORT; + } + + *group = '\0'; + if (url.path) + strfcpy (group, url.path, group_len); + + ret = mutt_account_fromurl (acct, &url); + } + + FREE (&c); + return ret; +} + +void nntp_expand_path (char *line, size_t len, ACCOUNT *acct) +{ + ciss_url_t url; + + url.path = safe_strdup (line); + mutt_account_tourl (acct, &url); + url_ciss_tostring (&url, line, len, 0); + FREE (&url.path); +} + +/* + * Automatically loads a newsrc into memory, if necessary. + * Checks the size/mtime of a newsrc file, if it doesn't match, load + * again. Hmm, if a system has broken mtimes, this might mean the file + * is reloaded every time, which we'd have to fix. + * + * a newsrc file is a line per newsgroup, with the newsgroup, then a + * ':' denoting subscribed or '!' denoting unsubscribed, then a + * comma separated list of article numbers and ranges. + */ +NNTP_SERVER *mutt_select_newsserver (char *server) +{ + char file[_POSIX_PATH_MAX]; + char *buf, *p; + LIST *list; + ACCOUNT acct; + NNTP_SERVER *serv; + CONNECTION *conn; + + if (!server || !*server) + { + mutt_error _("No newsserver defined!"); + return NULL; + } + + buf = p = safe_calloc (strlen (server) + 10, sizeof (char)); + if (url_check_scheme (server) == U_UNKNOWN) + { + strcpy (buf, "nntp://"); + p = strchr (buf, '\0'); + } + strcpy (p, server); + + if ((nntp_parse_url (buf, &acct, file, sizeof (file))) < 0 || *file) + { + FREE (&buf); + mutt_error (_("%s is an invalid newsserver specification!"), server); + return NULL; + } + FREE (&buf); + + conn = mutt_conn_find (NULL, &acct); + if (!conn) + return NULL; + + mutt_FormatString (file, sizeof (file), NONULL (NewsRc), nntp_format_str, 0, 0); + mutt_expand_path (file, sizeof (file)); + + serv = (NNTP_SERVER *)conn->data; + if (serv) + { + struct stat sb; + + /* externally modified? */ + if (serv->stat != stat (file, &sb) || (!serv->stat && + (serv->size != sb.st_size || serv->mtime != sb.st_mtime))) + { + for (list = serv->list; list; list = list->next) + { + NNTP_DATA *data = (NNTP_DATA *) list->data; + + if (data) + { + data->subscribed = 0; + data->rc = 0; + data->num = 0; + } + } + slurp_newsrc (serv); + nntp_clear_cacheindex (serv); + } + + if (serv->status == NNTP_BYE) + serv->status = NNTP_NONE; + nntp_check_newgroups (serv, 0); + return serv; + } + + /* New newsserver */ + serv = safe_calloc (1, sizeof (NNTP_SERVER)); + serv->conn = conn; + serv->newsrc = safe_strdup (file); + serv->newsgroups = hash_create (1009); + slurp_newsrc (serv); /* load .newsrc */ + nntp_parse_cacheindex (serv); /* load .index */ + if (option (OPTNEWSCACHE) && serv->cache && nntp_get_cache_all (serv) >= 0) + nntp_check_newgroups (serv, 1); + else if (nntp_get_active (serv) < 0) + { + hash_destroy (&serv->newsgroups, nntp_delete_data); + for (list = serv->list; list; list = list->next) + list->data = NULL; + mutt_free_list (&serv->list); + FREE (&serv->newsrc); + FREE (&serv->cache); + FREE (&serv); + return NULL; + } + nntp_clear_cacheindex (serv); + conn->data = (void *)serv; + + return serv; +} + +/* + * full status flags are not supported by nntp, but we can fake some + * of them. This is how: + * Read = a read message number is in the .newsrc + * New = a message is new since we last read this newsgroup + * Old = anything else + * So, Read is marked as such in the newsrc, old is anything that is + * "skipped" in the newsrc, and new is anything not in the newsrc nor + * in the cache. By skipped, I mean before the last unread message + */ +void nntp_get_status (CONTEXT *ctx, HEADER *h, char *group, int article) +{ + NNTP_DATA *data = (NNTP_DATA *) ctx->data; + int x; + + if (group) + data = (NNTP_DATA *) hash_find (data->nserv->newsgroups, group); + + if (!data) + { +#ifdef DEBUG + if (group) + dprint (3, (debugfile, "newsgroup %s not found\n", group)); +#endif + return; + } + + for (x = 0; x < data->num; x++) + { + if ((article >= data->entries[x].first) && + (article <= data->entries[x].last)) + { + /* we cannot use mutt_set_flag() because mx_update_context() + didn't called yet */ + h->read = 1; + return; + } + } + /* If article was not cached yet, it is new! :) */ + if (!data->cache || article > data->lastCached) + return; + /* Old articles are articles which aren't read but an article after them + * has been cached */ + if (option (OPTMARKOLD)) + h->old = 1; +} + +void mutt_newsgroup_stat (NNTP_DATA *data) +{ + int i; + unsigned int first, last; + + data->unread = 0; + if (data->lastMessage == 0 || data->firstMessage > data->lastMessage) + return; + + data->unread = data->lastMessage - data->firstMessage + 1; + for (i = 0; i < data->num; i++) + { + first = data->entries[i].first; + if (first < data->firstMessage) + first = data->firstMessage; + last = data->entries[i].last; + if (last > data->lastMessage) + last = data->lastMessage; + if (first <= last) + data->unread -= last - first + 1; + } +} + +static int puti (char *line, int num) +{ + char *p, s[32]; + + for (p = s; num; ) + { + *p++ = '0' + num % 10; + num /= 10; + } + while (p > s) + *line++ = *--p, num++; + *line = '\0'; + return num; +} + +static void nntp_create_newsrc_line (NNTP_DATA *data, char **buf, char **pline, size_t *buflen) +{ + char *line = *pline; + size_t len = *buflen - (*pline - *buf); + int x, i; + + if (len < LONG_STRING * 10) + { + len += *buflen; + *buflen *= 2; + line = *buf; + safe_realloc (buf, *buflen); + line = *buf + (*pline - line); + } + strcpy (line, data->group); + len -= strlen (line) + 1; + line += strlen (line); + *line++ = data->subscribed ? ':' : '!'; + *line++ = ' '; + *line = '\0'; + + for (x = 0; x < data->num; x++) + { + if (len < LONG_STRING) + { + len += *buflen; + *buflen *= 2; + *pline = line; + line = *buf; + safe_realloc (buf, *buflen); + line = *buf + (*pline - line); + } + if (x) + { + *line++ = ','; + len--; + } + +#if 0 + if (data->entries[x].first == data->entries[x].last) + snprintf (line, len, "%d%n", data->entries[x].first, &i); + else + snprintf (line, len, "%d-%d%n", + data->entries[x].first, data->entries[x].last, &i); + len -= i; + line += i; +#else + i = puti (line, data->entries[x].first); + line +=i; len -= i; + if (data->entries[x].first != data->entries[x].last) + { + *line++ = '-'; + len--; + i = puti (line, data->entries[x].last); + line +=i; len -= i; + } +#endif + } + *line++ = '\n'; + *line = '\0'; + *pline = line; +} + +void newsrc_gen_entries (CONTEXT *ctx) +{ + NNTP_DATA *data = (NNTP_DATA *)ctx->data; + int series, x; + unsigned int last = 0, first = 1; + int save_sort = SORT_ORDER; + + if (Sort != SORT_ORDER) + { + save_sort = Sort; + Sort = SORT_ORDER; + mutt_sort_headers (ctx, 0); + } + + if (!data->max) + { + data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY)); + data->max = 5; + } + + /* + * Set up to fake initial sequence from 1 to the article before the + * first article in our list + */ + data->num = 0; + series = 1; + + for (x = 0; x < ctx->msgcount; x++) + { + if (series) /* search for first unread */ + { + /* + * We don't actually check sequential order, since we mark + * "missing" entries as read/deleted + */ + last = ctx->hdrs[x]->article_num; + if (last >= data->firstMessage && !ctx->hdrs[x]->deleted && + !ctx->hdrs[x]->read) + { + if (data->num >= data->max) + { + data->max = data->max * 2; + safe_realloc (&data->entries, + data->max * sizeof (NEWSRC_ENTRY)); + } + data->entries[data->num].first = first; + data->entries[data->num].last = last - 1; + data->num++; + series = 0; + } + } + else /* search for first read */ + { + if (ctx->hdrs[x]->deleted || ctx->hdrs[x]->read) + { + first = last + 1; + series = 1; + } + last = ctx->hdrs[x]->article_num; + } + } + if (series && first <= data->lastLoaded) + { + if (data->num >= data->max) + { + data->max = data->max * 2; + safe_realloc (&data->entries, + data->max * sizeof (NEWSRC_ENTRY)); + } + data->entries[data->num].first = first; + data->entries[data->num].last = data->lastLoaded; + data->num++; + } + + if (save_sort != Sort) + { + Sort = save_sort; + mutt_sort_headers (ctx, 0); + } +} + +int mutt_newsrc_update (NNTP_SERVER *news) +{ + char *buf, *line; + NNTP_DATA *data; + LIST *tmp; + int r = -1; + size_t len, llen; + + if (!news) + return -1; + llen = len = 10 * LONG_STRING; + line = buf = safe_calloc (1, len); + /* we will generate full newsrc here */ + for (tmp = news->list; tmp; tmp = tmp->next) + { + data = (NNTP_DATA *) tmp->data; + if (!data || !data->rc) + continue; + nntp_create_newsrc_line (data, &buf, &line, &llen); + dprint (2, (debugfile, "Added to newsrc: %s", line)); + line += strlen (line); + } + /* newrc being fully rewritten */ + if (news->newsrc && + (r = mutt_update_list_file (news->newsrc, NULL, "", buf)) == 0) + { + struct stat st; + + stat (news->newsrc, &st); + news->size = st.st_size; + news->mtime = st.st_mtime; + } + FREE (&buf); + return r; +} + +static FILE *mutt_mkname (char *s) +{ + char buf[_POSIX_PATH_MAX], *pc; + int fd; + FILE *fp; + + nntp_cache_expand (buf, s); + if ((fp = safe_fopen (buf, "w"))) + return fp; + + nntp_cache_expand (buf, "cache-XXXXXX"); + pc = buf + strlen (buf) - 12; /* positioning to "cache-XXXXXX" */ + if ((fd = mkstemp (buf)) == -1) + return NULL; + strcpy (s, pc); /* generated name */ + return fdopen (fd, "w"); +} + +/* Updates info into .index file: ALL or about selected newsgroup */ +static int nntp_update_cacheindex (NNTP_SERVER *serv, NNTP_DATA *data) +{ + char buf[LONG_STRING], *key = "ALL"; + char file[_POSIX_PATH_MAX]; + + if (!serv || !serv->conn || !serv->conn->account.host) + return -1; + + if (data && data->group) + { + key = data->group; + snprintf (buf, sizeof (buf), "%s %s %d %d", key, data->cache, + data->firstMessage, data->lastLoaded); + } + else + { + strfcpy (file, serv->cache, sizeof (file)); + snprintf (buf, sizeof (buf), "ALL %s 0 %d", file, (int)serv->newgroups_time); + } + nntp_cache_expand (file, ".index"); + return mutt_update_list_file (file, serv->conn->account.host, key, buf); +} + +/* Remove cache files of unsubscribed newsgroups */ +void nntp_clear_cacheindex (NNTP_SERVER *news) +{ + NNTP_DATA *data; + LIST *tmp; + + if (option (OPTSAVEUNSUB) || !news) + return; + + for (tmp = news->list; tmp; tmp = tmp->next) + { + data = (NNTP_DATA *) tmp->data; + if (!data || data->subscribed || !data->cache) + continue; + nntp_delete_cache (data); + dprint (2, (debugfile, "Removed from .index: %s\n", data->group)); + } + return; +} + +int nntp_save_cache_index (NNTP_SERVER *news) +{ + char buf[HUGE_STRING]; + char file[_POSIX_PATH_MAX]; + NNTP_DATA *d; + FILE *f; + LIST *l; + + if (!news || !news->newsgroups) + return -1; + if (!option (OPTNEWSCACHE)) + return 0; + + if (news->cache) + { + nntp_cache_expand (file, news->cache); + unlink (file); + f = safe_fopen (file, "w"); + } + else + { + strfcpy (buf, news->conn->account.host, sizeof(buf)); + f = mutt_mkname (buf); + news->cache = safe_strdup (buf); + nntp_cache_expand (file, buf); + } + if (!f) + return -1; + + for (l = news->list; l; l = l->next) + { + if ((d = (NNTP_DATA *)l->data) && !d->deleted) + { + if (d->desc) + snprintf (buf, sizeof(buf), "%s %d %d %c %s\n", d->group, + d->lastMessage, d->firstMessage, d->allowed ? 'y' : 'n', + d->desc); + else + snprintf (buf, sizeof(buf), "%s %d %d %c\n", d->group, + d->lastMessage, d->firstMessage, d->allowed ? 'y' : 'n'); + if (fputs (buf, f) == EOF) + { + fclose (f); + unlink (file); + return -1; + } + } + } + fclose (f); + + if (nntp_update_cacheindex (news, NULL)) + { + unlink (file); + return -1; + } + return 0; +} + +int nntp_save_cache_group (CONTEXT *ctx) +{ + char buf[HUGE_STRING], addr[STRING]; + char file[_POSIX_PATH_MAX]; + FILE *f; + HEADER *h; + struct tm *tm; + int i = 0, save = SORT_ORDER; + int prev = 0; + + if (!option (OPTNEWSCACHE)) + return 0; + if (!ctx || !ctx->data || ctx->magic != M_NNTP) + return -1; + + if (((NNTP_DATA *)ctx->data)->cache) + { + nntp_cache_expand (file, ((NNTP_DATA *)ctx->data)->cache); + unlink (file); + f = safe_fopen (file, "w"); + } + else + { + snprintf (buf, sizeof(buf), "%s-%s", + ((NNTP_DATA *)ctx->data)->nserv->conn->account.host, + ((NNTP_DATA *)ctx->data)->group); + f = mutt_mkname (buf); + ((NNTP_DATA *)ctx->data)->cache = safe_strdup (buf); + nntp_cache_expand (file, buf); + } + if (!f) + return -1; + + if (Sort != SORT_ORDER) + { + save = Sort; + Sort = SORT_ORDER; + mutt_sort_headers (ctx, 0); + } + + /* Save only $nntp_context messages... */ + ((NNTP_DATA *)ctx->data)->lastCached = 0; + if (NntpContext && ctx->msgcount > NntpContext) + i = ctx->msgcount - NntpContext; + for (; i < ctx->msgcount; i++) + { + if (!ctx->hdrs[i]->deleted && ctx->hdrs[i]->article_num != prev) + { + h = ctx->hdrs[i]; + addr[0] = 0; + rfc822_write_address (addr, sizeof(addr), h->env->from, 0); + tm = gmtime (&h->date_sent); + snprintf (buf, sizeof(buf), + "%d\t%s\t%s\t%d %s %d %02d:%02d:%02d GMT\t%s\t", + h->article_num, h->env->subject, addr, tm->tm_mday, + Months[tm->tm_mon], tm->tm_year+1900, tm->tm_hour, tm->tm_min, + tm->tm_sec, h->env->message_id); + fputs (buf, f); + if (h->env->references) + mutt_write_references (h->env->references, f); + snprintf (buf, sizeof(buf), "\t%ld\t%d\tXref: %s\n", h->content->length, + h->lines, NONULL(h->env->xref)); + if (fputs (buf, f) == EOF) + { + fclose (f); + unlink (file); + return -1; + } + } + prev = ctx->hdrs[i]->article_num; + } + + if (save != Sort) + { + Sort = save; + mutt_sort_headers (ctx, 0); + } + fclose (f); + + if (nntp_update_cacheindex (((NNTP_DATA *)ctx->data)->nserv, + (NNTP_DATA *)ctx->data)) + { + unlink (file); + return -1; + } + ((NNTP_DATA *)ctx->data)->lastCached = ((NNTP_DATA *)ctx->data)->lastLoaded; + return 0; +} + +void nntp_delete_cache (NNTP_DATA *data) +{ + char buf[_POSIX_PATH_MAX]; + + if (!option (OPTNEWSCACHE) || !data || !data->cache || !data->nserv) + return; + + nntp_cache_expand (buf, data->cache); + unlink (buf); + FREE (&data->cache); + data->lastCached = 0; + nntp_cache_expand (buf, ".index"); + mutt_update_list_file (buf, data->nserv->conn->account.host, data->group, NULL); +} + +NNTP_DATA *mutt_newsgroup_subscribe (NNTP_SERVER *news, char *group) +{ + NNTP_DATA *data; + + if (!news || !news->newsgroups || !group || !*group) + return NULL; + if (!(data = (NNTP_DATA *)hash_find (news->newsgroups, group))) + { + data = (NNTP_DATA *) safe_calloc (1, sizeof (NNTP_DATA) + strlen (group) + 1); + data->group = (char *) data + sizeof (NNTP_DATA); + strcpy (data->group, group); + data->nserv = news; + data->deleted = 1; + if (news->newsgroups->nelem < news->newsgroups->curnelem * 2) + news->newsgroups = hash_resize (news->newsgroups, news->newsgroups->nelem * 2); + hash_insert (news->newsgroups, data->group, data, 0); + nntp_add_to_list (news, data); + } + if (!data->subscribed) + { + data->subscribed = 1; + data->rc = 1; + } + return data; +} + +NNTP_DATA *mutt_newsgroup_unsubscribe (NNTP_SERVER *news, char *group) +{ + NNTP_DATA *data; + + if (!news || !news->newsgroups || !group || !*group || + !(data = (NNTP_DATA *)hash_find (news->newsgroups, group))) + return NULL; + if (data->subscribed) + { + data->subscribed = 0; + if (!option (OPTSAVEUNSUB)) + data->rc = 0; + } + return data; +} + +NNTP_DATA *mutt_newsgroup_catchup (NNTP_SERVER *news, char *group) +{ + NNTP_DATA *data; + + if (!news || !news->newsgroups || !group || !*group || + !(data = (NNTP_DATA *)hash_find (news->newsgroups, group))) + return NULL; + if (!data->max) + { + data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY)); + data->max = 5; + } + data->num = 1; + data->entries[0].first = 1; + data->unread = 0; + data->entries[0].last = data->lastMessage; + if (Context && Context->data == data) + { + int x; + + for (x = 0; x < Context->msgcount; x++) + mutt_set_flag (Context, Context->hdrs[x], M_READ, 1); + } + return data; +} + +NNTP_DATA *mutt_newsgroup_uncatchup (NNTP_SERVER *news, char *group) +{ + NNTP_DATA *data; + + if (!news || !news->newsgroups || !group || !*group || + !(data = (NNTP_DATA *)hash_find (news->newsgroups, group))) + return NULL; + if (!data->max) + { + data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY)); + data->max = 5; + } + data->num = 1; + data->entries[0].first = 1; + data->entries[0].last = data->firstMessage - 1; + if (Context && Context->data == data) + { + int x; + + data->unread = Context->msgcount; + for (x = 0; x < Context->msgcount; x++) + mutt_set_flag (Context, Context->hdrs[x], M_READ, 0); + } + else + data->unread = data->lastMessage - data->entries[0].last; + return data; +} + +/* this routine gives the first newsgroup with new messages */ +void nntp_buffy (char *s) +{ + LIST *list; + + for (list = CurrentNewsSrv->list; list; list = list->next) + { + NNTP_DATA *data = (NNTP_DATA *) list->data; + + if (data && data->subscribed && data->unread) + { + if (Context && Context->magic == M_NNTP && + !mutt_strcmp (data->group, ((NNTP_DATA *) Context->data)->group)) + { + unsigned int i, unread = 0; + + for (i = 0; i < Context->msgcount; i++) + if (!Context->hdrs[i]->read && !Context->hdrs[i]->deleted) + unread++; + if (!unread) + continue; + } + strcpy (s, data->group); + break; + } + } +} diff --git a/nntp.c b/nntp.c new file mode 100644 index 0000000..3926b05 --- /dev/null +++ b/nntp.c @@ -0,0 +1,1557 @@ +/* + * Copyright (C) 1998 Brandon Long <blong@fiction.net> + * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net> + * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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 "mutt.h" +#include "mutt_curses.h" +#include "sort.h" +#include "mx.h" +#include "mime.h" +#include "rfc1524.h" +#include "rfc2047.h" +#include "mailbox.h" +#include "nntp.h" + +#ifdef HAVE_PGP +#include "pgp.h" +#endif + +#ifdef HAVE_SMIME +#include "smime.h" +#endif + +#include <unistd.h> +#include <string.h> +#include <ctype.h> +#include <stdlib.h> + +static unsigned int _checked = 0; + +#ifdef DEBUG +static void nntp_error (const char *where, const char *msg) +{ + dprint (1, (debugfile, "nntp_error(): unexpected response in %s: %s\n", where, msg)); +} +#endif /* DEBUG */ + +static int nntp_auth (NNTP_SERVER *serv) +{ + CONNECTION *conn = serv->conn; + char buf[STRING]; + unsigned char flags = conn->account.flags; + + if (mutt_account_getuser (&conn->account) || !conn->account.user[0] || + mutt_account_getpass (&conn->account) || !conn->account.pass[0]) + { + conn->account.flags = flags; + return -2; + } + + mutt_message _("Logging in..."); + + snprintf (buf, sizeof (buf), "AUTHINFO USER %s\r\n", conn->account.user); + mutt_socket_write (conn, buf); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + { + conn->account.flags = flags; + return -1; + } + +#ifdef DEBUG + /* don't print the password unless we're at the ungodly debugging level */ + if (debuglevel < M_SOCK_LOG_FULL) + dprint (M_SOCK_LOG_CMD, (debugfile, "> AUTHINFO PASS *\n")); +#endif + snprintf (buf, sizeof (buf), "AUTHINFO PASS %s\r\n", conn->account.pass); + mutt_socket_write_d (conn, buf, M_SOCK_LOG_FULL); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + { + conn->account.flags = flags; + return -1; + } + + if (mutt_strncmp ("281", buf, 3)) + { + conn->account.flags = flags; + mutt_error _("Login failed."); + sleep (2); + return -3; + } + + return 0; +} + +static int nntp_connect_error (NNTP_SERVER *serv) +{ + serv->status = NNTP_NONE; + mutt_socket_close (serv->conn); + mutt_error _("Server closed connection!"); + sleep (2); + return -1; +} + +static int nntp_connect_and_auth (NNTP_SERVER *serv) +{ + CONNECTION *conn = serv->conn; + char buf[STRING]; + int rc; + + serv->status = NNTP_NONE; + + if (mutt_socket_open (conn) < 0) + return -1; + + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + + if (!mutt_strncmp ("200", buf, 3)) + mutt_message (_("Connected to %s. Posting ok."), conn->account.host); + else if (!mutt_strncmp ("201", buf, 3)) + mutt_message (_("Connected to %s. Posting NOT ok."), conn->account.host); + else + { + mutt_socket_close (conn); + mutt_remove_trailing_ws (buf); + mutt_error ("%s", buf); + sleep (2); + return -1; + } + + sleep (1); + + /* Tell INN to switch to mode reader if it isn't so. Ignore all + returned codes and messages. */ + mutt_socket_write (conn, "MODE READER\r\n"); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + + mutt_socket_write (conn, "STAT\r\n"); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + + if (!(conn->account.flags & M_ACCT_USER) && mutt_strncmp ("480", buf, 3)) + { + serv->status = NNTP_OK; + return 0; + } + + rc = nntp_auth (serv); + if (rc == -1) + return nntp_connect_error (serv); + if (rc == -2) + { + mutt_socket_close (conn); + serv->status = NNTP_BYE; + return -1; + } + if (rc < 0) + { + mutt_socket_close (conn); + mutt_error _("Login failed."); + sleep (2); + return -1; + } + serv->status = NNTP_OK; + return 0; +} + +static int nntp_attempt_features (NNTP_SERVER *serv) +{ + char buf[LONG_STRING]; + CONNECTION *conn = serv->conn; + + mutt_socket_write (conn, "XOVER\r\n"); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + if (mutt_strncmp ("500", buf, 3)) + serv->hasXOVER = 1; + + mutt_socket_write (conn, "XPAT\r\n"); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + if (mutt_strncmp ("500", buf, 3)) + serv->hasXPAT = 1; + + mutt_socket_write (conn, "XGTITLE +\r\n"); + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + if (mutt_strncmp ("500", buf, 3)) + serv->hasXGTITLE = 1; + + if (!mutt_strncmp ("282", buf, 3)) + { + do + { + if (mutt_socket_readln (buf, sizeof (buf), conn) < 0) + return nntp_connect_error (serv); + } while (!(buf[0] == '.' && buf[1] == '\0')); + } + + return 0; +} + +static int nntp_open_connection (NNTP_SERVER *serv) +{ + if (serv->status == NNTP_OK) + return 0; + if (serv->status == NNTP_BYE) + return -1; + if (nntp_connect_and_auth (serv) < 0) + return -1; + if (nntp_attempt_features (serv) < 0) + return -1; + return 0; +} + +static int nntp_reconnect (NNTP_SERVER *serv) +{ + char buf[SHORT_STRING]; + + mutt_socket_close (serv->conn); + + FOREVER + { + if (nntp_connect_and_auth (serv) == 0) + return 0; + + snprintf (buf, sizeof (buf), _("Connection to %s lost. Reconnect?"), + serv->conn->account.host); + if (query_quadoption (OPT_NNTPRECONNECT, buf) != M_YES) + { + serv->status = NNTP_BYE; + return -1; + } + } +} + +/* Send data from line[LONG_STRING] and receive answer to same line */ +static int mutt_nntp_query (NNTP_DATA *data, char *line, size_t linelen) +{ + char buf[LONG_STRING]; + int done = TRUE; + + if (data->nserv->status == NNTP_BYE) + return -1; + + do + { + if (*line) + { + mutt_socket_write (data->nserv->conn, line); + } + else if (data->group) + { + snprintf (buf, sizeof (buf), "GROUP %s\r\n", data->group); + mutt_socket_write (data->nserv->conn, buf); + } + + done = TRUE; + if (mutt_socket_readln (buf, sizeof (buf), data->nserv->conn) < 0) + { + if (nntp_reconnect (data->nserv) < 0) + return -1; + + if (data->group) + { + snprintf (buf, sizeof (buf), "GROUP %s\r\n", data->group); + mutt_socket_write (data->nserv->conn, buf); + if (mutt_socket_readln (buf, sizeof (buf), data->nserv->conn) < 0) + return -1; + } + if (*line) + done = FALSE; + } + else if ((!mutt_strncmp ("480", buf, 3)) && nntp_auth (data->nserv) < 0) + return -1; + } while (!done); + + strfcpy (line, buf, linelen); + return 0; +} + +/* + * This function calls funct(*line, *data) for each received line, + * funct(NULL, *data) if rewind(*data) needs, exits when fail or done. + * Returned codes: + * 0 - successful, + * 1 - correct but not performed (may be, have to be continued), + * -1 - conection lost, + * -2 - invalid command or execution error, + * -3 - error in funct(*line, *data). + */ +static int mutt_nntp_fetch (NNTP_DATA *nntp_data, char *query, char *msg, + int (*funct) (char *, void *), void *data, int tagged) +{ + char buf[LONG_STRING]; + char *inbuf, *p; + int done = FALSE; + int chunk, line; + size_t lenbuf = 0; + int ret; + + do + { + strfcpy (buf, query, sizeof (buf)); + if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0) + return -1; + if (buf[0] == '5') + return -2; + if (buf[0] != '2') + return 1; + + ret = 0; + line = 0; + inbuf = safe_malloc (sizeof (buf)); + + FOREVER + { + chunk = mutt_socket_readln_d (buf, sizeof (buf), nntp_data->nserv->conn, + M_SOCK_LOG_HDR); + if (chunk < 0) + break; + + p = buf; + if (!lenbuf && buf[0] == '.') + { + if (buf[1] == '\0') + { + done = TRUE; + break; + } + if (buf[1] == '.') + p++; + } + + strfcpy (inbuf + lenbuf, p, sizeof (buf)); + + if (chunk >= sizeof (buf)) + { + lenbuf += strlen (p); + } + else + { + line++; + if (msg && ReadInc && (line % ReadInc == 0)) { + if (tagged) + mutt_message (_("%s (tagged: %d) %d"), msg, tagged, line); + else + mutt_message ("%s %d", msg, line); + } + + if (ret == 0 && funct (inbuf, data) < 0) + ret = -3; + lenbuf = 0; + } + + safe_realloc (&inbuf, lenbuf + sizeof (buf)); + } + FREE (&inbuf); + funct (NULL, data); + } + while (!done); + return ret; +} + +static int nntp_read_tempfile (char *line, void *file) +{ + FILE *f = (FILE *)file; + + if (!line) + rewind (f); + else + { + fputs (line, f); + if (fputc ('\n', f) == EOF) + return -1; + } + return 0; +} + +static void nntp_parse_xref (CONTEXT *ctx, char *group, char *xref, HEADER *h) +{ + register char *p, *b; + register char *colon = NULL; + + b = p = xref; + while (*p) + { + /* skip to next word */ + b = p; + while (*b && ((*b == ' ') || (*b == '\t'))) b++; + p = b; + colon = NULL; + /* skip to end of word */ + while (*p && (*p != ' ') && (*p != '\t')) + { + if (*p == ':') + colon = p; + p++; + } + if (*p) + { + *p = '\0'; + p++; + } + if (colon) + { + *colon = '\0'; + colon++; + nntp_get_status (ctx, h, p, atoi(colon)); + if (h && h->article_num == 0 && mutt_strcmp (group, b) == 0) + h->article_num = atoi(colon); + } + } +} + +/* + * returns: + * 0 on success + * 1 if article not found + * -1 if read or write error on tempfile or socket + */ +static int nntp_read_header (CONTEXT *ctx, const char *msgid, int article_num) +{ + NNTP_DATA *nntp_data = ((NNTP_DATA *)ctx->data); + FILE *f; + char buf[LONG_STRING]; + char tempfile[_POSIX_PATH_MAX]; + int ret; + HEADER *h = ctx->hdrs[ctx->msgcount]; + + mutt_mktemp (tempfile); + if (!(f = safe_fopen (tempfile, "w+"))) + return -1; + + if (!msgid) + snprintf (buf, sizeof (buf), "HEAD %d\r\n", article_num); + else + snprintf (buf, sizeof (buf), "HEAD %s\r\n", msgid); + + ret = mutt_nntp_fetch (nntp_data, buf, NULL, nntp_read_tempfile, f, 0); + if (ret) + { +#ifdef DEBUG + if (ret != -1) + dprint(1, (debugfile, "nntp_read_header: %s\n", buf)); +#endif + fclose (f); + unlink (tempfile); + return (ret == -1 ? -1 : 1); + } + + h->article_num = article_num; + h->env = mutt_read_rfc822_header (f, h, 0, 0); + fclose (f); + unlink (tempfile); + + if (h->env->xref != NULL) + nntp_parse_xref (ctx, nntp_data->group, h->env->xref, h); + else if (h->article_num == 0 && msgid) + { + snprintf (buf, sizeof (buf), "STAT %s\r\n", msgid); + if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) == 0) + h->article_num = atoi (buf + 4); + } + + return 0; +} + +static int parse_description (char *line, void *n) +{ +#define news ((NNTP_SERVER *) n) + register char *d = line; + NNTP_DATA *data; + + if (!line) + return 0; + while (*d && *d != '\t' && *d != ' ') d++; + *d = 0; + d++; + while (*d && (*d == '\t' || *d == ' ')) d++; + dprint (2, (debugfile, "group: %s, desc: %s\n", line, d)); + if ((data = (NNTP_DATA *) hash_find (news->newsgroups, line)) != NULL && + mutt_strcmp (d, data->desc)) + { + FREE (&data->desc); + data->desc = safe_strdup (d); + } + return 0; +#undef news +} + +static void nntp_get_desc (NNTP_DATA *data, char *mask, char *msg) +{ + char buf[STRING]; + + if (!option (OPTLOADDESC) || !data || !data->nserv) + return; + + /* Get newsgroup description, if we can */ + if (data->nserv->hasXGTITLE) + snprintf (buf, sizeof (buf), "XGTITLE %s\r\n", mask); + else + snprintf (buf, sizeof (buf), "LIST NEWSGROUPS %s\r\n", mask); + if (mutt_nntp_fetch (data, buf, msg, parse_description, data->nserv, 0) != 0) + { +#ifdef DEBUG + nntp_error ("nntp_get_desc()", buf); +#endif + } +} + +/* + * XOVER returns a tab separated list of: + * id|subject|from|date|Msgid|references|bytes|lines|xref + * + * This has to duplicate some of the functionality of + * mutt_read_rfc822_header(), since it replaces the call to that (albeit with + * a limited number of headers which are "parsed" by placement in the list) + */ +static int nntp_parse_xover (CONTEXT *ctx, char *buf, HEADER *hdr) +{ + NNTP_DATA *nntp_data = (NNTP_DATA *) ctx->data; + char *p, *b; + int x, done = 0; + + hdr->env = mutt_new_envelope(); + hdr->env->newsgroups = safe_strdup (nntp_data->group); + hdr->content = mutt_new_body(); + hdr->content->type = TYPETEXT; + hdr->content->subtype = safe_strdup ("plain"); + hdr->content->encoding = ENC7BIT; + hdr->content->disposition = DISPINLINE; + hdr->content->length = -1; + b = p = buf; + + for (x = 0; !done && x < 9; x++) + { + /* if from file, need to skip newline character */ + while (*p && *p != '\n' && *p != '\t') p++; + if (!*p) done++; + *p = '\0'; + p++; + switch (x) + { + case 0: + + hdr->article_num = atoi (b); + nntp_get_status (ctx, hdr, NULL, hdr->article_num); + break; + case 1: + hdr->env->subject = safe_strdup (b); + /* Now we need to do the things which would normally be done in + * mutt_read_rfc822_header() */ + if (hdr->env->subject) + { + regmatch_t pmatch[1]; + + rfc2047_decode (&hdr->env->subject); + + if (regexec (ReplyRegexp.rx, hdr->env->subject, 1, pmatch, 0) == 0) + hdr->env->real_subj = hdr->env->subject + pmatch[0].rm_eo; + else + hdr->env->real_subj = hdr->env->subject; + } + break; + case 2: + rfc822_free_address (&hdr->env->from); + hdr->env->from = rfc822_parse_adrlist (hdr->env->from, b); + rfc2047_decode_adrlist (hdr->env->from); + break; + case 3: + hdr->date_sent = mutt_parse_date (b, hdr); + hdr->received = hdr->date_sent; + break; + case 4: + FREE (&hdr->env->message_id); + hdr->env->message_id = safe_strdup (b); + break; + case 5: + mutt_free_list (&hdr->env->references); + hdr->env->references = mutt_parse_references (b, 0); + break; + case 6: + hdr->content->length = atoi (b); + break; + case 7: + hdr->lines = atoi (b); + break; + case 8: + if (!hdr->read) + FREE (&hdr->env->xref); + b = b + 6; /* skips the "Xref: " */ + hdr->env->xref = safe_strdup (b); + nntp_parse_xref (ctx, nntp_data->group, b, hdr); + } + if (!*p) + return -1; + b = p; + } + return 0; +} + +typedef struct +{ + CONTEXT *ctx; + unsigned int base; + unsigned int first; + unsigned int last; + unsigned short *messages; + char* msg; +} FETCH_CONTEXT; + +#define fc ((FETCH_CONTEXT *) c) +static int nntp_fetch_numbers (char *line, void *c) +{ + unsigned int num; + + if (!line) + return 0; + num = atoi (line); + if (num < fc->base || num > fc->last) + return 0; + fc->messages[num - fc->base] = 1; + return 0; +} + +static int add_xover_line (char *line, void *c) +{ + unsigned int num, total; + CONTEXT *ctx = fc->ctx; + NNTP_DATA *data = (NNTP_DATA *)ctx->data; + + if (!line) + return 0; + + if (ctx->msgcount >= ctx->hdrmax) + mx_alloc_memory (ctx); + ctx->hdrs[ctx->msgcount] = mutt_new_header (); + ctx->hdrs[ctx->msgcount]->index = ctx->msgcount; + + nntp_parse_xover (ctx, line, ctx->hdrs[ctx->msgcount]); + num = ctx->hdrs[ctx->msgcount]->article_num; + + if (num >= fc->first && num <= fc->last && fc->messages[num - fc->base]) + { + ctx->msgcount++; + if (num > data->lastLoaded) + data->lastLoaded = num; + num = num - fc->first + 1; + total = fc->last - fc->first + 1; + if (!ctx->quiet && fc->msg && ReadInc && (num % ReadInc == 0)) + mutt_message ("%s %d/%d", fc->msg, num, total); + } + else + mutt_free_header (&ctx->hdrs[ctx->msgcount]); /* skip it */ + + return 0; +} +#undef fc + +static int nntp_fetch_headers (CONTEXT *ctx, unsigned int first, + unsigned int last) +{ + char buf[HUGE_STRING]; + char *msg = _("Fetching message headers..."); + NNTP_DATA *nntp_data = ((NNTP_DATA *)ctx->data); + int ret; + int num; + int oldmsgcount; + unsigned int current; + FILE *f; + FETCH_CONTEXT fc; + + /* if empty group or nothing to do */ + if (!last || first > last) + return 0; + + /* fetch list of articles */ + mutt_message _("Fetching list of articles..."); + fc.ctx = ctx; + fc.base = first; + fc.last = last; + fc.messages = safe_calloc (last - first + 1, sizeof (unsigned short)); + snprintf (buf, sizeof (buf), "LISTGROUP %s\r\n", nntp_data->group); + if (mutt_nntp_fetch (nntp_data, buf, NULL, nntp_fetch_numbers, &fc, 0) != 0) + { + mutt_error (_("LISTGROUP command failed: %s"), buf); +#ifdef DEBUG + nntp_error ("nntp_fetch_headers()", buf); +#endif + FREE (&fc.messages); + return -1; + } + + /* CACHE: must be loaded xover cache here */ + num = nntp_data->lastCached - first + 1; + if (option (OPTNEWSCACHE) && nntp_data->cache && num > 0) + { + nntp_cache_expand (buf, nntp_data->cache); + mutt_message _("Fetching headers from cache..."); + if ((f = safe_fopen (buf, "r"))) + { + int r = 0; + + /* counting number of lines */ + while (fgets (buf, sizeof (buf), f) != NULL) + r++; + rewind (f); + while (r > num && fgets (buf, sizeof (buf), f) != NULL) + r--; + oldmsgcount = ctx->msgcount; + fc.first = first; + fc.last = first + num - 1; + fc.msg = NULL; + while (fgets (buf, sizeof (buf), f) != NULL) + add_xover_line (buf, &fc); + fclose (f); + nntp_data->lastLoaded = fc.last; + first = fc.last + 1; + if (ctx->msgcount > oldmsgcount) + mx_update_context (ctx, ctx->msgcount - oldmsgcount); + } + else + nntp_delete_cache (nntp_data); + } + num = last - first + 1; + if (num <= 0) + { + FREE (&fc.messages); + return 0; + } + + /* + * Without XOVER, we have to fetch each article header and parse + * it. With XOVER, we ask for all of them + */ + mutt_message (msg); + if (nntp_data->nserv->hasXOVER) + { + oldmsgcount = ctx->msgcount; + fc.first = first; + fc.last = last; + fc.msg = msg; + snprintf (buf, sizeof (buf), "XOVER %d-%d\r\n", first, last); + ret = mutt_nntp_fetch (nntp_data, buf, NULL, add_xover_line, &fc, 0); + if (ctx->msgcount > oldmsgcount) + mx_update_context (ctx, ctx->msgcount - oldmsgcount); + if (ret != 0) + { + mutt_error (_("XOVER command failed: %s"), buf); +#ifdef DEBUG + nntp_error ("nntp_fetch_headers()", buf); +#endif + FREE (&fc.messages); + return -1; + } + /* fetched OK */ + } + else + for (current = first; current <= last; current++) + { + HEADER *h; + + ret = current - first + 1; + mutt_message ("%s %d/%d", msg, ret, num); + + if (!fc.messages[current - fc.base]) + continue; + + if (ctx->msgcount >= ctx->hdrmax) + mx_alloc_memory (ctx); + h = ctx->hdrs[ctx->msgcount] = mutt_new_header (); + h->index = ctx->msgcount; + + ret = nntp_read_header (ctx, NULL, current); + if (ret == 0) /* Got article. Fetch next header */ + { + nntp_get_status (ctx, h, NULL, h->article_num); + ctx->msgcount++; + mx_update_context (ctx, 1); + } + else + mutt_free_header (&h); /* skip it */ + if (ret == -1) + { + FREE (&fc.messages); + return -1; + } + + if (current > nntp_data->lastLoaded) + nntp_data->lastLoaded = current; + } + FREE (&fc.messages); + nntp_data->lastLoaded = last; + mutt_clear_error (); + return 0; +} + +/* + * currently, nntp "mailbox" is "newsgroup" + */ +int nntp_open_mailbox (CONTEXT *ctx) +{ + NNTP_DATA *nntp_data; + NNTP_SERVER *serv; + char buf[HUGE_STRING]; + char server[LONG_STRING]; + int count = 0; + unsigned int first; + ACCOUNT acct; + + if (nntp_parse_url (ctx->path, &acct, buf, sizeof (buf)) < 0 || !*buf) + { + mutt_error (_("%s is an invalid newsgroup specification!"), ctx->path); + mutt_sleep (2); + return -1; + } + + server[0] = '\0'; + nntp_expand_path (server, sizeof (server), &acct); + if (!(serv = mutt_select_newsserver (server)) || serv->status != NNTP_OK) + return -1; + + CurrentNewsSrv = serv; + + /* create NNTP-specific state struct if nof found in list */ + if ((nntp_data = (NNTP_DATA *) hash_find (serv->newsgroups, buf)) == NULL) + { + nntp_data = safe_calloc (1, sizeof (NNTP_DATA) + strlen (buf) + 1); + nntp_data->group = (char *) nntp_data + sizeof (NNTP_DATA); + strcpy (nntp_data->group, buf); + hash_insert (serv->newsgroups, nntp_data->group, nntp_data, 0); + nntp_add_to_list (serv, nntp_data); + } + ctx->data = nntp_data; + nntp_data->nserv = serv; + + mutt_message (_("Selecting %s..."), nntp_data->group); + + if (!nntp_data->desc) + { + nntp_get_desc (nntp_data, nntp_data->group, NULL); + if (nntp_data->desc) + nntp_save_cache_index (serv); + } + + buf[0] = 0; + if (mutt_nntp_query (nntp_data, buf, sizeof(buf)) < 0) + { +#ifdef DEBUG + nntp_error ("nntp_open_mailbox()", buf); +#endif + return -1; + } + + if (mutt_strncmp ("211", buf, 3)) + { + LIST *l = serv->list; + + /* GROUP command failed */ + if (!mutt_strncmp ("411", buf, 3)) + { + mutt_error (_("Newsgroup %s not found on server %s"), + nntp_data->group, serv->conn->account.host); + + /* CACHE: delete cache and line from .index */ + nntp_delete_cache (nntp_data); + hash_delete (serv->newsgroups, nntp_data->group, NULL, nntp_delete_data); + while (l && l->data != (void *) nntp_data) l = l->next; + if (l) + l->data = NULL; + + sleep (2); + } + + return -1; + } + + sscanf (buf + 4, "%d %u %u %s", &count, &nntp_data->firstMessage, + &nntp_data->lastMessage, buf); + + nntp_data->deleted = 0; + + time (&serv->check_time); + + /* + * Check for max adding context. If it is greater than $nntp_context, + * strip off extra articles + */ + first = nntp_data->firstMessage; + if (NntpContext && nntp_data->lastMessage - first + 1 > NntpContext) + first = nntp_data->lastMessage - NntpContext + 1; + if (first) + nntp_data->lastLoaded = first - 1; + return nntp_fetch_headers (ctx, first, nntp_data->lastMessage); +} + +int nntp_fetch_message (MESSAGE *msg, CONTEXT *ctx, int msgno) +{ + char buf[LONG_STRING]; + char path[_POSIX_PATH_MAX]; + NNTP_CACHE *cache; + char *m = _("Fetching message..."); + int ret; + + /* see if we already have the message in our cache */ + cache = &((NNTP_DATA *) ctx->data)->acache[ctx->hdrs[msgno]->index % NNTP_CACHE_LEN]; + + /* if everything is fine, assign msg->fp and return */ + if (cache->path && cache->index == ctx->hdrs[msgno]->index && + (msg->fp = fopen (cache->path, "r"))) + return 0; + + /* clear the previous entry */ + unlink (cache->path); + free (cache->path); + + mutt_message (m); + + cache->index = ctx->hdrs[msgno]->index; + mutt_mktemp (path); + cache->path = safe_strdup (path); + if (!(msg->fp = safe_fopen (path, "w+"))) + { + FREE (&cache->path); + return -1; + } + + if (ctx->hdrs[msgno]->article_num == 0) + snprintf (buf, sizeof (buf), "ARTICLE %s\r\n", + ctx->hdrs[msgno]->env->message_id); + else + snprintf (buf, sizeof (buf), "ARTICLE %d\r\n", + ctx->hdrs[msgno]->article_num); + + ret = mutt_nntp_fetch ((NNTP_DATA *)ctx->data, buf, m, nntp_read_tempfile, + msg->fp, ctx->tagged); + if (ret == 1) + { + mutt_error (_("Article %d not found on server"), + ctx->hdrs[msgno]->article_num); + dprint (1, (debugfile, "nntp_fetch_message: %s\n", buf)); + } + + if (ret) + { + fclose (msg->fp); + unlink (path); + FREE (&cache->path); + return -1; + } + + mutt_free_envelope (&ctx->hdrs[msgno]->env); + ctx->hdrs[msgno]->env = mutt_read_rfc822_header (msg->fp, ctx->hdrs[msgno], 0, 0); + /* fix content length */ + fseek(msg->fp, 0, SEEK_END); + ctx->hdrs[msgno]->content->length = ftell (msg->fp) - + ctx->hdrs[msgno]->content->offset; + + /* this is called in mutt before the open which fetches the message, + * which is probably wrong, but we just call it again here to handle + * the problem instead of fixing it. + */ + mutt_parse_mime_message (ctx, ctx->hdrs[msgno]); + + /* These would normally be updated in mx_update_context(), but the + * full headers aren't parsed with XOVER, so the information wasn't + * available then. + */ +#if defined(HAVE_PGP) || defined(HAVE_SMIME) + ctx->hdrs[msgno]->security = crypt_query (ctx->hdrs[msgno]->content); +#endif /* HAVE_PGP || HAVE_SMIME */ + + mutt_clear_error(); + rewind (msg->fp); + + return 0; +} + +/* Post article */ +int nntp_post (const char *msg) { + char buf[LONG_STRING]; + size_t len; + FILE *f; + NNTP_DATA *nntp_data; + + if (Context && Context->magic == M_NNTP) + nntp_data = (NNTP_DATA *)Context->data; + else + { + if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer)) || + !CurrentNewsSrv->list || !CurrentNewsSrv->list->data) + { + mutt_error (_("Can't post article. No connection to news server.")); + return -1; + } + nntp_data = (NNTP_DATA *)CurrentNewsSrv->list->data; + } + + if (!(f = safe_fopen (msg, "r"))) + { + mutt_error (_("Can't post article. Unable to open %s"), msg); + return -1; + } + + strfcpy (buf, "POST\r\n", sizeof (buf)); + if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0) + { + mutt_error (_("Can't post article. Connection to %s lost."), + nntp_data->nserv->conn->account.host); + return -1; + } + if (buf[0] != '3') + { + mutt_error (_("Can't post article: %s"), buf); + return -1; + } + + buf[0] = '.'; + buf[1] = '\0'; + while (fgets (buf + 1, sizeof (buf) - 2, f) != NULL) + { + len = strlen (buf); + if (buf[len - 1] == '\n') + { + buf[len - 1] = '\r'; + buf[len] = '\n'; + len++; + buf[len] = '\0'; + } + if (buf[1] == '.') + mutt_socket_write_d (nntp_data->nserv->conn, buf, M_SOCK_LOG_HDR); + else + mutt_socket_write_d (nntp_data->nserv->conn, buf + 1, M_SOCK_LOG_HDR); + } + fclose (f); + + if (buf[strlen (buf) - 1] != '\n') + mutt_socket_write_d (nntp_data->nserv->conn, "\r\n", M_SOCK_LOG_HDR); + mutt_socket_write_d (nntp_data->nserv->conn, ".\r\n", M_SOCK_LOG_HDR); + if (mutt_socket_readln (buf, sizeof (buf), nntp_data->nserv->conn) < 0) + { + mutt_error (_("Can't post article. Connection to %s lost."), + nntp_data->nserv->conn->account.host); + return -1; + } + if (buf[0] != '2') + { + mutt_error (_("Can't post article: %s"), buf); + return -1; + } + + return 0; +} + +/* nntp_logout_all: close all open connections. */ +void nntp_logout_all (void) +{ + char buf[LONG_STRING]; + CONNECTION* conn; + CONNECTION* tmp; + + conn = mutt_socket_head (); + + while (conn) + { + tmp = conn; + + if (conn->account.type == M_ACCT_TYPE_NNTP) + { + mutt_message (_("Closing connection to %s..."), conn->account.host); + mutt_socket_write (conn, "QUIT\r\n"); + mutt_socket_readln (buf, sizeof (buf), conn); + mutt_clear_error (); + mutt_socket_close (conn); + + mutt_socket_free (tmp); + } + + conn = conn->next; + } +} + +static void nntp_free_acache (NNTP_DATA *data) +{ + int i; + + for (i = 0; i < NNTP_CACHE_LEN; i++) + { + if (data->acache[i].path) + { + unlink (data->acache[i].path); + FREE (&data->acache[i].path); + } + } +} + +void nntp_delete_data (void *p) +{ + NNTP_DATA *data = (NNTP_DATA *)p; + + if (!p) + return; + FREE (&data->entries); + FREE (&data->desc); + FREE (&data->cache); + nntp_free_acache (data); + FREE (p); +} + +int nntp_sync_mailbox (CONTEXT *ctx) +{ + NNTP_DATA *data = ctx->data; + + /* CACHE: update cache and .index files */ + if ((option (OPTSAVEUNSUB) || data->subscribed)) + nntp_save_cache_group (ctx); + nntp_free_acache (data); + + data->nserv->check_time = 0; /* next nntp_check_mailbox() will really check */ + return 0; +} + +void nntp_fastclose_mailbox (CONTEXT *ctx) +{ + NNTP_DATA *data = (NNTP_DATA *) ctx->data, *tmp; + + if (!data) + return; + nntp_free_acache (data); + if (!data->nserv || !data->nserv->newsgroups || !data->group) + return; + nntp_save_cache_index (data->nserv); + if ((tmp = hash_find (data->nserv->newsgroups, data->group)) == NULL + || tmp != data) + nntp_delete_data (data); +} + +/* commit changes and terminate connection */ +int nntp_close_mailbox (CONTEXT *ctx) +{ + if (!ctx) + return -1; + mutt_message _("Quitting newsgroup..."); + if (ctx->data) + { + NNTP_DATA *data = (NNTP_DATA *) ctx->data; + int ret; + + if (data->nserv && data->nserv->conn && ctx->unread) + { + ret = query_quadoption (OPT_CATCHUP, _("Mark all articles read?")); + if (ret == M_YES) + mutt_newsgroup_catchup (data->nserv, data->group); + else if (ret < 0) + return -1; + } + } + nntp_sync_mailbox (ctx); + if (ctx->data && ((NNTP_DATA *)ctx->data)->nserv) + { + NNTP_SERVER *news; + + news = ((NNTP_DATA *)ctx->data)->nserv; + newsrc_gen_entries (ctx); + ((NNTP_DATA *)ctx->data)->unread = ctx->unread; + mutt_newsrc_update (news); + } + mutt_clear_error(); + return 0; +} + +/* use the GROUP command to poll for new mail */ +static int _nntp_check_mailbox (CONTEXT *ctx, NNTP_DATA *nntp_data) +{ + char buf[LONG_STRING]; + int count = 0; + + if (nntp_data->nserv->check_time + NewsPollTimeout > time (NULL)) + return 0; + + buf[0] = 0; + if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0) + { +#ifdef DEBUG + nntp_error ("nntp_check_mailbox()", buf); +#endif + return -1; + } + if (mutt_strncmp ("211", buf, 3)) + { + buf[0] = 0; + if (mutt_nntp_query (nntp_data, buf, sizeof (buf)) < 0) + { +#ifdef DEBUG + nntp_error ("nntp_check_mailbox()", buf); +#endif + return -1; + } + } + if (!mutt_strncmp ("211", buf, 3)) + { + int first; + int last; + + sscanf (buf + 4, "%d %d %d", &count, &first, &last); + nntp_data->firstMessage = first; + nntp_data->lastMessage = last; + if (ctx && last > nntp_data->lastLoaded) + { + nntp_fetch_headers (ctx, nntp_data->lastLoaded + 1, last); + time (&nntp_data->nserv->check_time); + return 1; + } + if (!last || (!nntp_data->rc && !nntp_data->lastCached)) + nntp_data->unread = count; + else + mutt_newsgroup_stat (nntp_data); + /* active was renumbered? */ + if (last < nntp_data->lastLoaded) + { + if (!nntp_data->max) + { + nntp_data->entries = safe_calloc (5, sizeof (NEWSRC_ENTRY)); + nntp_data->max = 5; + } + nntp_data->lastCached = 0; + nntp_data->num = 1; + nntp_data->entries[0].first = 1; + nntp_data->entries[0].last = 0; + } + } + + time (&nntp_data->nserv->check_time); + return 0; +} + +int nntp_check_mailbox (CONTEXT *ctx) +{ + return _nntp_check_mailbox (ctx, (NNTP_DATA *)ctx->data); +} + +static int add_group (char *buf, void *serv) +{ +#define s ((NNTP_SERVER *) serv) + char group[LONG_STRING], mod, desc[HUGE_STRING]; + int first, last; + NNTP_DATA *nntp_data; + static int n = 0; + + _checked = n; /* _checked have N, where N = number of groups */ + if (!buf) /* at EOF must be zerouth */ + n = 0; + + if (!s || !buf) + return 0; + + *desc = 0; + sscanf (buf, "%s %d %d %c %[^\n]", group, &last, &first, &mod, desc); + if (!group) + return 0; + if ((nntp_data = (NNTP_DATA *) hash_find (s->newsgroups, group)) == NULL) + { + n++; + nntp_data = safe_calloc (1, sizeof (NNTP_DATA) + strlen (group) + 1); + nntp_data->group = (char *) nntp_data + sizeof (NNTP_DATA); + strcpy (nntp_data->group, group); + nntp_data->nserv = s; + if (s->newsgroups->nelem < s->newsgroups->curnelem * 2) + s->newsgroups = hash_resize (s->newsgroups, s->newsgroups->nelem * 2); + hash_insert (s->newsgroups, nntp_data->group, nntp_data, 0); + nntp_add_to_list (s, nntp_data); + } + nntp_data->deleted = 0; + nntp_data->firstMessage = first; + nntp_data->lastMessage = last; + if (mod == 'y') + nntp_data->allowed = 1; + else + nntp_data->allowed = 0; + if (nntp_data->desc) + FREE (&nntp_data->desc); + if (*desc) + nntp_data->desc = safe_strdup (desc); + if (nntp_data->rc || nntp_data->lastCached) + mutt_newsgroup_stat (nntp_data); + else if (nntp_data->lastMessage && + nntp_data->firstMessage <= nntp_data->lastMessage) + nntp_data->unread = nntp_data->lastMessage - nntp_data->firstMessage + 1; + else + nntp_data->unread = 0; + + return 0; +#undef s +} + +int nntp_check_newgroups (NNTP_SERVER *serv, int force) +{ + char buf[LONG_STRING]; + NNTP_DATA nntp_data; + LIST *l; + LIST emp; + time_t now; + struct tm *t; + + if (!serv || !serv->newgroups_time) + return -1; + + if (nntp_open_connection (serv) < 0) + return -1; + + /* check subscribed groups for new news */ + if (option (OPTSHOWNEWNEWS)) + { + mutt_message _("Checking for new messages..."); + for (l = serv->list; l; l = l->next) + { + serv->check_time = 0; /* really check! */ + if (l->data && ((NNTP_DATA *) l->data)->subscribed) + _nntp_check_mailbox (NULL, (NNTP_DATA *) l->data); + } + } + else if (!force) + return 0; + + mutt_message _("Checking for new newsgroups..."); + now = serv->newgroups_time; + time (&serv->newgroups_time); + t = gmtime (&now); + snprintf (buf, sizeof (buf), "NEWGROUPS %02d%02d%02d %02d%02d%02d GMT\r\n", + (t->tm_year % 100), t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, + t->tm_sec); + nntp_data.nserv = serv; + if (Context && Context->magic == M_NNTP) + nntp_data.group = ((NNTP_DATA *)Context->data)->group; + else + nntp_data.group = NULL; + l = serv->tail; + if (mutt_nntp_fetch (&nntp_data, buf, _("Adding new newsgroups..."), + add_group, serv, 0) != 0) + { +#ifdef DEBUG + nntp_error ("nntp_check_newgroups()", buf); +#endif + return -1; + } + + mutt_message _("Loading descriptions..."); + if (l) + emp.next = l->next; + else + emp.next = serv->list; + l = &emp; + while (l->next) + { + l = l->next; + ((NNTP_DATA *) l->data)->new = 1; + nntp_get_desc ((NNTP_DATA *) l->data, ((NNTP_DATA *) l->data)->group, NULL); + } + if (emp.next) + nntp_save_cache_index (serv); + mutt_clear_error (); + return _checked; +} + +/* Load list of all newsgroups from cache ALL */ +int nntp_get_cache_all (NNTP_SERVER *serv) +{ + char buf[HUGE_STRING]; + FILE *f; + + nntp_cache_expand (buf, serv->cache); + if ((f = safe_fopen (buf, "r"))) + { + int i = 0; + + while (fgets (buf, sizeof(buf), f) != NULL) + { + if (ReadInc && (i % ReadInc == 0)) + mutt_message (_("Loading list from cache... %d"), i); + add_group (buf, serv); + i++; + } + add_group (NULL, NULL); + fclose (f); + mutt_clear_error (); + return 0; + } + else + { + FREE (&serv->cache); + return -1; + } +} + +/* Load list of all newsgroups from active */ +int nntp_get_active (NNTP_SERVER *serv) +{ + char msg[SHORT_STRING]; + NNTP_DATA nntp_data; + LIST *tmp; + + if (nntp_open_connection (serv) < 0) + return -1; + + snprintf (msg, sizeof(msg), _("Loading list of all newsgroups on server %s..."), + serv->conn->account.host); + mutt_message (msg); + time (&serv->newgroups_time); + nntp_data.nserv = serv; + nntp_data.group = NULL; + + if (mutt_nntp_fetch (&nntp_data, "LIST\r\n", msg, add_group, serv, 0) < 0) + { +#ifdef DEBUG + nntp_error ("nntp_get_active()", "LIST\r\n"); +#endif + return -1; + } + + strfcpy (msg, _("Loading descriptions..."), sizeof (msg)); + mutt_message (msg); + nntp_get_desc (&nntp_data, "*", msg); + + for (tmp = serv->list; tmp; tmp = tmp->next) + { + NNTP_DATA *data = (NNTP_DATA *)tmp->data; + + if (data && data->deleted && !data->rc) + { + nntp_delete_cache (data); + hash_delete (serv->newsgroups, data->group, NULL, nntp_delete_data); + tmp->data = NULL; + } + } + nntp_save_cache_index (serv); + + mutt_clear_error (); + return _checked; +} + +/* + * returns -1 if error ocurred while retrieving header, + * number of articles which ones exist in context on success. + */ +int nntp_check_msgid (CONTEXT *ctx, const char *msgid) +{ + int ret; + + /* if msgid is already in context, don't reload them */ + if (hash_find (ctx->id_hash, msgid)) + return 1; + if (ctx->msgcount == ctx->hdrmax) + mx_alloc_memory (ctx); + ctx->hdrs[ctx->msgcount] = mutt_new_header (); + ctx->hdrs[ctx->msgcount]->index = ctx->msgcount; + + mutt_message (_("Fetching %s from server..."), msgid); + ret = nntp_read_header (ctx, msgid, 0); + /* since nntp_read_header() may set read flag, we must reset it */ + ctx->hdrs[ctx->msgcount]->read = 0; + if (ret != 0) + mutt_free_header (&ctx->hdrs[ctx->msgcount]); + else + { + ctx->msgcount++; + mx_update_context (ctx, 1); + ctx->changed = 1; + } + return ret; +} + +typedef struct +{ + CONTEXT *ctx; + unsigned int num; + unsigned int max; + unsigned int *child; +} CHILD_CONTEXT; + +static int check_children (char *s, void *c) +{ +#define cc ((CHILD_CONTEXT *) c) + unsigned int i, n; + + if (!s || (n = atoi (s)) == 0) + return 0; + for (i = 0; i < cc->ctx->msgcount; i++) + if (cc->ctx->hdrs[i]->article_num == n) + return 0; + if (cc->num >= cc->max) + safe_realloc (&cc->child, sizeof (unsigned int) * (cc->max += 25)); + cc->child[cc->num++] = n; + + return 0; +#undef cc +} + +int nntp_check_children (CONTEXT *ctx, const char *msgid) +{ + NNTP_DATA *nntp_data = (NNTP_DATA *)ctx->data; + char buf[STRING]; + int i, ret = 0, tmp = 0; + CHILD_CONTEXT cc; + + if (!nntp_data || !nntp_data->nserv || !nntp_data->nserv->conn || + !nntp_data->nserv->conn->account.host) + return -1; + if (nntp_data->firstMessage > nntp_data->lastLoaded) + return 0; + if (!nntp_data->nserv->hasXPAT) + { + mutt_error (_("Server %s does not support this operation!"), + nntp_data->nserv->conn->account.host); + return -1; + } + + snprintf (buf, sizeof (buf), "XPAT References %d-%d *%s*\r\n", + nntp_data->firstMessage, nntp_data->lastLoaded, msgid); + + cc.ctx = ctx; + cc.num = 0; + cc.max = 25; + cc.child = safe_malloc (sizeof (unsigned int) * 25); + if (mutt_nntp_fetch (nntp_data, buf, NULL, check_children, &cc, 0)) + { + FREE (&cc.child); + return -1; + } + /* dont try to read the xover cache. check_children() already + * made sure that we dont have the article, so we need to visit + * the server. Reading the cache at this point is also bad + * because it would duplicate messages */ + if (option (OPTNEWSCACHE)) + { + tmp++; + unset_option (OPTNEWSCACHE); + } + for (i = 0; i < cc.num; i++) + { + if ((ret = nntp_fetch_headers (ctx, cc.child[i], cc.child[i]))) + break; + if (ctx->msgcount && + ctx->hdrs[ctx->msgcount - 1]->article_num == cc.child[i]) + ctx->hdrs[ctx->msgcount - 1]->read = 0; + } + if (tmp) + set_option (OPTNEWSCACHE); + FREE (&cc.child); + return ret; +} diff --git a/nntp.h b/nntp.h new file mode 100644 index 0000000..3ad0a18 --- /dev/null +++ b/nntp.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 1998 Brandon Long <blong@fiction.net> + * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net> + * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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. + */ + +#ifndef _NNTP_H_ +#define _NNTP_H_ 1 + +#include "mutt_socket.h" +#include "mailbox.h" + +#include <time.h> + +#define NNTP_PORT 119 +#define NNTP_SSL_PORT 563 + +/* number of entries in the hash table */ +#define NNTP_CACHE_LEN 10 + +enum +{ + NNTP_NONE = 0, + NNTP_OK, + NNTP_BYE +}; + +typedef struct +{ + int first; + int last; +} NEWSRC_ENTRY; + +typedef struct +{ + unsigned int hasXPAT : 1; + unsigned int hasXGTITLE : 1; + unsigned int hasXOVER : 1; + unsigned int status : 3; + char *newsrc; + char *cache; + int stat; + off_t size; + time_t mtime; + time_t newgroups_time; + time_t check_time; + HASH *newsgroups; + LIST *list; /* list of newsgroups */ + LIST *tail; /* last entry of list */ + CONNECTION *conn; +} NNTP_SERVER; + +typedef struct +{ + unsigned int index; + char *path; +} NNTP_CACHE; + +typedef struct +{ + NEWSRC_ENTRY *entries; + unsigned int num; /* number of used entries */ + unsigned int max; /* number of allocated entries */ + unsigned int unread; + unsigned int firstMessage; + unsigned int lastMessage; + unsigned int lastLoaded; + unsigned int lastCached; + unsigned int subscribed : 1; + unsigned int rc : 1; + unsigned int new : 1; + unsigned int allowed : 1; + unsigned int deleted : 1; + char *group; + char *desc; + char *cache; + NNTP_SERVER *nserv; + NNTP_CACHE acache[NNTP_CACHE_LEN]; +} NNTP_DATA; + +/* internal functions */ +int nntp_get_active (NNTP_SERVER *); +int nntp_get_cache_all (NNTP_SERVER *); +int nntp_save_cache_index (NNTP_SERVER *); +int nntp_check_newgroups (NNTP_SERVER *, int); +int nntp_save_cache_group (CONTEXT *); +int nntp_parse_url (const char *, ACCOUNT *, char *, size_t); +void newsrc_gen_entries (CONTEXT *); +void nntp_get_status (CONTEXT *, HEADER *, char *, int); +void mutt_newsgroup_stat (NNTP_DATA *); +void nntp_delete_cache (NNTP_DATA *); +void nntp_add_to_list (NNTP_SERVER *, NNTP_DATA *); +void nntp_cache_expand (char *, const char *); +void nntp_delete_data (void *); + +/* exposed interface */ +NNTP_SERVER *mutt_select_newsserver (char *); +NNTP_DATA *mutt_newsgroup_subscribe (NNTP_SERVER *, char *); +NNTP_DATA *mutt_newsgroup_unsubscribe (NNTP_SERVER *, char *); +NNTP_DATA *mutt_newsgroup_catchup (NNTP_SERVER *, char *); +NNTP_DATA *mutt_newsgroup_uncatchup (NNTP_SERVER *, char *); +void nntp_clear_cacheindex (NNTP_SERVER *); +int mutt_newsrc_update (NNTP_SERVER *); +int nntp_open_mailbox (CONTEXT *); +int nntp_sync_mailbox (CONTEXT *); +int nntp_check_mailbox (CONTEXT *); +int nntp_close_mailbox (CONTEXT *); +void nntp_fastclose_mailbox (CONTEXT *); +int nntp_fetch_message (MESSAGE *, CONTEXT *, int); +int nntp_post (const char *); +int nntp_check_msgid (CONTEXT *, const char *); +int nntp_check_children (CONTEXT *, const char *); +void nntp_buffy (char *); +void nntp_expand_path (char *, size_t, ACCOUNT *); +void nntp_logout_all (); +const char *nntp_format_str (char *, size_t, char, const char *, const char *, + const char *, const char *, unsigned long, format_flag); + +NNTP_SERVER *CurrentNewsSrv INITVAL (NULL); + +#endif /* _NNTP_H_ */ diff --git a/pager.c b/pager.c new file mode 100644 index 0000000..cc852a4 --- /dev/null +++ b/pager.c @@ -0,0 +1,2729 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_regex.h" +#include "keymap.h" +#include "mutt_menu.h" +#include "mapping.h" +#include "sort.h" +#include "pager.h" +#include "attach.h" +#include "mbyte.h" + +#include "mx.h" + +#ifdef USE_IMAP +#include "imap_private.h" +#endif + +#include "mutt_crypt.h" + +#include <sys/stat.h> +#include <ctype.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> + +#define ISHEADER(x) ((x) == MT_COLOR_HEADER || (x) == MT_COLOR_HDEFAULT) + +#define IsAttach(x) (x && (x)->bdy) +#define IsRecvAttach(x) (x && (x)->bdy && (x)->fp) +#define IsSendAttach(x) (x && (x)->bdy && !(x)->fp) +#define IsMsgAttach(x) (x && (x)->fp && (x)->bdy && (x)->bdy->hdr) +#define IsHeader(x) (x && (x)->hdr && !(x)->bdy) + +static const char *Not_available_in_this_menu = N_("Not available in this menu."); +static const char *Mailbox_is_read_only = N_("Mailbox is read-only."); +static const char *Function_not_permitted_in_attach_message_mode = N_("Function not permitted in attach-message mode."); + +#define CHECK_MODE(x) if (!(x)) \ + { \ + mutt_flushinp (); \ + mutt_error _(Not_available_in_this_menu); \ + break; \ + } + +#define CHECK_READONLY if (Context->readonly) \ + { \ + mutt_flushinp (); \ + mutt_error _(Mailbox_is_read_only); \ + break; \ + } + +#define CHECK_ATTACH if(option(OPTATTACHMSG)) \ + {\ + mutt_flushinp (); \ + mutt_error _(Function_not_permitted_in_attach_message_mode); \ + break; \ + } + +#ifdef USE_IMAP +/* the error message returned here could be better. */ +#define CHECK_IMAP_ACL(aclbit) if (Context->magic == M_IMAP) \ + if (mutt_bit_isset (((IMAP_DATA *)Context->data)->capabilities, ACL) \ + && !mutt_bit_isset(((IMAP_DATA *)Context->data)->rights,aclbit)){ \ + mutt_flushinp(); \ + mutt_error ("Operation not permitted by the IMAP ACL for this mailbox"); \ + break; \ + } +#endif + +struct q_class_t +{ + int length; + int index; + int color; + char *prefix; + struct q_class_t *next, *prev; + struct q_class_t *down, *up; +}; + +struct syntax_t +{ + int color; + int first; + int last; +}; + +struct line_t +{ + long offset; + short type; + short continuation; + short chunks; + short search_cnt; + struct syntax_t *syntax; + struct syntax_t *search; + struct q_class_t *quote; +}; + +#define ANSI_OFF (1<<0) +#define ANSI_BLINK (1<<1) +#define ANSI_BOLD (1<<2) +#define ANSI_UNDERLINE (1<<3) +#define ANSI_REVERSE (1<<4) +#define ANSI_COLOR (1<<5) + +typedef struct _ansi_attr { + int attr; + int fg; + int bg; + int pair; +} ansi_attr; + +static short InHelp = 0; + +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) +static struct resize { + int line; + int SearchCompiled; + int SearchBack; +} *Resize = NULL; +#endif + +#define NumSigLines 4 + +static int check_sig (const char *s, struct line_t *info, int n) +{ + int count = 0; + + while (n > 0 && count <= NumSigLines) + { + if (info[n].type != MT_COLOR_SIGNATURE) + break; + count++; + n--; + } + + if (count == 0) + return (-1); + + if (count > NumSigLines) + { + /* check for a blank line */ + while (*s) + { + if (!ISSPACE (*s)) + return 0; + s++; + } + + return (-1); + } + + return (0); +} + +static void +resolve_color (struct line_t *lineInfo, int n, int cnt, int flags, int special, + ansi_attr *a) +{ + int def_color; /* color without syntax hilight */ + int color; /* final color */ + static int last_color; /* last color set */ + int search = 0, i, m; + + if (!cnt) + last_color = -1; /* force attrset() */ + + if (lineInfo[n].continuation) + { + if (!cnt && option (OPTMARKERS)) + { + SETCOLOR (MT_COLOR_MARKERS); + addch ('+'); + last_color = ColorDefs[MT_COLOR_MARKERS]; + } + m = (lineInfo[n].syntax)[0].first; + cnt += (lineInfo[n].syntax)[0].last; + } + else + m = n; + if (!(flags & M_SHOWCOLOR)) + def_color = ColorDefs[MT_COLOR_NORMAL]; + else if (lineInfo[m].type == MT_COLOR_HEADER) + def_color = (lineInfo[m].syntax)[0].color; + else + def_color = ColorDefs[lineInfo[m].type]; + + if ((flags & M_SHOWCOLOR) && lineInfo[m].type == MT_COLOR_QUOTED) + { + struct q_class_t *class = lineInfo[m].quote; + + if (class) + { + def_color = class->color; + + while (class && class->length > cnt) + { + def_color = class->color; + class = class->up; + } + } + } + + color = def_color; + if (flags & M_SHOWCOLOR) + { + for (i = 0; i < lineInfo[m].chunks; i++) + { + /* we assume the chunks are sorted */ + if (cnt > (lineInfo[m].syntax)[i].last) + continue; + if (cnt < (lineInfo[m].syntax)[i].first) + break; + if (cnt != (lineInfo[m].syntax)[i].last) + { + color = (lineInfo[m].syntax)[i].color; + break; + } + /* don't break here, as cnt might be + * in the next chunk as well */ + } + } + + if (flags & M_SEARCH) + { + for (i = 0; i < lineInfo[m].search_cnt; i++) + { + if (cnt > (lineInfo[m].search)[i].last) + continue; + if (cnt < (lineInfo[m].search)[i].first) + break; + if (cnt != (lineInfo[m].search)[i].last) + { + color = ColorDefs[MT_COLOR_SEARCH]; + search = 1; + break; + } + } + } + + /* handle "special" bold & underlined characters */ + if (special || a->attr) + { +#ifdef HAVE_COLOR + if ((a->attr & ANSI_COLOR)) + { + if (a->pair == -1) + a->pair = mutt_alloc_color (a->fg, a->bg); + color = a->pair; + if (a->attr & ANSI_BOLD) + color |= A_BOLD; + } + else +#endif + if ((special & A_BOLD) || (a->attr & ANSI_BOLD)) + { + if (ColorDefs[MT_COLOR_BOLD] && !search) + color = ColorDefs[MT_COLOR_BOLD]; + else + color ^= A_BOLD; + } + if ((special & A_UNDERLINE) || (a->attr & ANSI_UNDERLINE)) + { + if (ColorDefs[MT_COLOR_UNDERLINE] && !search) + color = ColorDefs[MT_COLOR_UNDERLINE]; + else + color ^= A_UNDERLINE; + } + else if (a->attr & ANSI_REVERSE) + { + color ^= A_REVERSE; + } + else if (a->attr & ANSI_BLINK) + { + color ^= A_BLINK; + } + else if (a->attr & ANSI_OFF) + { + a->attr = 0; + } + } + + if (color != last_color) + { + attrset (color); + last_color = color; + } +} + +static void +append_line (struct line_t *lineInfo, int n, int cnt) +{ + int m; + + lineInfo[n+1].type = lineInfo[n].type; + (lineInfo[n+1].syntax)[0].color = (lineInfo[n].syntax)[0].color; + lineInfo[n+1].continuation = 1; + + /* find the real start of the line */ + for (m = n; m >= 0; m--) + if (lineInfo[m].continuation == 0) break; + + (lineInfo[n+1].syntax)[0].first = m; + (lineInfo[n+1].syntax)[0].last = (lineInfo[n].continuation) ? + cnt + (lineInfo[n].syntax)[0].last : cnt; +} + +static void +new_class_color (struct q_class_t *class, int *q_level) +{ + class->index = (*q_level)++; + class->color = ColorQuote[class->index % ColorQuoteUsed]; +} + +static void +shift_class_colors (struct q_class_t *QuoteList, struct q_class_t *new_class, + int index, int *q_level) +{ + struct q_class_t * q_list; + + q_list = QuoteList; + new_class->index = -1; + + while (q_list) + { + if (q_list->index >= index) + { + q_list->index++; + q_list->color = ColorQuote[q_list->index % ColorQuoteUsed]; + } + if (q_list->down) + q_list = q_list->down; + else if (q_list->next) + q_list = q_list->next; + else + { + while (!q_list->next) + { + q_list = q_list->up; + if (q_list == NULL) + break; + } + if (q_list) + q_list = q_list->next; + } + } + + new_class->index = index; + new_class->color = ColorQuote[index % ColorQuoteUsed]; + (*q_level)++; +} + +static void +cleanup_quote (struct q_class_t **QuoteList) +{ + struct q_class_t *ptr; + + while (*QuoteList) + { + if ((*QuoteList)->down) + cleanup_quote (&((*QuoteList)->down)); + ptr = (*QuoteList)->next; + if ((*QuoteList)->prefix) + FREE (&(*QuoteList)->prefix); + FREE (QuoteList); + *QuoteList = ptr; + } + + return; +} + +static struct q_class_t * +classify_quote (struct q_class_t **QuoteList, const char *qptr, + int length, int *force_redraw, int *q_level) +{ + struct q_class_t *q_list = *QuoteList; + struct q_class_t *class = NULL, *tmp = NULL, *ptr, *save; + char *tail_qptr; + int offset, tail_lng; + int index = -1; + + if (ColorQuoteUsed <= 1) + { + /* not much point in classifying quotes... */ + + if (*QuoteList == NULL) + { + class = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t)); + class->color = ColorQuote[0]; + *QuoteList = class; + } + return (*QuoteList); + } + + /* Did I mention how much I like emulating Lisp in C? */ + + /* classify quoting prefix */ + while (q_list) + { + if (length <= q_list->length) + { + /* case 1: check the top level nodes */ + + if (mutt_strncmp (qptr, q_list->prefix, length) == 0) + { + if (length == q_list->length) + return q_list; /* same prefix: return the current class */ + + /* found shorter prefix */ + if (tmp == NULL) + { + /* add a node above q_list */ + tmp = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t)); + tmp->prefix = (char *) safe_calloc (1, length + 1); + strncpy (tmp->prefix, qptr, length); + tmp->length = length; + + /* replace q_list by tmp in the top level list */ + if (q_list->next) + { + tmp->next = q_list->next; + q_list->next->prev = tmp; + } + if (q_list->prev) + { + tmp->prev = q_list->prev; + q_list->prev->next = tmp; + } + + /* make q_list a child of tmp */ + tmp->down = q_list; + q_list->up = tmp; + + /* q_list has no siblings for now */ + q_list->next = NULL; + q_list->prev = NULL; + + /* update the root if necessary */ + if (q_list == *QuoteList) + *QuoteList = tmp; + + index = q_list->index; + + /* tmp should be the return class too */ + class = tmp; + + /* next class to test; if tmp is a shorter prefix for another + * node, that node can only be in the top level list, so don't + * go down after this point + */ + q_list = tmp->next; + } + else + { + /* found another branch for which tmp is a shorter prefix */ + + /* save the next sibling for later */ + save = q_list->next; + + /* unlink q_list from the top level list */ + if (q_list->next) + q_list->next->prev = q_list->prev; + if (q_list->prev) + q_list->prev->next = q_list->next; + + /* at this point, we have a tmp->down; link q_list to it */ + ptr = tmp->down; + /* sibling order is important here, q_list should be linked last */ + while (ptr->next) + ptr = ptr->next; + ptr->next = q_list; + q_list->next = NULL; + q_list->prev = ptr; + q_list->up = tmp; + + index = q_list->index; + + /* next class to test; as above, we shouldn't go down */ + q_list = save; + } + + /* we found a shorter prefix, so certain quotes have changed classes */ + *force_redraw = 1; + continue; + } + else + { + /* shorter, but not a substring of the current class: try next */ + q_list = q_list->next; + continue; + } + } + else + { + /* case 2: try subclassing the current top level node */ + + /* tmp != NULL means we already found a shorter prefix at case 1 */ + if (tmp == NULL && mutt_strncmp (qptr, q_list->prefix, q_list->length) == 0) + { + /* ok, it's a subclass somewhere on this branch */ + + ptr = q_list; + offset = q_list->length; + + q_list = q_list->down; + tail_lng = length - offset; + tail_qptr = (char *) qptr + offset; + + while (q_list) + { + if (length <= q_list->length) + { + if (mutt_strncmp (tail_qptr, (q_list->prefix) + offset, tail_lng) == 0) + { + /* same prefix: return the current class */ + if (length == q_list->length) + return q_list; + + /* found shorter common prefix */ + if (tmp == NULL) + { + /* add a node above q_list */ + tmp = (struct q_class_t *) safe_calloc (1, + sizeof (struct q_class_t)); + tmp->prefix = (char *) safe_calloc (1, length + 1); + strncpy (tmp->prefix, qptr, length); + tmp->length = length; + + /* replace q_list by tmp */ + if (q_list->next) + { + tmp->next = q_list->next; + q_list->next->prev = tmp; + } + if (q_list->prev) + { + tmp->prev = q_list->prev; + q_list->prev->next = tmp; + } + + /* make q_list a child of tmp */ + tmp->down = q_list; + tmp->up = q_list->up; + q_list->up = tmp; + if (tmp->up->down == q_list) + tmp->up->down = tmp; + + /* q_list has no siblings */ + q_list->next = NULL; + q_list->prev = NULL; + + index = q_list->index; + + /* tmp should be the return class too */ + class = tmp; + + /* next class to test */ + q_list = tmp->next; + } + else + { + /* found another branch for which tmp is a shorter prefix */ + + /* save the next sibling for later */ + save = q_list->next; + + /* unlink q_list from the top level list */ + if (q_list->next) + q_list->next->prev = q_list->prev; + if (q_list->prev) + q_list->prev->next = q_list->next; + + /* at this point, we have a tmp->down; link q_list to it */ + ptr = tmp->down; + while (ptr->next) + ptr = ptr->next; + ptr->next = q_list; + q_list->next = NULL; + q_list->prev = ptr; + q_list->up = tmp; + + index = q_list->index; + + /* next class to test */ + q_list = save; + } + + /* we found a shorter prefix, so we need a redraw */ + *force_redraw = 1; + continue; + } + else + { + q_list = q_list->next; + continue; + } + } + else + { + /* longer than the current prefix: try subclassing it */ + if (tmp == NULL && mutt_strncmp (tail_qptr, (q_list->prefix) + offset, + q_list->length - offset) == 0) + { + /* still a subclass: go down one level */ + ptr = q_list; + offset = q_list->length; + + q_list = q_list->down; + tail_lng = length - offset; + tail_qptr = (char *) qptr + offset; + + continue; + } + else + { + /* nope, try the next prefix */ + q_list = q_list->next; + continue; + } + } + } + + /* still not found so far: add it as a sibling to the current node */ + if (class == NULL) + { + tmp = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t)); + tmp->prefix = (char *) safe_calloc (1, length + 1); + strncpy (tmp->prefix, qptr, length); + tmp->length = length; + + if (ptr->down) + { + tmp->next = ptr->down; + ptr->down->prev = tmp; + } + ptr->down = tmp; + tmp->up = ptr; + + new_class_color (tmp, q_level); + + return tmp; + } + else + { + if (index != -1) + shift_class_colors (*QuoteList, tmp, index, q_level); + + return class; + } + } + else + { + /* nope, try the next prefix */ + q_list = q_list->next; + continue; + } + } + } + + if (class == NULL) + { + /* not found so far: add it as a top level class */ + class = (struct q_class_t *) safe_calloc (1, sizeof (struct q_class_t)); + class->prefix = (char *) safe_calloc (1, length + 1); + strncpy (class->prefix, qptr, length); + class->length = length; + new_class_color (class, q_level); + + if (*QuoteList) + { + class->next = *QuoteList; + (*QuoteList)->prev = class; + } + *QuoteList = class; + } + + if (index != -1) + shift_class_colors (*QuoteList, tmp, index, q_level); + + return class; +} + +static int check_attachment_marker (char *); + +static void +resolve_types (char *buf, char *raw, struct line_t *lineInfo, int n, int last, + struct q_class_t **QuoteList, int *q_level, int *force_redraw, + int q_classify) +{ + COLOR_LINE *color_line; + regmatch_t pmatch[1], smatch[1]; + int found, offset, null_rx, i; + + if (n == 0 || ISHEADER (lineInfo[n-1].type)) + { + if (buf[0] == '\n') + lineInfo[n].type = MT_COLOR_NORMAL; + else if (n > 0 && (buf[0] == ' ' || buf[0] == '\t')) + { + lineInfo[n].type = lineInfo[n-1].type; /* wrapped line */ + (lineInfo[n].syntax)[0].color = (lineInfo[n-1].syntax)[0].color; + } + else + { + lineInfo[n].type = MT_COLOR_HDEFAULT; + color_line = ColorHdrList; + while (color_line) + { + if (REGEXEC (color_line->rx, buf) == 0) + { + lineInfo[n].type = MT_COLOR_HEADER; + lineInfo[n].syntax[0].color = color_line->pair; + break; + } + color_line = color_line->next; + } + } + } + else if (mutt_strncmp ("\033[0m", raw, 4) == 0) /* a little hack... */ + lineInfo[n].type = MT_COLOR_NORMAL; +#if 0 + else if (mutt_strncmp ("[-- ", buf, 4) == 0) + lineInfo[n].type = MT_COLOR_ATTACHMENT; +#else + else if (check_attachment_marker ((char *) raw) == 0) + lineInfo[n].type = MT_COLOR_ATTACHMENT; +#endif + else if (mutt_strcmp ("-- \n", buf) == 0 || mutt_strcmp ("-- \r\n", buf) == 0) + { + i = n + 1; + + lineInfo[n].type = MT_COLOR_SIGNATURE; + while (i < last && check_sig (buf, lineInfo, i - 1) == 0 && + (lineInfo[i].type == MT_COLOR_NORMAL || + lineInfo[i].type == MT_COLOR_QUOTED || + lineInfo[i].type == MT_COLOR_HEADER)) + { + /* oops... */ + if (lineInfo[i].chunks) + { + lineInfo[i].chunks = 0; + safe_realloc (&(lineInfo[n].syntax), + sizeof (struct syntax_t)); + } + lineInfo[i++].type = MT_COLOR_SIGNATURE; + } + } + else if (check_sig (buf, lineInfo, n - 1) == 0) + lineInfo[n].type = MT_COLOR_SIGNATURE; + else if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0) + { + if (regexec ((regex_t *) Smileys.rx, buf, 1, smatch, 0) == 0) + { + if (smatch[0].rm_so > 0) + { + char c; + + /* hack to avoid making an extra copy of buf */ + c = buf[smatch[0].rm_so]; + buf[smatch[0].rm_so] = 0; + + if (regexec ((regex_t *) QuoteRegexp.rx, buf, 1, pmatch, 0) == 0) + { + if (q_classify && lineInfo[n].quote == NULL) + lineInfo[n].quote = classify_quote (QuoteList, + buf + pmatch[0].rm_so, + pmatch[0].rm_eo - pmatch[0].rm_so, + force_redraw, q_level); + lineInfo[n].type = MT_COLOR_QUOTED; + } + else + lineInfo[n].type = MT_COLOR_NORMAL; + + buf[smatch[0].rm_so] = c; + } + else + lineInfo[n].type = MT_COLOR_NORMAL; + } + else + { + if (q_classify && lineInfo[n].quote == NULL) + lineInfo[n].quote = classify_quote (QuoteList, buf + pmatch[0].rm_so, + pmatch[0].rm_eo - pmatch[0].rm_so, + force_redraw, q_level); + lineInfo[n].type = MT_COLOR_QUOTED; + } + } + else + lineInfo[n].type = MT_COLOR_NORMAL; + + /* body patterns */ + if (lineInfo[n].type == MT_COLOR_NORMAL || + lineInfo[n].type == MT_COLOR_QUOTED) + { + i = 0; + + offset = 0; + lineInfo[n].chunks = 0; + do + { + if (!buf[offset]) + break; + + found = 0; + null_rx = 0; + color_line = ColorBodyList; + while (color_line) + { + if (regexec (&color_line->rx, buf + offset, 1, pmatch, + (offset ? REG_NOTBOL : 0)) == 0) + { + if (pmatch[0].rm_eo != pmatch[0].rm_so) + { + if (!found) + { + if (++(lineInfo[n].chunks) > 1) + safe_realloc (&(lineInfo[n].syntax), + (lineInfo[n].chunks) * sizeof (struct syntax_t)); + } + i = lineInfo[n].chunks - 1; + pmatch[0].rm_so += offset; + pmatch[0].rm_eo += offset; + if (!found || + pmatch[0].rm_so < (lineInfo[n].syntax)[i].first || + (pmatch[0].rm_so == (lineInfo[n].syntax)[i].first && + pmatch[0].rm_eo > (lineInfo[n].syntax)[i].last)) + { + (lineInfo[n].syntax)[i].color = color_line->pair; + (lineInfo[n].syntax)[i].first = pmatch[0].rm_so; + (lineInfo[n].syntax)[i].last = pmatch[0].rm_eo; + } + found = 1; + null_rx = 0; + } + else + null_rx = 1; /* empty regexp; don't add it, but keep looking */ + } + color_line = color_line->next; + } + + if (null_rx) + offset++; /* avoid degenerate cases */ + else + offset = (lineInfo[n].syntax)[i].last; + } while (found || null_rx); + } +} + +static int is_ansi (unsigned char *buf) +{ + while (*buf && (isdigit(*buf) || *buf == ';')) + buf++; + return (*buf == 'm'); +} + +static int check_attachment_marker (char *p) +{ + char *q = AttachmentMarker; + + for (;*p == *q && *q && *p && *q != '\a' && *p != '\a'; p++, q++) + ; + return (int) (*p - *q); +} + +static int grok_ansi(unsigned char *buf, int pos, ansi_attr *a) +{ + int x = pos; + + while (isdigit(buf[x]) || buf[x] == ';') + x++; + + /* Character Attributes */ + if (option (OPTALLOWANSI) && a != NULL && buf[x] == 'm') + { + if (pos == x) + { +#ifdef HAVE_COLOR + if (a->pair != -1) + mutt_free_color (a->fg, a->bg); +#endif + a->attr = ANSI_OFF; + a->pair = -1; + } + while (pos < x) + { + if (buf[pos] == '1' && (pos+1 == x || buf[pos+1] == ';')) + { + a->attr |= ANSI_BOLD; + pos += 2; + } + else if (buf[pos] == '4' && (pos+1 == x || buf[pos+1] == ';')) + { + a->attr |= ANSI_UNDERLINE; + pos += 2; + } + else if (buf[pos] == '5' && (pos+1 == x || buf[pos+1] == ';')) + { + a->attr |= ANSI_BLINK; + pos += 2; + } + else if (buf[pos] == '7' && (pos+1 == x || buf[pos+1] == ';')) + { + a->attr |= ANSI_REVERSE; + pos += 2; + } + else if (buf[pos] == '0' && (pos+1 == x || buf[pos+1] == ';')) + { +#ifdef HAVE_COLOR + if (a->pair != -1) + mutt_free_color(a->fg,a->bg); +#endif + a->attr = ANSI_OFF; + a->pair = -1; + pos += 2; + } + else if (buf[pos] == '3' && isdigit(buf[pos+1])) + { +#ifdef HAVE_COLOR + if (a->pair != -1) + mutt_free_color(a->fg,a->bg); +#endif + a->pair = -1; + a->attr |= ANSI_COLOR; + a->fg = buf[pos+1] - '0'; + pos += 3; + } + else if (buf[pos] == '4' && isdigit(buf[pos+1])) + { +#ifdef HAVE_COLOR + if (a->pair != -1) + mutt_free_color(a->fg,a->bg); +#endif + a->pair = -1; + a->attr |= ANSI_COLOR; + a->bg = buf[pos+1] - '0'; + pos += 3; + } + else + { + while (pos < x && buf[pos] != ';') pos++; + pos++; + } + } + } + pos = x; + return pos; +} + +static int +fill_buffer (FILE *f, long *last_pos, long offset, unsigned char *buf, + unsigned char *fmt, size_t blen, int *buf_ready) +{ + unsigned char *p; + static int b_read; + + if (*buf_ready == 0) + { + buf[blen - 1] = 0; + if (offset != *last_pos) + fseek (f, offset, 0); + if (fgets ((char *) buf, blen - 1, f) == NULL) + { + fmt[0] = 0; + return (-1); + } + *last_pos = ftell (f); + b_read = (int) (*last_pos - offset); + *buf_ready = 1; + + /* copy "buf" to "fmt", but without bold and underline controls */ + p = buf; + while (*p) + { + if (*p == '\010' && (p > buf)) + { + if (*(p+1) == '_') /* underline */ + p += 2; + else if (*(p+1)) /* bold or overstrike */ + { + *(fmt-1) = *(p+1); + p += 2; + } + else /* ^H */ + *fmt++ = *p++; + } + else if (*p == '\033' && *(p+1) == '[' && is_ansi (p + 2)) + { + while (*p++ != 'm') /* skip ANSI sequence */ + ; + } + else if (*p == '\033' && *(p+1) == ']' && check_attachment_marker ((char *) p) == 0) + { + dprint (2, (debugfile, "fill_buffer: Seen attachment marker.\n")); + while (*p++ != '\a') /* skip pseudo-ANSI sequence */ + ; + } + else + *fmt++ = *p++; + } + *fmt = 0; + } + return b_read; +} + +#ifdef USE_NNTP +#include "mx.h" +#include "nntp.h" +#endif + + +static int format_line (struct line_t **lineInfo, int n, unsigned char *buf, + int flags, ansi_attr *pa, int cnt, + int *pspace, int *pvch, int *pcol, int *pspecial) +{ + int space = -1; /* index of the last space or TAB */ + int col = option (OPTMARKERS) ? (*lineInfo)[n].continuation : 0; + int ch, vch, k, last_special = -1, special = 0, t; + wchar_t wc; + mbstate_t mbstate; + + int wrap_cols = COLS - WrapMargin; + + if (wrap_cols <= 0) + wrap_cols = COLS; + + /* FIXME: this should come from lineInfo */ + memset(&mbstate, 0, sizeof(mbstate)); + + for (ch = 0, vch = 0; ch < cnt; ch += k, vch += k) + { + /* Handle ANSI sequences */ + while (cnt-ch >= 2 && buf[ch] == '\033' && buf[ch+1] == '[' && + is_ansi (buf+ch+2)) + ch = grok_ansi (buf, ch+2, pa) + 1; + + while (cnt-ch >= 2 && buf[ch] == '\033' && buf[ch+1] == ']' && + check_attachment_marker ((char *) buf+ch) == 0) + { + while (buf[ch++] != '\a') + if (ch >= cnt) + break; + } + + /* is anything left to do? */ + if (ch >= cnt) + break; + + k = mbrtowc (&wc, (char *)buf+ch, cnt-ch, &mbstate); + if (k == -2 || k == -1) + { + dprint (1, (debugfile, "%s:%d: mbrtowc returned %d; errno = %d.\n", + __FILE__, __LINE__, k, errno)); + if (col + 4 > wrap_cols) + break; + col += 4; + if (pa) + printw ("\\%03o", buf[ch]); + k = 1; + continue; + } + if (k == 0) + k = 1; + + /* Handle backspace */ + special = 0; + if (IsWPrint (wc)) + { + wchar_t wc1; + mbstate_t mbstate1; + int k1, k2; + + while ((wc1 = 0, mbstate1 = mbstate, + k1 = k + mbrtowc (&wc1, (char *)buf+ch+k, cnt-ch-k, &mbstate1), + k1 - k > 0 && wc1 == '\b') && + (wc1 = 0, + k2 = mbrtowc (&wc1, (char *)buf+ch+k1, cnt-ch-k1, &mbstate1), + k2 > 0 && IsWPrint (wc1))) + { + if (wc == wc1) + { + special |= (wc == '_' && special & A_UNDERLINE) + ? A_UNDERLINE : A_BOLD; + } + else if (wc == '_' || wc1 == '_') + { + special |= A_UNDERLINE; + wc = (wc1 == '_') ? wc : wc1; + } + else + { + /* special = 0; / * overstrike: nothing to do! */ + wc = wc1; + } + ch += k1; + k = k2; + mbstate = mbstate1; + } + } + + if (pa && + ((flags & (M_SHOWCOLOR | M_SEARCH | M_PAGER_MARKER)) || + special || last_special || pa->attr)) + { + resolve_color (*lineInfo, n, vch, flags, special, pa); + last_special = special; + } + + if (IsWPrint (wc)) + { + if (wc == ' ') + space = ch; + t = wcwidth (wc); + if (col + t > wrap_cols) + break; + col += t; + if (pa) + mutt_addwch (wc); + } + else if (wc == '\n') + break; + else if (wc == '\t') + { + space = ch; + t = (col & ~7) + 8; + if (t > wrap_cols) + break; + if (pa) + for (; col < t; col++) + addch (' '); + else + col = t; + } + else if (wc < 0x20 || wc == 0x7f) + { + if (col + 2 > wrap_cols) + break; + col += 2; + if (pa) + printw ("^%c", ('@' + wc) & 0x7f); + } + else if (wc < 0x100) + { + if (col + 4 > wrap_cols) + break; + col += 4; + if (pa) + printw ("\\%03o", wc); + } + else + { + if (col + 1 > wrap_cols) + break; + ++col; + if (pa) + addch (replacement_char ()); + } + } + *pspace = space; + *pcol = col; + *pvch = vch; + *pspecial = special; + return ch; +} + +/* + * Args: + * flags M_SHOWFLAT, show characters (used for displaying help) + * M_SHOWCOLOR, show characters in color + * otherwise don't show characters + * M_HIDE, don't show quoted text + * M_SEARCH, resolve search patterns + * M_TYPES, compute line's type + * M_PAGER_NSKIP, keeps leading whitespace + * M_PAGER_MARKER, eventually show markers + * + * Return values: + * -1 EOF was reached + * 0 normal exit, line was not displayed + * >0 normal exit, line was displayed + */ + +static int +display_line (FILE *f, long *last_pos, struct line_t **lineInfo, int n, + int *last, int *max, int flags, struct q_class_t **QuoteList, + int *q_level, int *force_redraw, regex_t *SearchRE) +{ + unsigned char buf[LONG_STRING], fmt[LONG_STRING]; + unsigned char *buf_ptr = buf; + int ch, vch, col, cnt, b_read; + int buf_ready = 0, change_last = 0; + int special; + int offset; + int def_color; + int m; + ansi_attr a = {0,0,0,-1}; + regmatch_t pmatch[1]; + + if (n == *last) + { + (*last)++; + change_last = 1; + } + + if (*last == *max) + { + safe_realloc (lineInfo, sizeof (struct line_t) * (*max += LINES)); + for (ch = *last; ch < *max ; ch++) + { + memset (&((*lineInfo)[ch]), 0, sizeof (struct line_t)); + (*lineInfo)[ch].type = -1; + (*lineInfo)[ch].search_cnt = -1; + (*lineInfo)[ch].syntax = safe_malloc (sizeof (struct syntax_t)); + ((*lineInfo)[ch].syntax)[0].first = ((*lineInfo)[ch].syntax)[0].last = -1; + } + } + + /* only do color hiliting if we are viewing a message */ + if (flags & (M_SHOWCOLOR | M_TYPES)) + { + if ((*lineInfo)[n].type == -1) + { + /* determine the line class */ + if (fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, sizeof (buf), &buf_ready) < 0) + { + if (change_last) + (*last)--; + return (-1); + } + + resolve_types ((char *) fmt, (char *) buf, *lineInfo, n, *last, + QuoteList, q_level, force_redraw, flags & M_SHOWCOLOR); + + /* avoid race condition for continuation lines when scrolling up */ + for (m = n + 1; m < *last && (*lineInfo)[m].offset && (*lineInfo)[m].continuation; m++) + (*lineInfo)[m].type = (*lineInfo)[n].type; + } + + /* this also prevents searching through the hidden lines */ + if ((flags & M_HIDE) && (*lineInfo)[n].type == MT_COLOR_QUOTED) + flags = 0; /* M_NOSHOW */ + } + + /* At this point, (*lineInfo[n]).quote may still be undefined. We + * don't want to compute it every time M_TYPES is set, since this + * would slow down the "bottom" function unacceptably. A compromise + * solution is hence to call regexec() again, just to find out the + * length of the quote prefix. + */ + if ((flags & M_SHOWCOLOR) && !(*lineInfo)[n].continuation && + (*lineInfo)[n].type == MT_COLOR_QUOTED && (*lineInfo)[n].quote == NULL) + { + if (fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, sizeof (buf), &buf_ready) < 0) + { + if (change_last) + (*last)--; + return (-1); + } + regexec ((regex_t *) QuoteRegexp.rx, (char *) fmt, 1, pmatch, 0); + (*lineInfo)[n].quote = classify_quote (QuoteList, + (char *) fmt + pmatch[0].rm_so, + pmatch[0].rm_eo - pmatch[0].rm_so, + force_redraw, q_level); + } + + if ((flags & M_SEARCH) && !(*lineInfo)[n].continuation && (*lineInfo)[n].search_cnt == -1) + { + if (fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, sizeof (buf), &buf_ready) < 0) + { + if (change_last) + (*last)--; + return (-1); + } + + offset = 0; + (*lineInfo)[n].search_cnt = 0; + while (regexec (SearchRE, (char *) fmt + offset, 1, pmatch, (offset ? REG_NOTBOL : 0)) == 0) + { + if (++((*lineInfo)[n].search_cnt) > 1) + safe_realloc (&((*lineInfo)[n].search), + ((*lineInfo)[n].search_cnt) * sizeof (struct syntax_t)); + else + (*lineInfo)[n].search = safe_malloc (sizeof (struct syntax_t)); + pmatch[0].rm_so += offset; + pmatch[0].rm_eo += offset; + ((*lineInfo)[n].search)[(*lineInfo)[n].search_cnt - 1].first = pmatch[0].rm_so; + ((*lineInfo)[n].search)[(*lineInfo)[n].search_cnt - 1].last = pmatch[0].rm_eo; + + if (pmatch[0].rm_eo == pmatch[0].rm_so) + offset++; /* avoid degenerate cases */ + else + offset = pmatch[0].rm_eo; + if (!fmt[offset]) + break; + } + } + + if (!(flags & M_SHOW) && (*lineInfo)[n+1].offset > 0) + { + /* we've already scanned this line, so just exit */ + return (0); + } + if ((flags & M_SHOWCOLOR) && *force_redraw && (*lineInfo)[n+1].offset > 0) + { + /* no need to try to display this line... */ + return (1); /* fake display */ + } + + if ((b_read = fill_buffer (f, last_pos, (*lineInfo)[n].offset, buf, fmt, + sizeof (buf), &buf_ready)) < 0) + { + if (change_last) + (*last)--; + return (-1); + } + + /* now chose a good place to break the line */ + cnt = format_line (lineInfo, n, buf, flags, 0, b_read, &ch, &vch, &col, &special); + buf_ptr = buf + cnt; + + /* move the break point only if smart_wrap is set */ + if (option (OPTWRAP)) + { + if (cnt < b_read) + { + if (ch != -1 && buf[cnt] != ' ' && buf[cnt] != '\t' && buf[cnt] != '\n' && buf[cnt] != '\r') + { + buf_ptr = buf + ch; + /* skip trailing blanks */ + while (ch && (buf[ch] == ' ' || buf[ch] == '\t' || buf[ch] == '\r')) + ch--; + cnt = ch + 1; + } + else + buf_ptr = buf + cnt; /* a very long word... */ + } + if (!(flags & M_PAGER_NSKIP)) + /* skip leading blanks on the next line too */ + while (*buf_ptr == ' ' || *buf_ptr == '\t') + buf_ptr++; + } + + if (*buf_ptr == '\r') + buf_ptr++; + if (*buf_ptr == '\n') + buf_ptr++; + + if ((int) (buf_ptr - buf) < b_read && !(*lineInfo)[n+1].continuation) + append_line (*lineInfo, n, (int) (buf_ptr - buf)); + (*lineInfo)[n+1].offset = (*lineInfo)[n].offset + (long) (buf_ptr - buf); + + /* if we don't need to display the line we are done */ + if (!(flags & M_SHOW)) + return 0; + + /* display the line */ + format_line (lineInfo, n, buf, flags, &a, cnt, &ch, &vch, &col, &special); + + /* avoid a bug in ncurses... */ +#ifndef USE_SLANG_CURSES + if (col == 0) + { + SETCOLOR (MT_COLOR_NORMAL); + addch (' '); + } +#endif + + /* end the last color pattern (needed by S-Lang) */ + if (special || (col != COLS && (flags & (M_SHOWCOLOR | M_SEARCH)))) + resolve_color (*lineInfo, n, vch, flags, 0, &a); + + /* + * Fill the blank space at the end of the line with the prevailing color. + * ncurses does an implicit clrtoeol() when you do addch('\n') so we have + * to make sure to reset the color *after* that + */ + if (flags & M_SHOWCOLOR) + { + m = ((*lineInfo)[n].continuation) ? ((*lineInfo)[n].syntax)[0].first : n; + if ((*lineInfo)[m].type == MT_COLOR_HEADER) + def_color = ((*lineInfo)[m].syntax)[0].color; + else + def_color = ColorDefs[ (*lineInfo)[m].type ]; + + attrset (def_color); +#ifdef HAVE_BKGDSET + bkgdset (def_color | ' '); +#endif + } + + /* ncurses always wraps lines when you get to the right side of the + * screen, but S-Lang seems to only wrap if the next character is *not* + * a newline (grr!). + */ +#ifndef USE_SLANG_CURSES + if (col < COLS) +#endif + addch ('\n'); + + /* + * reset the color back to normal. This *must* come after the + * addch('\n'), otherwise the color for this line will not be + * filled to the right margin. + */ + if (flags & M_SHOWCOLOR) + { + SETCOLOR(MT_COLOR_NORMAL); + BKGDSET(MT_COLOR_NORMAL); + } + + /* build a return code */ + if (!(flags & M_SHOW)) + flags = 0; + + return (flags); +} + +static int +upNLines (int nlines, struct line_t *info, int cur, int hiding) +{ + while (cur > 0 && nlines > 0) + { + cur--; + if (!hiding || info[cur].type != MT_COLOR_QUOTED) + nlines--; + } + + return cur; +} + +static struct mapping_t PagerHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("PrevPg"), OP_PREV_PAGE }, + { N_("NextPg"), OP_NEXT_PAGE }, + { NULL, 0 } +}; +static struct mapping_t PagerHelpExtra[] = { + { N_("View Attachm."), OP_VIEW_ATTACHMENTS }, + { N_("Del"), OP_DELETE }, + { N_("Reply"), OP_REPLY }, + { N_("Next"), OP_MAIN_NEXT_UNDELETED }, + { NULL, 0 } +}; + +#ifdef USE_NNTP +static struct mapping_t PagerNewsHelpExtra[] = { + { N_("Post"), OP_POST }, + { N_("Followup"), OP_FOLLOWUP }, + { N_("Del"), OP_DELETE }, + { N_("Next"), OP_MAIN_NEXT_UNDELETED }, + { NULL, 0 } +}; +#endif + + + +/* This pager is actually not so simple as it once was. It now operates in + two modes: one for viewing messages and the other for viewing help. These + can be distinguished by whether or not ``hdr'' is NULL. The ``hdr'' arg + is there so that we can do operations on the current message without the + need to pop back out to the main-menu. */ +int +mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra) +{ + static char searchbuf[STRING]; + char buffer[LONG_STRING]; + char helpstr[SHORT_STRING*2]; + char tmphelp[SHORT_STRING*2]; + int maxLine, lastLine = 0; + struct line_t *lineInfo; + struct q_class_t *QuoteList = NULL; + int i, j, ch = 0, rc = -1, hideQuoted = 0, q_level = 0, force_redraw = 0; + int lines = 0, curline = 0, topline = 0, oldtopline = 0, err, first = 1; + int r = -1; + int redraw = REDRAW_FULL; + FILE *fp = NULL; + long last_pos = 0, last_offset = 0; + int old_smart_wrap, old_markers; + struct stat sb; + regex_t SearchRE; + int SearchCompiled = 0, SearchFlag = 0, SearchBack = 0; + int has_types = (IsHeader(extra) || (flags & M_SHOWCOLOR)) ? M_TYPES : 0; /* main message or rfc822 attachment */ + + int bodyoffset = 1; /* offset of first line of real text */ + int statusoffset = 0; /* offset for the status bar */ + int helpoffset = LINES - 2; /* offset for the help bar. */ + int bodylen = LINES - 2 - bodyoffset; /* length of displayable area */ + + MUTTMENU *index = NULL; /* the Pager Index (PI) */ + int indexoffset = 0; /* offset for the PI */ + int indexlen = PagerIndexLines; /* indexlen not always == PIL */ + int indicator = indexlen / 3; /* the indicator line of the PI */ + int old_PagerIndexLines; /* some people want to resize it + * while inside the pager... */ + +#ifdef USE_NNTP + char *followup_to; +#endif + + if (!(flags & M_SHOWCOLOR)) + flags |= M_SHOWFLAT; + + if ((fp = fopen (fname, "r")) == NULL) + { + mutt_perror (fname); + return (-1); + } + + if (stat (fname, &sb) != 0) + { + mutt_perror (fname); + fclose (fp); + return (-1); + } + unlink (fname); + + /* Initialize variables */ + + if (IsHeader (extra) && !extra->hdr->read) + { + Context->msgnotreadyet = extra->hdr->msgno; + mutt_set_flag (Context, extra->hdr, M_READ, 1); + } + + lineInfo = safe_malloc (sizeof (struct line_t) * (maxLine = LINES)); + for (i = 0 ; i < maxLine ; i++) + { + memset (&lineInfo[i], 0, sizeof (struct line_t)); + lineInfo[i].type = -1; + lineInfo[i].search_cnt = -1; + lineInfo[i].syntax = safe_malloc (sizeof (struct syntax_t)); + (lineInfo[i].syntax)[0].first = (lineInfo[i].syntax)[0].last = -1; + } + + mutt_compile_help (helpstr, sizeof (helpstr), MENU_PAGER, PagerHelp); + if (IsHeader (extra)) + { + strfcpy (tmphelp, helpstr, sizeof (tmphelp)); + mutt_compile_help (buffer, sizeof (buffer), MENU_PAGER, +#ifdef USE_NNTP + (Context && (Context->magic == M_NNTP)) ? PagerNewsHelpExtra : +#endif + PagerHelpExtra); + snprintf (helpstr, sizeof (helpstr), "%s %s", tmphelp, buffer); + } + if (!InHelp) + { + strfcpy (tmphelp, helpstr, sizeof (tmphelp)); + mutt_make_help (buffer, sizeof (buffer), _("Help"), MENU_PAGER, OP_HELP); + snprintf (helpstr, sizeof (helpstr), "%s %s", tmphelp, buffer); + } + + while (ch != -1) + { + mutt_curs_set (0); + +#ifdef USE_IMAP + imap_keepalive (); +#endif + + if (redraw & REDRAW_FULL) + { + SETCOLOR (MT_COLOR_NORMAL); + /* clear() doesn't optimize screen redraws */ + move (0, 0); + clrtobot (); + + if (IsHeader (extra) && Context->vcount + 1 < PagerIndexLines) + indexlen = Context->vcount + 1; + else + indexlen = PagerIndexLines; + + indicator = indexlen / 3; + + if (option (OPTSTATUSONTOP)) + { + indexoffset = 0; + statusoffset = IsHeader (extra) ? indexlen : 0; + bodyoffset = statusoffset + 1; + helpoffset = LINES - 2; + bodylen = helpoffset - bodyoffset; + if (!option (OPTHELP)) + bodylen++; + } + else + { + helpoffset = 0; + indexoffset = 1; + statusoffset = LINES - 2; + if (!option (OPTHELP)) + indexoffset = 0; + bodyoffset = indexoffset + (IsHeader (extra) ? indexlen : 0); + bodylen = statusoffset - bodyoffset; + } + + if (option (OPTHELP)) + { + SETCOLOR (MT_COLOR_STATUS); + move (helpoffset, 0); + mutt_paddstr (COLS, helpstr); + SETCOLOR (MT_COLOR_NORMAL); + } + +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + if (Resize != NULL) + { + if ((SearchCompiled = Resize->SearchCompiled)) + { + REGCOMP + (&SearchRE, searchbuf, REG_NEWLINE | mutt_which_case (searchbuf)); + SearchFlag = M_SEARCH; + SearchBack = Resize->SearchBack; + } + lines = Resize->line; + redraw |= REDRAW_SIGWINCH; + + FREE (&Resize); + } +#endif + + if (IsHeader (extra) && PagerIndexLines) + { + if (index == NULL) + { + /* only allocate the space if/when we need the index. + Initialise the menu as per the main index */ + index = mutt_new_menu(); + index->menu = MENU_MAIN; + index->make_entry = index_make_entry; + index->color = index_color; + index->max = Context->vcount; + index->current = extra->hdr->virtual; + } + + SETCOLOR (MT_COLOR_NORMAL); + index->offset = indexoffset + (option (OPTSTATUSONTOP) ? 1 : 0); + + index->pagelen = indexlen - 1; + + /* some fudge to work out where abouts the indicator should go */ + if (index->current - indicator < 0) + index->top = 0; + else if (index->max - index->current < index->pagelen - indicator) + index->top = index->max - index->pagelen; + else + index->top = index->current - indicator; + + menu_redraw_index(index); + } + + redraw |= REDRAW_BODY | REDRAW_INDEX | REDRAW_STATUS; + mutt_show_error (); + } + + if (redraw & REDRAW_SIGWINCH) + { + i = -1; + j = -1; + while (display_line (fp, &last_pos, &lineInfo, ++i, &lastLine, &maxLine, + has_types | SearchFlag, &QuoteList, &q_level, &force_redraw, + &SearchRE) == 0) + if (!lineInfo[i].continuation && ++j == lines) + { + topline = i; + if (!SearchFlag) + break; + } + } + + if ((redraw & REDRAW_BODY) || topline != oldtopline) + { + do { + move (bodyoffset, 0); + curline = oldtopline = topline; + lines = 0; + force_redraw = 0; + + while (lines < bodylen && lineInfo[curline].offset <= sb.st_size - 1) + { + if (display_line (fp, &last_pos, &lineInfo, curline, &lastLine, + &maxLine, + (flags & M_DISPLAYFLAGS) | hideQuoted | SearchFlag, + &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) + lines++; + curline++; + } + last_offset = lineInfo[curline].offset; + } while (force_redraw); + + SETCOLOR (MT_COLOR_TILDE); + BKGDSET (MT_COLOR_TILDE); + while (lines < bodylen) + { + clrtoeol (); + if (option (OPTTILDE)) + addch ('~'); + addch ('\n'); + lines++; + } + /* We are going to update the pager status bar, so it isn't + * necessary to reset to normal color now. */ + + redraw |= REDRAW_STATUS; /* need to update the % seen */ + } + + if (redraw & REDRAW_STATUS) + { + /* print out the pager status bar */ + SETCOLOR (MT_COLOR_STATUS); + BKGDSET (MT_COLOR_STATUS); + CLEARLINE (statusoffset); + if (IsHeader (extra)) + { + _mutt_make_string (buffer, + COLS-9 < sizeof (buffer) ? COLS-9 : sizeof (buffer), + NONULL (PagerFmt), Context, extra->hdr, M_FORMAT_MAKEPRINT); + } + else if (IsMsgAttach (extra)) + { + _mutt_make_string (buffer, + COLS - 9 < sizeof (buffer) ? COLS - 9: sizeof (buffer), + NONULL (PagerFmt), Context, extra->bdy->hdr, M_FORMAT_MAKEPRINT); + } + mutt_paddstr (COLS-10, IsHeader (extra) || IsMsgAttach (extra) ? + buffer : banner); + addstr (" -- ("); + if (last_pos < sb.st_size - 1) + printw ("%d%%)", (int) (100 * last_offset / sb.st_size)); + else + addstr (topline == 0 ? "all)" : "end)"); + BKGDSET (MT_COLOR_NORMAL); + SETCOLOR (MT_COLOR_NORMAL); + } + + if ((redraw & REDRAW_INDEX) && index) + { + /* redraw the pager_index indicator, because the + * flags for this message might have changed. */ + menu_redraw_current (index); + + /* print out the index status bar */ + menu_status_line (buffer, sizeof (buffer), index, NONULL(Status)); + + move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0); + SETCOLOR (MT_COLOR_STATUS); + mutt_paddstr (COLS, buffer); + SETCOLOR (MT_COLOR_NORMAL); + } + + redraw = 0; + + move (statusoffset, COLS-1); + mutt_refresh (); + ch = km_dokey (MENU_PAGER); + if (ch != -1) + mutt_clear_error (); + mutt_curs_set (1); + + if (SigInt) + { + mutt_query_exit (); + continue; + } +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + else if (SigWinch) + { + mutt_resize_screen (); + + /* Store current position. */ + lines = -1; + for (i = 0; i <= topline; i++) + if (!lineInfo[i].continuation) + lines++; + + if (flags & M_PAGER_RETWINCH) + { + Resize = safe_malloc (sizeof (struct resize)); + + Resize->line = lines; + Resize->SearchCompiled = SearchCompiled; + Resize->SearchBack = SearchBack; + + ch = -1; + rc = OP_REFORMAT_WINCH; + } + else + { + for (i = 0; i < maxLine; i++) + { + lineInfo[i].offset = 0; + lineInfo[i].type = -1; + lineInfo[i].continuation = 0; + lineInfo[i].chunks = 0; + lineInfo[i].search_cnt = -1; + lineInfo[i].quote = NULL; + + safe_realloc (&(lineInfo[i].syntax), + sizeof (struct syntax_t)); + if (SearchCompiled && lineInfo[i].search) + FREE (&(lineInfo[i].search)); + } + + lastLine = 0; + topline = 0; + + redraw = REDRAW_FULL | REDRAW_SIGWINCH; + ch = 0; + } + + SigWinch = 0; + clearok(stdscr,TRUE);/*force complete redraw*/ + continue; + } +#endif + else if (ch == -1) + { + ch = 0; + continue; + } + + rc = ch; + + switch (ch) + { + case OP_EXIT: + rc = -1; + ch = -1; + break; + + case OP_NEXT_PAGE: + if (lineInfo[curline].offset < sb.st_size-1) + { + topline = upNLines (PagerContext, lineInfo, curline, hideQuoted); + } + else if (option (OPTPAGERSTOP)) + { + /* emulate "less -q" and don't go on to the next message. */ + mutt_error _("Bottom of message is shown."); + } + else + { + /* end of the current message, so display the next message. */ + rc = OP_MAIN_NEXT_UNDELETED; + ch = -1; + } + break; + + case OP_PREV_PAGE: + if (topline != 0) + { + topline = upNLines (bodylen-PagerContext, lineInfo, topline, hideQuoted); + } + else + mutt_error _("Top of message is shown."); + break; + + case OP_NEXT_LINE: + if (lineInfo[curline].offset < sb.st_size-1) + { + topline++; + if (hideQuoted) + { + while (lineInfo[topline].type == MT_COLOR_QUOTED && + topline < lastLine) + topline++; + } + } + else + mutt_error _("Bottom of message is shown."); + break; + + case OP_PREV_LINE: + if (topline) + topline = upNLines (1, lineInfo, topline, hideQuoted); + else + mutt_error _("Top of message is shown."); + break; + + case OP_PAGER_TOP: + if (topline) + topline = 0; + else + mutt_error _("Top of message is shown."); + break; + + case OP_HALF_UP: + if (topline) + topline = upNLines (bodylen/2, lineInfo, topline, hideQuoted); + else + mutt_error _("Top of message is shown."); + break; + + case OP_HALF_DOWN: + if (lineInfo[curline].offset < sb.st_size-1) + { + topline = upNLines (bodylen/2, lineInfo, curline, hideQuoted); + } + else if (option (OPTPAGERSTOP)) + { + /* emulate "less -q" and don't go on to the next message. */ + mutt_error _("Bottom of message is shown."); + } + else + { + /* end of the current message, so display the next message. */ + rc = OP_MAIN_NEXT_UNDELETED; + ch = -1; + } + break; + + case OP_SEARCH_NEXT: + case OP_SEARCH_OPPOSITE: + if (SearchCompiled) + { +search_next: + if ((!SearchBack && ch==OP_SEARCH_NEXT) || + (SearchBack &&ch==OP_SEARCH_OPPOSITE)) + { + /* searching forward */ + for (i = topline + 1; i < lastLine; i++) + { + if ((!hideQuoted || lineInfo[i].type != MT_COLOR_QUOTED) && + !lineInfo[i].continuation && lineInfo[i].search_cnt > 0) + break; + } + + if (i < lastLine) + topline = i; + else + mutt_error _("Not found."); + } + else + { + /* searching backward */ + for (i = topline - 1; i >= 0; i--) + { + if ((!hideQuoted || (has_types && + lineInfo[i].type != MT_COLOR_QUOTED)) && + !lineInfo[i].continuation && lineInfo[i].search_cnt > 0) + break; + } + + if (i >= 0) + topline = i; + else + mutt_error _("Not found."); + } + + if (lineInfo[topline].search_cnt > 0) + SearchFlag = M_SEARCH; + + break; + } + /* no previous search pattern, so fall through to search */ + + case OP_SEARCH: + case OP_SEARCH_REVERSE: + strfcpy (buffer, searchbuf, sizeof (buffer)); + if (mutt_get_field ((SearchBack ? _("Reverse search: ") : + _("Search: ")), buffer, sizeof (buffer), + M_CLEAR) != 0) + break; + + if (!strcmp (buffer, searchbuf)) + { + if (SearchCompiled) + { + /* do an implicit search-next */ + if (ch == OP_SEARCH) + ch = OP_SEARCH_NEXT; + else + ch = OP_SEARCH_OPPOSITE; + + goto search_next; + } + } + + if (!buffer[0]) + break; + + strfcpy (searchbuf, buffer, sizeof (searchbuf)); + + /* leave SearchBack alone if ch == OP_SEARCH_NEXT */ + if (ch == OP_SEARCH) + SearchBack = 0; + else if (ch == OP_SEARCH_REVERSE) + SearchBack = 1; + + if (SearchCompiled) + { + regfree (&SearchRE); + for (i = 0; i < lastLine; i++) + { + if (lineInfo[i].search) + FREE (&(lineInfo[i].search)); + lineInfo[i].search_cnt = -1; + } + } + + if ((err = REGCOMP (&SearchRE, searchbuf, REG_NEWLINE | mutt_which_case (searchbuf))) != 0) + { + regerror (err, &SearchRE, buffer, sizeof (buffer)); + mutt_error ("%s", buffer); + regfree (&SearchRE); + for (i = 0; i < maxLine ; i++) + { + /* cleanup */ + if (lineInfo[i].search) + FREE (&(lineInfo[i].search)); + lineInfo[i].search_cnt = -1; + } + SearchFlag = 0; + SearchCompiled = 0; + } + else + { + SearchCompiled = 1; + /* update the search pointers */ + i = 0; + while (display_line (fp, &last_pos, &lineInfo, i, &lastLine, + &maxLine, M_SEARCH | (flags & M_PAGER_NSKIP), + &QuoteList, &q_level, + &force_redraw, &SearchRE) == 0) + i++; + + if (!SearchBack) + { + /* searching forward */ + for (i = topline; i < lastLine; i++) + { + if ((!hideQuoted || lineInfo[i].type != MT_COLOR_QUOTED) && + !lineInfo[i].continuation && lineInfo[i].search_cnt > 0) + break; + } + + if (i < lastLine) topline = i; + } + else + { + /* searching backward */ + for (i = topline; i >= 0; i--) + { + if ((!hideQuoted || lineInfo[i].type != MT_COLOR_QUOTED) && + !lineInfo[i].continuation && lineInfo[i].search_cnt > 0) + break; + } + + if (i >= 0) topline = i; + } + + if (lineInfo[topline].search_cnt == 0) + { + SearchFlag = 0; + mutt_error _("Not found."); + } + else + SearchFlag = M_SEARCH; + } + redraw = REDRAW_BODY; + break; + + case OP_SEARCH_TOGGLE: + if (SearchCompiled) + { + SearchFlag ^= M_SEARCH; + redraw = REDRAW_BODY; + } + break; + + case OP_HELP: + /* don't let the user enter the help-menu from the help screen! */ + if (! InHelp) + { + InHelp = 1; + mutt_help (MENU_PAGER); + redraw = REDRAW_FULL; + InHelp = 0; + } + else + mutt_error _("Help is currently being shown."); + break; + + case OP_PAGER_HIDE_QUOTED: + if (has_types) + { + hideQuoted ^= M_HIDE; + if (hideQuoted && lineInfo[topline].type == MT_COLOR_QUOTED) + topline = upNLines (1, lineInfo, topline, hideQuoted); + else + redraw = REDRAW_BODY; + } + break; + + case OP_PAGER_SKIP_QUOTED: + if (has_types) + { + int dretval = 0; + int new_topline = topline; + + while ((new_topline < lastLine || + (0 == (dretval = display_line (fp, &last_pos, &lineInfo, + new_topline, &lastLine, &maxLine, M_TYPES, + &QuoteList, &q_level, &force_redraw, &SearchRE)))) + && lineInfo[new_topline].type != MT_COLOR_QUOTED) + new_topline++; + + if (dretval < 0) + { + mutt_error _("No more quoted text."); + break; + } + + while ((new_topline < lastLine || + (0 == (dretval = display_line (fp, &last_pos, &lineInfo, + new_topline, &lastLine, &maxLine, M_TYPES, + &QuoteList, &q_level, &force_redraw, &SearchRE)))) + && lineInfo[new_topline].type == MT_COLOR_QUOTED) + new_topline++; + + if (dretval < 0) + { + mutt_error _("No more unquoted text after quoted text."); + break; + } + topline = new_topline; + } + break; + + case OP_PAGER_BOTTOM: /* move to the end of the file */ + if (lineInfo[curline].offset < sb.st_size - 1) + { + i = curline; + /* make sure the types are defined to the end of file */ + while (display_line (fp, &last_pos, &lineInfo, i, &lastLine, + &maxLine, has_types, + &QuoteList, &q_level, &force_redraw, + &SearchRE) == 0) + i++; + topline = upNLines (bodylen, lineInfo, lastLine, hideQuoted); + } + else + mutt_error _("Bottom of message is shown."); + break; + + case OP_REDRAW: + clearok (stdscr, TRUE); + redraw = REDRAW_FULL; + break; + + case OP_NULL: + km_error_key (MENU_PAGER); + break; + + /* -------------------------------------------------------------------- + * The following are operations on the current message rather than + * adjusting the view of the message. + */ + + case OP_BOUNCE_MESSAGE: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)) + CHECK_ATTACH; + if (IsMsgAttach (extra)) + mutt_attach_bounce (extra->fp, extra->hdr, + extra->idx, extra->idxlen, + extra->bdy); + else + ci_bounce_message (extra->hdr, &redraw); + break; + + case OP_RESEND: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)) + CHECK_ATTACH; + if (IsMsgAttach (extra)) + mutt_attach_resend (extra->fp, extra->hdr, + extra->idx, extra->idxlen, + extra->bdy); + else + mutt_resend_message (NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_CREATE_ALIAS: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + if (IsMsgAttach (extra)) + mutt_create_alias (extra->bdy->hdr->env, NULL); + else + mutt_create_alias (extra->hdr->env, NULL); + MAYBE_REDRAW (redraw); + break; + + case OP_PURGE_MESSAGE: + case OP_DELETE: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + mutt_set_flag (Context, extra->hdr, M_DELETE, 1); + mutt_set_flag (Context, extra->hdr, M_PURGED, + ch != OP_PURGE_MESSAGE ? 0 : 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, extra->hdr, M_TAG, 0); + redraw = REDRAW_STATUS | REDRAW_INDEX; + if (option (OPTRESOLVE)) + { + ch = -1; + rc = OP_MAIN_NEXT_UNDELETED; + } + break; + + case OP_DELETE_THREAD: + case OP_DELETE_SUBTHREAD: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + r = mutt_thread_set_flag (extra->hdr, M_DELETE, 1, + ch == OP_DELETE_THREAD ? 0 : 1); + + if (r != -1) + { + if (option (OPTDELETEUNTAG)) + mutt_thread_set_flag (extra->hdr, M_TAG, 0, + ch == OP_DELETE_THREAD ? 0 : 1); + if (option (OPTRESOLVE)) + { + rc = OP_MAIN_NEXT_UNDELETED; + ch = -1; + } + + if (!option (OPTRESOLVE) && PagerIndexLines) + redraw = REDRAW_FULL; + else + redraw = REDRAW_STATUS | REDRAW_INDEX; + } + break; + + case OP_DISPLAY_ADDRESS: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + if (IsMsgAttach (extra)) + mutt_display_address (extra->bdy->hdr->env); + else + mutt_display_address (extra->hdr->env); + break; + + case OP_ENTER_COMMAND: + old_smart_wrap = option (OPTWRAP); + old_markers = option (OPTMARKERS); + old_PagerIndexLines = PagerIndexLines; + + CurrentMenu = MENU_PAGER; + mutt_enter_command (); + + if (option (OPTNEEDRESORT)) + { + unset_option (OPTNEEDRESORT); + CHECK_MODE(IsHeader (extra)); + set_option (OPTNEEDRESORT); + } + + if (old_PagerIndexLines != PagerIndexLines) + { + if (index) + mutt_menuDestroy (&index); + index = NULL; + } + + if (option (OPTWRAP) != old_smart_wrap || + option (OPTMARKERS) != old_markers) + { + if (flags & M_PAGER_RETWINCH) + { + ch = -1; + rc = OP_REFORMAT_WINCH; + continue; + } + + /* count the real lines above */ + j = 0; + for (i = 0; i <= topline; i++) + { + if (!lineInfo[i].continuation) + j++; + } + + /* we need to restart the whole thing */ + for (i = 0; i < maxLine; i++) + { + lineInfo[i].offset = 0; + lineInfo[i].type = -1; + lineInfo[i].continuation = 0; + lineInfo[i].chunks = 0; + lineInfo[i].search_cnt = -1; + lineInfo[i].quote = NULL; + + safe_realloc (&(lineInfo[i].syntax), sizeof (struct syntax_t)); + if (SearchCompiled && lineInfo[i].search) + FREE (&(lineInfo[i].search)); + } + + if (SearchCompiled) + { + regfree (&SearchRE); + SearchCompiled = 0; + } + SearchFlag = 0; + + /* try to keep the old position */ + topline = 0; + lastLine = 0; + while (j > 0 && display_line (fp, &last_pos, &lineInfo, topline, + &lastLine, &maxLine, + (has_types ? M_TYPES : 0), + &QuoteList, &q_level, &force_redraw, + &SearchRE) == 0) + { + if (! lineInfo[topline].continuation) + j--; + if (j > 0) + topline++; + } + + ch = 0; + } + + if (option (OPTFORCEREDRAWPAGER)) + redraw = REDRAW_FULL; + unset_option (OPTFORCEREDRAWINDEX); + unset_option (OPTFORCEREDRAWPAGER); + break; + + case OP_FLAG_MESSAGE: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + +#ifdef USE_POP + if (Context->magic == M_POP) + { + mutt_flushinp (); + mutt_error _("Can't change 'important' flag on POP server."); + break; + } +#endif + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_WRITE); +#endif + +#ifdef USE_NNTP + if (Context->magic == M_NNTP) + { + mutt_flushinp (); + mutt_error _("Can't change 'important' flag on NNTP server."); + break; + } +#endif + + mutt_set_flag (Context, extra->hdr, M_FLAG, !extra->hdr->flagged); + redraw = REDRAW_STATUS | REDRAW_INDEX; + if (option (OPTRESOLVE)) + { + ch = -1; + rc = OP_MAIN_NEXT_UNDELETED; + } + break; + + case OP_PIPE: + CHECK_MODE(IsHeader (extra) || IsAttach (extra)); + if (IsAttach (extra)) + mutt_pipe_attachment_list (extra->fp, 0, extra->bdy, 0); + else + mutt_pipe_message (extra->hdr); + MAYBE_REDRAW (redraw); + break; + + case OP_PRINT: + CHECK_MODE(IsHeader (extra) || IsAttach (extra)); + if (IsAttach (extra)) + mutt_print_attachment_list (extra->fp, 0, extra->bdy); + else + mutt_print_message (extra->hdr); + break; + + case OP_MAIL: + CHECK_MODE(IsHeader (extra) && !IsAttach (extra)); + CHECK_ATTACH; + ci_send_message (0, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + +#ifdef USE_NNTP + case OP_POST: + CHECK_MODE(IsHeader (extra) && !IsAttach (extra)); + CHECK_ATTACH; + if (extra->ctx && extra->ctx->magic == M_NNTP && + !((NNTP_DATA *)extra->ctx->data)->allowed && + query_quadoption (OPT_TOMODERATED,_("Posting to this group not allowed, may be moderated. Continue?")) != M_YES) + break; + ci_send_message (SENDNEWS, NULL, NULL, extra->ctx, NULL); + redraw = REDRAW_FULL; + break; + + case OP_FORWARD_TO_GROUP: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + CHECK_ATTACH; + if (extra->ctx && extra->ctx->magic == M_NNTP && + !((NNTP_DATA *)extra->ctx->data)->allowed && + query_quadoption (OPT_TOMODERATED,_("Posting to this group not allowed, may be moderated. Continue?")) != M_YES) + break; + if (IsMsgAttach (extra)) + mutt_attach_forward (extra->fp, extra->hdr, extra->idx, + extra->idxlen, extra->bdy, SENDNEWS); + else + ci_send_message (SENDNEWS|SENDFORWARD, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_FOLLOWUP: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + CHECK_ATTACH; + + if (IsMsgAttach (extra)) + followup_to = extra->bdy->hdr->env->followup_to; + else + followup_to = extra->hdr->env->followup_to; + + if (!followup_to || mutt_strcasecmp (followup_to, "poster") || + query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES) + { + if (extra->ctx && extra->ctx->magic == M_NNTP && + !((NNTP_DATA *)extra->ctx->data)->allowed && + query_quadoption (OPT_TOMODERATED,_("Posting to this group not allowed, may be moderated. Continue?")) != M_YES) + break; + if (IsMsgAttach (extra)) + mutt_attach_reply (extra->fp, extra->hdr, extra->idx, + extra->idxlen, extra->bdy, SENDNEWS|SENDREPLY); + else + ci_send_message (SENDNEWS|SENDREPLY, NULL, NULL, + extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + } +#endif + + case OP_REPLY: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + CHECK_ATTACH; + if (IsMsgAttach (extra)) + mutt_attach_reply (extra->fp, extra->hdr, extra->idx, + extra->idxlen, extra->bdy, + SENDREPLY); + else + ci_send_message (SENDREPLY, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_RECALL_MESSAGE: + CHECK_MODE(IsHeader (extra)); + CHECK_ATTACH; + ci_send_message (SENDPOSTPONED, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_GROUP_REPLY: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + CHECK_ATTACH; + if (IsMsgAttach (extra)) + mutt_attach_reply (extra->fp, extra->hdr, extra->idx, + extra->idxlen, extra->bdy, SENDREPLY|SENDGROUPREPLY); + else + ci_send_message (SENDREPLY | SENDGROUPREPLY, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_LIST_REPLY: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + CHECK_ATTACH; + if (IsMsgAttach (extra)) + mutt_attach_reply (extra->fp, extra->hdr, extra->idx, + extra->idxlen, extra->bdy, SENDREPLY|SENDLISTREPLY); + else + ci_send_message (SENDREPLY | SENDLISTREPLY, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_FORWARD_MESSAGE: + CHECK_MODE(IsHeader (extra) || IsMsgAttach (extra)); + CHECK_ATTACH; + if (IsMsgAttach (extra)) + mutt_attach_forward (extra->fp, extra->hdr, extra->idx, + extra->idxlen, extra->bdy, 0); + else + ci_send_message (SENDFORWARD, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + case OP_DECRYPT_SAVE: + if (!WithCrypto) + { + ch = -1; + break; + } + /* fall through */ + case OP_SAVE: + if (IsAttach (extra)) + { + mutt_save_attachment_list (extra->fp, 0, extra->bdy, extra->hdr, NULL); + break; + } + /* fall through */ + case OP_COPY_MESSAGE: + case OP_DECODE_SAVE: + case OP_DECODE_COPY: + case OP_DECRYPT_COPY: + if (!WithCrypto && ch == OP_DECRYPT_COPY) + { + ch = -1; + break; + } + CHECK_MODE(IsHeader (extra)); + if (mutt_save_message (extra->hdr, + (ch == OP_DECRYPT_SAVE) || + (ch == OP_SAVE) || (ch == OP_DECODE_SAVE), + (ch == OP_DECODE_SAVE) || (ch == OP_DECODE_COPY), + (ch == OP_DECRYPT_SAVE) || (ch == OP_DECRYPT_COPY) || + 0, + &redraw) == 0 && (ch == OP_SAVE || ch == OP_DECODE_SAVE + || ch == OP_DECRYPT_SAVE + )) + { + if (option (OPTRESOLVE)) + { + ch = -1; + rc = OP_MAIN_NEXT_UNDELETED; + } + else + redraw |= REDRAW_STATUS | REDRAW_INDEX; + } + MAYBE_REDRAW (redraw); + break; + + case OP_SHELL_ESCAPE: + mutt_shell_escape (); + MAYBE_REDRAW (redraw); + break; + + case OP_TAG: + CHECK_MODE(IsHeader (extra)); + mutt_set_flag (Context, extra->hdr, M_TAG, !extra->hdr->tagged); + redraw = REDRAW_STATUS | REDRAW_INDEX; + if (option (OPTRESOLVE)) + { + ch = -1; + rc = OP_NEXT_ENTRY; + } + break; + + case OP_TOGGLE_NEW: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_SEEN); +#endif + + if (extra->hdr->read || extra->hdr->old) + mutt_set_flag (Context, extra->hdr, M_NEW, 1); + else if (!first) + mutt_set_flag (Context, extra->hdr, M_READ, 1); + first = 0; + Context->msgnotreadyet = -1; + redraw = REDRAW_STATUS | REDRAW_INDEX; + if (option (OPTRESOLVE)) + { + ch = -1; + rc = OP_MAIN_NEXT_UNDELETED; + } + break; + + case OP_UNDELETE: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + mutt_set_flag (Context, extra->hdr, M_DELETE, 0); + mutt_set_flag (Context, extra->hdr, M_PURGED, 0); + redraw = REDRAW_STATUS | REDRAW_INDEX; + if (option (OPTRESOLVE)) + { + ch = -1; + rc = OP_NEXT_ENTRY; + } + break; + + case OP_UNDELETE_THREAD: + case OP_UNDELETE_SUBTHREAD: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + +#ifdef USE_IMAP +CHECK_IMAP_ACL(IMAP_ACL_DELETE); +#endif + + r = mutt_thread_set_flag (extra->hdr, M_DELETE, 0, + ch == OP_UNDELETE_THREAD ? 0 : 1) + + mutt_thread_set_flag (extra->hdr, M_PURGED, 0, + ch == OP_UNDELETE_THREAD ? 0 : 1); + + if (r > -1) + { + if (option (OPTRESOLVE)) + { + rc = (ch == OP_DELETE_THREAD) ? + OP_MAIN_NEXT_THREAD : OP_MAIN_NEXT_SUBTHREAD; + ch = -1; + } + + if (!option (OPTRESOLVE) && PagerIndexLines) + redraw = REDRAW_FULL; + else + redraw = REDRAW_STATUS | REDRAW_INDEX; + } + break; + + case OP_VERSION: + mutt_version (); + break; + + case OP_BUFFY_LIST: + mutt_buffy_list (); + break; + + case OP_VIEW_ATTACHMENTS: + if (flags & M_PAGER_ATTACHMENT) + { + ch = -1; + rc = OP_ATTACH_COLLAPSE; + break; + } + CHECK_MODE(IsHeader (extra)); + mutt_view_attachments (extra->hdr); + if (extra->hdr->attach_del) + Context->changed = 1; + redraw = REDRAW_FULL; + break; + + + case OP_MAIL_KEY: + if (!(WithCrypto & APPLICATION_PGP)) + { + ch = -1; + break; + } + CHECK_MODE(IsHeader(extra)); + CHECK_ATTACH; + ci_send_message (SENDKEY, NULL, NULL, extra->ctx, extra->hdr); + redraw = REDRAW_FULL; + break; + + + case OP_FORGET_PASSPHRASE: + crypt_forget_passphrase (); + break; + + case OP_EXTRACT_KEYS: + if (!WithCrypto) + { + ch = -1; + break; + } + CHECK_MODE(IsHeader(extra)); + crypt_extract_keys_from_messages(extra->hdr); + redraw = REDRAW_FULL; + break; + + default: + ch = -1; + break; + } + } + + fclose (fp); + if (IsHeader (extra)) + Context->msgnotreadyet = -1; + + cleanup_quote (&QuoteList); + + for (i = 0; i < maxLine ; i++) + { + FREE (&(lineInfo[i].syntax)); + if (SearchCompiled && lineInfo[i].search) + FREE (&(lineInfo[i].search)); + } + if (SearchCompiled) + { + regfree (&SearchRE); + SearchCompiled = 0; + } + FREE (&lineInfo); + if (index) + mutt_menuDestroy(&index); + return (rc != -1 ? rc : 0); +} diff --git a/pager.h b/pager.h new file mode 100644 index 0000000..762e0d3 --- /dev/null +++ b/pager.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* dynamic internal flags */ +#define M_SHOWFLAT (1<<0) +#define M_SHOWCOLOR (1<<1) +#define M_HIDE (1<<2) +#define M_SEARCH (1<<3) +#define M_TYPES (1<<4) +#define M_SHOW (M_SHOWCOLOR | M_SHOWFLAT) + +/* exported flags for mutt_(do_)?pager */ +#define M_PAGER_NSKIP (1<<5) /* preserve whitespace with smartwrap */ +#define M_PAGER_MARKER (1<<6) /* use markers if option is set */ +#define M_PAGER_RETWINCH (1<<7) /* need reformatting on SIGWINCH */ +#define M_PAGER_MESSAGE (M_SHOWCOLOR | M_PAGER_MARKER) +#define M_PAGER_ATTACHMENT (1<<8) + +#define M_DISPLAYFLAGS (M_SHOW | M_PAGER_NSKIP | M_PAGER_MARKER) + +typedef struct +{ + CONTEXT *ctx; /* current mailbox */ + HEADER *hdr; /* current message */ + BODY *bdy; /* current attachment */ + FILE *fp; /* source stream */ + ATTACHPTR **idx; /* attachment information */ + short idxlen; +} pager_t; + +int mutt_do_pager (const char *, const char *, int, pager_t *); +int mutt_pager (const char *, const char *, int, pager_t *); diff --git a/parse.c b/parse.c new file mode 100644 index 0000000..84adc1a --- /dev/null +++ b/parse.c @@ -0,0 +1,1430 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_regex.h" +#include "mailbox.h" +#include "mime.h" +#include "rfc2047.h" +#include "rfc2231.h" +#include "mutt_crypt.h" + +#include <string.h> +#include <ctype.h> +#include <sys/stat.h> +#include <stdlib.h> + +/* Reads an arbitrarily long header field, and looks ahead for continuation + * lines. ``line'' must point to a dynamically allocated string; it is + * increased if more space is required to fit the whole line. + */ +static char *read_rfc822_line (FILE *f, char *line, size_t *linelen) +{ + char *buf = line; + char ch; + size_t offset = 0; + + FOREVER + { + if (fgets (buf, *linelen - offset, f) == NULL || /* end of file or */ + (ISSPACE (*line) && !offset)) /* end of headers */ + { + *line = 0; + return (line); + } + + buf += strlen (buf) - 1; + if (*buf == '\n') + { + /* we did get a full line. remove trailing space */ + while (ISSPACE (*buf)) + *buf-- = 0; /* we cannot come beyond line's beginning because + * it begins with a non-space */ + + /* check to see if the next line is a continuation line */ + if ((ch = fgetc (f)) != ' ' && ch != '\t') + { + ungetc (ch, f); + return (line); /* next line is a separate header field or EOH */ + } + + /* eat tabs and spaces from the beginning of the continuation line */ + while ((ch = fgetc (f)) == ' ' || ch == '\t') + ; + ungetc (ch, f); + *++buf = ' '; /* string is still terminated because we removed + at least one whitespace char above */ + } + + buf++; + offset = buf - line; + if (*linelen < offset + STRING) + { + /* grow the buffer */ + *linelen += STRING; + safe_realloc (&line, *linelen); + buf = line + offset; + } + } + /* not reached */ +} + +LIST *mutt_parse_references (char *s, int in_reply_to) +{ + LIST *t, *lst = NULL; + int m, n = 0; + char *o = NULL, *new, *at; + + while ((s = strtok (s, " \t;")) != NULL) + { + /* + * some mail clients add other garbage besides message-ids, so do a quick + * check to make sure this looks like a valid message-id + * some idiotic clients also break their message-ids between lines, deal + * with that too (give up if it's more than two lines, though) + */ + t = NULL; + new = NULL; + + if (*s == '<') + { + n = strlen (s); + if (s[n-1] != '>') + { + o = s; + s = NULL; + continue; + } + + new = safe_strdup (s); + } + else if (o) + { + m = strlen (s); + if (s[m - 1] == '>') + { + new = safe_malloc (sizeof (char) * (n + m + 1)); + strcpy (new, o); /* __STRCPY_CHECKED__ */ + strcpy (new + n, s); /* __STRCPY_CHECKED__ */ + } + } + if (new) + { + /* make sure that this really does look like a message-id. + * it should have exactly one @, and if we're looking at + * an in-reply-to header, make sure that the part before + * the @ has more than eight characters or it's probably + * an email address + */ + if (!(at = strchr (new, '@')) || strchr (at + 1, '@') + || (in_reply_to && at - new <= 8)) + FREE (&new); + else + { + t = (LIST *) safe_malloc (sizeof (LIST)); + t->data = new; + t->next = lst; + lst = t; + } + } + o = NULL; + s = NULL; + } + + return (lst); +} + +int mutt_check_encoding (const char *c) +{ + if (ascii_strncasecmp ("7bit", c, sizeof ("7bit")-1) == 0) + return (ENC7BIT); + else if (ascii_strncasecmp ("8bit", c, sizeof ("8bit")-1) == 0) + return (ENC8BIT); + else if (ascii_strncasecmp ("binary", c, sizeof ("binary")-1) == 0) + return (ENCBINARY); + else if (ascii_strncasecmp ("quoted-printable", c, sizeof ("quoted-printable")-1) == 0) + return (ENCQUOTEDPRINTABLE); + else if (ascii_strncasecmp ("base64", c, sizeof("base64")-1) == 0) + return (ENCBASE64); + else if (ascii_strncasecmp ("x-uuencode", c, sizeof("x-uuencode")-1) == 0) + return (ENCUUENCODED); +#ifdef SUN_ATTACHMENT + else if (ascii_strncasecmp ("uuencode", c, sizeof("uuencode")-1) == 0) + return (ENCUUENCODED); +#endif + else + return (ENCOTHER); +} + +static PARAMETER *parse_parameters (const char *s) +{ + PARAMETER *head = 0, *cur = 0, *new; + char buffer[LONG_STRING]; + const char *p; + size_t i; + + dprint (2, (debugfile, "parse_parameters: `%s'\n", s)); + + while (*s) + { + if ((p = strpbrk (s, "=;")) == NULL) + { + dprint(1, (debugfile, "parse_parameters: malformed parameter: %s\n", s)); + goto bail; + } + + /* if we hit a ; now the parameter has no value, just skip it */ + if (*p != ';') + { + i = p - s; + + new = mutt_new_parameter (); + + new->attribute = safe_malloc (i + 1); + memcpy (new->attribute, s, i); + new->attribute[i] = 0; + + /* remove whitespace from the end of the attribute name */ + while (ISSPACE (new->attribute[--i])) + new->attribute[i] = 0; + + s = p + 1; /* skip over the = */ + SKIPWS (s); + + if (*s == '"') + { + s++; + for (i=0; *s && *s != '"' && i < sizeof (buffer) - 1; i++, s++) + { + if (*s == '\\') + { + /* Quote the next character */ + buffer[i] = s[1]; + if (!*++s) + break; + } + else + buffer[i] = *s; + } + buffer[i] = 0; + if (*s) + s++; /* skip over the " */ + } + else + { + for (i=0; *s && *s != ' ' && *s != ';' && i < sizeof (buffer) - 1; i++, s++) + buffer[i] = *s; + buffer[i] = 0; + } + + new->value = safe_strdup (buffer); + + dprint (2, (debugfile, "parse_parameter: `%s' = `%s'\n", + new->attribute ? new->attribute : "", + new->value ? new->value : "")); + + /* Add this parameter to the list */ + if (head) + { + cur->next = new; + cur = cur->next; + } + else + head = cur = new; + } + else + { + dprint (1, (debugfile, "parse_parameters(): parameter with no value: %s\n", s)); + s = p; + } + + /* Find the next parameter */ + if (*s != ';' && (s = strchr (s, ';')) == NULL) + break; /* no more parameters */ + + do + { + s++; + + /* Move past any leading whitespace */ + SKIPWS (s); + } + while (*s == ';'); /* skip empty parameters */ + } + + bail: + + rfc2231_decode_parameters (&head); + return (head); +} + +int mutt_check_mime_type (const char *s) +{ + if (ascii_strcasecmp ("text", s) == 0) + return TYPETEXT; + else if (ascii_strcasecmp ("multipart", s) == 0) + return TYPEMULTIPART; +#ifdef SUN_ATTACHMENT + else if (ascii_strcasecmp ("x-sun-attachment", s) == 0) + return TYPEMULTIPART; +#endif + else if (ascii_strcasecmp ("application", s) == 0) + return TYPEAPPLICATION; + else if (ascii_strcasecmp ("message", s) == 0) + return TYPEMESSAGE; + else if (ascii_strcasecmp ("image", s) == 0) + return TYPEIMAGE; + else if (ascii_strcasecmp ("audio", s) == 0) + return TYPEAUDIO; + else if (ascii_strcasecmp ("video", s) == 0) + return TYPEVIDEO; + else if (ascii_strcasecmp ("model", s) == 0) + return TYPEMODEL; + else + return TYPEOTHER; +} + +void mutt_parse_content_type (char *s, BODY *ct) +{ + char *pc; + char *subtype; + + FREE (&ct->subtype); + mutt_free_parameter(&ct->parameter); + + /* First extract any existing parameters */ + if ((pc = strchr(s, ';')) != NULL) + { + *pc++ = 0; + while (*pc && ISSPACE (*pc)) + pc++; + ct->parameter = parse_parameters(pc); + + /* Some pre-RFC1521 gateways still use the "name=filename" convention, + * but if a filename has already been set in the content-disposition, + * let that take precedence, and don't set it here */ + if ((pc = mutt_get_parameter( "name", ct->parameter)) != 0 && !ct->filename) + ct->filename = safe_strdup(pc); + +#ifdef SUN_ATTACHMENT + /* this is deep and utter perversion */ + if ((pc = mutt_get_parameter ("conversions", ct->parameter)) != 0) + ct->encoding = mutt_check_encoding (pc); +#endif + + } + + /* Now get the subtype */ + if ((subtype = strchr(s, '/'))) + { + *subtype++ = '\0'; + for(pc = subtype; *pc && !ISSPACE(*pc) && *pc != ';'; pc++) + ; + *pc = '\0'; + ct->subtype = safe_strdup (subtype); + } + + /* Finally, get the major type */ + ct->type = mutt_check_mime_type (s); + +#ifdef SUN_ATTACHMENT + if (ascii_strcasecmp ("x-sun-attachment", s) == 0) + ct->subtype = safe_strdup ("x-sun-attachment"); +#endif + + if (ct->type == TYPEOTHER) + { + ct->xtype = safe_strdup (s); + } + + if (ct->subtype == NULL) + { + /* Some older non-MIME mailers (i.e., mailtool, elm) have a content-type + * field, so we can attempt to convert the type to BODY here. + */ + if (ct->type == TYPETEXT) + ct->subtype = safe_strdup ("plain"); + else if (ct->type == TYPEAUDIO) + ct->subtype = safe_strdup ("basic"); + else if (ct->type == TYPEMESSAGE) + ct->subtype = safe_strdup ("rfc822"); + else if (ct->type == TYPEOTHER) + { + char buffer[SHORT_STRING]; + + ct->type = TYPEAPPLICATION; + snprintf (buffer, sizeof (buffer), "x-%s", s); + ct->subtype = safe_strdup (buffer); + } + else + ct->subtype = safe_strdup ("x-unknown"); + } + + /* Default character set for text types. */ + if (ct->type == TYPETEXT) + { + if (!(pc = mutt_get_parameter ("charset", ct->parameter))) + mutt_set_parameter ("charset", "us-ascii", &ct->parameter); + } + +} + +static void parse_content_disposition (char *s, BODY *ct) +{ + PARAMETER *parms; + + if (!ascii_strncasecmp ("inline", s, 6)) + ct->disposition = DISPINLINE; + else if (!ascii_strncasecmp ("form-data", s, 9)) + ct->disposition = DISPFORMDATA; + else + ct->disposition = DISPATTACH; + + /* Check to see if a default filename was given */ + if ((s = strchr (s, ';')) != NULL) + { + s++; + SKIPWS (s); + if ((s = mutt_get_parameter ("filename", (parms = parse_parameters (s)))) != 0) + mutt_str_replace (&ct->filename, s); + if ((s = mutt_get_parameter ("name", parms)) != 0) + ct->form_name = safe_strdup (s); + mutt_free_parameter (&parms); + } +} + +/* args: + * fp stream to read from + * + * digest 1 if reading subparts of a multipart/digest, 0 + * otherwise + */ + +BODY *mutt_read_mime_header (FILE *fp, int digest) +{ + BODY *p = mutt_new_body(); + char *c; + char *line = safe_malloc (LONG_STRING); + size_t linelen = LONG_STRING; + + p->hdr_offset = ftell(fp); + + p->encoding = ENC7BIT; /* default from RFC1521 */ + p->type = digest ? TYPEMESSAGE : TYPETEXT; + p->disposition = DISPINLINE; + + while (*(line = read_rfc822_line (fp, line, &linelen)) != 0) + { + /* Find the value of the current header */ + if ((c = strchr (line, ':'))) + { + *c = 0; + c++; + SKIPWS (c); + if (!*c) + { + dprint (1, (debugfile, "mutt_read_mime_header(): skipping empty header field: %s\n", line)); + continue; + } + } + else + { + dprint (1, (debugfile, "read_mime_header: bogus MIME header: %s\n", line)); + break; + } + + if (!ascii_strncasecmp ("content-", line, 8)) + { + if (!ascii_strcasecmp ("type", line + 8)) + mutt_parse_content_type (c, p); + else if (!ascii_strcasecmp ("transfer-encoding", line + 8)) + p->encoding = mutt_check_encoding (c); + else if (!ascii_strcasecmp ("disposition", line + 8)) + parse_content_disposition (c, p); + else if (!ascii_strcasecmp ("description", line + 8)) + { + mutt_str_replace (&p->description, c); + rfc2047_decode (&p->description); + } + } +#ifdef SUN_ATTACHMENT + else if (!ascii_strncasecmp ("x-sun-", line, 6)) + { + if (!ascii_strcasecmp ("data-type", line + 6)) + mutt_parse_content_type (c, p); + else if (!ascii_strcasecmp ("encoding-info", line + 6)) + p->encoding = mutt_check_encoding (c); + else if (!ascii_strcasecmp ("content-lines", line + 6)) + mutt_set_parameter ("content-lines", c, &(p->parameter)); + else if (!ascii_strcasecmp ("data-description", line + 6)) + { + mutt_str_replace (&p->description, c); + rfc2047_decode (&p->description); + } + } +#endif + } + p->offset = ftell (fp); /* Mark the start of the real data */ + if (p->type == TYPETEXT && !p->subtype) + p->subtype = safe_strdup ("plain"); + else if (p->type == TYPEMESSAGE && !p->subtype) + p->subtype = safe_strdup ("rfc822"); + + FREE (&line); + + return (p); +} + +void mutt_parse_part (FILE *fp, BODY *b) +{ + char *bound = 0; + + switch (b->type) + { + case TYPEMULTIPART: +#ifdef SUN_ATTACHMENT + if ( !ascii_strcasecmp (b->subtype, "x-sun-attachment") ) + bound = "--------"; + else +#endif + bound = mutt_get_parameter ("boundary", b->parameter); + + fseek (fp, b->offset, SEEK_SET); + b->parts = mutt_parse_multipart (fp, bound, + b->offset + b->length, + ascii_strcasecmp ("digest", b->subtype) == 0); + break; + + case TYPEMESSAGE: + if (b->subtype) + { + fseek (fp, b->offset, SEEK_SET); + if (mutt_is_message_type(b->type, b->subtype)) + b->parts = mutt_parse_messageRFC822 (fp, b); + else if (ascii_strcasecmp (b->subtype, "external-body") == 0) + b->parts = mutt_read_mime_header (fp, 0); + else + return; + } + break; + + default: + return; + } + + /* try to recover from parsing error */ + if (!b->parts) + { + b->type = TYPETEXT; + mutt_str_replace (&b->subtype, "plain"); + } +} + +/* parse a MESSAGE/RFC822 body + * + * args: + * fp stream to read from + * + * parent structure which contains info about the message/rfc822 + * body part + * + * NOTE: this assumes that `parent->length' has been set! + */ + +BODY *mutt_parse_messageRFC822 (FILE *fp, BODY *parent) +{ + BODY *msg; + + parent->hdr = mutt_new_header (); + parent->hdr->offset = ftell (fp); + parent->hdr->env = mutt_read_rfc822_header (fp, parent->hdr, 0, 0); + msg = parent->hdr->content; + + /* ignore the length given in the content-length since it could be wrong + and we already have the info to calculate the correct length */ + /* if (msg->length == -1) */ + msg->length = parent->length - (msg->offset - parent->offset); + + /* if body of this message is empty, we can end up with a negative length */ + if (msg->length < 0) + msg->length = 0; + + mutt_parse_part(fp, msg); + return (msg); +} + +/* parse a multipart structure + * + * args: + * fp stream to read from + * + * boundary body separator + * + * end_off length of the multipart body (used when the final + * boundary is missing to avoid reading too far) + * + * digest 1 if reading a multipart/digest, 0 otherwise + */ + +BODY *mutt_parse_multipart (FILE *fp, const char *boundary, long end_off, int digest) +{ +#ifdef SUN_ATTACHMENT + int lines; +#endif + int blen, len, crlf = 0; + char buffer[LONG_STRING]; + BODY *head = 0, *last = 0, *new = 0; + int i; + int final = 0; /* did we see the ending boundary? */ + + if (!boundary) + { + mutt_error _("multipart message has no boundary parameter!"); + return (NULL); + } + + blen = mutt_strlen (boundary); + while (ftell (fp) < end_off && fgets (buffer, LONG_STRING, fp) != NULL) + { + len = mutt_strlen (buffer); + + crlf = (len > 1 && buffer[len - 2] == '\r') ? 1 : 0; + + if (buffer[0] == '-' && buffer[1] == '-' && + mutt_strncmp (buffer + 2, boundary, blen) == 0) + { + if (last) + { + last->length = ftell (fp) - last->offset - len - 1 - crlf; + if (last->parts && last->parts->length == 0) + last->parts->length = ftell (fp) - last->parts->offset - len - 1 - crlf; + /* if the body is empty, we can end up with a -1 length */ + if (last->length < 0) + last->length = 0; + } + + /* Remove any trailing whitespace, up to the length of the boundary */ + for (i = len - 1; ISSPACE (buffer[i]) && i >= blen + 2; i--) + buffer[i] = 0; + + /* Check for the end boundary */ + if (mutt_strcmp (buffer + blen + 2, "--") == 0) + { + final = 1; + break; /* done parsing */ + } + else if (buffer[2 + blen] == 0) + { + new = mutt_read_mime_header (fp, digest); + +#ifdef SUN_ATTACHMENT + if (mutt_get_parameter ("content-lines", new->parameter)) { + for (lines = atoi(mutt_get_parameter ("content-lines", new->parameter)); + lines; lines-- ) + if (ftell (fp) >= end_off || fgets (buffer, LONG_STRING, fp) == NULL) + break; + } +#endif + + /* + * Consistency checking - catch + * bad attachment end boundaries + */ + + if(new->offset > end_off) + { + mutt_free_body(&new); + break; + } + if (head) + { + last->next = new; + last = new; + } + else + last = head = new; + } + } + } + + /* in case of missing end boundary, set the length to something reasonable */ + if (last && last->length == 0 && !final) + last->length = end_off - last->offset; + + /* parse recursive MIME parts */ + for(last = head; last; last = last->next) + mutt_parse_part(fp, last); + + return (head); +} + +static const char *uncomment_timezone (char *buf, size_t buflen, const char *tz) +{ + char *p; + size_t len; + + if (*tz != '(') + return tz; /* no need to do anything */ + tz++; + SKIPWS (tz); + if ((p = strpbrk (tz, " )")) == NULL) + return tz; + len = p - tz; + if (len > buflen - 1) + len = buflen - 1; + memcpy (buf, tz, len); + buf[len] = 0; + return buf; +} + +static struct tz_t +{ + char tzname[5]; + unsigned char zhours; + unsigned char zminutes; + unsigned char zoccident; /* west of UTC? */ +} +TimeZones[] = +{ + { "aat", 1, 0, 1 }, /* Atlantic Africa Time */ + { "adt", 4, 0, 0 }, /* Arabia DST */ + { "ast", 3, 0, 0 }, /* Arabia */ +/*{ "ast", 4, 0, 1 },*/ /* Atlantic */ + { "bst", 1, 0, 0 }, /* British DST */ + { "cat", 1, 0, 0 }, /* Central Africa */ + { "cdt", 5, 0, 1 }, + { "cest", 2, 0, 0 }, /* Central Europe DST */ + { "cet", 1, 0, 0 }, /* Central Europe */ + { "cst", 6, 0, 1 }, +/*{ "cst", 8, 0, 0 },*/ /* China */ +/*{ "cst", 9, 30, 0 },*/ /* Australian Central Standard Time */ + { "eat", 3, 0, 0 }, /* East Africa */ + { "edt", 4, 0, 1 }, + { "eest", 3, 0, 0 }, /* Eastern Europe DST */ + { "eet", 2, 0, 0 }, /* Eastern Europe */ + { "egst", 0, 0, 0 }, /* Eastern Greenland DST */ + { "egt", 1, 0, 1 }, /* Eastern Greenland */ + { "est", 5, 0, 1 }, + { "gmt", 0, 0, 0 }, + { "gst", 4, 0, 0 }, /* Presian Gulf */ + { "hkt", 8, 0, 0 }, /* Hong Kong */ + { "ict", 7, 0, 0 }, /* Indochina */ + { "idt", 3, 0, 0 }, /* Israel DST */ + { "ist", 2, 0, 0 }, /* Israel */ +/*{ "ist", 5, 30, 0 },*/ /* India */ + { "jst", 9, 0, 0 }, /* Japan */ + { "kst", 9, 0, 0 }, /* Korea */ + { "mdt", 6, 0, 1 }, + { "met", 1, 0, 0 }, /* this is now officially CET */ + { "msd", 4, 0, 0 }, /* Moscow DST */ + { "msk", 3, 0, 0 }, /* Moscow */ + { "mst", 7, 0, 1 }, + { "nzdt", 13, 0, 0 }, /* New Zealand DST */ + { "nzst", 12, 0, 0 }, /* New Zealand */ + { "pdt", 7, 0, 1 }, + { "pst", 8, 0, 1 }, + { "sat", 2, 0, 0 }, /* South Africa */ + { "smt", 4, 0, 0 }, /* Seychelles */ + { "sst", 11, 0, 1 }, /* Samoa */ +/*{ "sst", 8, 0, 0 },*/ /* Singapore */ + { "utc", 0, 0, 0 }, + { "wat", 0, 0, 0 }, /* West Africa */ + { "west", 1, 0, 0 }, /* Western Europe DST */ + { "wet", 0, 0, 0 }, /* Western Europe */ + { "wgst", 2, 0, 1 }, /* Western Greenland DST */ + { "wgt", 3, 0, 1 }, /* Western Greenland */ + { "wst", 8, 0, 0 }, /* Western Australia */ +}; + +/* parses a date string in RFC822 format: + * + * Date: [ weekday , ] day-of-month month year hour:minute:second timezone + * + * This routine assumes that `h' has been initialized to 0. the `timezone' + * field is optional, defaulting to +0000 if missing. + */ +time_t mutt_parse_date (const char *s, HEADER *h) +{ + int count = 0; + char *t; + int hour, min, sec; + struct tm tm; + int i; + int tz_offset = 0; + int zhours = 0; + int zminutes = 0; + int zoccident = 0; + const char *ptz; + char tzstr[SHORT_STRING]; + char scratch[SHORT_STRING]; + + /* Don't modify our argument. Fixed-size buffer is ok here since + * the date format imposes a natural limit. + */ + + strfcpy (scratch, s, sizeof (scratch)); + + /* kill the day of the week, if it exists. */ + if ((t = strchr (scratch, ','))) + t++; + else + t = scratch; + SKIPWS (t); + + memset (&tm, 0, sizeof (tm)); + + while ((t = strtok (t, " \t")) != NULL) + { + switch (count) + { + case 0: /* day of the month */ + if (!isdigit ((unsigned char) *t)) + return (-1); + tm.tm_mday = atoi (t); + if (tm.tm_mday > 31) + return (-1); + break; + + case 1: /* month of the year */ + if ((i = mutt_check_month (t)) < 0) + return (-1); + tm.tm_mon = i; + break; + + case 2: /* year */ + tm.tm_year = atoi (t); + if (tm.tm_year < 50) + tm.tm_year += 100; + else if (tm.tm_year >= 1900) + tm.tm_year -= 1900; + break; + + case 3: /* time of day */ + if (sscanf (t, "%d:%d:%d", &hour, &min, &sec) == 3) + ; + else if (sscanf (t, "%d:%d", &hour, &min) == 2) + sec = 0; + else + { + dprint(1, (debugfile, "parse_date: could not process time format: %s\n", t)); + return(-1); + } + tm.tm_hour = hour; + tm.tm_min = min; + tm.tm_sec = sec; + break; + + case 4: /* timezone */ + /* sometimes we see things like (MST) or (-0700) so attempt to + * compensate by uncommenting the string if non-RFC822 compliant + */ + ptz = uncomment_timezone (tzstr, sizeof (tzstr), t); + + if (*ptz == '+' || *ptz == '-') + { + if (ptz[1] && ptz[2] && ptz[3] && ptz[4] + && isdigit ((unsigned char) ptz[1]) && isdigit ((unsigned char) ptz[2]) + && isdigit ((unsigned char) ptz[3]) && isdigit ((unsigned char) ptz[4])) + { + zhours = (ptz[1] - '0') * 10 + (ptz[2] - '0'); + zminutes = (ptz[3] - '0') * 10 + (ptz[4] - '0'); + + if (ptz[0] == '-') + zoccident = 1; + } + } + else + { + struct tz_t *tz; + + tz = bsearch (ptz, TimeZones, sizeof TimeZones/sizeof (struct tz_t), + sizeof (struct tz_t), + (int (*)(const void *, const void *)) ascii_strcasecmp + /* This is safe to do: A pointer to a struct equals + * a pointer to its first element*/); + + if (tz) + { + zhours = tz->zhours; + zminutes = tz->zminutes; + zoccident = tz->zoccident; + } + + /* ad hoc support for the European MET (now officially CET) TZ */ + if (ascii_strcasecmp (t, "MET") == 0) + { + if ((t = strtok (NULL, " \t")) != NULL) + { + if (!ascii_strcasecmp (t, "DST")) + zhours++; + } + } + } + tz_offset = zhours * 3600 + zminutes * 60; + if (!zoccident) + tz_offset = -tz_offset; + break; + } + count++; + t = 0; + } + + if (count < 4) /* don't check for missing timezone */ + { + dprint(1,(debugfile, "parse_date(): error parsing date format, using received time\n")); + return (-1); + } + + if (h) + { + h->zhours = zhours; + h->zminutes = zminutes; + h->zoccident = zoccident; + } + + return (mutt_mktime (&tm, 0) + tz_offset); +} + +/* extract the first substring that looks like a message-id */ +static char *extract_message_id (const char *s) +{ + const char *p; + char *r; + size_t l; + + if ((s = strchr (s, '<')) == NULL || (p = strchr (s, '>')) == NULL) + return (NULL); + l = (size_t)(p - s) + 1; + r = safe_malloc (l + 1); + memcpy (r, s, l); + r[l] = 0; + return (r); +} + +void mutt_parse_mime_message (CONTEXT *ctx, HEADER *cur) +{ + MESSAGE *msg; + + if (cur->content->type != TYPEMESSAGE && cur->content->type != TYPEMULTIPART) + return; /* nothing to do */ + + if (cur->content->parts) + return; /* The message was parsed earlier. */ + + if ((msg = mx_open_message (ctx, cur->msgno))) + { + mutt_parse_part (msg->fp, cur->content); + + if (WithCrypto) + cur->security = crypt_query (cur->content); + + mx_close_message (&msg); + } +} + +int mutt_parse_rfc822_line (ENVELOPE *e, HEADER *hdr, char *line, char *p, short user_hdrs, short weed, + short do_2047, LIST **lastp) +{ + int matched = 0; + LIST *last = NULL; + + if (lastp) + last = *lastp; + + switch (ascii_tolower (line[0])) + { + case 'a': + if (ascii_strcasecmp (line+1, "pparently-to") == 0) + { + e->to = rfc822_parse_adrlist (e->to, p); + matched = 1; + } + else if (ascii_strcasecmp (line+1, "pparently-from") == 0) + { + e->from = rfc822_parse_adrlist (e->from, p); + matched = 1; + } + break; + + case 'b': + if (ascii_strcasecmp (line+1, "cc") == 0) + { + e->bcc = rfc822_parse_adrlist (e->bcc, p); + matched = 1; + } + break; + + case 'c': + if (ascii_strcasecmp (line+1, "c") == 0) + { + e->cc = rfc822_parse_adrlist (e->cc, p); + matched = 1; + } + else if (ascii_strncasecmp (line + 1, "ontent-", 7) == 0) + { + if (ascii_strcasecmp (line+8, "type") == 0) + { + if (hdr) + mutt_parse_content_type (p, hdr->content); + matched = 1; + } + else if (ascii_strcasecmp (line+8, "transfer-encoding") == 0) + { + if (hdr) + hdr->content->encoding = mutt_check_encoding (p); + matched = 1; + } + else if (ascii_strcasecmp (line+8, "length") == 0) + { + if (hdr) + { + if ((hdr->content->length = atoi (p)) < 0) + hdr->content->length = -1; + } + matched = 1; + } + else if (ascii_strcasecmp (line+8, "description") == 0) + { + if (hdr) + { + mutt_str_replace (&hdr->content->description, p); + rfc2047_decode (&hdr->content->description); + } + matched = 1; + } + else if (ascii_strcasecmp (line+8, "disposition") == 0) + { + if (hdr) + parse_content_disposition (p, hdr->content); + matched = 1; + } + } + break; + + case 'd': + if (!ascii_strcasecmp ("ate", line + 1)) + { + mutt_str_replace (&e->date, p); + if (hdr) + hdr->date_sent = mutt_parse_date (p, hdr); + matched = 1; + } + break; + + case 'e': + if (!ascii_strcasecmp ("xpires", line + 1) && + hdr && mutt_parse_date (p, NULL) < time (NULL)) + hdr->expired = 1; + break; + + case 'f': + if (!ascii_strcasecmp ("rom", line + 1)) + { + e->from = rfc822_parse_adrlist (e->from, p); + matched = 1; + } +#ifdef USE_NNTP + else if (!mutt_strcasecmp (line+1, "ollowup-to")) + { + if (!e->followup_to) + { + mutt_remove_trailing_ws (p); + e->followup_to = safe_strdup (mutt_skip_whitespace (p)); + } + matched = 1; + } +#endif + break; + + case 'i': + if (!ascii_strcasecmp (line+1, "n-reply-to")) + { + mutt_free_list (&e->in_reply_to); + e->in_reply_to = mutt_parse_references (p, 1); + matched = 1; + } + break; + + case 'l': + if (!ascii_strcasecmp (line + 1, "ines")) + { + if (hdr) + hdr->lines = atoi (p); + + /* + * HACK - mutt has, for a very short time, produced negative + * Lines header values. Ignore them. + */ + if (hdr->lines < 0) + hdr->lines = 0; + + matched = 1; + } + break; + + case 'm': + if (!ascii_strcasecmp (line + 1, "ime-version")) + { + if (hdr) + hdr->mime = 1; + matched = 1; + } + else if (!ascii_strcasecmp (line + 1, "essage-id")) + { + /* We add a new "Message-Id:" when building a message */ + FREE (&e->message_id); + e->message_id = extract_message_id (p); + matched = 1; + } + else if (!ascii_strncasecmp (line + 1, "ail-", 4)) + { + if (!ascii_strcasecmp (line + 5, "reply-to")) + { + /* override the Reply-To: field */ + rfc822_free_address (&e->reply_to); + e->reply_to = rfc822_parse_adrlist (e->reply_to, p); + matched = 1; + } + else if (!ascii_strcasecmp (line + 5, "followup-to")) + { + e->mail_followup_to = rfc822_parse_adrlist (e->mail_followup_to, p); + matched = 1; + } + } + break; + +#ifdef USE_NNTP + case 'n': + if (!mutt_strcasecmp (line + 1, "ewsgroups")) + { + FREE (&e->newsgroups); + mutt_remove_trailing_ws (p); + e->newsgroups = safe_strdup (mutt_skip_whitespace (p)); + matched = 1; + } + break; +#endif + + case 'o': + /* field `Organization:' saves only for pager! */ + if (!mutt_strcasecmp (line + 1, "rganization")) + { + if (!e->organization && mutt_strcasecmp (p, "unknown")) + e->organization = safe_strdup (p); + } + break; + + case 'r': + if (!ascii_strcasecmp (line + 1, "eferences")) + { + mutt_free_list (&e->references); + e->references = mutt_parse_references (p, 0); + matched = 1; + } + else if (!ascii_strcasecmp (line + 1, "eply-to")) + { + e->reply_to = rfc822_parse_adrlist (e->reply_to, p); + matched = 1; + } + else if (!ascii_strcasecmp (line + 1, "eturn-path")) + { + e->return_path = rfc822_parse_adrlist (e->return_path, p); + matched = 1; + } + else if (!ascii_strcasecmp (line + 1, "eceived")) + { + if (hdr && !hdr->received) + { + char *d = strchr (p, ';'); + + if (d) + hdr->received = mutt_parse_date (d + 1, NULL); + } + } + break; + + case 's': + if (!ascii_strcasecmp (line + 1, "ubject")) + { + if (!e->subject) + e->subject = safe_strdup (p); + matched = 1; + } + else if (!ascii_strcasecmp (line + 1, "ender")) + { + e->sender = rfc822_parse_adrlist (e->sender, p); + matched = 1; + } + else if (!ascii_strcasecmp (line + 1, "tatus")) + { + if (hdr) + { + while (*p) + { + switch(*p) + { + case 'r': + hdr->replied = 1; + break; + case 'O': + hdr->old = 1; + break; + case 'R': + hdr->read = 1; + break; + } + p++; + } + } + matched = 1; + } + else if ((!ascii_strcasecmp ("upersedes", line + 1) || + !ascii_strcasecmp ("upercedes", line + 1)) && hdr) + e->supersedes = safe_strdup (p); + break; + + case 't': + if (ascii_strcasecmp (line+1, "o") == 0) + { + e->to = rfc822_parse_adrlist (e->to, p); + matched = 1; + } + break; + + case 'x': + if (ascii_strcasecmp (line+1, "-status") == 0) + { + if (hdr) + { + while (*p) + { + switch (*p) + { + case 'A': + hdr->replied = 1; + break; + case 'D': + hdr->deleted = 1; + break; + case 'F': + hdr->flagged = 1; + break; + default: + break; + } + p++; + } + } + matched = 1; + } + else if (ascii_strcasecmp (line+1, "-label") == 0) + { + e->x_label = safe_strdup(p); + matched = 1; + } +#ifdef USE_NNTP + else if (!mutt_strcasecmp (line + 1, "-comment-to")) + { + if (!e->x_comment_to) + e->x_comment_to = safe_strdup (p); + matched = 1; + } + else if (!mutt_strcasecmp (line + 1, "ref")) + { + if (!e->xref) + e->xref = safe_strdup (p); + matched = 1; + } +#endif + + default: + break; + } + + /* Keep track of the user-defined headers */ + if (!matched && user_hdrs) + { + /* restore the original line */ + line[strlen (line)] = ':'; + + if (weed && option (OPTWEED) && mutt_matches_ignore (line, Ignore) + && !mutt_matches_ignore (line, UnIgnore)) + goto done; + + if (last) + { + last->next = mutt_new_list (); + last = last->next; + } + else + last = e->userhdrs = mutt_new_list (); + last->data = safe_strdup (line); + if (do_2047) + rfc2047_decode (&last->data); + } + + done: + + *lastp = last; + return matched; +} + + +/* mutt_read_rfc822_header() -- parses a RFC822 header + * + * Args: + * + * f stream to read from + * + * hdr header structure of current message (optional). + * + * user_hdrs If set, store user headers. Used for recall-message and + * postpone modes. + * + * weed If this parameter is set and the user has activated the + * $weed option, honor the header weed list for user headers. + * Used for recall-message. + * + * Returns: newly allocated envelope structure. You should free it by + * mutt_free_envelope() when envelope stay unneeded. + */ +ENVELOPE *mutt_read_rfc822_header (FILE *f, HEADER *hdr, short user_hdrs, + short weed) +{ + ENVELOPE *e = mutt_new_envelope(); + LIST *last = NULL; + char *line = safe_malloc (LONG_STRING); + char *p; + long loc; + int matched; + size_t linelen = LONG_STRING; + + if (hdr) + { + if (hdr->content == NULL) + { + hdr->content = mutt_new_body (); + + /* set the defaults from RFC1521 */ + hdr->content->type = TYPETEXT; + hdr->content->subtype = safe_strdup ("plain"); + hdr->content->encoding = ENC7BIT; + hdr->content->length = -1; + + /* RFC 2183 says this is arbitrary */ + hdr->content->disposition = DISPINLINE; + } + } + + while ((loc = ftell (f)), + *(line = read_rfc822_line (f, line, &linelen)) != 0) + { + matched = 0; + + if ((p = strpbrk (line, ": \t")) == NULL || *p != ':') + { + char return_path[LONG_STRING]; + time_t t; + + /* some bogus MTAs will quote the original "From " line */ + if (mutt_strncmp (">From ", line, 6) == 0) + continue; /* just ignore */ + else if (is_from (line, return_path, sizeof (return_path), &t)) + { + /* MH somtimes has the From_ line in the middle of the header! */ + if (hdr && !hdr->received) + hdr->received = t - mutt_local_tz (t); + continue; + } + + fseek (f, loc, 0); + break; /* end of header */ + } + + *p = 0; + p++; + SKIPWS (p); + if (!*p) + continue; /* skip empty header fields */ + + matched = mutt_parse_rfc822_line (e, hdr, line, p, user_hdrs, weed, 1, &last); + + } + + FREE (&line); + + if (hdr) + { + hdr->content->hdr_offset = hdr->offset; + hdr->content->offset = ftell (f); + + /* do RFC2047 decoding */ + rfc2047_decode_adrlist (e->from); + rfc2047_decode_adrlist (e->to); + rfc2047_decode_adrlist (e->cc); + rfc2047_decode_adrlist (e->reply_to); + rfc2047_decode_adrlist (e->mail_followup_to); + rfc2047_decode_adrlist (e->return_path); + rfc2047_decode_adrlist (e->sender); + + if (e->subject) + { + regmatch_t pmatch[1]; + + rfc2047_decode (&e->subject); + + if (regexec (ReplyRegexp.rx, e->subject, 1, pmatch, 0) == 0) + e->real_subj = e->subject + pmatch[0].rm_eo; + else + e->real_subj = e->subject; + } + + /* check for missing or invalid date */ + if (hdr->date_sent <= 0) + { + dprint(1,(debugfile,"read_rfc822_header(): no date found, using received time from msg separator\n")); + hdr->date_sent = hdr->received; + } + } + + return (e); +} + +ADDRESS *mutt_parse_adrlist (ADDRESS *p, const char *s) +{ + const char *q; + + /* check for a simple whitespace separated list of addresses */ + if ((q = strpbrk (s, "\"<>():;,\\")) == NULL) + { + char tmp[HUGE_STRING]; + char *r; + + strfcpy (tmp, s, sizeof (tmp)); + r = tmp; + while ((r = strtok (r, " \t")) != NULL) + { + p = rfc822_parse_adrlist (p, r); + r = NULL; + } + } + else + p = rfc822_parse_adrlist (p, s); + + return p; +} diff --git a/patchlist.sh b/patchlist.sh new file mode 100755 index 0000000..9cefc14 --- /dev/null +++ b/patchlist.sh @@ -0,0 +1,18 @@ +#!/bin/sh -- + +cat <<EOF +/* this is an autogenerated file. do not edit. */ +#include <stdio.h> +#include <stdlib.h> + +#include "mutt.h" + +void mutt_print_patchlist (void) +{ +EOF + +while read patch ; do + echo " puts (\"${patch}\");" +done + +echo "}" diff --git a/pattern.c b/pattern.c new file mode 100644 index 0000000..f9c0e11 --- /dev/null +++ b/pattern.c @@ -0,0 +1,1342 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>, and others + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mapping.h" +#include "keymap.h" +#include "mailbox.h" +#include "copy.h" + +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include <sys/stat.h> +#include <unistd.h> +#include <stdarg.h> + +#include "mutt_crypt.h" + +static int eat_regexp (pattern_t *pat, BUFFER *, BUFFER *); +static int eat_date (pattern_t *pat, BUFFER *, BUFFER *); +static int eat_range (pattern_t *pat, BUFFER *, BUFFER *); + +struct pattern_flags +{ + int tag; /* character used to represent this op */ + int op; /* operation to perform */ + int class; + int (*eat_arg) (pattern_t *, BUFFER *, BUFFER *); +} +Flags[] = +{ + { 'A', M_ALL, 0, NULL }, + { 'b', M_BODY, M_FULL_MSG, eat_regexp }, + { 'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp }, + { 'c', M_CC, 0, eat_regexp }, + { 'C', M_RECIPIENT, 0, eat_regexp }, + { 'd', M_DATE, 0, eat_date }, + { 'D', M_DELETED, 0, NULL }, + { 'e', M_SENDER, 0, eat_regexp }, + { 'E', M_EXPIRED, 0, NULL }, + { 'f', M_FROM, 0, eat_regexp }, + { 'F', M_FLAG, 0, NULL }, + { 'g', M_CRYPT_SIGN, 0, NULL }, + { 'G', M_CRYPT_ENCRYPT, 0, NULL }, + { 'h', M_HEADER, M_FULL_MSG, eat_regexp }, + { 'i', M_ID, 0, eat_regexp }, + { 'k', M_PGP_KEY, 0, NULL }, + { 'L', M_ADDRESS, 0, eat_regexp }, + { 'l', M_LIST, 0, NULL }, + { 'm', M_MESSAGE, 0, eat_range }, + { 'n', M_SCORE, 0, eat_range }, + { 'N', M_NEW, 0, NULL }, + { 'O', M_OLD, 0, NULL }, + { 'p', M_PERSONAL_RECIP, 0, NULL }, + { 'P', M_PERSONAL_FROM, 0, NULL }, + { 'Q', M_REPLIED, 0, NULL }, + { 'R', M_READ, 0, NULL }, + { 'r', M_DATE_RECEIVED, 0, eat_date }, + { 's', M_SUBJECT, 0, eat_regexp }, + { 'S', M_SUPERSEDED, 0, NULL }, + { 'T', M_TAG, 0, NULL }, + { 't', M_TO, 0, eat_regexp }, + { 'U', M_UNREAD, 0, NULL }, + { 'v', M_COLLAPSED, 0, NULL }, + { 'V', M_CRYPT_VERIFIED, 0, NULL }, +#ifdef USE_NNTP + { 'w', M_NEWSGROUPS, 0, eat_regexp }, +#endif + { 'x', M_REFERENCE, 0, eat_regexp }, + { 'y', M_XLABEL, 0, eat_regexp }, + { 'z', M_SIZE, 0, eat_range }, + { '=', M_DUPLICATED, 0, NULL }, + { 0 } +}; + +static pattern_t *SearchPattern = NULL; /* current search pattern */ +static char LastSearch[STRING] = { 0 }; /* last pattern searched for */ +static char LastSearchExpn[LONG_STRING] = { 0 }; /* expanded version of + LastSearch */ + +#define M_MAXRANGE -1 + +/* constants for parse_date_range() */ +#define M_PDR_NONE 0x0000 +#define M_PDR_MINUS 0x0001 +#define M_PDR_PLUS 0x0002 +#define M_PDR_WINDOW 0x0004 +#define M_PDR_ABSOLUTE 0x0008 +#define M_PDR_DONE 0x0010 +#define M_PDR_ERROR 0x0100 +#define M_PDR_ERRORDONE (M_PDR_ERROR | M_PDR_DONE) + + +int mutt_getvaluebychar (char ch, struct mapping_t *table) +{ + int i; + + for (i = 0; table[i].name; i++) + { + if (ch == table[i].name[0]) + return table[i].value; + } + + return (-1); +} + +/* if no uppercase letters are given, do a case-insensitive search */ +int mutt_which_case (const char *s) +{ + while (*s) + { + if (isalpha ((unsigned char) *s) && isupper ((unsigned char) *s)) + return 0; /* case-sensitive */ + s++; + } + return REG_ICASE; /* case-insensitive */ +} + +static int +msg_search (CONTEXT *ctx, regex_t *rx, char *buf, size_t blen, int op, int msgno) +{ + char tempfile[_POSIX_PATH_MAX]; + MESSAGE *msg = NULL; + STATE s; + struct stat st; + FILE *fp = NULL; + long lng = 0; + int match = 0; + HEADER *h = ctx->hdrs[msgno]; + + if ((msg = mx_open_message (ctx, msgno)) != NULL) + { + if (option (OPTTHOROUGHSRC)) + { + /* decode the header / body */ + memset (&s, 0, sizeof (s)); + s.fpin = msg->fp; + s.flags = M_CHARCONV; + mutt_mktemp (tempfile); + if ((s.fpout = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + return (0); + } + + if (op != M_BODY) + mutt_copy_header (msg->fp, h, s.fpout, CH_FROM | CH_DECODE, NULL); + + if (op != M_HEADER) + { + mutt_parse_mime_message (ctx, h); + + if (WithCrypto && (h->security & ENCRYPT) + && !crypt_valid_passphrase(h->security)) + { + mx_close_message (&msg); + if (fp) + { + fclose (fp); + unlink (tempfile); + } + return (0); + } + + fseek (msg->fp, h->offset, 0); + mutt_body_handler (h->content, &s); + } + + fp = s.fpout; + fflush (fp); + fseek (fp, 0, 0); + fstat (fileno (fp), &st); + lng = (long) st.st_size; + } + else + { + /* raw header / body */ + fp = msg->fp; + if (op != M_BODY) + { + fseek (fp, h->offset, 0); + lng = h->content->offset - h->offset; + } + if (op != M_HEADER) + { + if (op == M_BODY) + fseek (fp, h->content->offset, 0); + lng += h->content->length; + } + } + + /* search the file "fp" */ + while (lng > 0) + { + if (fgets (buf, blen - 1, fp) == NULL) + break; /* don't loop forever */ + if (regexec (rx, buf, 0, NULL, 0) == 0) + { + match = 1; + break; + } + lng -= mutt_strlen (buf); + } + + mx_close_message (&msg); + + if (option (OPTTHOROUGHSRC)) + { + fclose (fp); + unlink (tempfile); + } + } + + return match; +} + +int eat_regexp (pattern_t *pat, BUFFER *s, BUFFER *err) +{ + BUFFER buf; + int r; + + memset (&buf, 0, sizeof (buf)); + if (mutt_extract_token (&buf, s, M_TOKEN_PATTERN | M_TOKEN_COMMENT) != 0 || + !buf.data) + { + snprintf (err->data, err->dsize, _("Error in expression: %s"), s->dptr); + return (-1); + } + pat->rx = safe_malloc (sizeof (regex_t)); + r = REGCOMP (pat->rx, buf.data, REG_NEWLINE | REG_NOSUB | mutt_which_case (buf.data)); + FREE (&buf.data); + if (r) + { + regerror (r, pat->rx, err->data, err->dsize); + regfree (pat->rx); + FREE (&pat->rx); + return (-1); + } + return 0; +} + +int eat_range (pattern_t *pat, BUFFER *s, BUFFER *err) +{ + char *tmp; + int do_exclusive = 0; + int skip_quote = 0; + + /* + * If simple_search is set to "~m %s", the range will have double quotes + * around it... + */ + if (*s->dptr == '"') + { + s->dptr++; + skip_quote = 1; + } + if (*s->dptr == '<') + do_exclusive = 1; + if ((*s->dptr != '-') && (*s->dptr != '<')) + { + /* range minimum */ + if (*s->dptr == '>') + { + pat->max = M_MAXRANGE; + pat->min = strtol (s->dptr + 1, &tmp, 0) + 1; /* exclusive range */ + } + else + pat->min = strtol (s->dptr, &tmp, 0); + if (toupper ((unsigned char) *tmp) == 'K') /* is there a prefix? */ + { + pat->min *= 1024; + tmp++; + } + else if (toupper ((unsigned char) *tmp) == 'M') + { + pat->min *= 1048576; + tmp++; + } + if (*s->dptr == '>') + { + s->dptr = tmp; + return 0; + } + if (*tmp != '-') + { + /* exact value */ + pat->max = pat->min; + s->dptr = tmp; + return 0; + } + tmp++; + } + else + { + s->dptr++; + tmp = s->dptr; + } + + if (isdigit ((unsigned char) *tmp)) + { + /* range maximum */ + pat->max = strtol (tmp, &tmp, 0); + if (toupper ((unsigned char) *tmp) == 'K') + { + pat->max *= 1024; + tmp++; + } + else if (toupper ((unsigned char) *tmp) == 'M') + { + pat->max *= 1048576; + tmp++; + } + if (do_exclusive) + (pat->max)--; + } + else + pat->max = M_MAXRANGE; + + if (skip_quote && *tmp == '"') + tmp++; + + SKIPWS (tmp); + s->dptr = tmp; + return 0; +} + +static const char *getDate (const char *s, struct tm *t, BUFFER *err) +{ + char *p; + time_t now = time (NULL); + struct tm *tm = localtime (&now); + + t->tm_mday = strtol (s, &p, 10); + if (t->tm_mday < 1 || t->tm_mday > 31) + { + snprintf (err->data, err->dsize, _("Invalid day of month: %s"), s); + return NULL; + } + if (*p != '/') + { + /* fill in today's month and year */ + t->tm_mon = tm->tm_mon; + t->tm_year = tm->tm_year; + return p; + } + p++; + t->tm_mon = strtol (p, &p, 10) - 1; + if (t->tm_mon < 0 || t->tm_mon > 11) + { + snprintf (err->data, err->dsize, _("Invalid month: %s"), p); + return NULL; + } + if (*p != '/') + { + t->tm_year = tm->tm_year; + return p; + } + p++; + t->tm_year = strtol (p, &p, 10); + if (t->tm_year < 70) /* year 2000+ */ + t->tm_year += 100; + else if (t->tm_year > 1900) + t->tm_year -= 1900; + return p; +} + +/* Ny years + Nm months + Nw weeks + Nd days */ +static const char *get_offset (struct tm *tm, const char *s, int sign) +{ + char *ps; + int offset = strtol (s, &ps, 0); + if ((sign < 0 && offset > 0) || (sign > 0 && offset < 0)) + offset = -offset; + + switch (*ps) + { + case 'y': + tm->tm_year += offset; + break; + case 'm': + tm->tm_mon += offset; + break; + case 'w': + tm->tm_mday += 7 * offset; + break; + case 'd': + tm->tm_mday += offset; + break; + default: + return s; + } + mutt_normalize_time (tm); + return (ps + 1); +} + +static void adjust_date_range (struct tm *min, struct tm *max) +{ + if (min->tm_year > max->tm_year + || (min->tm_year == max->tm_year && min->tm_mon > max->tm_mon) + || (min->tm_year == max->tm_year && min->tm_mon == max->tm_mon + && min->tm_mday > max->tm_mday)) + { + int tmp; + + tmp = min->tm_year; + min->tm_year = max->tm_year; + max->tm_year = tmp; + + tmp = min->tm_mon; + min->tm_mon = max->tm_mon; + max->tm_mon = tmp; + + tmp = min->tm_mday; + min->tm_mday = max->tm_mday; + max->tm_mday = tmp; + + min->tm_hour = min->tm_min = min->tm_sec = 0; + max->tm_hour = 23; + max->tm_min = max->tm_sec = 59; + } +} + +static const char * parse_date_range (const char* pc, struct tm *min, + struct tm *max, int haveMin, struct tm *baseMin, BUFFER *err) +{ + int flag = M_PDR_NONE; + while (*pc && ((flag & M_PDR_DONE) == 0)) + { + const char *pt; + char ch = *pc++; + SKIPWS (pc); + switch (ch) + { + case '-': + { + /* try a range of absolute date minus offset of Ndwmy */ + pt = get_offset (min, pc, -1); + if (pc == pt) + { + if (flag == M_PDR_NONE) + { /* nothing yet and no offset parsed => absolute date? */ + if (!getDate (pc, max, err)) + flag |= (M_PDR_ABSOLUTE | M_PDR_ERRORDONE); /* done bad */ + else + { + /* reestablish initial base minimum if not specified */ + if (!haveMin) + memcpy (min, baseMin, sizeof(struct tm)); + flag |= (M_PDR_ABSOLUTE | M_PDR_DONE); /* done good */ + } + } + else + flag |= M_PDR_ERRORDONE; + } + else + { + pc = pt; + if (flag == M_PDR_NONE && !haveMin) + { /* the very first "-3d" without a previous absolute date */ + max->tm_year = min->tm_year; + max->tm_mon = min->tm_mon; + max->tm_mday = min->tm_mday; + } + flag |= M_PDR_MINUS; + } + } + break; + case '+': + { /* enlarge plusRange */ + pt = get_offset (max, pc, 1); + if (pc == pt) + flag |= M_PDR_ERRORDONE; + else + { + pc = pt; + flag |= M_PDR_PLUS; + } + } + break; + case '*': + { /* enlarge window in both directions */ + pt = get_offset (min, pc, -1); + if (pc == pt) + flag |= M_PDR_ERRORDONE; + else + { + pc = get_offset (max, pc, 1); + flag |= M_PDR_WINDOW; + } + } + break; + default: + flag |= M_PDR_ERRORDONE; + } + SKIPWS (pc); + } + if ((flag & M_PDR_ERROR) && !(flag & M_PDR_ABSOLUTE)) + { /* getDate has its own error message, don't overwrite it here */ + snprintf (err->data, err->dsize, _("Invalid relative date: %s"), pc-1); + } + return ((flag & M_PDR_ERROR) ? NULL : pc); +} + +static int eat_date (pattern_t *pat, BUFFER *s, BUFFER *err) +{ + BUFFER buffer; + struct tm min, max; + + memset (&buffer, 0, sizeof (buffer)); + if (mutt_extract_token (&buffer, s, M_TOKEN_COMMENT | M_TOKEN_PATTERN) != 0 + || !buffer.data) + { + strfcpy (err->data, _("error in expression"), err->dsize); + return (-1); + } + + memset (&min, 0, sizeof (min)); + /* the `0' time is Jan 1, 1970 UTC, so in order to prevent a negative time + when doing timezone conversion, we use Jan 2, 1970 UTC as the base + here */ + min.tm_mday = 2; + min.tm_year = 70; + + memset (&max, 0, sizeof (max)); + + /* Arbitrary year in the future. Don't set this too high + or mutt_mktime() returns something larger than will + fit in a time_t on some systems */ + max.tm_year = 130; + max.tm_mon = 11; + max.tm_mday = 31; + max.tm_hour = 23; + max.tm_min = 59; + max.tm_sec = 59; + + if (strchr ("<>=", buffer.data[0])) + { + /* offset from current time + <3d less than three days ago + >3d more than three days ago + =3d exactly three days ago */ + time_t now = time (NULL); + struct tm *tm = localtime (&now); + int exact = 0; + + if (buffer.data[0] == '<') + { + memcpy (&min, tm, sizeof (min)); + tm = &min; + } + else + { + memcpy (&max, tm, sizeof (max)); + tm = &max; + + if (buffer.data[0] == '=') + exact++; + } + tm->tm_hour = 23; + tm->tm_min = tm->tm_sec = 59; + + /* force negative offset */ + get_offset (tm, buffer.data + 1, -1); + + if (exact) + { + /* start at the beginning of the day in question */ + memcpy (&min, &max, sizeof (max)); + min.tm_hour = min.tm_sec = min.tm_min = 0; + } + } + else + { + const char *pc = buffer.data; + + int haveMin = FALSE; + int untilNow = FALSE; + if (isdigit ((unsigned char)*pc)) + { + /* mininum date specified */ + if ((pc = getDate (pc, &min, err)) == NULL) + { + FREE (&buffer.data); + return (-1); + } + haveMin = TRUE; + SKIPWS (pc); + if (*pc == '-') + { + const char *pt = pc + 1; + SKIPWS (pt); + untilNow = (*pt == '\0'); + } + } + + if (!untilNow) + { /* max date or relative range/window */ + + struct tm baseMin; + + if (!haveMin) + { /* save base minimum and set current date, e.g. for "-3d+1d" */ + time_t now = time (NULL); + struct tm *tm = localtime (&now); + memcpy (&baseMin, &min, sizeof(baseMin)); + memcpy (&min, tm, sizeof (min)); + min.tm_hour = min.tm_sec = min.tm_min = 0; + } + + /* preset max date for relative offsets, + if nothing follows we search for messages on a specific day */ + max.tm_year = min.tm_year; + max.tm_mon = min.tm_mon; + max.tm_mday = min.tm_mday; + + if (!parse_date_range (pc, &min, &max, haveMin, &baseMin, err)) + { /* bail out on any parsing error */ + FREE (&buffer.data); + return (-1); + } + } + } + + /* Since we allow two dates to be specified we'll have to adjust that. */ + adjust_date_range (&min, &max); + + pat->min = mutt_mktime (&min, 1); + pat->max = mutt_mktime (&max, 1); + + FREE (&buffer.data); + + return 0; +} + +static struct pattern_flags *lookup_tag (char tag) +{ + int i; + + for (i = 0; Flags[i].tag; i++) + if (Flags[i].tag == tag) + return (&Flags[i]); + return NULL; +} + +static /* const */ char *find_matching_paren (/* const */ char *s) +{ + int level = 1; + + for (; *s; s++) + { + if (*s == '(') + level++; + else if (*s == ')') + { + level--; + if (!level) + break; + } + } + return s; +} + +void mutt_pattern_free (pattern_t **pat) +{ + pattern_t *tmp; + + while (*pat) + { + tmp = *pat; + *pat = (*pat)->next; + + if (tmp->rx) + { + regfree (tmp->rx); + FREE (&tmp->rx); + } + if (tmp->child) + mutt_pattern_free (&tmp->child); + FREE (&tmp); + } +} + +pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err) +{ + pattern_t *curlist = NULL; + pattern_t *tmp; + pattern_t *last = NULL; + int not = 0; + int alladdr = 0; + int or = 0; + int implicit = 1; /* used to detect logical AND operator */ + struct pattern_flags *entry; + char *p; + char *buf; + BUFFER ps; + + memset (&ps, 0, sizeof (ps)); + ps.dptr = s; + ps.dsize = mutt_strlen (s); + + while (*ps.dptr) + { + SKIPWS (ps.dptr); + switch (*ps.dptr) + { + case '^': + ps.dptr++; + alladdr = !alladdr; + break; + case '!': + ps.dptr++; + not = !not; + break; + case '|': + if (!or) + { + if (!curlist) + { + snprintf (err->data, err->dsize, _("error in pattern at: %s"), ps.dptr); + return NULL; + } + if (curlist->next) + { + /* A & B | C == (A & B) | C */ + tmp = new_pattern (); + tmp->op = M_AND; + tmp->child = curlist; + + curlist = tmp; + last = curlist; + } + + or = 1; + } + ps.dptr++; + implicit = 0; + not = 0; + alladdr = 0; + break; + case '~': + if (implicit && or) + { + /* A | B & C == (A | B) & C */ + tmp = new_pattern (); + tmp->op = M_OR; + tmp->child = curlist; + curlist = tmp; + last = tmp; + or = 0; + } + + tmp = new_pattern (); + tmp->not = not; + tmp->alladdr = alladdr; + not = 0; + alladdr=0; + + if (last) + last->next = tmp; + else + curlist = tmp; + last = tmp; + + ps.dptr++; /* move past the ~ */ + if ((entry = lookup_tag (*ps.dptr)) == NULL) + { + snprintf (err->data, err->dsize, _("%c: invalid command"), *ps.dptr); + mutt_pattern_free (&curlist); + return NULL; + } + if (entry->class && (flags & entry->class) == 0) + { + snprintf (err->data, err->dsize, _("%c: not supported in this mode"), *ps.dptr); + mutt_pattern_free (&curlist); + return NULL; + } + tmp->op = entry->op; + + ps.dptr++; /* eat the operator and any optional whitespace */ + SKIPWS (ps.dptr); + + if (entry->eat_arg) + { + if (!*ps.dptr) + { + snprintf (err->data, err->dsize, _("missing parameter")); + mutt_pattern_free (&curlist); + return NULL; + } + if (entry->eat_arg (tmp, &ps, err) == -1) + { + mutt_pattern_free (&curlist); + return NULL; + } + } + implicit = 1; + break; + case '(': + p = find_matching_paren (ps.dptr + 1); + if (*p != ')') + { + snprintf (err->data, err->dsize, _("mismatched parenthesis: %s"), ps.dptr); + mutt_pattern_free (&curlist); + return NULL; + } + /* compile the sub-expression */ + buf = mutt_substrdup (ps.dptr + 1, p); + if ((tmp = mutt_pattern_comp (buf, flags, err)) == NULL) + { + FREE (&buf); + mutt_pattern_free (&curlist); + return NULL; + } + FREE (&buf); + if (last) + last->next = tmp; + else + curlist = tmp; + last = tmp; + tmp->not ^= not; + tmp->alladdr |= alladdr; + not = 0; + alladdr = 0; + ps.dptr = p + 1; /* restore location */ + break; + default: + snprintf (err->data, err->dsize, _("error in pattern at: %s"), ps.dptr); + mutt_pattern_free (&curlist); + return NULL; + } + } + if (!curlist) + { + strfcpy (err->data, _("empty pattern"), err->dsize); + return NULL; + } + if (curlist->next) + { + tmp = new_pattern (); + tmp->op = or ? M_OR : M_AND; + tmp->child = curlist; + curlist = tmp; + } + return (curlist); +} + +static int +perform_and (pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *hdr) +{ + for (; pat; pat = pat->next) + if (mutt_pattern_exec (pat, flags, ctx, hdr) <= 0) + return 0; + return 1; +} + +static int +perform_or (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *hdr) +{ + for (; pat; pat = pat->next) + if (mutt_pattern_exec (pat, flags, ctx, hdr) > 0) + return 1; + return 0; +} + +static int match_adrlist (regex_t *rx, int match_personal, int alladdr, + int n, ...) +{ + va_list ap; + ADDRESS *a; + + va_start (ap, n); + for ( ; n ; n --) + { + for (a = va_arg (ap, ADDRESS *) ; a ; a = a->next) + { + if (alladdr^ + ((a->mailbox && regexec (rx, a->mailbox, 0, NULL, 0) == 0) || + (match_personal && a->personal && + regexec (rx, a->personal, 0, NULL, 0) == 0))) + { + va_end (ap); + return (! alladdr); /* Found match, or non-match if alladdr */ + } + } + } + va_end (ap); + return alladdr; /* No matches, or all matches if alladdr */ +} + +static int match_reference (regex_t *rx, LIST *refs) +{ + for (; refs; refs = refs->next) + if (regexec (rx, refs->data, 0, NULL, 0) == 0) + return 1; + return 0; +} + +int mutt_is_list_recipient (int alladdr, ADDRESS *a1, ADDRESS *a2) +{ + for (; a1 ; a1 = a1->next) + if (alladdr ^ mutt_is_subscribed_list (a1)) + return (! alladdr); + for (; a2 ; a2 = a2->next) + if (alladdr ^ mutt_is_subscribed_list (a2)) + return (! alladdr); + return alladdr; +} + +int mutt_is_list_cc (int alladdr, ADDRESS *a1, ADDRESS *a2) +{ + for (; a1 ; a1 = a1->next) + if (alladdr ^ mutt_is_mail_list (a1)) + return (! alladdr); + for (; a2 ; a2 = a2->next) + if (alladdr ^ mutt_is_mail_list (a2)) + return (! alladdr); + return alladdr; +} + +static int match_user (int alladdr, ADDRESS *a1, ADDRESS *a2) +{ + for (; a1 ; a1 = a1->next) + if (alladdr ^ mutt_addr_is_user (a1)) + return (! alladdr); + for (; a2 ; a2 = a2->next) + if (alladdr ^ mutt_addr_is_user (a2)) + return (! alladdr); + return alladdr; +} + +/* flags + M_MATCH_FULL_ADDRESS match both personal and machine address */ +int +mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h) +{ + char buf[STRING]; + + switch (pat->op) + { + case M_AND: + return (pat->not ^ (perform_and (pat->child, flags, ctx, h) > 0)); + case M_OR: + return (pat->not ^ (perform_or (pat->child, flags, ctx, h) > 0)); + case M_ALL: + return (!pat->not); + case M_EXPIRED: + return (pat->not ^ h->expired); + case M_SUPERSEDED: + return (pat->not ^ h->superseded); + case M_FLAG: + return (pat->not ^ h->flagged); + case M_TAG: + return (pat->not ^ h->tagged); + case M_NEW: + return (pat->not ? h->old || h->read : !(h->old || h->read)); + case M_UNREAD: + return (pat->not ? h->read : !h->read); + case M_REPLIED: + return (pat->not ^ h->replied); + case M_OLD: + return (pat->not ? (!h->old || h->read) : (h->old && !h->read)); + case M_READ: + return (pat->not ^ h->read); + case M_DELETED: + return (pat->not ^ h->deleted); + case M_MESSAGE: + return (pat->not ^ (h->msgno >= pat->min - 1 && (pat->max == M_MAXRANGE || + h->msgno <= pat->max - 1))); + case M_DATE: + return (pat->not ^ (h->date_sent >= pat->min && h->date_sent <= pat->max)); + case M_DATE_RECEIVED: + return (pat->not ^ (h->received >= pat->min && h->received <= pat->max)); + case M_BODY: + case M_HEADER: + case M_WHOLE_MSG: + return (pat->not ^ msg_search (ctx, pat->rx, buf, sizeof (buf), pat->op, h->msgno)); + case M_SENDER: + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, + pat->alladdr, 1, h->env->sender)); + case M_FROM: + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, + pat->alladdr, 1, h->env->from)); + case M_TO: + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, + pat->alladdr, 1, h->env->to)); + case M_CC: + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, + pat->alladdr, 1, h->env->cc)); + case M_SUBJECT: + return (pat->not ^ (h->env->subject && regexec (pat->rx, h->env->subject, 0, NULL, 0) == 0)); + case M_ID: + return (pat->not ^ (h->env->message_id && regexec (pat->rx, h->env->message_id, 0, NULL, 0) == 0)); + case M_SCORE: + return (pat->not ^ (h->score >= pat->min && (pat->max == M_MAXRANGE || + h->score <= pat->max))); + case M_SIZE: + return (pat->not ^ (h->content->length >= pat->min && (pat->max == M_MAXRANGE || h->content->length <= pat->max))); + case M_REFERENCE: + return (pat->not ^ match_reference (pat->rx, h->env->references)); + case M_ADDRESS: + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, + pat->alladdr, 4, h->env->from, + h->env->sender, h->env->to, h->env->cc)); + case M_RECIPIENT: + return (pat->not ^ match_adrlist (pat->rx, flags & M_MATCH_FULL_ADDRESS, + pat->alladdr, 2, h->env->to, h->env->cc)); + case M_LIST: + return (pat->not ^ mutt_is_list_recipient (pat->alladdr, h->env->to, h->env->cc)); + case M_PERSONAL_RECIP: + return (pat->not ^ match_user (pat->alladdr, h->env->to, h->env->cc)); + case M_PERSONAL_FROM: + return (pat->not ^ match_user (pat->alladdr, h->env->from, NULL)); + case M_COLLAPSED: + return (pat->not ^ (h->collapsed && h->num_hidden > 1)); + case M_CRYPT_SIGN: + if (!WithCrypto) + break; + return (pat->not ^ ((h->security & SIGN) ? 1 : 0)); + case M_CRYPT_VERIFIED: + if (!WithCrypto) + break; + return (pat->not ^ ((h->security & GOODSIGN) ? 1 : 0)); + case M_CRYPT_ENCRYPT: + if (!WithCrypto) + break; + return (pat->not ^ ((h->security & ENCRYPT) ? 1 : 0)); + case M_PGP_KEY: + if (!(WithCrypto & APPLICATION_PGP)) + break; + return (pat->not ^ ((h->security & APPLICATION_PGP) && (h->security & PGPKEY))); + case M_XLABEL: + return (pat->not ^ (h->env->x_label && regexec (pat->rx, h->env->x_label, 0, NULL, 0) == 0)); + case M_DUPLICATED: + return (pat->not ^ (h->thread && h->thread->duplicate_thread)); +#ifdef USE_NNTP + case M_NEWSGROUPS: + return (pat->not ^ (h->env->newsgroups && regexec (pat->rx, h->env->newsgroups, 0, NULL, 0) == 0)); +#endif + } + mutt_error (_("error: unknown op %d (report this error)."), pat->op); + return (-1); +} + +static void quote_simple(char *tmp, size_t len, const char *p) +{ + int i = 0; + + tmp[i++] = '"'; + while (*p && i < len - 3) + { + if (*p == '\\' || *p == '"') + tmp[i++] = '\\'; + tmp[i++] = *p++; + } + tmp[i++] = '"'; + tmp[i] = 0; +} + +/* convert a simple search into a real request */ +void mutt_check_simple (char *s, size_t len, const char *simple) +{ + char tmp[LONG_STRING]; + + /* XXX - is ascii_strcasecmp() right here, or should we use locale's + * equivalences? + */ + + if (!strchr (s, '~')) /* yup, so spoof a real request */ + { + /* convert old tokens into the new format */ + if (ascii_strcasecmp ("all", s) == 0 || + !mutt_strcmp ("^", s) || !mutt_strcmp (".", s)) /* ~A is more efficient */ + strfcpy (s, "~A", len); + else if (ascii_strcasecmp ("del", s) == 0) + strfcpy (s, "~D", len); + else if (ascii_strcasecmp ("flag", s) == 0) + strfcpy (s, "~F", len); + else if (ascii_strcasecmp ("new", s) == 0) + strfcpy (s, "~N", len); + else if (ascii_strcasecmp ("old", s) == 0) + strfcpy (s, "~O", len); + else if (ascii_strcasecmp ("repl", s) == 0) + strfcpy (s, "~Q", len); + else if (ascii_strcasecmp ("read", s) == 0) + strfcpy (s, "~R", len); + else if (ascii_strcasecmp ("tag", s) == 0) + strfcpy (s, "~T", len); + else if (ascii_strcasecmp ("unread", s) == 0) + strfcpy (s, "~U", len); + else + { + quote_simple (tmp, sizeof(tmp), s); + mutt_expand_fmt (s, len, simple, tmp); + } + } +} + +int mutt_pattern_func (int op, char *prompt) +{ + pattern_t *pat; + char buf[LONG_STRING] = "", *simple, error[STRING]; + BUFFER err; + int i; + + strfcpy (buf, NONULL (Context->pattern), sizeof (buf)); + if (prompt || op != M_LIMIT) + if (mutt_get_field (prompt, buf, sizeof (buf), M_PATTERN | M_CLEAR) != 0 || !buf[0]) + return (-1); + + mutt_message _("Compiling search pattern..."); + + simple = safe_strdup (buf); + mutt_check_simple (buf, sizeof (buf), NONULL (SimpleSearch)); + + err.data = error; + err.dsize = sizeof (error); + if ((pat = mutt_pattern_comp (buf, M_FULL_MSG, &err)) == NULL) + { + FREE (&simple); + mutt_error ("%s", err.data); + return (-1); + } + + mutt_message _("Executing command on matching messages..."); + +#define THIS_BODY Context->hdrs[i]->content + + if (op == M_LIMIT) + { + Context->vcount = 0; + Context->vsize = 0; + Context->collapsed = 0; + + for (i = 0; i < Context->msgcount; i++) + { + /* new limit pattern implicitly uncollapses all threads */ + Context->hdrs[i]->virtual = -1; + Context->hdrs[i]->limited = 0; + Context->hdrs[i]->collapsed = 0; + Context->hdrs[i]->num_hidden = 0; + if (mutt_pattern_exec (pat, M_MATCH_FULL_ADDRESS, Context, Context->hdrs[i])) + { + Context->hdrs[i]->virtual = Context->vcount; + Context->hdrs[i]->limited = 1; + Context->v2r[Context->vcount] = i; + Context->vcount++; + Context->vsize+=THIS_BODY->length + THIS_BODY->offset - + THIS_BODY->hdr_offset; + } + } + } + else + { + for (i = 0; i < Context->vcount; i++) + { + if (mutt_pattern_exec (pat, M_MATCH_FULL_ADDRESS, Context, Context->hdrs[Context->v2r[i]])) + { + switch (op) + { + case M_UNDELETE: + mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_PURGED, + 0); + case M_DELETE: + mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_DELETE, + (op == M_DELETE)); + break; + case M_TAG: + case M_UNTAG: + mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_TAG, + (op == M_TAG)); + break; + } + } + } + } + +#undef THIS_BODY + + mutt_clear_error (); + + if (op == M_LIMIT) + { + FREE (&Context->pattern); + if (Context->limit_pattern) + mutt_pattern_free (&Context->limit_pattern); + if (!Context->vcount) + { + mutt_error _("No messages matched criteria."); +#if 0 + Context->vcount = Context->msgcount; + /* restore full display */ + for (i = 0; i < Context->msgcount; i++) + { + Context->hdrs[i]->virtual = i; + Context->v2r[i] = i; + } +#endif + } + else if (mutt_strncmp (buf, "~A", 2) != 0) + { + Context->pattern = simple; + simple = NULL; /* don't clobber it */ + Context->limit_pattern = mutt_pattern_comp (buf, M_FULL_MSG, &err); + } + } + FREE (&simple); + mutt_pattern_free (&pat); + return 0; +} + +int mutt_search_command (int cur, int op) +{ + int i, j; + char buf[STRING]; + char temp[LONG_STRING]; + char error[STRING]; + BUFFER err; + int incr; + HEADER *h; + + if (op != OP_SEARCH_NEXT && op != OP_SEARCH_OPPOSITE) + { + strfcpy (buf, LastSearch, sizeof (buf)); + if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") : + _("Reverse search for: "), buf, sizeof (buf), + M_CLEAR | M_PATTERN) != 0 || !buf[0]) + return (-1); + + if (op == OP_SEARCH) + unset_option (OPTSEARCHREVERSE); + else + set_option (OPTSEARCHREVERSE); + + /* compare the *expanded* version of the search pattern in case + $simple_search has changed while we were searching */ + strfcpy (temp, buf, sizeof (temp)); + mutt_check_simple (temp, sizeof (temp), NONULL (SimpleSearch)); + + if (!SearchPattern || mutt_strcmp (temp, LastSearchExpn)) + { + set_option (OPTSEARCHINVALID); + strfcpy (LastSearch, buf, sizeof (LastSearch)); + mutt_message _("Compiling search pattern..."); + mutt_pattern_free (&SearchPattern); + err.data = error; + err.dsize = sizeof (error); + if ((SearchPattern = mutt_pattern_comp (temp, M_FULL_MSG, &err)) == NULL) + { + mutt_error ("%s", error); + return (-1); + } + mutt_clear_error (); + } + } + else if (!SearchPattern) + { + mutt_error _("No search pattern."); + return (-1); + } + + if (option (OPTSEARCHINVALID)) + { + for (i = 0; i < Context->msgcount; i++) + Context->hdrs[i]->searched = 0; + unset_option (OPTSEARCHINVALID); + } + + incr = (option (OPTSEARCHREVERSE)) ? -1 : 1; + if (op == OP_SEARCH_OPPOSITE) + incr = -incr; + + for (i = cur + incr, j = 0 ; j != Context->vcount; j++) + { + if (i > Context->vcount - 1) + { + i = 0; + if (option (OPTWRAPSEARCH)) + mutt_message _("Search wrapped to top."); + else + { + mutt_message _("Search hit bottom without finding match"); + return (-1); + } + } + else if (i < 0) + { + i = Context->vcount - 1; + if (option (OPTWRAPSEARCH)) + mutt_message _("Search wrapped to bottom."); + else + { + mutt_message _("Search hit top without finding match"); + return (-1); + } + } + + h = Context->hdrs[Context->v2r[i]]; + if (h->searched) + { + /* if we've already evaulated this message, use the cached value */ + if (h->matched) + return i; + } + else + { + /* remember that we've already searched this message */ + h->searched = 1; + if ((h->matched = (mutt_pattern_exec (SearchPattern, M_MATCH_FULL_ADDRESS, Context, h) > 0))) + return i; + } + + if (SigInt) + { + mutt_error _("Search interrupted."); + SigInt = 0; + return (-1); + } + + i += incr; + } + + mutt_error _("Not found."); + return (-1); +} diff --git a/pgp.c b/pgp.c new file mode 100644 index 0000000..1a4a2ec --- /dev/null +++ b/pgp.c @@ -0,0 +1,1432 @@ +/* + * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org> + * Copyright (c) 1998,1999 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * This file contains all of the PGP routines necessary to sign, encrypt, + * verify and decrypt PGP messages in either the new PGP/MIME format, or + * in the older Application/Pgp format. It also contains some code to + * cache the user's passphrase for repeat use when decrypting or signing + * a message. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "pgp.h" +#include "mime.h" +#include "copy.h" + +#include <sys/wait.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/stat.h> +#include <errno.h> +#include <ctype.h> + +#ifdef HAVE_LOCALE_H +#include <locale.h> +#endif + +#ifdef HAVE_SYS_TIME_H +# include <sys/time.h> +#endif + +#ifdef HAVE_SYS_RESOURCE_H +# include <sys/resource.h> +#endif + +#ifdef CRYPT_BACKEND_CLASSIC_PGP + +#include "mutt_crypt.h" + + + +char PgpPass[STRING]; +time_t PgpExptime = 0; /* when does the cached passphrase expire? */ + +void pgp_void_passphrase (void) +{ + memset (PgpPass, 0, sizeof (PgpPass)); + PgpExptime = 0; +} + + +void pgp_forget_passphrase (void) +{ + pgp_void_passphrase (); + mutt_message _("PGP passphrase forgotten."); +} + +int pgp_use_gpg_agent (void) +{ + return option (OPTUSEGPGAGENT) && getenv ("GPG_TTY") && getenv ("GPG_AGENT_INFO"); +} + +char *pgp_keyid(pgp_key_t k) +{ + if((k->flags & KEYFLAG_SUBKEY) && k->parent && option(OPTPGPIGNORESUB)) + k = k->parent; + + return _pgp_keyid(k); +} + +char *_pgp_keyid(pgp_key_t k) +{ + if(option(OPTPGPLONGIDS)) + return k->keyid; + else + return (k->keyid + 8); +} + +/* ---------------------------------------------------------------------------- + * Routines for handing PGP input. + */ + + + +/* Copy PGP output messages and look for signs of a good signature */ + +static int pgp_copy_checksig (FILE *fpin, FILE *fpout) +{ + int rv = -1; + + if (PgpGoodSign.pattern) + { + char *line = NULL; + int lineno = 0; + size_t linelen; + + while ((line = mutt_read_line (line, &linelen, fpin, &lineno)) != NULL) + { + if (regexec (PgpGoodSign.rx, line, 0, NULL, 0) == 0) + { + dprint (2, (debugfile, "pgp_copy_checksig: \"%s\" matches regexp.\n", + line)); + rv = 0; + } + else + dprint (2, (debugfile, "pgp_copy_checksig: \"%s\" doesn't match regexp.\n", + line)); + + fputs (line, fpout); + fputc ('\n', fpout); + } + FREE (&line); + } + else + { + dprint (2, (debugfile, "pgp_copy_checksig: No pattern.\n")); + mutt_copy_stream (fpin, fpout); + rv = 1; + } + + return rv; +} + +/* + * Copy a clearsigned message, and strip the signature and PGP's + * dash-escaping. + * + * XXX - charset handling: We assume that it is safe to do + * character set decoding first, dash decoding second here, while + * we do it the other way around in the main handler. + * + * (Note that we aren't worse than Outlook &c in this, and also + * note that we can successfully handle anything produced by any + * existing versions of mutt.) + */ + +static void pgp_copy_clearsigned (FILE *fpin, STATE *s, char *charset) +{ + char buf[HUGE_STRING]; + short complete, armor_header; + + FGETCONV *fc; + + rewind (fpin); + + fc = fgetconv_open (fpin, charset, Charset, M_ICONV_HOOK_FROM); + + for (complete = 1, armor_header = 1; + fgetconvs (buf, sizeof (buf), fc) != NULL; + complete = strchr (buf, '\n') != NULL) + { + if (!complete) + { + if (!armor_header) + state_puts (buf, s); + continue; + } + + if (mutt_strcmp (buf, "-----BEGIN PGP SIGNATURE-----\n") == 0) + break; + + if (armor_header) + { + if (buf[0] == '\n') + armor_header = 0; + continue; + } + + if (s->prefix) + state_puts (s->prefix, s); + + if (buf[0] == '-' && buf[1] == ' ') + state_puts (buf + 2, s); + else + state_puts (buf, s); + } + + fgetconv_close (&fc); +} + + +/* Support for the Application/PGP Content Type. */ + +void pgp_application_pgp_handler (BODY *m, STATE *s) +{ + int needpass = -1, pgp_keyblock = 0; + int clearsign = 0, rv, rc; + long start_pos = 0; + long bytes, last_pos, offset; + char buf[HUGE_STRING]; + char outfile[_POSIX_PATH_MAX]; + char tmpfname[_POSIX_PATH_MAX]; + FILE *pgpout = NULL, *pgpin = NULL, *pgperr = NULL; + FILE *tmpfp; + pid_t thepid; + + short maybe_goodsig = 1; + short have_any_sigs = 0; + + char body_charset[STRING]; + mutt_get_body_charset (body_charset, sizeof (body_charset), m); + + fseek (s->fpin, m->offset, 0); + last_pos = m->offset; + + for (bytes = m->length; bytes > 0;) + { + if (fgets (buf, sizeof (buf), s->fpin) == NULL) + break; + + offset = ftell (s->fpin); + bytes -= (offset - last_pos); /* don't rely on mutt_strlen(buf) */ + last_pos = offset; + + if (mutt_strncmp ("-----BEGIN PGP ", buf, 15) == 0) + { + clearsign = 0; + start_pos = last_pos; + + if (mutt_strcmp ("MESSAGE-----\n", buf + 15) == 0) + needpass = 1; + else if (mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0) + { + clearsign = 1; + needpass = 0; + } + else if (!option (OPTDONTHANDLEPGPKEYS) && + mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) + { + needpass = 0; + pgp_keyblock =1; + } + else + { + /* XXX - we may wish to recode here */ + if (s->prefix) + state_puts (s->prefix, s); + state_puts (buf, s); + continue; + } + + have_any_sigs = have_any_sigs || (clearsign && (s->flags & M_VERIFY)); + + /* Copy PGP material to temporary file */ + mutt_mktemp (tmpfname); + if ((tmpfp = safe_fopen (tmpfname, "w+")) == NULL) + { + mutt_perror (tmpfname); + return; + } + + fputs (buf, tmpfp); + while (bytes > 0 && fgets (buf, sizeof (buf) - 1, s->fpin) != NULL) + { + offset = ftell (s->fpin); + bytes -= (offset - last_pos); /* don't rely on mutt_strlen(buf) */ + last_pos = offset; + + fputs (buf, tmpfp); + + if ((needpass && mutt_strcmp ("-----END PGP MESSAGE-----\n", buf) == 0) || + (!needpass + && (mutt_strcmp ("-----END PGP SIGNATURE-----\n", buf) == 0 + || mutt_strcmp ("-----END PGP PUBLIC KEY BLOCK-----\n",buf) == 0))) + break; + } + + /* leave tmpfp open in case we still need it - but flush it! */ + fflush (tmpfp); + + + /* Invoke PGP if needed */ + if (!clearsign || (s->flags & M_VERIFY)) + { + mutt_mktemp (outfile); + if ((pgpout = safe_fopen (outfile, "w+")) == NULL) + { + mutt_perror (tmpfname); + return; + } + + if ((thepid = pgp_invoke_decode (&pgpin, NULL, &pgperr, -1, + fileno (pgpout), -1, tmpfname, + needpass)) == -1) + { + safe_fclose (&pgpout); + maybe_goodsig = 0; + pgpin = NULL; + pgperr = NULL; + state_attach_puts (_("[-- Error: unable to create PGP subprocess! --]\n"), s); + } + else /* PGP started successfully */ + { + if (needpass) + { + if (!pgp_valid_passphrase ()) pgp_void_passphrase(); + if (pgp_use_gpg_agent()) + *PgpPass = 0; + fprintf (pgpin, "%s\n", PgpPass); + } + + safe_fclose (&pgpin); + + if (s->flags & M_DISPLAY) + { + crypt_current_time (s, "PGP"); + rc = pgp_copy_checksig (pgperr, s->fpout); + } + + safe_fclose (&pgperr); + rv = mutt_wait_filter (thepid); + + if (s->flags & M_DISPLAY) + { + if (rc == 0) have_any_sigs = 1; + if (rc || rv) maybe_goodsig = 0; + + state_putc ('\n', s); + state_attach_puts (_("[-- End of PGP output --]\n\n"), s); + } + } + } + + + /* + * Now, copy cleartext to the screen. NOTE - we expect that PGP + * outputs utf-8 cleartext. This may not always be true, but it + * seems to be a reasonable guess. + */ + + if(s->flags & M_DISPLAY) + { + if (needpass) + state_attach_puts (_("[-- BEGIN PGP MESSAGE --]\n\n"), s); + else if (pgp_keyblock) + state_attach_puts (_("[-- BEGIN PGP PUBLIC KEY BLOCK --]\n"), s); + else + state_attach_puts (_("[-- BEGIN PGP SIGNED MESSAGE --]\n\n"), s); + } + + if (clearsign) + { + rewind (tmpfp); + if (tmpfp) + pgp_copy_clearsigned (tmpfp, s, body_charset); + } + else if (pgpout) + { + FGETCONV *fc; + int c; + rewind (pgpout); + state_set_prefix (s); + fc = fgetconv_open (pgpout, "utf-8", Charset, 0); + while ((c = fgetconv (fc)) != EOF) + state_prefix_putc (c, s); + fgetconv_close (&fc); + } + + if (s->flags & M_DISPLAY) + { + state_putc ('\n', s); + if (needpass) + state_attach_puts (_("[-- END PGP MESSAGE --]\n"), s); + else if (pgp_keyblock) + state_attach_puts (_("[-- END PGP PUBLIC KEY BLOCK --]\n"), s); + else + state_attach_puts (_("[-- END PGP SIGNED MESSAGE --]\n"), s); + } + + if (tmpfp) + { + safe_fclose (&tmpfp); + mutt_unlink (tmpfname); + } + if (pgpout) + { + safe_fclose (&pgpout); + mutt_unlink (outfile); + } + } + else + { + /* XXX - we may wish to recode here */ + if (s->prefix) + state_puts (s->prefix, s); + state_puts (buf, s); + } + } + + m->goodsig = (maybe_goodsig && have_any_sigs); + + if (needpass == -1) + { + state_attach_puts (_("[-- Error: could not find beginning of PGP message! --]\n\n"), s); + return; + } +} + +static int pgp_check_traditional_one_body (FILE *fp, BODY *b, int tagged_only) +{ + char tempfile[_POSIX_PATH_MAX]; + char buf[HUGE_STRING]; + FILE *tfp; + + short sgn = 0; + short enc = 0; + short key = 0; + + if (b->type != TYPETEXT) + return 0; + + if (tagged_only && !b->tagged) + return 0; + + mutt_mktemp (tempfile); + if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0) + { + unlink (tempfile); + return 0; + } + + if ((tfp = fopen (tempfile, "r")) == NULL) + { + unlink (tempfile); + return 0; + } + + while (fgets (buf, sizeof (buf), tfp)) + { + if (mutt_strncmp ("-----BEGIN PGP ", buf, 15) == 0) + { + if (mutt_strcmp ("MESSAGE-----\n", buf + 15) == 0) + enc = 1; + else if (mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15) == 0) + sgn = 1; + else if (mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15) == 0) + key = 1; + } + } + safe_fclose (&tfp); + unlink (tempfile); + + if (!enc && !sgn && !key) + return 0; + + /* fix the content type */ + + mutt_set_parameter ("format", "fixed", &b->parameter); + if (enc) + mutt_set_parameter ("x-action", "pgp-encrypted", &b->parameter); + else if (sgn) + mutt_set_parameter ("x-action", "pgp-signed", &b->parameter); + else if (key) + mutt_set_parameter ("x-action", "pgp-keys", &b->parameter); + + return 1; +} + +int pgp_check_traditional (FILE *fp, BODY *b, int tagged_only) +{ + int rv = 0; + int r; + for (; b; b = b->next) + { + if (is_multipart (b)) + rv = pgp_check_traditional (fp, b->parts, tagged_only) || rv; + else if (b->type == TYPETEXT) + { + if ((r = mutt_is_application_pgp (b))) + rv = rv || r; + else + rv = pgp_check_traditional_one_body (fp, b, tagged_only) || rv; + } + } + + return rv; +} + + + + + +int pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempfile) +{ + char sigfile[_POSIX_PATH_MAX], pgperrfile[_POSIX_PATH_MAX]; + FILE *fp, *pgpout, *pgperr; + pid_t thepid; + int badsig = -1; + int rv; + + snprintf (sigfile, sizeof (sigfile), "%s.asc", tempfile); + + if(!(fp = safe_fopen (sigfile, "w"))) + { + mutt_perror(sigfile); + return -1; + } + + fseek (s->fpin, sigbdy->offset, 0); + mutt_copy_bytes (s->fpin, fp, sigbdy->length); + fclose (fp); + + mutt_mktemp(pgperrfile); + if(!(pgperr = safe_fopen(pgperrfile, "w+"))) + { + mutt_perror(pgperrfile); + unlink(sigfile); + return -1; + } + + crypt_current_time (s, "PGP"); + + if((thepid = pgp_invoke_verify (NULL, &pgpout, NULL, + -1, -1, fileno(pgperr), + tempfile, sigfile)) != -1) + { + if (pgp_copy_checksig (pgpout, s->fpout) >= 0) + badsig = 0; + + + safe_fclose (&pgpout); + fflush (pgperr); + rewind (pgperr); + + if (pgp_copy_checksig (pgperr, s->fpout) >= 0) + badsig = 0; + + if ((rv = mutt_wait_filter (thepid))) + badsig = -1; + + dprint (1, (debugfile, "pgp_verify_one: mutt_wait_filter returned %d.\n", rv)); + } + + safe_fclose (&pgperr); + + state_attach_puts (_("[-- End of PGP output --]\n\n"), s); + + mutt_unlink (sigfile); + mutt_unlink (pgperrfile); + + dprint (1, (debugfile, "pgp_verify_one: returning %d.\n", badsig)); + + return badsig; +} + + +/* Extract pgp public keys from messages or attachments */ + +void pgp_extract_keys_from_messages (HEADER *h) +{ + int i; + char tempfname[_POSIX_PATH_MAX]; + FILE *fpout; + + if (h) + { + mutt_parse_mime_message (Context, h); + if(h->security & PGPENCRYPT && !pgp_valid_passphrase ()) + return; + } + + mutt_mktemp (tempfname); + if (!(fpout = safe_fopen (tempfname, "w"))) + { + mutt_perror (tempfname); + return; + } + + set_option (OPTDONTHANDLEPGPKEYS); + + if (!h) + { + for (i = 0; i < Context->vcount; i++) + { + if (Context->hdrs[Context->v2r[i]]->tagged) + { + mutt_parse_mime_message (Context, Context->hdrs[Context->v2r[i]]); + if (Context->hdrs[Context->v2r[i]]->security & PGPENCRYPT + && !pgp_valid_passphrase()) + { + fclose (fpout); + goto bailout; + } + mutt_copy_message (fpout, Context, Context->hdrs[Context->v2r[i]], + M_CM_DECODE|M_CM_CHARCONV, 0); + } + } + } + else + { + mutt_parse_mime_message (Context, h); + if (h->security & PGPENCRYPT && !pgp_valid_passphrase()) + { + fclose (fpout); + goto bailout; + } + mutt_copy_message (fpout, Context, h, M_CM_DECODE|M_CM_CHARCONV, 0); + } + + fclose (fpout); + mutt_endwin (NULL); + pgp_invoke_import (tempfname); + mutt_any_key_to_continue (NULL); + + bailout: + + mutt_unlink (tempfname); + unset_option (OPTDONTHANDLEPGPKEYS); + +} + +static void pgp_extract_keys_from_attachment (FILE *fp, BODY *top) +{ + STATE s; + FILE *tempfp; + char tempfname[_POSIX_PATH_MAX]; + + mutt_mktemp (tempfname); + if (!(tempfp = safe_fopen (tempfname, "w"))) + { + mutt_perror (tempfname); + return; + } + + memset (&s, 0, sizeof (STATE)); + + s.fpin = fp; + s.fpout = tempfp; + + mutt_body_handler (top, &s); + + fclose (tempfp); + + pgp_invoke_import (tempfname); + mutt_any_key_to_continue (NULL); + + mutt_unlink (tempfname); +} + +void pgp_extract_keys_from_attachment_list (FILE *fp, int tag, BODY *top) +{ + if(!fp) + { + mutt_error _("Internal error. Inform <roessler@does-not-exist.org>."); + return; + } + + mutt_endwin (NULL); + set_option(OPTDONTHANDLEPGPKEYS); + + for(; top; top = top->next) + { + if(!tag || top->tagged) + pgp_extract_keys_from_attachment (fp, top); + + if(!tag) + break; + } + + unset_option(OPTDONTHANDLEPGPKEYS); +} + +BODY *pgp_decrypt_part (BODY *a, STATE *s, FILE *fpout, BODY *p) +{ + char buf[LONG_STRING]; + FILE *pgpin, *pgpout, *pgperr, *pgptmp; + struct stat info; + BODY *tattach; + int len; + char pgperrfile[_POSIX_PATH_MAX]; + char pgptmpfile[_POSIX_PATH_MAX]; + pid_t thepid; + + mutt_mktemp (pgperrfile); + if ((pgperr = safe_fopen (pgperrfile, "w+")) == NULL) + { + mutt_perror (pgperrfile); + return NULL; + } + unlink (pgperrfile); + + mutt_mktemp (pgptmpfile); + if((pgptmp = safe_fopen (pgptmpfile, "w")) == NULL) + { + mutt_perror (pgptmpfile); + fclose(pgperr); + return NULL; + } + + /* Position the stream at the beginning of the body, and send the data to + * the temporary file. + */ + + fseek (s->fpin, a->offset, 0); + mutt_copy_bytes (s->fpin, pgptmp, a->length); + fclose (pgptmp); + + if ((thepid = pgp_invoke_decrypt (&pgpin, &pgpout, NULL, -1, -1, + fileno (pgperr), pgptmpfile)) == -1) + { + fclose (pgperr); + unlink (pgptmpfile); + if (s->flags & M_DISPLAY) + state_attach_puts (_("[-- Error: could not create a PGP subprocess! --]\n\n"), s); + return (NULL); + } + + /* send the PGP passphrase to the subprocess. Never do this if the + agent is active, because this might lead to a passphrase send as + the message. */ + if (!pgp_use_gpg_agent()) + fputs (PgpPass, pgpin); + fputc ('\n', pgpin); + fclose(pgpin); + + /* Read the output from PGP, and make sure to change CRLF to LF, otherwise + * read_mime_header has a hard time parsing the message. + */ + while (fgets (buf, sizeof (buf) - 1, pgpout) != NULL) + { + len = mutt_strlen (buf); + if (len > 1 && buf[len - 2] == '\r') + strcpy (buf + len - 2, "\n"); /* __STRCPY_CHECKED__ */ + fputs (buf, fpout); + } + + fclose (pgpout); + mutt_wait_filter (thepid); + mutt_unlink(pgptmpfile); + + if (s->flags & M_DISPLAY) + { + fflush (pgperr); + rewind (pgperr); + if (pgp_copy_checksig (pgperr, s->fpout) == 0 && p) + p->goodsig = 1; + state_attach_puts (_("[-- End of PGP output --]\n\n"), s); + } + fclose (pgperr); + + fflush (fpout); + rewind (fpout); + if ((tattach = mutt_read_mime_header (fpout, 0)) != NULL) + { + /* + * Need to set the length of this body part. + */ + fstat (fileno (fpout), &info); + tattach->length = info.st_size - tattach->offset; + + /* See if we need to recurse on this MIME part. */ + + mutt_parse_part (fpout, tattach); + } + + return (tattach); +} + +int pgp_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur) +{ + char tempfile[_POSIX_PATH_MAX]; + STATE s; + BODY *p = b; + + if(!mutt_is_multipart_encrypted(b)) + return -1; + + if(!b->parts || !b->parts->next) + return -1; + + b = b->parts->next; + + memset (&s, 0, sizeof (s)); + s.fpin = fpin; + mutt_mktemp (tempfile); + if ((*fpout = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + return (-1); + } + unlink (tempfile); + + *cur = pgp_decrypt_part (b, &s, *fpout, p); + + rewind (*fpout); + return (0); +} + +void pgp_encrypted_handler (BODY *a, STATE *s) +{ + char tempfile[_POSIX_PATH_MAX]; + FILE *fpout, *fpin; + BODY *tattach; + BODY *p = a; + + a = a->parts; + if (!a || a->type != TYPEAPPLICATION || !a->subtype || + ascii_strcasecmp ("pgp-encrypted", a->subtype) != 0 || + !a->next || a->next->type != TYPEAPPLICATION || !a->next->subtype || + ascii_strcasecmp ("octet-stream", a->next->subtype) != 0) + { + if (s->flags & M_DISPLAY) + state_attach_puts (_("[-- Error: malformed PGP/MIME message! --]\n\n"), s); + return; + } + + /* + * Move forward to the application/pgp-encrypted body. + */ + a = a->next; + + mutt_mktemp (tempfile); + if ((fpout = safe_fopen (tempfile, "w+")) == NULL) + { + if (s->flags & M_DISPLAY) + state_attach_puts (_("[-- Error: could not create temporary file! --]\n"), s); + return; + } + + if (s->flags & M_DISPLAY) crypt_current_time (s, "PGP"); + + if ((tattach = pgp_decrypt_part (a, s, fpout, p)) != NULL) + { + if (s->flags & M_DISPLAY) + state_attach_puts (_("[-- The following data is PGP/MIME encrypted --]\n\n"), s); + + fpin = s->fpin; + s->fpin = fpout; + mutt_body_handler (tattach, s); + s->fpin = fpin; + + /* + * if a multipart/signed is the _only_ sub-part of a + * multipart/encrypted, cache signature verification + * status. + * + */ + + if (mutt_is_multipart_signed (tattach) && !tattach->next) + p->goodsig |= tattach->goodsig; + + if (s->flags & M_DISPLAY) + { + state_puts ("\n", s); + state_attach_puts (_("[-- End of PGP/MIME encrypted data --]\n"), s); + } + + mutt_free_body (&tattach); + } + + fclose (fpout); + mutt_unlink(tempfile); +} + +/* ---------------------------------------------------------------------------- + * Routines for sending PGP/MIME messages. + */ + + +BODY *pgp_sign_message (BODY *a) +{ + BODY *t; + char buffer[LONG_STRING]; + char sigfile[_POSIX_PATH_MAX], signedfile[_POSIX_PATH_MAX]; + FILE *pgpin, *pgpout, *pgperr, *fp, *sfp; + int err = 0; + int empty = 1; + pid_t thepid; + + convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */ + + mutt_mktemp (sigfile); + if ((fp = safe_fopen (sigfile, "w")) == NULL) + { + return (NULL); + } + + mutt_mktemp (signedfile); + if ((sfp = safe_fopen(signedfile, "w")) == NULL) + { + mutt_perror(signedfile); + fclose(fp); + unlink(sigfile); + return NULL; + } + + mutt_write_mime_header (a, sfp); + fputc ('\n', sfp); + mutt_write_mime_body (a, sfp); + fclose(sfp); + + if ((thepid = pgp_invoke_sign (&pgpin, &pgpout, &pgperr, + -1, -1, -1, signedfile)) == -1) + { + mutt_perror _("Can't open PGP subprocess!"); + fclose(fp); + unlink(sigfile); + unlink(signedfile); + return NULL; + } + + if (!pgp_use_gpg_agent()) + fputs(PgpPass, pgpin); + fputc('\n', pgpin); + fclose(pgpin); + + /* + * Read back the PGP signature. Also, change MESSAGE=>SIGNATURE as + * recommended for future releases of PGP. + */ + while (fgets (buffer, sizeof (buffer) - 1, pgpout) != NULL) + { + if (mutt_strcmp ("-----BEGIN PGP MESSAGE-----\n", buffer) == 0) + fputs ("-----BEGIN PGP SIGNATURE-----\n", fp); + else if (mutt_strcmp("-----END PGP MESSAGE-----\n", buffer) == 0) + fputs ("-----END PGP SIGNATURE-----\n", fp); + else + fputs (buffer, fp); + empty = 0; /* got some output, so we're ok */ + } + + /* check for errors from PGP */ + err = 0; + while (fgets (buffer, sizeof (buffer) - 1, pgperr) != NULL) + { + err = 1; + fputs (buffer, stdout); + } + + if(mutt_wait_filter (thepid) && option(OPTPGPCHECKEXIT)) + empty=1; + + fclose (pgperr); + fclose (pgpout); + unlink (signedfile); + + if (fclose (fp) != 0) + { + mutt_perror ("fclose"); + unlink (sigfile); + return (NULL); + } + + if (err) + { + pgp_void_passphrase(); + mutt_any_key_to_continue (NULL); + } + + if (empty) + { + unlink (sigfile); + return (NULL); /* fatal error while signing */ + } + + t = mutt_new_body (); + t->type = TYPEMULTIPART; + t->subtype = safe_strdup ("signed"); + t->encoding = ENC7BIT; + t->use_disp = 0; + t->disposition = DISPINLINE; + + mutt_generate_boundary (&t->parameter); + mutt_set_parameter ("protocol", "application/pgp-signature", &t->parameter); + mutt_set_parameter ("micalg", pgp_micalg (sigfile), &t->parameter); + + t->parts = a; + a = t; + + t->parts->next = mutt_new_body (); + t = t->parts->next; + t->type = TYPEAPPLICATION; + t->subtype = safe_strdup ("pgp-signature"); + t->filename = safe_strdup (sigfile); + t->use_disp = 0; + t->disposition = DISPINLINE; + t->encoding = ENC7BIT; + t->unlink = 1; /* ok to remove this file after sending. */ + + return (a); +} + +static short is_numerical_keyid (const char *s) +{ + /* or should we require the "0x"? */ + if (strncmp (s, "0x", 2) == 0) + s += 2; + if (strlen (s) % 8) + return 0; + while (*s) + if (strchr ("0123456789ABCDEFabcdef", *s++) == NULL) + return 0; + + return 1; +} + +/* This routine attempts to find the keyids of the recipients of a message. + * It returns NULL if any of the keys can not be found. + */ +char *pgp_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc) +{ + char *keyID, *keylist = NULL, *t; + size_t keylist_size = 0; + size_t keylist_used = 0; + ADDRESS *tmp = NULL, *addr = NULL; + ADDRESS **last = &tmp; + ADDRESS *p, *q; + int i; + pgp_key_t k_info = NULL, key = NULL; + + const char *fqdn = mutt_fqdn (1); + + for (i = 0; i < 3; i++) + { + switch (i) + { + case 0: p = to; break; + case 1: p = cc; break; + case 2: p = bcc; break; + default: abort (); + } + + *last = rfc822_cpy_adr (p); + while (*last) + last = &((*last)->next); + } + + if (fqdn) + rfc822_qualify (tmp, fqdn); + + tmp = mutt_remove_duplicates (tmp); + + for (p = tmp; p ; p = p->next) + { + char buf[LONG_STRING]; + + q = p; + k_info = NULL; + + if ((keyID = mutt_crypt_hook (p)) != NULL) + { + int r; + snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox); + if ((r = mutt_yesorno (buf, M_YES)) == M_YES) + { + if (is_numerical_keyid (keyID)) + { + if (strncmp (keyID, "0x", 2) == 0) + keyID += 2; + goto bypass_selection; /* you don't see this. */ + } + + /* check for e-mail address */ + if ((t = strchr (keyID, '@')) && + (addr = rfc822_parse_adrlist (NULL, keyID))) + { + if (fqdn) rfc822_qualify (addr, fqdn); + q = addr; + } + else + k_info = pgp_getkeybystr (keyID, KEYFLAG_CANENCRYPT, PGP_PUBRING); + } + else if (r == -1) + { + FREE (&keylist); + rfc822_free_address (&tmp); + rfc822_free_address (&addr); + return NULL; + } + } + + if (k_info == NULL) + pgp_invoke_getkeys (q); + + if (k_info == NULL && (k_info = pgp_getkeybyaddr (q, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL) + { + snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox); + + if ((key = pgp_ask_for_key (buf, q->mailbox, + KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL) + { + FREE (&keylist); + rfc822_free_address (&tmp); + rfc822_free_address (&addr); + return NULL; + } + } + else + key = k_info; + + keyID = pgp_keyid (key); + + bypass_selection: + keylist_size += mutt_strlen (keyID) + 4; + safe_realloc (&keylist, keylist_size); + sprintf (keylist + keylist_used, "%s0x%s", keylist_used ? " " : "", /* __SPRINTF_CHECKED__ */ + keyID); + keylist_used = mutt_strlen (keylist); + + pgp_free_key (&key); + rfc822_free_address (&addr); + + } + rfc822_free_address (&tmp); + return (keylist); +} + +/* Warning: "a" is no longer freed in this routine, you need + * to free it later. This is necessary for $fcc_attach. */ + +BODY *pgp_encrypt_message (BODY *a, char *keylist, int sign) +{ + char buf[LONG_STRING]; + char tempfile[_POSIX_PATH_MAX], pgperrfile[_POSIX_PATH_MAX]; + char pgpinfile[_POSIX_PATH_MAX]; + FILE *pgpin, *pgperr, *fpout, *fptmp; + BODY *t; + int err = 0; + int empty = 0; + pid_t thepid; + + mutt_mktemp (tempfile); + if ((fpout = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + return (NULL); + } + + mutt_mktemp (pgperrfile); + if ((pgperr = safe_fopen (pgperrfile, "w+")) == NULL) + { + mutt_perror (pgperrfile); + unlink(tempfile); + fclose(fpout); + return NULL; + } + unlink (pgperrfile); + + mutt_mktemp(pgpinfile); + if((fptmp = safe_fopen(pgpinfile, "w")) == NULL) + { + mutt_perror(pgpinfile); + unlink(tempfile); + fclose(fpout); + fclose(pgperr); + return NULL; + } + + if (sign) + convert_to_7bit (a); + + mutt_write_mime_header (a, fptmp); + fputc ('\n', fptmp); + mutt_write_mime_body (a, fptmp); + fclose(fptmp); + + if ((thepid = pgp_invoke_encrypt (&pgpin, NULL, NULL, -1, + fileno (fpout), fileno (pgperr), + pgpinfile, keylist, sign)) == -1) + { + fclose (pgperr); + unlink(pgpinfile); + return (NULL); + } + + if (sign) + { + if (!pgp_use_gpg_agent()) + fputs (PgpPass, pgpin); + fputc ('\n', pgpin); + } + fclose(pgpin); + + if(mutt_wait_filter (thepid) && option(OPTPGPCHECKEXIT)) + empty=1; + + unlink(pgpinfile); + + fflush (fpout); + rewind (fpout); + if(!empty) + empty = (fgetc (fpout) == EOF); + fclose (fpout); + + fflush (pgperr); + rewind (pgperr); + while (fgets (buf, sizeof (buf) - 1, pgperr) != NULL) + { + err = 1; + fputs (buf, stdout); + } + fclose (pgperr); + + /* pause if there is any error output from PGP */ + if (err) + mutt_any_key_to_continue (NULL); + + if (empty) + { + /* fatal error while trying to encrypt message */ + unlink (tempfile); + return (NULL); + } + + t = mutt_new_body (); + t->type = TYPEMULTIPART; + t->subtype = safe_strdup ("encrypted"); + t->encoding = ENC7BIT; + t->use_disp = 0; + t->disposition = DISPINLINE; + + mutt_generate_boundary(&t->parameter); + mutt_set_parameter("protocol", "application/pgp-encrypted", &t->parameter); + + t->parts = mutt_new_body (); + t->parts->type = TYPEAPPLICATION; + t->parts->subtype = safe_strdup ("pgp-encrypted"); + t->parts->encoding = ENC7BIT; + + t->parts->next = mutt_new_body (); + t->parts->next->type = TYPEAPPLICATION; + t->parts->next->subtype = safe_strdup ("octet-stream"); + t->parts->next->encoding = ENC7BIT; + t->parts->next->filename = safe_strdup (tempfile); + t->parts->next->use_disp = 1; + t->parts->next->disposition = DISPINLINE; + t->parts->next->unlink = 1; /* delete after sending the message */ + t->parts->next->d_filename = safe_strdup ("msg.asc"); /* non pgp/mime can save */ + + return (t); +} + +BODY *pgp_traditional_encryptsign (BODY *a, int flags, char *keylist) +{ + BODY *b; + + char pgpoutfile[_POSIX_PATH_MAX]; + char pgperrfile[_POSIX_PATH_MAX]; + char pgpinfile[_POSIX_PATH_MAX]; + + char body_charset[STRING]; + char *from_charset; + const char *send_charset; + + FILE *pgpout = NULL, *pgperr = NULL, *pgpin = NULL; + FILE *fp; + + int empty = 0; + int err; + + char buff[STRING]; + + pid_t thepid; + + if (a->type != TYPETEXT) + return NULL; + if (ascii_strcasecmp (a->subtype, "plain")) + return NULL; + + if ((fp = fopen (a->filename, "r")) == NULL) + { + mutt_perror (a->filename); + return NULL; + } + + mutt_mktemp (pgpinfile); + if ((pgpin = safe_fopen (pgpinfile, "w")) == NULL) + { + mutt_perror (pgpinfile); + fclose (fp); + return NULL; + } + + /* The following code is really correct: If noconv is set, + * a's charset parameter contains the on-disk character set, and + * we have to convert from that to utf-8. If noconv is not set, + * we have to convert from $charset to utf-8. + */ + + mutt_get_body_charset (body_charset, sizeof (body_charset), a); + if (a->noconv) + from_charset = body_charset; + else + from_charset = Charset; + + if (!mutt_is_us_ascii (body_charset)) + { + int c; + FGETCONV *fc; + + if (flags & ENCRYPT) + send_charset = "us-ascii"; + else + send_charset = "utf-8"; + + fc = fgetconv_open (fp, from_charset, "utf-8", M_ICONV_HOOK_FROM); + while ((c = fgetconv (fc)) != EOF) + fputc (c, pgpin); + + fgetconv_close (&fc); + } + else + { + send_charset = "us-ascii"; + mutt_copy_stream (fp, pgpin); + } + safe_fclose (&fp); + fclose (pgpin); + + mutt_mktemp (pgpoutfile); + mutt_mktemp (pgperrfile); + if ((pgpout = safe_fopen (pgpoutfile, "w+")) == NULL || + (pgperr = safe_fopen (pgperrfile, "w+")) == NULL) + { + mutt_perror (pgpout ? pgperrfile : pgpoutfile); + unlink (pgpinfile); + if (pgpout) + { + fclose (pgpout); + unlink (pgpoutfile); + } + return NULL; + } + + unlink (pgperrfile); + + if ((thepid = pgp_invoke_traditional (&pgpin, NULL, NULL, + -1, fileno (pgpout), fileno (pgperr), + pgpinfile, keylist, flags)) == -1) + { + mutt_perror _("Can't invoke PGP"); + fclose (pgpout); + fclose (pgperr); + mutt_unlink (pgpinfile); + unlink (pgpoutfile); + return NULL; + } + + if (pgp_use_gpg_agent()) + *PgpPass = 0; + if (flags & SIGN) + fprintf (pgpin, "%s\n", PgpPass); + fclose (pgpin); + + if(mutt_wait_filter (thepid) && option(OPTPGPCHECKEXIT)) + empty=1; + + mutt_unlink (pgpinfile); + + fflush (pgpout); + fflush (pgperr); + + rewind (pgpout); + rewind (pgperr); + + if(!empty) + empty = (fgetc (pgpout) == EOF); + fclose (pgpout); + + err = 0; + + while (fgets (buff, sizeof (buff), pgperr)) + { + err = 1; + fputs (buff, stdout); + } + + fclose (pgperr); + + if (err) + mutt_any_key_to_continue (NULL); + + if (empty) + { + unlink (pgpoutfile); + return NULL; + } + + b = mutt_new_body (); + + b->encoding = ENC7BIT; + + b->type = TYPETEXT; + b->subtype = safe_strdup ("plain"); + + mutt_set_parameter ("x-action", flags & ENCRYPT ? "pgp-encrypted" : "pgp-signed", + &b->parameter); + mutt_set_parameter ("charset", send_charset, &b->parameter); + + b->filename = safe_strdup (pgpoutfile); + +#if 0 + /* The following is intended to give a clue to some completely brain-dead + * "mail environments" which are typically used by large corporations. + */ + + b->d_filename = safe_strdup ("msg.pgp"); + b->use_disp = 1; + +#endif + + b->disposition = DISPINLINE; + b->unlink = 1; + + b->noconv = 1; + b->use_disp = 0; + + if (!(flags & ENCRYPT)) + b->encoding = a->encoding; + + return b; +} + +#endif /* CRYPT_BACKEND_CLASSIC_PGP */ diff --git a/pgp.h b/pgp.h new file mode 100644 index 0000000..5c69665 --- /dev/null +++ b/pgp.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifdef CRYPT_BACKEND_CLASSIC_PGP + +#include "mutt_crypt.h" +#include "pgplib.h" + + +/* prototypes */ + +int pgp_use_gpg_agent(void); + +int pgp_check_traditional (FILE *, BODY *, int); +BODY *pgp_decrypt_part (BODY *, STATE *, FILE *, BODY *); +BODY *pgp_make_key_attachment (char *); +const char *pgp_micalg (const char *fname); + +char *_pgp_keyid (pgp_key_t); +char *pgp_keyid (pgp_key_t); + + +int mutt_check_pgp (HEADER * h); + +int pgp_decrypt_mime (FILE *, FILE **, BODY *, BODY **); + +/* int pgp_string_matches_hint (const char *s, LIST * hints); */ + +#define pgp_valid_passphrase() crypt_valid_passphrase(APPLICATION_PGP) + +/* pgp_key_t gpg_get_candidates (struct pgp_vinfo *, pgp_ring_t, LIST *); */ +pgp_key_t pgp_ask_for_key (char *, char *, short, pgp_ring_t); +pgp_key_t pgp_get_candidates (pgp_ring_t, LIST *); +pgp_key_t pgp_getkeybyaddr (ADDRESS *, short, pgp_ring_t); +pgp_key_t pgp_getkeybystr (char *, short, pgp_ring_t); + +char *pgp_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc); + +void pgp_forget_passphrase (void); +void pgp_application_pgp_handler (BODY *, STATE *); +void pgp_encrypted_handler (BODY *, STATE *); +void pgp_extract_keys_from_attachment_list (FILE * fp, int tag, BODY * top); +void pgp_void_passphrase (void); + + + + +/* The PGP invocation interface - not really beautiful. */ + +pid_t pgp_invoke_decode (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, short need_passphrase); +pid_t pgp_invoke_verify (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, const char *sig_fname); +pid_t pgp_invoke_decrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname); +pid_t pgp_invoke_sign (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname); +pid_t pgp_invoke_encrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, const char *uids, int sign); +pid_t pgp_invoke_export (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *uids); +pid_t pgp_invoke_verify_key (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *uids); +pid_t pgp_invoke_list_keys (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + pgp_ring_t keyring, LIST *hints); +pid_t pgp_invoke_traditional (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, const char *uids, int flags); + + +void pgp_invoke_import (const char *fname); +void pgp_invoke_getkeys (ADDRESS *); + + +/* private ? */ +int pgp_verify_one (BODY *, STATE *, const char *); +BODY *pgp_traditional_encryptsign (BODY *, int, char *); +BODY *pgp_encrypt_message (BODY *, char *, int); +BODY *pgp_sign_message (BODY *); + + +#endif /* CRYPT_BACKEND_CLASSIC_PGP */ diff --git a/pgpewrap.c b/pgpewrap.c new file mode 100644 index 0000000..d889483 --- /dev/null +++ b/pgpewrap.c @@ -0,0 +1,53 @@ +/* + * C version by Wessel Dankers <wsl@fruit.eu.org> + * + * This code is in the public domain. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +int main(int argc, char **argv) { + char **opts, **opt, *pfx; + int i; + + opts = malloc((2 * argc + 1) * sizeof (* opts)); /* __MEM_CHECKED__ */ + if(!opts) { + perror(argv[0]); + exit(2); + } + + if (argc < 2) + { + fprintf (stderr, + "Command line usage: %s [flags] -- prefix [recipients]\n", + argv[0]); + return 1; + } + + opt = opts; + *opt++ = argv[1]; + pfx = NULL; + + for(i = 2; i < argc; ) { + if(!strcmp(argv[i], "--")) { + i += 2; + if(i > argc) { + fprintf(stderr, "Command line usage: %s [flags] -- prefix [recipients]\n", argv[0]); + return 1; + } + pfx = argv[i-1]; + } + if(pfx) + *opt++ = pfx; + *opt++ = argv[i++]; + } + *opt = NULL; + + execvp(opts[0], opts); + perror(argv[0]); + return 2; +} diff --git a/pgpinvoke.c b/pgpinvoke.c new file mode 100644 index 0000000..8bbc4f7 --- /dev/null +++ b/pgpinvoke.c @@ -0,0 +1,351 @@ +/* + * Copyright (C) 1997-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* This file contains the new pgp invocation code. Note that this + * is almost entirely format based. + */ + +#include <sys/types.h> +#include <sys/stat.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <time.h> + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_idna.h" +#include "pgp.h" +#include "rfc822.h" + +/* + * The actual command line formatter. + */ + +struct pgp_command_context { + short need_passphrase; /* %p */ + const char *fname; /* %f */ + const char *sig_fname; /* %s */ + const char *signas; /* %a */ + const char *ids; /* %r */ +}; + + +const char *_mutt_fmt_pgp_command (char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags) +{ + char fmt[16]; + struct pgp_command_context *cctx = (struct pgp_command_context *) data; + int optional = (flags & M_FORMAT_OPTIONAL); + + switch (op) + { + case 'r': + { + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->ids)); + } + else if (!cctx->ids) + optional = 0; + break; + } + + case 'a': + { + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->signas)); + } + else if (!cctx->signas) + optional = 0; + break; + } + + case 's': + { + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->sig_fname)); + } + else if (!cctx->sig_fname) + optional = 0; + break; + } + + case 'f': + { + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->fname)); + } + else if (!cctx->fname) + optional = 0; + break; + } + + case 'p': + { + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, cctx->need_passphrase ? "PGPPASSFD=0" : ""); + } + else if (!cctx->need_passphrase) + optional = 0; + break; + } + default: + { + *dest = '\0'; + break; + } + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_pgp_command, data, 0); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_pgp_command, data, 0); + + return (src); +} + +void mutt_pgp_command (char *d, size_t dlen, struct pgp_command_context *cctx, const char *fmt) +{ + mutt_FormatString (d, dlen, NONULL (fmt), _mutt_fmt_pgp_command, (unsigned long) cctx, 0); + dprint (2, (debugfile, "mutt_pgp_command: %s\n", d)); +} + +/* + * Glue. + */ + + +static pid_t pgp_invoke (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + short need_passphrase, + const char *fname, + const char *sig_fname, + const char *signas, + const char *ids, + const char *format) +{ + struct pgp_command_context cctx; + char cmd[HUGE_STRING]; + + memset (&cctx, 0, sizeof (cctx)); + + if (!format || !*format) + return (pid_t) -1; + + cctx.need_passphrase = need_passphrase; + cctx.fname = fname; + cctx.sig_fname = sig_fname; + cctx.signas = signas; + cctx.ids = ids; + + mutt_pgp_command (cmd, sizeof (cmd), &cctx, format); + + return mutt_create_filter_fd (cmd, pgpin, pgpout, pgperr, + pgpinfd, pgpoutfd, pgperrfd); +} + + +/* + * The exported interface. + * + * This is historic and may be removed at some point. + * + */ + + +pid_t pgp_invoke_decode (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, short need_passphrase) +{ + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + need_passphrase, fname, NULL, NULL, NULL, + PgpDecodeCommand); +} + +pid_t pgp_invoke_verify (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, const char *sig_fname) +{ + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 0, fname, sig_fname, NULL, NULL, PgpVerifyCommand); +} + +pid_t pgp_invoke_decrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname) +{ + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 1, fname, NULL, NULL, NULL, PgpDecryptCommand); +} + +pid_t pgp_invoke_sign (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname) +{ + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 1, fname, NULL, PgpSignAs, NULL, PgpSignCommand); +} + + +pid_t pgp_invoke_encrypt (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, const char *uids, int sign) +{ + if (sign) + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 1, fname, NULL, PgpSignAs, uids, + PgpEncryptSignCommand); + else + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 0, fname, NULL, NULL, uids, + PgpEncryptOnlyCommand); +} + +pid_t pgp_invoke_traditional (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *fname, const char *uids, int flags) +{ + if (flags & ENCRYPT) + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + flags & SIGN ? 1 : 0, fname, NULL, PgpSignAs, uids, + flags & SIGN ? PgpEncryptSignCommand : PgpEncryptOnlyCommand); + else + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 1, fname, NULL, PgpSignAs, NULL, + PgpClearSignCommand); +} + + +void pgp_invoke_import (const char *fname) +{ + char _fname[_POSIX_PATH_MAX + SHORT_STRING]; + char cmd[HUGE_STRING]; + struct pgp_command_context cctx; + + memset (&cctx, 0, sizeof (cctx)); + + mutt_quote_filename (_fname, sizeof (_fname), fname); + cctx.fname = _fname; + + mutt_pgp_command (cmd, sizeof (cmd), &cctx, PgpImportCommand); + mutt_system (cmd); +} + +void pgp_invoke_getkeys (ADDRESS *addr) +{ + char buff[LONG_STRING]; + char tmp[LONG_STRING]; + char cmd[HUGE_STRING]; + int devnull; + + char *personal; + + struct pgp_command_context cctx; + + if (!PgpGetkeysCommand) return; + + memset (&cctx, 0, sizeof (cctx)); + + personal = addr->personal; + addr->personal = NULL; + + *tmp = '\0'; + mutt_addrlist_to_local (addr); + rfc822_write_address_single (tmp, sizeof (tmp), addr, 0); + mutt_quote_filename (buff, sizeof (buff), tmp); + + addr->personal = personal; + + cctx.ids = buff; + + mutt_pgp_command (cmd, sizeof (cmd), &cctx, PgpGetkeysCommand); + + devnull = open ("/dev/null", O_RDWR); + + if (!isendwin ()) mutt_message _("Fetching PGP key..."); + + mutt_system (cmd); + + if (!isendwin ()) mutt_clear_error (); + + close (devnull); +} + +pid_t pgp_invoke_export (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *uids) +{ + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 0, NULL, NULL, NULL, uids, + PgpExportCommand); +} + +pid_t pgp_invoke_verify_key (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + const char *uids) +{ + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 0, NULL, NULL, NULL, uids, + PgpVerifyKeyCommand); +} + +pid_t pgp_invoke_list_keys (FILE **pgpin, FILE **pgpout, FILE **pgperr, + int pgpinfd, int pgpoutfd, int pgperrfd, + pgp_ring_t keyring, LIST *hints) +{ + char uids[HUGE_STRING]; + char tmpuids[HUGE_STRING]; + char quoted[HUGE_STRING]; + + *uids = '\0'; + + for (; hints; hints = hints->next) + { + mutt_quote_filename (quoted, sizeof (quoted), (char *) hints->data); + snprintf (tmpuids, sizeof (tmpuids), "%s %s", uids, quoted); + strcpy (uids, tmpuids); /* __STRCPY_CHECKED__ */ + } + + return pgp_invoke (pgpin, pgpout, pgperr, pgpinfd, pgpoutfd, pgperrfd, + 0, NULL, NULL, NULL, uids, + keyring == PGP_SECRING ? PgpListSecringCommand : + PgpListPubringCommand); +} diff --git a/pgpkey.c b/pgpkey.c new file mode 100644 index 0000000..77ec11e --- /dev/null +++ b/pgpkey.c @@ -0,0 +1,1009 @@ +/* + * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org> + * Copyright (c) 1998,1999 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "mime.h" +#include "pgp.h" +#include "pager.h" +#include "sort.h" + +#include <string.h> +#include <ctype.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/stat.h> +#include <sys/wait.h> + +#include <locale.h> + +#ifdef CRYPT_BACKEND_CLASSIC_PGP + +struct pgp_cache +{ + char *what; + char *dflt; + struct pgp_cache *next; +}; + +static struct pgp_cache *id_defaults = NULL; + +static char trust_flags[] = "?- +"; + +static char *pgp_key_abilities (int flags) +{ + static char buff[3]; + + if (!(flags & KEYFLAG_CANENCRYPT)) + buff[0] = '-'; + else if (flags & KEYFLAG_PREFER_SIGNING) + buff[0] = '.'; + else + buff[0] = 'e'; + + if (!(flags & KEYFLAG_CANSIGN)) + buff[1] = '-'; + else if (flags & KEYFLAG_PREFER_ENCRYPTION) + buff[1] = '.'; + else + buff[1] = 's'; + + buff[2] = '\0'; + + return buff; +} + +static char pgp_flags (int flags) +{ + if (flags & KEYFLAG_REVOKED) + return 'R'; + else if (flags & KEYFLAG_EXPIRED) + return 'X'; + else if (flags & KEYFLAG_DISABLED) + return 'd'; + else if (flags & KEYFLAG_CRITICAL) + return 'c'; + else + return ' '; +} + +static pgp_key_t pgp_principal_key (pgp_key_t key) +{ + if (key->flags & KEYFLAG_SUBKEY && key->parent) + return key->parent; + else + return key; +} + +/* + * Format an entry on the PGP key selection menu. + * + * %n number + * %k key id %K key id of the principal key + * %u user id + * %a algorithm %A algorithm of the princ. key + * %l length %L length of the princ. key + * %f flags %F flags of the princ. key + * %c capabilities %C capabilities of the princ. key + * %t trust/validity of the key-uid association + * %[...] date of key using strftime(3) + */ + +typedef struct pgp_entry +{ + size_t num; + pgp_uid_t *uid; +} pgp_entry_t; + +static const char *pgp_entry_fmt (char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags) +{ + char fmt[16]; + pgp_entry_t *entry; + pgp_uid_t *uid; + pgp_key_t key, pkey; + int kflags = 0; + int optional = (flags & M_FORMAT_OPTIONAL); + + entry = (pgp_entry_t *) data; + uid = entry->uid; + key = uid->parent; + pkey = pgp_principal_key (key); + + if (isupper ((unsigned char) op)) + key = pkey; + + kflags = key->flags | (pkey->flags & KEYFLAG_RESTRICTIONS) + | uid->flags; + + switch (ascii_tolower (op)) + { + case '[': + + { + const char *cp; + char buf2[SHORT_STRING], *p; + int do_locales; + struct tm *tm; + size_t len; + + p = dest; + + cp = src; + if (*cp == '!') + { + do_locales = 0; + cp++; + } + else + do_locales = 1; + + len = destlen - 1; + while (len > 0 && *cp != ']') + { + if (*cp == '%') + { + cp++; + if (len >= 2) + { + *p++ = '%'; + *p++ = *cp; + len -= 2; + } + else + break; /* not enough space */ + cp++; + } + else + { + *p++ = *cp++; + len--; + } + } + *p = 0; + + if (do_locales && Locale) + setlocale (LC_TIME, Locale); + + tm = localtime (&key->gen_time); + + strftime (buf2, sizeof (buf2), dest, tm); + + if (do_locales) + setlocale (LC_TIME, "C"); + + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, buf2); + if (len > 0) + src = cp + 1; + } + break; + case 'n': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, entry->num); + } + break; + case 'k': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, _pgp_keyid (key)); + } + break; + case 'u': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, uid->addr); + } + break; + case 'a': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, key->algorithm); + } + break; + case 'l': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, key->keylen); + } + break; + case 'f': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sc", prefix); + snprintf (dest, destlen, fmt, pgp_flags (kflags)); + } + else if (!(kflags & (KEYFLAG_RESTRICTIONS))) + optional = 0; + break; + case 'c': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, pgp_key_abilities (kflags)); + } + else if (!(kflags & (KEYFLAG_ABILITIES))) + optional = 0; + break; + case 't': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sc", prefix); + snprintf (dest, destlen, fmt, trust_flags[uid->trust & 0x03]); + } + else if (!(uid->trust & 0x03)) + /* undefined trust */ + optional = 0; + break; + default: + *dest = '\0'; + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0); + return (src); +} + +static void pgp_entry (char *s, size_t l, MUTTMENU * menu, int num) +{ + pgp_uid_t **KeyTable = (pgp_uid_t **) menu->data; + pgp_entry_t entry; + + entry.uid = KeyTable[num]; + entry.num = num + 1; + + mutt_FormatString (s, l, NONULL (PgpEntryFormat), pgp_entry_fmt, + (unsigned long) &entry, M_FORMAT_ARROWCURSOR); +} + +static int _pgp_compare_address (const void *a, const void *b) +{ + int r; + + pgp_uid_t **s = (pgp_uid_t **) a; + pgp_uid_t **t = (pgp_uid_t **) b; + + if ((r = mutt_strcasecmp ((*s)->addr, (*t)->addr))) + return r > 0; + else + return (mutt_strcasecmp (_pgp_keyid ((*s)->parent), + _pgp_keyid ((*t)->parent)) > 0); +} + +static int pgp_compare_address (const void *a, const void *b) +{ + return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_address (a, b) + : _pgp_compare_address (a, b)); +} + + + +static int _pgp_compare_keyid (const void *a, const void *b) +{ + int r; + + pgp_uid_t **s = (pgp_uid_t **) a; + pgp_uid_t **t = (pgp_uid_t **) b; + + if ((r = mutt_strcasecmp (_pgp_keyid ((*s)->parent), + _pgp_keyid ((*t)->parent)))) + return r > 0; + else + return (mutt_strcasecmp ((*s)->addr, (*t)->addr)) > 0; +} + +static int pgp_compare_keyid (const void *a, const void *b) +{ + return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_keyid (a, b) + : _pgp_compare_keyid (a, b)); +} + +static int _pgp_compare_date (const void *a, const void *b) +{ + int r; + pgp_uid_t **s = (pgp_uid_t **) a; + pgp_uid_t **t = (pgp_uid_t **) b; + + if ((r = ((*s)->parent->gen_time - (*t)->parent->gen_time))) + return r > 0; + return (mutt_strcasecmp ((*s)->addr, (*t)->addr)) > 0; +} + +static int pgp_compare_date (const void *a, const void *b) +{ + return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_date (a, b) + : _pgp_compare_date (a, b)); +} + +static int _pgp_compare_trust (const void *a, const void *b) +{ + int r; + + pgp_uid_t **s = (pgp_uid_t **) a; + pgp_uid_t **t = (pgp_uid_t **) b; + + if ((r = (((*s)->parent->flags & (KEYFLAG_RESTRICTIONS)) + - ((*t)->parent->flags & (KEYFLAG_RESTRICTIONS))))) + return r > 0; + if ((r = ((*s)->trust - (*t)->trust))) + return r < 0; + if ((r = ((*s)->parent->keylen - (*t)->parent->keylen))) + return r < 0; + if ((r = ((*s)->parent->gen_time - (*t)->parent->gen_time))) + return r < 0; + if ((r = mutt_strcasecmp ((*s)->addr, (*t)->addr))) + return r > 0; + return (mutt_strcasecmp (_pgp_keyid ((*s)->parent), + _pgp_keyid ((*t)->parent))) > 0; +} + +static int pgp_compare_trust (const void *a, const void *b) +{ + return ((PgpSortKeys & SORT_REVERSE) ? !_pgp_compare_trust (a, b) + : _pgp_compare_trust (a, b)); +} + +static int pgp_key_is_valid (pgp_key_t k) +{ + pgp_key_t pk = pgp_principal_key (k); + if (k->flags & KEYFLAG_CANTUSE) + return 0; + if (pk->flags & KEYFLAG_CANTUSE) + return 0; + + return 1; +} + +static int pgp_id_is_strong (pgp_uid_t *uid) +{ + if ((uid->trust & 3) < 3) + return 0; + /* else */ + return 1; +} + +static int pgp_id_is_valid (pgp_uid_t *uid) +{ + if (!pgp_key_is_valid (uid->parent)) + return 0; + if (uid->flags & KEYFLAG_CANTUSE) + return 0; + /* else */ + return 1; +} + +#define PGP_KV_VALID 1 +#define PGP_KV_ADDR 2 +#define PGP_KV_STRING 4 +#define PGP_KV_STRONGID 8 + +#define PGP_KV_MATCH (PGP_KV_ADDR|PGP_KV_STRING) + +static int pgp_id_matches_addr (ADDRESS *addr, ADDRESS *u_addr, pgp_uid_t *uid) +{ + int rv = 0; + + if (pgp_id_is_valid (uid)) + rv |= PGP_KV_VALID; + + if (pgp_id_is_strong (uid)) + rv |= PGP_KV_STRONGID; + + if (addr->mailbox && u_addr->mailbox + && mutt_strcasecmp (addr->mailbox, u_addr->mailbox) == 0) + rv |= PGP_KV_ADDR; + + if (addr->personal && u_addr->personal + && mutt_strcasecmp (addr->personal, u_addr->personal) == 0) + rv |= PGP_KV_STRING; + + return rv; +} + +static pgp_key_t pgp_select_key (pgp_key_t keys, + ADDRESS * p, const char *s) +{ + int keymax; + pgp_uid_t **KeyTable; + MUTTMENU *menu; + int i, done = 0; + char helpstr[SHORT_STRING], buf[LONG_STRING], tmpbuf[STRING]; + char cmd[LONG_STRING], tempfile[_POSIX_PATH_MAX]; + FILE *fp, *devnull; + pid_t thepid; + pgp_key_t kp; + pgp_uid_t *a; + int (*f) (const void *, const void *); + + int unusable = 0; + + keymax = 0; + KeyTable = NULL; + + for (i = 0, kp = keys; kp; kp = kp->next) + { + if (!option (OPTPGPSHOWUNUSABLE) && (kp->flags & KEYFLAG_CANTUSE)) + { + unusable = 1; + continue; + } + + for (a = kp->address; a; a = a->next) + { + if (!option (OPTPGPSHOWUNUSABLE) && (a->flags & KEYFLAG_CANTUSE)) + { + unusable = 1; + continue; + } + + if (i == keymax) + { + keymax += 5; + safe_realloc (&KeyTable, sizeof (pgp_uid_t *) * keymax); + } + + KeyTable[i++] = a; + } + } + + if (!i && unusable) + { + mutt_error _("All matching keys are expired, revoked, or disabled."); + mutt_sleep (1); + return NULL; + } + + switch (PgpSortKeys & SORT_MASK) + { + case SORT_DATE: + f = pgp_compare_date; + break; + case SORT_KEYID: + f = pgp_compare_keyid; + break; + case SORT_ADDRESS: + f = pgp_compare_address; + break; + case SORT_TRUST: + default: + f = pgp_compare_trust; + break; + } + qsort (KeyTable, i, sizeof (pgp_uid_t *), f); + + helpstr[0] = 0; + mutt_make_help (buf, sizeof (buf), _("Exit "), MENU_PGP, OP_EXIT); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + mutt_make_help (buf, sizeof (buf), _("Select "), MENU_PGP, + OP_GENERIC_SELECT_ENTRY); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + mutt_make_help (buf, sizeof (buf), _("Check key "), MENU_PGP, OP_VERIFY_KEY); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + mutt_make_help (buf, sizeof (buf), _("Help"), MENU_PGP, OP_HELP); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + + menu = mutt_new_menu (); + menu->max = i; + menu->make_entry = pgp_entry; + menu->menu = MENU_PGP; + menu->help = helpstr; + menu->data = KeyTable; + + if (p) + snprintf (buf, sizeof (buf), _("PGP keys matching <%s>."), p->mailbox); + else + snprintf (buf, sizeof (buf), _("PGP keys matching \"%s\"."), s); + + + menu->title = buf; + + kp = NULL; + + mutt_clear_error (); + + while (!done) + { + switch (mutt_menuLoop (menu)) + { + + case OP_VERIFY_KEY: + + mutt_mktemp (tempfile); + if ((devnull = fopen ("/dev/null", "w")) == NULL) /* __FOPEN_CHECKED__ */ + { + mutt_perror _("Can't open /dev/null"); + break; + } + if ((fp = safe_fopen (tempfile, "w")) == NULL) + { + fclose (devnull); + mutt_perror _("Can't create temporary file"); + break; + } + + mutt_message _("Invoking PGP..."); + + snprintf (tmpbuf, sizeof (tmpbuf), "0x%s", pgp_keyid (pgp_principal_key (KeyTable[menu->current]->parent))); + + if ((thepid = pgp_invoke_verify_key (NULL, NULL, NULL, -1, + fileno (fp), fileno (devnull), tmpbuf)) == -1) + { + mutt_perror _("Can't create filter"); + unlink (tempfile); + fclose (fp); + fclose (devnull); + } + + mutt_wait_filter (thepid); + fclose (fp); + fclose (devnull); + mutt_clear_error (); + snprintf (cmd, sizeof (cmd), _("Key ID: 0x%s"), + pgp_keyid (pgp_principal_key (KeyTable[menu->current]->parent))); + mutt_do_pager (cmd, tempfile, 0, NULL); + menu->redraw = REDRAW_FULL; + + break; + + case OP_VIEW_ID: + + mutt_message ("%s", KeyTable[menu->current]->addr); + break; + + case OP_GENERIC_SELECT_ENTRY: + + + /* XXX make error reporting more verbose */ + + if (option (OPTPGPCHECKTRUST)) + if (!pgp_key_is_valid (KeyTable[menu->current]->parent)) + { + mutt_error _("This key can't be used: expired/disabled/revoked."); + break; + } + + if (option (OPTPGPCHECKTRUST) && + (!pgp_id_is_valid (KeyTable[menu->current]) + || !pgp_id_is_strong (KeyTable[menu->current]))) + { + char *s = ""; + char buff[LONG_STRING]; + + if (KeyTable[menu->current]->flags & KEYFLAG_CANTUSE) + s = N_("ID is expired/disabled/revoked."); + else switch (KeyTable[menu->current]->trust & 0x03) + { + case 0: + s = N_("ID has undefined validity."); + break; + case 1: + s = N_("ID is not valid."); + break; + case 2: + s = N_("ID is only marginally valid."); + break; + } + + snprintf (buff, sizeof (buff), _("%s Do you really want to use the key?"), + _(s)); + + if (mutt_yesorno (buff, M_NO) != M_YES) + { + mutt_clear_error (); + break; + } + } + +# if 0 + kp = pgp_principal_key (KeyTable[menu->current]->parent); +# else + kp = KeyTable[menu->current]->parent; +# endif + done = 1; + break; + + case OP_EXIT: + + kp = NULL; + done = 1; + break; + } + } + + mutt_menuDestroy (&menu); + FREE (&KeyTable); + + set_option (OPTNEEDREDRAW); + + return (kp); +} + +pgp_key_t pgp_ask_for_key (char *tag, char *whatfor, + short abilities, pgp_ring_t keyring) +{ + pgp_key_t key; + char resp[SHORT_STRING]; + struct pgp_cache *l = NULL; + + mutt_clear_error (); + + resp[0] = 0; + if (whatfor) + { + + for (l = id_defaults; l; l = l->next) + if (!mutt_strcasecmp (whatfor, l->what)) + { + strfcpy (resp, NONULL (l->dflt), sizeof (resp)); + break; + } + } + + + FOREVER + { + resp[0] = 0; + if (mutt_get_field (tag, resp, sizeof (resp), M_CLEAR) != 0) + return NULL; + + if (whatfor) + { + if (l) + mutt_str_replace (&l->dflt, resp); + else + { + l = safe_malloc (sizeof (struct pgp_cache)); + l->next = id_defaults; + id_defaults = l; + l->what = safe_strdup (whatfor); + l->dflt = safe_strdup (resp); + } + } + + if ((key = pgp_getkeybystr (resp, abilities, keyring))) + return key; + + BEEP (); + } + /* not reached */ +} + +/* generate a public key attachment */ + +BODY *pgp_make_key_attachment (char *tempf) +{ + BODY *att; + char buff[LONG_STRING]; + char tempfb[_POSIX_PATH_MAX], tmp[STRING]; + FILE *tempfp; + FILE *devnull; + struct stat sb; + pid_t thepid; + pgp_key_t key; + unset_option (OPTPGPCHECKTRUST); + + key = pgp_ask_for_key (_("Please enter the key ID: "), NULL, 0, PGP_PUBRING); + + if (!key) return NULL; + + snprintf (tmp, sizeof (tmp), "0x%s", pgp_keyid (pgp_principal_key (key))); + pgp_free_key (&key); + + if (!tempf) + { + mutt_mktemp (tempfb); + tempf = tempfb; + } + + if ((tempfp = safe_fopen (tempf, tempf == tempfb ? "w" : "a")) == NULL) + { + mutt_perror _("Can't create temporary file"); + return NULL; + } + + if ((devnull = fopen ("/dev/null", "w")) == NULL) /* __FOPEN_CHECKED__ */ + { + mutt_perror _("Can't open /dev/null"); + fclose (tempfp); + if (tempf == tempfb) + unlink (tempf); + return NULL; + } + + mutt_message _("Invoking pgp..."); + + + if ((thepid = + pgp_invoke_export (NULL, NULL, NULL, -1, + fileno (tempfp), fileno (devnull), tmp)) == -1) + { + mutt_perror _("Can't create filter"); + unlink (tempf); + fclose (tempfp); + fclose (devnull); + return NULL; + } + + mutt_wait_filter (thepid); + + fclose (tempfp); + fclose (devnull); + + att = mutt_new_body (); + att->filename = safe_strdup (tempf); + att->unlink = 1; + att->use_disp = 0; + att->type = TYPEAPPLICATION; + att->subtype = safe_strdup ("pgp-keys"); + snprintf (buff, sizeof (buff), _("PGP Key %s."), tmp); + att->description = safe_strdup (buff); + mutt_update_encoding (att); + + stat (tempf, &sb); + att->length = sb.st_size; + + return att; +} + +static LIST *pgp_add_string_to_hints (LIST *hints, const char *str) +{ + char *scratch; + char *t; + + if ((scratch = safe_strdup (str)) == NULL) + return hints; + + for (t = strtok (scratch, " ,.:\"()<>\n"); t; + t = strtok (NULL, " ,.:\"()<>\n")) + { + if (strlen (t) > 3) + hints = mutt_add_list (hints, t); + } + + FREE (&scratch); + return hints; +} + +static pgp_key_t *pgp_get_lastp (pgp_key_t p) +{ + for (; p; p = p->next) + if (!p->next) + return &p->next; + + return NULL; +} + +pgp_key_t pgp_getkeybyaddr (ADDRESS * a, short abilities, pgp_ring_t keyring) +{ + ADDRESS *r, *p; + LIST *hints = NULL; + + int weak = 0; + int invalid = 0; + int multi = 0; + int this_key_has_strong; + int this_key_has_weak; + int this_key_has_invalid; + int match; + + pgp_key_t keys, k, kn; + pgp_key_t the_valid_key = NULL; + pgp_key_t matches = NULL; + pgp_key_t *last = &matches; + pgp_uid_t *q; + + if (a && a->mailbox) + hints = pgp_add_string_to_hints (hints, a->mailbox); + if (a && a->personal) + hints = pgp_add_string_to_hints (hints, a->personal); + + mutt_message (_("Looking for keys matching \"%s\"..."), a->mailbox); + keys = pgp_get_candidates (keyring, hints); + + mutt_free_list (&hints); + + if (!keys) + return NULL; + + dprint (5, (debugfile, "pgp_getkeybyaddr: looking for %s <%s>.", + a->personal, a->mailbox)); + + + for (k = keys; k; k = kn) + { + kn = k->next; + + dprint (5, (debugfile, " looking at key: %s\n", + pgp_keyid (k))); + + if (abilities && !(k->flags & abilities)) + { + dprint (5, (debugfile, " insufficient abilities: Has %x, want %x\n", + k->flags, abilities)); + continue; + } + + this_key_has_weak = 0; /* weak but valid match */ + this_key_has_invalid = 0; /* invalid match */ + this_key_has_strong = 0; /* strong and valid match */ + match = 0; /* any match */ + + for (q = k->address; q; q = q->next) + { + r = rfc822_parse_adrlist (NULL, q->addr); + + for (p = r; p; p = p->next) + { + int validity = pgp_id_matches_addr (a, p, q); + + if (validity & PGP_KV_MATCH) /* something matches */ + match = 1; + + /* is this key a strong candidate? */ + if ((validity & PGP_KV_VALID) && (validity & PGP_KV_STRONGID) + && (validity & PGP_KV_ADDR)) + { + if (the_valid_key && the_valid_key != k) + multi = 1; + the_valid_key = k; + this_key_has_strong = 1; + } + else if ((validity & PGP_KV_MATCH) && !(validity & PGP_KV_VALID)) + this_key_has_invalid = 1; + else if ((validity & PGP_KV_MATCH) + && (!(validity & PGP_KV_STRONGID) || !(validity & PGP_KV_ADDR))) + this_key_has_weak = 1; + } + + rfc822_free_address (&r); + } + + if (match && !this_key_has_strong && this_key_has_invalid) + invalid = 1; + if (match && !this_key_has_strong && this_key_has_weak) + weak = 1; + + if (match) + { + *last = pgp_principal_key (k); + kn = pgp_remove_key (&keys, *last); + last = pgp_get_lastp (k); + } + } + + pgp_free_key (&keys); + + if (matches) + { + if (the_valid_key && !multi /* && !weak + && !(invalid && option (OPTPGPSHOWUNUSABLE)) */) + { + /* + * There was precisely one strong match on a valid ID. + * + * Proceed without asking the user. + */ + pgp_remove_key (&matches, the_valid_key); + pgp_free_key (&matches); + k = the_valid_key; + } + else + { + /* + * Else: Ask the user. + */ + if ((k = pgp_select_key (matches, a, NULL))) + pgp_remove_key (&matches, k); + pgp_free_key (&matches); + } + + return k; + } + + return NULL; +} + +pgp_key_t pgp_getkeybystr (char *p, short abilities, pgp_ring_t keyring) +{ + LIST *hints = NULL; + pgp_key_t keys; + pgp_key_t matches = NULL; + pgp_key_t *last = &matches; + pgp_key_t k, kn; + pgp_uid_t *a; + short match; + + mutt_message (_("Looking for keys matching \"%s\"..."), p); + + hints = pgp_add_string_to_hints (hints, p); + keys = pgp_get_candidates (keyring, hints); + mutt_free_list (&hints); + + if (!keys) + return NULL; + + + for (k = keys; k; k = kn) + { + kn = k->next; + if (abilities && !(k->flags & abilities)) + continue; + + match = 0; + + for (a = k->address; a; a = a->next) + { + dprint (5, (debugfile, "pgp_getkeybystr: matching \"%s\" against key %s, \"%s\": ", + p, pgp_keyid (k), a->addr)); + if (!*p || mutt_strcasecmp (p, pgp_keyid (k)) == 0 || + (!mutt_strncasecmp (p, "0x", 2) && !mutt_strcasecmp (p + 2, pgp_keyid (k))) || + (option (OPTPGPLONGIDS) && !mutt_strncasecmp (p, "0x", 2) && + !mutt_strcasecmp (p + 2, k->keyid + 8)) || + mutt_stristr (a->addr, p)) + { + dprint (5, (debugfile, "match.\n")); + match = 1; + break; + } + } + + if (match) + { + *last = pgp_principal_key (k); + kn = pgp_remove_key (&keys, *last); + last = pgp_get_lastp (k); + } + } + + pgp_free_key (&keys); + + if (matches) + { + if ((k = pgp_select_key (matches, NULL, p))) + pgp_remove_key (&matches, k); + + pgp_free_key (&matches); + return k; + } + + return NULL; +} + + + +#endif /* CRYPT_BACKEND_CLASSIC_PGP */ diff --git a/pgplib.c b/pgplib.c new file mode 100644 index 0000000..a271881 --- /dev/null +++ b/pgplib.c @@ -0,0 +1,246 @@ +/* + * Copyright (C) 1997-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* Generally useful, pgp-related functions. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <time.h> + +#include "mutt.h" +#include "lib.h" +#include "pgplib.h" + +const char *pgp_pkalgbytype (unsigned char type) +{ + switch (type) + { + case 1: + return "RSA"; + case 2: + return "RSA"; + case 3: + return "RSA"; + case 16: + return "ElG"; + case 17: + return "DSA"; + case 20: + return "ElG"; + default: + return "unk"; + } +} + + + +/* unused */ + +#if 0 + +static const char *hashalgbytype (unsigned char type) +{ + switch (type) + { + case 1: + return "MD5"; + case 2: + return "SHA1"; + case 3: + return "RIPE-MD/160"; + case 4: + return "HAVAL"; + default: + return "unknown"; + } +} + +#endif + +short pgp_canencrypt (unsigned char type) +{ + switch (type) + { + case 1: + case 2: + case 16: + case 20: + return 1; + default: + return 0; + } +} + +short pgp_cansign (unsigned char type) +{ + switch (type) + { + case 1: + case 3: + case 17: + case 20: + return 1; + default: + return 0; + } +} + +/* return values: + + * 1 = sign only + * 2 = encrypt only + * 3 = both + */ + +short pgp_get_abilities (unsigned char type) +{ + return (pgp_canencrypt (type) << 1) | pgp_cansign (type); +} + +void pgp_free_sig (pgp_sig_t **sigp) +{ + pgp_sig_t *sp, *q; + + if (!sigp || !*sigp) + return; + + for (sp = *sigp; sp; sp = q) + { + q = sp->next; + FREE (&sp); + } + + *sigp = NULL; +} + +void pgp_free_uid (pgp_uid_t ** upp) +{ + pgp_uid_t *up, *q; + + if (!upp || !*upp) + return; + for (up = *upp; up; up = q) + { + q = up->next; + pgp_free_sig (&up->sigs); + FREE (&up->addr); + FREE (&up); + } + + *upp = NULL; +} + +pgp_uid_t *pgp_copy_uids (pgp_uid_t *up, pgp_key_t parent) +{ + pgp_uid_t *l = NULL; + pgp_uid_t **lp = &l; + + for (; up; up = up->next) + { + *lp = safe_calloc (1, sizeof (pgp_uid_t)); + (*lp)->trust = up->trust; + (*lp)->flags = up->flags; + (*lp)->addr = safe_strdup (up->addr); + (*lp)->parent = parent; + lp = &(*lp)->next; + } + + return l; +} + +static void _pgp_free_key (pgp_key_t *kpp) +{ + pgp_key_t kp; + + if (!kpp || !*kpp) + return; + + kp = *kpp; + + pgp_free_uid (&kp->address); + FREE (&kp->keyid); + FREE (kpp); +} + +pgp_key_t pgp_remove_key (pgp_key_t *klist, pgp_key_t key) +{ + pgp_key_t *last; + pgp_key_t p, q, r; + + if (!klist || !*klist || !key) + return NULL; + + if (key->parent && key->parent != key) + key = key->parent; + + last = klist; + for (p = *klist; p && p != key; p = p->next) + last = &p->next; + + if (!p) + return NULL; + + for (q = p->next, r = p; q && q->parent == p; q = q->next) + r = q; + + if (r) + r->next = NULL; + + *last = q; + return q; +} + +void pgp_free_key (pgp_key_t *kpp) +{ + pgp_key_t p, q, r; + + if (!kpp || !*kpp) + return; + + if ((*kpp)->parent && (*kpp)->parent != *kpp) + *kpp = (*kpp)->parent; + + /* Order is important here: + * + * - First free all children. + * - If we are an orphan (i.e., our parent was not in the key list), + * free our parent. + * - free ourselves. + */ + + for (p = *kpp; p; p = q) + { + for (q = p->next; q && q->parent == p; q = r) + { + r = q->next; + _pgp_free_key (&q); + } + if (p->parent) + _pgp_free_key (&p->parent); + + _pgp_free_key (&p); + } + + *kpp = NULL; +} + diff --git a/pgplib.h b/pgplib.h new file mode 100644 index 0000000..9b2b5d5 --- /dev/null +++ b/pgplib.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 1996,1997 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifdef CRYPT_BACKEND_CLASSIC_PGP + +#include "mutt_crypt.h" + + +typedef struct pgp_signature +{ + struct pgp_signature *next; + unsigned char sigtype; + unsigned long sid1; + unsigned long sid2; +} +pgp_sig_t; + +struct pgp_keyinfo +{ + char *keyid; + struct pgp_uid *address; + int flags; + short keylen; + time_t gen_time; + int numalg; + const char *algorithm; + struct pgp_keyinfo *parent; + struct pgp_signature *sigs; + struct pgp_keyinfo *next; + + short fp_len; /* length of fingerprint. + * 20 for sha-1, 16 for md5. + */ + unsigned char fingerprint[20]; /* large enough to hold SHA-1 and RIPEMD160 + hashes (20 bytes), MD5 hashes just use the + first 16 bytes */ +}; +/* Note, that pgp_key_t is now pointer and declared in crypt.h */ + +typedef struct pgp_uid +{ + char *addr; + short trust; + int flags; + struct pgp_keyinfo *parent; + struct pgp_uid *next; + struct pgp_signature *sigs; +} +pgp_uid_t; + +enum pgp_version +{ + PGP_V2, + PGP_V3, + PGP_GPG, + PGP_UNKNOWN +}; + +/* prototypes */ + +const char *pgp_pkalgbytype (unsigned char); + +pgp_key_t pgp_remove_key (pgp_key_t *, pgp_key_t ); +pgp_uid_t *pgp_copy_uids (pgp_uid_t *, pgp_key_t ); + +short pgp_canencrypt (unsigned char); +short pgp_cansign (unsigned char); +short pgp_get_abilities (unsigned char); + +void pgp_free_key (pgp_key_t *kpp); + +#define pgp_new_keyinfo() safe_calloc (sizeof *((pgp_key_t)0), 1) + +#endif /* CRYPT_BACKEND_CLASSIC_PGP */ diff --git a/pgpmicalg.c b/pgpmicalg.c new file mode 100644 index 0000000..5835e7d --- /dev/null +++ b/pgpmicalg.c @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, + * MA 02111, USA. + */ + +/* This module peeks at a PGP signature and figures out the hash + * algorithm. + */ + +#include "mutt.h" +#include "pgp.h" +#include "pgppacket.h" +#include "mime.h" +#include "charset.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +static struct +{ + short id; + const char *name; +} +HashAlgorithms[] = +{ + { 1, "pgp-md5" }, + { 2, "pgp-sha1" }, + { 3, "pgp-ripemd160" }, + { 5, "pgp-md2" }, + { 6, "pgp-tiger192" }, + { 7, "pgp-haval-5-160" }, + { 8, "pgp-sha256" }, + { 9, "pgp-sha384" }, + { 10, "pgp-sha512" }, + { -1, NULL } +}; + +static const char *pgp_hash_to_micalg (short id) +{ + int i; + + for (i = 0; HashAlgorithms[i].id >= 0; i++) + if (HashAlgorithms[i].id == id) + return HashAlgorithms[i].name; + return "x-unknown"; +} + +static void pgp_dearmor (FILE *in, FILE *out) +{ + char line[HUGE_STRING]; + long start; + long end; + char *r; + + STATE state; + + memset (&state, 0, sizeof (STATE)); + state.fpin = in; + state.fpout = out; + + /* find the beginning of ASCII armor */ + + while ((r = fgets (line, sizeof (line), in)) != NULL) + { + if (!strncmp (line, "-----BEGIN", 10)) + break; + } + if (r == NULL) + { + dprint (1, (debugfile, "pgp_dearmor: Can't find begin of ASCII armor.\n")); + return; + } + + /* skip the armor header */ + + while ((r = fgets (line, sizeof (line), in)) != NULL) + { + SKIPWS (r); + if (!*r) break; + } + if (r == NULL) + { + dprint (1, (debugfile, "pgp_dearmor: Armor header doesn't end.\n")); + return; + } + + /* actual data starts here */ + start = ftell (in); + + /* find the checksum */ + + while ((r = fgets (line, sizeof (line), in)) != NULL) + { + if (*line == '=' || !strncmp (line, "-----END", 8)) + break; + } + if (r == NULL) + { + dprint (1, (debugfile, "pgp_dearmor: Can't find end of ASCII armor.\n")); + return; + } + + if ((end = ftell (in) - strlen (line)) < start) + { + dprint (1, (debugfile, "pgp_dearmor: end < start???\n")); + return; + } + + if (fseek (in, start, SEEK_SET) == -1) + { + dprint (1, (debugfile, "pgp_dearmor: Can't seekto start.\n")); + return; + } + + mutt_decode_base64 (&state, end - start, 0, (iconv_t) -1); +} + +static short pgp_mic_from_packet (unsigned char *p, size_t len) +{ + /* is signature? */ + if ((p[0] & 0x3f) != PT_SIG) + { + dprint (1, (debugfile, "pgp_mic_from_packet: tag = %d, want %d.\n", + p[0]&0x3f, PT_SIG)); + return -1; + } + + if (len >= 18 && p[1] == 3) + /* version 3 signature */ + return (short) p[17]; + else if (len >= 5 && p[1] == 4) + /* version 4 signature */ + return (short) p[4]; + else + { + dprint (1, (debugfile, "pgp_mic_from_packet: Bad signature packet.\n")); + return -1; + } +} + +static short pgp_find_hash (const char *fname) +{ + FILE *in = NULL; + FILE *out = NULL; + + char tempfile[_POSIX_PATH_MAX]; + + unsigned char *p; + size_t l; + + short rv = -1; + + mutt_mktemp (tempfile); + if ((out = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + goto bye; + } + unlink (tempfile); + + if ((in = fopen (fname, "r")) == NULL) + { + mutt_perror (fname); + goto bye; + } + + pgp_dearmor (in, out); + rewind (out); + + if ((p = pgp_read_packet (out, &l)) != NULL) + { + rv = pgp_mic_from_packet (p, l); + } + else + { + dprint (1, (debugfile, "pgp_find_hash: No packet.\n")); + } + + bye: + + safe_fclose (&in); + safe_fclose (&out); + pgp_release_packet (); + return rv; +} + +const char *pgp_micalg (const char *fname) +{ + return pgp_hash_to_micalg (pgp_find_hash (fname)); +} + diff --git a/pgppacket.c b/pgppacket.c new file mode 100644 index 0000000..f6c64a5 --- /dev/null +++ b/pgppacket.c @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, + * MA 02111, USA. + */ + +#include "config.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <time.h> + +#include "sha1.h" +#include "lib.h" +#include "pgplib.h" +#include "pgppacket.h" + +#define CHUNKSIZE 1024 + +static unsigned char *pbuf = NULL; +static size_t plen = 0; + +static int read_material (size_t material, size_t * used, FILE * fp) +{ + if (*used + material >= plen) + { + unsigned char *p; + size_t nplen; + + nplen = *used + material + CHUNKSIZE; + + if (!(p = realloc (pbuf, nplen))) /* __MEM_CHECKED__ */ + { + perror ("realloc"); + return -1; + } + plen = nplen; + pbuf = p; + } + + if (fread (pbuf + *used, 1, material, fp) < material) + { + perror ("fread"); + return -1; + } + + *used += material; + return 0; +} + +unsigned char *pgp_read_packet (FILE * fp, size_t * len) +{ + size_t used = 0; + long startpos; + unsigned char ctb; + unsigned char b; + size_t material; + + startpos = ftell (fp); + + if (!plen) + { + plen = CHUNKSIZE; + pbuf = safe_malloc (plen); + } + + if (fread (&ctb, 1, 1, fp) < 1) + { + if (!feof (fp)) + perror ("fread"); + goto bail; + } + + if (!(ctb & 0x80)) + { + goto bail; + } + + if (ctb & 0x40) /* handle PGP 5.0 packets. */ + { + int partial = 0; + pbuf[0] = ctb; + used++; + + do + { + if (fread (&b, 1, 1, fp) < 1) + { + perror ("fread"); + goto bail; + } + + if (b < 192) + { + material = b; + partial = 0; + /* material -= 1; */ + } + else if (192 <= b && b <= 223) + { + material = (b - 192) * 256; + if (fread (&b, 1, 1, fp) < 1) + { + perror ("fread"); + goto bail; + } + material += b + 192; + partial = 0; + /* material -= 2; */ + } + else if (b < 255) + { + material = 1 << (b & 0x1f); + partial = 1; + /* material -= 1; */ + } + else + /* b == 255 */ + { + unsigned char buf[4]; + if (fread (buf, 4, 1, fp) < 1) + { + perror ("fread"); + goto bail; + } + /*assert( sizeof(material) >= 4 ); */ + material = buf[0] << 24; + material |= buf[1] << 16; + material |= buf[2] << 8; + material |= buf[3]; + partial = 0; + /* material -= 5; */ + } + + if (read_material (material, &used, fp) == -1) + goto bail; + + } + while (partial); + } + else + /* Old-Style PGP */ + { + int bytes = 0; + pbuf[0] = 0x80 | ((ctb >> 2) & 0x0f); + used++; + + switch (ctb & 0x03) + { + case 0: + { + if (fread (&b, 1, 1, fp) < 1) + { + perror ("fread"); + goto bail; + } + + material = b; + break; + } + + case 1: + bytes = 2; + + case 2: + { + int i; + + if (!bytes) + bytes = 4; + + material = 0; + + for (i = 0; i < bytes; i++) + { + if (fread (&b, 1, 1, fp) < 1) + { + perror ("fread"); + goto bail; + } + + material = (material << 8) + b; + } + break; + } + + default: + goto bail; + } + + if (read_material (material, &used, fp) == -1) + goto bail; + } + + if (len) + *len = used; + + return pbuf; + +bail: + + fseek (fp, startpos, SEEK_SET); + return NULL; +} + +void pgp_release_packet (void) +{ + plen = 0; + FREE (&pbuf); +} + diff --git a/pgppacket.h b/pgppacket.h new file mode 100644 index 0000000..4b7fd64 --- /dev/null +++ b/pgppacket.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, + * MA 02111, USA. + */ + +/* + * Definitions for a rudimentary PGP packet parser which is shared + * by mutt proper and the PGP public key ring lister. + */ + +#ifndef _PGPPACKET_H +# define _PGPPACKET_H + +enum packet_tags +{ + PT_RES0 = 0, /* reserved */ + PT_ESK, /* Encrypted Session Key */ + PT_SIG, /* Signature Packet */ + PT_CESK, /* Conventionally Encrypted Session Key Packet */ + PT_OPS, /* One-Pass Signature Packet */ + PT_SECKEY, /* Secret Key Packet */ + PT_PUBKEY, /* Public Key Packet */ + PT_SUBSECKEY, /* Secret Subkey Packet */ + PT_COMPRESSED, /* Compressed Data Packet */ + PT_SKE, /* Symmetrically Encrypted Data Packet */ + PT_MARKER, /* Marker Packet */ + PT_LITERAL, /* Literal Data Packet */ + PT_TRUST, /* Trust Packet */ + PT_NAME, /* Name Packet */ + PT_SUBKEY, /* Subkey Packet */ + PT_RES15, /* Reserved */ + PT_COMMENT /* Comment Packet */ +}; + +unsigned char *pgp_read_packet (FILE * fp, size_t * len); +void pgp_release_packet (void); + +#endif diff --git a/pgppubring.c b/pgppubring.c new file mode 100644 index 0000000..878b10a --- /dev/null +++ b/pgppubring.c @@ -0,0 +1,959 @@ +/* + * Copyright (C) 1997-2001 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* + * This is a "simple" PGP key ring dumper. + * + * The output format is supposed to be compatible to the one GnuPG + * emits and Mutt expects. + * + * Note that the code of this program could be considerably less + * complex, but most of it was taken from mutt's second generation + * key ring parser. + * + * You can actually use this to put together some fairly general + * PGP key management applications. + * + */ + + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <time.h> +#ifdef HAVE_GETOPT_H +# include <getopt.h> +#endif +#include <errno.h> + +extern char *optarg; +extern int optind; + +#include "sha1.h" +#include "md5.h" +#include "lib.h" +#include "pgplib.h" +#include "pgppacket.h" + +#define MD5_DIGEST_LENGTH 16 + +#ifdef HAVE_FGETPOS +#define FGETPOS(fp,pos) fgetpos((fp),&(pos)) +#define FSETPOS(fp,pos) fsetpos((fp),&(pos)) +#else +#define FGETPOS(fp,pos) pos=ftell((fp)); +#define FSETPOS(fp,pos) fseek((fp),(pos),SEEK_SET) +#endif + + +static short dump_signatures = 0; +static short dump_fingerprints = 0; + + +static void pgpring_find_candidates (char *ringfile, const char *hints[], int nhints); +static void pgpring_dump_keyblock (pgp_key_t p); + +int main (int argc, char * const argv[]) +{ + int c; + + short version = 2; + short secring = 0; + + const char *_kring = NULL; + char *env_pgppath, *env_home; + + char pgppath[_POSIX_PATH_MAX]; + char kring[_POSIX_PATH_MAX]; + + while ((c = getopt (argc, argv, "f25sk:S")) != EOF) + { + switch (c) + { + case 'S': + { + dump_signatures = 1; + break; + } + + case 'f': + { + dump_fingerprints = 1; + break; + } + + case 'k': + { + _kring = optarg; + break; + } + + case '2': case '5': + { + version = c - '0'; + break; + } + + case 's': + { + secring = 1; + break; + } + + default: + { + fprintf (stderr, "usage: %s [-k <key ring> | [-2 | -5] [ -s] [-S] [-f]] [hints]\n", + argv[0]); + exit (1); + } + } + } + + if (_kring) + strfcpy (kring, _kring, sizeof (kring)); + else + { + if ((env_pgppath = getenv ("PGPPATH"))) + strfcpy (pgppath, env_pgppath, sizeof (pgppath)); + else if ((env_home = getenv ("HOME"))) + snprintf (pgppath, sizeof (pgppath), "%s/.pgp", env_home); + else + { + fprintf (stderr, "%s: Can't determine your PGPPATH.\n", argv[0]); + exit (1); + } + + if (secring) + snprintf (kring, sizeof (kring), "%s/secring.%s", pgppath, version == 2 ? "pgp" : "skr"); + else + snprintf (kring, sizeof (kring), "%s/pubring.%s", pgppath, version == 2 ? "pgp" : "pkr"); + } + + pgpring_find_candidates (kring, (const char**) argv + optind, argc - optind); + + return 0; +} + + +/* The actual key ring parser */ + +static void pgp_make_pgp2_fingerprint (unsigned char *buff, + unsigned char *digest) +{ + + MD5_CTX context; + unsigned int size = 0; + + + MD5Init (&context); + + size = (buff[0] << 8) + buff[1]; + size = ((size + 7) / 8); + buff = &buff[2]; + + MD5Update (&context, buff, size); + buff = &buff[size]; + + size = (buff[0] << 8) + buff[1]; + size = ((size + 7) / 8); + buff = &buff[2]; + + MD5Update (&context, buff, size); + + MD5Final (digest, &context); + +} /* pgp_make_pgp2_fingerprint() */ + +static pgp_key_t pgp_parse_pgp2_key (unsigned char *buff, size_t l) +{ + pgp_key_t p; + unsigned char alg; + unsigned char digest[MD5_DIGEST_LENGTH]; + size_t expl; + unsigned long id; + time_t gen_time = 0; + unsigned short exp_days = 0; + size_t j; + int i, k; + unsigned char scratch[LONG_STRING]; + + if (l < 12) + return NULL; + + p = pgp_new_keyinfo(); + + for (i = 0, j = 2; i < 4; i++) + gen_time = (gen_time << 8) + buff[j++]; + + p->gen_time = gen_time; + + for (i = 0; i < 2; i++) + exp_days = (exp_days << 8) + buff[j++]; + + if (exp_days && time (NULL) > gen_time + exp_days * 24 * 3600) + p->flags |= KEYFLAG_EXPIRED; + + alg = buff[j++]; + + p->numalg = alg; + p->algorithm = pgp_pkalgbytype (alg); + p->flags |= pgp_get_abilities (alg); + + if (dump_fingerprints) + { + /* j now points to the key material, which we need for the fingerprint */ + p->fp_len = MD5_DIGEST_LENGTH; + pgp_make_pgp2_fingerprint (&buff[j], digest); + memcpy (p->fingerprint, digest, MD5_DIGEST_LENGTH); + } + else /* just to be usre */ + memset (p->fingerprint, 0, MD5_DIGEST_LENGTH); + + expl = 0; + for (i = 0; i < 2; i++) + expl = (expl << 8) + buff[j++]; + + p->keylen = expl; + + expl = (expl + 7) / 8; + if (expl < 4) + goto bailout; + + + j += expl - 8; + + for (k = 0; k < 2; k++) + { + for (id = 0, i = 0; i < 4; i++) + id = (id << 8) + buff[j++]; + + snprintf ((char *) scratch + k * 8, sizeof (scratch) - k * 8, + "%08lX", id); + } + + p->keyid = safe_strdup ((char *) scratch); + + return p; + +bailout: + + FREE (&p); + return NULL; +} + +static void pgp_make_pgp3_fingerprint (unsigned char *buff, size_t l, + unsigned char *digest) +{ + unsigned char dummy; + SHA1_CTX context; + + SHA1_Init (&context); + + dummy = buff[0] & 0x3f; + + if (dummy == PT_SUBSECKEY || dummy == PT_SUBKEY || dummy == PT_SECKEY) + dummy = PT_PUBKEY; + + dummy = (dummy << 2) | 0x81; + SHA1_Update (&context, &dummy, 1); + dummy = ((l - 1) >> 8) & 0xff; + SHA1_Update (&context, &dummy, 1); + dummy = (l - 1) & 0xff; + SHA1_Update (&context, &dummy, 1); + SHA1_Update (&context, buff + 1, l - 1); + SHA1_Final (digest, &context); + +} + +static void skip_bignum (unsigned char *buff, size_t l, size_t j, + size_t * toff, size_t n) +{ + size_t len; + + do + { + len = (buff[j] << 8) + buff[j + 1]; + j += (len + 7) / 8 + 2; + } + while (j <= l && --n > 0); + + if (toff) + *toff = j; +} + + +static pgp_key_t pgp_parse_pgp3_key (unsigned char *buff, size_t l) +{ + pgp_key_t p; + unsigned char alg; + unsigned char digest[SHA_DIGEST_LENGTH]; + unsigned char scratch[LONG_STRING]; + time_t gen_time = 0; + unsigned long id; + int i, k; + short len; + size_t j; + + p = pgp_new_keyinfo (); + j = 2; + + for (i = 0; i < 4; i++) + gen_time = (gen_time << 8) + buff[j++]; + + p->gen_time = gen_time; + + alg = buff[j++]; + + p->numalg = alg; + p->algorithm = pgp_pkalgbytype (alg); + p->flags |= pgp_get_abilities (alg); + + if (alg == 17) + skip_bignum (buff, l, j, &j, 3); + else if (alg == 16 || alg == 20) + skip_bignum (buff, l, j, &j, 2); + + len = (buff[j] << 8) + buff[j + 1]; + p->keylen = len; + + + if (alg >= 1 && alg <= 3) + skip_bignum (buff, l, j, &j, 2); + else if (alg == 17 || alg == 16 || alg == 20) + skip_bignum (buff, l, j, &j, 1); + + pgp_make_pgp3_fingerprint (buff, j, digest); + p->fp_len = SHA_DIGEST_LENGTH; + + for (k = 0; k < 2; k++) + { + for (id = 0, i = SHA_DIGEST_LENGTH - 8 + k * 4; + i < SHA_DIGEST_LENGTH + (k - 1) * 4; i++) + id = (id << 8) + digest[i]; + + snprintf ((char *) scratch + k * 8, sizeof (scratch) - k * 8, "%08lX", id); + } + + p->keyid = safe_strdup ((char *) scratch); + + return p; +} + +static pgp_key_t pgp_parse_keyinfo (unsigned char *buff, size_t l) +{ + if (!buff || l < 2) + return NULL; + + switch (buff[1]) + { + case 2: + case 3: + return pgp_parse_pgp2_key (buff, l); + case 4: + return pgp_parse_pgp3_key (buff, l); + default: + return NULL; + } +} + +static int pgp_parse_pgp2_sig (unsigned char *buff, size_t l, + pgp_key_t p, pgp_sig_t *s) +{ + unsigned char sigtype; + time_t sig_gen_time; + unsigned long signerid1; + unsigned long signerid2; + size_t j; + int i; + + if (l < 22) + return -1; + + j = 3; + sigtype = buff[j++]; + + sig_gen_time = 0; + for (i = 0; i < 4; i++) + sig_gen_time = (sig_gen_time << 8) + buff[j++]; + + signerid1 = signerid2 = 0; + for (i = 0; i < 4; i++) + signerid1 = (signerid1 << 8) + buff[j++]; + + for (i = 0; i < 4; i++) + signerid2 = (signerid2 << 8) + buff[j++]; + + + if (sigtype == 0x20 || sigtype == 0x28) + p->flags |= KEYFLAG_REVOKED; + + if (s) + { + s->sigtype = sigtype; + s->sid1 = signerid1; + s->sid2 = signerid2; + } + + return 0; +} + +static int pgp_parse_pgp3_sig (unsigned char *buff, size_t l, + pgp_key_t p, pgp_sig_t *s) +{ + unsigned char sigtype; + unsigned char pkalg; + unsigned char hashalg; + unsigned char skt; + time_t sig_gen_time = -1; + long validity = -1; + long key_validity = -1; + unsigned long signerid1 = 0; + unsigned long signerid2 = 0; + size_t ml; + size_t j; + int i; + short ii; + short have_critical_spks = 0; + + if (l < 7) + return -1; + + j = 2; + + sigtype = buff[j++]; + pkalg = buff[j++]; + hashalg = buff[j++]; + + for (ii = 0; ii < 2; ii++) + { + size_t skl; + size_t nextone; + + ml = (buff[j] << 8) + buff[j + 1]; + j += 2; + + if (j + ml > l) + break; + + nextone = j; + while (ml) + { + j = nextone; + skl = buff[j++]; + if (!--ml) + break; + + if (skl >= 192) + { + skl = (skl - 192) * 256 + buff[j++] + 192; + if (!--ml) + break; + } + + if ((int) ml - (int) skl < 0) + break; + ml -= skl; + + nextone = j + skl; + skt = buff[j++]; + + switch (skt & 0x7f) + { + case 2: /* creation time */ + { + if (skl < 4) + break; + sig_gen_time = 0; + for (i = 0; i < 4; i++) + sig_gen_time = (sig_gen_time << 8) + buff[j++]; + + break; + } + case 3: /* expiration time */ + { + if (skl < 4) + break; + validity = 0; + for (i = 0; i < 4; i++) + validity = (validity << 8) + buff[j++]; + break; + } + case 9: /* key expiration time */ + { + if (skl < 4) + break; + key_validity = 0; + for (i = 0; i < 4; i++) + key_validity = (key_validity << 8) + buff[j++]; + break; + } + case 16: /* issuer key ID */ + { + if (skl < 8) + break; + signerid2 = signerid1 = 0; + for (i = 0; i < 4; i++) + signerid1 = (signerid1 << 8) + buff[j++]; + for (i = 0; i < 4; i++) + signerid2 = (signerid2 << 8) + buff[j++]; + + break; + } + case 10: /* CMR key */ + break; + case 4: /* exportable */ + case 5: /* trust */ + case 6: /* regexp */ + case 7: /* revocable */ + case 11: /* Pref. symm. alg. */ + case 12: /* revocation key */ + case 20: /* notation data */ + case 21: /* pref. hash */ + case 22: /* pref. comp.alg. */ + case 23: /* key server prefs. */ + case 24: /* pref. key server */ + default: + { + if (skt & 0x80) + have_critical_spks = 1; + } + } + } + j = nextone; + } + + if (sigtype == 0x20 || sigtype == 0x28) + p->flags |= KEYFLAG_REVOKED; + if (key_validity != -1 && time (NULL) > p->gen_time + key_validity) + p->flags |= KEYFLAG_EXPIRED; + if (have_critical_spks) + p->flags |= KEYFLAG_CRITICAL; + + if (s) + { + s->sigtype = sigtype; + s->sid1 = signerid1; + s->sid2 = signerid2; + } + + + return 0; + +} + + +static int pgp_parse_sig (unsigned char *buff, size_t l, + pgp_key_t p, pgp_sig_t *sig) +{ + if (!buff || l < 2 || !p) + return -1; + + switch (buff[1]) + { + case 2: + case 3: + return pgp_parse_pgp2_sig (buff, l, p, sig); + case 4: + return pgp_parse_pgp3_sig (buff, l, p, sig); + default: + return -1; + } +} + +/* parse one key block, including all subkeys. */ + +static pgp_key_t pgp_parse_keyblock (FILE * fp) +{ + unsigned char *buff; + unsigned char pt = 0; + unsigned char last_pt; + size_t l; + short err = 0; + +#ifdef HAVE_FGETPOS + fpos_t pos; +#else + long pos; +#endif + + pgp_key_t root = NULL; + pgp_key_t *last = &root; + pgp_key_t p = NULL; + pgp_uid_t *uid = NULL; + pgp_uid_t **addr = NULL; + pgp_sig_t **lsig = NULL; + + FGETPOS(fp,pos); + + while (!err && (buff = pgp_read_packet (fp, &l)) != NULL) + { + last_pt = pt; + pt = buff[0] & 0x3f; + + /* check if we have read the complete key block. */ + + if ((pt == PT_SECKEY || pt == PT_PUBKEY) && root) + { + FSETPOS(fp, pos); + return root; + } + + switch (pt) + { + case PT_SECKEY: + case PT_PUBKEY: + case PT_SUBKEY: + case PT_SUBSECKEY: + { + if (!(*last = p = pgp_parse_keyinfo (buff, l))) + { + err = 1; + break; + } + + last = &p->next; + addr = &p->address; + lsig = &p->sigs; + + if (pt == PT_SUBKEY || pt == PT_SUBSECKEY) + { + p->flags |= KEYFLAG_SUBKEY; + if (p != root) + { + p->parent = root; + p->address = pgp_copy_uids (root->address, p); + while (*addr) addr = &(*addr)->next; + } + } + + if (pt == PT_SECKEY || pt == PT_SUBSECKEY) + p->flags |= KEYFLAG_SECRET; + + break; + } + + case PT_SIG: + { + if (lsig) + { + pgp_sig_t *signature = safe_calloc (sizeof (pgp_sig_t), 1); + *lsig = signature; + lsig = &signature->next; + + pgp_parse_sig (buff, l, p, signature); + } + break; + } + + case PT_TRUST: + { + if (p && (last_pt == PT_SECKEY || last_pt == PT_PUBKEY || + last_pt == PT_SUBKEY || last_pt == PT_SUBSECKEY)) + { + if (buff[1] & 0x20) + { + p->flags |= KEYFLAG_DISABLED; + } + } + else if (last_pt == PT_NAME && uid) + { + uid->trust = buff[1]; + } + break; + } + case PT_NAME: + { + char *chr; + + + if (!addr) + break; + + chr = safe_malloc (l); + memcpy (chr, buff + 1, l - 1); + chr[l - 1] = '\0'; + + + *addr = uid = safe_calloc (1, sizeof (pgp_uid_t)); /* XXX */ + uid->addr = chr; + uid->parent = p; + uid->trust = 0; + addr = &uid->next; + lsig = &uid->sigs; + + /* the following tags are generated by + * pgp 2.6.3in. + */ + + if (strstr (chr, "ENCR")) + p->flags |= KEYFLAG_PREFER_ENCRYPTION; + if (strstr (chr, "SIGN")) + p->flags |= KEYFLAG_PREFER_SIGNING; + + break; + } + } + + FGETPOS(fp,pos); + } + + if (err) + pgp_free_key (&root); + + return root; +} + +static int pgpring_string_matches_hint (const char *s, const char *hints[], int nhints) +{ + int i; + + if (!hints || !nhints) + return 1; + + for (i = 0; i < nhints; i++) + { + if (mutt_stristr (s, hints[i]) != NULL) + return 1; + } + + return 0; +} + +/* + * Go through the key ring file and look for keys with + * matching IDs. + */ + +static void pgpring_find_candidates (char *ringfile, const char *hints[], int nhints) +{ + FILE *rfp; +#ifdef HAVE_FGETPOS + fpos_t pos, keypos; +#else + long pos, keypos; +#endif + + unsigned char *buff = NULL; + unsigned char pt = 0; + size_t l = 0; + + short err = 0; + + if ((rfp = fopen (ringfile, "r")) == NULL) + { + char *error_buf; + size_t error_buf_len; + + error_buf_len = sizeof ("fopen: ") - 1 + strlen (ringfile) + 1; + error_buf = safe_malloc (error_buf_len); + snprintf (error_buf, error_buf_len, "fopen: %s", ringfile); + perror (error_buf); + FREE (&error_buf); + return; + } + + FGETPOS(rfp,pos); + FGETPOS(rfp,keypos); + + while (!err && (buff = pgp_read_packet (rfp, &l)) != NULL) + { + pt = buff[0] & 0x3f; + + if (l < 1) + continue; + + if ((pt == PT_SECKEY) || (pt == PT_PUBKEY)) + { + keypos = pos; + } + else if (pt == PT_NAME) + { + char *tmp = safe_malloc (l); + + memcpy (tmp, buff + 1, l - 1); + tmp[l - 1] = '\0'; + + /* mutt_decode_utf8_string (tmp, chs); */ + + if (pgpring_string_matches_hint (tmp, hints, nhints)) + { + pgp_key_t p; + + FSETPOS(rfp, keypos); + + /* Not bailing out here would lead us into an endless loop. */ + + if ((p = pgp_parse_keyblock (rfp)) == NULL) + err = 1; + + pgpring_dump_keyblock (p); + pgp_free_key (&p); + } + + FREE (&tmp); + } + + FGETPOS(rfp,pos); + } + + fclose (rfp); + +} + +static void print_userid (const char *id) +{ + for (; id && *id; id++) + { + if (*id >= ' ' && *id <= 'z' && *id != ':') + putchar (*id); + else + printf ("\\x%02x", (*id) & 0xff); + } +} + +static void print_fingerprint (pgp_key_t p) +{ + int i = 0; + + printf ("fpr:::::::::"); + for (i = 0; i < p->fp_len; i++) + printf ("%02X", p->fingerprint[i]); + printf (":\n"); + +} /* print_fingerprint() */ + + +static void pgpring_dump_signatures (pgp_sig_t *sig) +{ + for (; sig; sig = sig->next) + { + if (sig->sigtype == 0x10 || sig->sigtype == 0x11 || + sig->sigtype == 0x12 || sig->sigtype == 0x13) + printf ("sig::::%08lX%08lX::::::%X:\n", + sig->sid1, sig->sid2, sig->sigtype); + else if (sig->sigtype == 0x20) + printf ("rev::::%08lX%08lX::::::%X:\n", + sig->sid1, sig->sid2, sig->sigtype); + } +} + + +static char gnupg_trustletter (int t) +{ + switch (t) + { + case 1: return 'n'; + case 2: return 'm'; + case 3: return 'f'; + } + return 'q'; +} + +static void pgpring_dump_keyblock (pgp_key_t p) +{ + pgp_uid_t *uid; + short first; + struct tm *tp; + time_t t; + + for (; p; p = p->next) + { + first = 1; + + if (p->flags & KEYFLAG_SECRET) + { + if (p->flags & KEYFLAG_SUBKEY) + printf ("ssb:"); + else + printf ("sec:"); + } + else + { + if (p->flags & KEYFLAG_SUBKEY) + printf ("sub:"); + else + printf ("pub:"); + } + + if (p->flags & KEYFLAG_REVOKED) + putchar ('r'); + if (p->flags & KEYFLAG_EXPIRED) + putchar ('e'); + if (p->flags & KEYFLAG_DISABLED) + putchar ('d'); + + for (uid = p->address; uid; uid = uid->next, first = 0) + { + if (!first) + { + printf ("uid:%c::::::::", gnupg_trustletter (uid->trust)); + print_userid (uid->addr); + printf (":\n"); + } + else + { + if (p->flags & KEYFLAG_SECRET) + putchar ('u'); + else + putchar (gnupg_trustletter (uid->trust)); + + t = p->gen_time; + tp = gmtime (&t); + + printf (":%d:%d:%s:%04d-%02d-%02d::::", p->keylen, p->numalg, p->keyid, + 1900 + tp->tm_year, tp->tm_mon + 1, tp->tm_mday); + + print_userid (uid->addr); + printf ("::"); + + if(pgp_canencrypt(p->numalg)) + putchar ('e'); + if(pgp_cansign(p->numalg)) + putchar ('s'); + if (p->flags & KEYFLAG_DISABLED) + putchar ('D'); + printf (":\n"); + + if (dump_fingerprints) + print_fingerprint (p); + } + + if (dump_signatures) + { + if (first) pgpring_dump_signatures (p->sigs); + pgpring_dump_signatures (uid->sigs); + } + } + } +} + +/* + * The mutt_gettext () defined in gettext.c requires iconv, + * so we do without charset conversion here. + */ + +char *mutt_gettext (const char *message) +{ + return (char *)message; +} diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..517e9c0 --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,200 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +localedir = $(datadir)/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` + +CC = @CC@ +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +MSGMERGE = msgmerge + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = Makefile.in.in POTFILES.in $(PACKAGE).pot \ +$(POFILES) $(GMOFILES) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) --statistics -o $$file $< + + +all: all-@USE_NLS@ + +all-yes: $(CATALOGS) +all-no: + +.PHONY: ../keymap_alldefs.h +../keymap_alldefs.h: + cd .. && $(MAKE) keymap_alldefs.h + +# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in + $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ + --add-comments --keyword=_ --keyword=N_ \ + --files-from=$(srcdir)/POTFILES.in \ + && test ! -f $(PACKAGE).po \ + || ( rm -f $(srcdir)/$(PACKAGE).pot \ + && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ + echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ + echo "installing $(srcdir)/$$cat as" \ + "$(DESTDIR)$$dir/$(PACKAGE).mo"; \ + fi; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\.gmo$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ + done + if test "$(PACKAGE)" = "gettext"; then \ + rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +check: all + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(PACKAGE).po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: $(DISTFILES) + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ + cp -p $$dir/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(PACKAGE).pot + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \ + cd $(srcdir); \ + catalogs='$(GMOFILES)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\.gmo$$//'`; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \ + mv -f $$lang.new.po $$lang.po; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.new.po; \ + fi; \ + done + $(MAKE) update-gmo + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..0a570ee --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,68 @@ +account.c +addrbook.c +alias.c +attach.c +browser.c +buffy.c +charset.c +color.c +commands.c +compose.c +crypt.c +curs_lib.c +curs_main.c +edit.c +editmsg.c +flags.c +handler.c +headers.c +help.c +hook.c +imap/auth.c +imap/auth_anon.c +imap/auth_cram.c +imap/auth_gss.c +imap/auth_login.c +imap/auth_sasl.c +imap/browse.c +imap/command.c +imap/imap.c +imap/message.c +imap/util.c +init.c +keymap.c +keymap_alldefs.h +lib.c +main.c +mbox.c +menu.c +mh.c +muttlib.c +mutt_socket.c +mutt_ssl.c +mx.c +newsrc.c +nntp.c +pager.c +parse.c +pattern.c +pgp.c +pgpinvoke.c +pgpkey.c +pop.c +pop_auth.c +pop_lib.c +postpone.c +query.c +recvattach.c +recvcmd.c +remailer.c +rfc1524.c +score.c +send.c +sendlib.c +signal.c +smime.c +sort.c +status.c +thread.c diff --git a/po/bg.gmo b/po/bg.gmo new file mode 100644 index 0000000000000000000000000000000000000000..2df565e32ca8056217a466bb9b591b692f214050 GIT binary patch literal 82917 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 literal 0 HcmV?d00001 diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..5fb37c2 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,4202 @@ +# This file was translated by Velko Hristov +# Copyright (C) 2003 Free Software Foundation, Inc. +# Velko Hristov <hristov@informatik.hu-berlin.de>, 2003. +# +# todo: remailer, debugging, pipe, mailing list, clear & continue, subparts, captitalize, +# todo: overflow, certfile +# todo: matching - "ñúâïàäàùè" èëè "îòãîâàðÿùè íà"? +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.5.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CP1251\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Ïîòðåáèòåëñêî èìå íà %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Ïàðîëà çà %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Èçõîä" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Èçòð." + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Âúçñò." + +#: addrbook.c:36 +msgid "Select" +msgstr "Èçáîð" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Ïîìîù" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr " àäðåñíàòà êíèãà íÿìà çàïèñè!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Ïñåâäîíèìè" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Ïñåâäîíèì çà àäðåñíàòà êíèãà:" + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Âå÷å èìà çàïèñ çà òîçè ïñåâäîíèì!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" +"Ïðåäóïðåæäåíèå: Òîçè ïñåâäîíèì ìîæå äà íå ðàáîòè. Æåëàåòå ëè äà ãî ïîïðàâèòå?" + +#: alias.c:279 +msgid "Address: " +msgstr "Àäðåñ:" + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Ãðåøêà: '%s' å íåâàëèäåí IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Èìå:" + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Çàïèñ?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Çàïèñ âúâ ôàéë:" + +#: alias.c:342 +msgid "Alias added." +msgstr "Ïñåâäîíèìúò å äîáàâåí." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Íÿìà øàáëîí ñ òîâà èìå. Æåëàåòå ëè äà ïðîäúëæèòå?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Çàïèñúò \"compose\" â mailcap èçèñêâà %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Ãðåøêà ïðè èçïúëíåíèåòî íà \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Ãðåøêà ïðè îòâàðÿíå íà ôàéëà çà ïðî÷èò íà çàãëàâíàòà èíôîðìàöèÿ." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Ãðåøêà ïðè îòâàðÿíå íà ôàéëà çà èçòðèâàíå íà çàãëàâíà èíôîðìàöèÿ." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr " mailcap ëèïñâà çàïèñ \"compose\" çà %s. Ñúçäàâàíå íà ïðàçåí ôàéë." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Çàïèñúò \"edit\" â mailcap èçèñêâà %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr " mailcap ëèïñâà çàïèñ \"edit\" çà %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "" +"Íå å íàìåðåíî ïîäõîäÿùî mailcap âïèñâàíå. Ïðèëîæåíèåòî å ïîêàçàíî êàòî òåêñò." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Íåäåôèíèðàí MIME òèï. Ïðèëîæåíèåòî íå ìîæå äà áúäå ïîêàçàíî." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Ôèëòúðúò íå ìîæå äà áúäå ñúçäàäåí" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Ãðåøêà ïðè ñúçäàâàíåòî íà ôèëòúð" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Ãðåøêà ïðè çàïèñ!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Íåâúçìîæíî îòïå÷àòâàíå!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Äèðåêòîðèÿ" + +#: browser.c:42 +msgid "Mask" +msgstr "Ìàñêà" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s íå å äèðåêòîðèÿ." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Ïîùåíñêè êóòèè [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Àáîíèðàí [%s], Ôàéëîâà ìàñêà: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Äèðåêòîðèÿ [%s], Ôàéëîâà ìàñêà: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Íå ìîæå äà ïðèëàãàòå äèðåêòîðèÿ!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Íÿìà ôàéëîâå, îòãîâàðÿùè íà ìàñêàòà" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Ñàìî IMAP ïîùåíñêè êóòèè ìîãàò äà áúäàò ñúçäàâàíè" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Ñàìî IMAP ïîùåíñêè êóòèè ìîãàò äà áúäàò èçòðèâàíè" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Äåéñòâèòåëíî ëè æåëàåòå äà èçòðèåòå ïîùåíñêàòà êóòèÿ \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Ïîùåíñêàòà êóòèÿ å èçòðèòà." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Ïîùåíñêàòà êóòèÿ íå å èçòðèòà." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Ñìÿíà íà äèðåêòîðèÿòà: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Ãðåøêà ïðè ÷åòåíå íà äèðåêòîðèÿòà." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Ôàéëîâà ìàñêà: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Îáðàòíî ïîäðåæäàíå ïî äàòà(d), àçáó÷åí ðåä(a), ðàçìåð(z) èëè áåç ïîäðåæäàíå" +"(n)?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Ïîäðåæäàíå ïî äàòà(d), àçáó÷åí ðåä(a), ðàçìåð(z) èëè áåç ïîäðåæäàíå(n)?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Íîâî èìå çà ôàéëà: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Äèðåêòîðèÿòà íå ìîæå äà áúäå ïîêàçàíà" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Ãðåøêà ïðè ïîêàçâàíåòî íà ôàéëà" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Íîâè ïèñìà â " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: òåðìèíàëúò íå ïîääúðæà öâåòîâå" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: íÿìà òàêúâ öâÿò" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: íÿìà òàêúâ îáåêò" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: êîìàíäàòà å âàëèäíà ñàìî çà èíäåêñåí îáåêò" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: íåäîñòàòú÷íî àðãóìåíòè" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Ëèïñâàùè àðãóìåíòè." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: íåäîñòàòú÷íî àðãóìåíòè" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: íåäîñòàòú÷íî àðãóìåíòè" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: íÿìà òàêúâ àòðèáóò" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "íåäîñòàòú÷íî àðãóìåíòè" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "òâúðäå ìíîãî àðãóìåíòè" + +#: color.c:721 +msgid "default colors not supported" +msgstr "ñòàíäàðòíèòå öâåòîâå íå ñå ïîääúðæàò" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Æåëàåòå ëè äà ïîòâúðäèòå èñòèííîñòòà íà PGP-ïîäïèñà?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Íåâúçìîæíî ñúçäàâàíåòî íà âðåìåíåí ôàéë!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Ôèëòúðúò íå ìîæå äà áúäå ñúçäàäåí" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Ïèñìîòî íå ìîæå äà áúäå êîïèðàíî." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME-ïîäïèñúò å ïîòâúðäåí óñïåøíî." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Ïðèòåæàòåëÿò íà S/MIME ñåðòèôèêàòà íå ñúâïàäà ñ ïîäàòåëÿ íà ïèñìîòî." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME-ïîäïèñúò ÍÅ å ïîòâúðäåí óñïåøíî." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP-ïîäïèñúò å ïîòâúðäåí óñïåøíî." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP-ïîäïèñúò ÍÅ å ïîòâúðäåí óñïåøíî." + +#: commands.c:223 +msgid "Command: " +msgstr "Êîìàíäà: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Ïðåïðàùàíå íà ïèñìîòî êúì: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Ïðåïðàùàíå íà ìàðêèðàíèòå ïèñìà êúì: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Ãðåøêà ïðè ðàç÷èòàíå íà àäðåñúò!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Ëîø IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Ïðåïðàùàíå íà ïèñìîòî êúì %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Ïðåïðàùàíå íà ïèñìîòî êúì %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Ïèñìîòî íå å ïðåïðàòåíî." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Ïèñìàòà íå ñà ïðåïðàòåíè." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Ïèñìîòî å ïðåïðàòåíî." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Ïèñìàòà ñà ïðåïðàòåíè." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Ãðåøêà ïðè ñúçäàâàíåòî íà ôèëòúð" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Èçïðàùàíå êúì êîìàíäà (pipe): " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Íå å äåôèíèðàíà êîìàíäà çà îòïå÷àòâàíå" + +#: commands.c:483 +msgid "Print message?" +msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ïèñìîòî?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ìàðêèðàíèòå ïèñìà?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Ïèñìîòî å îòïå÷àòàíî" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Ïèñìàòà ñà îòïå÷àòàíè" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Ïèñìîòî íå å îòïå÷àòàíî" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Ïèñìàòà íå ñà îòïå÷àòàíè" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Îáðàòíî ïîäðåæäàíå ïî: äàòà íà èçïðàùàíå(d)/îò(f)/äàòà íà ïîëó÷àâàíå(r)/òåìà" +"(s)/ïîëó÷àòåë(o)/íèøêà(t)/áåç ïîäðåæäàíå(u)/ðàçìåð(z)/âàæíîñò(c)?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ïîäðåæäàíå ïî: äàòà íà èçïðàùàíå(d)/îò(f)/äàòà íà ïîëó÷àâàíå(r)/òåìà(s)/" +"ïîëó÷àòåë(o)/íèøêà(t)/áåç ïîäðåæäàíå(u)/ðàçìåð(z)/âàæíîñò(c)?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Øåë êîìàíäà: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Äåêîäèðàíå è çàïèñ íà%s â ïîùåíñêà êóòèÿ" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Äåêîäèðàíå è êîïèðàíå íà%s â ïîùåíñêà êóòèÿ" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Äåøèôðèðàíå è çàïèñ íà%s â ïîùåíñêà êóòèÿ" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Äåøèôðèðàíå è çàïèñ íà%s â ïîùåíñêà êóòèÿ" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Çàïèñ íà%s â ïîùåíñêà êóòèÿ" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Êîïèðàíå íà%s â ïîùåíñêà êóòèÿ" + +#: commands.c:706 +msgid " tagged" +msgstr " ìàðêèðàí" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Ñúçäàâàíå íà êîïèå â %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Æåëàåòå ëè äà ãî êîíâåðòèðàòå äî %s ïðè èçïðàùàíå?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type å ïðîìåíåí íà %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Êîäîâàòà òàáëèöà å ïðîìåíåíà íà %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "íå å êîíâåðòèðàíî" + +#: commands.c:914 +msgid "converting" +msgstr "êîíâåðòèðàíî" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Íÿìà ïðèëîæåíèÿ." + +#: compose.c:84 +msgid "Send" +msgstr "Èçïðàùàíå" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Îòêàç" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Ïðèëàãàíå íà ôàéë" + +#: compose.c:90 +msgid "Descrip" +msgstr "Îïèñàíèå" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Ïîäïèñ, Øèôðîâàíå" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Øèôðîâàíå" + +#: compose.c:131 +msgid "Sign" +msgstr "Ïîäïèñ" + +#: compose.c:133 +msgid "Clear" +msgstr "Îáèêíîâåí òåêñò" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " ïîäïèñ êàòî: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<ïî ïîäðàçáèðàíå>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Øèôðîâàíå c: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"PGP øèôðîâàíå(e), ïîäïèñ(s), ïîäïèñ êàòî(a), è äâåòå(b) èëè áåç òÿõ(f)?" + +#: compose.c:166 +msgid "esabf" +msgstr "esabf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Ïîäïèñ êàòî: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME øèôðîâàíå(e), ïîäïèñ(s), øèôðîâàíå ñ(w), ïîäïèñ êàòî(a), è äâåòå(b) " +"èëè áåç òÿõ(f)?" + +#: compose.c:228 +msgid "eswabf" +msgstr "eswabf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, èëè îòêàç(f)? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345f" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] âå÷å íå ñúùåñòâóâà!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] å ïðîìåíåíî. Æåëàåòå ëè äà îïðåñíèòå êîäèðàíåòî?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Ïðèëîæåíèÿ" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Ïðåäóïðåæäåíèå: '%s' å íåâàëèäåí IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Íå ìîæå äà èçòðèåòå åäèíñòâåíàòà ÷àñò íà ïèñìîòî." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Ëîø IDN â \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Ïðèëàãàíå íà èçáðàíèòå ôàéëîâå..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Ïðèëàãàíåòî íà %s å íåâúçìîæíî!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Îòâàðÿíå íà ïîùåíñêà êóòèÿ, îò êîÿòî äà áúäå ïðèëîæåíî ïèñìî" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr " òàçè êóòèÿ íÿìà ïèñìà." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Ìàðêèðàéòå ïèñìàòà, êîèòî èñêàòå äà ïðèëîæèòå!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Ïðèëàãàíåòî å íåâúçìîæíî!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Ïðîìÿíàòà íà êîäèðàíåòî çàñÿãà ñàìî òåêñòîâèòå ïðèëîæåíèÿ." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Òîâà ïðèëîæåíèå íÿìà äà áúäå ïðåêîäèðàíî." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Òîâà ïðèëîæåíèå ùå áúäå ïðåêîäèðàíî." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Èçáðàíî å íåâàëèäíî êîäèðàíå." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Æåëàåòå ëè äà çàïàçèòå êîïèå îò òîâà ïèñìî?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Ïðåèìåíóâàíå â: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Íîâ ôàéë: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Ïîëåòî Content-Type èìà ôîðìàòà áàçîâ-òèï/ïîäòèï" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Íåïîçíàò Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ôàéëà %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ïðèëîæåíèåòî" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Æåëàåòå ëè äà çàïèøåòå ÷åðíîâàòà?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Çàïèñ íà ïèñìîòî â ïîùåíñêà êóòèÿ" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Çàïèñâàíå íà ïèñìîòî â %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Ïèñìîòî å çàïèñàíî." + +#: compose.c:1317 +#, fuzzy +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME-øèôðîâàíå âå÷å å èçáðàíî. Clear & continue? " + +#: compose.c:1342 +#, fuzzy +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP-øèôðîâàíå âå÷å å èçáðàíî. Clear & continue? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (òåêóùî âðåìå: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- ñëåäâà ðåçóëòàòúò%s) --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Ïàðîëèòå ñà çàáðàâåíè." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Âúâåæäàíå íà PGP ïàðîëà:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Âúâåæäàíå íà SMIME ïàðîëà:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "" +"Æåëàåòå ëè äà ñúçäàäåòå òðàäèöèîííî PGP ïèñìî? (PGP ÷àñòòà å âìúêíàòà, à íå " +"ïðèëîæåíà)" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Ñòàðòèðàíå íà PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "S/MIME ïèñìà áåç óêàçàíèå çà ñúäúðæàíèåòî èì íå ñå ïîääúðæàò." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Îïèò çà èçâëè÷àíå íà PGP êëþ÷îâå...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Îïèò çà èçâëè÷àíå íà S/MIME ñåðòèôèêàòè...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Ãðåøêà: Ïðîòèâîðå÷èâà multipart/signed ñòðóêòóðà! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Ãðåøêà: Íåïîçíàò multipart/signed ïðîòîêîë %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Ïðåäóïðåæäåíèå: %s/%s-ïîäïèñè íå ìîãàò äà áúäàò ïðîâåðÿâàíè. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Ñëåäíèòå äàííè ñà ïîäïèñàíè --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Ïðåäóïðåæäåíèå: íå ìîãàò äà áúäàò íàìåðåíè ïîäïèñè. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Êðàé íà ïîäïèñàíèòå äàííè --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "yes" + +#: curs_lib.c:158 +msgid "no" +msgstr "no" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Æåëàåòå ëè äà íàïóñíåòå mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "íåïîçíàòà ãðåøêà" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Íàòèñíåòå íÿêîé êëàâèø..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " (èçïîëçâàéòå'?' çà èçáîð îò ñïèñúê): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Íÿìà îòâîðåíà ïîùåíñêà êóòèÿ." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Íÿìà ïèñìà." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Òàçè ïîùåíñêà êóòèÿ å ñàìî çà ÷åòåíå." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Òàçè ôóíêöèÿ íå ìîæå äà ñå èçïúëíè ïðè ïðèëàãàíå íà ïèñìà." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Íÿìà âèäèìè ïèñìà." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "" +"Ðåæèìúò íà çàùèòåíàòà îò çàïèñ ïîùåíñêà êóòèÿ íå ìîæå äà áúäå ïðîìåíåí!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Ïðîìåíèòå â òàçè ïîùåíñêà êóòèÿ ùå áúäàò çàïèñàíè ïðè íàïóñêàíåòî é." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Ïðîìåíèòå â òàçè ïîùåíñêà êóòèÿ íÿìà äà áúäàò çàïèñàíè." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Èçõîä" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Çàïèñ" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Íîâî" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Îòãîâîð" + +#: curs_main.c:403 +msgid "Group" +msgstr "Ãðóï. îòã." + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"Ïîùåíñêàòà êóòèÿ å ïðîìåíåíà îò äðóãà ïðîãðàìà. Ìàðêèðîâêèòå ìîæå äà ñà " +"îñòàðåëè." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Íîâè ïèñìà â òàçè ïîùåíñêà êóòèÿ." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Ïîùåíñêàòà êóòèÿ å ïðîìåíåíà îò äðóãà ïðîãðàìà." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Íÿìà ìàðêèðàíè ïèñìà." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Íÿìà êàêâî äà ñå ïðàâè." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Ñêîê êúì ïèñìî íîìåð: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Àðãóìåíòúò òðÿáâà äà áúäå íîìåð íà ïèñìî." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Òîâà ïèñìî íå å âèäèìî." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Ãðåøåí íîìåð íà ïèñìî." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Èçòðèâàíå íà ïèñìà ïî øàáëîí: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Íÿìà àêòèâåí îãðàíè÷èòåëåí øàáëîí." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Îãðàíè÷àâàíå: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Îãðàíè÷àâàíå äî ïèñìàòà, îòãîâàðÿùè íà: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Æåëàåòå ëè äà íàïóñíåòå mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Ìàðêèðàíå íà ïèñìàòà, îòãîâàðÿùè íà: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Âúçñòàíîâÿâàíå íà ïèñìàòà, îòãîâàðÿùè íà: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Ïðåìàõâàíå íà ìàðêèðîâêàòà îò ïèñìàòà, îòãîâàðÿùè íà: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Îòâàðÿíå íà ïîùåíñêàòà êóòèÿ ñàìî çà ÷åòåíå" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Îòâàðÿíå íà ïîùåíñêà êóòèÿ" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s íå å ïîùåíñêà êóòèÿ." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Æåëàåòå ëè äà íàïóñíåòå Mutt áåç äà çàïèøåòå ïðîìåíèòå?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Òîâà å ïîñëåäíîòî ïèñìî." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Íÿìà âúçñòàíîâåíè ïèñìà." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Òîâà å ïúðâîòî ïèñìî." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Òúðñåíåòî å çàïî÷íàòî îòãîðå." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Òúðñåíåòî å çàïî÷íàòî îòäîëó." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Íÿìà íîâè ïèñìà." + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Íÿìà íåïðî÷åòåíè ïèñìà" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " â òîçè îãðàíè÷åí èçãëåä" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Íå ìîæå äà áúäå ïðîìåíÿíà ìàðêèðîâêàòà 'important' íà POP ñúðâúð." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Íÿìà ïîâå÷å íèøêè." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Òîâà å ïúðâàòà íèøêà." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Ïîêàçâàíåòî íà íèøêè íå å âêëþ÷åíî." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Íèøêàòà ñúäúðæà íåïðî÷åòåíè ïèñìà." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Ðåäàêòèðàíåòî íà ïèñìî íà POP ñúðâúð íå å âúçìîæíî." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tâìúêâàíå íà ðåä, çàïî÷âàù ñ åäèí ~\n" +"~b àäðåñ\täîáàâÿíå íà ïîëó÷àòåëè íà êîïèå (Cc) îò ïèñìîòî:\n" +"~c àäðåñè\täîáàâÿíå íà ïîëó÷àòåëè íà ñëÿïî êîïèå (Bcc) îò ïèñìîòî:\n" +"~f ïèñìà\tâêëþ÷âàíå íà ïèñìà\n" +"~F ïèñìà\tñúùîòî êàòî ~f, ñ èçêëþ÷åíèå íà òîâà, ÷å ñà âêëþ÷åíè è çàãëàâíèòå " +"÷àñòè\n" +"~h\t\tðåäàêòèðàíå íà çàãëàâíàòà ÷àñò\n" +"~m ïèñìà\tâêëþ÷âàíå è öèòèðàíå íà ïèñìà\n" +"~M ïèñìà\tñúùîòî êàòî ~m, ñ èçêëþ÷åíèå íà òîâà, ÷å ñà âêëþ÷åíè è çàãëàâíèòå " +"÷àñòè\n" +"~p\t\tîòïå÷àòâàíå íà ïèñìîòî\n" +"~q\t\tçàïèñ íà ôàéëà è çàòâàðÿíå íà ðåäàêòîðà\n" +"~r ôàéë\t\tîòâàðÿíå íà ôàéëà â ðåäàêòîðà\n" +"~t àäðåñè\täîáàâÿíå íà àäðåñè êúì ïîëåòî To:\n" +"~u\t\tïîâòîðíî ðåäàêòèðàíå íà ïîñëåäíèÿ ðåä\n" +"~v\t\tðåäàêòèðàíå íà ïèñìîòî ñ ðåäàêòîðà $visual\n" +"~w ôàéë\t\tçàïèñ íà ïèñìîòî âúâ ôàéë\n" +"~x\t\tîòõâúðëÿíå íà ïðîìåíèòå è èçõîä îò ðåäàêòîðà\n" +"~?\t\tòîâà ïèñìî\n" +".\t\tñàìà íà ðåä îçíà÷àâà êðàé íà ïèñìîòî\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: íåâàëèäåí íîìåð íà ïèñìî.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Çà êðàé íà ïèñìîòî âúâåäåòå . êàòî åäèíñòâåí ñèìâîë íà ðåäà)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Íÿìà ïîùåíñêà êóòèÿ.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Ïèñìîòî ñúäúðæà:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(ïî-íàòàòúê)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "ëèïñâà èìå íà ôàéë.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr " ïèñìîòî íÿìà ðåäîâå.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Ëîø IDN â %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: íåïîçíàòà êîìàíäà íà ðåäàêòîðà (èçïîëçâàéòå~? çà ïîìîù)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "ãðåøêà ïðè ñúçäàâàíå íà âðåìåííà ïîùåíñêà êóòèÿ: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "ãðåøêà ïðè çàïèñ âúâ âðåìåííàòà ïîùåíñêà êóòèÿ: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "ãðåøêà ïðè ñúêðàùàâàíåòî íà âðåìåííàòà ïîùåíñêà êóòèÿ: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Ôàéëúò ñ ïèñìîòî å ïðàçåí!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Ïèñìîòî å íåïðîìåíåíî!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà ôàéëà: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Ãðåøêà ïðè äîáàâÿíåòî íà ïèñìî êúì ïîùåíñêàòà êóòèÿ: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Ãðåøêà. Çàïàçâàíå íà âðåìåííèÿ ôàéë: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Ïîñòàâÿíå íà ìàðêèðîâêà" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Èçòðèâàíå íà ìàðêèðîâêà" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Ãðåøêà: Íåâúçìîæíî å ïîêàçâàíåòî íà êîÿòî è äà å îò àëòåðíàòèâíèòå ÷àñòè " +"íà ïèñìîòî --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Ïðèëîæåíèå: #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Òèï: %s/%s, Êîäèðàíå: %s, Ðàçìåð: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Àâòîìàòè÷íî ïîêàçâàíå ïîñðåäñòâîì %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Àâòîìàòè÷íî ïîêàçâàíå ïîñðåäñòâîì: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Ãðåøêà ïðè ñòàðòèðàíå íà %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Ãðåøêè îò %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Ãðåøêà: message/external-body íÿìà ïàðàìåòðè çà ìåòîä íà äîñòúï --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Òîâà %s/%s ïðèëîæåíèå " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(ðàçìåð %s áàéòà) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "áå èçòðèòî --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- íà %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- èìå: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Òîâà %s/%s ïðèëîæåíèå íå å âêëþ÷åíî â ïèñìîòî, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- à ôàéëúò, îïðåäåëåí çà ïðèêà÷âàíå âå÷å íå ñúùåñòâóâà. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- à óêàçàíèÿò ìåòîä íà äîñòúï %s íå ñå ïîäúðæà. --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Ãðåøêà: multipart/signed áåç protocol ïàðàìåòúð." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Ãðåøêà: multipart/encrypted áåç protocol ïàðàìåòúð." + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà âðåìåííèÿ ôàéë!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s íå ñå ïîääúðæà" + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr " (èçïîëçâàéòå'%s' çà äà âèäèòå òàçè ÷àñò)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' íÿìà êëàâèøíà êîìáèíàöèÿ!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: ãðåøêà ïðè ïðèëàãàíåòî íà ôàéë" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ÃÐÅØÊÀ: ìîëÿ, ñúîáùåòå íè çà òàçè ãðåøêà" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<ÍÅÈÇÂÅÑÒÍÀ>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Îáùè êëàâèøíè êîìáèíàöèè:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Ôóíêöèè, áåç êëàâèøíà êîìáèíàöèÿ:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Ïîìîù çà %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Íå ìîæå äà èçâúðøèòå unhook * îò hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: íåïîçíàò hook òèï: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Íå ìîæå äà èçòðèåòå %s îò %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Íÿìà íàëè÷íè èäåíòèôèêàòîðè." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Èäåíòèôèêàöèÿ (àíîíèìía)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Íåóñïåøíà àíîíèìíà èäåíòèôèêàöèÿ." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Èäåíòèôèêàöèÿ (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Íåóñïåøíà CRAM-MD5 èäåíòèôèêàöèÿ." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Èäåíòèôèöèðàíå (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Íåóñïåøíà GSSAPI èäåíòèôèêàöèÿ." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN å èçêëþ÷åí íà òîçè ñúðâúð." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Âêëþ÷âàíå..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Íåóñïåøíî âêëþ÷âàíå." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Èäåíòèôèöèðàíå (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Íåóñïåøíà SASL èäåíòèôèêàöèÿ." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s íå å âàëèäíà IMAP ïúòåêà" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Çàïèòâàíå çà namespaces..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Çàïèòâàíå çà ñïèñúêà îò ïîùåíñêè êóòèè..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Íÿìà òàêàâà ïàïêà" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Ñúçäàâàíå íà ïîùåíñêà êóòèÿ: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Ïîùåíñêàòà êóòèÿ òðÿáâà äà èìà èìå." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Ïîùåíñêàòà êóòèÿ å ñúçäàäåíà." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Ïîùåíñêàòà êóòèÿ å çàòâîðåíà." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Íåïîïðàâèìà ãðåøêà. Ðàçëè÷åí áðîé íà ñúîáùåíèÿòà!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Çàòâàðÿíå íà âðúçêàòà êúì %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Òîçè IMAP-ñúðâúð å îñòàðÿë. Mutt íÿìà äà ðàáîòè ñ íåãî." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Ñúðâúðúò èçïðàòè íåî÷àêâàí îòãîâîð: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Æåëàåòå ëè äà óñòàíîâèòå ñèãóðíà âðúçêà ñ TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Íå ìîæå äà áúäå óñòàíîâåíà TSL âðúçêà" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Èçáèðàíå íà %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà ïîùåíñêàòà êóòèÿ!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Ãðåøêà ïðè äîáàâÿíåòî êúì IMAP ïîùåíñêèòå êóòèè íà òîçè ñúðâúð" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Æåëàåòå ëè äà ñúçäàäåòå %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Çàòâàðÿíå íà âðúçêàòà êúì IMAP ñúðâúð..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Ìàðêèðàíå íà %d ñúîáùåíèÿ çà èçòðèâàíå..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Íåóñïåøíî ïðåìàõâàíå" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Çàïèñ íà ìàðêèðîâêèòå íà ïèñìîòî... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Ïðåìàõâàíå íà ñúîáùåíèÿòà îò ñúðâúðà..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbo: íåóñïåøåí EXPUNGE" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "Íåóñïåøåí CLOSE" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Íåâàëèäíî èìå íà ïîùåíñêàòà êóòèÿ" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Àáîíèðàíå çà %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Îòïèñâàíå îò %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "" +"Ãðåøêà ïðè ïîëó÷àâàíå íà çàãëàâíèòå ÷àñòè îò òàçè âåðñèÿ íà IMAP-ñúðâúðà." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Íåâúçìîæíî ñúçäàâàíåòî íà âðåìåíåí ôàéë %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Èçòåãëÿíå íà çàãëàâíèòå ÷àñòè... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Èçòåãëÿíå íà ïèñìî..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" +"Íåâàëèäåí èíäåêñ íà ïèñìî. Îïèòàéòå äà îòâîðèòå îòíîâî ïîùåíñêàòà êóòèÿ." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Çàðåæäàíå íà ïèñìî íà ñúðâúðà ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Êîïèðàíå íà %d ñúîáùåíèÿ â %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Êîïèðàíå íà %d-òî ñúîáùåíèå â %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Æåëàåòå ëè äà ïðîäúëæèòå?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: íÿìà àäðåñ" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Ïðåäóïðåæäåíèå: Ëîø IDN '%s' â ïñåâäîíèìà '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "íåâàëèäíî çàãëàâíî ïîëå" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: íåïîçíàò ìåòîä çà ñîðòèðàíå" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): ãðåøêà â ðåãóëÿðíèÿ èçðàç: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: íåïîçíàòà ïðîìåíëèâà" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "òîçè ïðåôèêñ íå å âàëèäåí ñ \"reset\"" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "òàçè ñòîéíîñò íå å âàëèäíà ñ \"reset\"" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s å âêëþ÷åí" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s å èçêëþ÷åí" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: íåâàëèäåí òèï íà ïîùåíñêàòà êóòèÿ" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: íåâàëèäíà ñòîéíîñò" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: Íåïîçíàò òèï." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: íåïîçíàò òèï" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s íå å îáèêíîâåí ôàéë." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Ãðåøêà â %s, ðåä %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: ãðåøêè â %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: âìúêâàíåòî å ïðåêúñíàòî ïîðàäè òâúðäå ìíîãî ãðåøêè â %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: ãðåøêà ïðè %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: òâúðäå ìíîãî àðãóìåíòè" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: íåïîçíàòà êîìàíäà" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Ãðåøêà â êîìàíäíèÿ ðåä: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "ëè÷íàòà Âè äèðåêòîðèÿ íå ìîæå äà áúäå íàìåðåíà" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "ïîòðåáèòåëñêîòî Âè èìå íå ìîæå äà áúäå óñòàíîâåíî" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Îòêðèò å öèêúë îò ìàêðîñè." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Íåäåôèíèðàíà êëàâèøíà êîìáèíàöèÿ." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Íåäåôèíèðàíà êëàâèøíà êîìáèíàöèÿ. Èçïîëçâàéòå '%s' çà ïîìîù." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: òâúðäå ìíîãî àðãóìåíòè" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: íÿìà òàêîâà ìåíþ" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "ïðàçíà ïîñëåäîâàòåëíîñò îò êëàâèøè" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: òâúðäå ìíîãî àðãóìåíòè" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: íåïîçíàòà ôóíêöèÿ" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: ïðàçíà ïîñëåäîâàòåëíîñò îò êëàâèøè" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: òâúðäå ìíîãî àðãóìåíòè" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: ëèïñâàò àðãóìåíòè" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: íÿìà òàêàâà ôóíêöèÿ" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Âúâåäåòå êëþ÷îâå (^G çà ïðåêúñâàíå): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Ñèìâîë = %s, Îñìè÷íî = %o, Äåñåòè÷íî = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "ïðàçíà ôóíêöèÿ" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "êðàé íà óñëîâíîòî èçïúëíåíèå (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "ïîêàçâà ïðèíóäèòåëíî ïðèëîæåíèåòî ñëåä òúðñåíå â mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ïîêàçâà ïðèëîæåíèåòî êàòî òåêñò" + +#: keymap_alldefs.h:9 +#, fuzzy +msgid "Toggle display of subparts" +msgstr "ïîêàçâà/ñêðèâà ïîä÷àñòè" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ïðèäâèæâàíå äî êðàÿ íà ñòðàíèöàòà" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "ïðåïðàùà ïèñìîòî íà äðóã àäðåñ" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "èçáîð íà íîâ ôàéë â òàçè äèðåêòîðèÿ" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ðàçãëåæäàíå íà ôàéë" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ïîêàçâà èìåòî íà òåêóùî ìàðêèðàíèÿ ôàéë" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "àáîíèðà òåêóùî èçáðàíàòà ïîùåíñêà êóòèÿ (ñàìî IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "îòïèñâà àáîíàìåíòà íà òåêóùî èçáðàíàòà ïîùåíñêà êóòèÿ (ñàìî IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "ïîêàçâà âñè÷êè èëè ñàìî àáîíèðàíèòå ïîùåíñêè êóòèè (ñàìî IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "ïîêàçâà ïîùåíñêèòå êóòèè, ñúäúðæàùè íîâè ïèñìà." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "ïðîìÿíà íà äèðåêòîðèèòå" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "ïðîâåðÿâà ïîùåíñêèòå êóòèè çà íîâè ïèñìà" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "ïðèëàãà ôàéë(îâå) êúì ïèñìîòî" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "ïðèëàãà ïèñìî êúì òîâà ïèñìî" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "ïðîìåíÿ ñïèñúêà íà ïîëó÷àòåëèòå íà ñëÿïî êîïèå îò ïèñìîòî (BCC)" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "ïðîìåíÿ ñïèñúêà íà ïîëó÷àòåëèòå íà êîïèå îò ïèñìîòî (CC)" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "ïðîìåíÿ îïèñàíèåòî íà ïðèëîæåíèåòî" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "ïðîìåíÿ êîäèðàíåòî íà ïðèëîæåíèåòî" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "èçáîð íà ôàéë, â êîéòî äà áúäå çàïèñàíî êîïèå îò òîâà ïèñìî" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "èçáîð íà ôàéë, êîéòî äà áúäå ïðèëîæåí" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "ïðîìåíÿ èçïðàùà÷à (From)" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "ðåäàêòèðà ïèñìî è çàãëàâíèòå ìó ïîëåòà" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "ðåäàêòèðà ïèñìî" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "ðåäàêòèðà ïðèëîæåíèå, ïîñðåäñòâîì âïèñâàíå â mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "ðåäàêòèðà ïîëó÷àòåëÿ íà îòãîâîð îò ïèñìîòî (Reply-To)" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "ðåäàêòèðà òåìàòà íà ïèñìî" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "ðåäàêòèðà ñïèñúêà íà ïîëó÷àòåëèòå" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "ñúçäàâà íîâà ïîùåíñêà êóòèÿ (ñàìî IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "ðåäàêòèðà òèïà íà ïðèëîæåíèåòî" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "ñúçäàâà âðåìåííî êîïèå íà ïðèëîæåíèåòî" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "èçâúðøâà ïðàâîïèñíà ïðîâåðêà íà ïèñìîòî ñ ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "ñúçäàâà íà íîâî ïðèëîæåíèå, ñ èçïîëçâàíå íà âïèñâàíå â mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "âêëþ÷âà/èçêëþ÷âà ïðåêîäèðàíåòî íà òîâà ïðèëîæåíèå" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "çàïèñâà ïèñìîòî êàòî ÷åðíîâà çà ïî-êúñíî èçïðàùàíå" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "ïðîìåíÿ èìåòî èëè ïðåìåñòâàíå íà ïðèëîæåíèå" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "èçïðàùà ïèñìîòî" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "ïðåâêëþ÷âà ìåæäó âìúêíàò â ïèñìîòî èëè ïðèëîæåí ôàéë" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "" +"ïðåâêëþ÷âà ìåæäó ðåæèì íà èçòðèâàíå èëè çàïàçâàíå íà ôàéëà ñëåä èçïðàùàíå" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "àêòóàëèçèðà èíôîðìàöèÿòà çà êîäèðàíå íà ïðèëîæåíèåòî" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "çàïèñâà ïèñìîòî â ïîùåíñêà êóòèÿ" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "êîïèðà ïèñìî âúâ ôàéë/ïîùåíñêà êóòèÿ" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "âïèñâà ïîäàòåëÿ íà ïèñìîòî â àäðåñíàòà êíèãà" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "ïðåìåñòâà çàïèñà êúì äîëíèÿ êðàé íà åêðàíà" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "ïðåìåñòâà çàïèñà êúì ñðåäàòà íà åêðàíà" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "ïðåìåñòâà çàïèña êúì ãîðíèÿ êðàé íà åêðàíà" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "ñúçäàâà äåêîäèðàíî (text/plain) êîïèå" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "ñúçäàâàíå íà äåêîäèðàíî (text/plain) êîïèå íà ïèñìîòî è èçòðèâàíå" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "èçòðèâà èçáðàíèÿ çàïèñ" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "èçòðèâà òåêóùàòà ïîùåíñêà êóòèÿ (ñàìî IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "èçòðèâà âñè÷êè ïèñìà â ïîäíèøêàòà" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "èçòðèâà âñè÷êè ïèñìà â íèøêàòà" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "ïîêàçâà ïúëíèÿ àäðåñ íà ïîäàòåëÿ íà ïèñìîòî" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "ïîêàçâà ïèñìî è âêëþ÷âà/èçêëþ÷âà ïîêàçâàíåòî íà çàãëàâíèòå ÷àñòè" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "ïîêàçâà ïèñìî" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "ðåäàêòèðà íåîáðàáîòåíîòî ïèñìî" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "èçòðèâà ñèìâîëà ïðåä êóðñîðà" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "ïðåìåñòâà êóðñîðà ñ åäèí ñèìâîë íàëÿâî" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "ïðåìåñòâà êóðñîðà êúì íà÷àëîòî íà äóìàòà" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ñêîê êúì íà÷àëîòî íà ðåäà" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "öèêëè÷íî ïðåâúðòàíå ìåæäó âõîäíèòå ïîùåíñêè êóòèè" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "äîïúëâà èìåòî íà ôàéë èëè íà ïñåâäîíèì" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "äîïúëâà àäðåñ ÷ðåç çàïèòâàíå" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "èçòðèâà ñèìâîëà ïîä êóðñîðà" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ñêîê êúì êðàÿ íà ðåäà" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "ïðåìåñòâà êóðñîðà ñ åäèí ñèìâîë íàäÿñíî" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "ïðåìåñòâà êóðñîðà êúì êðàÿ íà äóìàòà" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "ïðåâúðòà íàäîëó â ñïèñúêà ñ èñòîðèÿòà" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ïðåâúðòà íàãîðå â ñïèñúêà ñ èñòîðèÿòà" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "èçòðèâà ñèìâîëèòå îò êóðñîðà äî êðàÿ íà ðåäà" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "èçòðèâà ñèìâîëèòå îò êóðñîðà äî êðàÿ íà äóìàòà" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "èçòðèâà âñè÷êè ñèìâîëè íà ðåäà" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "èçòðèâà äóìàòà ïðåäè êóðñîðà" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "áóêâàëíî ïðèåìàíå íà ñëåäâàùèÿ êëàâèø" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "ðàçìåíÿ òåêóùèÿ ñèìâîë ñ ïðåäèøíèÿ" + +#: keymap_alldefs.h:83 +#, fuzzy +msgid "capitalize the word" +msgstr "capitalize the word" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "êîíâåðòèðàíå íà äóìàòà äî áóêâè îò äîëåí ðåãèñòúð" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "êîíâåðòèðàíå íà äóìàòà äî áóêâè îò ãîðåí ðåãèñòúð" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "âúâåæäàíå ía muttrc êîìàíäà" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "âúâåæäàíå íà ôàéëîâà ìàñêà" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "íàïóñêà òîâà ìåíþ" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "ôèëòðèðà ïðèëîæåíèåòî ïðåç êîìàíäà íà êîìàíäíèÿ èíòåðïðåòàòîð" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ïðåìåñòâàíå êúì ïúðâèÿò çàïèñ" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "âêëþ÷âà/èçêëþ÷âà ìàðêèðîâêàòà çà âàæíîñò íà ïèñìîòî" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "ïðåïðàùà ïèñìî ñ êîìåíòàð" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "èçáèðà òåêóùèÿò çàïèñ" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "îòãîâîð íà âñè÷êè ïîëó÷àòåëè" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "ïðåâúðòà åêðàíà íàäîëó ñ 1/2 ñòðàíèöà" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "ïðåâúðòà åêðàíà íàãîðå ñ 1/2 ñòðàíèöà" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "òîçè åêðàí" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ñêîê êúì èíäåêñåí íîìåð" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ïðåìåñòâàíå êúì ïîñëåäíèÿò çàïèñ" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "îòãîâîð íà óêàçàíèÿ mailing list" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "èçïúëíÿâà ìàêðîñ" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "ñúçäàâà íîâî ïèñìî" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "îòâàðÿ äðóãà ïîùåíñêà êóòèÿ" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "îòâàðÿ äðóãà ïîùåíñêà êóòèÿ ñàìî çà ÷åòåíå" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "îòñòðàíÿâà ìàðêèðîâêàòà çà ñòàòóñ îò ïèñìî" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "èçòðèâà ïèñìà, îòãîâàðÿùè íà øàáëîí" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "èçòåãëÿ ïðèíóäèòåëíî ïèñìà îò IMAP ñúðâúð" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "èçòåãëÿ ïèñìà îò POP ñúðâúð" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ïðåìåñòâàíå êúì ïúðâîòî ïèñìî" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ïðåìåñòâàíå êúì ïîñëåäíîòî ïèñìî" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "ïîêàçâà ñàìî ïèñìà, îòãîâàðÿùè íà øàáëîí" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ñêîê êúì ñëåäâàùîòî íîâî ïèñìî" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "ñêîê êúì ñëåäâàùîòî íîâî èëè íåïðî÷åòåíî ïèñìî" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ñêîê êúì ñëåäâàùàòà ïîäíèøêà" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ñêîê êúì ñëåäâàùàòà íèøêà" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ïðåìåñòâàíå êúì ñëåäâàùîòî âúçñòàíîâåíî ïèñìî" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ñêîê êúì ñëåäâàùîòî íåïðî÷åòåíî ïèñìî" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "ñêîê êúì ðîäèòåëñêîòî ïèñìî â íèøêàòà" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ñêîê êúì ïðåäèøíàòà íèøêà" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ñêîê êúì ïðåäèøíàòà ïîäíèøêà" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ïðåìåñòâàíå êúì ïðåäèøíîòî âúçñòàíîâåíî ïèñìî" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ñêîê êúì ïðåäèøíîòî íîâî ïèñìî" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "ñêîê êúì ïðåäèøíîòî íîâî èëè íåïðî÷åòåíî ïèñìî" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ñêîê êúì ïðåäèøíîòî íåïðî÷åòåíî ïèñìî" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "ìàðêèðà òåêóùàòà íèøêà êàòî ïðî÷åòåíà" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "ìàðêèðà òåêóùàòà ïîäíèøêà êàòî ïðî÷åòåíà" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "ïîñòàâÿ ìàðêèðîâêàòà çà ñòàòóñ íà ïèñìî" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "çàïèñâà ïðîìåíèòå â ïîùåíñêàòà êóòèÿ" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "ìàðêèðà ïèñìà, îòãîâàðÿùè íà øàáëîí" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "âúçñòàíîâÿâà ïèñìà, îòãîâàðÿùè íà øàáëîí" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "ïðåìàõâà ìàðêèðîâêàòà îò ïèñìà, îòãîâàðÿùè íà øàáëîí" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ïðåìåñòâàíå êúì ñðåäàòà íà ñòðàíèöàòà" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ïðåìåñòâàíå êúì ñëåäâàùèÿ çàïèñ" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "ïðåâúðòà íàäîëó ñ åäèí ðåä" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ïðåìåñòâàíå êúì ñëåäâàùàòà ñòðàíèöà" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ñêîê êúì êðàÿ íà ïèñìîòî" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "ïîêàçâà/ñêðèâà öèòèðàí òåêñò" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "ïðåñêà÷à öèòèðàíèÿ òåêñò" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "ñêîê êúì íà÷àëîòî íà ïèñìîòî" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "èçïðàùà ïèñìî èëè ïðèëîæåíèå êúì êîìàíäà íà êîìàíäíèÿ èíòåðïðåòàòîð" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ïðåìåñòâàíå êúì ïðåäèøíèÿ çàïèñ" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "ïðåâúðòàíå íàãîðå ñ åäèí ðåä" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ïðåìåñòâàíå êúì ïðåäèøíàòà ñòðàíèöà" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "îòïå÷àòâà òåêóùîòî ïèñìî" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "èçïðàùà çàïèòâàíå êúì âúíøíà ïðîãðàìà çà àäðåñ" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "äîáàâÿ ðåçóëòàòèòå îò çàïèòâàíåòî êúì äîñåãàøíèòå" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "çàïèñâà ïðîìåíèòå â ïîùåíñêàòà êóòèÿ è íàïóñêà ïðîãðàìàòà" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "ðåäàêòèðà ÷åðíîâà" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "èçòðèâà è ïðåðèñóâà åêðàíà" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{âúòðåøíî}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "îòãîâîð íà ïèñìî" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "èçïîëçâà òåêóùîòî ïèñìî êàòî øàáëîí çà íîâî" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "çàïèñâà ïèñìî èëè ïðèëîæåíèå âúâ ôàéë" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "òúðñåíå íà ðåãóëÿðåí èçðàç" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "òúðñåíå íà ðåãóëÿðåí èçðàç â îáðàòíàòà ïîñîêà" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "òúðñè ñëåäâàùîòî ïîïàäåíèå" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "òúðñè ñëåäâàùîòî ïîïàäåíèå â îáðàòíàòà ïîñîêà" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "âêëþ÷âà/èçêëþ÷âà îöâåòÿâàíåòî ïðè òúðñåíå" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "èçïúëíÿâà êîìàíäà â êîìàíäíèÿ èíòåðïðåòàòîð" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ïîäðåæäà ïèñìàòà" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ïîäðåæäà ïèñìàòà â îáðàòåí ðåä" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "ìàðêèðà òåêóùèÿò çàïèñ" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "ïðèëàãà ñëåäâàùàòà ôóíêöèÿ âúðõó ìàðêèðàíèòå ïèñìà" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "ïðèëàãà ñëåäâàùàòà ôóíêöèÿ ÑÀÌÎ âúðõó ìàðêèðàíèòå ïèñìà" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "ìàðêèðà òåêóùàòà ïîäíèøêà" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "ìàðêèðà òåêóùàòà íèøêà" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "âêëþ÷âà/èçêëþ÷âà èíäèêàòîðà, äàëè ïèñìîòî å íîâî" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "âêëþ÷âà/èçêëþ÷âà ïðåçàïèñúò íà ïîùåíñêàòà êóòèÿ" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "ïðåâêëþ÷âà òúðñåíåòî ìåæäó ïîùåíñêè êóòèè èëè âñè÷êè ôàéëîâå" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ïðåìåñòâàíå êúì íà÷àëîòî íà ñòðàíèöàòà" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "âúçñòàíîâÿâà òåêóùîòî ïèñìî" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "âúçñòàíîâÿâà âñè÷êè ïèñìà â íèøêàòà" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "âúçñòàíîâÿâà âñè÷êè ïèñìà â ïîäíèøêàòà" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "ïîêàçâà âåðñèÿòà íà mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "ïîêàçâà ïðèëîæåíèå, èçïîëçâàéêè mailcap" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "ïîêàçâà MIME ïðèëîæåíèÿ" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "ïîêàçâà êîäà íà íàòèñíàò êëàâèø" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "ïîêàçâà àêòèâíèÿ îãðàíè÷èòåëåí øàáëîí" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "ñâèâà/ðàçòâàðÿ òåêóùàòà íèøêà" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "ñâèâà/ðàçòâàðÿ âñè÷êè íèøêè" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "ïðèëàãà PGP ïóáëè÷åí êëþ÷" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "ïîêàçâà PGP íàñòðîéêèòå" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "èçïðàùà PGP ïóáëè÷åí êëþ÷" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "ïîòâúðæäàâà PGP ïóáëè÷åí êëþ÷" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "ïîêàçâà ïîòðåáèòåëñêèÿ íîìåð êúì êëþ÷" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "ïðîâåðÿâà çà êëàñè÷åñêè pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "îäîáðÿâà êîíñòðóèðàíàòà âåðèãà" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "äîáàâÿ remailer êúì âåðèãàòà" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "âìúêâà remailer âúâ âåðèãàòà" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "èçòðèâà remailer îò âåðèãàòà" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "èçáèðà ïðåäèøíèÿ åëåìåíò îò âåðèãàòà" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "èçáèðà ñëåäâàùèÿ åëåìåíò îò âåðèãàòà" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "èçïðàùà ïèñìîòî ïðåç mixmaster remailer âåðèãà" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "ñúçäàâà äåøèôðèðàíî êîïèå è èçòðèâà" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "ñúçäàâà äåøèôðèðàíî êîïèå" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "îòñòðàíÿâà ïàðîëèòå îò ïàìåòòà" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "èçâëè÷à ïîääúðæàíèòå ïóáëè÷íè êëþ÷îâå" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "ïîêàçâà S/MIME íàñòðîéêèòå" + +#: lib.c:60 +#, fuzzy +msgid "Integer overflow -- can't allocate memory!" +msgstr "Integer overflow -- çàäåëÿíåòî íà ïàìåò å íåâúçìîæíî!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Íåäîñòàòú÷íî ïàìåò!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Çà êîíòàêò ñ ïðîãðàìèñòèòå, ìîëÿ èçïðàòåòå ïèñìî äî <mutt-dev@mutt.org>.\n" +"Çà äà ñúîáùèòå çà ãðåøêà, ìîëÿ èçïîëçâàéòå ñêðèïòà flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Àâòîðñêî ïðàâî (C) 1996-2002 Michael R. Elkins è äðóãè.\n" +"Mutt íÿìà ÀÁÑÎËÞÒÍÎ ÍÈÊÀÊÂÀ ÃÀÐÀÍÖÈß; çà ïîäðîáíîñòè íàïèøåòå `mutt -vv'.\n" +"Mutt å ñâîáîäåí ñîôòóåð è ìîæå äà áúäå ðàçïðîñòðàíÿâàí\n" +"ïðè îïðåäåëåíè óñëîâèÿ; íàïèøåòå `mutt -vv' çà ïîâå÷å ïîäðîáíîñòè.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Àâòîðñêî ïðàâî (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n" +"Àâòîðñêî ïðàâî (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Àâòîðñêî ïðàâî (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n" +"Àâòîðñêî ïðàâî (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Àâòîðñêî ïðàâî (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n" +"Àâòîðñêî ïðàâî (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Àâòîðñêî ïðàâî (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Ìíîçèíà, íåñïîìåíàòè òóê, ñúäåéñòâàõà ñ ìíîãî êîä, ïîïðàâêè è ïðåäëîæåíèÿ\n" +"\n" +" Òàçè ïðîãðàìà å ñâîáîäåí ñîôòóåð; ìîæåòå äà ÿ ðàçïðîñòðàíÿâàòå è/èëè\n" +" ïðîìåíÿòå ñúîáðàçíî ïðàâèëàòà íà GNU General Public License, " +"ïóáëèêóâàíè\n" +" îò Ôîíäàöèÿòà çà ñâîáîäåí ñîôòóåð, èçïîëçâàéêè âåðñèÿ 2 íà ëèöåíçà èëè\n" +" (ïî Âàøå æåëàíèå) ïî-êúñíà âåðñèÿ.\n" +"\n" +" Òàçè ïðîãðàìà ñå ðàçïðîñòðàíÿâà ñ íàäåæäàòà äà áúäå ïîëåçíà,\n" +" íî ÁÅÇ ÊÀÊÂÀÒÎ È ÄÀ ÁÈËÎ ÃÀÐÀÍÖÈß; áåç äîðè ïîäðàçáèðàùàòà ñå ãàðàíöèÿ\n" +" ïðè ÏÎÊÓÏÊÎ-ÏÐÎÄÀÆÁÀ èëè ÏÐÈÃÎÄÍÎÑÒ ÇÀ ÊÀÊÂÎÒÎ È ÄÀ ÁÈËÎ ÏÐÈËÎÆÅÍÈÅ.\n" +" Âèæòå GNU General Public License çà ïîâå÷å ïîäðîáíîñòè.\n" +"\n" +" Áè òðÿáâàëî äà ñòå ïîëó÷èëè êîïèå îò GNU General Public License\n" +" çàåäíî ñ òàçè ïðîãðàìà; àêî òîâà íå å òàêà, ìîëÿ ïèøåòå íà Free " +"Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"Ñòàðòèðàíå: mutt [ -nRyzZ ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] [ -m <òèï> ] [ -f " +"<ôàéë> ]\n" +" mutt [ -nR ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] -Q <çàïèòâàíå> [ -Q " +"<çàïèòâàíå> ] [...]\n" +" mutt [ -nR ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] -A <ïñåâäîíèì> [ -A " +"<ïñåâäîíèì> ] [...]\n" +" mutt [ -nx ] [ -e <êîìàíäà> ] [ -a <ôàéë> ] [ -F <ôàéë> ] [ -H " +"<ôàéë> ] [ -i <ôàéë> ] [ -s <òåìà> ] [ -b <àäðåñ> ] [ -c <àäðåñ> ] <àäðåñ> " +"[ ... ]\n" +" mutt [ -n ] [ -e <êîìàíäà> ] [ -F <ôàéë> ] -p\n" +" mutt -v[v]\n" +"\n" +"Ïàðàìåòðè:\n" +" -A <ïñåâäîíèì>\tðàçãðúùà óêàçàíèÿ ïñåâäîíèì\n" +" -a <èìå íà ôàéë>\tïðèëàãà ôàéë êúì ïèñìîòî\n" +" -b <àäðåñ>\tèçïðàùà ñëÿïî êîïèå (BCC) êúì òîçè àäðåñ\n" +" -c <àäðåñ>\tèçïðàùà êîïèå (CC) êúì òîçè àäðåñ\n" +" -e <êîìàíäà>\têîìàíäà, êîÿòî äà áúäå èçïúëíåíà ñëåä èíèöèàëèçàöèÿ\n" +" -f <èìå íà ôàéë>\tïîùåíñêà êóòèÿ, êîÿòî äà áúäå çàðåäåíà\n" +" -F <èìå íà ôàéë>\tàëòåðíàòèâåí muttrc ôàéë\n" +" -H <èìå íà ôàéë>\tôàéë ñúñ çàãëàâíà èíôîðìàöèÿ\n" +" -i <èìå íà ôàéë>\tôàéë, êîéòî äà áúäå âêëþ÷åí â îòãîâîðà\n" +" -m <òèï>\tòèï íà ïîùåíñêàòà êóòèÿ ïî ïîäðàçáèðàíå\n" +" -n\t\tèãíîðèðà ñèñòåìíèÿ Muttrc\n" +" -p\t\tðåäàêòèðà ÷åðíîâà\n" +" -Q <variable>\tçàïèòâàíå çà êîíôèãóðàöèîííà ïðîìåíëèâà\n" +" -R\t\tîòâàðÿ ïîùåíñêàòà êóòèÿ ñàìî çà ÷åòåíå\n" +" -s <òåìà>\tòåìà íà ïèñìîòî (òðÿáâà äà å â êàâè÷êè, àêî ñúäúðæà èíòåðâàëè)\n" +" -v\t\tïîêàçâà âåðñèÿòà è äåôèíèöèèòå, èçïîëçâàíè ïðè êîìïèëàöèÿ\n" +" -x\t\tñèìóëèðà mailx èçïðàùàíå\n" +" -y\t\tèçáîð íà ôàéë îò ëèñòà `mailboxes'\n" +" -z\t\tíåçàáàâåí èçõîä îò ïðîãðàìàòà, àêî â ïîùåíñêàòà êóòèÿ íÿìà ïèñìà\n" +" -Z\t\tîòâàðÿíå íà ïúðâàòà ïîùåíñêà êóòèÿ ñ íîâè ïèñìà èëè íåçàáàâåí èçõîä " +"îò ïðîãðàìàòà àêî íÿìà òàêàâà\n" +" -h\t\tïîêàçâà òîçè òåêñò" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Îïöèè ïðè êîìïèëàöèÿ:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Ãðåøêà ïðè èíèöèàëèçàöèÿ íà òåðìèíàëà." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Debugging íà íèâî %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "Îïöèÿòà DEBUG íå å å äåôèíèðàíà ïðè êîìïèëàöèÿ è å èãíîðèðàíà.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s íå ñúùåñòâóâà. Äà áúäå ëè ñúçäàäåí?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Íå ñà óêàçàíè ïîëó÷àòåëè.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: ãðåøêà ïðè ïðèëàãàíå íà ôàéëà.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Íÿìà ïîùåíñêà êóòèÿ ñ íîâè ïèñìà." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Íå ñà äåôèíèðàíè âõîäíè ïîùåíñêè êóòèè." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Ïîùåíñêàòà êóòèÿ å ïðàçíà." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Çàðåæäàíå íà %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Ïîùåíñêàòà êóòèÿ å ïîâðåäåíà!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Ïîùåíñêàòà êóòèÿ å ïîâðåäåíà!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "" +"Íåïîïðàâèìà ãðåøêà! Ãðåøêà ïðè ïîâòîðíîòî îòâàðÿíå íà ïîùåíñêàòà êóòèÿ!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Ãðåøêà ïðè çàêëþ÷âàíå íà ïîùåíñêàòà êóòèÿ!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: ïîùåíñêàòà êóòèÿ å ïðîìåíåíà, íî íÿìà ïðîìåíåíè ïèñìà! (ìîëÿ, ñúîáùåòå " +"çà òàçè ãðåøêà)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Çàïèñâàíå íà ïèñìàòà... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Ñúõðàíÿâàíå íà ïðîìåíèòå..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Ãðåøêà ïðè çàïèñ! Ïîùåíñêàòà êóòèÿ å çàïèñàíà ÷àñòè÷íî â %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Ãðåøêà ïðè ïîâòîðíîòî îòâàðÿíå íà ïîùåíñêàòà êóòèÿ!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Ïîâòîðíî îòâàðÿíå íà ïîùåíñêàòà êóòèÿ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Ñêîê êúì: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Íåâàëèäåí íîìåð íà èíäåêñ." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Íÿìà âïèñâàíèÿ." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Íå ìîæå äà ïðåâúðòàòå íàäîëó ïîâå÷å." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Íå ìîæå äà ïðåâúðòàòå íàãîðå ïîâå÷å." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Òîâà å ïîñëåäíàòà ñòðàíèöà." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Òîâà å ïúðâàòà ñòðàíèöà." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Ïúðâèÿò çàïèñ å ïîêàçàí." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Ïîñëåäíèÿò çàïèñ å ïîêàçàí." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Òîâà å ïîñëåäíèÿò çàïèñ." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Òîâà å ïúðâèÿò çàïèñ." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Òúðñåíå: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Îáðàòíî òúðñåíå: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Íå å äåôèíèðàí øàáëîí çà òúðñåíå." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Íÿìà ðåçóëòàòè îò òúðñåíåòî." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Íÿìà ìàðêèðàíè çàïèñè." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Çà òîâà ìåíþ íå å èìïëåìåíòèðàíî òúðñåíå." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Ñêîêîâåòå íå ñà èìïëåìåíòèðàíè çà äèàëîçè." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Ìàðêèðàíåòî íå ñå ïîääúðæà." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Çàðåæäàíå íà %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" +"maildir_commit_message(): ãðåøêà ïðè ïîñòàâÿíåòî íà ìàðêà çà âðåìå íà ôàéëà" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "" +"Ôàéëúò å äèðåêòîðèÿ. Æåëàåòå ëè äà çàïèøåòå â íåÿ? [(y) äà, (n) íå, (a) " +"âñè÷êè]" + +#: muttlib.c:835 +msgid "yna" +msgstr "yna" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Ôàéëúò å äèðåêòîðèÿ. Æåëàåòå ëè äà çàïèøåòå â íåÿ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Ôàéë â òàçè äèðåêòîðèÿ: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Ôàéëúò ñúùåñòâóâà. Ïðåçàïèñ(o), äîáàâÿíå(a) èëè îòêàç(c)?" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Çàïèñ íà ïèñìî íà POP ñúðâúð íå å âúçìîæíî." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s íå å ïîùåíñêà êóòèÿ!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Æåëàåòå ëè äà äîáàâèòå ïèñìàòà êúì %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Âðúçêàòà ñ %s å çàòâîðåíà" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL íå å íà ðàçïîëîæåíèå." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Ãðåøêà ïðè èçïúëíåíèå íà êîìàíäàòà \"preconnect\"" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Ãðåøêà â êîìóíèêàöèÿòà ñ %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Ëîø IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Òúðñåíå íà %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Õîñòúò \"%s\" íå ìîæå äà áúäå íàìåðåí." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Ñâúðçâàíå ñ %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Ãðåøêà ïðè ñâúðçâàíå ñ %s (%s)" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Íåäîñòàòú÷íî åíòðîïèÿ â ñèñòåìàòà" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Ñúáèðàíå íà åíòðîïèÿ çà ãåíåðàòîðà íà ñëó÷àéíè ñúáèòèÿ: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s èìà íåñèãóðíè ïðàâà çà äîñòúï!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL å èçêëþ÷åí ïîðàäè ëèïñà íà äîñòàòú÷íî åíòðîïèÿ" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "âõîäíî-èçõîäíà ãðåøêà" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ãðåøêà â ïðîòîêîëà" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "Íåóñïåøåí SSL: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Îò ñúðâúðà íå ìîæå äà áúäå ïîëó÷åí ñåðòèôèêàò" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL âðúçêà, èçïîëçâàùà %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "íåèçâåñòíî" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[ãðåøêà ïðè ïðåñìÿòàíå]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[íåâàëèäíà äàòà]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Ñåðòèôèêàòúò íà ñúðâúðà âñå îùå íå å âàëèäåí" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Ñåðòèôèêàòúò íà ñúðâúðà å èçòåêúë" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Òîçè ñåðòèôèêàò ïðèíàäëåæè íà:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Òîçè ñåðòèôèêàò å èçäàäåí îò:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Òîçè ñåðòèôèêàò å âàëèäåí" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " îò %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " äî %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Ïðúñòîâ îòïå÷àòúê: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Ïðîâåðêà íà SSL ñåðòèôèêàò" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "îòõâúðëÿíå(r), åäíîêðàòíî ïðèåìàíå(o), ïðèåìàíå âèíàãè(a)" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "roa" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "îòõâúðëÿíå(r), åäíîêðàòíî ïðèåìàíå(o)" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ro" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Èçõîä" + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Ïðåäóïðåæäåíèå: Ñåðòèôèêàòúò íå ìîæå äà áúäå çàïàçåí" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Ñåðòèôèêàòúò å çàïèñàí" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "" +"Ïðåìèíàò å äîïóñòèìèÿò áðîé çàêëþ÷âàíèÿ. Æåëàåòå ëè äà ïðåìàõíåòå " +"çàêëþ÷âàíåòî çà %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Íåâúçìîæíî dot-çàêëþ÷âàíå çà %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "fcntl çàêëþ÷âàíå íå å ïîëó÷åíî â îïðåäåëåíîòî âðåìå (timeout)!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "×àêàíå çà fcntl çàêëþ÷âàíå... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "flock çàêëþ÷âàíå íå å ïîëó÷åíî â îïðåäåëåíîòî âðåìå (timeout)!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "×àêàíå çà flock çàêëþ÷âàíå... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Íåâúçìîæíî çàêëþ÷âàíå íà %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Çàðåæäàíå íà %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Çàïèñ íà %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Ãðåøêà ïðè ñèíõðîíèçàöèÿòà íà %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Æåëàåòå ëè äà ïðåìåñòèòå ïðî÷åòåíèòå ïèñìà â %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Æåëàåòå ëè äà èçòðèåòå %d-òî îòáåëÿçàíî çà èçòðèâàíå ïèñìî?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Æåëàåòå ëè äà èçòðèåòå %d îòáåëÿçàíè çà èçòðèâàíå ïèñìà?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Ïðåìåñòâàíå íà ïðî÷åòåíèòå ïèñìà â %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Ïîùåíñêàòà êóòèÿ å íåïðîìåíåíà." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "çàïàçåíè: %d; ïðåìåñòåíè: %d; èçòðèòè: %d" + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "çàïàçåíè: %d; èçòðèòè: %d" + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Íàòèñíåòå '%s' çà âêëþ÷âàíå/èçêëþ÷âàíå íà ðåæèìà çà çàïèñ" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Èçïîëçâàéòå 'toggle-write' çà ðåàêòèâèðàíå íà ðåæèìà çà çàïèñ!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Ïîùåíñêàòà êóòèÿ å ñàìî çà ÷åòåíå. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Ïîùåíñêàòà êóòèÿ å îòáåëÿçàíà." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Íåâúçìîæåí çàïèñ íà ïèñìî" + +#: mx.c:1535 +#, fuzzy +msgid "Integer overflow -- can't allocate memory." +msgstr "Integer overflow -- çàäåëÿíåòî íà ïàìåò å íåâúçìîæíî." + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Ôóíêöèÿòà íå å äîñòúïíà îò òîâà ìåíþ." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "Ïðåä. ñòð." + +#: pager.c:1447 +msgid "NextPg" +msgstr "Ñëåäâ. ñòð." + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Ïðèëîæåíèÿ" + +#: pager.c:1454 +msgid "Next" +msgstr "Ñëåäâàùî" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Òîâà å êðàÿò íà ïèñìîòî." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Òîâà å íà÷àëîòî íà ïèñìîòî." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Îáðàòíî òúðñåíå: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Òúðñåíå: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Ïîìîùòà âå÷å å ïîêàçàíà." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Íÿìà ïîâå÷å öèòèðàí òåêñò." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Íÿìà ïîâå÷å íåöèòèðàí òåêñò ñëåä öèòèðàíèÿ." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "ñúñòàâíîòî ïèñìî íÿìà \"boundary\" ïàðàìåòúð!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Ãðåøêà â èçðàçà: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Íåâàëèäåí äåí îò ìåñåöà: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Íåâàëèäåí ìåñåö: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Íåâàëèäíà äàòà: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "ãðåøêà â èçðàçà" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "ãðåøêà â øàáëîíà ïðè: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: íåâàëèäíà êîìàíäà" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: íå ñå ïîääúðæà â òîçè ðåæèì" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "ëèïñâà ïàðàìåòúð" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "íåïîäõîäÿùî ïîñòàâåíè ñêîáè: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "ïðàçåí øàáëîí" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "ãðåøêà: íåïîçíàò îïåðàòîð %d (ìîëÿ, ñúîáùåòå çà òàçè ãðåøêà)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Êîìïèëèðàíå íà øàáëîíà çà òúðñåíå..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Èçïúëíÿâàíå íà êîìàíäà âúðõó ïèñìàòà..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Íÿìà ïèñìà, îòãîâàðÿùè íà òîçè êðèòåðèé." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Òúðñåíåòî äîñòèãíà äî êðàÿ, áåç äà áúäå íàìåðåíî ñúâïàäåíèå" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Òúðñåíåòî äîñòèãíà äî íà÷àëîòî, áåç äà áúäå íàìåðåíî ñúâïàäåíèå" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Òúðñåíåòî å ïðåêúñíàòî." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP ïàðîëàòà å çàáðàâåíà." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí PGP ïðîöåñ! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Êðàé íà PGP-ðåçóëòàòà --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- ÍÀ×ÀËÎ ÍÀ PGP-ÏÈÑÌÎ --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ÍÀ×ÀËÎ ÍÀ ÁËÎÊ Ñ ÏÓÁËÈ×ÅÍ PGP-ÊËÞ× --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- ÍÀ×ÀËÎ ÍÀ PGP-ÏÎÄÏÈÑÀÍÎ ÏÈÑÌÎ --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- ÊÐÀÉ ÍÀ PGP-ÏÈÑÌÎÒÎ --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ÊÐÀÉ ÍÀ ÁËÎÊÀ Ñ ÏÓÁËÈ×ÍÈß PGP-ÊËÞ× --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- ÊÐÀÉ ÍÀ PGP-ÏÎÄÏÈÑÀÍÎÒÎ ÏÈÑÌÎ --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Ãðåøêà: íà÷àëîòî íà PGP-ïèñìîòî íå ìîæå äà áúäå íàìåðåíî! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Âúòðåøíà ãðåøêà. Ìîëÿ, èíôîðìèðàéòå <roessler@does-not-exist.org>" + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí PGP ïðîöåñ! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Ãðåøêà: íåïðàâèëíî ïîñòðîåíî PGP/MIME ñúîáùåíèå! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Ãðåøêà: íå ìîæå äà áúäå ñúçäàäåí âðåìåíåí ôàéë! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Ñëåäíèòå äàííè ñà øèôðîâàíè ñ PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Êðàé íà øèôðîâàíèòå ñ PGP/MIME äàííè --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí PGP ïðîöåñ!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Æåëàåòå ëè èçïîëçâàòå êëþ÷îâèÿ èäåíòèôèêàòîð \"%s\" çà %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Âúâåäåòå êëþ÷îâ èäåíòèôèêàòîð çà %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP íå ìîæå äà áúäå ñòàðòèðàí" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Ïîëó÷àâàíå íà PGP êëþ÷..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Âñè÷êè ïîäõîäÿùè êëþ÷îâå ñà îñòàðåëè, àíóëèðàíè èëè äåàêòèâèðàíè." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Èçáîð " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Ïðîâåðêà íà êëþ÷ " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP êëþ÷îâå, ñúâïàäàùè ñ <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP êëþ÷îâå, ñúâïàäàùè ñ \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà âðåìåíåí ôàéë" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Êëþ÷îâ èäåíòèôèêàòîð: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "" +"Òîçè êëþ÷ íå ìîæå äà áúäå èçïîëçâàí, çàùîòî å îñòàðÿë, äåàêòèâèðàí èëè " +"àíóëèðàí." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Òîçè èäåíòèôèêàòîð å îñòàðÿë, äåàêòèâèðàí èëè àíóëèðàí." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Òîçè èäåíòèôèêàòîð å ñ íåäåôèíèðàíà âàëèäíîñò." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Òîçè èäåíòèôèêàòîð íå íå å âàëèäåí." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Òîçè èäåíòèôèêàòîð å ñ îãðàíè÷åíà âàëèäíîñò." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Äåéñòâèòåëíî ëè èñêàòå äà èçïîëçâàòå òîçè êëþ÷?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Ìîëÿ, âúâåäåòå êëþ÷îâèÿ èäåíòèôèêàòîð: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Ñòàðòèðàíå íà pgp..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP êëþ÷ %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Òúðñåíå íà êëþ÷îâå, îòãîâàðÿùè íà \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Ñúðâúðúò íå ïîääúðæà êîìàíäàòà TOP." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Ãðåøêà ïðè çàïèñ íà çàãëàâíàòà ÷àñò íà ïèñìîòî âúâ âðåìåíåí ôàéë" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Ñúðâúðúò íå ïîääúðæà êîìàíäàòà UIDL." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s íå å âàëèäíà POP ïúòåêà" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Èçòåãëÿíå íà ñïèñúê ñ ïèñìàòà..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Ãðåøêà ïðè çàïèñ íà ïèñìîòî âúâ âðåìåíåí ôàéë" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Ïðîâåðêà çà íîâè ïèñìà..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP õîñòúò íå å äåôèíèðàí." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Íÿìà íîâè ïèñìà â òàçè POP ïîùåíñêà êóòèÿ." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Æåëàåòå ëè äà èçòðèåòå ïèñìàòà íà ñúðâúðà?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Çàðåæäàíå íà íîâèòå ïèñìà (%d áàéòà)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Ãðåøêà ïðè çàïèñâàíå íà ïîùåíñêàòà êóòèÿ!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d îò %d ïèñìà ñà ïðî÷åòåíè]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Ñúðâúðúò çàòâîðè âðúçêàòà!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Èäåíòèôèöèðàíå (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Èäåíòèôèöèðàíå (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Íåóñïåøíà APOP èäåíòèôèêàöèÿ." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Ñúðâúðúò íå ïîääúðæà êîìàíäàòà USER." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Îñòàâÿíåòî íà ïèñìàòà íà ñúðâúðà å íåâúçìîæíî." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Ãðåøêà ïðè ñâúðçâàíå ñúñ ñúðâúðà: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Çàòâàðÿíå íà âðúçêàòà êúì POP ñúðâúð..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Ïîòâúðæäàâàíå èíäåêñèòå íà ïèñìàòà..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Âðúçêàòà ïðîïàäíà. Æåëàåòå ëè äà ñå âêëþ÷èòå îòíîâî êúì POP ñúðâúðà?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "×åðíîâè" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Íÿìà çàïàçåíè ÷åðíîâè." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Íåâàëèäíà PGP çàãëàâíà ÷àñò" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Íåâàëèäíà S/MIME çàãëàâíà ÷àñò" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Íåóñïåøíî ðàçøèôðîâàíå." + +#: query.c:46 +msgid "New Query" +msgstr "Íîâî çàïèòâàíå" + +#: query.c:47 +msgid "Make Alias" +msgstr "Ñúçäàâàíå íà ïñåâäîíèì" + +#: query.c:48 +msgid "Search" +msgstr "Òúðñåíå" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "×àêàíå íà îòãîâîð..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Êîìàíäà çà çàïèòâàíå íå å äåôèíèðàíà." + +#: query.c:286 +msgid "Query" +msgstr "Çàïèòâàíå" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Çàïèòâàíå: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Çàïèòâàíå '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Pipe" + +#: recvattach.c:53 +msgid "Print" +msgstr "Îòïå÷àòâàíå" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Çàïèñâàíå..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Ïðèëîæåíèåòî å çàïèñàíî íà äèñêà." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ÏÐÅÄÓÏÐÅÆÄÅÍÈÅ! Íà ïúò ñòå äà ïðåçàïèøåòå %s, íàèñòèíà ëè?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Ïðèëîæåíèåòî å ôèëòðèðàíî." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Ôèëòðèðàíå ïðåç: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Ïðåäàâàíå íà (pipe): " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Íå å äåôèíèðàíà êîìàíäà çà îòïå÷àòâàíå íà %s ïðèëîæåíèÿ!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ìàðêèðàíèòå ïðèëîæåíèÿ?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Æåëàåòå ëè äà îòïå÷àòàòå ïðèëîæåíèåòî?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Ãðåøêà ïðè äåøèôðèðàíåòî íà øèôðîâàíî ïèñìî!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Ïðèëîæåíèÿ" + +#: recvattach.c:987 +#, fuzzy +msgid "There are no subparts to show!" +msgstr "Íÿìà ïîä÷àñòè, êîèòî äà áúäàò ïîêàçàíè!." + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Ãðåøêà ïðè èçòðèâàíåòî íà ïðèëîæåíèå îò POP ñúðâúðà." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Èçòðèâàíåòî íà ïðèëîæåíèÿ îò øèôðîâàíè ïèñìà íå ñå ïîääúðæà." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Ïîääúðæà ñå ñàìî èçòðèâàíå íà ïðèëîæåíèÿ îò ñúñòàâíè ïèñìà." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Ìîæå äà èçïðàùàòå îòíîâî ñàìî message/rfc822 ÷àñòè." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Ãðåøêà ïðè ïðåïðàùàíå íà ïèñìîòî!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Ãðåøêà ïðè ïðåïðàùàíå íà ïèñìàòà!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Ãðåøêà ïðè îòâàðÿíå íà âðåìåííèÿ ôàéë %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Æåëàåòå ëè äà ãè ïðåïðàòèòå êàòî ïðèëîæåíèÿ?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Äåêîäèðàíåòî íà âñè÷êè ìàðêèðàíè ïðèëîæåíèÿ å íåâúçìîæíî. Æåëàåòå ëè äà " +"ïðåïðàòèòå ñ MIME îñòàíàëèòå?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Æåëàåòå ëè äà êàïñóëèðàòå ñ MIME ïðåäè ïðåïðàùàíå?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Íÿìà ìàðêèðàíè ïèñìà." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Íÿìà mailing list-îâå!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Äåêîäèðàíåòî íà âñè÷êè ìàðêèðàíè ïðèëîæåíèÿ å íåâúçìîæíî. Æåëàåòå ëè äà " +"êàïñóëèðàòå ñ MIME îñòàíàëèòå?" + +#: remailer.c:480 +msgid "Append" +msgstr "Äîáàâÿíå" + +#: remailer.c:481 +msgid "Insert" +msgstr "Âìúêâàíå" + +#: remailer.c:482 +msgid "Delete" +msgstr "Èçòðèâàíå" + +#: remailer.c:484 +msgid "OK" +msgstr "ÎÊ" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Íåâúçìîæíî ïîëó÷àâàíåòî íà mixmaster \"type2.list\"!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Èçáîð íà remailer âåðèãà." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Ãðåøêà: %s íå ìîæå äà ñå èçïîëçâà êàòî ïîñëåäåí remailer âúâ âåðèãàòà." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "mixmaster âåðèãèòå ñà îãðàíè÷åíè äî %d åëåìåíòà." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "remailer âåðèãàòà âå÷å å ïðàçíà." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Ïúðâèÿò åëåìåíò îò âåðèãàòà å âå÷å èçáðàí." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Ïîñëåäíèÿò åëåìåíò îò âåðèãàòà å âå÷å èçáðàí." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "mixmaster íå ïðèåìà Cc èëè Bcc çàãëàâíè ïîëåòà." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Ìîëÿ, ïîñòàâåòå âàëèäíà ñòîéíîñò â ïðîìåíëèâàòà \"hostname\" êîãàòî " +"èçïîëçâàòå mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Ãðåøêà (%d) ïðè èçïðàùàíå íà ïèñìîòî.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Ãðåøêà ïðè èçïðàùàíå íà ïèñìîòî." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Íåâàëèäíî ôîðìàòèðàíî âïèñâàíå çà òèïà %s â \"%s\" íà ðåä %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Íå å óêàçàí ïúòÿ êúì mailcap" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "íå å íàìåðåíî mailcap-âïèñâàíå çà òèïà %s" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: íåäîñòàòú÷íî àðãóìåíòè" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: òâúðäå ìíîãî àðãóìåíòè" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Ïèñìîòî íÿìà òåìà, æåëàåòå ëè äà ïðåêúñíåòå èçïðàùàíåòî?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Ïðåêúñâàíå ïîðàäè ëèïñà íà òåìà." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Æåëàåòå ëè äà îòãîâîðèòå íà %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Æåëàåòå ëè äà ïðîñëåäèòå äî %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Íèêîå îò ìàðêèðàíèòå ïèñìà íå å âèäèìî!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Æåëàåòå ëè äà ïðèêà÷èòå ïèñìîòî êúì îòãîâîðà?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Ïðèêà÷âàíå íà öèòèðàíî ïèñìî..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Íå âñè÷êè ïîèñêàíè ïèñìà ìîãàò äà áúäàò ïðèêà÷åíè!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Æåëàåòå ëè äà ãî ïðåïðàòèòå êàòî ïðèëîæåíèå?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Ïîäãîòîâêà çà ïðåïðàùàíå..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Æåëàåòå ëè äà ðåäàêòèðàòå ÷åðíîâà?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Æåëàåòå ëè äà ðåäàêòèðàòå ïèñìîòî ïðåäè ïðåïðàùàíå?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Æåëàåòå ëè äà èçòðèåòå íåïðîìåíåíîòî ïèñìî?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Íåïðîìåíåíîòî ïèñìî å èçòðèòî." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Ïèñìîòî íå å èçïðàòåíî." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Ïèñìîòî å çàïèñàíî êàòî ÷åðíîâà." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Íå ñà óêàçàíè ïîëó÷àòåëè!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Íå ñà óêàçàíè ïîëó÷àòåëè." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Ëèïñâà òåìà íà ïèñìîòî. Æåëàåòå ëè äà ïðåêúñíåòå èçïðàùàíåòî?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Ëèïñâà òåìà." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Èçïðàùàíå íà ïèñìîòî..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Ïèñìîòî íå ìîæå äà áúäå èçïðàòåíî." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Ïèñìîòî å èçïðàòåío." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Èçïðàùàíå íà çàäåí ôîí." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Íå å íàìåðåí \"boundary\" ïàðàìåòúð! [ìîëÿ, ñúîáùåòå çà òàçè ãðåøêà]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s âå÷å íå ñúùåñòâóâà!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s íå å îáèêíîâåí ôàéë." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Ãðåøêà ïðè îòâàðÿíå íà %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Ãðåøêà %d (%s) ïðè èçïðàùàíå íà ïèñìîòî." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Èçïðàùàù ïðîöåñ:" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Ëîø IDN %s äîêàòî ôîðìàòà çà ïîâòîðíî èçïðàùàíå áåøå ïîäãîòâÿíà." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Èçõîä îò ïðîãðàìàòà.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Ïîëó÷åí ñèãíàë %s... Èçõîä îò ïðîãðàìàòà.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Ïîëó÷åí ñèãíàë %d... Èçõîä îò ïðîãðàìàòà.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Ïîëçâàù ñå ñ äîâåðèå " + +#: smime.c:303 +msgid "Verified " +msgstr "Ïðîâåðåí " + +#: smime.c:306 +msgid "Unverified" +msgstr "Íåïðîâåðåí" + +#: smime.c:309 +msgid "Expired " +msgstr "Èçòåêúë " + +#: smime.c:312 +msgid "Revoked " +msgstr "Àíóëèðàí " + +#: smime.c:315 +msgid "Invalid " +msgstr "Íåâàëèäåí " + +#: smime.c:318 +msgid "Unknown " +msgstr "Íåèçâåñòåí " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Âúâåäåòå êëþ÷îâ èäåíòèôèêàòîð: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME ñåðòèôèêàòè, ñúâïàäàùè ñ \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "Èäåíòèôèêàòîðúò %s íå å ïðîâåðåí. Æåëàåòå ëè äà ãî èçïîëçâàòå çà %s ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "" +"Æåëàåòå ëè èçïîëçâàòå (íåïîëçâàùèÿ ñå ñ äîâåðèå!) èäåíòèôèêàòîð \"%s\" çà %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Æåëàåòå ëè èçïîëçâàòå èäåíòèôèêàòîðà \"%s\" çà %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Ïðåäóïðåæäåíèå: Èäåíòèôèêàòîðúò %s âñå îùå íå ñå ïîëçâà ñ äîâåðèåòî Âè. " +"(Íàòèñíåòå êëàâèø çà äà ïðîäúëæèòå)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Íå å íàìåðåí (âàëèäåí) ñåðòèôèêàò çà %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí OpenSSL ïðîöåñ!" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "no certfile" + +#: smime.c:1200 +msgid "no mbox" +msgstr "íÿìà ïîùåíñêà êóòèÿ" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Íÿìà ðåçóëòàò îò äúùåðíèÿ OpenSSL ïðîöåñ.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Ïðåäóïðåæäåíèå: Íå ìîæå äà áúäå íàìåðåí ìåæäèíåí ñåðòèôèêàò." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí OpenSSL ïðîöåñ!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Íÿìà ðåçóëòàò îò äúùåðíèÿ OpenSSL ïðîöåñ..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Êðàé íà OpenSSL-ðåçóëòàòà --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Ãðåøêà: íå ìîæå äà áúäå ñòàðòèðàí äúùåðåí OpenSSL ïðîöåñ! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Ñëåäíèòå äàííè ñà øèôðîâàíè ñúñ S/MIME --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Ñëåäíèòå äàííè ñà ïîäïèñàíè ñúñ S/MIME --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Êðàé íà øèôðîâàíèòå ñúñ S/MIME äàííè --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Êðàé íà ïîäïèñàíèòå ñúñ S/MIME äàííè --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ïîäðåæäàíå íà ïîùåíñêàòà êóòèÿ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "" +"Íå ìîæå äà áúäå íàìåðåíà ôóíêöèÿ çà ïîäðåæäàíå! (Ìîëÿ, ñúîáùåòå çà òàçè " +"ãðåøêà)" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(íÿìà ïîùåíñêà êóòèÿ)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Ðîäèòåëñêîòî ïèñìî íå å âèäèìî â òîçè îãðàíè÷åí èçãëåä" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Ðîäèòåëñêîòî ïèñìî íå å íàëè÷íî." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Ñòàðòèðàíå íà OpenSSL..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Æåëàåòå ëè äà èçïðàòèòå ïîâòîðíî ïèñìîòî êúì %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Æåëàåòå ëè äà èçïðàòèòå ïîâòîðíî ïèñìàòà êúì %s...?" + +#~ msgid "ewsabf" +#~ msgstr "ewsabf" diff --git a/po/ca.gmo b/po/ca.gmo new file mode 100644 index 0000000000000000000000000000000000000000..da5cec0c6e2f40de6531efdd72e70680bf19daa1 GIT binary patch literal 83862 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�+rt%K()KyLY3D>`@8lx4ys&^ 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 T$DKePQ%}uLTM^c~t=0blhdrB} literal 0 HcmV?d00001 diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..328121d --- /dev/null +++ b/po/ca.po @@ -0,0 +1,4344 @@ +# Catalan messages for mutt. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Ivan Vilata i Balaguer <ivan@selidor.net>, 2001, 2002, 2003. +# +# ivb (2001/12/08) +# ivb Ací cal ajustar-se a voltes a ~80 columnes. Les traduccions que +# ivb han hagut de ser «compactades» estan marcades amb «ABREUJAT!», +# ivb i s'hi indica la traducció completa. +# +# IDN = Internationalized Domain Name +msgid "" +msgstr "" +"Project-Id-Version: mutt 1.5.4i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-04-01 21:40+0200\n" +"Last-Translator: Ivan Vilata i Balaguer <ivan@selidor.net>\n" +"Language-Team: Catalan <ca@dodds.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nom d'usuari en «%s»: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Contrasenya per %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Ix" + +# ivb (2001/12/08) +# ivb Menú superpoblat: mantenir _molt_ curt! +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Esbrr" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Recupera" + +#: addrbook.c:36 +msgid "Select" +msgstr "Selecciona" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Ajuda" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "No teniu cap àlies!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Àlies" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Nou àlies: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Ja heu definit un àlies amb aquest nom!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Avís: Aquest àlies podria no funcionar. Voleu reparar-lo?" + +#: alias.c:279 +msgid "Address: " +msgstr "Adreça: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Error: «%s» no és un IDN vàlid." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nom personal: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Voleu acceptar?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Guarda en el fitxer: " + +#: alias.c:342 +msgid "Alias added." +msgstr "S'ha afegit l'àlies." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb El nom de fitxer no concorda amb cap «nametemplate»; voleu continuar? +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "El nom de fitxer no concorda amb cap «nametemplate»; continuar?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Cal que l'entrada «compose» de «mailcap» continga «%%s»." + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Error en executar «%s»!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "No s'ha pogut obrir el fitxer per interpretar-ne les capçaleres." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "No s'ha pogut obrir el fitxer per eliminar-ne les capçaleres." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb No hi ha cap entrada «compose» de «%s» en «mailcap»: es crea un fitxer buit. +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "«%s» no té entrada «compose» en «mailcap»: cree fitxer buit." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Cal que l'entrada «edit» de «mailcap» continga «%%s»." + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "No hi ha cap entrada «edit» de «%s» en «mailcap»." + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "No hi ha cap entrada adequada en «mailcap». Es visualitza com a text." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "No s'ha definit el tipus MIME. No es pot veure el fitxer adjunt." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "No s'ha pogut crear el filtre." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "No s'ha pogut crear el filtre." + +#: attach.c:824 +msgid "Write fault!" +msgstr "Error d'escriptura!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "No sé com imprimir això!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Canvia directori" + +#: browser.c:42 +msgid "Mask" +msgstr "Màscara" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "«%s» no és un directori." + +# ivb (2001/12/07) +# ivb Es refereix a les definides en «mailboxes». +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Bústies d'entrada [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Subscrites [%s], màscara de fitxers: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Directori [%s], màscara de fitxers: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "No es pot adjuntar un directori!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "No hi ha cap fitxer que concorde amb la màscara de fitxers." + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Només es poden crear bústies IMAP." + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Només es poden esborrar bústies IMAP." + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Voleu realment esborrar la bústia «%s»?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "S'ha esborrat la bústia." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "No s'ha esborrat la bústia." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Canvia al directori: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Error en llegir el directori." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Màscara de fitxers: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ordena inversament per (d)ata, (a)lfabet, (t)amany, o (n)o ordenar? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ordena per (d)ata, (a)lfabet, (t)amany, o (n)o ordenar? " + +# ivb (2001/11/18) +# ivb (d)ata, (a)lfabet, (t)amany, (n)o +#: browser.c:1049 +msgid "dazn" +msgstr "datn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nom del nou fitxer: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "No es pot veure un directori." + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Error en intentar veure el fitxer." + +# Vaja, no hi ha com posar-li cometes... ivb +#: buffy.c:442 +msgid "New mail in " +msgstr "Hi ha correu nou en " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: El terminal no suporta aquest color." + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: El color no existeix." + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: L'objecte no existeix." + +# ivb (2001/11/18) +# ivb «index» és una paraula clau. +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: L'ordre només és vàlida per un objecte «index»." + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: Manquen arguments." + +#: color.c:563 +msgid "Missing arguments." +msgstr "Manquen arguments." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: Manquen arguments." + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: Manquen arguments." + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: L'atribut no existeix." + +# ivb (2001/12/08) +# ivb També apareix com a error aïllat. +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "Manquen arguments." + +# ivb (2001/12/08) +# ivb També apareix com a error aïllat. +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "Sobren arguments." + +# ivb (2001/12/08) +# ivb També apareix com a error aïllat. +#: color.c:721 +msgid "default colors not supported" +msgstr "Els colors per defecte no estan suportats." + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Voleu verificar la signatura PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "No s'ha pogut crear un fitxer temporal!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "No s'ha pogut crear el filtre de visualització." + +#: commands.c:146 +msgid "Could not copy message" +msgstr "No s'ha pogut copiar el missatge." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S'ha pogut verificar amb èxit la signatura S/MIME." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "El propietari del certificat S/MIME no concorda amb el o la remitent." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "NO s'ha pogut verificar la signatura S/MIME." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "S'ha pogut verificar amb èxit la signatura PGP." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "NO s'ha pogut verificar la signatura PGP." + +#: commands.c:223 +msgid "Command: " +msgstr "Ordre: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Redirigeix el missatge a: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Redirigeix els missatges marcats a: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Error en interpretar l'adreça!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "L'IDN no és vàlid: «%s»" + +# ivb (2001/12/02) +# ivb El programa posa l'interrogant. +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Voleu redirigir el missatge a %s" + +# ivb (2001/12/02) +# ivb El programa posa l'interrogant. +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Voleu redirigir els missatges a %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "No s'ha redirigit el missatge." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "No s'han redirigit els missatges." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "S'ha redirigit el missatge." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "S'han redirigit els missatges." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "No s'ha pogut crear el procés filtre." + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Redirigeix a l'ordre: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "No s'ha definit cap ordre d'impressió." + +#: commands.c:483 +msgid "Print message?" +msgstr "Voleu imprimir el missatge?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Voleu imprimir els misatges marcats?" + +#: commands.c:492 +msgid "Message printed" +msgstr "S'ha imprés el missatge." + +#: commands.c:492 +msgid "Messages printed" +msgstr "S'han imprés els missatges." + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "No s'ha pogut imprimir el missatge." + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "No s'han pogut imprimir els missatges." + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordre inv (d)ata/(o)rig/(r)ebut/(t)ema/de(s)t/(f)il/(c)ap/taman(y)/(p)unt?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordre (d)ata/(o)rig/(r)ebut/(t)ema/de(s)t/(f)il/(c)ap/taman(y)/(p)unt?: " + +# ivb (2001/11/18) +# ivb (d)ata/(o)rig/(r)ebut/(t)ema/de(s)t/(f)il/(c)ap/taman(y)/(p)unt +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dortsfcyp" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Ordre per l'intèrpret: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Descodifica i desa%s en la bústia" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Descodifica i còpia%s en la bústia" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Desxifra i desa%s en la bústia" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Desxifra i còpia%s en la bústia" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Desa%s en la bústia" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Còpia%s en la bústia" + +#: commands.c:706 +msgid " tagged" +msgstr " els marcats" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "S'està copiant en «%s»..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Voleu convertir en «%s» en enviar?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "S'ha canviat «Content-Type» a «%s»." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "S'ha canviat el joc de caràcters a «%s»; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "es farà conversió" + +#: commands.c:914 +msgid "converting" +msgstr "no es farà conversió" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "No hi ha cap fitxer adjunt." + +#: compose.c:84 +msgid "Send" +msgstr "Envia" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Avorta" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Ajunta fitxer" + +#: compose.c:90 +msgid "Descrip" +msgstr "Descriu" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Signa i xifra" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Xifra" + +#: compose.c:131 +msgid "Sign" +msgstr "Signa" + +#: compose.c:133 +msgid "Clear" +msgstr "En clar" + +# ivb (2001/11/19) +# ivb L'espai de principi és per alinear, però no hi ha res a fer... +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " signa com a: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<per defecte>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Xifra amb: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP: (x)ifra, (s)igna, si(g)na com a, (a)mbdós, o en (c)lar? " + +# ivb (2003/03/26) +# ivb (x)ifra, (s)igna, si(g)na com a, (a)mbdós, (c)lar +#: compose.c:166 +msgid "esabf" +msgstr "xsgac" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Signa com a: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME: (x)ifra, (s)igna, xi(f)ra amb, si(g)na com a, (a)mbdós, o en (c)lar? " + +# ivb (2003/03/26) +# ivb (x)ifra, (s)igna, xi(f)ra amb, si(g)na com a, (a)mbdós, o en (c)lar +#: compose.c:228 +msgid "eswabf" +msgstr "xsfgac" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: DES triple, 3: RC2-40, 4: RC2-64, 5: RC2-128, o per (d)efecte? " + +# 1: DES, 2: DES triple, 3: RC2-40, 4: RC2-64, 5: RC2-128, o per (d)efecte ivb +#: compose.c:238 +msgid "12345f" +msgstr "12345d" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "«%s» [#%d] ja no existeix!" + +# ivb (2001/11/19) +# ivb ABREUJAR! +# S'ha modificat «%s» [#%d]. Voleu actualitzar-ne la codificació? +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "Modificat «%s» [#%d]. Actualitzar codificació?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Fitxers adjunts" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Avís: «%s» no és un IDN vàlid." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "No es pot esborrar l'únic fitxer adjunt." + +# El primer camp és una capçalera de correu. ivb +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "L'IDN de «%s» no és vàlid: «%s»" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "S'estan adjuntant els fitxers seleccionats..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "No s'ha pogut adjuntar «%s»!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Bústia a obrir per adjuntar-ne missatges" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "La carpeta no conté missatges." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Marqueu els missatges que voleu adjuntar!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "No s'ha pogut adjuntar!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "La recodificació només afecta els fitxers adjunts de tipus text." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "No es convertirà el fitxer adjunt actual." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Es convertirà el fitxer adjunt actual." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "La codificació no és vàlida." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Voleu guardar una còpia d'aquest missatge?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Reanomena a: " + +# ivb (2001/11/19) +# ivb Cuidadín: en «compose» la cadena és el nom de fitxer i en +# ivb «editmsg» i «sendlib» és la cadena d'error. +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Ha fallat stat() sobre «%s»: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nou fitxer: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "«Content-Type» ha de tenir la forma «base/sub»." + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "El valor de «Content-Type» «%s» no és conegut." + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "No s'ha pogut crear el fitxer «%s»." + +# ivb (2001/11/20) +# ivb Curiosa forma d'emetre un error... +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "El que ocorre ací és que no s'ha pogut adjuntar un fitxer." + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Voleu posposar aquest missatge?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Escriu el missatge en la bústia" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "S'està escrivint el missatge en «%s»..." + +#: compose.c:1305 +msgid "Message written." +msgstr "S'ha escrit el missatge." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "El missatge ja usa S/MIME. Voleu posar-lo en clar i continuar? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "El missatge ja usa PGP. Voleu posar-lo en clar i continuar? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (data actual: %c)" + +# La primera: «OpenSSL» o «PGP» (meec, apòstrof); la segona l'enterior. ivb +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Aquesta és l'eixida de %s%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "S'han esborrat de la memòria la o les frases clau." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Entreu la frase clau de PGP:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Entreu la frase clau d'S/MIME:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Voleu crear un missatge PGP tradicional (inserit)?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "S'està invocant PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "No es suporten els misatges S/MIME sense pistes sobre el contingut." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "S'està provant a extreure les claus PGP...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "S'està provant a extreure els certificats S/MIME...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Error: L'estructura «multipart/signed» no és consistent! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Error: El protocol «%s» de «multipart/signed» --]\n" +"[-- no és conegut! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Avís: No es poden verificar les signatures «%s/%s». --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Les dades següents es troben signades: --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Avís: No s'ha trobat cap signatura. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Final de les dades signades. --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "sí" + +#: curs_lib.c:158 +msgid "no" +msgstr "no" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Voleu abandonar Mutt?" + +# ivb (2001/12/08) +# ivb Apareix amb més coses al darrere (curs_lib) o entre parèntesis +# ivb (mutt_socket) -> sense punt. +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "Error desconegut" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Premeu qualsevol tecla per continuar..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " («?» llista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "No hi ha cap bústia oberta." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "No hi ha cap missatge." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "La bústia és de només lectura." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "No es permet aquesta funció en el mode d'adjuntar missatges." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "No hi ha cap missatge visible." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "No es pot establir si una bústia de només lectura pot ser modificada." + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "S'escriuran els canvis a la carpeta en abandonar-la." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "No s'escriuran els canvis a la carpeta." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Ix" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Desa" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Nou correu" + +# ivb (2001/12/08) +# ivb Menú superpoblat: mantenir _molt_ curt! +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Respon" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grup" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"S'ha modificat la bústia des de fora. Els senyaladors poden ser incorrectes." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Hi ha correu nou en aquesta bústia." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "S'ha modificat la bústia des de fora." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "No hi ha cap missatge marcat." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "S'està connectant amb «%s»..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Salta al missatge: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "L'argument ha de ser un número de missatge." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Aqueix missatge no és visible." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "El número de missatge no és vàlid." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Esborra els missatges que concorden amb: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "No hi ha cap patró limitant en efecte." + +# ivb (2001/12/08) +# ivb Nooop! Només mostra el límit actual. +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Límit: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limita als missatges que concorden amb: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Voleu abandonar Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Marca els missatges que concorden amb: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Restaura els missatges que concorden amb: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Desmarca els missatges que concorden amb: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Obri en mode de només lectura la bústia" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Obri la bústia" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "«%s» no és una bústia." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Voleu abandonar Mutt sense desar els canvis?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Vos trobeu sobre l'últim missatge." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "No hi ha cap missatge no esborrat." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Vos trobeu sobre el primer missatge." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "La recerca ha tornat al principi." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "La recerca ha tornat al final." + +# ivb (2001/12/08) +# ivb Ací no hi ha forma de posar el punt final de segur :( +#: curs_main.c:1383 +msgid "No new messages" +msgstr "No hi ha cap missatge nou" + +# ivb (2001/12/08) +# ivb Ací no hi ha forma de posar el punt final de segur :( +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "No hi ha cap missatge no llegit" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " en aquesta vista limitada." + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "No es pot canviar el senyalador «important» en un servidor POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "No hi ha més fils." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Vos trobeu en el primer fil." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "No s'ha habilitat l'ús de fils." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "El fil conté missatges no llegits." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "No es pot editar un missatge en un servidor POP." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tinsereix una línia que comença amb un sol ~\n" +"~b usuaris\tafig els usuaris al camp Bcc:\n" +"~c usuaris\tafig els usuaris al camp Cc:\n" +"~f missatges\tinclou els missatges\n" +"~F missatges\tel mateix que ~f, però incloent també les capçaleres\n" +"~h\t\tedita la capçalera del missatge\n" +"~m missatges\tinclou i cita els missatges\n" +"~M missatges\tel mateix que ~m, però incloent també les capçaleres\n" +"~p\t\timprimeix el missatge\n" +"~q\t\tescriu el fitxer i abandona l'editor\n" +"~r fitxer\tllig un fitxer en l'editor\n" +"~t usuaris\tafig els usuaris al camp To:\n" +"~u\t\tretorna a la línia anterior\n" +"~v\t\tedita el missatge amb l'editor $visual\n" +"~w fitxer\tescriu el missatge en el fitxer\n" +"~x\t\tavorta els canvis i abandona l'editor\n" +"~?\t\tmostra aquest missatge\n" +".\t\ta soles en una línia termina l'entrada\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: El número de missatge no és vàlid.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Termineu el missatge amb . a soles en una línia)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "No hi ha cap bústia activa.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Contingut del missatge:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(continuar)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "Manca un nom de fitxer.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "El missatge no conté cap línia.\n" + +# El primer camp és una capçalera de correu. ivb +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "L'IDN de «%s» no és vàlid: «%s»\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: L'ordre de l'editor no és coneguda (~? per ajuda).\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "No s'ha pogut crear una carpeta temporal: %s." + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "No s'ha pogut escriure en una carpeta temporal: %s." + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "No s'ha pogut truncar una carpeta temporal: %s." + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "El fitxer missatge és buit!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "El missatge no ha estat modificat!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "No s'ha pogut obrir el fitxer missatge: %s." + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "No s'ha pogut afegir a la carpeta: %s." + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Error. Es manté el fitxer temporal: %s" + +# ivb (2001/12/08) +# ivb Així queda més clar. El programa posa l'interrogant. +#: flags.c:332 +msgid "Set flag" +msgstr "Quin senyalador voleu activar" + +# ivb (2001/12/08) +# ivb Així queda més clar. El programa posa l'interrogant. +#: flags.c:332 +msgid "Clear flag" +msgstr "Quin senyalador voleu desactivar" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Error: No s'ha pogut mostrar cap part del «multipart/alternative»! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Fitxer adjunt #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tipus: %s/%s, Codificació: %s, Tamany: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "" +"[-- Eixida de l'ordre de visualització automàtica --]\n" +"[-- «%s» --]\n" + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb S'està invocant l'ordre de visualització automàtica: %s +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Ordre de visualització automàtica: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- No s'ha pogut executar «%s». --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "" +"[-- Errors de l'ordre de visualització automàtica --]\n" +"[-- «%s» --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Error: La part «message/external-body» --]\n" +"[-- no té paràmetre «access-type». --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "" +"[-- Aquest fitxer adjunt de tipus «%s/%s» --]\n" +"[-- " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(amb tamany %s octets) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "ha estat esborrat --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- amb data %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nom: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Aquest fitxer adjunt de tipus «%s/%s» no s'inclou, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- i la font externa indicada ha expirat. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- i el valor indicat d'«access-type» «%s» --]\n" +"[-- no es suporta. --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Error: La part «multipart/signed» no té paràmetre «protocol»!" + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Error: La part «multipart/encrypted» no té paràmetre «protocol»!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "No s'ha pogut obrir el fitxer temporal!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- No es suporta «%s/%s». " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(useu «%s» per veure aquesta part)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(vinculeu «view-attachents» a una tecla!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: No s'ha pogut adjuntar el fitxer." + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERROR: Per favor, informeu d'aquest error." + +# ivb (2001/12/07) +# ivb Es refereix a un menú -> masculí. +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<DESCONEGUT>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Vincles genèrics:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funcions no vinculades:\n" +"\n" + +# ivb (2001/12/08) +# ivb El noms dels menús no estan traduïts. +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Ajuda de «%s»" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: No es pot fer «unhook *» des d'un «hook»." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: El tipus de «hook» no és conegut: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: No es pot esborrar un «%s» des d'un «%s»." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "No hi ha cap autenticador disponible." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "S'està autenticant (anònimament)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "L'autenticació anònima ha fallat." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "S'està autenticant (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "L'autenticació CRAM-MD5 ha fallat." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "S'està autenticant (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "L'autenticació GSSAPI ha fallat." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "L'ordre LOGIN no es troba habilitada en aquest servidor." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "S'està entrant..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "L'entrada ha fallat." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "S'està autenticant (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "L'autenticació SASL ha fallat." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "«%s» no és un camí IMAP vàlid." + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "S'estan obtenint els espais de noms..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "S'està obtenint la llista de carpetes..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "La carpeta no existeix." + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Crea la bústia: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "La bústia ha de tenir un nom." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "S'ha creat la bústia." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "S'ha tancat la bústia." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Error fatal. El recompte de missatges no es troba sincronitzat!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "S'està tancant la connexió amb «%s»..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Aquest servidor IMAP és antic. Mutt no pot funcionar amb ell." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Voleu protegir la connexió usant TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "No s'ha pogut negociar la connexió TLS." + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "S'està seleccionant la bústia «%s»..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Error en obrir la bústia." + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Aquest servidor no permet afegir a les bústies IMAP." + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Voleu crear «%s»?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "S'està tancant la connexió amb el servidor IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "S'estan marcant %d missatges com a esborrats..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "No s'han pogut eliminar els missatges." + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "S'estan guardant els senyaladors d'estat dels missatges... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "S'estan eliminant missatges del servidor..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: Ha fallat «EXPUNGE»." + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "Ha fallat «CLOSE»." + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "El nom de la bústia no és correcte." + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "S'està subscrivint a «%s»..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "S'està dessubscrivint de «%s»..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "" +"No s'han pogut recollir les capçaleres d'aquesta versió de servidor IMAP." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "No s'ha pogut crear el fitxer temporal «%s»." + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "S'estan recollint les capçaleres dels missatges... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "S'està recollint el missatge..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "L'índex del missatge no és correcte. Proveu de reobrir la bústia." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "S'està penjant el missatge..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "S'estan copiant %d missatges en «%s»..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "S'està copiant el missatge %d en «%s»..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Voleu continuar?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: No s'ha especificat cap adreça." + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Avís: L'IDN «%s» de l'àlies «%s» no és vàlid.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "El camp de capçalera no és vàlid." + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: El mètode d'ordenació no és conegut." + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): Error en l'expressió regular: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: La variable no és coneguda." + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "El prefix usat en «reset» no és permés." + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "El valor usat en «reset» no és permés." + +# ivb (2001/11/24) +# ivb Es refereix a una variable lògica. +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "«%s» està activada." + +# ivb (2001/11/24) +# ivb Es refereix a una variable lògica. +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "«%s» no està activada." + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: El tipus de bústia no és vàlid." + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: El valor no és vàlid." + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: El tipus no és conegut." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: El tipus no és conegut." + +# ivb (2001/11/19) +# ivb Cuidadín: en «compose» la cadena és el nom de fitxer i en +# ivb «editmsg» i «sendlib» és la cadena d'error. +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Ha fallat stat() sobre «%s»: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "«%s» no és un fitxer ordinari." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Error en «%s», línia %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: Hi ha errors en «%s»." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb source: S'avorta la lectura de «%s» perquè conté massa errors. +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: «%s» conté massa errors: s'avorta la lectura." + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: Error en «%s»." + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: Sobren arguments." + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: L'ordre no és coneguda." + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Error en la línia d'ordres: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "No s'ha pogut determinar el directori de l'usuari." + +#: init.c:1928 +msgid "unable to determine username" +msgstr "No s'ha pogut determinar el nom de l'usuari." + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "S'ha detectat un bucle entre macros." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "La tecla no està vinculada." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "La tecla no està vinculada. Premeu «%s» per obtenir ajuda." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: Sobren arguments." + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: El menú no existeix." + +#: keymap.c:713 +msgid "null key sequence" +msgstr "La seqüència de tecles és nul·la." + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: Sobren arguments." + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: La funció no es troba en el mapa." + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: La seqüència de tecles és buida." + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: Sobren arguments." + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: Manquen arguments." + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: La funció no existeix." + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Premeu les tecles (^G avorta): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Caràcter = %s, Octal = %o, Decimal = %d" + +# ivb (2001/11/24) +# ivb Totes aquestes cadenes són missatges d'ajuda. No sembla haver +# ivb restriccions de longitud. +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "l'operació nul·la" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "força la visualització d'un fitxer adjunt usant «mailcap»" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "mostra un fitxer adjunt com a text" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "activa o desactiva la visualització de les subparts" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "va al final de la pàgina" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "redirigeix un missatge a un altre destinatari" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "selecciona un nou fitxer d'aquest directori" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "mostra un fitxer" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "mostra el nom del fitxer seleccionat actualment" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "es subscriu a la bústia actual (només en IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "es dessubscriu de la bústia actual (només en IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "" +"canvia entre veure totes les bústies o només aquelles subscrites (només en " +"IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "llista les bústies amb correu nou" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "canvia de directori" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "comprova si hi ha correu nou en les bústies" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "adjunta fitxers a aquest missatge" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "adjunta missatges a aquest missatge" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "edita la llista de còpia cega (Bcc)" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "edita la llista de còpia (Cc)" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "edita la descripció d'un fitxer adjunt" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "edita la codificació de la transferència d'un fitxer adjunt" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "demana un fitxer on desar una còpia d'aquest missatge" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "edita un fitxer adjunt" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "edita el camp de remitent (From)" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "edita el missatge amb capçaleres" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "edita el missatge" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "edita el fitxer adjunt usant l'entrada de «mailcap»" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "edita el camp de resposta (Reply-To)" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "edita l'assumpte del missatge (Subject)" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "edita la llista de destinataris (To)" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "crea una nova bústia (només en IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "edita el tipus de contingut d'un fitxer adjunt" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "crea una còpia temporal d'un fitxer adjunt" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "executa «ispell» (comprovació ortogràfica) sobre el missatge" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "crea un nou fitxer adjunt usant l'entrada de «mailcap»" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "estableix si un fitxer adjunt serà recodificat" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "desa aquest missatge per enviar-lo més endavant" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "reanomena (o mou) un fitxer adjunt" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "envia el missatge" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "canvia la disposició entre en línia o adjunt" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "estableix si cal esborrar un fitxer una volta enviat" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "edita la informació de codificació d'un missatge" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "escriu el missatge en una carpeta" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "còpia un missatge en un fitxer o bústia" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "crea un àlies partint del remitent d'un missatge" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "mou l'indicador al final de la pantalla" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "mou l'indicador al centre de la pantalla" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "mou l'indicador al començament de la pantalla" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "crea una còpia descodificada (text/plain) del missatge" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "crea una còpia descodificada (text/plain) del missatge i l'esborra" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "esborra l'entrada actual" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "esborra la bústia actual (només en IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "esborra tots els missatges d'un subfil" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "esborra tots els missatges d'un fil" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "mostra l'adreça completa del remitent" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "mostra un missatge i oculta o mostra certs camps de la capçalera" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "mostra un missatge" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "edita un missatge en brut" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "esborra el caràcter anterior al cursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "mou el cursor un caràcter a l'esquerra" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "mou el cursor al començament de la paraula" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "salta al començament de la línia" + +# ivb (2001/12/07) +# ivb Es refereix a les definides en «mailboxes». +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "canvia entre les bústies d'entrada" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "completa el nom de fitxer o l'àlies" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "completa una adreça fent una consulta" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "esborra el caràcter sota el cursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "salta al final de la línia" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "mou el cursor un caràcter a la dreta" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "mou el cursor al final de la paraula" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "es desplaça cap avall en la llista d'historial" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "es desplaça cap amunt en la llista d'historial" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "esborra els caràcters des del cursor fins el final de la línia" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "esborra els caràcters des del cursor fins el final de la paraula" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "esborra tots els caràcters de la línia" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "esborra la paraula a l'esquerra del cursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "escriu tal qual la tecla premuda a continuació" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "transposa el caràcter sota el cursor i l'anterior" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "posa la primera lletra de la paraula en majúscula" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "converteix la paraula a minúscules" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "converteix la paraula a majúscules" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "executa una ordre de «muttrc»" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "estableix una màscara de fitxers" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "abandona aquest menú" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtra un fitxer adjunt amb una ordre de l'intèrpret" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "va a la primera entrada" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "canvia el senyalador «important» d'un missatge" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "reenvia un missatge amb comentaris" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "selecciona l'entrada actual" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "respon a tots els destinataris" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "avança mitja pàgina" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "endarrereix mitja pàgina" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "mostra aquesta pantalla" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "salta a un número d'índex" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "va a l'última entrada" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "respon a la llista de correu especificada" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "executa una macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "redacta un nou missatge de correu" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "obri una carpeta diferent" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "obri una carpeta diferent en mode de només lectura" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "elimina un senyalador d'estat d'un missatge" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "esborra els missatges que concorden amb un patró" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "força l'obtenció del correu d'un servidor IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "obté el correu d'un servidor POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "va al primer missatge" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "va a l'últim missatge" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "mostra només els missatges que concorden amb un patró" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "salta al següent missatge nou" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "salta al següent missatge nou o no llegit" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "salta al subfil següent" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "salta al fil següent" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "va al següent missatge no esborrat" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "salta al següent missatge no llegit" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "salta al missatge pare del fil" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "salta al fil anterior" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "salta al subfil anterior" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "va a l'anterior missatge no llegit" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "salta a l'anterior missatge nou" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "salta a l'anterior missatge nou o no llegit" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "salta a l'anterior missatge no llegit" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "marca el fil actual com a llegit" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "marca el subfil actual com a llegit" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "estableix un senyalador d'estat d'un missatge" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "desa els canvis realitzats a la bústia" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "marca els missatges que concorden amb un patró" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "restaura els missatges que concorden amb un patró" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "desmarca els missatges que concorden amb un patró" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "va al centre de la pàgina" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "va a l'entrada següent" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "avança una línia" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "va a la pàgina següent" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "salta al final del missatge" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "oculta o mostra el text citat" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "avança fins el final del text citat" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "salta a l'inici del missatge" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "redirigeix un missatge o fitxer adjunt a una ordre de l'intèrpret" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "va a l'entrada anterior" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "endarrereix una línia" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "va a la pàgina anterior" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "imprimeix l'entrada actual" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "pregunta a un programa extern per una adreça" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "afig els resultats d'una consulta nova als resultats actuals" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "desa els canvis realitzats a la bústia i ix" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "recupera un missatge posposat" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "neteja i redibuixa la pantalla" + +# ivb (2001/11/26) +# ivb Es refereix a una funció -> femení. +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interna}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "respon a un missatge" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "usa el missatge actual com a plantilla per un de nou" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "guarda un missatge o fitxer adjunt en un fitxer" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "cerca una expressió regular" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "cerca cap enrere una expressió regular" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "cerca la concordança següent" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "cerca la concordança anterior" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "estableix si cal resaltar les concordances trobades" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "invoca una ordre en un subintèrpret" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ordena els missatges" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ordena inversament els missatges" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "marca l'entrada actual" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "aplica la funció següent als missatges marcats" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "aplica la funció següent als missatges marcats" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "marca el subfil actual" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "marca el fil actual" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "canvia el senyalador «nou» d'un missatge" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "estableix si s'escriuran els canvis a la bústia" + +# ivb (2001/12/07) +# ivb Es refereix a les definides en «mailboxes». +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "" +"estableix si es navegarà només per les bústies d'entrada o per tots els " +"fitxers" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "va a l'inici de la pàgina" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "restaura l'entrada actual" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "restaura tots els missatges d'un fil" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "restaura tots els missatges d'un subfil" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "mostra el número de versió i la data de Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "mostra un fitxer adjunt usant l'entrada de «mailcap» si és necessari" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "mostra els fitxers adjunts MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "mostra el codi d'una tecla premuda" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "mostra el patró limitant actiu" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "plega o desplega el fil actual" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "plega o desplega tots els fils" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "adjunta una clau pública PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "mostra les opcions de PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "envia una clau pública PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "verifica una clau pública PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "mostra l'identificador d'usuari d'una clau" + +# ivb (2001/12/02) +# ivb Es refereix al format del missatge. +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "comprova si s'ha usat el PGP clàssic" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "accepta la cadena construïda" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "afig un redistribuïdor a la cadena" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "inserta un redistribuïdor en la cadena" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "esborra un redistribuïdor de la cadena" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "selecciona l'element anterior de la cadena" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "selecciona l'element següent de la cadena" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "envia el missatge per una cadena de redistribuïdors Mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "fa una còpia desxifrada del missatge i esborra aquest" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "fa una còpia desxifrada del missatge" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "esborra de la memòria la o les frases clau" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "extreu les claus públiques suportades" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "mostra les opcions d'S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "No resta memòria!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Per contactar amb els desenvolupadors, per favor envieu un correu\n" +"a <mutt-dev@mutt.org>. Per informar d'un error, per favor useu\n" +"la utilitat flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins i d'altres.\n" +"Mutt s'ofereix SENSE CAP GARANTIA; useu «mutt -vv» per obtenir-ne més\n" +"detalls. Mutt és programari lliure i podeu, si voleu, redistribuir-lo\n" +"sota certes condicions; useu «mutt -vv» per obtenir-ne més detalls.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Moltes altres persones que no s'hi mencionen han contribuït amb gran\n" +"quantitat de codi, solucions i suggeriments.\n" +"\n" +" Aquest és programari lliure; podeu redistribuir-lo i/o modificar-lo\n" +" sota els termes de la Llicència Pública General GNU tal i com ha estat\n" +" publicada per la Free Software Foundation; bé sota la versió 2 de la\n" +" Llicència o bé (si ho preferiu) sota qualsevol versió posterior.\n" +"\n" +" Aquest programa es distribueix amb l'expectativa de que serà útil,\n" +" però SENSE CAP GARANTIA; ni tan sols la garantia implícita de\n" +" COMERCIABILITAT o ADEQUACIÓ PER UN PROPÒSIT PARTICULAR. Vegeu la\n" +" Llicència Pública General GNU per obtenir-ne més detalls.\n" +"\n" +" Hauríeu d'haver rebut una còpia de la Llicència Pública General GNU\n" +" juntament amb aquest programa; en cas contrari, escriviu a la Free\n" +" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n" +" MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"Forma d'ús: mutt [-nRyzZ] [-e <ord>] [-F <fitx>] [-m <tipus>] [-f <fitx>]\n" +" mutt [-nR] [-e <ord>] [-F <fitx>] -Q <var> [-Q <var>] [...]\n" +" mutt [-nR] [-e <ord>] [-F <fitx>] -A <àlies> [-A <àlies>] [...]\n" +" mutt [-nx] [-e <ord>] [-a <fitx>] [-F <fitx>] [-H <fitx>]\n" +" [-i <fitx>] [-s <assmpt>] [-b <adr>] [-c <adr>] <adr> " +"[...]\n" +" mutt [-n] [-e <ord>] [-F <fitx>] -p\n" +" mutt -v[v]\n" +"\n" +"Opcions:\n" +" -A <alias> Expandeix l'àlies indicat.\n" +" -a <fitxer> Adjunta un fitxer al missatge.\n" +" -b <adreça> Indica una adreça per la còpia cega (BCC).\n" +" -c <adreça> Indica una adreça per la còpia (CC).\n" +" -e <ordre> Indica una ordre a executar abans de la " +"inicialització.\n" +" -f <fitxer> Indica quina bústia llegir.\n" +" -F <fitxer> Indica un fitxer «muttrc» alternatiu.\n" +" -H <fitxer> Indica un fitxer esborrany d'on llegir la capçalera.\n" +" -i <fitxer> Indica un fitxer que Mutt inclourà en la resposta.\n" +" -m <tipus> Indica un tipus de bústia per defecte.\n" +" -n Fa que Mutt no llija el fitxer «Muttrc» del sistema.\n" +" -p Recupera un missatge posposat.\n" +" -Q <variable> Consulta el valor d'una variable de configuració.\n" +" -R Obri la bústia en mode de només lectura.\n" +" -s <assumpte> Indica l'assumpte (entre cometes si porta espais).\n" +" -v Mostra la versió i les definicions de compil·lació.\n" +" -x Simula el mode d'enviament de «mailx».\n" +" -y Selecciona una bústia de la vostra llista " +"«mailboxes».\n" +" -z Ix immediatament si no hi ha missatges en la bústia.\n" +" -Z Obri la primera bústia amb missatges nous, i ix\n" +" immediatament si no n'hi ha cap.\n" +" -h Mostra aquest missatge d'ajuda." + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opcions de compil·lació:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Error en inicialitzar el terminal." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "S'activa la depuració a nivell %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "No es va definir «DEBUG» en la compil·lació. Es descarta l'opció.\n" + +# ivb (2001/11/27) +# ivb Es refereix al directori «Maildir» -> masculí. +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "«%s» no existeix. Voleu crear-lo?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "No s'ha pogut crear «%s»: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "No s'ha especificat cap dstinatari.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: No s'ha pogut adjuntar el fitxer.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "No hi ha cap bústia amb correu nou." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "No s'ha definit cap bústia d'entrada." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "La bústia és buida." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "S'està llegint «%s»... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "La bústia és corrupta!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "La bústia ha estat corrompuda!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Error fatal! No s'ha pogut reobrir la bústia!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "No s'ha pogut blocar la bústia!" + +# ivb (2001/11/27) +# ivb Cal mantenir el missatge curt. +# ivb ABREUJAT! +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: La bústia és modificada però els missatges no! (informeu de l'error)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "S'estan escrivint els missatges... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "S'estan realitzant els canvis..." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb L'escriptura ha fallat! S'ha desat la bústia parcial en «%s». +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "L'escriptura fallà! Es desa la bústia parcial en «%s»." + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "No s'ha pogut reobrir la bústia!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "S'està reobrint la bústia..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Salta a: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "El número d'índex no és vàlid." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "No hi ha cap entrada." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "No podeu baixar més." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "No podeu pujar més." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Vos trobeu en l'última pàgina." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Vos trobeu en la primera pàgina." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "La primera entrada ja és visible." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "L'última entrada ja és visible." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Vos trobeu en l'última entrada." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Vos trobeu en la primera entrada." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Cerca: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Cerca cap enrere: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "No s'ha especificat cap patró de recerca." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "No s'ha trobat." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "No hi ha cap entrada marcada." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "No es pot cercar en aquest menú." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "No es pot saltar en un diàleg." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "No es pot marcar." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "S'està llegint «%s»... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): No s'ha pogut canviar la data del fitxer." + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "El fitxer és un directori; voleu desar-hi a sota?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "El fitxer és un directori; voleu desar-hi a sota?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Fitxer a sota del directori: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "El fitxer ja existeix; (s)obreescriu, (a)fig o (c)ancel·la?" + +# ivb (2001/11/27) +# ivb (s)obreescriu, (a)fig, (c)ancel·la +#: muttlib.c:869 +msgid "oac" +msgstr "sac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "No es poden desar missatges en bústies POP." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "«%s» no és una bústia!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Voleu afegir els missatges a «%s»?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "S'ha tancat la connexió amb «%s»." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL no es troba disponible." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "L'ordre de preconnexió (preconnect) ha fallat." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Error en parlar amb «%s» (%s)." + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "L'IDN no és vàlid: «%s»" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "S'està cercant «%s»..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "No s'ha pogut trobar l'estació «%s»." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "S'està connectant amb «%s»..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "No s'ha pogut connectar amb «%s» (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "No s'ha pogut extraure l'entropia suficient del vostre sistema." + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "S'està plenant la piscina d'entropia «%s»...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "«%s» no té uns permissos segurs!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "S'ha inhabilitat l'SSL per manca d'entropia." + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "Error d'E/S" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "Error no especificat del protocol" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "La negociació d'SSL ha fallat: %s." + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "No s'ha pogut obtenir el certificat del servidor." + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "La connexió SSL usa «%s» (%s)." + +# ivb (2001/12/02) +# ivb Es pot referir a nom, correu, organització, unitat organitzativa, +# ivb localitat, estat, país -> ni masculí ni femení, sinò tot el contrari. +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Desconegut/da" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[no s'ha pogut calcular]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[la data no és vàlida]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "El certificat del servidor encara no és vàlid." + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "El certificat del servidor ha expirat." + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Aquest certificat pertany a:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Aquest certificat ha estat lliurat per:" + +# ivb (2001/12/08) +# ivb A continuació ve el rang de validesa. +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Aquest certificat té validesa" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " des de %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " fins %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Empremta digital: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Comprovació del certificat SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ebutja, accepta (u)na sola volta, accepta (s)empre" + +# ivb (2001/11/27) +# ivb (r)ebutja, accepta (u)na sola volta, accepta (s)empre +#: mutt_ssl.c:616 +msgid "roa" +msgstr "rus" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ebutja, accepta (u)na sola volta" + +# ivb (2001/11/27) +# ivb (r)ebutja, accepta (u)na sola volta +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ru" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Ix " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Avís: No s'ha pogut desar el certificat." + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "S'ha desat el certificat." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb Hi ha massa forrellats; voleu eliminar-ne un de «%s»? +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Voleu eliminar un forrellat sobrant de «%s»?" + +# ivb (2001/11/27) +# ivb «dotlock» és el programa usat per blocar. +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "No s'ha pogut blocar «%s» amb «dotlock».\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "S'ha excedit el temps d'espera en intentar blocar amb fcntl()!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "S'està esperant el blocatge amb fcntl()... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "S'ha excedit el temps d'espera en intentar blocar amb flock()!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "S'està esperant el blocatge amb flock()... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "No s'ha pogut blocar «%s».\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "S'està llegint «%s»..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "S'està escrivint «%s»..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "No s'ha pogut sincronitzar la bústia «%s»!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Voleu moure els missatges a «%s»?" + +# ivb (2001/12/08) +# ivb Ací «%d» sempre és 1. +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Voleu eliminar %d missatge esborrat?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Voleu eliminar %d missatges esborrats?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "S'estan movent els missatges llegits a «%s»..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "No s'ha modificat la bústia." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d mantinguts, %d moguts, %d esborrats." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d mantinguts, %d esborrats." + +# ivb (2001/12/08) +# ivb Pot anar darrere de la següent de la següent. +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Premeu «%s» per habilitar l'escriptura." + +# ivb (2001/12/08) +# ivb Pot anar darrere de la següent. +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Habiliteu l'escriptura amb «toggle-write»!" + +# ivb (2001/12/08) +# ivb Pot precedir alguna de les anteriors. Mantenir breu. +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Bústia en estat de només lectura. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "S'ha establert un punt de control en la bústia." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "No s'ha pogut escriure el missatge." + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "No es troba disponible en aquest menú." + +# ivb (2001/12/08) +# ivb Menú superpoblat: mantenir _molt_ curt! +#: pager.c:1446 +msgid "PrevPg" +msgstr "RePàg" + +# ivb (2001/12/08) +# ivb Menú superpoblat: mantenir _molt_ curt! +#: pager.c:1447 +msgid "NextPg" +msgstr "AvPàg" + +# ivb (2001/12/08) +# ivb Menú superpoblat: mantenir _molt_ curt! +#: pager.c:1451 +msgid "View Attachm." +msgstr "VeuAdjnt" + +# ivb (2001/12/08) +# ivb Menú superpoblat: mantenir _molt_ curt! +#: pager.c:1454 +msgid "Next" +msgstr "Segnt" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "El final del missatge ja és visible." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "L'inici del missatge ja és visible." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Cerca cap enrere: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Cerca: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Ja s'està mostrant l'ajuda." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "No hi ha més text citat." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "No hi ha més text sense citar després del text citat." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "El missatge «multipart» no té paràmetre «boundary»!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Error en l'expressió: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "El dia del mes no és vàlid: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "El mes no és vàlid: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "La data relativa no és vàlida: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "Error en l'expressió." + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "Error en el patró en: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: L'ordre no és vàlida." + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: No es suporta en aquest mode." + +#: pattern.c:801 +msgid "missing parameter" +msgstr "Manca un paràmetre." + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "Els parèntesis no estan aparellats: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "El patró és buit." + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "error: L'operació %d és desconeguda. (informeu d'aquest error)" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "S'està compil·lant el patró de recerca..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "S'està executant l'ordre sobre els missatges concordants..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "No hi ha cap missatge que concorde amb el criteri." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "La recerca ha arribat al final sense trobar cap concordança." + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "La recerca ha arribat a l'inici sense trobar cap concordança." + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "S'ha interromput la recerca." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "S'ha esborrat de la memòria la frase clau de PGP." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Error: No s'ha pogut crear el subprocés PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Final de l'eixida de PGP. --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- COMENÇA EL MISSATGE PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- COMENÇA EL BLOC DE CLAU PÚBLICA PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- COMENÇA EL MISSATGE PGP SIGNAT --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- TERMINA EL MISSATGE PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- TERMINA EL BLOC DE CLAU PÚBLICA PGP --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- TERMINA EL MISSATGE PGP SIGNAT --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Error: No s'ha trobat l'inici del missatge PGP! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Error intern. Informeu <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Error: No s'ha pogut crear el subprocés PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Error: El missatge PGP/MIME és malmés! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Error: No s'ha pogut crear un fitxer temporal! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Les dades següents es troben xifrades amb PGP/MIME: --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Final de les dades xifrades amb PGP/MIME. --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "No s'ha pogut obrir el subprocés PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Voleu usar l'ID de clau «%s» per %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Entreu l'ID de clau per %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "No s'ha pogut invocar PGP." + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "S'està recollint la clau PGP..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" +"Totes les claus concordants han expirat o estan revocades o inhabilitades." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Selecciona " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Comprova clau " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Claus PGP que concorden amb <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Claus PGP que concordem amb «%s»." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "No s'ha pogut obrir «/dev/null»." + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "No s'ha pogut crear un fitxer temporal." + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "ID de la clau: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "" +"No es pot usar aquesta clau: es troba expirada, inhabilitada o revocada." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb Aquest ID es troba expirat, inhabilitat o revocat. +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID expirat/inhabilitat/revocat." + +# ivb (2002/02/02) +# ivb ABREUJAT! (Hei! Hui és 2/2/2!) +# ivb Aquest ID té una validesa indefinida. +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "L'ID té una validesa indefinida." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb Aquest ID no és vàlid. +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "L'ID no és vàlid." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb Aquest ID només és lleugerament vàlid. +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "L'ID és lleugerament vàlid." + +# ivb (2001/12/08) +# ivb Davant d'açò pot anar una de les quatre anteriors. +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Voleu realment usar la clau?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Per favor, entreu l'ID de la clau: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "S'està invocant «pgp»..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Clau PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "S'estan cercant les claus que concorden amb «%s»..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "El servidor no suporta l'ordre «TOP»." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "No s'ha pogut escriure la capçalera en un fitxer temporal!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "El servidor no suporta l'ordre «UIDL»." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "«%s» no és un camí POP vàlid." + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "S'està recollint la llista de missatges..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "No s'ha pogut escriure el missatge en un fitxer temporal!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "S'està comprovant si hi ha missatges nous..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "No s'ha definit el servidor POP (pop_host)." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "No hi ha correu nou en la bústia POP." + +# ivb (2001/11/30) +# ivb Use «eliminar» pq en portar els missatges s'eliminen completament +# ivb del servidor POP. +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Voleu eliminar els missatges del servidor?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "S'estan llegint els missatges nous (%d octets)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Error en escriure en la bústia!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [llegits %d de %d missatges]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "El servidor ha tancat la connexió!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "S'està autenticant (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "S'està autenticant (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "L'autenticació APOP ha fallat." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "El servidor no suporta l'ordre «USER»." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "No s'han pogut deixar els missatges en el servidor." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Error en connectar amb el servidor: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "S'està tancant la connexió amb el servidor POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "S'estan verificant els índexs dels missatges..." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb S'ha perdut la connexió. Voleu reconnectar amb el servidor POP? +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "S'ha perdut la connexió. Reconnectar amb el servidor POP?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Missatges posposats" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "No hi ha cap missatge posposat." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "La capçalera PGP no és permesa." + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "La capçalera S/MIME no és permesa." + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "El desxifratge ha fallat." + +#: query.c:46 +msgid "New Query" +msgstr "Nova consulta" + +#: query.c:47 +msgid "Make Alias" +msgstr "Crea àlies" + +#: query.c:48 +msgid "Search" +msgstr "Cerca" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "S'està esperant una resposta..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "No s'ha definit cap ordre de consulta." + +#: query.c:286 +msgid "Query" +msgstr "Consulta" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Consulta: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Consulta de «%s»" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Redirigeix" + +#: recvattach.c:53 +msgid "Print" +msgstr "Imprimeix" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "S'està desant..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "S'ha desat el fitxer adjunt." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb AVÍS! Esteu a punt de sobreescriure «%s»; voleu continuar? +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "AVÍS! Aneu a sobreescriure «%s»; voleu continuar?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "S'ha filtrat el fitxer adjunt." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtra amb: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Redirigeix a: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "No sé com imprimir els fitxers adjunts de tipus «%s»!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Voleu imprimir els fitxers adjunts seleccionats?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Voleu imprimir el fitxer adjunt?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "No s'ha pogut desxifrar el missatge xifrat!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Fitxers adjunts" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "No hi ha cap subpart a mostrar!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "No es poden esborrar els fitxers adjunts en un servidor POP." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "No es poden esborrar els fitxers adjunts en un missatge xifrat." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "" +"Només es poden esborrar els fitxers adjunts dels missatges «multipart»." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Només es poden redirigir parts de tipus «message/rfc822»." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Error en redirigir el missatge!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Error en redirigir els missatges!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "No s'ha pogut obrir el fitxer temporal «%s»." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Voleu reenviar com a fitxers adjunts?" + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb No s'han pogut descodificar tots els fitxers adjunts marcats. Voleu reenviar els altres usant MIME? +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "Reenviar amb MIME fitxers adjunts marcats no descodificables?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Voleu reenviar amb encapsulament MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "No s'ha pogut crear «%s»." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "No s'ha trobat cap missatge marcat." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "No s'ha trobat cap llista de correu!" + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb No s'han pogut descodificar tots els fitxers adjunts marcats. Voleu encapsular la resta usant MIME? +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "Encapsular amb MIME fitxers adjunts marcats no descodificables?" + +#: remailer.c:480 +msgid "Append" +msgstr "Afig" + +#: remailer.c:481 +msgid "Insert" +msgstr "Insereix" + +#: remailer.c:482 +msgid "Delete" +msgstr "Esborra" + +#: remailer.c:484 +msgid "OK" +msgstr "Accepta" + +# ivb (2001/12/07) +# ivb En aquest cas «mixmaster» és un programa. +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "No s'ha pogut obtenir «type2.list» de «mixmaster»!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Seleccioneu una cadena de redistribuïdors." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Error: No es pot usar «%s» com a redistribuïdor final d'una cadena." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Les cadenes de Mixmaster estan limitades a %d elements." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "La cadena de redistribuïdors ja és buida." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Vos trobeu en el primer element de la cadena." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Vos trobeu en l'últim element de la cadena." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "No es poden usar les capçaleres «Cc» i «Bcc» amb Mixmaster." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Per favor, establiu un valor adequat per «hostname» quan useu Mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Error en enviar el missatge, el procés fill ha eixit amb codi %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Error en enviar el missatge." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb L'entrada del tipus «%s» en «%s», línia %d, no té un format vàlid. +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Entrada de tipus «%s» en «%s», línia %d: format no vàlid." + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "No s'ha especificat cap camí a «mailcap»." + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "No s'ha trobat cap entrada pel tipus «%s» en «mailcap»" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: Manquen arguments." + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: Sobren arguments." + +#: send.c:247 +msgid "No subject, abort?" +msgstr "No hi ha assumpte; voleu avortar el missatge?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "S'avorta el missatge sense assumpte." + +# ivb (2001/12/07) +# ivb El primer «%s» és una adreça de correu i el segon potser «,...». +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Voleu escriure una resposta a %s%s?" + +# ivb (2001/12/07) +# ivb El primer «%s» és una adreça de correu i el segon potser «,...». +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Voleu escriure un seguiment a %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Cap dels missatges marcats és visible!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Voleu incloure el missatge en la resposta?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "S'està incloent el missatge citat..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "No s'han pogut incloure tots els missatges sol·licitats!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Voleu reenviar com a fitxer adjunt?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "S'està preparant el missatge a reenviar..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Voleu recuperar un missatge posposat?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Voleu editar el missatge a reenviar?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Voleu avortar el missatge no modificat?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "S'avorta el missatge no modificat." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "No s'ha enviat el missatge." + +#: send.c:1430 +msgid "Message postponed." +msgstr "S'ha posposat el missatge." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "No s'ha especificat cap destinatari." + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "No s'ha especificat cap destinatari." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "No hi ha assumpte; voleu avortar l'enviament?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "No s'ha especificat l'assumpte." + +#: send.c:1526 +msgid "Sending message..." +msgstr "S'està enviant el missatge..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "No s'ha pogut enviar el missatge." + +#: send.c:1672 +msgid "Mail sent." +msgstr "S'ha enviat el missatge." + +#: send.c:1672 +msgid "Sending in background." +msgstr "S'està enviant en segon pla." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "No s'ha trobat el paràmetre «boundary»! (informeu d'aquest error)" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "«%s» ja no existeix!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "«%s» no és un fitxer ordinari." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "No s'ha pogut obrir «%s»." + +# ivb (2001/12/08) +# ivb ABREUJAT! +# ivb Error en enviar el missatge, el procés fill ha exit amb codi %d (%s). +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Error en enviament, el fill isqué amb codi %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Eixida del procés de repartiment" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "L'IDN «%s» no és vàlid, en preparar «Resent-From»." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Eixint.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "S'ha rebut «%s»... Eixint.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "S'ha rebut el senyal %d... Eixint.\n" + +# Es refereixen a un certificat -> masculí, singular. ivb +# La longitud crec que no és fonamental, si totes són iguals. ivb +#: smime.c:300 +msgid "Trusted " +msgstr "Confiat " + +#: smime.c:303 +msgid "Verified " +msgstr "Verficat " + +#: smime.c:306 +msgid "Unverified" +msgstr "No verificat" + +#: smime.c:309 +msgid "Expired " +msgstr "Expirat " + +#: smime.c:312 +msgid "Revoked " +msgstr "Revocat " + +#: smime.c:315 +msgid "Invalid " +msgstr "No vàlid " + +#: smime.c:318 +msgid "Unknown " +msgstr "Desconegut " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Entreu l'ID de clau: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Certificats S/MIME que concordem amb «%s»." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "L'ID «%s» no ha estat verificat. Voleu usar-lo per %s?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Voleu usar l'ID (no verificat!) «%s» per %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Voleu usar l'ID «%s» per %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "Avís: Encara no heu decidit confiar en l'ID «%s». (Premeu una tecla.)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "No s'ha trobat cap certificat (vàlid) per %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Error: No s'ha pogut crear el subprocés OpenSSL!" + +# Hau! ivb +#: smime.c:1197 +msgid "no certfile" +msgstr "No hi ha fitxer de certificat." + +# Hau! ivb +#: smime.c:1200 +msgid "no mbox" +msgstr "No hi ha bústia." + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "OpenSSL no ha produit cap eixida..." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Avís: No s'ha trobat el certificat intermig." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "No s'ha pogut obrir el subprocés OpenSSL!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "OpenSSL no ha produit cap eixida..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Final de l'eixida d'OpenSSL. --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Error: No s'ha pogut crear el subprocés OpenSSL! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Les dades següents es troben xifrades amb S/MIME: --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Les dades següents es troben signades amb S/MIME: --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Final de les dades xifrades amb S/MIME. --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Final de les dades signades amb S/MIME. --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "S'està ordenant la bústia." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "No s'ha pogut trobar la funció d'ordenació! (informeu d'aquest error)" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(cap bústia)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "El missatge pare no és visible en aquesta vista limitada." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "El missatge pare no es troba disponible." diff --git a/po/cs.gmo b/po/cs.gmo new file mode 100644 index 0000000000000000000000000000000000000000..e92a3666259aaa4cbe8775fbc672ca7bbb9dcccd GIT binary patch literal 79737 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 literal 0 HcmV?d00001 diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..124474b --- /dev/null +++ b/po/cs.po @@ -0,0 +1,4985 @@ +# translation of cs.po to Czech +# Copyright (C) 2004 Free Software Foundation, Inc. +# Dan Ohnesorg <dan@ohnesorg.cz>, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: cs\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2004-01-31 11:53+0100\n" +"Last-Translator: Dan Ohnesorg <dan@ohnesorg.cz>\n" +"Language-Team: Czech <cs@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +# +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "U¾ivatelské jméno na %s: " + +# +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Heslo pro %s@%s: " + +# +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Konec" + +# +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Smazat" + +# +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Obnovit" + +# +#: addrbook.c:36 +msgid "Select" +msgstr "Volba" + +# +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Nápovìda" + +# +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Nejsou definovány ¾ádné pøezdívky!" + +# +#: addrbook.c:152 +msgid "Aliases" +msgstr "Pøezdívky" + +# +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Pøezdívat jako: " + +# +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Pro toto jméno je ji¾ pøezdívka definována!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Pozor: :Takto pojmenovaný alias nemusí fungovat, mám to napravit?" + +# +#: alias.c:279 +msgid "Address: " +msgstr "Adresa: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Chyba: '%s' není platné IDN." + +# +#: alias.c:301 +msgid "Personal name: " +msgstr "Vlastní jméno: " + +# +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Pøijmout?" + +# +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Ulo¾it jako: " + +# +#: alias.c:342 +msgid "Alias added." +msgstr "Pøezdívka zavedena." + +# +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Shodu pro jmenný vzor nelze nalézt, pokraèovat?" + +# +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Polo¾ka mailcapu 'compose' vy¾aduje %%s." + +# +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Chyba pøi bìhu programu \"%s\"!" + +# +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Soubor nutný pro zpracování hlavièek se nepodaøilo otevøít." + +# +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Soubor nutný pro odstranìní hlavièek se nepodaøilo otevøít." + +# +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Pro %s neexistuje polo¾ka mailcapu 'compose', vytváøím prázdný soubor." + +# +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Polo¾ka mailcapu 'edit' vy¾aduje %%s." + +# +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Pro %s neexistuje polo¾ka mailcapu 'edit'." + +# +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Odpovídající polo¾ka v mailcapu nebyla nalezena. Zobrazuji jako text." + +# +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME typ není definován, nelze zobrazit pøílohu." + +# +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Nelze vytvoøit filtr" + +# +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Filtr nelze vytvoøit" + +# +#: attach.c:824 +msgid "Write fault!" +msgstr "Chyba pøi zápisu!" + +# +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Nevím, jak mám toto vytisknout!" + +# +#: browser.c:41 +msgid "Chdir" +msgstr "Zmìnit adresáø" + +# +#: browser.c:42 +msgid "Mask" +msgstr "Maska" + +# +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s není adresáøem." + +# +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Schránky [%d]" + +# +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Pøihlá¹ená schránka [%s], Souborová maska: %s" + +# +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Adresáø [%s], Souborová maska: %s" + +# +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Adresáø nelze pøipojit!" + +# +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Souborové masce nevyhovuje ¾ádný soubor." + +# +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Vytváøení funguje pouze u IMAP schránek." + +# +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Mazání funguje pouze u IMAP schránek." + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Skuteènì chcete smazat schránku \"%s\"?" + +# +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Schránka byla smazána." + +# +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Schránka nebyla smazána." + +# +#: browser.c:923 +msgid "Chdir to: " +msgstr "Nastavit pracovní adresáø na: " + +# +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Chyba pøi naèítání adresáøe." + +# +#: browser.c:975 +msgid "File Mask: " +msgstr "Souborová maska: " + +# +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Obrácené øazení dle (d)ata, (p)ísmena, (v)elikosti èi (n)eøadit?" + +# +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Øadit dle (d)ata, (p)ísmena, (v)elikosti èi (n)eøadit?" + +# +#: browser.c:1049 +msgid "dazn" +msgstr "dpvn" + +# +#: browser.c:1115 +msgid "New file name: " +msgstr "Nové jméno souboru: " + +# +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Adresáø nelze zobrazit" + +# +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Chyba pøi zobrazování souboru" + +# +#: buffy.c:442 +msgid "New mail in " +msgstr "Nová po¹ta.ve slo¾ce " + +# +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "Barvu %s terminál nepodporuje." + +# +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "Barva %s není definována." + +# +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "Objekt %s není definován" + +# +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "Pøíkaz %s je definován pouze pro objekt typu index." + +# +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "pøíli¹ málo argumentù pro %s" + +# +#: color.c:563 +msgid "Missing arguments." +msgstr "Chybí argumenty." + +# +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: pøíli¹ málo argumentù" + +# +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: pøíli¹ málo argumentù" + +# +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "Atribut %s není definován." + +# +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "pøíli¹ málo argumentù" + +# +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "pøíli¹ mnoho argumentù" + +# +#: color.c:721 +msgid "default colors not supported" +msgstr "implicitní barvy nejsou podporovány" + +# +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Ovìøit PGP podpis?" + +# +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Doèasný soubor nelze vytvoøit!" + +# +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Nelze vytvoøit zobrazovací filtr" + +# +#: commands.c:146 +msgid "Could not copy message" +msgstr "Nelze kopírovat zprávu." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME podpis byl úspì¹nì ovìøen." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Vlastník S/MIME certifikátu není toto¾ný s odesílatelem zprávy." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME podpis NELZE ovìøit." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP podpis byl úspì¹nì ovìøen." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP podpis NELZE ovìøit." + +# +#: commands.c:223 +msgid "Command: " +msgstr "Pøíkaz: " + +# +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Zaslat kopii zprávy na: " + +# +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Zaslat kopii oznaèených zpráv na: " + +# +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Chyba pøi zpracování adresy!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Chybné IDN: '%s'" + +# +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Zaslat kopii zprávy na %s" + +# +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Zaslat kopii zpráv na %s" + +# +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Kopie zprávy nebyla odeslána." + +# +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Kopie zpráv nebyly odeslány." + +# +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Kopie zprávy byla odeslána." + +# +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Kopie zpráv byly odeslány." + +# +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Filtrovací proces nelze vytvoøit" + +# +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Poslat rourou do pøíkazu: " + +# +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Není definován ¾ádný pøíkaz pro tisk." + +# +#: commands.c:483 +msgid "Print message?" +msgstr "Vytisknout zprávu?" + +# +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Vytisknout oznaèené zprávy?" + +# +#: commands.c:492 +msgid "Message printed" +msgstr "Zpráva byla vytisknuta" + +# +#: commands.c:492 +msgid "Messages printed" +msgstr "Zprávy byly vytisknuty" + +# +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Zprávu nelze vytisknout" + +# +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Zprávy nelze vytisknout" + +# +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Øadit opaènì (d)at/(o)d/pøí(j)/(v)ìc/(p)ro/v(l)ákno/(n)eseø/veli(k)/(s)" +"kóre?: " + +# +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Øadit (d)at/(o)d/pøí(j)/(v)ìc/(p)ro/v(l)ákno/(n)eseø/veli(k)/(s)kóre?: " + +# +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dojvplnks" + +# +#: commands.c:559 +msgid "Shell command: " +msgstr "Pøíkaz pro shell: " + +# +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Dekódovat - ulo¾it %s do schránky" + +# +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Dekódovat - zkopírovat %s do schránky" + +# +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "De¹ifrovat - ulo¾it %s do schránky" + +# +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "De¹ifrovat - zkopírovat %s do schránky" + +# +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Ulo¾it %s do schránky" + +# +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Zkopírovat %s do schránky" + +# +#: commands.c:706 +msgid " tagged" +msgstr " oznaèené" + +# +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopíruji do %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Pøevést pøi odesílání na %s?" + +# +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Polo¾ka Content-Type zmìnìna na %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Znaková sada zmìnìna na %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "nepøevádím" + +#: commands.c:914 +msgid "converting" +msgstr "pøevádím" + +# +#: compose.c:42 +msgid "There are no attachments." +msgstr "Nejsou ¾ádné pøílohy." + +# +#: compose.c:84 +msgid "Send" +msgstr "Odeslat" + +# +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Zru¹it" + +# +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Pøilo¾it soubor" + +# +#: compose.c:90 +msgid "Descrip" +msgstr "Popis" + +# +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Podepsat, za¹ifrovat" + +# +#: compose.c:129 +msgid "Encrypt" +msgstr "Za¹ifrovat" + +# +#: compose.c:131 +msgid "Sign" +msgstr "Podepsat" + +# +#: compose.c:133 +msgid "Clear" +msgstr "Smazat" + +# +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " podepsat jako: " + +# +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<implicitní>" + +# +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Za¹ifrovat pomocí:" + +# +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP - (¹)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, èi (n)ic?" + +# +#: compose.c:166 +msgid "esabf" +msgstr "¹pjon" + +# +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Podepsat jako: " + +# +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "S/MIME - (s)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, èi (n)ic?" + +# +#: compose.c:228 +msgid "eswabf" +msgstr "spzjon" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, nebo (n)ic? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345n" + +# +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ji¾ neexistuje!" + +# +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "Zmìna v %s [#%d]. Zmìnit kódování?" + +# +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Pøílohy" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Pozor: '%s' není platné IDN." + +# +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Nemù¾ete smazat jedinou pøílohu." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Neplatné IDN v \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Pøipojuji zvolené soubory..." + +# +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "%s nelze pøipojit!" + +# +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Otevøít schránku, z ní¾ se pøipojí zpráva" + +# +#: compose.c:870 +msgid "No messages in that folder." +msgstr "V této slo¾ce nejsou ¾ádné zprávy." + +# +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Oznaète zprávy, které chcete pøipojit!" + +# +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Nelze pøipojit!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Pøekódování se týká pouze textových pøíloh." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Aktuální pøíloha nebude pøevedena." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Aktuální pøíloha bude pøevedena." + +# +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Nesprávné kódování." + +# +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Ulo¾it kopii této zprávy?" + +# +#: compose.c:1110 +msgid "Rename to: " +msgstr "Pøejmenovat na: " + +# +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Chyba pøi volání funkce stat pro %s: %s" + +# +#: compose.c:1141 +msgid "New file: " +msgstr "Nový soubor: " + +# +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Polo¾ka 'Content-Type' je tvaru tøída/podtøída" + +# +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Hodnota %s polo¾ky 'Content-Type' je neznámá." + +# +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Soubor %s nelze vytvoøit." + +# +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Vytvoøení pøílohy se nezdaøilo." + +# +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Odlo¾it tuto zprávu?" + +# +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Ulo¾it zprávu do schránky" + +# +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Ukládám zprávu do %s ..." + +# +#: compose.c:1305 +msgid "Message written." +msgstr "Zpráva ulo¾ena." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "Je aktivní S/MIME, zru¹it jej a pokraèovat?" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "Je aktivní PGP, zru¹it jej a pokraèovat?" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (aktuální èas: %c)" + +# +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- následuje výstup %s %s --]\n" + +# +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "©ifrovací heslo(a) zapomenuto(a)." + +# +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Zadejte PGP heslo:" + +# +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Zadejte S/MIME heslo:" + +# +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Vytvoøit tradièní vlo¾enou (inline) PGP zprávu?" + +# +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Spou¹tím PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "S/MIME zprávy, které neobsahují hints on content nejsou podporovány." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Zkou¹ím extrahovat PGP klíèe...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Zkou¹ím extrahovat S/MIME certifikáty...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Chyba: Chybná struktura zprávy typu multipart/signed! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Chyba: 'multipart/signed' protokol %s není znám! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Varování: Podpisy typu %s/%s nelze ovìøit. --]\n" +"\n" + +# +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Následují podepsaná data --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Varování: Nemohu nalézt ¾ádný podpis. --]\n" +"\n" + +# +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Konec podepsaných dat --]\n" + +# +#: curs_lib.c:157 +msgid "yes" +msgstr "ano" + +# +#: curs_lib.c:158 +msgid "no" +msgstr "ne" + +# +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Ukonèit Mutt?" + +# +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "neznámá chyba" + +# +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Stisknìte libovolnou klávesu..." + +# +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' pro seznam): " + +# +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "®ádná schránka není otevøena." + +# +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Nejsou ¾ádné zprávy." + +# +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Ze schránky je mo¾né pouze èíst." + +# +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "V re¾imu pøikládání zpráv není tato funkce povolena." + +# +#: curs_main.c:51 +msgid "No visible messages." +msgstr "®ádné viditelné zprávy" + +# +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Schránka je urèena pouze pro ètení, zápis nelze zapnout!" + +# +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Zmìny obsahu slo¾ky budou ulo¾eny po jejím uzavøení." + +# +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Zmìny obsahu slo¾ky nebudou ulo¾eny." + +# +#: curs_main.c:397 +msgid "Quit" +msgstr "Konec" + +# +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Ulo¾it" + +# +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Psát" + +# +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Odepsat" + +# +#: curs_main.c:403 +msgid "Group" +msgstr "Skupinì" + +# +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Obsah schránky byl zmìnìn zvenèí. Atributy mohou být nesprávné." + +# +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "V této schránce je nová po¹ta." + +# +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Obsah schránky byl zmìnìn zvenèí." + +# +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "®ádné zprávy nejsou oznaèeny." + +# +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Není co dìlat" + +# +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Pøejít na zprávu: " + +# +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argumentem musí být èíslo zprávy." + +# +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Tato zpráva není viditelná." + +# +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Èíslo zprávy není správné." + +# +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Smazat zprávy shodující se s: " + +# +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "®ádné omezení není zavedeno." + +# +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Omezení: %s" + +# +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Omezit na zprávy shodující se s: " + +# +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Ukonèit Mutt?" + +# +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Oznaèit zprávy shodující se s: " + +# +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Obnovit zprávy shodující se s: " + +# +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Odznaèit zprávy shodující se s: " + +# +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Otevøít schránku pouze pro ètení" + +# +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Otevøít schránku" + +# +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s není schránkou." + +# +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Ukonèit Mutt bez ulo¾ení zmìn?" + +# +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Jste na poslední zprávì." + +# +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Nejsou ¾ádné obnovené zprávy." + +# +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Jste na první zprávì." + +# +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Hledání pokraèuje od zaèátku." + +# +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Hledání pokraèuje od konce." + +# +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Nejsou ¾ádné nové zprávy" + +# +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Nejsou ¾ádné nepøeètené zprávy" + +# +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " v tomto omezeném zobrazení" + +# +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "U zpráv ulo¾ených na POP serveru nelze nastavit pøíznak 'Dùle¾ité'." + +# +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Nejsou dal¹í vlákna." + +# +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Jste na prvním vláknu." + +# +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Vlákna nejsou podporována." + +# +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Vlákno obsahuje nepøeètené zprávy." + +# +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Na POP serveru nelze zprávy editovat." + +# +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tvlo¾í øádku zaèínající znakem ~\n" +"~b u¾ivatelé\tpøidá u¾ivatele do polo¾ky Bcc:\n" +"~c u¾ivatelé\tpøidá u¾ivatele do polo¾ky Cc:\n" +"~f zprávy\tvlo¾í zprávy\n" +"~F zprávy\tstejné jako ~f a navíc vlo¾í i hlavièky zpráv\n" +"~h\t\teditace hlavièky zprávy\n" +"~m zprávy\tvlo¾í zprávy a uzavøe je do uvozovek\n" +"~M zprávy\tstejné jako ~m a navíc vlo¾í i hlavièky zpráv\n" +"~p\t\tvytiskne zprávu\n" +"~q\t\tulo¾í soubor a ukonèí editor\n" +"~t u¾ivatelé\tpøidá u¾ivatele do polo¾ky To:\n" +"~u\t\teditace pøedchozí øádky\n" +"~v\t\teditace zprávy $visual editorem\n" +"~w soubor\t\tzapí¹e zprávu do souboru\n" +"~x\t\tukonèí editaci bez ulo¾ení jakýchkoli zmìn\n" +"~?\t\tvypí¹e tuto nápovìdu\n" +".\t\tpokud je tento znak na øádce samotný, znamená ukonèení vstupu\n" + +# +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "Èíslo zprávy (%d) není správné.\n" + +# +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Zprávu ukonèíte zapsáním samotného znaku '.' na novou øádku)\n" + +# +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "®ádná schránka.\n" + +# +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Zpráva obsahuje:\n" + +# +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(pokraèovat)\n" + +# +#: edit.c:403 +msgid "missing filename.\n" +msgstr "Chybí jméno souboru.\n" + +# +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Zpráva neobsahuje ¾ádné øádky.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Neplatné IDN v %s: '%s'\n" + +# +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "Pøíkaz %s je neznámý (~? pro nápovìdu)\n" + +# +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Doèasnou slo¾ku nelze vytvoøit: %s" + +# +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Doèasnou po¹tovní slo¾ku nelze vytvoøit: %s" + +# +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "nemohu zkrátit doèasnou po¹tovní slo¾ku: %s" + +# +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Soubor se zprávou je prázdný!" + +# +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Zpráva nebyla zmìnìna!" + +# +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Soubor se zprávou nelze otevøít: %s" + +# +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Ke slo¾ce nelze pøipojit: %s" + +# +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Chyba. Zachovávám doèasný soubor %s." + +# +#: flags.c:332 +msgid "Set flag" +msgstr "Nastavit pøíznak" + +# +#: flags.c:332 +msgid "Clear flag" +msgstr "Vypnout pøíznak" + +# +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Chyba: ®ádnou z èástí 'Multipart/Alternative' nelze zobrazit! --]\n" + +# +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Pøíloha #%d" + +# +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Typ: %s/%s, Kódování: %s, Velikost: %s --]\n" + +# +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Zobrazuji automaticky pomocí %s --]\n" + +# +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Vyvolávám pøíkaz %s pro automatické zobrazování" + +# +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- %s nelze spustit --]\n" + +# +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Automaticky zobrazuji standardní chybový výstup %s --]\n" + +# +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Chyba: typ 'message/external-body' nemá parametr 'access-type' --]\n" + +# +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Tato pøíloha typu '%s/%s' " + +# +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(o velikosti v bajtech: %s) " + +# +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "byla smazána --]\n" + +# +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s --]\n" + +# +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- jméno: %s --]\n" + +# +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Tato pøíloha typu '%s/%s' není pøítomna, --]\n" + +# +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- a udaný externí zdroj ji¾ není platný --]\n" + +# +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- a udaná hodnota parametru 'access-type %s' --]\n" +"[-- není podporována --]\n" + +# +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Chyba: typ 'multipart/signed' bez informace o protokolu" + +# +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Chyba: typ 'multipart/encrypted' bez informace o protokolu" + +# +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Doèasný soubor nelze otevøít!" + +# +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- typ '%s/%s' není podporován " + +# +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(pro zobrazení této èásti pou¾ijte '%s')" + +# +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(je tøeba svázat funkci 'view-attachments' s nìjakou klávesou!)" + +# +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "soubor %s nelze pøipojit" + +# +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "CHYBA: ohlaste, prosím, tuto chybu" + +# +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<NEZNÁMÝ>" + +# +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Obecnì platné:\n" +"\n" + +# +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Nesvázané funkce:\n" +"\n" + +# +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Nápovìda pro %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: unhook * nelze z jiného hooku provést" + +# +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: hook %s není znám" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: %s nelze z %s smazat" + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Nejsou k dispozici ¾ádné autentikaèní metody" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Ovìøuji (anonymnì)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonymní ovìøení se nezdaøilo." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Ovìøuji (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 ovìøení se nezdaøilo." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Ovìøuji (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI ovìøení se nezdaøilo." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN autentizace je na tomto serveru zakázána" + +# +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Probíhá pøihla¹ování..." + +# +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Pøihlá¹ení se nezdaøilo." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Pøihla¹uji (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL ovìøení se nezdaøilo." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s není platná IMAP cesta" + +# +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Stahuji jmenný prostor..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Stahuji seznam schránek..." + +# +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Slo¾ka nenalezena" + +# +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Vytvoøit schránku: " + +# +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Schránka musí mít jméno." + +# +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Schránka vytvoøena." + +# +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Schránka uzavøena." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Osudová chyba. Aktuální poèet zpráv nesouhlasí s pøedchozím údajem!" + +# +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Konèím spojení s %s..." + +# +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Tento IMAP server je zastaralý. Mutt s ním nebude fungovat." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Neoèekávaná odpovìï od serveru: %s" + +# +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Bezpeèné spojení pøes TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Nelze navázat TLS spojení" + +# +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Volím %s..." + +# +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Chyba pøi otevírání schránky" + +# +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Ke schránkám na tomto IMAP serveru nelze pøipojovat." + +# +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Vytvoøit %s?" + +# +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Konèím spojení s IMAP serverem..." + +# +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Ma¾u zprávy (poèet: %d)..." + +# +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Pøíkaz EXPUNGE se nezdaøil." + +# +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Ukládám pøíznaky stavu zprávy... [%d/%d]" + +# +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Odstraòuji zprávy ze serveru..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "pøi volání imap_sync_mailbox: EXPUNGE selhalo" + +# +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "Pøíkaz CLOSE se nezdaøil." + +# +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Chybný název schránky" + +# +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Pøihla¹uji %s..." + +# +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Odhla¹uji %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Z IMAP serveru této verze hlavièky nelze stahovat." + +# +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Doèasný soubor %s nelze vytvoøit" + +# +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Stahuji hlavièky zpráv... [%d/%d]" + +# +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Stahuji zprávu..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Index zpráv je chybný. Zkuste schránku znovu otevøít." + +# +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Posílám zprávu..." + +# +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopíruji zprávy (%d) do %s..." + +# +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopíruji zprávu %d do %s..." + +# +#: imap/util.c:239 +msgid "Continue?" +msgstr "Pokraèovat?" + +# +#: init.c:611 +msgid "alias: no address" +msgstr "pøezdívka: ¾ádná adresa" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Pozor: Neplatné IDN '%s' v pøezdívce '%s'.\n" + +# +#: init.c:714 +msgid "invalid header field" +msgstr "neplatná hlavièka" + +# +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "metoda %s pro øazení není známa" + +# +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): chybný regulární výraz %s\n" + +# +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "Promìnná %s není známa." + +# +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "Prefix není s 'reset' povolen." + +# +#: init.c:959 +msgid "value is illegal with reset" +msgstr "Hodnota není s 'reset' povolena." + +# +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s je nastaveno" + +# +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s není nastaveno" + +# +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s je nesprávný typ schránky." + +# +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "Hodnota %s je nesprávná." + +# +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "neznámý typ %s" + +# +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "neznámý typ %s" + +# +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Chyba pøi volání funkce stat pro %s: %s" + +# +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s není øádným souborem." + +# +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Chyba v %s na øádku %d: %s" + +# +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: chyby v %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: ètení pøeru¹eno kvùli velikému mno¾ství chyb v %s" + +# +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: chyba na %s" + +# +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: pøíli¹ mnoho argumentù" + +# +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "Pøíkaz %s není znám." + +# +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Chyba %s na pøíkazovém øádku\n" + +# +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "domovský adresáø nelze urèit" + +# +#: init.c:1928 +msgid "unable to determine username" +msgstr "u¾ivatelské jméno nelze urèit" + +# +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Detekována smyèka v makru." + +# +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Klávesa není svázána s ¾ádnou funkcí." + +# +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Klávesa není svázána. Stisknìte '%s' pro nápovìdu." + +# +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: pøíli¹ mnoho argumentù" + +# +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "menu %s neexistuje" + +# +#: keymap.c:713 +msgid "null key sequence" +msgstr "prázdný sled kláves" + +# +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: pøíli¹ mnoho argumentù" + +# +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "funkce %s není v mapì" + +# +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: sled kláves je prázdný" + +# +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: pøíli¹ mnoho argumentù" + +# +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: ¾ádné argumenty" + +# +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "funkce %s není známa" + +# +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Vyberte klíè (nebo stisknìte ^G pro zru¹ení): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Char = %s, Octal = %o, Decimal = %d" + +# +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "nulová operace" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "konec podmínìného spu¹tìní (noop)" + +# +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "pro zobrazení pøíloh vynucenì pou¾ít mailcap" + +# +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "zobrazit pøílohu jako text" + +# +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "pøepnout zobrazování podèástí" + +# +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "pøeskoèit na zaèátek stránky" + +# +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "zaslat kopii zprávy jinému u¾ivateli" + +# +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "zvolit jiný soubor v tomto adresáøi" + +# +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "zobrazit soubor" + +# +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "zobrazit jméno zvoleného souboru" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "pøihlásit aktuální schránku (pouze IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "odhlásit aktuální schránku (pouze IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "pøepnout zda zobrazovat v¹echny/pøihlá¹ené schránky (IMAP)" + +# +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "zobraz schránky, které obsahují novou po¹tu" + +# +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "zmìnit adresáøe" + +# +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "zjistit zda schránky obsahují novou po¹tu" + +# +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "pøipojit pøílohy k této zprávì" + +# +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "pøipojit zprávy k této zprávì" + +# +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "editovat BCC seznam" + +# +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "editovat CC seznam" + +# +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "editovat popis pøílohy" + +# +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "editovat polo¾ku 'transfer-encoding' pøílohy" + +# +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "zmìnit soubor pro ulo¾ení kopie této zprávy" + +# +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "editovat soubor, který bude pøipojen" + +# +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "editovat polo¾ku 'from'" + +# +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "editovat zprávu i s hlavièkami" + +# +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "editovat zprávu" + +# +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "editovat pøílohu za pou¾ití polo¾ky mailcap" + +# +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "editovat polo¾ku 'Reply-To'" + +# +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "editovat vìc této zprávy" + +# +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "editovat seznam 'TO'" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "vytvoøit novou schránku (pouze IMAP)" + +# +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "editovat typ pøílohy" + +# +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "pracovat s doèasnou kopií pøílohy" + +# +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "zkontrolovat pravopis zprávy programem ispell" + +# +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "sestavit novou pøílohu dle polo¾ky mailcapu" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "pøepnout automatické ukládání této pøílohy" + +# +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "odlo¾it zprávu pro pozdìj¹í pou¾ití" + +# +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "pøejmenovat/pøesunout pøilo¾ený soubor" + +# +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "odeslat zprávu" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "pøepnout formát na pøímý/pøílohu" + +# +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "pøepnout, zda má být soubor po odeslání smazán" + +# +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "upravit informaci o kódování pøílohy" + +# +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "ulo¾it zprávu do slo¾ky" + +# +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "ulo¾it kopii zprávy do souboru/schránky" + +# +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "vytvoøit pøezdívku z odesílatele dopisu" + +# +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "pøesunout polo¾ku na konec obrazovky" + +# +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "pøesunout polo¾ku do støedu obrazovky" + +# +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "pøesunout polo¾ku na zaèátek obrazovky" + +# +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "vytvoøit kopii ve formátu 'text/plain'" + +# +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "vytvoøit kopii ve formátu 'text/plain' a smazat" + +# +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "smazat aktuální polo¾ku" + +# +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "smazat aktuální schránku (pouze IMAP)" + +# +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "smazat v¹echny zprávy v podvláknu" + +# +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "smazat v¹echny zprávy ve vláknu" + +# +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "zobrazit úplnou adresu odesílatele" + +# +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "zobrazit zprávu a pøepnout odstraòování hlavièek" + +# +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "zobrazit zprávu" + +# +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "editovat pøímo tìlo zprávy" + +# +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "smazat znak pøed kurzorem" + +# +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "posunout kurzor o jeden znak vlevo" + +# +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "posunout kurzor na zaèátek slova" + +# +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "pøeskoèit na zaèátek øádku" + +# +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "procházet schránkami, pøijímajícími novou po¹tu" + +# +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "doplnit jméno souboru nebo pøezdívku" + +# +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "doplnit adresu výsledkem dotazu" + +# +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "smazat znak pod kurzorem" + +# +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "pøeskoèit na konec øádku" + +# +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "posunout kurzor o jeden znak vpravo" + +# +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "posunout kurzor na konec slova" + +# +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "rolovat dolù seznamem provedených pøíkazù" + +# +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "rolovat nahoru seznamem provedených pøíkazù" + +# +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "smazat znaky od kurzoru do konce øádku" + +# +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "smazat znaky od kurzoru do konce slova" + +# +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "smazat v¹echny znaky na øádku" + +# +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "smazat slovo pøed kurzorem" + +# +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "pøí¹tí napsaný znak uzavøít do uvozovek" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "pøehodit znak pod kurzorem s pøedchozím" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "pøevést v¹echna písmena slova na velká" + +# +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "pøevést v¹echna písmena slova na malá" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "pøevést v¹echna písmena slova na velká" + +# +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "zadat muttrc pøíkaz" + +# +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "zmìnit souborovou masku" + +# +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "odejít z tohoto menu" + +# +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrovat pøílohu pøíkazem shellu" + +# +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "pøeskoèit na první polo¾ku" + +# +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "pøepnout zprávì pøíznak dùle¾itosti" + +# +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "pøeposlat zprávu jinému u¾ivateli s komentáøem" + +# +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "zvolit aktuální polo¾ku" + +# +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "odepsat v¹em pøíjemcùm" + +# +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "rolovat dolù o 1/2 stránky" + +# +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "rolovat nahoru o 1/2 stránky" + +# +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "tato obrazovka" + +# +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "pøeskoèit na indexové èíslo" + +# +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "pøeskoèit na poslední polo¾ku" + +# +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "odepsat do specifikovaných po¹tovních konferencí" + +# +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "spustit makro" + +# +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "sestavit novou zprávu" + +# +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "otevøít jinou slo¾ku" + +# +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "otevøít jinou slo¾ku pouze pro ètení" + +# +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "odstranit zprávì pøíznak stavu" + +# +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "smazat zprávy shodující se se vzorem" + +# +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "vynutit sta¾ení po¹ty z IMAP serveru" + +# +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "stáhnout po¹tu z POP serveru" + +# +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "pøeskoèit na první zprávu" + +# +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "pøeskoèit na poslední zprávu" + +# +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "zobrazovat pouze zprávy shodující se se vzorem" + +# +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "pøeskoèit na následující novou zprávu" + +# +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "pøeskoèit na následující novou nebo nepøeètenou zprávu" + +# +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "pøeskoèit na následující podvlákno" + +# +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "pøeskoèit na následující vlákno" + +# +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "pøeskoèit na následující obnovenou zprávu" + +# +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "pøeskoèit na následující nepøeètenou zprávu" + +# +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "pøeskoèit na pøedchozí zprávu ve vláknu" + +# +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "pøeskoèit na pøedchozí vlákno" + +# +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "pøeskoèit na pøedchozí podvlákno" + +# +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "pøeskoèit na pøedchozí obnovenou zprávu" + +# +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "pøeskoèit na pøedchozí novou zprávu" + +# +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "pøeskoèit na pøedchozí novou nebo nepøeètenou zprávu" + +# +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "pøeskoèit na pøedchozí nepøeètenou zprávu" + +# +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "oznaèit toto vlákno jako pøeètené" + +# +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "oznaèit toto podvlákno jako pøeètené" + +# +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "nastavit zprávì pøíznak stavu" + +# +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "ulo¾it zmìny do schránky" + +# +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "oznaèit zprávy shodující se se vzorem" + +# +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "obnovit zprávy shodující se se vzorem" + +# +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "odznaèit zprávy shodující se se vzorem" + +# +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "pøeskoèit do støedu stránky" + +# +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "pøeskoèit na dal¹í polo¾ku" + +# +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "rolovat o øádek dolù" + +# +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "pøeskoèit na dal¹í stránku" + +# +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "pøeskoèit na konec zprávy" + +# +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "pøepnout zobrazování citovaného textu" + +# +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "pøeskoèit za citovaný text" + +# +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "pøeskoèit na zaèátek zprávy" + +# +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "poslat zprávu/pøílohu rourou do pøíkazu shellu" + +# +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "pøeskoèit na pøedchozí polo¾ku" + +# +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "rolovat o øádek nahoru" + +# +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "pøeskoèit na pøedchozí stránku" + +# +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "vytisknout aktuální polo¾ku" + +# +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "dotázat se externího programu na adresy" + +# +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "pøidat výsledky nového dotazu k ji¾ existujícím" + +# +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "ulo¾it zmìny do schránky a skonèit" + +# +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "vrátit se k odlo¾ené zprávì" + +# +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "smazat a pøekreslit obrazovku" + +# +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "<vnitøní>" + +# +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "odepsat na zprávu" + +# +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "pou¾ít aktuální zprávu jako ¹ablonu pro novou" + +# +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "ulo¾it zprávu/pøílohu do souboru" + +# +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "vyhledat regulární výraz" + +# +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "vyhledat regulární výraz opaèným smìrem" + +# +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "vyhledat následující shodu" + +# +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "vyhledat následující shodu opaèným smìrem" + +# +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "pøepnout obarvování hledaných vzorù" + +# +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "spustit pøíkaz v podshellu" + +# +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "seøadit zprávy" + +# +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "seøadit zprávy v opaèném poøadí" + +# +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "oznaèit aktuální polo¾ku" + +# +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "prefix funkce, která má být pou¾ita pouze pro oznaèené zprávy" + +# +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "následující funkci pou¾ij POUZE pro oznaèené zprávy" + +# +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "oznaèit toto podvlákno" + +# +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "oznaèit toto vlákno" + +# +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "pøepnout zprávì pøíznak 'nová'" + +# +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "pøepnout, zda bude schránka pøepsána" + +# +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "pøepnout, zda procházet schránky nebo v¹echny soubory" + +# +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "pøeskoèit na zaèátek stránky" + +# +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "obnovit aktuální polo¾ku" + +# +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "obnovit v¹echny zprávy ve vláknu" + +# +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "obnovit v¹echny zprávy v podvláknu" + +# +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "Vypí¹e oznaèení verze a datum" + +# +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "pokud je to nezbytné, zobrazit pøílohy pomocí mailcapu" + +# +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "zobrazit MIME pøílohy" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "zobraz kód stisknuté klávesy" + +# +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "zobrazit aktivní omezující vzor" + +# +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "zavinout/rozvinout toto vlákno" + +# +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "zavinout/rozvinout v¹echna vlákna" + +# +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "pøipojit veøejný PGP klíè" + +# +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "zobrazit menu PGP" + +# +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "odeslat veøejný klíè PGP" + +# +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "ovìøit veøejný klíè PGP" + +# +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "zobrazit u¾ivatelské ID klíèe" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "hledat klasické pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Akceptovat øetìz." + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Pøipojit k øetìzu remailer" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Vlo¾it do øetìzu remailer" + +# +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Odstranit remailer z øetìzu" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Vybrat pøedchozí èlánek øetìzu" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Vybrat dal¹í èlánek øetìzu" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "odeslat zprávu pomocí øetìzu remailerù typu mixmaster" + +# +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "vytvoøit de¹ifrovanou kopii a smazat" + +# +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "vytvoøit de¹ifrovanou kopii" + +# +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "odstranit v¹echna hesla z pamìti" + +# +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "extrahovat v¹echny podporované veøejné klíèe" + +# +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "zobrazit menu S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "Integer overflow -- can't allocate memory!" + +# +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Pamì» vyèerpána!" + +# +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Vývojáøe programu mù¾ete kontaktovat na adrese <mutt-dev@mutt.org> " +"(anglicky).\n" +"Chyby v programu oznamujte pomocí utility flea(1).\n" +"Pøipomínky k pøekladu zasílejte na adresu <cs@li.org> (èesky).\n" + +# +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2003 Michael R. Elkins a dal¹í.\n" +"Mutt je roz¹iøován BEZ JAKÉKOLI ZÁRUKY; podrobnosti získáte pøíkazem\n" +"`mutt -vv'.\n" +"Mutt je volné programové vybavení. Roz¹iøování tohoto programu je vítáno,\n" +"musíte ov¹em dodr¾et urèitá pravidla; dal¹í informace získáte pøíkazem\n" +"`mutt -vv'.\n" + +# +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2003 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2003 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2003 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2003 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2003 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2003 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2003 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Mnoho dal¹ích lidí, kteøí zde nejsou zmínìni, pøispìlo zdrojovým kódem,\n" +"opravami a pøipomínkami.\n" +"\n" +" Tento program je volné programové vybavení; mù¾ete jej ¹íøit a " +"modifikovat\n" +"podle ustanovení Obecné veøejné licence GNU, vydávané Free Software " +"Foundation;\n" +"a to buï verze 2 této licence anebo (podle va¹eho uvá¾ení), kterékoli " +"pozdìj¹í\n" +"verze.\n" +"\n" +" Tento program je roz¹iøován v nadìji, ¾e bude u¾iteèný, av¹ak BEZ " +"JAKÉKOLI\n" +"ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO\n" +"NÌJAKÝ KONKRÉTNÍ ÚÈEL. Dal¹í podrobnosti najdete v Obecné veøejné licenci " +"GNU.\n" +"\n" +" Kopie Obecné veøejné licence GNU mìla být dodána spolu s tímto programem;\n" +"pokud se tak nestalo, napi¹te o ni Free Software Foundation, Inc.,\n" +"59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +"\n" + +# +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"Pou¾ití: mutt [ -nRyzZ ] [ -e <pøíkaz> ] [ -F <soubor> ] [ -m <typ> ] [ -f " +"<soubor> ]\n" +" mutt [ -nR ] [ -e <pøíkaz> ] [ -F <soubor> ] -Q <dotaz> [ -Q " +"<dotaz> ] [...]\n" +" mutt [ -nR ] [ -e <pøíkaz> ] [ -F <soubor> ] -A <alias> [ -A " +"<alias> ] [...]\n" +" mutt [ -nx ] [ -e <pøíkaz> ] [ -a <soubor> ] [ -F <soubor> ] [ -H " +"<soubor> ][ -i <soubor> ] [ -s <vìc> ] [ -b <adr> ] [ -c <adr> ] <adr> \n" +"[ ... ]\n" +" mutt [ -n ] [ -e <pøíkaz> ] [ -F <soubor> ] -p\n" +" mutt -v[v]\n" +"\n" +"pøepínaèe:\n" +" -A <alias>\texpanduje zadaný alias\n" +" -a <soubor>\tpøipojí soubor ke zprávì\n" +" -b <adresa>\tspecifikuje adresu pro utajenou kopii (BCC)\n" +" -c <adresa>\tspecifikuje adresu pro kopii (CC)\n" +" -e <pøíkaz>\tpøíkaz bude vykonán po inicializaci\n" +" -f <soubor>\tète z této schránky\n" +" -F <soubor>\talternativní soubor muttrc\n" +" -H <soubor>\tz tohoto souboru budou naèteny vzory hlavièek\n" +" -i <soubor>\ttento soubor Mutt vlo¾í do odpovìdi\n" +" -m <typ>\timplicitní typ schránky\n" +" -n\t\tMutt nebude èíst systémový soubor Muttrc\n" +" -p\t\tvrátí se k odlo¾ené zprávì\n" +" -Q <promìná>\tdotá¾e se na konfiguraèní promìnnou\n" +" -R\t\totevøe schránku pouze pro ètení\n" +" -s <vìc>\tspecifikuje vìc (pokud obsahuje mezery,\n" +" \ttak musí být v uvozovkách)\n" +" -v\t\tzobrazí oznaèení verze a parametry zadané pøi pøekladu\n" +" -x\t\tnapodobí odesílací re¾im programu mailx\n" +" -y\t\tzvolí schránku uvedenou v seznamu `mailboxes'\n" +" -z\t\tpokud ve schránce není po¹ta, pak okam¾itì skonèí\n" +" -Z\t\totevøe první slo¾ku s novou po¹tou; pokud není ¾ádná nová po¹ta,\n" +" \t\ttak okam¾itì skonèí\n" +" -h\t\tvypí¹e tuto nápovìdu" + +# +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Pøelo¾eno s volbami:" + +# +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Chyba pøi inicializaci terminálu." + +# +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Úroveò ladìní je %d.\n" + +# +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "pøi pøekladu programu nebylo 'DEBUG' definováno. Ignoruji.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s neexistuje. Mám ho vytvoøit?" + +# +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "%s nelze vytvoøit: %s" + +# +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nejsou specifikováni ¾ádní pøíjemci.\n" + +# +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "Soubor %s nelze pøipojit.\n" + +# +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "V ¾ádné schránce není nová po¹ta." + +# +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Není definována ¾ádná schránka pøijímající novou po¹tu." + +# +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Schránka je prázdná." + +# +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Ètu %s... %d (%d%%)" + +# +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Schránka je po¹kozena!" + +# +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Schránka byla po¹kozena!" + +# +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Kritická chyba! Schránku nelze znovu otevøít!" + +# +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Schránku nelze zamknout!" + +# +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox byl zmìnìn, ale nebyly zmìnìny ¾ádné zprávy! (ohlaste tuto chybu)" + +# +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Zapisuji zprávy... %d (%d%%)" + +# +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Provádím zmìny..." + +# +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Ulo¾ení se nezdaøilo! Èást schránky byla ulo¾ena do %s" + +# +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Schránku nelze znovu otevøít!" + +# +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Otevírám schránku znovu..." + +# +#: menu.c:413 +msgid "Jump to: " +msgstr "Pøeskoèit na: " + +# +#: menu.c:422 +msgid "Invalid index number." +msgstr "Nesprávné indexové èíslo." + +# +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "®ádné polo¾ky." + +# +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Dolù ji¾ rolovat nemù¾ete." + +# +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Nahoru ji¾ rolovat nemù¾ete." + +# +#: menu.c:477 +msgid "You are on the last page." +msgstr "Jste na poslední stránce." + +# +#: menu.c:499 +msgid "You are on the first page." +msgstr "Jste na první stránce." + +# +#: menu.c:578 +msgid "First entry is shown." +msgstr "První polo¾ka je zobrazena." + +# +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Poslední polo¾ka je zobrazena." + +# +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Jste na poslední polo¾ce." + +# +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Jste na první polo¾ce." + +# +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Vyhledat: " + +# +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Vyhledat obráceným smìrem: " + +# +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Není ¾ádný vzor k vyhledání." + +# +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Nenalezeno." + +# +#: menu.c:885 +msgid "No tagged entries." +msgstr "®ádné polo¾ky nejsou oznaèeny." + +# +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "V tomto menu není hledání pøístupné." + +# +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "V dialozích není pøeskakování implementováno." + +# +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Oznaèování není podporováno." + +# +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Ètu %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" +"pøi volání maildir_commit_message(): nemohu nastavit datum a èas u souboru" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Soubor je adresáøem. Ulo¾it do nìj? [(a)no, (n)e, (v)¹echny]" + +#: muttlib.c:835 +msgid "yna" +msgstr "anv" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Soubor je adresáøem. Ulo¾it do nìj?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Zadejte jméno souboru: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Soubor ji¾ existuje: (p)øepsat, pø(i)pojit èi (z)ru¹it?" + +#: muttlib.c:869 +msgid "oac" +msgstr "piz" + +# +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Do POP schránek nelze ukládat zprávy." + +# +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s není schránkou!" + +# +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Pøipojit zprávy do %s?" + +# +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Spojení s %s uzavøeno" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL není dostupné" + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "pøíkaz pøed spojením selhal" + +# +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Chyba pøi komunikaci s %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Chybné IDN \"%s\"." + +# +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Vyhledávám %s..." + +# +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Poèítaè \"%s\" nelze nalézt." + +# +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Pøipojuji se k %s..." + +# +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Spojení s %s nelze navázat (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Nemohu získat dostatek náhodných dat" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Pøipravuji zdroj náhodných dat: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s má pøíli¹ volná pøístupová práva!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL vypnuto kvùli nedostatku náhodných dat" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O chyba" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "nespecifikovaná chyba v protokolu" + +# +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "Chyba SSL: %s" + +# +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Certifikát od serveru nelze získat" + +# +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL spojení pomocí %s (%s)" + +# +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Neznámý" + +# +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[nelze spoèítat]" + +# +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[chybné datum]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Certifikát serveru není zatím platný." + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Platnost certifikátu serveru vypr¹ela." + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Tento certifikát patøí:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Tento certifikát vydal:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Tento certifikát je platný." + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " od %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " pro %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Otisk klíèe: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Kontrola SSL certifikátu" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(o)dmítnout, akceptovat pouze (t)eï, akceptovat (v)¾dy " + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "otv" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(o)dmítnout, akceptovat pouze (t)eï " + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ot" + +# +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Ukonèit " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Varování: Certifikát nelze ulo¾it" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certifikát ulo¾en" + +# +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Zámek stále existuje, odemknout %s?" + +# +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "%s nelze zamknout.\n" + +# +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Vypr¹el èas pro pokus o zamknutí pomocí funkce fcntl!" + +# +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Èekám na zamknutí pomocí funkce fcntl... %d" + +# +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Èas pro zamknutí pomocí funkce flock vypr¹el!" + +# +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Èekám na pokus o zamknutí pomocí funkce flock... %d" + +# +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "%s nelze zamknout.\n" + +# +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Ètu %s..." + +# +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Ukládám %s..." + +# +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Schránku %s nelze synchronizovat!" + +# +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Pøesunout pøeètené zprávy do %s?" + +# +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Zahodit smazané zprávy (%d)?" + +# +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Zahodit smazané zprávy (%d)?" + +# +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Pøesunuji pøeètené zprávy do %s..." + +# +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Obsah schránky nebyl zmìnìn." + +# +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "ponecháno: %d, pøesunuto: %d, smazáno: %d" + +# +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "ponecháno: %d, smazáno: %d" + +# +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Stisknìte `%s' pro zapnutí zápisu" + +# +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Pou¾ijte 'toggle-write' pro zapnutí zápisu!" + +# +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Schránka má vypnut zápis. %s" + +# +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Do schránky byla vlo¾ena kontrolní znaèka." + +# +#: mx.c:1490 +msgid "Can't write message" +msgstr "Zprávu nelze ulo¾it" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "Integer overflow -- can't allocate memory." + +# +#: pager.c:53 +msgid "Not available in this menu." +msgstr "V tomto menu není tato funkce dostupná." + +# +#: pager.c:1446 +msgid "PrevPg" +msgstr "Pøstr" + +# +#: pager.c:1447 +msgid "NextPg" +msgstr "Dlstr" + +# +#: pager.c:1451 +msgid "View Attachm." +msgstr "Pøílohy" + +# +#: pager.c:1454 +msgid "Next" +msgstr "Dal¹í" + +# +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Konec zprávy je zobrazen." + +# +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Zaèátek zprávy je zobrazen." + +# +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Hledat opaèným smìrem: " + +# +#: pager.c:1955 +msgid "Search: " +msgstr "Hledat: " + +# +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Nápovìda je právì zobrazena." + +# +#: pager.c:2104 +msgid "No more quoted text." +msgstr "®ádný dal¹í citovaný text." + +# +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Za citovaným textem ji¾ nenásleduje ¾ádný bì¾ný text." + +# +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "Zpráva o více èástech nemá urèeny hranice!" + +# +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Výraz %s je chybný." + +# +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Nesprávné datum dne (%s)." + +# +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Mìsíc %s není správný." + +# +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Chybné relativní datum: %s" + +# +#: pattern.c:528 +msgid "error in expression" +msgstr "chyba ve výrazu" + +# +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "chyba ve vzoru na: %s" + +# +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "pøíkaz %c je nesprávný" + +# +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "V tomto re¾imu není %c podporováno." + +# +#: pattern.c:801 +msgid "missing parameter" +msgstr "chybí parametr" + +# +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "neshodují se závorky: %s" + +# +#: pattern.c:849 +msgid "empty pattern" +msgstr "prázdný vzor" + +# +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "chyba: neznámý operand %d (ohlaste tuto chybu)." + +# +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Pøekládám vzor k vyhledání..." + +# +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Spou¹tím pøíkaz pro shodující se zprávy... " + +# +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "®ádná ze zpráv nesplòuje daná kritéria." + +# +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Pøi vyhledávání bylo dosa¾eno konce bez nalezení shody." + +# +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Pøi vyhledávání bylo dosa¾eno zaèátku bez nalezení shody." + +# +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Hledání bylo pøeru¹eno." + +# +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP heslo zapomenuto" + +# +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Chyba: nelze spustit PGP proces! --]\n" + +# +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Konec výstupu PGP --]\n" +"\n" + +# +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- ZAÈÁTEK PGP ZPRÁVY --]\n" +"\n" + +# +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[--ZAÈÁTEK VEØEJNÉHO KLÍÈE PGP --]\n" + +# +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- ZAÈÁTEK PODEPSANÉ PGP ZPRÁVY --]\n" +"\n" + +# +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- KONEC PGP ZPRÁVY --]\n" + +# +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- KONEC VEØEJNÉHO KLÍÈE PGP --]\n" + +# +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- KONEC PODEPSANÉ PGP ZPRÁVY --]\n" + +# +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Chyba: nelze najít zaèátek PGP zprávy! --]\n" +"\n" + +# +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Vnitøní chyba. Informujte <roessler@does-not-exist.org>." + +# +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Chyba: nelze spustit PGP! --]\n" +"\n" + +# +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Chyba: zpráva ve formátu PGP/MIME je poru¹ena! --]\n" +"\n" + +# +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Chyba: doèasný soubor nelze vytvoøit! --]\n" + +# +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Následující data jsou za¹ifrována ve formátu PGP/MIME --]\n" +"\n" + +# +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Konec dat za¹ifrovaných ve formátu PGP/MIME --]\n" + +# +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "PGP proces nelze spustit!" + +# +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Pou¾ít ID klíèe = \"%s\" pro %s?" + +# +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Zadejte ID klíèe pro %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP nelze spustit." + +# +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Získávám PGP klíè..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" +"V¹em vyhovujícím klíèùm vypr¹ela platnost, byly zneplatnìny nebo zakázány." + +# +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Zvolit " + +# +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Kontrolovat klíè " + +# +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "klíèe PGP vyhovující <%s>." + +# +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "klíèe PGP vyhovující \"%s\"." + +# +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Nelze otevøít /dev/null" + +# +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Doèasný soubor nelze vytvoøit." + +# +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "ID klíèe: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Klíè nelze pou¾ít: vypr¹ela jeho platnost, nebo byl zakázán èi sta¾en." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Tomuto ID vypr¹ela platnost, nebo bylo zakázáno èi sta¾eno." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ID nemá definovanou dùvìryhodnost" + +# +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Toto ID není dùvìryhodné." + +# +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Dùvìryhodnost tohoto ID je pouze èásteèná." + +# +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Opravdu chcete tento klíè pou¾ít?" + +# +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Zadejte ID klíèe: " + +# +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Spou¹tím PGP..." + +# +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Klíè PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Hledám klíèe vyhovující \"%s\"..." + +# +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Server nepodporuje pøíkaz TOP." + +# +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Nelze zapsat hlavièku do doèasného souboru!" + +# +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Server nepodporuje pøíkaz UIDL." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s není platná POP cesta" + +# +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Stahuji zprávu seznam zpráv..." + +# +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Nelze zapsat zprávu do doèasného souboru!" + +# +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Hledám nové zprávy..." + +# +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP server není definován." + +# +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Ve schránce na POP serveru nejsou nové zprávy." + +# +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Odstranit zprávy ze serveru..." + +# +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Naèítám nové zprávy (poèet bajtù: %d)..." + +# +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Chyba pøi zápisu do schránky!" + +# +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [poèet pøeètených zpráv: %d/%d]" + +# +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Server uzavøel spojení!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Ovìøuji (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Ovìøuji (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP ovìøení se nezdaøilo." + +# +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Server nepodporuje pøíkaz USER." + +# +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Nelze ponechat zprávy na serveru." + +# +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Chyba pøi pøipojováno k serveru: %s" + +# +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Konèím spojení s POP serverem..." + +# +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Ukládám indexy zpráv..." + +# +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Spojení ztraceno. Navázat znovu spojení s POP serverem." + +# +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "¾ádné odlo¾ené zprávy" + +# +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "®ádné zprávy nejsou odlo¾eny." + +# +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Nekorektní PGP hlavièka" + +# +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Nekorektní S/MIME hlavièka" + +# +#: postpone.c:554 +msgid "Decryption failed." +msgstr "De¹ifrování se nezdaøilo." + +# +#: query.c:46 +msgid "New Query" +msgstr "Nový dotaz" + +# +#: query.c:47 +msgid "Make Alias" +msgstr "Vytvoøit pøezdívku" + +# +#: query.c:48 +msgid "Search" +msgstr "Hledat" + +# +#: query.c:95 +msgid "Waiting for response..." +msgstr "Èekám na odpovìï..." + +# +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Pøíkaz pro dotazy není definován." + +# +#: query.c:286 +msgid "Query" +msgstr "Dotaz" + +# +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Dotázat se na: " + +# +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Dotaz na `%s'" + +# +#: recvattach.c:52 +msgid "Pipe" +msgstr "Poslat rourou" + +# +#: recvattach.c:53 +msgid "Print" +msgstr "Tisk" + +# +#: recvattach.c:431 +msgid "Saving..." +msgstr "Ukládám..." + +# +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Pøíloha ulo¾ena." + +# +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "VAROVÁNÍ! Takto pøepí¹ete %s. Pokraèovat?" + +# +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Pøíloha byla filtrována." + +# +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrovat pøes: " + +# +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Poslat rourou do: " + +# +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Nevím, jak vytisknout pøílohy typu %s!." + +# +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Vytisknout oznaèené pøílohy?" + +# +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Vytisknout pøílohu?" + +# +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Nemohu de¹ifrovat za¹ifrovanou zprávu!" + +# +#: recvattach.c:951 +msgid "Attachments" +msgstr "Pøílohy" + +# +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Nejsou ¾ádné podèásti pro zobrazení!" + +# +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Z POP serveru nelze mazat pøílohy." + +# +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Mazání pøíloh ze za¹ifrovaných zpráv není podporováno." + +# +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Podporováno je pouze mazání pøíloh o více èástech." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Lze posílat pouze kopie èástí typu 'message/rfc822'." + +# +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Chyba pøi pøeposílání zprávy." + +# +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Chyba pøi pøeposílání zpráv." + +# +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Doèasný soubor %s nelze otevøít." + +# +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Pøeposlat jako pøílohy?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "V¹echny oznaèené pøílohy nelze dekódovat. Pøeposlat je v MIME formátu?" + +# +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Pøeposlat zprávu zapouzdøenou do MIME formátu?" + +# +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Soubor %s nelze vytvoøit." + +# +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "®ádná zpráva není oznaèena." + +# +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "®ádné po¹tovní konference nebyly nalezeny!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"V¹echny oznaèené pøílohy nelze dekódovat. Zapouzdøit je do MIME formátu?" + +# +#: remailer.c:480 +msgid "Append" +msgstr "Pøipojit" + +#: remailer.c:481 +msgid "Insert" +msgstr "Vlo¾it" + +# +#: remailer.c:482 +msgid "Delete" +msgstr "Smazat" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "'type2.list' pro mixmaster nelze získat." + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Vyberte øetìz remailerù" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Chyba: %s nelze pou¾ít jako poslední èlánek øetìzu remailerù." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Maximální poèet èlánkù øetìzu remailerù typu mixmaster je %d." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Øetìz remailerù je ji¾ prázdný." + +# +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "První èlánek øetìzu jste ji¾ vybral." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Poslední èlánek øetìzu jste ji¾ vybral." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster nepovoluje Cc a Bcc hlavièky." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Pokud pou¾íváte mixmaster, je tøeba správnì nastavit promìnnou \"hostname\"." + +# +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Chyba pøi zasílání zprávy, potomek ukonèen %d.\n" + +# +#: remailer.c:772 +msgid "Error sending message." +msgstr "Chyba pøi zasílání zprávy." + +# +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Nesprávný formát polo¾ky pro typ %s v \"%s\" na øádku %d" + +# +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Cesta k mailcapu není zadána." + +# +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "pro typ %s nebyla nalezena polo¾ka v mailcapu" + +# +#: score.c:71 +msgid "score: too few arguments" +msgstr "skóre: pøíli¹ málo argumentù" + +# +#: score.c:80 +msgid "score: too many arguments" +msgstr "skóre: pøíli¹ mnoho argumentù" + +# +#: send.c:247 +msgid "No subject, abort?" +msgstr "Vìc není specifikována, zru¹it?" + +# +#: send.c:249 +msgid "No subject, aborting." +msgstr "Vìc není specifikována, zru¹eno." + +# +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Odepsat %s%s?" + +# +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Odepsat %s%s?" + +# +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "®ádná oznaèená zpráva není viditelná!" + +# +#: send.c:733 +msgid "Include message in reply?" +msgstr "Vlo¾it zprávu do odpovìdi?" + +# +#: send.c:738 +msgid "Including quoted message..." +msgstr "Vkládám zakomentovanou zprávu..." + +# +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "V¹echny po¾adované zprávy nelze vlo¾it!" + +# +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Pøeposlat jako pøílohu?" + +# +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Pøipravuji pøeposílanou zprávu..." + +# +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Vrátit se k odlo¾eným zprávám?" + +# +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Upravit pøeposílanou zprávu?" + +# +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Zahodit nezmìnìnou zprávu?" + +# +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Nezmìnìná zpráva byla zahozena." + +# +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Zpráva nebyla odeslána." + +# +#: send.c:1430 +msgid "Message postponed." +msgstr "Zpráva byla odlo¾ena." + +# +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Nejsou zadáni pøíjemci!" + +# +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Nebyli zadání pøíjemci." + +# +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "®ádná vìc, zru¹it odeslání?" + +# +#: send.c:1464 +msgid "No subject specified." +msgstr "Vìc nebyla zadána." + +# +#: send.c:1526 +msgid "Sending message..." +msgstr "Posílám zprávu..." + +# +#: send.c:1667 +msgid "Could not send the message." +msgstr "Zprávu nelze odeslat." + +# +#: send.c:1672 +msgid "Mail sent." +msgstr "Zpráva odeslána." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Zasílám na pozadí." + +# +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Nebyl nalezen 'boundary' parametr! [ohlaste tuto chybu]" + +# +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ji¾ neexistuje!" + +# +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s není øádným souborem." + +# +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "%s nelze otevøít" + +# +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Chyba pøi zasílání zprávy, potomek ukonèen %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Výstup doruèovacího programu" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Chybné IDN %s pøi generování resent-from." + +# +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Konèím.\n" + +# +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Zachycen %s... Konèím.\n" + +# +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Zachycen signál %d... Konèím.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Dùvìryhodný " + +#: smime.c:303 +msgid "Verified " +msgstr "Ovìøený " + +#: smime.c:306 +msgid "Unverified" +msgstr "Neovìøený " + +# +#: smime.c:309 +msgid "Expired " +msgstr "Platnost vypr¹ela " + +#: smime.c:312 +msgid "Revoked " +msgstr "Odvolaný " + +# +#: smime.c:315 +msgid "Invalid " +msgstr "Není platný " + +# +#: smime.c:318 +msgid "Unknown " +msgstr "Neznámý " + +# +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Zadejte ID klíèe: " + +# +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME klíèe vyhovující \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s není verifikováno, chcete jej pou¾ít pro %s?" + +# +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Pou¾ít nedùvìryhodný klíè s ID %s pro %s?" + +# +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Pou¾ít klíè s ID %s pro %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Pozor: Zatím jste se nerozhodli, jestli dùvìøujete klíèi s ID %s (pokraèujte " +"stiskem jakékoliv klávesy)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Nebyl nalezen ¾ádný (platný) certifikát pro %s." + +# +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Chyba: nelze spustit OpenSSL jako podproces!" + +# +#: smime.c:1197 +msgid "no certfile" +msgstr "chybí soubor s certifikáty" + +# +#: smime.c:1200 +msgid "no mbox" +msgstr "¾ádná schránka" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "OpenSSL nevygenerovalo ¾ádný výstup..." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Varování: Nebyl nalezen intermediate certifikát." + +# +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "OpenSSL podproces nelze spustit!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "OpenSSL nevygenerovalo ¾ádný výstup..." + +# +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Konec OpenSSL výstupu --]\n" +"\n" + +# +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Chyba: nelze spustit OpenSSL podproces! --]\n" + +# +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Následující data jsou za¹ifrována pomocí S/MIME --]\n" + +# +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Následují data podepsaná pomocí S/MIME --]\n" + +# +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Konec dat za¹ifrovaných ve formátu S/MIME --]\n" + +# +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Konec dat podepsaných pomocí S/MIME --]\n" + +# +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Øadím schránku..." + +# +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Øadící funkci nelze nalézt! [ohlaste tuto chybu]" + +# +#: status.c:102 +msgid "(no mailbox)" +msgstr "(¾ádná schránka)" + +# +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Rodièovská zpráva není v omezeném zobrazení viditelná.." + +# +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Rodièovská zpráva není dostupná." + +# +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Spou¹tím OpenSSL..." + +# +#~ msgid "Bounce message to %s...?" +#~ msgstr "Zaslat kopii zprávy na %s...?" + +# +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Zaslat kopii zpráv na %s...?" + +# +#~ msgid "ewsabf" +#~ msgstr "¹pzjon" + +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certifikát *NEBYL* pøidán." + +# +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Míra dùvìryhodnosti tohoto ID není definována." + +# +#~ msgid "Decode-save" +#~ msgstr "Dekódovat-ulo¾it" + +# +#~ msgid "Decode-copy" +#~ msgstr "Dekódovat-kopírovat" + +# +#~ msgid "Decrypt-save" +#~ msgstr "De¹ifrovat-ulo¾it" + +# +#~ msgid "Decrypt-copy" +#~ msgstr "De¹ifrovat-kopírovat" + +# +#~ msgid "Copy" +#~ msgstr "Kopírovat" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +# +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Konec výstupu PGP --]\n" +#~ "\n" + +# +#~ msgid "Can't stat %s." +#~ msgstr "Chyba pøi volání funkce stat pro %s" + +# +#~ msgid "%s: no such command" +#~ msgstr "pøíkaz %s neexistuje" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Neznámá autentikaèní metoda" diff --git a/po/da.gmo b/po/da.gmo new file mode 100644 index 0000000000000000000000000000000000000000..3b4efea9ef73bbe3f74753509654cb98265a2a54 GIT binary patch literal 64172 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 ^|d} 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 literal 0 HcmV?d00001 diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..1716441 --- /dev/null +++ b/po/da.po @@ -0,0 +1,4193 @@ +# This Danish translation of Mutt was made by people on the +# sslug-locale mailing list in the month of March 2000. The +# mailing list is archived at http://www.sslug.dk/emailarkiv/locale/ +# +# +msgid "" +msgstr "" +"Project-Id-Version: Mutt-1.3.27\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2002-01-23 16:07+0100\n" +"Last-Translator: Byrial Jensen <byrial@image.dk>, Morten Bo Johansen " +"<mojo@image.dk>\n" +"Language-Team: Danish <dansk@klid.dk>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Brugernavn på %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Adgangskode for %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Tilbage" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Slet" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Behold" + +#: addrbook.c:36 +msgid "Select" +msgstr "Vælg" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Hjælp" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Adressebogen er tom!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Adressebog" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Vælg et alias: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Der er allerede et alias med det navn!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Adresse: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Navn: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] O.k.?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Gem i fil: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Adresse tilføjet." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Kan ikke matche navneskabelon, fortsæt?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Brug af \"compose\" i mailcap-fil kræver %%s." + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Fejl ved kørsel af \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Kan ikke åbne fil for at analysere brevhovedet." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Kan ikke åbne fil for at fjerne brevhovedet." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Ingen \"compose\"-regel for %s i mailcap-fil, opretter en tom fil." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Brug af \"edit\" i mailcap-fil kræver %%s." + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Ingen \"edit\"-regel for %s i mailcap-fil." + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Ingen passende mailcap-regler fundet. Viser som tekst." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME-typen er ikke defineret. Kan ikke vise bilag." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Kan ikke oprette filter." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Kan ikke oprette filter" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Skrivefejl!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Jeg ved ikke hvordan man udskriver dette!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Skift filkatalog" + +#: browser.c:42 +msgid "Mask" +msgstr "Maske" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s er ikke et filkatalog." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Indbakker [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Abonnementer [%s], filmaske: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Filkatalog [%s], filmaske: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Kan ikke vedlægge et filkatalog!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Ingen filer passer til filmasken." + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Oprettelse er kun understøttet for IMAP-brevbakker" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Sletning er kun understøttet for IMAP-brevbakker" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Virkelig slette brevbakke \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Brevbakke slettet." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Brevbakke ikke slettet." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Skift til filkatalog: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Fejl ved indlæsning af filkatalog." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Filmaske: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Omvendt sortering efter (d)ato, (a)lfabetisk, (s)tr. eller (i)ngen?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sortering efter (d)ato, (a)lfabetisk, (s)tr. eller (i)ngen?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dasi" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nyt filnavn: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Filkataloger kan ikke vises." + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Fejl ved visning af fil." + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Ny post i %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: farve er ikke understøttet af terminal." + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: ukendt farve." + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: ukendt objekt." + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: kommandoen kan kun bruges på et indeks-objekt." + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: for få parametre." + +#: color.c:563 +msgid "Missing arguments." +msgstr "Manglende parameter." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: for få parametre." + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: for få parametre." + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: ukendt attribut" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "for få parametre." + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "for mange parametre." + +#: color.c:721 +msgid "default colors not supported" +msgstr "standard-farver er ikke understøttet." + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Kontrollér PGP-underskrift?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Kunne ikke oprette midlertidig fil!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Kan ikke oprette fremvisningsfilter." + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Kunne ikke kopiere brevet." + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "PGP-underskrift er i orden." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "PGP-underskrift er IKKE i orden." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP-underskrift er i orden." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP-underskrift er IKKE i orden." + +#: commands.c:223 +msgid "Command: " +msgstr "Kommando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Gensend brev til: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Gensend udvalgte breve til: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Ugyldig adresse!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Gensend brev til %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Gensend breve til %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Brevet er gensendt." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Brevene er gensendt." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Brevet er gensendt." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Brevene er gensendt." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Kan ikke oprette filterproces" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Overfør til kommando: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Ingen udskrivningskommando er defineret" + +#: commands.c:483 +msgid "Print message?" +msgstr "Udskriv brev?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Udskriv udvalgte breve?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Brevet er udskrevet" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Brevene er udskrevet" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Brevet kunne ikke udskrives" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Brevene kunne ikke udskrives" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Omvendt-sort (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)" +"ore?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sortér (d)ato/(f)ra/(a)nk./(e)mne/t(i)l/(t)råd/(u)sort/(s)tr./s(c)ore?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfaeitusc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Skalkommando: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Afkod-gem%s i brevbakke" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Afkod-kopiér%s til brevbakke" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Dekryptér-gem%s i brevbakke" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Dekryptér-kopiér%s til brevbakke" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Gem%s i brevbakke" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopiér%s til brevbakke" + +#: commands.c:706 +msgid " tagged" +msgstr " udvalgte" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopierer til %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Omdan til %s ved afsendelse?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "\"Content-Type\" ændret til %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Tegnsæt ændret til %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "omdanner ikke" + +#: commands.c:914 +msgid "converting" +msgstr "omdanner" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Der er ingen bilag." + +#: compose.c:84 +msgid "Send" +msgstr "Send" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Afbryd" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Vedlæg fil" + +#: compose.c:90 +msgid "Descrip" +msgstr "Beskr." + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Underskriv og kryptér" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Kryptér" + +#: compose.c:131 +msgid "Sign" +msgstr "Underskriv" + +#: compose.c:133 +msgid "Clear" +msgstr "Klartekst" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " underskriv som: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<forvalgt>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Kryptér" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "(k)ryptér, (u)nderskriv, underskriv (s)om, (b)egge, (i)ngen PGP" + +#: compose.c:166 +msgid "esabf" +msgstr "kusbi" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Underskriv som: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "(k)ryptér, (u)nderskriv, underskriv (s)om, (b)egge, (i)ngen PGP" + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "kusbi" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] findes ikke mere!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] blev ændret. Opdatér indkodning?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- MIME-dele" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Brevets eneste del kan ikke slettes." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Vedlægger valgte filer ..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Kan ikke vedlægge %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Åbn brevbakken med brevet som skal vedlægges" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Ingen breve i den brevbakke." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Udvælg de breve som du vil vedlægge!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Kan ikke vedlægge!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Omkodning berører kun tekstdele" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Den aktuelle del vil ikke blive konverteret" + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Den aktuelle del vil blive konverteret" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Ugyldig indkodning." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Gem en kopi af dette brev?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Omdøb til: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Kan ikke finde filen %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Ny fil: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "\"Content-Type\" er på formen grundtype/undertype." + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Ukendt \"Content-Type\" %s." + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Kan ikke oprette filen %s." + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Det er ikke muligt at lave et bilag." + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Udsæt afsendelse af dette brev?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Skriv brevet til brevbakke" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Skriver brevet til %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Brevet skrevet." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- PGP-uddata følger (aktuelt tidspunkt: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "Har glemt PGP-løsen." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Anfør PGP-løsen:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Anfør PGP-løsen:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Lav et \"application/pgp\"-brev?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Starter PGP ..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Fejl: Inkonsistent \"multipart/signed\" struktur! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Fejl: Ukendt \"multipart/signed\" protokol %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "[-- Advarsel: %s/%s underskrifter kan ikke kontrolleres. --]\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "[-- Følgende data er underskrevet --]\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "[-- Advarsel: Kan ikke finde nogen underskrifter. --]\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "[-- Slut på underskrevne data --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "ja" + +#: curs_lib.c:158 +msgid "no" +msgstr "nej" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Afslut Mutt øjeblikkeligt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "ukendt fejl" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Tryk på en tast for at fortsætte." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' for en liste): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Ingen brevbakke er åben." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Der er ingen breve." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Brevbakken er skrivebeskyttet." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funktionen er ikke tilladt ved vedlægning af bilag." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Ingen synlige breve." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Kan ikke skrive til en skrivebeskyttet brevbakke!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Ændringer i brevbakken vil blive skrevet til disk, når den forlades." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Ændringer i brevbakken vil ikke blive skrevet til disk." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Afslut" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Gem" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Send" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Svar" + +#: curs_main.c:403 +msgid "Group" +msgstr "Gruppe" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Brevbakke ændret udefra. Status-indikatorer kan være forkerte." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Ny(e) brev(e) i denne brevbakke." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Brevbakke ændret udefra." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Ingen breve er udvalgt." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Forbinder til %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Hop til brev: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Parameter skal være nummeret på et brev." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Brevet er ikke synligt." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Ugyldigt brevnummer." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Slet breve efter mønster: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Intet afgrænsnings-mønster er i brug." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Afgrænsning: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Afgræns til breve efter mønster: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Afslut Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Udvælg breve efter mønster: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Behold breve efter mønster: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Fjern valg efter mønster: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Åbn brevbakke i skrivebeskyttet tilstand" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Åbn brevbakke" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s er ikke en brevbakke." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Afslut Mutt uden at gemme?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Du er ved sidste brev." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Alle breve har slette-markering." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Du er ved første brev." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Søgning fortsat fra top." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Søgning fortsat fra bund." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Ingen nye breve" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Ingen ulæste breve" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " i dette afgrænsede billede" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Kan ikke ændre 'vigtig'-markering for breve på POP-server." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Ikke flere tråde." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Du er ved den første tråd." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Trådning er ikke i brug." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Tråden indeholder ulæste breve." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Kan ikke redigere brev på POP-server." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tindsæt en linje som begynder med en enkelt ~.\n" +"~b adresser\tføj adresser til Bcc-feltet.\n" +"~c adresser\tføj adresser til Cc-feltet.\n" +"~f [brevnummer]\tindføj brev.\n" +"~F [brevnummer]\tsamme som ~f, men inkl. brevhoved.\n" +"~h\t\tret i brevhoved.\n" +"~m [brevnummer]\tcitér brev.\n" +"~M [brevnummer]\tsamme som ~m, men inkl. brevhoved.\n" +"~p\t\tudskriv brev.\n" +"~q\t\tgem fil og afslut editor.\n" +"~r fil\tindlæs fil i editor.\n" +"~t adresser\tføj Adresser til To-feltet.\n" +"~u\t\tgenindlæs den forrige linje.\n" +"~v\t\tredigér brev med den visuelle editor ($visual).\n" +"~w fil\tskriv brev til fil.\n" +"~x\t\tforkast rettelser og forlad editor.\n" +"~?\t\tdenne meddelelse.\n" +".\t\tpå en linje for sig selv afslutter input.\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: ugyldigt brevnummer.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Afslut brevet med et '.' på en linje for sig selv).\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Ingen brevbakke.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Brevet indeholder:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(fortsæt)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "manglende filnavn.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Ingen linjer i brevet.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: ukendt editor-kommando (~? for hjælp)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "kunne ikke oprette midlertidig brevbakke: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Kunne ikke skrive til midlertidig brevbakke: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Kunne ikke skrive til midlertidig brevbakke: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Brevfilen er tom!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Brevet er uændret!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Kan ikke åbne brev: %s." + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Kan ikke føje til brevbakke: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Fejl. Bevarer midlertidig fil: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Sæt status-indikator" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Fjern status-indikator" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Fejl: Kunne ikke vise nogen del af \"Multipart/Alternative\"! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Brevdel #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Type: %s/%s, indkodning: %s, størrelse: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Autovisning ved brug af %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Starter autovisning kommando: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Kan ikke køre %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Fejl fra autovisning af %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Fejl: \"message/external-body\" har ingen \"access-type\"-parameter --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Denne %s/%s-del " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(på %s bytes) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "er blevet slettet --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- den %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- navn %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Denne %s/%s-del er ikke medtaget, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- og den angivne eksterne kilde findes ikke mere. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- og den angivne \"access-type\" %s er ikke understøttet --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Fejl: \"multipart/signed\" har ingen \"protocol\"-parameter." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Fejl: \"multipart/encrypted\" har ingen \"protocol\"-parameter!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Kan ikke åbne midlertidig fil!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s er ikke understøttet " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(brug '%s' for vise denne brevdel)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' må tildeles en tast!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: kunne ikke vedlægge fil." + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "FEJL: vær venlig at rapportere denne fejl" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<UKENDT>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Almene taste-bindinger:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funktioner uden tastetildelinger:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Hjælp for %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Kan ikke foretage unhook * inde fra en hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: ukendt hooktype: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Kan ikke slette en %s inde fra en %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Ingen godkendelsesmetode kan bruges." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Godkender (anonym)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonym godkendelse slog fejl." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Godkender (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5-godkendelse slog fejl." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Godkender (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI-godkendelse slog fejl." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "Der er spærret for indlogning på denne server." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Logger ind..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Login slog fejl." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Godkender (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL-godkendelse slog fejl." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s er en ugyldig IMAP-sti" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Henter navnerum..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Henter liste over brevbakker" + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Brevbakken findes ikke" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Opret brevbakke: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Brevbakken skal have et navn." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Brevbakke oprettet." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Brevbakke lukket" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Kritisk fejl. Antal breve er ikke som forventet!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Lukker forbindelsen til %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Forældet IMAP-server. Mutt kan ikke bruge den." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Sikker forbindelse med TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Kunne ikke opnå TLS-forbindelse" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Vælger %s ..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Fejl ved åbning af brevbakke" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Kunne ikke føje til IMAP-brevbakker på denne server." + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Opret %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Lukker forbindelsen til IMAP-serveren ..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Markerer %d breve slettet" + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Sletning slog fejl" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Gemmer brevstatus-indikatorer ... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Sletter breve på server ..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE slog fejl" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE slog fejl" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Ugyldigt navn på brevbakke" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Abonnerer på %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Afmelder abonnement på %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Kan ikke hente brevhoveder fra denne version IMAP-server." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Kunne ikke oprette midlertidig fil %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Henter brevhoveder ... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Henter brev ..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Brevindekset er forkert. Prøv at genåbne brevbakken." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Uploader brev ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopierer %d breve til %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopierer brev %d til %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Fortsæt?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: Ingen adresse" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "ugyldig linje i brevhoved" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: ukendt sorteringsmetode" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): Fejl i regulært udtryk: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: ukendt variabel." + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "præfiks er ikke tilladt med reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "værdi er ikke tilladt med reset" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s er sat." + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s er ikke sat." + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: ugyldig type brevbakke" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: Ugyldig værdi" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: ukendt type" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: ukendt type" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Kan ikke finde filen %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s er ikke en almindelig fil." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Fejl i %s, linje %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: Fejl i %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: læsning afbrudt pga. for mange fejl i %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: Fejl ved %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: For mange parametre" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: Ukendt kommando" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Fejl i kommandolinje: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "Kan ikke bestemme hjemmekatalog." + +#: init.c:1928 +msgid "unable to determine username" +msgstr "kan ikke bestemme brugernavn." + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Macro-sløjfe opdaget!" + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Tasten er ikke tillagt en funktion." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Tasten er ikke tillagt en funktion. Tast '%s' for hjælp." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: For mange parametre" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: ukendt menu." + +#: keymap.c:713 +msgid "null key sequence" +msgstr "tom tastesekvens" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: for mange parametre" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: ukendt funktion" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: tom tastesekvens" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: for mange parametre" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: ingen parametre." + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: ukendt funktion" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Anfør nøgle-id for %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "tom funktion" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "fremtving visning af denne del ved brug af mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "vis denne del som tekst" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Slå visning af underdele fra eller til" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "gå til bunden af siden" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "videresend et brev til en anden modtager" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "Vælg en ny fil i dette filkatalog" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "vis fil" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "vis navnet på den aktuelt valgte fil" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "abonnér på aktuelle brevbakke (kun IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "afmeld abonnement på aktuelle brevbakke (kun IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "skift mellem visning af alle/abonnerede postbakker (kun IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Ingen brevbakke med nye breve." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "skift filkatalog" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "undersøg brevbakker for nye breve" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "vedlæg fil(er) til dette brev" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "vedlæg brev(e) til dette brev" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "ret i Bcc-listen" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "ret i Cc-listen" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "ret brevdelens beskrivelse" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "ret brevdelens indkodning" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "kopiér dette brev til fil" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "redigér i den fil der skal vedlægges" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "ret afsender (from:)" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "redigér brev (med brevhoved)" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "redigér brev" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "redigér brevdel efter mailcap-regel" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "ret Reply-To-feltet" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "ret dette brevs emne (Subject:)" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "ret listen over modtagere (To:)" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "opret en ny brevbakke (kun IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "ret brevdelens \"content-type\"" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "lav en midlertidig kopi af en brevdel" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "stavekontrollér brevet" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "lav en ny brevdel efter mailcap-regel" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "slå omkodning af denne brevdel til/fra" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "gem dette brev til senere forsendelse" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "omdøb/flyt en vedlagt fil" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "send brevet" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "skift status mellem integreret og bilagt" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "vælg om filen skal slettes efter afsendelse" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "opdatér data om brevdelens indkodning" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "læg brevet i en brevbakke" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "kopiér brev til en fil/brevbakke" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "opret et alias fra afsenderadresse" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "flyt til nederste listning" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "flyt til midterste listning" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "flyt til øverste listning" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "lav en afkodet kopi (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "lav en afkodet kopi (text/plain) og slet" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "slet den aktuelle listning" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "slet den aktuelle brevbakke (kun IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "slet alle breve i deltråd" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "slet alle breve i tråd" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "vis fuld afsenderadresse" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "fremvis brev med helt eller beskåret brevhoved" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "fremvis et brev" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "redigér det \"rå\" brev" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "slet tegnet foran markøren" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "flyt markøren et tegn til venstre" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "flyt markøren til begyndelse af ord" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "gå til begyndelsen af linje" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "Gennemløb indbakker" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "færdiggør filnavn eller alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "færdiggør adresse ved forespørgsel" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "slet tegnet under markøren" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "gå til linjeslut" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "flyt markøren et tegn til højre" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "flyt markøren til slutning af ord" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "gå op igennem historik-listen" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "gå op igennem historik-listen" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "slet alle tegn til linjeafslutning" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "slet resten af ord fra markørens position" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "slet linje" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "slet ord foran markør" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "citér den næste tast" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "udskift tegn under markøren med forrige" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "skriv ord med stort begyndelsesbogstav" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "skriv ord med små bogstaver" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "skriv ord med store bogstaver" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "skriv en muttrc-kommando" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "skriv en filmaske" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "forlad denne menu" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrér brevdel gennem en skalkommando" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "gå til den første listning" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "markér brev som vigtig/fjern markering" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "videresend et brev med kommentarer" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "vælg den aktuelle listning" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "svar til alle modtagere" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "gå ½ side ned" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "gå ½ side op" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "dette skærmbillede" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "gå til et indeksnummer" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "gå til den sidste listning" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "svar til en angivet postliste" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "udfør makro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "skriv et nyt brev" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "åbn en anden brevbakke" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "åbn en anden brevbakke som skrivebeskyttet" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "fjern status-indikator fra brev" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "slet breve efter mønster" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "hent post fra IMAP-server nu" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "hent post fra POP-server" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "gå til det første brev" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "gå til det sidste brev" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "vis kun breve, der matcher et mønster" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "hop til det næste nye brev" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "hop til næste ulæste brev" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "hop til næste deltråd" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "hop til næste tråd" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "hop til næste ikke-slettede brev" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "hop til næste ulæste brev" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "hop til forrige brev i tråden" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "hop til forrige tråd" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "hop til forrige deltråd" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "hop til forrige ikke-slettede brev" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "hop til forrige nye brev" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "hop til forrige ulæste brev" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "hop til forrige ulæste brev" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "markér den aktuelle tråd som læst" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "markér den aktuelle deltråd som læst" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "sæt en status-indikator på et brev" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "gem ændringer i brevbakke" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "udvælg breve efter et mønster" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "fjern slet-markering efter mønster" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "fjern valg efter mønster" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "gå til midten af siden" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "gå til næste listning" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "flyt en linje ned" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "gå til næste side" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "gå til bunden af brevet" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "vælg om citeret tekst skal vises" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "gå forbi citeret tekst" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "gå til toppen af brevet" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "overfør brev/brevdel til en skalkommando" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "gå til forrige listning" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "flyt en linje op" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "gå til den forrige side" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "udskriv den aktuelle listning" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "send adresse-forespørgsel til hjælpeprogram" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "føj nye resultater af forespørgsel til de aktuelle resultater" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "gem ændringer i brevbakke og afslut" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "genindlæs et tilbageholdt brev" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "ryd og opfrisk skærmen" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{intern}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "svar på et brev" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "brug det aktuelle brev som forlæg for et nyt" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "gem brev/brevdel i en fil" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "søg efter et regulært udtryk" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "søg baglæns efter et regulært udtryk" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "søg efter næste resultat" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "søg efter næste resultat i modsat retning" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "vælg om fundne søgningsmønstre skal farves" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "kør en kommando i en under-skal" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "sortér breve" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "sortér breve i omvendt rækkefølge" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "udvælg den aktuelle listning" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "anvend næste funktion på de udvalgte breve" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "anvend næste funktion på de udvalgte breve" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "markér den aktuelle deltråd" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "markér den aktuelle tråd" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "sæt/fjern et brevs \"ny\"-indikator" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "slå genskrivning af brevbakke til/fra" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "skift mellem visning af brevbakker eller alle filer" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "gå til toppen af siden" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "fjern slet-markering fra den aktuelle listning" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "fjern slet-markering fra alle breve i tråd" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "fjern slet-markering fra alle breve i deltråd" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "vis Mutts versionsnummer og dato" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "vis brevdel, om nødvendigt ved brug af mailcap" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "vis MIME-dele" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "vis det aktive afgrænsningsmønster" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "sammen-/udfold den aktuelle tråd" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "sammen-/udfold alle tråde" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "vedlæg en offentlig PGP-nøgle (public key)" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "vis tilvalg for PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "send en offentlig PGP-nøgle" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "Kontrollér en offentlig PGP-nøgle" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "vis nøglens bruger-id" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "Tjek for klassisk pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Brug den opbyggede kæde" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Føj en genposter til kæden" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "indsæt en genposter i kæden" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Slet en genposter fra kæden" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Vælg kædens forrige led" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Vælg kædens næste led" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "send brevet gennem en mixmaster-genposterkæde" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "opret dekrypteret kopi og slet" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "opret dekrypteret kopi" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "fjern PGP-løsen fra hukommelse" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "udtræk offentlige PGP-nøgler" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "vis tilvalg for PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Ikke mere hukommelse!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"For at kontakte Mutts udviklere, skriv venligst til <mutt-dev@mutt.org>.\n" +"Brug venligst flea(1)-værktøjet, hvis du vil rapportere en bug.\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins m.fl.\n" +"Der følger ABSOLUT INGEN GARANTI med Mutt; tast `mutt -vv` for detaljer.\n" +"Mutt er et frit program, og du er velkommen til at redistribuere det\n" +"under visse betingelser; tast `mutt -vv` for detaljer.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Masser af andre, der ikke er nævnt her, har bidraget med masser af kode,\n" +"rettelser og forslag.\n" +"\n" +" Dette program er et frit; du kan videredistribuere og/eller ændre\n" +" det under betingelserne i GNU General Public License som offentliggjort\n" +" af The Free Software Foundation, enten i dennes version 2 eller \n" +" (efter dit valg) en hvilken som helst senere version.\n" +"\n" +" Dette program distribueres i håbet om at det vil være brugbart,\n" +" men UDEN NOGEN SOM HELST GARANTI, herunder sågar uden nogen \n" +" underforstået garanti om SALGBARHED eller EGNETHED TIL NOGET BESTEMT\n" +" FORMÅL. Se GNU General Public License for yderligere detaljer\n" +"\n" +" Du skulle have modtaget en kopi af GNU General Public License\n" +" sammen med dette program; hvis ikke, så skriv til The Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"anvendelse: mutt [ -nRzZ ] [ -e <kmd> ] [ -F <fil> ] [ -m <type> ] [ -f " +"<fil> ]\n" +" mutt [ -nx ] [ -e <kmd> ] [ -a <fil> ] [ -F <fil> ] [ -H <fil> ] [ -i " +"<fil> ] [ -s <emne> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n" +" mutt [ -n ] [ -e <kmd> ] [ -F <fil> ] -p\n" +" mutt -v[v]\n" +"\n" +"tilvalg:\n" +" -a <fil>\tvedlæg fil ved brevet\n" +" -b <adresse>\tanfør en blind carbon-copy (BCC)-adresse\n" +" -c <adresse>\tanfør en carbon-copy (CC)-adresse\n" +" -e <kommando>\tanfør en Mutt-kommando til udførelse efter opstart\n" +" -f <fil>\tanfør hvilken brevbakke der skal indlæses\n" +" -F <fil>\tanfør en alternativ muttrc-fil\n" +" -H <fil>\tanfør en kladdefil hvorfra brevhovedet skal indlæses\n" +" -i <fil>\tanfør en fil som Mutt skal medtage i svaret\n" +" -m <type>\tanfør standardtype af brevbakke\n" +" -n\t\tgør at Mutt ikke læser systemets Muttrc\n" +" -p\t\tgenindlæs et tilbageholdt brev\n" +" -R\t\tåbn en brevbakke i skrivebeskyttet tilstand\n" +" -s <emne>\tanfør et emne (sættes i citationstegn, hvis der er blanktegn)\n" +" -v\t\tvis version og oversættelsesparametre\n" +" -x\t\tefterlign mailx' afsendelsesmåde\n" +" -y\t\tvælg en indbakke\n" +" -z\t\tafslut øjeblikkeligt, hvis brevbakken er tom\n" +" -Z\t\tåbn første brevbakke med nye breve, afslut straks hvis tom\n" +" -h\t\tdenne hjælpeskærm" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Tilvalg ved oversættelsen:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Kan ikke klargøre terminal." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Afluser på niveau %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG blev ikke defineret ved oversættelsen. Ignoreret.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s findes ikke. Opret?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Kan ikke oprette %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Ingen angivelse af modtagere.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: kan ikke vedlægge fil.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Ingen brevbakke med nye breve." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Ingen indbakker er defineret" + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Brevbakken er tom." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Læser %s ... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Brevbakken er ødelagt!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Brevbakken blev ødelagt!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Kritisk fejl! Kunne ikke genåbne brevbakke!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Kan ikke låse brevbakke!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: mbox ændret, men ingen ændrede breve! (rapportér denne bug)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Skriver breve ... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Udfører ændringer..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Kunne ikke skrive! Gemte en del af brevbakken i %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Kunne ikke genåbne brevbakke!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Genåbner brevbakke ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Hop til: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Ugyldigt indeksnummer." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Ingen listninger" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Du kan ikke komme længere ned." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Du kan ikke komme længere op." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Du er på den sidste side." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Du er på den første side." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Første listning vises." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Sidste listning vises." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Du er på sidste listning." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Du er på første listning." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Søg efter: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Søg baglæns efter: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Intet søgemønster." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Ikke fundet." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Der er ingen udvalgte listninger." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Søgning kan ikke bruges i denne menu." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Man kan ikke springe rundt i dialogerne" + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Udvælgelse er ikke understøttet." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Læser %s ... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Filen er et filkatalog, gem i det?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Filen er et filkatalog, gem i det?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Fil i dette filkatalog: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Filen eksisterer , (o)verskriv, (t)ilføj, (a)nnulér?" + +#: muttlib.c:869 +msgid "oac" +msgstr "ota" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Kan ikke gemme brev i POP-brevbakke." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s er ingen brevbakke" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Føj breve til %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Forbindelse til %s er lukket." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL er ikke tilgængelig." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "\"preconnect\"-kommando slog fejl" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Kommunikationsfejl med server %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Opsøger %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Kunne ikke finde værten \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Forbinder til %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Kunne ikke forbinde til %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Kunne ikke finde nok entropi på dit system" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Fylder entropipuljen: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s har usikre tilladelser!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL sat ud af funktion pga. mangel på entropi" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O-fejl" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "uspecificeret fejl i protokol" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL slog fejl: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Ude af stand til at hente certifikat fra server" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL-forbindelse bruger %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Ukendt" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[kan ikke beregne]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ugyldig dato]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Server-certifikat er endnu ikke gyldigt" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Server-certifikat er udløbet" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Dette certifikat tilhører:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Dette certifikat er udstedt af:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Dette certifikat er gyldigt" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " fra %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " til %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingeraftryk: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Tjek af SSL-certifikat" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(a)fvis, (g)odkend denne gang, (v)arig godkendelse" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "agv" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(a)fvis, (g)odkend denne gang" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ag" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Afslut " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Advarsel: Kunne ikke gemme certifikat" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certifikat gemt" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Fil blokeret af gammel lås. Fjern låsen på %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Kan ikke låse %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Timeout overskredet under forsøg på at bruge fcntl-lås!." + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Venter på fcntl-lås ... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Timeout overskredet ved forsøg på brug af flock-lås!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Venter på flock-lås ... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Kunne ikke låse %s.\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Læser %s ..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Skriver %s ..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Kan ikke synkronisere brevbakke %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Flyt læste breve til %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Fjern %d slettet brev?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Fjern %d slettede breve?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Flytter læste breve til %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Brevbakken er uændret." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d beholdt, %d flyttet, %d slettet." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d beholdt, %d slettet." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Tast '%s' for at skifte til/fra skrivebeskyttet tilstand" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Brug 'toggle-write' for at muliggøre skrivning" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Brevbakken er skrivebeskyttet. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Brevbakke opdateret." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Kan ikke skrive brev" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Funktion er ikke tilgængelig i denne menu." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "Side op" + +#: pager.c:1447 +msgid "NextPg" +msgstr "Side ned" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Vis brevdel" + +#: pager.c:1454 +msgid "Next" +msgstr "Næste" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Bunden af brevet vises." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Toppen af brevet vises." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Søg baglæns: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Søg: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Hjælpeskærm vises nu." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Ikke mere citeret tekst." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Ikke mere uciteret tekst efter citeret tekst." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "brev med flere dele har ingen \"boundary\"-parameter!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Fejl i udtryk: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Ugyldig dag: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Ugyldig måned: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Ugyldig relativ dato: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "Fejl i udtryk." + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "fejl i mønster ved: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: Ugyldig Kommando" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: er ikke understøttet i denne tilstand." + +#: pattern.c:801 +msgid "missing parameter" +msgstr "manglende parameter" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "parenteser matcher ikke: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "tomt mønster" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "fejl: ukendt op %d (rapportér denne fejl)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Klargør søgemønster..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Udfører kommando på matchende breve ..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Ingen breve opfylder kriterierne." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Søgning er nået til bunden uden resultat." + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Søgning nåede toppen uden resultat." + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Søgning afbrudt." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Har glemt PGP-løsen." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Fejl: kan ikke skabe en PGP-delproces! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Slut på PGP-uddata --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- END PGP MESSAGE --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- END PGP PUBLIC KEY BLOCK --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- END PGP SIGNED MESSAGE --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Fejl: kunne ikke finde begyndelse på PGP-meddelelsen! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Intern fejl. Rapportér dette til <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Fejl: Kunne ikke skabe en PGP-delproces! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Fejl: forkert udformet PGP/MIME-meddelelse! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Fejl: Kunne ikke oprette en midlertidig fil! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Følgende data er PGP/MIME-krypteret --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Slut på PGP/MIME-krypteret data --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Kan ikke åbne PGP-delproces!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Anvend nøgle-id = \"%s\" for %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Anfør nøgle-id for %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Kan ikke starte PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Henter PGP-nøgle..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Alle matchende nøgler er markeret udløbet/tilbagekaldt." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Udvælg " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Undersøg nøgle " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP-nøgler som matcher <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP-nøgler som matcher \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Kan ikke åbne /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Kan ikke oprette midlertidig fil" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Nøgle-id: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Denne nøgle kan ikke bruges: udløbet/sat ud af kraft/tilbagekaldt." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Id er udløbet/ugyldig/ophævet." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Ægthed af id er ubestemt." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Id er ikke bevist ægte." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Id er kun bevist marginalt ægte." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Vil du virkelig anvende nøglen?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Anfør venligst nøgle-id: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Starter pgp ..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP-nøgle %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Leder efter nøgler, der matcher \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Kommandoen TOP understøttes ikke af server." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Kan ikke skrive brevhoved til midlertidig fil!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Kommandoen UIDL er ikke understøttet af server." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s er en ugyldig POP-sti" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Henter liste over breve..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Kan ikke skrive brev til midlertidig fil!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Kigger efter nye breve..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Ingen POP-server er defineret." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Ingen nye breve på POP-serveren." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Slet breve på server?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Indlæser nye breve (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Fejl ved skrivning til brevbakke!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d af %d breve læst]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Serveren afbrød forbindelsen!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Godkender (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Godkender (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP-godkendelse slog fejl." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Kommandoen USER er ikke understøttet af server." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Kunne ikke efterlade breve på server." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Fejl under forbindelse til server: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Lukker forbindelsen til POP-server ..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Efterkontrollerer brevfortegnelser..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Mistede forbindelsen. Opret ny forbindelse til POP-server?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Tilbageholdte breve" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Ingen tilbageholdte breve." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Ugyldig PGP-header" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Ugyldig PGP-header" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Login slog fejl." + +#: query.c:46 +msgid "New Query" +msgstr "Ny forespørgsel" + +#: query.c:47 +msgid "Make Alias" +msgstr "Opret alias" + +#: query.c:48 +msgid "Search" +msgstr "Søg" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Venter på svar ..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Ingen forespørgsels-kommando defineret." + +#: query.c:286 +msgid "Query" +msgstr "Forespørgsel" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Forespørgsel: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Forespørgsel: '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Overfør til program" + +#: recvattach.c:53 +msgid "Print" +msgstr "Udskriv" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Gemmer..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Bilag gemt." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ADVARSEL! Fil %s findes, overskriv?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Brevdel filtreret." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrér gennem: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Overfør til kommando (pipe): " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Kan ikke udskrive %s-brevdele." + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Udskriv udvalgte brevdele" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Udskriv brevdel?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Kan ikke finde nogen udvalgte breve." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Brevdele" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Der er ingen underdele at vise!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Kan ikke slette bilag fra POP-server." + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Sletning af brevdele fra PGP-breve er ikke understøttet." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Sletning af brevdele fra udelte breve er ikke understøttet." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Du kan kun gensende message/rfc822-brevdele." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Fejl ved afsendelse af brev." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Fejl ved afsendelse af brev." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Kan ikke åbne midlertidig fil %s" + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Videresend som bilag?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "Kan ikke afkode alle udvalgte brevdele. MIME-videresend de øvrige?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Videresend MIME-indkapslet?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Kan ikke oprette %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Kan ikke finde nogen udvalgte breve." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Ingen postlister fundet!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "Kan ikke afkode alle udvalgte brevdele. MIME-indkapsl de øvrige?" + +#: remailer.c:480 +msgid "Append" +msgstr "Tilføj" + +#: remailer.c:481 +msgid "Insert" +msgstr "Indsæt" + +#: remailer.c:482 +msgid "Delete" +msgstr "Slet" + +#: remailer.c:484 +msgid "OK" +msgstr "O.k." + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Kan ikke hente mixmasters type2.liste!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Vælg en genposterkæde" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Fejl: %s kan ikke være sidste led i kæden." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Kæden må højst have %d led." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Genposterkæden er allerede tom." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Du har allerede valgt kædens første led." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Du har allerede valgt kædens sidste led." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Breve sendt med Mixmaster må ikke have Cc- eller Bcc-felter." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Sæt hostname-variablen til en passende værdi ved brug af mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Fejl ved afsendelse af brev, afslutningskode fra barneproces: %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Fejl ved afsendelse af brev." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Ugyldig angivelse for type %s i \"%s\" linje %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Ingen mailcap-sti er defineret." + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Ingen mailcap-angivelse for type %s." + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: for få parametre." + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: for mange parametre." + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Intet emne, afbryd?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Intet emne, afbryder." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Svar til %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Opfølg til %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Ingen udvalgte breve er synlige!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Citér brevet i svar?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Inkluderer citeret brev ..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Kunne ikke citere alle ønskede breve!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Videresend som bilag?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Forbereder brev til videresendelse ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Genindlæs tilbageholdt brev?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Forbereder brev til videresendelse ..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Annullér uændret brev?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Annullerede uændret brev." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Brev ikke sendt." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Brev tilbageholdt." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Ingen modtagere er anført!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Ingen modtagere blev anført." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Intet emne, undlad at sende?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Intet emne er angivet." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Sender brev ..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Kunne ikke sende brevet." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Brev sendt." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Sender i baggrunden." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Fandt ingen \"boundary\"-parameter! [rapportér denne fejl]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s eksisterer ikke mere!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s er ikke en almindelig fil." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Kunne ikke åbne %s." + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Fejl %d under afsendelse af brev (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Uddata fra leveringsprocessen" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Afslutter.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Signal %s ... Afslutter.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Modtog signal %d... Afslutter.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Afslut " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Ugyldig måned: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Ukendt" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Anfør nøgle-id for %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "PGP-nøgler som matcher \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Anvend nøgle-id = \"%s\" for %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "Anvend nøgle-id = \"%s\" for %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Fejl: kan ikke skabe en PGP-delproces! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Kan ikke oprette filter." + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(ingen brevbakke)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Advarsel: Kunne ikke gemme certifikat" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "Kan ikke åbne PGP-delproces!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Slut på PGP-uddata --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Fejl: kan ikke skabe en PGP-delproces! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Følgende data er PGP/MIME-krypteret --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Følgende data er underskrevet --]\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "[-- Slut på PGP/MIME-krypteret data --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "[-- Slut på underskrevne data --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Sorterer brevbakke ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Kunne ikke finde sorteringsfunktion! [rapportér denne fejl]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(ingen brevbakke)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Forrige brev i tråden er ikke synligt i afgrænset visning" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Forrige brev i tråden er ikke tilgængeligt." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Starter pgp ..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Gensend brev til %s ...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Gensend breve til %s ...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "kusbi" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certifikat gemt" diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000000000000000000000000000000000000..73efab5f88f4e073ed542b8deec6e57719075c81 GIT binary patch literal 82543 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 QP`={>3t&l&7e<@^1ro{P-T(jq literal 0 HcmV?d00001 diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..5cd3c80 --- /dev/null +++ b/po/de.po @@ -0,0 +1,4220 @@ +msgid "" +msgstr "" +"Project-Id-Version: 1.5.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-15 14:12+0100\n" +"Last-Translator: Roland Rosenfeld <roland@spinnaker.de>\n" +"Language-Team: German <mutt-po@mutt.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Username bei %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Paßwort für %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Verlassen" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Lösch." + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Behalten" + +#: addrbook.c:36 +msgid "Select" +msgstr "Auswählen" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Hilfe" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Keine Einträge im Adreßbuch!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Adreßbuch" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Kurzname für Adreßbuch: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "" +"Sie haben bereits einen Adreßbucheintrag mit diesem Kurznamen definiert." + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Warnung: Dieser Alias-Name könnte Probleme bereiten. Korrigieren?" + +#: alias.c:279 +msgid "Address: " +msgstr "Adresse: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Fehler: '%s' ist eine fehlerhafte IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Name: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Eintragen?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Speichern in Datei: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Adresse eingetragen." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Namensschema kann nicht erfüllt werden, fortfahren?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "\"compose\"-Eintrag in der Mailcap-Datei erfordert %%s." + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Fehler beim Ausführen von \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Kann Datei nicht öffnen, um Nachrichtenkopf zu untersuchen." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Kann Datei nicht öffnen, um Nachrichtenkopf zu entfernen." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"Kein \"compose\"-Eintrag für %s in der Mailcap-Datei, erzeuge leere Datei." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "\"edit\"-Eintrag in Mailcap erfordert %%s." + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Kein \"edit\"-Eintrag für %s in Mailcap." + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Es gibt keinen passenden Mailcap-Eintrag. Anzeige als Text." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Undefinierter MIME-Typ. Kann Anhang nicht anzeigen." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Kann Filter nicht erzeugen." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Kann Filter nicht erzeugen" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Schreibfehler!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Ich weiß nicht, wie man dies druckt!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Verzeichnis" + +#: browser.c:42 +msgid "Mask" +msgstr "Maske" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ist kein Verzeichnis." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Mailbox-Dateien [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Abonniert [%s], Dateimaske: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Verzeichnis [%s], Dateimaske: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Verzeichnisse können nicht angehängt werden!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Es gibt keine zur Maske passenden Dateien" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Es können nur IMAP Mailboxen erzeugt werden" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Es können nur IMAP Mailboxen gelöscht werden" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Mailbox \"%s\" wirklich löschen?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Mailbox gelöscht." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Mailbox nicht gelöscht." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Verzeichnis wechseln nach: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Fehler beim Einlesen des Verzeichnisses." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Dateimaske: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Sortiere umgekehrt nach (D)atum, (a)lphabetisch, (G)röße, oder (n)icht? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sortiere nach (D)atum, (a)lphabetisch, (G)röße oder (n)icht?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dagn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Neuer Dateiname: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Verzeichnisse können nicht angezeigt werden." + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Fehler bei der Anzeige einer Datei" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Neue Nachrichten in " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: color wird nicht vom Terminal unterstützt." + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: Farbe unbekannt." + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: Objekt unbekannt." + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: Kommando ist nur für Index-Objekt gültig." + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: Zu wenige Parameter." + +#: color.c:563 +msgid "Missing arguments." +msgstr "Fehlende Parameter." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: Zu wenige Parameter." + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: Zu wenige Parameter." + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: Attribut unbekannt." + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "Zu wenige Parameter." + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "Zu viele Parameter." + +#: color.c:721 +msgid "default colors not supported" +msgstr "Standard-Farben werden nicht unterstützt." + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "PGP-Signatur überprüfen?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Konnte keine Temporärdatei erzeugen!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Kann Filter zum Anzeigen nicht erzeugen." + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Konnte Nachricht nicht kopieren." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME Unterschrift erfolgreich überprüft." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "S/MIME Zertifikat-Inhaber stimmt nicht mit Absender überein." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME Unterschrift konnte NICHT überprüft werden." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP Unterschrift erfolgreich überprüft." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP Unterschrift konnte NICHT überprüft werden." + +#: commands.c:223 +msgid "Command: " +msgstr "Kommando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Nachricht weiterleiten an: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Markierte Nachrichten weiterleiten an: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Unverständliche Adresse!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Ungültige IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Nachricht an %s weiterleiten" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Nachrichten an %s weiterleiten" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Nachricht nicht weitergeleitet." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Nachrichten nicht weitergeleitet." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Nachricht weitergeleitet." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Nachrichten weitergeleitet." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Kann Filterprozeß nicht erzeugen" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "In Kommando einspeisen: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Kein Druck-Kommando definiert." + +#: commands.c:483 +msgid "Print message?" +msgstr "Nachricht drucken?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Ausgewählte Nachrichten drucken?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Nachricht gedruckt" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Nachrichten gedruckt" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Nachricht konnte nicht gedruckt werden" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Nachrichten konnten nicht gedruckt werden" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Umgekehrt (D)at/(A)bs/Ei(n)g/(B)etr/(E)mpf/(F)aden/(u)nsort/(G)röße/Be(w)" +"ert?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sortieren (D)at/(A)bs/Ei(n)g/(B)etr/(E)mpf/(F)aden/(u)nsort/(G)röße/Be(w)" +"ert?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "danbefugw" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Shell-Kommando: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Speichere%s dekodiert in Mailbox" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Kopiere%s dekodiert in Mailbox" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Speichere%s entschlüsselt in Mailbox" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Kopiere%s entschlüsselt in Mailbox" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Speichere%s in Mailbox" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopiere%s in Mailbox" + +#: commands.c:706 +msgid " tagged" +msgstr " ausgewählte" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopiere nach %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Konvertiere beim Senden nach %s?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type in %s abgeändert." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Zeichensatz in %s abgeändert; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "nicht konvertiert" + +#: commands.c:914 +msgid "converting" +msgstr "konvertiert" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Es sind keine Anhänge vorhanden." + +#: compose.c:84 +msgid "Send" +msgstr "Absenden" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Verwerfen" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Datei anhängen" + +#: compose.c:90 +msgid "Descrip" +msgstr "Beschr." + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Signieren, Verschlüsseln" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Verschlüsseln" + +#: compose.c:131 +msgid "Sign" +msgstr "Signieren" + +#: compose.c:133 +msgid "Clear" +msgstr "Klartext" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " signiere als: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<Voreinstellung>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Verschlüsseln mit: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (v)erschl., (s)ign., sign. (a)ls, (b)eides, (k)ein PGP? " + +#: compose.c:166 +msgid "esabf" +msgstr "vsabk" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Signiere als: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (v)erschl., (s)ign., verschl. (m)it, sign. (a)ls, (b)eides, (k)eins? " + +#: compose.c:228 +msgid "eswabf" +msgstr "vsmabk" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, oder (k)ein S/MIME? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345k" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] existiert nicht mehr!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] wurde verändert. Kodierung neu bestimmen?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Anhänge" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Warnung: '%s' ist eine ungültige IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Der einzige Nachrichtenteil kann nicht gelöscht werden." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Ungültige IDN in \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Hänge ausgewählte Dateien an..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Kann %s nicht anhängen!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Mailbox, aus der angehängt werden soll" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Keine Nachrichten in diesem Ordner." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Bitte markieren Sie die Nachrichten, die Sie anhängen wollen!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Kann nicht anhängen!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Ändern der Kodierung betrifft nur Textanhänge." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Der aktuelle Anhang wird nicht konvertiert werden." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Der aktuelle Anhang wird konvertiert werden." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Ungültige Kodierung." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Soll eine Kopie dieser Nachricht gespeichert werden?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Umbenennen in: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Kann Verzeichniseintrag für Datei %s nicht lesen: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Neue Datei: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type ist von der Form Basis/Untertyp." + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Unbekannter Content-Type %s." + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Kann Datei %s nicht anlegen." + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Anhang kann nicht erzeugt werden." + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Nachricht zurückstellen?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Schreibe Nachricht in Mailbox" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Schreibe Nachricht nach %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Nachricht geschrieben." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME bereits ausgewählt. Löschen und weiter?" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP bereits ausgewählt. Löschen und weiter?" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (aktuelle Zeit: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s Ausgabe folgt%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Mantra(s) vergessen." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "PGP-Mantra eingeben:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "S/MIME-Mantra eingeben:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Erzeuge eine veraltete (inline) PGP Nachricht?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Rufe PGP auf..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" +"S/MIME Nachrichten ohne Hinweis auf den Inhalt werden nicht unterstützt." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Versuche PGP Keys zu extrahieren...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Versuche S/MIME Zertifikate zu extrahieren...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Fehler: Inkonsistente multipart/signed Struktur! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Fehler: Unbekanntes multipart/signed Protokoll %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Warnung: %s/%s Unterschriften können nicht geprüft werden. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Die folgenden Daten sind signiert --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Warnung: Kann keine Unterschriften finden. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Ende der signierten Daten --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "ja" + +#: curs_lib.c:158 +msgid "no" +msgstr "nein" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Mutt verlassen?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "unbekannter Fehler" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Bitte drücken Sie eine Taste..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " (für eine Liste '?' eingeben): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Keine Mailbox ist geöffnet." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Es sind keine Nachrichten vorhanden." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Mailbox kann nur gelesen, nicht geschrieben werden." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funktion steht beim Anhängen von Nachrichten nicht zur Verfügung." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Keine sichtbaren Nachrichten." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Kann Mailbox im Nur-Lese-Modus nicht schreibbar machen!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Änderungen an dieser Mailbox werden beim Verlassen geschrieben." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Änderungen an dieser Mailbox werden nicht geschrieben." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Ende" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Speichern" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Senden" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Antw." + +#: curs_main.c:403 +msgid "Group" +msgstr "Antw.alle" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Mailbox wurde verändert. Markierungen können veraltet sein." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Neue Nachrichten in dieser Mailbox." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Mailbox wurde von außen verändert." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Keine markierten Nachrichten." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Nichts zu erledigen." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Springe zu Nachricht: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argument muß eine Nachrichtennummer sein." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Diese Nachricht ist nicht sichtbar." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Ungültige Nachrichtennummer." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Lösche Nachrichten nach Muster: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Zur Zeit ist kein Muster aktiv." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Begrenze: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Begrenze auf Nachrichten nach Muster: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Mutt beenden?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Markiere Nachrichten nach Muster: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Entferne Löschmarkierung nach Muster: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Entferne Markierung nach Muster: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Öffne Mailbox im nur-Lesen-Modus" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Öffne Mailbox" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ist keine Mailbox." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Mutt verlassen, ohne Änderungen zu speichern?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Sie sind bereits auf der letzten Nachricht." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Alle Nachrichten gelöscht." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Sie sind bereits auf der ersten Nachricht." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Suche von vorne begonnen." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Suche von hinten begonnen." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Keine neuen Nachrichten" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Keine ungelesenen Nachrichten" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " in dieser begrenzten Ansicht." + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Kann 'Wichtig'-Markierung auf dem POP-Server nicht ändern." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Keine weiteren Diskussionsfäden." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Sie haben bereits den ersten Diskussionsfaden ausgewählt." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Darstellung von Diskussionsfäden ist nicht eingeschaltet." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Diskussionsfaden enthält ungelesene Nachrichten." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Kann Nachricht auf dem POP-Server nicht ändern." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tFüge Zeile hinzu, die mit einer Tilde beginnt.\n" +"~b Adressen\tFüge Adressen zum Bcc-Feld hinzu.\n" +"~c Adressen\tFüge Adressen zum Cc-Feld hinzu.\n" +"~f Nachricht\tNachricht einfügen.\n" +"~F Nachrichten\tWie ~f, mit Nachrichtenkopf.\n" +"~h\t\tEditiere Nachrichtenkopf.\n" +"~m Nachrichten\tNachrichten zitieren.\n" +"~M Nachrichten\tWie ~t, mit Nachrichtenkopf.\n" +"~p\t\tNachricht ausdrucken.\n" +"~q\t\tDatei speichern und Editor verlassen.\n" +"~r Datei\tDatei in Editor einlesen.\n" +"~t Adressen\tFüge Adressen zum To-Feld hinzu.\n" +"~u\t\tEditiere die letzte Zeile erneut.\n" +"~v\t\tEditiere Nachricht mit Editor $visual.\n" +"~w Datei\tSchreibe Nachricht in Datei.\n" +"~x\t\tVerwerfe Änderungen und verlasse Editor.\n" +"~?\t\tDiese Nachricht.\n" +".\t\tin einer Zeile alleine beendet die Eingabe.\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: Ungültige Nachrichtennummer.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "" +"(Beenden Sie die Nachricht mit einen Punkt ('.') allein in einer Zeile)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Keine Mailbox.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Nachricht enthält:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(weiter)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "Dateiname fehlt.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Keine Zeilen in der Nachricht.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Ungültige IDN in %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: Unbekanntes Editor-Kommando (~? für Hilfestellung)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Konnte temporäre Mailbox nicht erzeugen: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Konnte nicht in temporäre Mailbox schreiben: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Konnte temporäre Mailbox nicht sutzen: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Nachricht ist leer!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Nachricht nicht verändert!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Kann Nachrichten-Datei nicht öffnen: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Kann an Mailbox nicht anhängen: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Fehler. Speichere temporäre Datei als %s ab." + +#: flags.c:332 +msgid "Set flag" +msgstr "Setze Indikator" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Entferne Indikator" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Fehler: Konnte keinen der multipart/alternative-Teile anzeigen! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Anhang #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Typ: %s/%s, Kodierung: %s, Größe: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automatische Anzeige mittels %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Automatische Anzeige mittels: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Kann %s nicht ausführen. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Fehlerausgabe von %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Fehler: message/external-body hat keinen access-type Parameter --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Dieser %s/%s-Anhang " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(Größe %s Byte) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "wurde gelöscht --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- am %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- Name: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Dieser %s/%s-Anhang ist nicht in der Nachricht enthalten, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- und die zugehörige externe Quelle --]\n" +"[-- existiert nicht mehr. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- und die angegebene Zugangsmethode %s wird nicht unterstützt --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Fehler: multipart/signed ohne \"protocol\"-Parameter." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Fehler: multipart/encrypted ohne \"protocol\"-Parameter!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Konnte temporäre Datei nicht öffnen!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s wird nicht unterstützt " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(benutzen Sie '%s', um diesen Teil anzuzeigen)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(Tastaturbindung für 'view-attachments' benötigt!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: Kann Datei nicht anhängen." + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERROR: Bitte melden sie diesen Fehler" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<unbekannt>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Allgemeine Tastenbelegungen:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funktionen ohne Bindung an Taste:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Hilfe für %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Innerhalb eines hook kann kein unhook * aufgerufen werden." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: Unbekannter hook-Typ: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Kann kein %s innerhalb von %s löschen." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Keine Authentifizierung verfügbar" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Authentifiziere (anonymous)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonyme Authentifizierung fehlgeschlagen." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Authentifiziere (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 Authentifizierung fehlgeschlagen." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Authentifiziere (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI Authentifizierung fehlgeschlagen." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN ist auf diesem Server abgeschaltet." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Anmeldung..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Anmeldung gescheitert..." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Authentifiziere (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL Authentifizierung fehlgeschlagen." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s ist ein ungültiger IMAP Pfad" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Hole Namensräume..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Hole Liste der Ordner..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Ordner existiert nicht" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Erzeuge Mailbox: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Mailbox muß einen Namen haben." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Mailbox erzeugt." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Mailbox geschlossen" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Kritischer Fehler. Nachrichtenzähler weicht ab!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Beende Verbindung zu %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Dieser IMAP-Server ist veraltet und wird nicht von Mutt unterstützt." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Unerwartete Antwort vom Server empfangen: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Sichere Verbindung mittels TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Konnte keine TLS-Verbindung realisieren" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Wähle %s aus..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Fehler beim Öffnen der Mailbox" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Kann auf diesem IMAP-Server zu Mailboxen nichts hinzufügen." + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "%s erstellen?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Beende Verbindung zum IMAP-Server..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Markiere %d Nachrichten zum Löschen..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Löschen fehlgeschlagen" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Speichere Nachrichten-Status-Indikatoren... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Lösche Nachrichten auf dem Server..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE fehlgeschlagen" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE fehlgeschlagen" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Unzulässiger Mailbox Name" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Abonniere %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Beende Abonnement von %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "" +"Kann von dieser Version des IMAP-Servers keine Nachrichtenköpfe erhalten." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Konnte Temporärdatei %s nicht erzeugen" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Hole Nachrichten-Köpfe... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Hole Nachricht..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" +"Der Nachrichtenindex ist fehlerhaft. Versuche die Mailbox neu zu öffnen." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Lade Nachrichten auf den Server..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopiere %d Nachrichten nach %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopiere Nachricht %d nach %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Weiter?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: Keine Adresse" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Warnung: Ungültige IDN '%s' in Alias '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "my_hdr: Ungültiges Kopf-Feld" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: Unbekannte Sortiermethode" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): Fehler in regulärem Ausdruck: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: Unbekannte Variable." + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "Präfix ist bei \"reset\" nicht zulässig." + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "Wertzuweisung ist bei \"reset\" nicht zulässig." + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s ist gesetzt." + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s ist nicht gesetzt." + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: Ungültiger Mailbox-Typ" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: Ungültiger Wert" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: Unbekannter Typ." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: Unbekannter Typ" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Kann Verzeichniseintrag für Datei %s nicht lesen: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ist keine normale Datei." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Fehler in %s, Zeile %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: Fehler in %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: Lesevorgang abgebrochen, zu viele Fehler in %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: Fehler bei %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: Zu viele Argumente" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: Unbekanntes Kommando" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Fehler in Kommandozeile: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "Kann Home-Verzeichnis nicht bestimmen." + +#: init.c:1928 +msgid "unable to determine username" +msgstr "Kann Nutzernamen nicht bestimmen." + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Makro-Schleife!" + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Taste ist nicht belegt." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Taste ist nicht belegt. Drücken Sie '%s' für Hilfe." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: Zu viele Argumente" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "Menü \"%s\" existiert nicht" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "Leere Tastenfolge" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: Zu viele Argumente" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: Funktion unbekannt" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: Leere Tastenfolge" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: Zu viele Parameter" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: Keine Parameter" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: Funktion unbekannt" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Schlüssel eingeben (^G zum Abbrechen): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Char = %s, Oktal = %o, Dezimal = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "Leere Funktion" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "Ende der beedingten Ausführung (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "Erzwinge Ansicht des Anhangs mittels mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "Zeige Anhang als Text an" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Schalte Anzeige von Teilen ein/aus" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "Gehe zum Ende der Seite" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "Versende Nachricht erneut an anderen Empfänger" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "Wähle eine neue Datei in diesem Verzeichnis aus" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "Zeige Datei an" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "Zeige den Namen der derzeit ausgewählten Datei" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "Abonniere aktuelle Mailbox (nur für IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "Kündige Abonnement der aktuellen Mailbox (nur für IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "Umschalter: Ansicht aller/der abonnierten Mailboxen (nur für IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "Liste Mailboxen mit neuen Nachrichten" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "Wechsle Verzeichnisse" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "Überprüfe Mailboxen auf neue Nachrichten" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "Hänge Datei(en) an diese Nachricht an" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "Hänge Nachricht(en) an diese Nachricht an" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "Editiere die BCC-Liste" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "Editiere die CC-Liste" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "Editiere Beschreibung des Anhangs" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "Editiere Kodierung des Anhangs" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "Wähle Datei, in die die Nachricht kopiert werden soll" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "Editiere die anzuhängende Datei" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "Editiere das From-Feld" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "Editiere Nachricht (einschließlich Kopf)" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "Editiere Nachricht" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "Editiere Anhang mittels mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "Editiere Reply-To-Feld" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "Editiere Betreff dieser Nachricht (Subject)" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "Editiere Empfängerliste (To)" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "Erzeuge eine neue Mailbox (nur für IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "Editiere Typ des Anhangs" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "Erzeuge temporäre Kopie dieses Anhangs" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "Rechtschreibprüfung via ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "Erzeuge neues Attachment via mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "Schalte Kodierung dieses Anhangs um" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "Stelle Nachricht zum späteren Versand zurück" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "Benenne angehängte Datei um" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "Verschicke Nachricht" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "Schalte Verwendbarkeit um: Inline/Anhang" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "Wähle, ob Datei nach Versand gelöscht wird" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "Aktualisiere Kodierungsinformation eines Anhangs" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "Schreibe Nachricht in Mailbox" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "Kopiere Nachricht in Datei/Mailbox" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "Erzeuge Adreßbucheintrag für Absender" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "Bewege Eintrag zum unteren Ende des Bildschirms" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "Bewege Eintrag zur Bildschirmmitte" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "Bewege Eintrag zum Bildschirmanfang" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "Erzeuge decodierte Kopie (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "Erzeuge decodierte Kopie (text/plain) und lösche" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "Lösche aktuellen Eintrag" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "Lösche die aktuelle Mailbox (nur für IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "Lösche alle Nachrichten im Diskussionsfadenteil" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "Lösche alle Nachrichten im Diskussionsfaden" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "Zeige komplette Absenderadresse" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "Zeige Nachricht an und schalte zwischen allen/wichtigen Headern um" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "Zeige Nachricht an" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "Editiere \"rohe\" Nachricht" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "Lösche Zeichen vor dem Cursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "Bewege Cursor ein Zeichen nach links" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "Springe zum Anfang des Wortes" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "Springe zum Zeilenanfang" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "Rotiere unter den Eingangs-Mailboxen" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "Vervollständige Dateinamen oder Kurznamen" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "Vervollständige Adresse mittels Abfrage (query)" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "Lösche das Zeichen unter dem Cursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "Springe zum Zeilenende" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "Bewege den Cursor ein Zeichen nach rechts" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "Springe zum Ende des Wortes" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "Gehe in der Liste früherer Eingaben nach unten" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "Gehe in der Liste früherer Eingaben nach oben" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "Lösche bis Ende der Zeile" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "Lösche vom Cursor bis zum Ende des Wortes" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "Lösche Zeile" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "Lösche Wort vor Cursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "Übernehme nächste Taste unverändert" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "Ersetze Zeichen unter dem Cursor mit vorhergehendem" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "kapitalisiere das Wort (Anfang groß, Rest klein)" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "konvertiere Wort in Kleinbuchstaben" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "konvertiere Wort in Großbuchstaben" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "Gib ein muttrc-Kommando ein" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "Gib Dateimaske ein" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "Menü verlassen" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "Filtere Anhang durch Shell-Kommando" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "Gehe zum ersten Eintrag" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "Schalte 'Wichtig'-Markierung der Nachricht um" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "Leite Nachricht mit Kommentar weiter" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "Wähle den aktuellen Eintrag aus" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "Antworte an alle Empfänger" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "Gehe 1/2 Seite nach unten" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "Gehe 1/2 Seite nach oben" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "Dieser Bildschirm" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "Springe zu einer Index-Nummer" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "Springe zum letzten Eintrag" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "Antworte an Mailing-Listen" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "Führe Makro aus" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "Erzeuge neue Nachricht" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "Öffne eine andere Mailbox" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "Öffne eine andere Mailbox im Nur-Lesen-Modus" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "Entferne einen Status-Indikator" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "Lösche Nachrichten nach Muster" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "Hole Nachrichten vom IMAP-Server" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "Hole Nachrichten vom POP-Server" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "Springe zu erster Nachricht" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "Springe zu letzter Nachricht" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "Wähle anzuzeigende Nachrichten mit Muster aus" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "Springe zur nächsten neuen Nachricht" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "Springe zur nächsten neuen oder ungelesenen Nachricht" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "Springe zum nächsten Diskussionsfadenteil" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "Springe zum nächsten Diskussionsfaden" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "Springe zur nächsten ungelöschten Nachricht" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "Springe zur nächsten ungelesenen Nachricht" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "Springe zur Bezugsnachricht im Diskussionsfaden" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "Springe zum vorigen Diskussionsfaden" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "Springe zum vorigen Diskussionsfadenteil" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "Springe zur vorigen ungelöschten Nachricht" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "Springe zur vorigen neuen Nachricht" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "Springe zur vorigen neuen oder ungelesenen Nachricht" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "Springe zur vorigen ungelesenen Nachricht" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "Markiere den aktuellen Diskussionsfaden als gelesen" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "Markiere den aktuellen Diskussionsfadenteil als gelesen" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "Setze Statusindikator einer Nachricht" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "Speichere Änderungen in Mailbox" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "Markiere Nachrichten nach Muster" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "entferne Löschmarkierung nach Muster" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "Entferne Markierung nach Muster" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "Gehe zur Seitenmitte" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "Gehe zum nächsten Eintrag" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "Gehe eine Zeile nach unten" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "Gehe zur nächsten Seite" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "Springe zum Ende der Nachricht" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "Schalte Anzeige von zitiertem Text ein/aus" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "Übergehe zitierten Text" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "Springe zum Nachrichtenanfang" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "Bearbeite (pipe) Nachricht/Anhang mit Shell-Kommando" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "Gehe zum vorigen Eintrag" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "Gehe eine Zeile nach oben" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "Gehe zur vorigen Seite" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "Drucke aktuellen Eintrag" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "Externe Adressenabfrage" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "Hänge neue Abfrageergebnisse an" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "Speichere Änderungen in Mailbox und beende das Programm" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "Bearbeite eine zurückgestellte Nachricht" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "Erzeuge Bildschirmanzeige neu" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{intern}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "Beantworte Nachricht" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "Verwende aktuelle Nachricht als Vorlage für neue Nachricht" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "Speichere Nachricht/Anhang in Datei" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "Suche nach regulärem Ausdruck" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "Suche rückwärts nach regulärem Ausdruck" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "Suche nächsten Treffer" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "Suche nächsten Treffer in umgekehrter Richtung" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "Schalte Suchtreffer-Hervorhebung ein/aus" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "Rufe Kommando in Shell auf" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "Sortiere Nachrichten" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "Sortiere Nachrichten in umgekehrter Reihenfolge" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "Markiere aktuellen Eintrag" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "Wende nächste Funktion auf markierte Nachrichten an" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "Wende nächste Funktion NUR auf markierte Nachrichten an" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "Markiere aktuellen Diskussionsfadenteil" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "Markiere aktuellen Diskussionsfaden" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "Setze/entferne den \"neu\"-Indikator einer Nachricht" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "Schalte Sichern von Änderungen ein/aus" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "Schalte zwischen Mailboxen und allen Dateien um" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "Springe zum Anfang der Seite" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "Entferne Löschmarkierung vom aktuellen Eintrag" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "Entferne Löschmarkierung von allen Nachrichten im Diskussionsfaden" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "Entferne Löschmarkierung von allen Nachrichten im Diskussionsfadenteil" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "Zeige Versionsnummer an" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "Zeige Anhang, wenn nötig via Mailcap" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "Zeige MIME-Anhänge" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "Zeige Tastatur-Code einer Taste" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "Zeige derzeit aktives Begrenzungsmuster" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "Kollabiere/expandiere aktuellen Diskussionsfaden" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "Kollabiere/expandiere alle Diskussionsfäden" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "Hänge öffentlichen PGP-Schlüssel an" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "Zeige PGP-Optionen" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "Verschicke öffentlichen PGP-Schlüssel" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "Prüfe öffentlichen PGP-Schlüssel" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "Zeige Nutzer-ID zu Schlüssel an" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "Suche nach klassischem PGP" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Akzeptiere die erstellte Kette" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Hänge einen Remailer an die Kette an" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Füge einen Remailer in die Kette ein" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Lösche einen Remailer aus der Kette" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Wähle das vorhergehende Element der Kette aus" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Wähle das nächste Element der Kette aus" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "Verschicke die Nachricht über eine Mixmaster Remailer Kette" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "Erzeuge dechiffrierte Kopie und lösche" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "Erzeuge dechiffrierte Kopie" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "Entferne Mantra(s) aus Speicher" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "Extrahiere unterstützte öffentliche Schlüssel" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "Zeige S/MIME Optionen" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "Integer Überlauf -- Kann keinen Speicher belegen!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Kein Speicher verfügbar!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Um die Entwickler zu kontaktieren, schicken Sie bitte\n" +"eine Nachricht (in englisch) an <mutt-dev@mutt.org>.\n" +"Um einen Bug zu melden, verwenden Sie bitte das Programm flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins und andere.\n" +"Mutt übernimmt KEINERLEI GEWÄHRLEISTUNG. Starten Sie `mutt -vv', um\n" +"weitere Details darüber zu erfahren. Mutt ist freie Software. \n" +"Sie können es unter bestimmten Bedingungen weitergeben; starten Sie\n" +"`mutt -vv' für weitere Details.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Viele andere, die hier nicht erwähnt sind, haben viel Code, viele\n" +"Bugfixes und viele Ideen beigesteuert.\n" +"\n" +" Dieses Programm ist freie Software. Sie dürfen es weitergeben\n" +" und/oder es unter den Bedingungen der GNU General Public License,\n" +" wie von der Free Software Foundation veröffentlicht, verändern;\n" +" entweder unter Version 2 dieser Lizenz oder, wenn Sie es wünschen,\n" +" jeder späteren Version.\n" +"\n" +" Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß\n" +" es Ihnen von Nutzen sein wird, aber OHNE JEGLICHE GEWÄHRLEISTUNG,\n" +" sogar ohne die Garantie der MARKTREIFE oder EIGNUNG FÜR EINEN\n" +" BESTIMMTEN ZWECK. Lesen Sie die GNU General Public License, um\n" +" mehr Details zu erfahren.\n" +"\n" +" Sie sollten eine Kopie der GNU General Public License zusammen mit\n" +" diesem Programm erhalten haben; falls nicht, schreiben sie an Free\n" +" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA " +"02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"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 [ -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" +"\n" +"options:\n" +" -A <alias>\tExpandiere den angegebenen Alias\n" +" -a <file>\tHängt Datei an die Message an\n" +" -b <address>\tEmpfänger einer unsichtbaren Kopie (Bcc:)\n" +" -c <address>\tEmpfänger einer Kopie (Cc:)\n" +" -e <command>\tMutt-Kommando, nach der Initialisierung ausführen\n" +" -f <file>\tMailbox, die eingelesen werden soll\n" +" -F <file>\tAlternatives muttrc File.\n" +" -H <file>\tFile, aus dem der Header der Mail gelesen werdenn soll\n" +" -i <file>\tFile, das in den Body der Message eingebunden werden soll\n" +" -m <type>\tDefault-Mailbox Typ\n" +" -n\t\tDas Muttrc des Systems ignorieren\n" +" -p\t\tEine zurückgestellte Nachricht zurückholen\n" +" -Q <variable>\tFrage die Variable aus der Konfiguration ab\n" +" -R\t\tMailbox nur zum Lesen öffnen\n" +" -s <subj>\tSubject der Mail (Leerzeichen in Anführungsstrichen)\n" +" -v\t\tVersion und Einstellungen beim Compilieren anzeigen\n" +" -x\t\tSimuliert mailx beim Verschicken von Mails\n" +" -y\t\tStarte Mutt mit einer Mailbox aus der `mailboxes' Liste\n" +" -z\t\tNur starten, wenn neue Nachrichten in der Mailbox liegen\n" +" -Z\t\tÖffne erste Mailbox mit neuen Nachrichten oder beenden\n" +" -h\t\tDiese Hilfe" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Einstellungen bei der Compilierung:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Kann Terminal nicht initialisieren." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Debugging auf Ebene %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG war beim Kompilieren nicht definiert. Ignoriert.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s existiert nicht. Neu anlegen?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Kann %s nicht anlegen: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Keine Empfänger angegeben.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: Kann Datei nicht anhängen.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Keine Mailbox mit neuen Nachrichten." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Keine Eingangs-Mailboxen definiert." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Mailbox ist leer." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Lese %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Mailbox fehlerhaft!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Mailbox wurde zerstört!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fataler Fehler, konnte Mailbox nicht erneut öffnen!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Kann Mailbox nicht für exklusiven Zugriff sperren!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: Mailbox verändert, aber Nachrichten unverändert! (bitte Bug melden)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Schreibe Nachrichten... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Speichere Änderungen..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Konnte nicht schreiben! Speichere Teil-Mailbox in %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Konnte Mailbox nicht erneut öffnen!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Öffne Mailbox erneut..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Springe zu: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Ungültige Indexnummer." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Keine Einträge" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Sie können nicht weiter nach unten gehen." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Sie können nicht weiter nach oben gehen." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Sie sind auf der letzten Seite." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Sie sind auf der ersten Seite." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Der erste Eintrag wird angezeigt." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Der letzte Eintrag wird angezeigt." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Sie sind auf dem letzten Eintrag." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Sie sind auf dem ersten Eintrag" + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Suche nach: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Suche rückwärts nach: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Kein Suchmuster." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Nicht gefunden." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Keine markierten Einträge." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "In diesem Menü kann nicht gesucht werden." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Springen in Dialogen ist nicht möglich." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Markieren wird nicht unterstützt." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Lese %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): kann Zeitstempel der Datei nicht setzen" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Datei ist ein Verzeichnis, darin abspeichern? [(j)a, (n)ein, (a)lle]" + +#: muttlib.c:835 +msgid "yna" +msgstr "jna" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Datei ist ein Verzeichnis, darin abspeichern?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Datei in diesem Verzeichnis: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Datei existiert, (u)eberschreiben, (a)nhängen, a(b)brechen?" + +#: muttlib.c:869 +msgid "oac" +msgstr "uab" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Kann Nachricht nicht in POP Mailbox schreiben." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ist keine Mailbox!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Nachricht an %s anhängen?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Verbindung zu %s beendet" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL ist nicht verfügbar." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "\"Preconnect\" Kommando fehlgeschlagen." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Fehler bei Verbindung mit %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Ungültige IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Schlage %s nach..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Kann Host \"%s\" nicht finden" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Verbinde zu %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Kann keine Verbindung zu %s aufbauen (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Nicht genügend Entropie auf diesem System gefunden" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Sammle Entropie für Zufallsgenerator: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s hat unsichere Zugriffsrechte!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL deaktiviert, weil nicht genügend Entropie zur Verfügung steht" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "Ein-/Ausgabe Fehler" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "Nicht spezifizierter Protokollfehler" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL fehlgeschlagen: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Kann kein Zertifikat vom Server erhalten" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL Verbindung unter Verwendung von %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "unbekannt" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[kann nicht berechnet werden]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ungültiges Datum]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Zertifikat des Servers ist noch nicht gültig" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Zertifikat des Servers ist abgelaufen" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Dieses Zertifikat gehört zu:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Dieses Zertifikat wurde ausgegeben von:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Dieses Zertifikat ist gültig" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " von %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " an %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingerabdruck: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL Zertifikat Überprüfung" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(z)urückweisen, (e)inmal akzeptieren, (i)mmer akzeptieren" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "zei" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(z)urückweisen, (e)inmal akzeptieren" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ze" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Ende " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Warnung: Konnte Zertifikat nicht speichern" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Zertifikat gespeichert" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Lock-Datei für %s entfernen?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Kann %s nicht (dot-)locken.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Konnte fcntl-Lock nicht innerhalb akzeptabler Zeit erhalten." + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Warte auf fcntl-Lock... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Konnte flock-Lock nicht innerhalb akzeptabler Zeit erhalten." + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Warte auf flock-Versuch... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Kann %s nicht locken.\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Lese %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Schreibe %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Kann Mailbox %s nicht synchronisieren!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Verschiebe gelesene Nachrichten nach %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Entferne %d als gelöscht markierte Nachrichten?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Entferne %d als gelöscht markierte Nachrichten?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Verschiebe gelesene Nachrichten nach %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Mailbox unverändert." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d behalten, %d verschoben, %d gelöscht." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d behalten, %d gelöscht." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Drücken Sie '%s', um Schreib-Modus ein-/auszuschalten" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Benutzen Sie 'toggle-write', um Schreib-Modus zu reaktivieren" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Mailbox ist als unschreibbar markiert. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Checkpoint in der Mailbox gesetzt." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Kann Nachricht nicht schreiben" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "Integer Überlauf -- kann keinen Speicher belegen." + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Funktion ist in diesem Menü nicht verfügbar." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "S.zurück" + +#: pager.c:1447 +msgid "NextPg" +msgstr "S.vor" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Anhänge betr." + +#: pager.c:1454 +msgid "Next" +msgstr "Nächste Nachr." + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Das Ende der Nachricht wird angezeigt." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Der Beginn der Nachricht wird angezeigt." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Suche rückwärts: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Suche: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Hilfe wird bereits angezeigt." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Kein weiterer zitierter Text." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Kein weiterer eigener Text nach zitiertem Text." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "Mehrteilige Nachricht hat keinen \"boundary\"-Parameter!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Fehler in Ausdruck: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Ungültiger Tag: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Ungültiger Monat: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Ungültiges relatives Datum: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "Fehler in Ausdruck." + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "Fehler in Muster bei: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: Ungültiges Kommando" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: Wird in diesem Modus nicht unterstützt." + +#: pattern.c:801 +msgid "missing parameter" +msgstr "Fehlender Parameter" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "Unpassende Klammern: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "Leeres Muster" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "Fehler: Unbekannter Muster-Operator %d (Bitte Bug melden)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Compiliere Suchmuster..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Führe Kommando aus..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Keine Nachrichten haben Kriterium erfüllt." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Suche hat Ende erreicht, ohne Treffer zu erzielen." + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Suche hat Anfang erreicht, ohne Treffer zu erzielen." + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Suche unterbrochen." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP-Mantra vergessen." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Fehler: Kann keinen PGP-Prozeß erzeugen! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Ende der PGP-Ausgabe --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- END PGP MESSAGE --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- END PGP PUBLIC KEY BLOCK --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- END PGP SIGNED MESSAGE --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Fehler: Konnte Anfang der PGP-Nachricht nicht finden! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Interner Fehler. Bitte <roessler@does-not-exist.org> informieren." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Fehler: Konnte PGP-Subprozeß nicht erzeugen! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Fehler: Fehlerhafte PGP/MIME-Nachricht! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Fehler: Konnte Temporärdatei nicht anlegen! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Die folgenden Daten sind PGP/MIME-verschlüsselt --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Ende der PGP/MIME-verschlüsselten Daten --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Kann PGP-Subprozeß nicht erzeugen!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Benutze KeyID = \"%s\" für %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "KeyID für %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Kann PGP nicht aufrufen" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Hole PGP Schlüssel..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" +"Alles passenden Schlüssel sind veraltet, zurückgezogen oder deaktiviert." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Auswahl " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Schlüssel prüfen " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP-Schlüssel, die zu <%s> passen." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP-Schlüssel, die zu \"%s\" passen." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Kann /dev/null nicht öffnen" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Kann temporäre Datei nicht erzeugen" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Schlüssel ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "" +"Dieser Schlüssel ist nicht verwendbar: veraltet/deaktiviert/zurückgezogen." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Diese ID ist veraltet/deaktiviert/zurückgezogen." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Die Gültigkeit dieser ID ist undefiniert." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Diese ID ist ungültig." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Diese Gültigkeit dieser ID ist begrenzt." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Wollen Sie den Schlüssel wirklich benutzen?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Bitte Schlüsselidentifikation eingeben: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Rufe PGP auf..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP Schlüssel %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Suche nach Schlüsseln, die auf \"%s\" passen..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Das Kommando TOP wird vom Server nicht unterstützt." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Kann Header nicht in temporäre Datei schreiben!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Kommando UIDL wird vom Server nicht unterstützt." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s ist ein ungültiger POP Pfad" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Hole Liste der Nachrichten..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Kann Nachricht nicht in temporäre Datei schreiben!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Prüfe auf neue Nachrichten..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Es wurde kein POP-Server definiert." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Keine neuen Nachrichten auf dem POP-Server." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Lösche Nachrichten auf dem Server?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Lese neue Nachrichten (%d Bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Fehler beim Versuch, die Mailbox zu schreiben!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d von %d Nachrichten gelesen]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Server hat Verbindung beendet!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Authentifiziere (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Authentifiziere (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP Authentifizierung fehlgeschlagen." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Kommando USER wird vom Server nicht unterstützt." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Kann Nachrichten nicht auf dem Server belassen." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Fehler beim Verbinden mit dem Server: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Beende Verbindung zum POP-Server..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Überprüfe Nachrichten-Indexe..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Verbindung unterbrochen. Verbindung zum POP-Server wiederherstellen?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Zurückgestelle Nachrichten" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Keine zurückgestellten Nachrichten." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Unzulässiger PGP-Header" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Unzulässiger S/MIME Header" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Entschlüsselung gescheitert." + +#: query.c:46 +msgid "New Query" +msgstr "Neue Abfrage" + +#: query.c:47 +msgid "Make Alias" +msgstr "Kurznamen erzeugen" + +#: query.c:48 +msgid "Search" +msgstr "Suchen" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Warte auf Antwort..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Kein Abfragekommando definiert." + +#: query.c:286 +msgid "Query" +msgstr "Abfrage" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Abfrage: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Abfrage: '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Filtern" + +#: recvattach.c:53 +msgid "Print" +msgstr "Drucke" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Speichere..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Anhang gespeichert." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "WARNUNG! Datei %s existiert, überschreiben?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Anhang gefiltert." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtere durch: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Übergebe an (pipe): " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Kann %s Anhänge nicht drucken!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Drucke markierte Anhänge?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Drucke Anhang?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Kann verschlüsselte Nachricht nicht entschlüsseln!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Anhänge" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Es sind keine Teile zur Anzeige vorhanden!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Kann Dateianhang nicht vom POP-Server löschen." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Kann Anhänge aus verschlüsselten Nachrichten nicht löschen." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Kann nur aus mehrteiligen Anhängen löschen." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Sie können nur message/rfc822-Anhänge erneut versenden." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Fehler beim Weiterleiten der Nachricht!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Fehler beim Weiterleiten der Nachrichten!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Kann temporäre Datei %s nicht öffnen." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Als Anhänge weiterleiten?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Nicht alle markierten Anhänge dekodierbar. MIME für den Rest verwenden? " + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Zum Weiterleiten in MIME-Anhang einpacken?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Kann %s nicht anlegen." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Es sind keine Nachrichten markiert." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Keine Mailing-Listen gefunden!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Nicht alle markierten Anhänge dekodierbar. MIME für den Rest verwenden?" + +#: remailer.c:480 +msgid "Append" +msgstr "Anhängen" + +#: remailer.c:481 +msgid "Insert" +msgstr "Einfügen" + +#: remailer.c:482 +msgid "Delete" +msgstr "Löschen" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Kann die \"type2.list\" für Mixmaster nicht holen!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Wähle eine Remailer Kette aus." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" +"Fehler: %s kann nicht als letzter Remailer einer Kette verwendet werden." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Eine Mixmaster-Kette kann maximal %d Elemente enthalten." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Die Remailer-Kette ist bereits leer." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Sie haben bereits das erste Element der Kette ausgewählt." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Sie haben bereits das letzte Element der Kette ausgewählt." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster unterstützt weder Cc: noch Bcc:" + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Setzen sie die Variable \"hostname\" richtig, wenn Sie Mixmaster verwenden!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Fehler %d beim Versand der Nachricht.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Fehler beim Versand der Nachricht." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Ungültiger Eintrag für Typ %s in \"%s\", Zeile %d." + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Kein Mailcap-Pfad definiert." + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Kann keinen Mailcap-Eintrag für %s finden." + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: Zu wenige Parameter." + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: Zu viele Parameter." + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Kein Betreff, abbrechen?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Kein Betreff, breche ab." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Antworte an %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Antworte an %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Keine markierten Nachrichten sichtbar!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Nachricht in Antwort zitieren?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Binde zitierte Nachricht ein..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Konnte nicht alle gewünschten Nachrichten zitieren!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Als Anhang weiterleiten?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Bereite Nachricht zum Weiterleiten vor..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Zurückgestellte Nachricht weiterbearbeiten?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Weitergeleitete Nachricht editieren?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Unveränderte Nachricht verwerfen?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Unveränderte Nachricht verworfen." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Nachricht nicht verschickt." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Nachricht zurückgestellt." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Es wurden keine Empfänger angegeben!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Es wurden keine Empfänger angegeben!" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Kein Betreff, Versand abbrechen?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Kein Betreff." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Verschicke Nachricht..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Konnte Nachricht nicht verschicken." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Nachricht verschickt." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Verschicke im Hintergrund." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Kein boundary-Parameter gefunden! (bitte Bug melden)" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s existiert nicht mehr!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s ist keine normale Datei." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Konnte %s nicht öffnen." + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Fehler %d beim Versand der Nachricht (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Ausgabe des Auslieferungs-Prozesses" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Ungültige IDN %s bei der Vorbereitung von Resent-From." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Abbruch.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Signal %s... Abbruch.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Signal %d... Abbruch.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Vertr.würd" + +#: smime.c:303 +msgid "Verified " +msgstr "Geprüft " + +#: smime.c:306 +msgid "Unverified" +msgstr "Ungeprüft " + +#: smime.c:309 +msgid "Expired " +msgstr "Veraltet " + +#: smime.c:312 +msgid "Revoked " +msgstr "Zurückgez." + +#: smime.c:315 +msgid "Invalid " +msgstr "Ungültig " + +#: smime.c:318 +msgid "Unknown " +msgstr "Unbekannt " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "KeyID eingeben: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME Zertifikate, die zu \"%s\" passen." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s ist ungeprüft. Möchten Sie sie für %s verwenden?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Benutze (nicht vertrauenswürdige!) ID %s für %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Benutze ID = %s für %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "Warnung: Sie vertrauen ID %s noch nicht. (Taste drücken für weiter)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Kein (gültiges) Zertifikat für %s gefunden." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Fehler: Kann keinen OpenSSL Prozeß erzeugen!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "keine Zertifikat-Datei" + +#: smime.c:1200 +msgid "no mbox" +msgstr "keine Mailbox" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Keine Ausgabe von OpenSSL.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Warnung: Zwischenzertifikat nicht gefunden." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Kann OpenSSL-Unterprozeß nicht erzeugen!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Keine Ausgabe von OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Ende der OpenSSL-Ausgabe --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Fehler: Kann keinen OpenSSL-Unterprozeß erzeugen! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Die folgenden Daten sind S/MIME-verschlüsselt --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Die folgenden Daten sind S/MIME signiert --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Ende der S/MIME-verschlüsselten Daten --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Ende der S/MIME signierten Daten --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Sortiere Mailbox..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Sortierfunktion nicht gefunden! (bitte Bug melden)" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(keine Mailbox)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Bezugsnachricht ist in dieser begrenzten Sicht nicht sichtbar." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Bezugsnachricht ist nicht verfügbar." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Rufe OpenSSL auf..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Nachricht an %s... erneut versenden?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Nachrichten an %s... erneut versenden?" + +#~ msgid "ewsabf" +#~ msgstr "emsabk" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Die Gültigkeit dieser ID ist undefiniert." + +#~ msgid "[-- expired. --]\n" +#~ msgstr "[-- existiert nicht mehr. --]\n" + +#~ msgid "Decode-save" +#~ msgstr "Decodiert speichern" + +#~ msgid "Decode-copy" +#~ msgstr "Decodiert kopieren" + +#~ msgid "Decrypt-save" +#~ msgstr "Entschlüsselt speichern" + +#~ msgid "Decrypt-copy" +#~ msgstr "Entschlüsselt kopieren" + +#~ msgid "Copy" +#~ msgstr "Kopieren" + +#~ msgid "" +#~ "[-- This %s/%s attachment is not included, --]\n" +#~ "[-- and the indicated external source has --]\n" +#~ "[-- expired. --]\n" +#~ msgstr "" +#~ "[-- Dieser %s/%s-Anhang ist nicht in der Nachricht --]\n" +#~ "[-- enthalten und die angegebene externe Quelle existiert nicht mehr. " +#~ "--]\n" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Ende der PGP-Ausgabe --]\n" +#~ "\n" + +#~ msgid "Can't stat %s." +#~ msgstr "Kann Verzeichniseintrag für Datei %s nicht lesen." + +#~ msgid "%s: no such command" +#~ msgstr "%s: Kommando unbekannt" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Authentifizierungsmethode unbekannt." diff --git a/po/el.gmo b/po/el.gmo new file mode 100644 index 0000000000000000000000000000000000000000..bcfcefa4850bca14fd6a454884a940c2fd8b5300 GIT binary patch literal 80018 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 literal 0 HcmV?d00001 diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..cae338e --- /dev/null +++ b/po/el.po @@ -0,0 +1,5039 @@ +# Hellenic support for mutt by +# +# Copyright (C) 1999-2002 Fanis Dokianakis <madf@hellug.gr> +# Corrections from +# Nikos Mayrogiannopoulos <nmav@hellug.gr> +# Simos Xenitellis <S.Xenitellis@rhbnc.ac.uk> +# kromJx <kromJx@crosswinds.net> +# ta_panta_rei <ta_panta_rei@flashmail.com> +# +# +msgid "" +msgstr "" +"Project-Id-Version: Mutt-1.5.2i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2002-12-09 00:01GMT+2\n" +"Last-Translator: Dokianakis Fanis <madf@hellug.gr>\n" +"Language-Team: Greek <EL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-7\n" +"Content-Transfer-Encoding: 8bit\n" + +# +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "¼íïìá ÷ñÞóôç óôï %s: " + +# +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Óõíèçìáôéêü ãéá ôï %s@%s: " + +# +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "¸îïäïò" + +# +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "ÄéáãñáöÞ" + +# +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "ÅðáíáöïñÜ" + +# +#: addrbook.c:36 +msgid "Select" +msgstr "ÅðéëÝîôå" + +# +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "ÂïÞèåéá" + +# +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Äåí Ý÷åôå êáíÝíá øåõäþíõìï!" + +# +#: addrbook.c:152 +msgid "Aliases" +msgstr "Øåõäþíõìá" + +# +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Øåõäþíõìï ùò: " + +# +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "¸÷åôå Þäç Ýíá øåõäþíõìï ìå áõôü ôï üíïìá!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: áõôü ôï øåõäüíõìï ßóùò íá ìçí äïõëåýåé. Äéüñèùóç;" + +# +#: alias.c:279 +msgid "Address: " +msgstr "Äéåýèõíóç: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +# +#: alias.c:301 +msgid "Personal name: " +msgstr "Ðñïóùðéêü ¼íïìá: " + +# +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] ÄÝ÷åóôå;" + +# +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "ÁðïèÞêåõóç óôï áñ÷åßï: " + +# +#: alias.c:342 +msgid "Alias added." +msgstr "Ôï øåõäþíõìï ðñïóôÝèçêå." + +# +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Áäõíáìßá ôáéñéÜóìáôïò ôïõ nametemplate, óõíÝ÷åéá;" + +# +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Ç êáôá÷þñçóç óôïé÷åßùí ôïõ mailcap ÷ñåéÜæåôáé ôï %%s" + +# +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "ÓöÜëìá êáôÜ ôçí åêôÝëåóç ôïõ \"%s\"!" + +# +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Áðïôõ÷ßá êáôÜ ôï Üíïéãìá áñ÷åßïõ ãéá ôçí áíÜëõóç ôùí åðéêåöáëßäùí." + +# +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Áðïôõ÷ßá êáôÜ ôï Üíïéãìá áñ÷åßïõ ãéá ôçí áðïãýìíùóç ôùí åðéêåöáëßäùí" + +# +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Êáììßá êáôá÷þñçóç mailcap ãéá ôï %s, äçìéïõñãßá êåíïý áñ÷åßïõ." + +# +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Ç êáôá÷þñçóç mailcap Edit ÷ñåéÜæåôáé ôï %%s" + +# +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Äåí õðÜñ÷åé êáôá÷þñçóç mailcap ãéá åðåîåñãáóßá êåéìÝíïõ ãéá ôï %s" + +# +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Äåí âñÝèçêå üìïéá êáôá÷þñçóç Mailcap. Áðåéêüíéóç ùò êåßìåíï." + +# +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Ï ôýðïò MIME äåí Ý÷åé ïñéóôåß. Áäõíáìßá åìöÜíéóçò ðñïóáñôÞóåùò." + +# +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Áäõíáìßá äçìéïõñãßáò ößëôñïõ" + +# +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Áäõíáìßá äçìéïõñãßáò ößëôñïõ" + +# +#: attach.c:824 +msgid "Write fault!" +msgstr "ÓöÜëìá åããñáöÞò!" + +# +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Äåí ãíùñßæù ðþò íá ôï ôõðþóù áõôü!" + +# +#: browser.c:41 +msgid "Chdir" +msgstr "ÁëëáãÞ êáôáëüãïõ" + +# +#: browser.c:42 +msgid "Mask" +msgstr "ÌÜóêá" + +# +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "Ôï %s äåí åßíáé êáôÜëïãïò." + +# +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Ãñáììáôïêéâþôéá [%d]" + +# +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "ÅããåãñáììÝíá [%s], ÌÜóêá áñ÷åßïõ: %s" + +# +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "ÊáôÜëïãïò [%s], ÌÜóêá áñ÷åßïõ: %s" + +# +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Áäõíáìßá ðñïóÜñôçóçò åíüò êáôÜëïãïõ" + +# +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "ÊáíÝíá áñ÷åßï äåí ôáéñéÜæåé ìå ôç ìÜóêá áñ÷åßïõ" + +# +# recvattach.c:1065 +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Ç äçìéïõñãßá õðïóôçñßæåôáé ìüíï ãéá ôá ãñáììáôïêéâþôéá IMAP" + +# +# recvattach.c:1065 +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Ç äéáãñáöÞ õðïóôçñßæåôáé ìüíï ãéá ôá ãñáììáôïêéâþôéá IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "ÄéáãñáöÞ ôïõ ãñáììáôïêéâùôßïõ \"%s\";" + +# +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Ôï ãñáììáôïêéâþôéï äéáãñÜöçêå." + +# +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Ôï ãñáììáôïêéâþôéï äåí äéáãñÜöçêå." + +# +#: browser.c:923 +msgid "Chdir to: " +msgstr "ÁëëáãÞ êáôáëüãïõ óå:" + +# +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "ÓöÜëìá êáôÜ ôç äéåñåýíçóç ôïõ êáôáëüãïõ." + +# +#: browser.c:975 +msgid "File Mask: " +msgstr "ÌÜóêá áñ÷åßïõ: " + +# +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"ÁíÜóôñïöç ôáîéíüìçóç êáôÜ (d)çìåñïìçíßá, (a)áëöáâçôéêÜ, (z)ìÝãåèïò Þ (n)" +"Üêõñï;" + +# +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ôáîéíüìçóç êáôÜ (d)çìåñïìçíßá, (a)áëöáâçôéêÜ, (z)ìÝãåèïò Þ (n)Üêõñï;" + +# +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +# +#: browser.c:1115 +msgid "New file name: " +msgstr "ÍÝï üíïìá áñ÷åßïõ: " + +# +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Áäõíáìßá áíÜãíùóçò åíüò êáôÜëïãïõ" + +# +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "ÓöÜëìá êáôÜ ôçí åìöÜíéóç áñ÷åßïõ" + +# +#: buffy.c:442 +msgid "New mail in " +msgstr "ÍÝá áëëçëïãñáößá óôï " + +# +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: ôï ôåñìáôéêü äåí õðïóôçñßæåé ÷ñþìá" + +# +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: äåí õðÜñ÷åé ôÝôïéï ÷ñþìá" + +# +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: äåí õðÜñ÷åé ôÝôïéï áíôéêåßìåíï" + +# +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: ç åíôïëÞ éó÷ýåé ìüíï ãéá ôï ÷áñáêôçñéóôéêü áíôéêåßìåíï" + +# +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: ðïëý ëßãá ïñßóìáôá" + +# +#: color.c:563 +msgid "Missing arguments." +msgstr "ÅëëéðÞ ïñßóìáôá." + +# +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "÷ñþìá: ðïëý ëßãá ïñßóìáôá" + +# +#: color.c:636 +msgid "mono: too few arguments" +msgstr "ìïíü÷ñùìá: ëßãá ïñßóìáôá" + +# +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: äåí õðÜñ÷åé ôÝôïéá éäéüôçôá" + +# +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "ðïëý ëßãá ïñßóìáôá" + +# +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + +# +#: color.c:721 +msgid "default colors not supported" +msgstr "äåí õðïóôçñßæïíôáé ôá åî'ïñéóìïý ÷ñþìáôá" + +# +# commands.c:92 +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Åðéâåâáßùóç ôçò PGP øçöéáêÞò õðïãñáöÞò;" + +# +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ!" + +# +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Áäõíáìßá äçìéïõñãßáò ößëôñïõ áðåéêüíéóçò" + +# +#: commands.c:146 +msgid "Could not copy message" +msgstr "Áäõíáìßá áíôéãñáöÞò ôïõ ìçíýìáôïò." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "Ç õðïãñáöÞ S/MIME åðáëçèåýôçêå åðéôõ÷þò." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Ï éäéïêôÞôçò ôïõ ðéóôïðïéçôéêïý S/MIME äåí ôáéñéÜæåé ìå ôïí áðïóôïëÝá." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "Ç õðïãñáöÞ S/MIME ÄÅÍ åðáëçèåýôçêå." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Ç õðïãñáöÞ PGP åðáëçèåýôçêå åðéôõ÷þò." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "Ç õðïãñáöÞ PGP ÄÅÍ åðáëçèåýôçêå." + +# +#: commands.c:223 +msgid "Command: " +msgstr "ÅíôïëÞ: " + +# +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Äéáâßâáóç ìçíýìáôïò óôïí: " + +# +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Äéáâßâáóç óçìåéùìÝíùí ìçíõìÜôùí óôïí: " + +# +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "ÓöÜëìá êáôÜ ôçí áíÜëõóç ôçò äéåýèõíóçò!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +# +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Äéáâßâáóç ìçíýìáôïò óôïí %s" + +# +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Äéáâßâáóç ìçíõìÜôùí óôïí %s" + +# +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Ôï ìÞíõìá äéáâéâÜóôçêå." + +# +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Ôá ìçíýìáôá äéáâéâÜóôçêáí." + +# +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Ôï ìÞíõìá äéáâéâÜóôçêå." + +# +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Ôá ìçíýìáôá äéáâéâÜóôçêáí." + +# +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Áäõíáìßá äçìéïõñãßáò äéåñãáóßáò ößëôñïõ" + +# +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Äéï÷Ýôåõóç óôçí åíôïëÞ: " + +# +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Äåí Ý÷åé ïñéóôåß åíôïëÞ åêôõðþóåùò." + +# +#: commands.c:483 +msgid "Print message?" +msgstr "Åêôýðùóç ìçíýìáôïò;" + +# +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Åêôýðùóç ôùí óçìåéùìÝíùí ìçíõìÜôùí;" + +# +#: commands.c:492 +msgid "Message printed" +msgstr "Ôï ìÞíõìá åêôõðþèçêå" + +# +#: commands.c:492 +msgid "Messages printed" +msgstr "Ôá ìçíýìáôá åêôõðþèçêáí" + +# +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Áäõíáìßá åêôýðùóçò ìçíýìáôïò" + +# +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Áäõíáìßá åêôýðùóçò ìçíõìÜôùí" + +# +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " + +# +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " + +# +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +# +#: commands.c:559 +msgid "Shell command: " +msgstr "ÅíôïëÞ öëïéïý: " + +# +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Áðïêùäéêïðïßçóç-áðïèÞêåõóç%s óôï ãñáììáôïêéâþôéï" + +# +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Áðïêùäéêïðïßçóç-áíôéãñáöÞ%s óôï ãñáììáôïêéâþôéï" + +# +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "ÁðïêñõðôïãñÜöçóç-áðïèÞêåõóç%s óôï ãñáììáôïêéâþôéï" + +# +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "ÁðïêñõðôïãñÜöçóç-áíôéãñáöÞ%s óôï ãñáììáôïêéâþôéï" + +# +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "ÁðïèÞêåõóç%s óôï ãñáììáôïêéâþôéï" + +# +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "ÁíôéãñáöÞ%s óôï ãñáììáôïêéâþôéï" + +# +#: commands.c:706 +msgid " tagged" +msgstr " óçìåéùìÝíï" + +# +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "ÁíôéãñáöÞ óôï %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "ÌåôáôñïðÞ óå %s êáôÜ ôç ìåôáöïñÜ;" + +# +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Ôï Content-Type Üëëáîå óå %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Ôï óåô ÷áñáêôÞñùí Üëëáîå óå %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "ü÷é ìåôáôñïðÞ" + +#: commands.c:914 +msgid "converting" +msgstr "ìåôáôñïðÞ" + +# +#: compose.c:42 +msgid "There are no attachments." +msgstr "Äåí õðÜñ÷ïõí ðñïóáñôÞóåéò." + +# +#: compose.c:84 +msgid "Send" +msgstr "ÁðïóôïëÞ" + +# +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Áêýñùóç" + +# +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "ÐñïóáñôÞóôå áñ÷åßï" + +# +#: compose.c:90 +msgid "Descrip" +msgstr "ÐåñéãñáöÞ" + +# +# compose.c:103 +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "ÕðïãñáöÞ, êñõðôïãñÜöçóç" + +# +# compose.c:105 +#: compose.c:129 +msgid "Encrypt" +msgstr "ÊñõðôïãñÜöçóç" + +# +# compose.c:107 +#: compose.c:131 +msgid "Sign" +msgstr "ÕðïãñáöÞ" + +# +#: compose.c:133 +msgid "Clear" +msgstr "ÁðåíåñãïðïéçìÝíï" + +# +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " õðïãñáöÞ ùò: " + +# +# compose.c:116 +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<åî'ïñéóìïý>" + +# +# compose.c:105 +#: compose.c:149 +msgid "Encrypt with: " +msgstr "ÊñõðôïãñÜöçóç ìå: " + +# +# compose.c:132 +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, Þ (f)orget it? " + +# +# compose.c:133 +#: compose.c:166 +msgid "esabf" +msgstr "esabf" + +# +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "ÕðïãñáöÞ ùò: " + +# +# compose.c:132 +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, Þ (f)orget it? " + +# +# compose.c:133 +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "esabf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, Þ (f)orget it? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345f" + +# +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "Ôï %s [#%d] äåí õðÜñ÷åé ðéá!" + +# +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "Ôï %s [#%d] ìåôáâëÞèçêå. ÅíçìÝñùóç ôçò êùäéêïðïßçóçò;" + +# +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- ÐñïóáñôÞóåéò" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +# +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Äåí ìðïñåßôå íá äéáãñÜøåôå ôç ìïíáäéêÞ ðñïóÜñôçóç." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "ÐñïóÜñôçóç åðéëåãìÝíùí áñ÷åßùí..." + +# +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Áäõíáìßá ðñïóÜñôçóçò ôïõ %s!" + +# +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "¶íïéãìá ãñáììáôïêéâùôßïõ ãéá ôçí ðñïóÜñôçóç ìçíýìáôïò áðü" + +# +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Äåí õðÜñ÷ïõí ìçíýìáôá óå áõôü ôï öÜêåëï." + +# +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Óçìåéþóôå ôá ìçíýìáôá ðïõ èÝëåôå íá ðñïóáñôÞóåôå!" + +# +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Áäõíáìßá ðñïóÜñôçóçò!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Ç åðáíáêùäéêïðïßçóç åðçñåÜæåé ìüíï ôçò ðñïóáñôÞóåéò êåéìÝíïõ." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Ç ôñÝ÷ïõóá ðñïóÜñôçóç äåí èá ìåôáôñáðåß." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Ç ôñÝ÷ïõóá ðñïóÜñôçóç èá ìåôáôñáðåß." + +# +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Ìç Ýãêõñç êùäéêïðïßçóç." + +# +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "ÁðïèÞêåõóç áíôéãñÜöïõ ôïõ ìçíýìáôïò;" + +# +#: compose.c:1110 +msgid "Rename to: " +msgstr "Ìåôïíïìáóßá óå: " + +# +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Áäõíáìßá ëÞøçò ôçò êáôÜóôáóçò ôïõ %s: %s" + +# +#: compose.c:1141 +msgid "New file: " +msgstr "ÍÝï áñ÷åßï: " + +# +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Ôï Content-Type åßíáé ôçò ìïñöÞò base/sub" + +# +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "¶ãíùóôï Content-Type %s" + +# +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Áäõíáìßá äçìéïõñãßáò áñ÷åßïõ %s" + +# +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Áðïôõ÷ßá êáôÜ ôçí äçìéïõñãßá ðñïóÜñôçóçò" + +# +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Íá áíáâëçèåß ç ôá÷õäñüìçóç áõôïý ôïõ ìçíýìáôïò;" + +# +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "ÅããñáöÞ ôïõò ìçíýìáôïò óôï ãñáììáôïêéâþôéï" + +# +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "ÅããñáöÞ ìçíýìáôïò óôï %s ..." + +# +#: compose.c:1305 +msgid "Message written." +msgstr "Ôï ìÞíõìá ãñÜöôçêå." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "Ôï S/MIME åß÷å Þäç åðéëåãåß. Êáèáñéóìüò Þ óõíÝ÷åéá ; " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "Ôï PGP åß÷å Þäç åðéëåãåß. Êáèáñéóìüò Þ óõíÝ÷åéá ; " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "(ôñÝ÷ïõóá þñá: %c)" + +# +# pgp.c:207 +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s áêïëïõèåß Ýîïäïò%s --]\n" + +# +# pgp.c:146 +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Ç öñÜóç(-åéò)-êëåéäß Ý÷åé îå÷áóôåß." + +# +# pgp.c:130 +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "ÅéóÜãåôå ôçí öñÜóç-êëåéäß PGP:" + +# +# pgp.c:130 +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "ÅéóÜãåôå ôçí öñÜóç-êëåéäß SMIME:" + +# +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Äçìéïõñãßá åíüò åóùôåñéêïý ìçíýìáôïò PGP;" + +# +# commands.c:87 commands.c:95 pgp.c:1373 pgpkey.c:220 +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "ÊëÞóç ôïõ PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "Äåí õðïóôçñßæïíôå ìçíýìáôá S/MIME ÷ùñßò ðëçñïöïñßåò óôçí åðéêåöáëßäá." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "ÐñïóðÜèåéá åîáãùãÞò êëåéäéþí PGP...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "ÐñïóðÜèåéá åîáãùãÞò ðéóôïðïéçôéêþí S/MIME...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- ÓöÜëìá: ÁóõíåðÞò ðïëõìåñÞò/õðïãåãñáììÝíç äïìÞ! --]\n" +"\n" + +# +# handler.c:1378 +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- ÓöÜëìá: ¶ãíùóôï ðïëõìåñÝò/õðïãåãñáììÝíï ðñùôüêïëëï %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Ðñïåéäïðïßçóç: áäõíáìßá åðéâåâáßùóçò %s%s õðïãñáöþí --]\n" +"\n" + +# +# pgp.c:676 +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Ôá åðüìåíá äåäïìÝíá åßíáé õðïãåãñáììÝíá --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Ðñïåéäïðïßçóç: Áäõíáìßá åýñåóçò õðïãñáöþí. --]\n" +"\n" + +# +# pgp.c:682 +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- ÔÝëïò õðïãåãñáììÝíùí äåäïìÝíùí --]\n" + +# +#: curs_lib.c:157 +msgid "yes" +msgstr "y(íáé)" + +# +#: curs_lib.c:158 +msgid "no" +msgstr "n(ü÷é)" + +# +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "¸îïäïò áðü ôï Mutt;" + +# +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "Üãíùóôï óöÜëìá" + +# +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "ÐáôÞóôå Ýíá ðëÞêôñï ãéá íá óõíå÷ßóåôå..." + +# +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr "('?' ãéá ëßóôá): " + +# +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Äåí õðÜñ÷ïõí áíïé÷ôÜ ãñáììáôïêéâþôéá." + +# +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Äåí õðÜñ÷ïõí ìçíýìáôá." + +# +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Ôï ãñáììáôïêéâþôéï åßíáé ìüíï ãéá áíÜãíùóç." + +# +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Ç ëåéôïõñãßá áðáãïñåýåôáé óôçí êáôÜóôáóç ðñïóÜñôçóç-ìçíýìáôïò." + +# +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Äåí õðÜñ÷ïõí ïñáôÜ ìçíýìáôá." + +# +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "" +"Áäõíáìßá áëëáãÞò óå êáôÜóôáóç åããñáöÞò óå ãñáììáôïêéâþôéï ìüíï ãéá áíÜãíùóç!" + +# +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Ïé áëëáãÝò óôï öÜêåëï èá ãñáöïýí êáôÜ ôç Ýîïäï áðü ôï öÜêåëï." + +# +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Ïé áëëáãÝò óôï öÜêåëï äåí èá ãñáöïýí." + +# +#: curs_main.c:397 +msgid "Quit" +msgstr "¸îïäïò" + +# +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "ÁðïèÞê" + +# +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Ôá÷õäñ" + +# +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "ÁðÜíô" + +# +#: curs_main.c:403 +msgid "Group" +msgstr "ÏìÜäá" + +# +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"Ôï ãñáììáôïêéâþôéï ôñïðïðïéÞèçêå åîùôåñéêÜ. Ïé óçìáßåò ìðïñåß íá åßíáé ëÜèïò" + +# +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "ÍÝá áëëçëïãñáößá óå áõôü ôï ãñáììáôïêéâþôéï." + +# +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Ôï ãñáììáôïêéâþôéï ôñïðïðïéÞèçêå åîùôåñéêÜ." + +# +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Äåí õðÜñ÷ïõí óçìåéùìÝíá ìçíýìáôá." + +# +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Óýíäåóç óôï %s..." + +# +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "ÌåôÜâáóç óôï ìÞíõìá: " + +# +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Ç ðáñÜìåôñïò ðñÝðåé íá åßíáé áñéèìüò ìçíýìáôïò." + +# +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Áõôü ôï ìÞíõìá äåí åßíáé ïñáôü." + +# +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Ìç Ýãêõñïò áñéèìüò ìçíýìáôïò." + +# +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "ÄéáãñáöÞ ðáñüìïéùí ìçíõìÜôùí: " + +# +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "ÊáíÝíá õðüäåéãìá ïñßùí óå ëåéôïõñãßá." + +# +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "¼ñéï: %s" + +# +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Ðåñéïñéóìüò óôá ðáñüìïéá ìçíýìáôá: " + +# +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "¸îïäïò áðü ôï Mutt;" + +# +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Óçìåéþóôå ìçíýìáôá ðïõ ôáéñéÜæïõí óå: " + +# +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "ÅðáíáöïñÜ ôá ìçíýìáôá ðïõ ôáéñéÜæïõí óå: " + +# +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Áöáßñåóç ôçò óçìåßùóçò óôá ìçíýìáôá ðïõ ôáéñéÜæïõí óå: " + +# +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Áíïßîôå ôï ãñáììáôïêéâþôéï óå êáôÜóôáóç ìüíï ãéá åããñáöÞ" + +# +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Áíïßîôå ôï ãñáììáôïêéâþôéï" + +# +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "Ôï %s äåí åßíáé ãñáììáôïêéâþôéï." + +# +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "¸îïäïò áðü ôï Mutt ÷ùñßò áðïèÞêåõóç;" + +# +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Åßóôå óôï ôåëåõôáßï ìÞíõìá." + +# +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Äåí õðÜñ÷ïõí áðïêáôáóôçìÝíá ìçíýìáôá." + +# +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Åßóôå óôï ðñþôï ìÞíõìá." + +# +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "ÁíáæÞôçóç óõíå÷ßóôçêå áðü ôçí êïñõöÞ." + +# +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "ÁíáæÞôçóç óõíå÷ßóôçêå óôç âÜóç." + +# +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Äåí õðÜñ÷ïõí íÝá ìçíýìáôá" + +# +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Äåí õðÜñ÷ïõí ìç áíáãíùóìÝíá ìçíýìáôá" + +# +#: curs_main.c:1384 +msgid " in this limited view" +msgstr "óå áõôÞ ôçí ðåñéïñéóìÝíç üøç" + +# +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Áäõíáìßá áëëáãÞò ôçò óçìáßáò 'important' óôï äéáêïìéóôÞ POP." + +# +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Äåí õðÜñ÷ïõí Üëëåò óõæçôÞóåéò." + +# +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Åßóôå óôçí ðñþôç óõæÞôçóç." + +# +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Ç ÷ñÞóç óõæçôÞóåùí äåí Ý÷åé åíåñãïðïéçèåß." + +# +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Ç óõæÞôçóç ðåñéÝ÷åé ìç áíáãíùóìÝíá ìçíýìáôá." + +# +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Áäõíáìßá åðåîåñãáóßáò ìçíýìáôïò óôï äéáêïìéóôÞ POP." + +# +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\t åéóÜãåôå ìéá ãñáììÞ îåêéíþíôáò ìå Ýíá ~\n" +"~b ÷ñÞóôåò\tðñïóèÝóôå ÷ñÞóôåò óôï ðåäßï Bcc: \n" +"~c ÷ñÞóôåò\tðñïóèÝóôå ÷ñÞóôåò óôï ðåäßï Cc: \n" +"~f ìçíýìáôá\tóõìðåñéëÜâåôå ôá ìçíýìáôá\n" +"~F ìçíýìáôá\tôï ßäéï üðùò ôï ~f, áëëÜ êáé ìå ôéò åðéêåöáëßäåò\n" +"~h\t\tåðåîåñãáóôåßôå ôçí åðéêåöáëßäá\n" +"~m ìçíýìáôá\tóõìðåñéëÜâåôå êáé ðáñáèÝóôå ôá ìçíýìáôá\n" +"~M ìçíýìáôá\tôï ßäéï ìå ôï ~m, áëëÜ êáé ìå ôéò åðéêåöáëßäåò\n" +"~p\t\tåêôõðþóôå ôï ìÞíõìá\n" +"~q\t\tåããñáöÞ ôïõ áñ÷åßï êáé Ýîïäïò áðü ôïí êåéìåíïãñÜöï\n" +"~r áñ÷åßï\t\täéáâÜóôå Ýíá áñ÷åßï óôïí êåéìåíïãñÜöï\n" +"~t ÷ñÞóôåò\tðñïóèÝóôå ÷ñÞóôåò óôï ðåäßï To: \n" +"~u\t\táíáêáëÝóôå ôçí ðñïçãïýìåíç ãñáììÞ\n" +"~v\t\tåðåîåñãáóôåßôå ôï ìÞíõìá ìå ôï $visual editor\n" +"~w áñ÷åßï\t\tãñÜøôå ôï ìÞíõìá óôï áñ÷åßï\n" +"~x\t\táêõñþóôå ôéò áëëáãÝò êáé âãåßôå áðü ôïí êåéìåíïãñÜöï\n" +"~?\t\táõôü ôï ìÞíõìá\n" +".\t\tìüíç ôçò óå ìéá ãñáììÞ ôåñìáôßæåé ôçí åßóïäï\n" + +# +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: ìç Ýãêõñïò áñéèìüò ìçíýìáôïò.\n" + +# +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Ôåëåéþóôå ôï ìÞíõìá ìå . ìüíç ôçò óå ìéá ãñáììÞ)\n" + +# +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "ÊáíÝíá ãñáììáôïêéâþôéï.\n" + +# +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Ôï ìÞíõìá ðåñéÝ÷åé:\n" + +# +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(óõíå÷ßóôå)\n" + +# +#: edit.c:403 +msgid "missing filename.\n" +msgstr "ëåßðåé ôï üíïìá ôïõ áñ÷åßïõ.\n" + +# +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Äåí õðÜñ÷ïõí ãñáììÝò óôï ìÞíõìá.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +# +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: Üãíùóôç åíôïëÞ êåéìåíïãñÜöïõ (~? ãéá âïÞèåéá)\n" + +# +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý öáêÝëïõ: %s" + +# +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "áäõíáìßá åããñáöÞò ðñïóùñéíïý öáêÝëïõ áëëçëïãñáößáò: %s" + +# +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "áäõíáìßá ðåñéêïðÞ ðñïóùñéíïý öáêÝëïõ áëëçëïãñáößáò: %s" + +# +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Ôï áñ÷åßï ìçíõìÜôùí åßíáé Üäåéï!" + +# +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Ôï ìÞíõìá äåí ôñïðïðïéÞèçêå!" + +# +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Áäõíáìßá ðñüóâáóçò óôï áñ÷åßï ìçíõìÜôùí: %s" + +# +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Áäõíáìßá ðñüóèåóçò óôï öÜêåëï: %s" + +# +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "ÓöÜëìá. ÄéáôÞñçóç ðñïóùñéíïý áñ÷åßïõ: %s" + +# +#: flags.c:332 +msgid "Set flag" +msgstr "Ïñßóôå óçìáßá" + +# +#: flags.c:332 +msgid "Clear flag" +msgstr "Êáèáñßóôå óçìáßá" + +# +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- ÓöÜëìá: Áäõíáìßá áðåéêüíéóçò óå üëá ôá ìÝñç ôïõ Multipart/Alternative! " +"--]\n" + +# +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- ÐñïóÜñôçóç #%d" + +# +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Ôýðïò: %s/%s, Êùäéêïðïßçóç: %s, ÌÝãåèïò: %s --]\n" + +# +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Autoview ÷ñçóéìïðïéþíôáò ôï %s --]\n" + +# +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "ÊëÞóç ôçò åíôïëÞò autoview: %s" + +# +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Áäõíáìßá åêôÝëåóçò óôéò %s --]\n" + +# +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Autoview êáíïíéêÞ Ýîïäïò ôïõ %s --]\n" + +# +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- ÓöÜëìá: ôï ìÞíõìá/åîùôåñéêü-óþìá äåí Ý÷åé ðáñÜìåôñï access-type --]\n" + +# +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- ÁõôÞ ç %s/%s ðñïóÜñôçóç " + +# +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(ìÝãåèïò %s bytes) " + +# +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "Ý÷åé äéáãñáöåß --]\n" + +# +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- óôéò %s --]\n" + +# +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- üíïìá: %s --]\n" + +# +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- ÁõôÞ ç %s/%s ðñïóÜñôçóç äåí ðåñéëáìâÜíåôå, --]\n" + +# +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- êáé ç åíäåäåéãìÝíç åîùôåñéêÞ ðçãÞ Ý÷åé --]\n" +"[-- ëÞîåé. --]\n" + +# +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- êáé ôï åíäåäåéãìÝíï access-type %s äåí õðïóôçñßæåôáé --]\n" + +# +# handler.c:1378 +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "ÓöÜëìá: ôï ðïëõìåñÝò/õðïãåãñáììÝíï äåí Ý÷åé ðñùôüêïëëï" + +# +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "ÓöÜëìá: ôï ðïëõìåñÝò/êñõðôïãñáöçìÝíï äåí Ý÷åé ðáñÜìåôñï ðñùôïêüëëïõ!" + +# +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Áäõíáìßá áíïßãìáôïò ðñïóùñéíïý áñ÷åßïõ!" + +# +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- Ôï %s/%s äåí õðïóôçñßæåôáé " + +# +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(÷ñçóéìïðïéÞóôå ôï '%s' ãéá íá äåßôå áõôü ôï ìÝñïò)" + +# +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(áðáéôåßôáé ôï 'view-attachments' íá åßíáé óõíäåäåìÝíï ìå ðëÞêôñï!" + +# +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: áäõíáìßá óôçí ðñïóÜñôçóç ôïõ áñ÷åßïõ" + +# +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ÓÖÁËÌÁ: ðáñáêáëþ áíáöÝñáôå áõôü ôï óöÜëìá ðñïãñÜììáôïò" + +# +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<ÁÃÍÙÓÔÏ>" + +# +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"ÃåíéêÝò óõíäÝóåéò:\n" +"\n" + +# +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Ìç óõíäåäåìÝíåò ëåéôïõñãßåò:\n" +"\n" + +# +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "ÂïÞèåéá ãéá ôï %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Áäõíáìßá unhook * ìÝóá áðü Ýíá hook." + +# +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: Üãíùóôïò ôýðïò hook: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Áäõíáìßá äéáãñáöÞò åíüò %s ìÝóá áðü Ýíá %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Äåí õðÜñ÷åé äéáèÝóéìç áõèåíôéêïðïßçóç." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Áõèåíôéêïðïßçóç (áíþíõìç)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Ç áíþíõìç áõèåíôéêïðïßçóç áðÝôõ÷å." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Áõèåíôéêïðïßçóç (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Áõèåíôéêïðïßçóç CRAM-MD5 áðÝôõ÷å." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Áõèåíôéêïðïßçóç (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Áõèåíôéêïðïßçóç GSSAPI áðÝôõ÷å." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "Ôï LOGIN áðåíåñãïðïéÞèçêå óå áõôü ôïí äéáêïìéóôÞ." + +# +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Åßóïäïò óôï óýóôçìá..." + +# +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "ÁðÝôõ÷å ç åßóïäïò óôï óýóôçìá." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Áõèåíôéêïðïßçóç (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Áõèåíôéêïðïßçóç SASL áðÝôõ÷å." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s åßíáé ìç Ýãêõñç äéáäñïìÞ IMAP" + +# +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "ËÞøç namespaces..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "ËÞøç ëßóôáò öáêÝëùí..." + +# +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Äåí õðÜñ÷åé ôÝôïéïò öÜêåëïò" + +# +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Äçìéïõñãßá ãñáììáôïêéâùôßïõ: " + +# +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Ôï ãñáììáôïêéâþôéï ðñÝðåé íá Ý÷åé üíïìá." + +# +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Ôï ãñáììáôïêéâþôéï äçìéïõñãÞèçêå." + +# +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Ôï ãñáììáôïêéâþôéï Ýêëåéóå" + +# +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Ìïéñáßï óöÜëìá. Ï áñéèìüò ôùí ìçíõìÜôùí äåí åßíáé óå óõìöùíßá!" + +# +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Êëåßóéìï óýíäåóçò óôï óôï %s..." + +# +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "" +"Áõôüò ï åîõðçñåôçôÞò IMAP åßíáé áñ÷áßïò. Ôï Mutt äåí åßíáé óõìâáôü ìå áõôüí." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "ÁóöáëÞò óýíäåóç ìå TLS;" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Áäõíáìßá äéáðñáãìÜôåõóçò óýíäåóçò TLS" + +# +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "ÅðéëïãÞ %s..." + +# +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "ÓöÜëìá êáôÜ ôï Üíïéãìá ôïõ ãñáììáôïêéâùôßïõ" + +# +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Áäõíáìßá óôçí ðñïóèÞêç óôá ãñáìì/ôéá IMAP óå áõôüí ôïí åîõðçñåôçôÞ" + +# +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Äçìéïõñãßá ôïõ %s;" + +# +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Êëåßóéìï óýíäåóçò óôïí åîõðçñåôçôÞ IMAP..." + +# +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Óçìåßùóç %d äéáãñáöÝíôùí ìçíõìÜôùí..." + +# +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "ÄéáãñáöÞ áðÝôõ÷å" + +# +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "ÁðïèÞêåõóç óçìáéþí êáôÜóôáóçò ìçíýìáôïò... [%d/%d]" + +# +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "ÄéáãñáöÞ ìçíõìÜôùí áðü ôïí åîõðçñåôçôÞ..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE áðÝôõ÷å" + +# +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE áðÝôõ÷å" + +# +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Êáêü üíïìá ãñáììáôïêéâùôßïõ" + +# +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "ÅããñáöÞ óôï %s..." + +# +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "ÄéáãñáöÞ óôï %s..." + +# +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Áäõíáìßá ëÞøçò åðéêåöáëßäùí áðü áõôÞ ôçí Ýêäïóç ôïõ åîõðçñåôçôÞ IMAP." + +# +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ %s" + +# +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "ËÞøç åðéêåöáëßäùí áðü ôá ìçíýìáôá... [%d/%d]" + +# +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "ËÞøç ìçíýìáôïò..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Ï äåßêôçò ôïõ ìçíýìáôïò åßíáé Üêõñïò. Îáíáíïßîôå ôï ãñáììáôïêéâþôéï." + +# +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "ÁíÝâáóìá ìçíýìáôïò ..." + +# +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "ÁíôéãñáöÞ %d ìçíõìÜôùí óôï %s..." + +# +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "ÁíôéãñáöÞ ìçíýìáôïò %d óôï %s ..." + +# +#: imap/util.c:239 +msgid "Continue?" +msgstr "ÓõíÝ÷åéá;" + +# +#: init.c:611 +msgid "alias: no address" +msgstr "øåõäþíõìï: êáììßá äéåýèõíóç" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +# +#: init.c:714 +msgid "invalid header field" +msgstr "ìç Ýãêõñï ðåäßï åðéêåöáëßäáò" + +# +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: Üãíùóôç ìÝèïäïò ôáîéíüìçóçò" + +# +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): ëÜèïò óôï regexp: %s\n" + +# +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: Üãíùóôç ìåôáâëçôÞ" + +# +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "ôï ðñüèåìá åßíáé Üêõñï ìå ôçí åðáíáöïñÜ" + +# +#: init.c:959 +msgid "value is illegal with reset" +msgstr "ç ôéìÞ åßíáé Üêõñç ìå ôçí åðáíáöïñÜ" + +# +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "Ôï %s Ý÷åé ôåèåß" + +# +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "Ôï %s äåí Ý÷åé ôåèåß" + +# +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: ìç Ýãêõñïò ôýðïò ãñáììáôïêéâùôßïõ" + +# +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: ìç Ýãêõñç ôéìÞ" + +# +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: Üãíùóôïò ôýðïò" + +# +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: Üãíùóôïò ôýðïò" + +# +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Áäõíáìßá ëÞøçò ôçò êáôÜóôáóçò ôïõ %s: %s" + +# +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "Ôï %s äåí åßíáé êáíïíéêü áñ÷åßï." + +# +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "ÓöÜëìá óôï %s, ãñáììÞ %d: %s" + +# +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: ëÜèç óôï %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "ðçãÞ: áðüññéøç áíÜãíùóçò ëüãù ðïëëþí óöáëìÜôùí óôï %s" + +# +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: ëÜèïò óôï %s" + +# +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: ðÜñá ðïëëÜ ïñßóìáôá" + +# +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: Üãíùóôç åíôïëÞ" + +# +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "ËÜèïò óôç ãñáììÞ åíôïëþí: %s\n" + +# +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "áäõíáìßá óôïí åíôïðéóìü ôïõ êáôáëüãïõ ÷ñÞóôç (home directory)" + +# +#: init.c:1928 +msgid "unable to determine username" +msgstr "áäõíáìßá óôïí åíôïðéóìü ôïõ ïíüìáôïò ÷ñÞóôç" + +# +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Åíôïðßóôçêå âñüã÷ïò ìáêñïåíôïëÞò." + +# +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Ôï ðëÞêôñï äåí åßíáé óõíäåäåìÝíï." + +# +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Ôï ðëÞêôñï äåí åßíáé óõíäåäåìÝíï. ÐáôÞóôå '%s' ãéá âïÞèåéá." + +# +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: ðÜñá ðïëëÜ ïñßóìáôá" + +# +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: äåí õðÜñ÷åé ôÝôïéï ìåíïý" + +# +#: keymap.c:713 +msgid "null key sequence" +msgstr "êåíÞ áêïëïõèßá ðëÞêôñùí" + +# +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: ðÜñá ðïëëÜ ïñßóìáôá" + +# +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: äåí Ý÷åé êáèïñéóôåß ôÝôïéá ëåéôïõñãßá" + +# +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: Üäåéá áêïëïõèßá ðëÞêôñùí" + +# +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: ðÜñá ðïëëÝò ðáñÜìåôñïé" + +# +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: êáèüëïõ ïñßóìáôá" + +# +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: äåí õðÜñ÷åé ôÝôïéá ëåéôïõñãßá" + +# +# pgp.c:1200 +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "ÅéóÜãåôå keyID ãéá ôï %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +# +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "êåíÞ ëåéôïõñãßá" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +# +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "áíáãêÜæåé ôçí åìöÜíéóç ôçò ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò ôï mailcap" + +# +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ðáñïõóßáóç ôçò ðñïóÜñôçóçò ùò êåßìåíï" + +# +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "ÁëëáãÞ ôçò åìöÜíéóçò ôùí åðéìÝñïõò ôìçìÜôùí" + +# +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ìåôáêßíçóç óôç âÜóç ôçò óåëßäáò" + +# +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "ÁðïóôïëÞ îáíÜ åíüò ìçíýìáôïò óå Ýíá Üëëï ÷ñÞóôç" + +# +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "åðéëÝîôå Ýíá íÝï áñ÷åßï óå áõôü ôïí êáôÜëïãï" + +# +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "áíÜãíùóç ôï áñ÷åßï" + +# +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "áðåéêüíéóç ôïõ ïíüìáôïò ôïõ ôñÝ÷ïíôïò åðéëåãìÝíïõ áñ÷åßïõ" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "åããñáöÞ óôï ôñÝ÷ïí ãñáììáôïêéâþôéï (IMAP ìüíï)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "äéáãñáöÞ áðü ôï ôñÝ÷ïí ãñáììáôïêéâþôéï (IMAP ìüíï)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "áëëáãÞ üøçò üëá/åããåãñáììÝíá ãñáììáôïêéâþôéá (IMAP ìüíï)" + +# +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "áðåéêüíéóç ãñáììáôïêéâùôßùí ìå íÝá áëëçëïãñáößá" + +# +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "áëëáãÞ êáôáëüãùí" + +# +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "åîÝôáóç ãñáììá/ôßùí ãéá íÝá áëëçëïãñáößá" + +# +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "ðñïóÜñôçóç áñ÷åßïõ/ùí óå áõôü ôï ìÞíõìá" + +# +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "ðñïóÜñôçóç ìçíýìáôïò/ôùí óå áõôü ôï ìÞíõìá" + +# +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "åðåîåñãáóßá ôçò ëßóôáò BCC" + +# +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "åðåîåñãáóßá ôçò ëßóôáò CC" + +# +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "åðåîåñãáóßá ôçò ðåñéãñáöÞò ôçò ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "åðåîåñãáóßá ôçò êùäéêïðïßçóçò-ìåôáöïñÜò ôçò ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "ïñéóìüò áñ÷åßïõ ãéá áðïèÞêåõóç áíôéãñÜöïõ áõôïý ôïõ ìçíýìáôïò " + +# +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "åðåîåñãáóßá ôïõ öáêÝëïõ ðïõ èá ðñïóáñôçèåß" + +# +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "åðåîåñãáóßá ôïõ ðåäßïõ from" + +# +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "åðåîåñãáóßá ôïõ ìçíýìáôïò ìå åðéêåöáëßäåò" + +# +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "åðåîåñãáóßá ôïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "åðåîåñãáóßá ôçò ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò êáôá÷þñçóç mailcap" + +# +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "åðåîåñãáóßá ôïõ ðåäßïõ Reply-To" + +# +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "åðåîåñãáóßá ôïõ èÝìáôïò áõôïý ôïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "åðåîåñãáóßá ôçò ëßóôáò TO" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "äçìéïõñãßá åíüò íÝïõ ãñáììáôïêéâùôßïõ (IMAP ìüíï)" + +# +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "åðåîåñãáóßá ôïõ ôýðïõ ôïõ ðåñéå÷ïìÝíïõ ôçò ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "áðüäïóç åíüò ðñïóùñéíïý áíôéãñÜöïõ ôçò ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "Ýëåã÷ïò ôïõ ìçíýìáôïò ìå ôï ispell" + +# +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "óýíèåóç íÝáò ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò êáôá÷þñçóç mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "áëëáãÞ åðáíáêùäéêïðïßçóçò áõôÞò ôçò ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "áðïèÞêåõóç áõôïý ôïõ ìçíýìáôïò ãéá ìåôÝðåéôá áðïóôïëÞ" + +# +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "ìåôïíïìáóßá/ìåôáêßíçóç åíüò áñ÷åßïõ ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "áðïóôïëÞ ôïõ ìçíýìáôïò" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "åðéëïãÞ ÷áñáêôÞñá áíÜìåóá áðü åóùôåñéêü êåßìåíï/ðñïóÜñôçóç" + +# +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "åðéëïãÞ ôçò äéáãñáöÞò ôïõ áñ÷åßïõ ìåôÜ ôçí áðïóôïëÞ, Þ ü÷é" + +# +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "áíáíÝùóç ôùí ðëçñïöïñéþí êùäéêïðïßçóçò ôçò ðñïóÜñôçóçò" + +# +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "åããñáöÞ ôïõ ìçíýìáôïò óå Ýíá öÜêåëï" + +# +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "áíôéãñáöÞ åíüò ìçíýìáôïò óå Ýíá áñ÷åßï/ãñáììá/ôéï" + +# +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "äçìéïõñãßá åíüò øåõäùíýìïõ áðü Ýíá áðïóôïëÝá ìçíýìáôïò" + +# +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "ìåôáêßíçóç ôçò êáôá÷þñçóçò óôçí âÜóç ôçò ïèüíçò" + +# +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "ìåôáêßíçóç ôçò êáôá÷þñçóçò óôçí ìÝóç ôçò ïèüíçò" + +# +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "ìåôáêßíçóç ôçò êáôá÷þñçóçò óôçí êïñõöÞ ôçò ïèüíçò" + +# +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "äçìéïõñãßá áðïêùäéêïðïéçìÝíïõ (text/plain) áíôéãñÜöïõ" + +# +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "äçìéïõñãßá áðïêùäéêïðïéçìÝíïõ (text/plain) áíôéãñÜöïõ êáé äéáãñáöÞ" + +# +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "äéáãñáöÞ ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "åããñáöÞ óôï ôñÝ÷ïí ãñáììáôïêéâþôéï (IMAP ìüíï)" + +# +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "äéáãñáöÞ üëùí ôùí ìçíõìÜôùí óôç äåõôåñåýïõóá óõæÞôçóç" + +# +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "äéáãñáöÞ üëùí ôùí ìçíõìÜôùí óôç óõæÞôçóç" + +# +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "áðåéêüíéóç ôçò ðëÞñçò äéåýèõíóçò ôïõ áðïóôïëÝá" + +# +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "áðåéêüíéóç ôïõ ìçíýìáôïò êáé åðéëïãÞ êáèáñéóìïý åðéêåöáëßäáò" + +# +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "áðåéêüíéóç ôïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "åðåîåñãáóßá ôïõ <<ùìïý>> ìçíýìáôïò" + +# +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "äéáãñáöÞ ôïõ ÷áñáêôÞñá ìðñïóôÜ áðü ôïí êÝñóïñá" + +# +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "ìåôáêßíçóç ôïõ äñïìÝá Ýíá ÷áñáêôÞñá ðñïò ôá áñéóôåñÜ" + +# +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "ìåôáêßíçóç ôïõ äñïìÝá óôçí áñ÷Þ ôçò ëÝîçò" + +# +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ìåôÜâáóç óôçí áñ÷Þ ôçò ãñáììÞò" + +# +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "ìåôáêßíçóç ìåôáîý ôùí ãñáììáôïêéâùôßùí" + +# +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "ïëüêëçñï üíïìá áñ÷åßïõ Þ øåõäþíõìï" + +# +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "ïëüêëçñç äéåýèõíóç ìå åñþôçóç" + +# +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "äéáãñáöÞ ôïõ ÷áñáêôÞñá êÜôù áðü ôï äñïìÝá" + +# +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ìåôáêßíçóç óôï ôÝëïò ôçò ãñáììÞò" + +# +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "ìåôáêßíçóç ôïõ äñïìÝá Ýíá ÷áñáêôÞñá ðñïò ôá äåîéÜ" + +# +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "ìåôáêßíçóç ôïõ äñïìÝá óôï ôÝëïò ôçò ëÝîçò" + +# +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "ìåôáêßíçóç ðñïò êÜôù óôçí ëßóôá éóôïñßáò" + +# +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ìåôáêßíçóç ðñïò ðÜíù óôçí ëßóôá éóôïñßáò" + +# +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "äéáãñáöÞ ôùí ÷áñáêôÞñùí áðü ôïí êÝñóïñá ùò ôï ôÝëïò ôçò ãñáììÞò" + +# +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "äéáãñáöÞ ôùí ÷áñáêôÞñùí áðü ôïí êÝñóïñá ùò ôï ôÝëïò ôçò ëÝîçò" + +# +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "äéáãñáöÞ üëùí ôùí ÷áñáêôÞñùí óôç ãñáììÞ" + +# +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "äéáãñáöÞ ôçò ëÝîçò ìðñïóôÜ áðü óôïí êÝñóïñá" + +# +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "ðáñÜèåóç ôïõ åðüìåíïõ ðëÞêôñïõ" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "ìåôáôüðéóç ôïõ ÷áñáêôÞñá êÜôù áðü ôïí äñïìÝá ìå ôïí ðñïçãïýìåíï" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "ìåôáôñïðÞ ëÝîçò óå êåöáëáßá" + +# +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "ìåôáôñïðÞ ëÝîçò óå ðåæÜ" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "ìåôáôñïðÞ ëÝîçò óå êåöáëáßá" + +# +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "êáôá÷þñçóç ìéáò åíôïëÞò muttrc" + +# +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "êáôá÷þñçóç ìéáò ìÜóêáò áñ÷åßùí" + +# +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "Ýîïäïò áðü áõôü ôï ìåíïý" + +# +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "öéëôñÜñéóìá ôçò ðñïóÜñôçóçò ìÝóù ìéáò åíôïëÞò öëïéïý" + +# +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ìåôáêßíçóç óôçí ðñþôç êáôá÷þñçóç" + +# +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "áëëáãÞ ôçò óçìáßáò 'óçìáíôéêü' ôïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "ðñïþèçóç åíüò ìçíýìáôïò ìå ó÷üëéá" + +# +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "åðéëïãÞ ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò" + +# +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "áðÜíôçóç óå üëïõò ôïõò ðáñáëÞðôåò" + +# +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "ìåôáêßíçóç 1/2 óåëßäáò ðñïò ôá êÜôù" + +# +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "ìåôáêßíçóç 1/2 óåëßäáò ðñïò ôá ðÜíù" + +# +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "áõôÞ ç ïèüíç" + +# +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ìåôÜâáóç óå Ýíáí áñéèìü äåßêôç " + +# +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ìåôáêßíçóç óôçí ôåëåõôáßá êáôá÷þñçóç" + +# +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "áðÜíôçóç óôçí êáèïñéóìÝíç ëßóôá áëëçëïãñáößáò" + +# +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "åêôÝëåóç ìéáò ìáêñïåíôïëÞò" + +# +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "óýíèåóç åíüò íÝïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "Üíïéãìá åíüò äéáöïñåôéêïý öáêÝëïõ" + +# +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "Üíïéãìá åíüò äéáöïñåôéêïý öáêÝëïõ óå êáôÜóôáóç ìüíï-áíÜãíùóçò" + +# +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "êáèáñéóìüò ôçò óçìáßáò êáôÜóôáóçò áðü ôï ìÞíõìá" + +# +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "äéáãñáöÞ ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí óå Ýíá ìïíôÝëï/ìïñöÞ" + +# +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "åîáíáãêáóìÝíç ðáñáëáâÞ áëëçëïãñáößáò áðü ôï åîõðçñåôçôÞ IMAP" + +# +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "ðáñáëáâÞ áëëçëïãñáößáò áðü ôï åîõðçñåôçôÞ POP" + +# +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ìåôáêßíçóç óôï ðñþôï ìÞíõìá" + +# +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ìåôáêßíçóç óôï ôåëåõôáßï ìÞíõìá" + +# +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "åìöÜíéóç ìüíï ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí óå Ýíá ìïíôÝëï/ìïñöÞ" + +# +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ìåôÜâáóç óôï åðüìåíï íÝï ìÞíõìá" + +# +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "ìåôÜâáóç óôï åðüìåíï ìç áíáãíùóìÝíï ìÞíõìá" + +# +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ìåôÜâáóç óôï åðüìåíï èÝìá ôçò äåõôåñåýïõóáò óõæÞôçóçò" + +# +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ìåôÜâáóç óôçí åðüìåíç óõæÞôçóç" + +# +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ìåôáêßíçóç óôï åðüìåíï áðïêáôáóôçìÝíï ìÞíõìá" + +# +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ìåôÜâáóç óôï åðüìåíï ìç áíáãíùóìÝíï ìÞíõìá" + +# +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "ìåôÜâáóç óôï ôñÝ÷ïí ìÞíõìá ôçò óõæÞôçóçò" + +# +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ìåôÜâáóç óôçí ðñïçãïýìåíç óõæÞôçóç" + +# +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ìåôÜâáóç óôçí ðñïçãïýìåíç äåõôåñåýïõóá óõæÞôçóç" + +# +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ìåôáêßíçóç óôï ðñïçãïýìåíï áðïêáôáóôçìÝíï ìÞíõìá" + +# +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ìåôÜâáóç óôï ðñïçãïýìåíï íÝï ìÞíõìá" + +# +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "ìåôÜâáóç óôï ðñïçãïýìåíï ìç áíáãíùóìÝíï ìÞíõìá" + +# +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ìåôÜâáóç óôï ðñïçãïýìåíï ìç áíáãíùóìÝíï ìÞíõìá" + +# +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò óõæÞôçóçò ùò áíáãíùóìÝíç" + +# +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò õðïóõæÞôçóçò ùò áíáãíùóìÝíç" + +# +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "ïñéóìüò ôçò óçìáßáò êáôÜóôáóçò óå Ýíá ìÞíõìá" + +# +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "áðïèÞêåõóç ôùí áëëáãþí óôï ãñáììáôïêéâþôéï" + +# +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "óçìåßùóç ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí ìå ìéá ìïñöÞ/ìïíôÝëï" + +# +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "" +"áðïêáôÜóôáóç (undelete) ôùí ìçíõìÜôùí ðïõ ôáéñéÜæïõí ìå ìßá ìïñöÞ/ìïíôÝëï" + +# +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "" +"áöáßñåóç ôçò óçìåßùóçò áðü ôá ìçíýìáôá ðïõ ôáéñéÜæïõí ìå ìßá ìïñöÞ/ìïíôÝëï" + +# +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ìåôáêßíçóç óôï ìÝóï ôçò óåëßäáò" + +# +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ìåôáêßíçóç óôçí åðüìåíç êáôá÷þñçóç" + +# +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "ìåôáêßíçóç ìéá ãñáììÞ ðñïò ôá êÜôù" + +# +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ìåôáêßíçóç óôçí åðüìåíç óåëßäá" + +# +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ìåôÜâáóç óôç âÜóç ôïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "åðéëïãÞ ôçò åìöÜíéóçò ôïõ quoted êåéìÝíïõ" + +# +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "ðñïóðÝñáóç ðÝñá áðü ôï quoted êåßìåíï" + +# +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "ìåôÜâáóç óôçí áñ÷Þ ôïõ ìçíýìáôïò" + +# +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "äéï÷Ýôåõóç ôïõ ìçíýìáôïò/ðñïóÜñôçóçò óå ìéá åíôïëÞ öëïéïý" + +# +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ìåôáêßíçóç óôçí ðñïçãïýìåíç êáôá÷þñçóç" + +# +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "ìåôáêßíçóç ìéá ãñáììÞ ðñïò ôá ðÜíù" + +# +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ìåôáêßíçóç óôçí ðñïçãïýìåíç óåëßäá" + +# +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "åêôýðùóç ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò" + +# +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "åñþôçóç åíüò åîùôåñéêïý ðñïãñÜììáôïò ãéá äéåõèýíóåéò" + +# +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "ðñüóèåóç ôùí íÝùí áðïôåëåóìÜôùí ôçò åñþôçóçò óôá ôñÝ÷ïíôá" + +# +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "áðïèÞêåõóç ôùí áëëáãþí óôï ãñáììáôïêéâþôéï êáé åãêáôÜëåéøç" + +# +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "åðáíÜêëçóç åíüò áíáâëçèÝíôïò ìçíýìáôïò" + +# +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "êáèáñéóìüò êáé áíáíÝùóç ôçò ïèüíçò" + +# +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{åóùôåñéêü}" + +# +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "áðÜíôçóç óå Ýíá ìÞíõìá" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "÷ñçóéìïðïßçóç ôïõ ôñÝ÷ïíôïò ìçíýìáôïò ùò ó÷åäßïõ ãéá Ýíá íÝï" + +# +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "áðïèÞêåõóç ìçíýìáôïò/ðñïóÜñôçóçò óå Ýíá áñ÷åßï" + +# +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "áíáæÞôçóç ìéáò êáíïíéêÞò Ýêöñáóçò" + +# +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "áíáæÞôçóç ìéáò êáíïíéêÞò Ýêöñáóçò ðñïò ôá ðßóù" + +# +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "áíáæÞôçóç ãéá åðüìåíï ôáßñéáóìá" + +# +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "áíáæÞôçóç ôïõ åðüìåíïõ ôáéñéÜóìáôïò ðñïò ôçí áíôßèåôç êáôåýèõíóç" + +# +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "åðéëïãÞ ôïõ ÷ñùìáôéóìïý ôùí áðïôåëåóìÜôùí áíáæÞôçóçò" + +# +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "êëÞóç ìéáò åíôïëÞò óå Ýíá äåõôåñåýùí öëïéü" + +# +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ôáîéíüìçóç ôùí ìçíõìÜôùí" + +# +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ôáîéíüìçóç ôùí ìçíõìÜôùí óå áíÜóôñïöç óåéñÜ" + +# +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò" + +# +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "åöáñìïãÞ ôçò åðüìåíçò ëåéôïõñãßáò óôá óçìåéùìÝíá ìçíýìáôá" + +# +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "åöáñìïãÞ ôçò åðüìåíçò ëåéôïõñãßáò óôá óçìåéùìÝíá ìçíýìáôá" + +# +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò äåõôåñåýïõóáò óõæÞôçóçò" + +# +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "óçìåßùóç ôçò ôñÝ÷ïõóáò óõæÞôçóçò" + +# +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "åðéëïãÞ ôçò 'íÝáò' óçìáßáò ìçíýìáôïò" + +# +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "åðéëïãÞ åÜí ôï ãñáììáôïêéâþôéï èá îáíáãñáöåß" + +# +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "åðéëïãÞ ãéá ðåñéÞãçóç óôá ãñáììáôïêéâþôéá Þ óå üëá ôá áñ÷åßá" + +# +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ìåôáêßíçóç óôçí áñ÷Þ ôçò óåëßäáò" + +# +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "áðïêáôÜóôáóç ôçò ôñÝ÷ïõóáò êáôá÷þñçóçò" + +# +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "áðïêáôÜóôáóç üëùí ôùí ìçíõìÜôùí óôç óõæÞôçóç" + +# +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "áðïêáôÜóôáóç üëùí ôùí ìçíõìÜôùí óôç äåõôåñåýïõóá óõæÞôçóç" + +# +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "åìöÜíéóç ôïõ áñéèìïý Ýêäïóçò ôïõ Mutt êáé ôçí çìåñïìçíßá" + +# +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "" +"åìöÜíéóç ðñïóÜñôçóçò ÷ñçóéìïðïéþíôáò åÜí ÷ñåéÜæåôáé ôçí êáôá÷þñçóç mailcap" + +# +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "åìöÜíéóç ôùí ðñïóáñôÞóåùí MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +# +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "åìöÜíéóç ôçò åíåñãÞò ìïñöÞò ôùí ïñßùí" + +# +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "ìÜæåìá/Üðëùìá ôçò ôñÝ÷ïõóáò óõæÞôçóçò" + +# +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "ìÜæåìá/Üðëùìá üëùí ôùí óõæçôÞóåùí" + +# +# keymap_defs.h:158 +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "ðñïóÜñôçóç ôïõ äçìüóéïõ êëåéäéïý PGP" + +# +# keymap_defs.h:159 +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "åìöÜíéóç ôùí åðéëïãþí PGP" + +# +# keymap_defs.h:162 +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "ôá÷õäñüìçóç äçìüóéïõ êëåéäéïý PGP" + +# +# keymap_defs.h:163 +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "åðéâåâáßùóç åíüò äçìüóéïõ êëåéäéïý PGP" + +# +# keymap_defs.h:164 +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "åìöÜíéóç ôïõ éäéïêôÞôç ôïõ êëåéäéïý" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "Ýëåã÷ïò ãéá ôï êëáóóéêü pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Áðïäï÷Þ ôçò êáôáóêåõáóìÝíçò áëõóßäáò" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "ÐñïóÜñôçóç åíüò åðáíáðïóôïëÝá óôçí áëõóßäá" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "ÐñïóèÞêç åíüò åðáíáðïóôïëÝá óôçí áëõóßäá" + +# +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "ÄéáãñáöÞ åíüò åðáíáðïóôïëÝá áðü ôçí áëõóßäá" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "ÅðéëïãÞ ôïõ ðñïçãïýìåíïõ óôïé÷åßïõ ôçò áëõóßäáò" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "ÅðéëïãÞ ôïõ åðüìåíïõ óôïé÷åßïõ ôçò áëõóßäáò" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "áðïóôïëÞ ôïõ ìçíýìáôïò ìÝóù ìéáò áëõóßäáò åðáíáðïóôïëÝùí Mixmaster" + +# +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "äçìéïõñãßá áðïêñõðôïãñáöçìÝíïõ áíôéãñÜöïõ êáé äéáãñáöÞ" + +# +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "äçìéïõñãßá áðïêñõðôïãñáöçìÝíïõ áíôéãñÜöïõ" + +# +# keymap_defs.h:161 +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "åîáöÜíéóç ôçò öñÜóçò(-åùí) êëåéäß áðü ôç ìíÞìç" + +# +# keymap_defs.h:160 +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "åîáãùãÞ ôùí äçìüóéùí êëåéäéþí ðïõ õðïóôçñßæïíôå" + +# +# keymap_defs.h:159 +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "åìöÜíéóç ôùí åðéëïãþí S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +# +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Ç ìíÞìç åîáíôëÞèçêå!" + +# +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Ãéá íá åðéêïéíùíÞóåôå ìå ôïõò developers, óôåßëôå mail óôï <mutt-dev@mutt." +"org>.\n" +"Ãéá íá áíáöÝñåôå Ýíá ðñüâëçìá ÷ñçóéìïðïéÞóåôå ôï åñãáëåßï flea(1).\n" + +# +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins êáé Üëëïé.\n" +"Ôï Mutt Ýñ÷åôáé ÁÐÏÊËÅÉÓÔÉÊÁ ×ÙÑÉÓ ÅÃÃÕÇÓÇ; ãéá ëåðôïìÝñåéåò ðáôÞóôå `mutt -" +"vv'.\n" +"Ôï Mutt åßíáé åëåýèåñï ëïãéóìéêü, êáé åõ÷áñßóôùò ìðïñåßôå íá ôï " +"åðáíáäéáíÝìåôå\n" +"õðü ïñéóìÝíïõò üñïõò; ãñÜøôå `mutt -vv' ãéá ëåðôïìÝñåéåò.\n" + +# +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Ðïëëïß Üëëïé ðïõ äåí áíáöÝñïíôáé åäþ Ý÷ïõí óõíåéóöÝñåé êþäéêá,\n" +"äéïñèþóåéò, êáé ðñïôÜóåéò.\n" +"\n" +"Áõôü ôï ðñüãñáììá åßíáé åëåýèåñï ëïãéóìéêü. Ìðïñåßôå íá ôï áíáäéáíÝìåôå\n" +"êáé/Þ íá ôï áëëÜîåôå óýìöùíá ìå ôïõò êáíüíåò ôçò GNU ÃåíéêÞò Äçìüóéáò " +"¶äåéáò\n" +"üðùò äçìïóéïðïéÞèçêå áðü ôï ºäñõìá Åëåýèåñïõ Ëïãéóìéêïý (Free Software\n" +"Foundation), åßôå ôçí äåýôåñç Ýêäïóç ôçò Üäåéáò, åßôå (êáô'åðéëïãÞ óáò)\n" +"êÜèå ìåôÝðåéôá Ýêäïóç.\n" +"\n" +"Áõôü ôï ðñüãñáììá äéáíÝìåôáé ìå ôçí åëðßäá üôé èá åßíáé ÷ñÞóéìï,\n" +"áëëÜ ×ÙÑÉÓ ÊÁÌÉÁ ÅÃÃÕÇÓÇ. Ïýôå áêüìá ãéá ôçí õðïíïïýìåíç åããýçóç ôçò\n" +"ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ Þ ÊÁÔÁËËÇËÏÔÇÔÁ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ. Äåßôå ôçí\n" +"GNU ÃåíéêÞ Äçìüóéá ¶äåéá ãéá ðåñéóóüôåñåò ëåðôïìÝñåéåò.\n" +"\n" +"Èá Ýðñåðå íá Ý÷åôå ëÜâåé Ýíá áíôßãñáöï ôçò GNU ÃåíéêÞò Äçìüóéáò ¶äåéáò\n" +"ìå áõôü ôï ðñüãñáììá. ÅÜí ü÷é, ãñÜøôå óôï Free Software \n" +"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +"\n" + +# +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"÷ñÞóç: mutt [ -nRyzZ ] [ -e <åíôïëÞ> ] [ -F <áñ÷åßï> ] [ -m <ôýðïò> ] [ -f " +"<áñ÷åßï>]\n" +" mutt [ -nR ] [ -e <åíôïëÞ> ] [ -F <áñ÷åßï> ] -Q <åñþôçóç>[ -Q " +"<åñþôçóç> ] [...]\n" +" mutt [ -nx ] [ -e <åíôïëÞ> ] [ -a <áñ÷åßï> ] [ -F <áñ÷åßï> ] [ -H " +"<áñ÷åßï> ] [ -i <áñ÷åßï> ] [ -s <èÝìá> ] [ -b <äéåõè> ] [ -c <äéåõè> ] " +"<äéåõè> [ ... ]\n" +" mutt [ -n ] [ -e <åíôïëÞ> ] [ -F <áñ÷åßï> ] -p\n" +" mutt -v[v]\n" +"\n" +"åðéëïãÝò:\n" +" -A <alias>\táðåéêüíéóç ôïõ óõãêåêñéìÝíïõ øåõäüíõìïõ\n" +" -a <áñ÷åßï>\tðñïóáñôÞóôå Ýíá áñ÷åßï óå áõôü ôï ìÞíõìá\n" +" -b <äéåõè>\têáèïñßóôå ìéá äéåýèõíóç ôõöëïý-ðéóôïý-áíôéãñÜöïõ (BCC)\n" +" -c <äéåõè>\têáèïñßóôå ìéá äéåýèõíóç ðéóôïý-áíôéãñÜöïõ (CC)\n" +" -e <åíôïëÞ>\têáèïñßóôå ìéá åíôïëÞ ãéá íá åêôåëåóôåß ìåôÜ ôçí åêêßíçóç\n" +" -f <áñ÷åßï>\têáèïñßóôå ðïéï ãñáììáôïêéâþôéï íá áíáãíùóôåß\n" +" -F <áñ÷åßï>\têáèïñßóôå Ýíá åíáëëáêôéêü áñ÷åßï muttrc\n" +" -H <áñ÷åßï>\têáèïñßóôå Ýíá ðñïó÷Ýäéï áðü ôï ïðïßï èá äéáâáóôåß ç " +"åðéêåöáëßäá\n" +" -i <áñ÷åßï>\têáèïñßóôå Ýíá áñ÷åßï ðïõ ôï Mutt èá óõìðåñéëáìâÜíåé êáôÜ " +"ôçí \n" +"áðÜíôçóç\n" +" -m <ôýðïò>\têáèïñßóôå Ýíá ôýðï ðñïêáèïñéóìÝíïõ ãñáììáôïêéâùôßïõ\n" +" -n\t\têÜíåôå ôï Mutt íá ìçí äéáâÜóåé ôï Muttrc ôïõ óõóôÞìáôïò\n" +" -p\t\tåðáíáöÝñåôå Ýíá áíáâëçèÝí ìÞíõìá\n" +" -Q <ìåôáâëçôÞ>\tåñþôçóç(åìöÜíéóç ôéìÞò) ìéáò ìåôáâëçôÞò ôùí ñõèìßóåùí\n" +" -R\t\táíïßîôå ôï ãñáììáôïêéâþôéï óå êáôÜóôáóç ìüíï-áíÜãíùóçò\n" +" -s <èÝìá>\têáèïñßóôå Ýíá èÝìá (óå åéóáãùãéêÜ åÜí Ý÷åé êåíÜ)\n" +" -v\t\täåßîôå ôçí Ýêäïóç êáé ôïõò ïñéóìïýò êáôÜ ôç ìåôáãëþôôéóç\n" +" -x\t\tåîïìïéþóôå ôçí êáôÜóôáóç áðïóôïëÞò mailx\n" +" -y\t\täéáëÝîôå Ýíá ãñáììáôïêéâþôéï áðü ôçí ëßóôá `ãñáììáôïêéâùôßùí'\n" +" -z\t\tåãêáôÜëåéøç áìÝóùò åÜí äåí õðÜñ÷ïõí ìçíýìáôá óôï ãñáììáôïêéâþôéï\n" +" -Z\t\táíïßîôå ôïí ðñþôï öÜêåëï ìå íÝï ìÞíõìá, âãåßôå åÜí äåí õðÜñ÷ïõí\n" +" -h\t\táõôü ôï ìÞíõìá âïÞèåéáò" + +# +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"ÐáñÜìåôñïé ìåôáãëþôôéóçò:" + +# +#: main.c:454 +msgid "Error initializing terminal." +msgstr "ËÜèïò êáôÜ ôçí áñ÷éêïðïßçóç ôïõ ôåñìáôéêïý." + +# +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "ÁðïóöáëìÜôùóç óôï åðßðåäï %d.\n" + +# +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "Ôï DEBUG äåí ïñßóôçêå êáôÜ ôçí äéÜñêåéá ôïõ compile. ÁãíïÞèçêå.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "Ôï %s äåí õðÜñ÷åé. Äçìéïõñãßá;" + +# +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Áäõíáìßá äçìéïõñãßáò ôïõ %s: %s." + +# +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Äåí Ý÷ïõí ïñéóôåß ðáñáëÞðôåò.\n" + +# +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: áäõíáìßá ðñïóÜñôçóçò ôïõ áñ÷åßïõ.\n" + +# +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Äåí õðÜñ÷åé íÝá áëëçëïãñáößá óå êáíÝíá ãñáììáôïêéâþôéï." + +# +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Äåí Ý÷åé ïñéóôåß ãñáììáôïêéâþôéï åéóåñ÷ïìÝíùí." + +# +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Ôï ãñáììáôïêéâþôéï åßíáé Üäåéï." + +# +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "ÁíÜãíùóç %s... %d (%d%%)" + +# +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Ôï ãñáììáôïêéâþôéï Ý÷åé áëëïéùèåß!" + +# +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Ôï ãñáììáôïêéâþôéï åß÷å áëëïéùèåß!" + +# +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Ìïéñáßï ëÜèïò! Áäõíáìßá åðáíáðñüóâáóçò ôïõ ãñáììáôïêéâùôßïõ!" + +# +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Áäõíáìßá êëåéäþìáôïò ôïõ ãñáììáôïêéâùôßïõ!" + +# +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: ôï mbox Ý÷åé ôñïðïðïéçèåß, äåí õðÜñ÷ïõí ôñïðïðïéçìÝíá ìçíýìáôá!\n" +"(áíáöÝñáôå áõôü ôï óöÜëìá)" + +# +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "ÅããñáöÞ ìçíõìÜôùí... %d (%d%%)" + +# +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "ÅöáñìïãÞ ôùí áëëáãþí..." + +# +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Ç åããñáöÞ áðÝôõ÷å! ÌÝñïò ôïõ ãñáììáôïêéâùôßïõ áðïèçêåýôçêå óôï %s" + +# +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Áäõíáìßá åðáíáðñüóâáóçò ôïõ ãñáììáôïêéâùôßïõ!" + +# +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Åðáíáðñüóâáóç óôï ãñáììáôïêéâþôéï..." + +# +#: menu.c:413 +msgid "Jump to: " +msgstr "Ìåôáêßíçóç óôï: " + +# +#: menu.c:422 +msgid "Invalid index number." +msgstr "Ìç Ýãêõñïò áñéèìüò äåßêôç" + +# +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Êáììßá êáôá÷þñçóç" + +# +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Äåí ìðïñåßôå íá ìåôáêéíçèåßôå ðáñáêÜôù." + +# +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Äåí ìðïñåßôå íá ìåôáêéíçèåßôå ðáñáðÜíù." + +# +#: menu.c:477 +msgid "You are on the last page." +msgstr "Åßóôå óôçí ôåëåõôáßá óåëßäá." + +# +#: menu.c:499 +msgid "You are on the first page." +msgstr "Åßóôå óôçí ðñþôç óåëßäá." + +# +#: menu.c:578 +msgid "First entry is shown." +msgstr "Ç ðñþôç êáôá÷þñçóç åìöáíßæåôáé." + +# +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Ç ôåëåõôáßá êáôá÷þñçóç åìöáíßæåôáé." + +# +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Åßóôå óôçí ôåëåõôáßá êáôá÷þñçóç." + +# +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Åßóôå óôçí ðñþôç êáôá÷þñçóç." + +# +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "ÁíáæÞôçóç ãéá: " + +# +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "ÁíÜóôñïöç áíáæÞôçóç ãéá: " + +# +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "ÊáíÝíá ó÷Ýäéï áíáæÞôçóçò." + +# +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Äå âñÝèçêå." + +# +#: menu.c:885 +msgid "No tagged entries." +msgstr "Êáììßá óçìåéùìÝíç åßóïäïò." + +# +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Äåí Ý÷åé åöáñìïóôåß áíáæÞôçóç ãéá áõôü ôï ìåíïý." + +# +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Äåí Ý÷åé åöáñìïóôåß ìåôáêßíçóç ãéá ôïõò äéáëüãïõò." + +# +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Óçìåéþóåéò äåí õðïóôçñßæïíôáé." + +# +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "ÁíÜãíùóç %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): áäõíáìßá ïñéóìïý ÷ñüíïõ óôï áñ÷åßï" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Ôï áñ÷åßï åßíáé öÜêåëïò, áðïèÞêåõóç õðü áõôïý;" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Ôï áñ÷åßï åßíáé öÜêåëïò, áðïèÞêåõóç õðü áõôïý;" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Áñ÷åßï õðü öÜêåëï:" + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Ôï áñ÷åßï õðÜñ÷åé, (o)äéáãñáöÞ ôïõ õðÜñ÷ïíôïò, (a)ðñüóèåóç, (c)Üêõñï;" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +# +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Áäõíáìßá åããñáöÞò ôïõ ìçíýìáôïò óôï POP ãñáììáôïêéâþôéï." + +# +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "Ôï %s äåí åßíáé ãñáììáôïêéâþôéï!" + +# +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Ðñüóèåóç ìçíõìÜôùí óôï %s;" + +# +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "¸êëåéóå ç óýíäåóç óôï %s" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "Ôï SSL äåí åßíáé äéáèÝóéìï." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Áðïôõ÷ßá åíôïëÞò ðñïóýíäåóçò" + +# +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "ÓöÜëìá óôç óõíïìéëßá ìå ôï %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +# +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "ÁíáæÞôçóç ôïõ %s..." + +# +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Áäõíáìßá åýñåóçò ôïõ äéáêïìéóôÞ \"%s\"" + +# +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Óýíäåóç óôï %s..." + +# +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Áäõíáìßá óýíäåóçò óôï %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Áðïôõ÷ßá óôçí åýñåóç áñêåôÞò åíôñïðßáò óôï óýóôçìá óáò" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "ÁðïèÞêåõóç åíôñïðßáò: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "Ôï %s Ý÷åé áíáóöáëÞ äéêáéþìáôá!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "Ôï SSL áðåíåñãïðïéÞèçêå ëüãù ëÞøçò åíôñïðßáò" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O óöÜëìá" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ìç êáèïñéóìÝíï óöÜëìá ðñùôïêüëëïõ" + +# +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL áðÝôõ÷å: %s" + +# +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Áäõíáìßá óôç ëÞøç ðéóôïðïéçôéêïý áðü ôï ôáßñé" + +# +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Óýíäåóç SSL ÷ñçóéìïðïéþíôáò ôï %s (%s)" + +# +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "¶ãíùóôï" + +# +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[áäõíáìßá õðïëïãéóìïý]" + +# +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ìç Ýãêõñç çìåñïìçíßá]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Ç ðéóôïðïßçóç ôïõ äéáêïìéóôÞ äåí åßíáé áêüìá Ýãêõñç" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Ôï ðéóôïðïéçôéêü ôïõ äéáêïìéóôÞ Ýëçîå" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Áõôü ôï ðéóôïðïéçôéêü áíÞêåé óôï:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Áõôü ôï ðéóôïðïéçôéêü åêäüèçêå áðü ôï:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Áõôü ôï ðéóôïðïéçôéêü åßíáé Ýãêõñï" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " áðü %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " ðñïò %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Áðïôýðùìá: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "¸ëåã÷ïò Ðéóôïðïéçôéêïý SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)áðüññéøç, (o)áðïäï÷Þ ìéá öïñÜ, (a)áðïäï÷Þ ðÜíôá" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "roa" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)áðüññéøç, (o)áðïäï÷Þ ìéá öïñÜ" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ro" + +# +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "¸îïäïò " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Ðñïåéäïðïßçóç: Áäõíáìßá áðïèÞêåõóçò ðéóôïðïéçôéêïý" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Ôï ðéóôïðïéçôéêü áðïèçêåýôçêå" + +# +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Ï áñéèìüò êëåéäùìÜôùí îåðåñÜóôçêå, îåêëåßäùìá ôïõ %s;" + +# +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Áäõíáìßá dotlock ôïõ %s.\n" + +# +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Ôï üñéï ÷ñüíïõ îåðåñÜóôçêå êáôÜ ôçí ðñïóðÜèåéá êëåéäþìáôïò ìå fcntl!" + +# +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "ÁíáìïíÞ ãéá ôï êëåßäùìá fcntl... %d" + +# +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Ôï üñéï ÷ñüíïõ îåðåñÜóôçêå êáôÜ ôçí ðñïóðÜèåéá êëåéäþìáôïò flock!" + +# +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "ÁíáìïíÞ ãéá ðñïóðÜèåéá flock... %d" + +# +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Áäõíáìßá êëåéäþìáôïò ôïõ %s\n" + +# +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "ÁíÜãíùóç %s..." + +# +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "ÅããñáöÞ %s..." + +# +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Áäõíáìßá óõã÷ñïíéóìïý ôïõ ãñáììáôïêéâùôßïõ %s!" + +# +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Ìåôáêßíçóç áíáãíùóìÝíùí ìçíõìÜôùí óôï %s;" + +# +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Êáèáñéóìüò %d äéåãñáììÝíïõ ìçíýìáôïò;" + +# +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Êáèáñéóìüò %d äéåãñáììÝíùí ìçíõìÜôùí;" + +# +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Ìåôáêßíçóç áíáãíùóìÝíùí ìçíõìÜôùí óôï %s..." + +# +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Äåí Ýãéíå áëëáãÞ óôï ãñáììáôïêéâþôéï " + +# +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d êñáôÞèçêáí, %d ìåôáêéíÞèçêáí, %d äéáãñÜöçêáí." + +# +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d êñáôÞèçêáí, %d äéáãñÜöçêáí." + +# +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "ÐáôÞóôå '%s' ãéá íá åíåñãïðïéÞóåôå ôçí åããñáöÞ!" + +# +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "×ñçóéìïðïéÞóôå ôï 'toggle-write' ãéá íá åíåñãïðïéÞóåôå ôçí åããñáöÞ!" + +# +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Ôï ãñáììáôïêéâþôéï åßíáé óçìåéùìÝíï ìç åããñÜøéìï. %s" + +# +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Ôï ãñáììáôïêéâþôéï óçìåéþèçêå." + +# +#: mx.c:1490 +msgid "Can't write message" +msgstr "Áäõíáìßá åããñáöÞò ôïõ ìçíýìáôïò" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +# +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Äåí åßíáé äéáèÝóéìï óå áõôü ôï ìåíïý." + +# +#: pager.c:1446 +msgid "PrevPg" +msgstr "ÐñïçãÓåë" + +# +#: pager.c:1447 +msgid "NextPg" +msgstr "ÅðüìÓåë" + +# +#: pager.c:1451 +msgid "View Attachm." +msgstr "¼øçÐñïóÜñô" + +# +#: pager.c:1454 +msgid "Next" +msgstr "Åðüìåíï" + +# +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Åìöáíßæåôáé ç âÜóç ôïõ ìçíýìáôïò." + +# +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Åìöáíßæåôáé ç áñ÷Þ ôïõ ìçíýìáôïò." + +# +#: pager.c:1954 +msgid "Reverse search: " +msgstr "ÁíÜóôñïöç áíáæÞôçóç: " + +# +#: pager.c:1955 +msgid "Search: " +msgstr "ÁíáæÞôçóç:" + +# +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Ç âïÞèåéá Þäç åìöáíßæåôáé." + +# +#: pager.c:2104 +msgid "No more quoted text." +msgstr "¼÷é Üëëï êáèïñéóìÝíï êåßìåíï." + +# +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "¼÷é Üëëï ìç êáèïñéóìÝíï êåßìåíï ìåôÜ áðü êáèïñéóìÝíï." + +# +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "ôï ðïëõìåñÝò ìÞíõìá äåí Ý÷åé ïñéïèÝôïõóá ðáñÜìåôñï!" + +# +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "ËÜèïò óôçí Ýêöñáóç: %s" + +# +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Ìç Ýãêõñç ìÝñá ôïõ ìÞíá: %s" + +# +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Ìç Ýãêõñïò ìÞíáò: %s" + +# +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Ìç Ýãêõñïò áíáöïñéêþò ìÞíáò: %s" + +# +#: pattern.c:528 +msgid "error in expression" +msgstr "óöÜëìá óôçí Ýêöñáóç" + +# +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "óöÜëìá óôï ìïíôÝëï óôï: %s" + +# +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: ìç Ýãêõñç åíôïëÞ" + +# +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "Ôï %c: äåí õðïóôçñßæåôáé óå áõôÞ ôçí êáôÜóôáóç" + +# +#: pattern.c:801 +msgid "missing parameter" +msgstr "Ýëëåéøç ðáñáìÝôñïõ" + +# +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "áôáßñéáóôç ðáñÝíèåóç/åéò: %s" + +# +#: pattern.c:849 +msgid "empty pattern" +msgstr "Üäåéï ìïíôÝëï/ìïñöÞ" + +# +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "ëÜèïò: Üãíùóôç äéåñãáóßá %d (áíÝöåñå áõôü ôï óöÜëìá)." + +# +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Óýíôáîç ìïíôÝëïõ áíáæÞôçóçò..." + +# +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "ÅêôÝëåóç åíôïëÞò óôá ðáñüìïéá ìçíýìáôá..." + +# +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "ÊáíÝíá ìÞíõìá äåí ôáéñéÜæåé óôá êñéôÞñéá." + +# +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Ç áíáæÞôçóç Ýöèáóå óôï ôÝëïò ÷ùñßò íá âñåé üìïéï" + +# +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Ç áíáæÞôçóç Ýöèáóå óôçí áñ÷Þ ÷ùñßò íá âñåé üìïéï" + +# +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Ç áíáæÞôçóç äéáêüðçêå." + +# +# pgp.c:146 +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Ç öñÜóç-êëåéäß PGP Ý÷åé îå÷áóôåß." + +# +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ÓöÜëìá: áäõíáìßá óôç äçìéïõñãßá õðïäéåñãáóßáò PGP! --]\n" + +# +# pgp.c:669 pgp.c:894 +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- ÔÝëïò ôçò åîüäïõ PGP --]\n" +"\n" + +# +# pgp.c:353 +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- ÅÍÁÑÎÇ ÌÇÍÕÌÁÔÏÓ PGP --]\n" +"\n" + +# +# pgp.c:355 +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ÅÍÁÑÎÇ ÏÌÁÄÁÓ ÄÇÌÏÓÉÙÍ ÊËÅÉÄÉÙÍ PGP --]\n" + +# +# pgp.c:357 +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- ÅÍÁÑÎÇ ÕÐÏÃÅÃÑÁÌÌÅÍÏÕ PGP ÌÇÍÕÌÁÔÏÓ --]\n" +"\n" + +# +# pgp.c:459 +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- ÔÅËÏÓ ÌÇÍÕÌÁÔÏÓ PGP --]\n" + +# +# pgp.c:461 +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ÔÅËÏÓ ÏÌÁÄÁÓ ÄÇÌÏÓÉÙÍ ÊËÅÉÄÉÙÍ PGP --]\n" + +# +# pgp.c:463 +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- ÔÅËÏÓ ÕÐÏÃÅÃÑÁÌÌÅÍÏÕ PGP ÌÇÍÕÌÁÔÏÓ --]\n" + +# +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ÓöÜëìá: äå ìðüñåóå íá âñåèåß ç áñ÷Þ ôïõ ìçíýìáôïò PGP! --]\n" +"\n" + +# +# pgp.c:801 +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Åóùôåñéêü óöÜëìá. ÐëçñïöïñÞóôå <roessler@guug.de>." + +# +# pgp.c:865 +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- ÓöÜëìá: áäõíáìßá óôç äçìéïõñãßá õðïäéåñãáóßáò PGP! --0]\n" +"\n" + +# +# pgp.c:958 +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ÓöÜëìá: êáêïöôéáãìÝíï ìÞíõìá PGP/MIME! --]\n" +"\n" + +# +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ÓöÜëìá: áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ! --]\n" + +# +# pgp.c:980 +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Ôá åðüìåíá äåäïìÝíá åßíáé êñõðôïãñáöçìÝíá ìÝóù PGP/MIME --]\n" +"\n" + +# +# pgp.c:988 +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- ÔÝëïò äåäïìÝíùí êñõðôïãñáöçìÝíùí ìÝóù PGP/MIME --]\n" + +# +# pgp.c:1070 +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Áäõíáìßá áíïßãìáôïò õðïäéåñãáóßáò PGP!" + +# +# pgp.c:1194 +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Íá ÷ñçóéìïðïéçèåß keyID = \"%s\" ãéá ôï %s;" + +# +# pgp.c:1200 +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "ÅéóÜãåôå keyID ãéá ôï %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Áäõíáìßá êëÞóçò ôïõ PGP" + +# +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "ËÞøç êëåéäéïý PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "¼ëá ôá üìïéá êëåéäéÜ åßíáé óçìåéùìÝíá óáí ëçãìÝíá/Üêõñá." + +# +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "ÄéáëÝîôå " + +# +# pgpkey.c:178 +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "ÅëÝãîôå êëåéäß " + +# +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "¼ìïéá PGP êëåéäéÜ <%s>." + +# +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "¼ìïéá PGP êëåéäéÜ \"%s\"." + +# +# pgpkey.c:210 pgpkey.c:387 +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Áäõíáìßá áíïßãìáôïò /dev/null" + +# +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ" + +# +# pgpkey.c:236 +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "ID êëåéäéïý: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "" +"Áõôü ôï êëåéäß äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ëçãìÝíï/á÷ñçóôåõìÝíï/Üêõñï." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Ôï ID åßíáé ëçãìÝíï/á÷ñçóôåõìÝíï/Üêõñï." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Ôï ID Ý÷åé ìç ïñéóìÝíç åãêõñüôçôá." + +# +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Ôï ID äåí åßíáé Ýãêõñï." + +# +# pgpkey.c:259 +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Ôï ID åßíáé ìüíï ìåñéêþò Ýãêõñï." + +# +# pgpkey.c:262 +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ÈÝëåôå óßãïõñá íá ÷ñçóéìïðïéÞóåôå ôï êëåéäß;" + +# +# pgpkey.c:369 +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Ðáñáêáëþ ãñÜøôå ôï ID ôïõ êëåéäéïý: " + +# +# commands.c:87 commands.c:95 pgp.c:1373 pgpkey.c:220 +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "ÊëÞóç ôïõ pgp..." + +# +# pgpkey.c:416 +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Êëåéäß PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Åýñåóç üìïéùí êëåéäéþí ìå \"%s\"..." + +# +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Ç åíôïëÞ TOP äåí õðïóôçñßæåôå áðü ôï äéáêïìéóôÞ." + +# +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Áäõíáìßá åããñáöÞò åðéêåöáëßäáò óôï ðñïóùñéíü áñ÷åßï!" + +# +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Ç åíôïëÞ UIDL äåí õðïóôçñßæåôå áðü ôï äéáêïìéóôÞ." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s åßíáé ìç Ýãêõñç POP äéáäñïìÞ" + +# +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "ËÞøç ëßóôáò ìçíõìÜôùí..." + +# +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Áäõíáìßá åããñáöÞò ìçíýìáôïò óôï ðñïóùñéíü áñ÷åßï!" + +# +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "¸ëåã÷ïò ãéá íÝá ìçíýìáôá..." + +# +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Ï POP host äåí êáèïñßóôçêå." + +# +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Äåí õðÜñ÷åé áëëçëïãñáößá óôï POP ãñáììáôïêéâþôéï." + +# +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "ÄéáãñáöÞ ìçíõìÜôùí áðü ôïí åîõðçñåôçôÞ;" + +# +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "ÁíÜãíùóç íÝùí ìçíõìÜôùí (%d bytes)..." + +# +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "ÓöÜëìá êáôÜ ôçí åããñáöÞ óôï ãñáììáôïêéâþôéï" + +# +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d áðü %d ìçíýìáôá äéáâÜóôçêáí]" + +# +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Ç óýíäåóç ìå ôïí åîõðçñåôçôÞ Ýêëåéóå!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Áõèåíôéêïðïßçóç (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Áõèåíôéêïðïßçóç (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Áõèåíôéêïðïßçóç APOP áðÝôõ÷å." + +# +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Ç åíôïëÞ USER äåí õðïóôçñßæåôå áðü ôï äéáêïìéóôÞ." + +# +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Áäõíáìßá Üöåóçò ôùí ìçíõìÜôùí óôïí åîõðçñåôçôÞ." + +# +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "ÓöÜëìá êáôá ôç óýíäåóç óôï äéáêïìéóôÞ: %s" + +# +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Êëåßóéìï óýíäåóçò óôïí åîõðçñåôçôÞ IMAP..." + +# +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Åðéâåâáßùóç ôùí åõñåôçñßùí ìçíõìÜôùí..." + +# +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Áðþëåéá óýíäåóçò. Åðáíáóýíäåóç óôï äéáêïìéóôÞ POP;" + +# +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "ÁíáâëçèÝíôá Ìçíýìáôá" + +# +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Äåí õðÜñ÷ïõí áíáâëçèÝíôá ìçíýìáôá." + +# +# postpone.c:338 postpone.c:358 postpone.c:367 +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "ÁêáôÜëëçëç åðéêåöáëßäá PGP" + +# +# postpone.c:338 postpone.c:358 postpone.c:367 +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "ÁêáôÜëëçëç åðéêåöáëßäá S/MIME" + +# +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Ç áðïêñõðôïãñÜöçóç áðÝôõ÷å." + +# +#: query.c:46 +msgid "New Query" +msgstr "ÍÝá Åñþôçóç" + +# +#: query.c:47 +msgid "Make Alias" +msgstr "Äçìéïõñãßá Øåõäþíõìïõ" + +# +#: query.c:48 +msgid "Search" +msgstr "ÁíáæÞôçóç" + +# +#: query.c:95 +msgid "Waiting for response..." +msgstr "ÁíáìïíÞ áðÜíôçóçò..." + +# +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Ç åíôïëÞ åñùôÞóåùò äåí êáèïñßóôçêå." + +# +#: query.c:286 +msgid "Query" +msgstr "Åñþôçóç" + +# +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Åñþôçóç: " + +# +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Åñþôçóç '%s'" + +# +#: recvattach.c:52 +msgid "Pipe" +msgstr "Äéï÷Ýôåõóç" + +# +#: recvattach.c:53 +msgid "Print" +msgstr "Åêôýðùóç" + +# +#: recvattach.c:431 +msgid "Saving..." +msgstr "ÁðïèÞêåõóç..." + +# +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Ç ðñïóÜñôçóç áðïèçêåýèçêå." + +# +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ! Ðñüêåéôáé íá ãñÜøåéò ðÜíù áðü ôï %s, óõíÝ÷åéá;" + +# +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Ç ðñïóÜñôçóç Ý÷åé öéëôñáñéóôåß." + +# +#: recvattach.c:620 +msgid "Filter through: " +msgstr "ÖéëôñÜñéóìá ìÝóù: " + +# +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Äéï÷Ýôåõóç óôï: " + +# +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Äåí îÝñù ðùò íá ôõðþóù ôéò %s ðñïóáñôÞóåéò!" + +# +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Åêôýðùóç óçìåéùìÝíïõ/ùí ðñïóÜñôçóçò/óåùí;" + +# +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Åêôýðùóç ðñïóáñôÞóåùí;" + +# +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Áäõíáìßá áðïêñõðôïãñÜöçóçò ôïõ êñõðôïãñáöçìÝíïõ ìçíýìáôïò!" + +# +#: recvattach.c:951 +msgid "Attachments" +msgstr "ÐñïóáñôÞóåéò" + +# +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Äåí õðÜñ÷ïõí åðéìÝñïõò ôìÞìáôá ãéá íá åìöáíéóôïýí." + +# +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Áäõíáìßá äéáãñáöÞò ðñïóÜñôçóçò áðü ôïí åîõðçñåôçôÞ POP." + +# +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "" +"Ç äéáãñáöÞ ðñïóáñôÞóåùí áðü êñõðôïãñáöçìÝíá ìçíýìáôá äåí õðïóôçñßæåôáé." + +# +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Ìüíï ç äéáãñáöÞ ðïëõìåñþí ðñïóáñôÞóåùí õðïóôçñßæåôáé." + +# +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Ìðïñåßôå íá äéáâéâÜóåôå ìüíï ìÞíõìá/ìÝñç rfc822" + +# +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò." + +# +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò." + +# +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Áäõíáìßá ðñüóâáóçò óôï ðñïóùñéíü áñ÷åßï %s." + +# +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Ðñïþèçóç óáí ðñïóáñôÞóåéò;" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Áäõíáìßá áðïêùäéêïðïßçóçò üëùí ôùí óçìåéùìÝíùí ðñïóáñôÞóåùí. Ðñïþèçóç-MIME " +"ôùí Üëëùí;" + +# +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Ðñïþèçóç åíóùìáôùìÝíïõ MIME;" + +# +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Áäõíáìßá äçìéïõñãßáò ôïõ %s." + +# +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Áäõíáìßá åýñåóçò óçìåéùìÝíùí ìçíõìÜôùí." + +# +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Äåí âñÝèçêáí ëßóôåò óõæçôÞóåùí!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Áäõíáìßá áðïêùäéêïðïßçóçò üëùí ôùí óçìåéùìÝíùí ðñïóáñôÞóåùí. MIME-" +"encapsulate ôéò Üëëåò;" + +# +#: remailer.c:480 +msgid "Append" +msgstr "Ðñüóèåóç" + +#: remailer.c:481 +msgid "Insert" +msgstr "Åßóïäïò" + +# +#: remailer.c:482 +msgid "Delete" +msgstr "ÄéáãñáöÞ" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Áäõíáìßá ëÞøçò ôçò type2.list ôïõ mixmaster!" + +# +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "ÅðéëïãÞ ìéáò áëõóßäáò åðáíáðïóôïëÝùí." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" +"ÓöÜëìá: ôï %s äåí ìðïñåß íá åßíáé ï ôåëéêüò åðáíáðïóôïëÝáò ôçò áëõóßäáò." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Ïé áëõóßäåò Mixmaster åßíáé ðåñéïñéóìÝíåò óå %d óôïé÷åßá." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Ç áëõóßäá åðáíáðïóôïëÝùí åßíáé Þäç Üäåéá." + +# +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "¸÷åôå Þäç åðéëÝîåé ôï ðñþôï óôïé÷åßï ôçò áëõóßäáò." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "¸÷åôå Þäç åðéëÝîåé ôï ôåëåõôáßï óôïé÷åßï ôçò áëõóßäáò." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Ï Mixmaster äåí äÝ÷åôáé Cc Þ Bcc åðéêåöáëßäåò." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Ðáñáêáëþ ïñßóôå óùóôÜ ôçí ìåôáâëçôÞ ôïõ ïíüìáôïò ôïõ óõóôÞìáôïò üôáí " +"÷ñçóéìïðïéåßôå ôï mixmaster!" + +# +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "ÓöÜëìá óôçí áðïóôïëÞ ìçíýìáôïò, ôåñìáôéóìüò èõãáôñéêÞò ìå %d.\n" + +# +#: remailer.c:772 +msgid "Error sending message." +msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò." + +# +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "ÁêáôÜëëçëá ìïñöïðïéçìÝíç åßóïäïò ãéá ôï ôýðï %s óôç \"%s\" ãñáììÞ %d" + +# +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Äåí êáèïñßóôçêå äéáäñïìÞ mailcap" + +# +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Ç åßóïäïò mailcap ãéá ôï ôýðï %s äå âñÝèçêå" + +# +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: ðïëý ëßãá ïñßóìáôá" + +# +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: ðÜñá ðïëëÜ ïñßóìáôá" + +# +#: send.c:247 +msgid "No subject, abort?" +msgstr "Äåí õðÜñ÷åé èÝìá, íá åãêáôáëåßøù;" + +# +#: send.c:249 +msgid "No subject, aborting." +msgstr "Äåí õðÜñ÷åé èÝìá, åãêáôÜëåéøç." + +# +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "ÁðÜíôçóç óôï %s%s;" + +# +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "ÓõíÝ÷åéá óôï %s%s;" + +# +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "ÊáíÝíá óçìåéùìÝíï ìÞíõìá äåí åßíáé ïñáôü!" + +# +#: send.c:733 +msgid "Include message in reply?" +msgstr "Óõìðåñßëçøç ôïõ ìçíýìáôïò óôçí áðÜíôçóç;" + +# +#: send.c:738 +msgid "Including quoted message..." +msgstr "Óõìðåñßëçøç êáèïñéóìÝíïõ ìçíýìáôïò..." + +# +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Áäõíáìßá óõìðåñßëçøçò üëùí ôùí ìçíõìÜôùí ðïõ æçôÞèçêáí!" + +# +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Ðñïþèçóç óáí ðñïóÜñôçóç;" + +# +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Åôïéìáóßá ðñïùèçìÝíïõ ìçíýìáôïò ..." + +# +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "ÁíÜêëçóç áíáâëçèÝíôïò ìçíýìáôïò;" + +# +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Åðåîåñãáóßá ðñïùèçìÝíïõ ìçíýìáôïò;" + +# +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Ìáôáßùóç áðïóôïëÞò ìç ôñïðïðïéçìÝíïõ ìçíýìáôïò;" + +# +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Ìáôáßùóç áðïóôïëÞò ìç ôñïðïðïéçìÝíïõ ìçíýìáôïò." + +# +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Ôï ãñÜììá äåí åóôÜëç." + +# +#: send.c:1430 +msgid "Message postponed." +msgstr "Ôï ìÞíõìá áíåâëÞèç." + +# +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Äåí Ý÷ïõí êáèïñéóôåß ðáñáëÞðôåò!" + +# +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Äåí êáèïñßóôçêáí ðáñáëÞðôåò." + +# +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Äåí õðÜñ÷åé èÝìá, áêýñùóç áðïóôïëÞò;" + +# +#: send.c:1464 +msgid "No subject specified." +msgstr "Äåí êáèïñßóôçêå èÝìá." + +# +#: send.c:1526 +msgid "Sending message..." +msgstr "ÁðïóôïëÞ ìçíýìáôïò..." + +# +#: send.c:1667 +msgid "Could not send the message." +msgstr "Áäõíáìßá áðïóôïëÞò ôïõ ìçíýìáôïò." + +# +#: send.c:1672 +msgid "Mail sent." +msgstr "Ôï ãñÜììá åóôÜëç." + +# +#: send.c:1672 +msgid "Sending in background." +msgstr "ÁðïóôïëÞ óôï ðáñáóêÞíéï." + +# +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Äå âñÝèçêå ðáñÜìåôñïò ïñéïèÝôçóçò! [áíáöÝñáôå áõôü ôï óöÜëìá]" + +# +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "Ôï %s äåí õðÜñ÷åé ðéá!" + +# +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "Ôï %s äåí åßíáé êáíïíéêü áñ÷åßï." + +# +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Áäõíáìßá áíïßãìáôïò ôïõ %s" + +# +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "ÓöÜëìá êáôÜ ôçí áðïóôïëÞ ìçíýìáôïò, ôåñìáôéóìüò èõãáôñéêÞò ìå %d (%s)." + +# +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "¸îïäïò ôçò äéåñãáóßáò áðïóôïëÞò" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +# +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... ÅãêáôÜëåéøç.\n" + +# +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Åíôïðéóìüò ôïõ %s... ÅãêáôÜëåéøç.\n" + +# +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Åíôïðéóìüò óÞìáôïò %d... ÅãêáôÜëåéøç.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "ÅìðéóôåõìÝíï " + +#: smime.c:303 +msgid "Verified " +msgstr "ÅðéâåâáéùìÝíï " + +#: smime.c:306 +msgid "Unverified" +msgstr "Ìç ÅðéâåâáéùìÝíï" + +# +#: smime.c:309 +msgid "Expired " +msgstr "¸ëçîå " + +#: smime.c:312 +msgid "Revoked " +msgstr "ÁíáêëÞèçêå " + +# +#: smime.c:315 +msgid "Invalid " +msgstr "Ìç Ýãêõñï " + +# +#: smime.c:318 +msgid "Unknown " +msgstr "¶ãíùóôï " + +# +# pgp.c:1200 +#: smime.c:347 +msgid "Enter keyID: " +msgstr "ÅéóÜãåôå ôï keyID: " + +# +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "¼ìïéá ðéóôïðïéçôéêÜ S/MIME \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "Ôï ID %s äåí Ý÷åé åðéâåâáéùèåß. Óßãïõñá íá ãßíåé ÷ñÞóç ôïõ ãéá %s ;" + +# +# pgp.c:1194 +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "×ñÞóç ôïõ (ìç åìðéóôåõìÝíïõ) ID %s ãéá ôï %s " + +# +# pgp.c:1194 +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "×ñÞóç ôïõ ID = %s ãéá ôï %s ;" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Ðñïåéäïðïßçóç: Äåí Ý÷åé ïñéóôåß åìðéóôïóýíç óôï ID %s. (ðëÞêôñï. ãéá " +"óõíÝ÷åéá)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Äåí âñÝèçêáí (Ýãêõñá) ðéóôïðïéçôéêÜ ãéá ôï %s." + +# +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "ÓöÜëìá: áäõíáìßá äçìéïõñãßáò õðïäéåñãáóßáò OpenSSL!" + +# +#: smime.c:1197 +msgid "no certfile" +msgstr "êáíÝíá áñ÷åßï ðéóôïðïéçôéêþí" + +# +#: smime.c:1200 +msgid "no mbox" +msgstr "êáíÝíá ãñáììáôïêéâþôéï" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Êáììßá Ýîïäïò áðü OpenSSL.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Ðñïåéäïðïßçóç: Äåí âñÝèçêå åíäéÜìåóï ðéóôïðïéçôéêü." + +# +# pgp.c:1070 +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Áäõíáìßá åêêßíçóçò õðïäéåñãáóßáò OpenSSL!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Êáììßá Ýîïäïò áðü OpenSSL.." + +# +# pgp.c:669 pgp.c:894 +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- ÔÝëïò ôçò åîüäïõ OpenSSL --]\n" +"\n" + +# +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ÓöÜëìá: áäõíáìßá äçìéïõñãßáò õðïäéåñãáóßáò OpenSSL! --]\n" + +# +# pgp.c:980 +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Ôá åðüìåíá äåäïìÝíá åßíáé êñõðôïãñáöçìÝíá ìÝóù S/MIME --]\n" + +# +# pgp.c:676 +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Ôá åðüìåíá äåäïìÝíá åßíáé õðïãåãñáììÝíá ìå S/MIME --]\n" + +# +# pgp.c:988 +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- ÔÝëïò äåäïìÝíùí êñõðôïãñáöçìÝíùí ìÝóù S/MIME --]\n" + +# +# pgp.c:682 +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- ÔÝëïò äåäïìÝíùí õðïãåãñáììÝíùí ìå S/MIME --]\n" + +# +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ôáêôïðïßçóç ãñáììáôïêéâùôßïõ..." + +# +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "" +"Áäõíáìßá åýñåóçò ôçò ëåéôïõñãßáò ôáîéíüìçóçò! [áíáöÝñáôå áõôü ôï óöÜëìá]" + +# +#: status.c:102 +msgid "(no mailbox)" +msgstr "(êáíÝíá ãñáììáôïêéâþôéï)" + +# +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Ôï ôñÝ÷ïí ìÞíõìá äåí åßíáé ïñáôü óå áõôÞ ôç ðåñéïñéóìÝíç üøç" + +# +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Ôï ôñÝ÷ïí ìÞíõìá äåí åßíáé äéáèÝóéìï." + +# +# commands.c:87 commands.c:95 pgp.c:1373 pgpkey.c:220 +#~ msgid "Invoking OpenSSL..." +#~ msgstr "ÊëÞóç ôïõ OpenSSL..." + +# +#~ msgid "Bounce message to %s...?" +#~ msgstr "Äéáâßâáóç ìçíýìáôïò óôï %s...;" + +# +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Äéáâßâáóç ìçíõìÜôùí óôï %s...;" + +# +# compose.c:133 +#~ msgid "ewsabf" +#~ msgstr "ewsabf" diff --git a/po/eo.gmo b/po/eo.gmo new file mode 100644 index 0000000000000000000000000000000000000000..de62fead89f13688ee7df3ae3b4a593a7b074b8f GIT binary patch literal 79063 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 O?4B*bPh{@gTl^o7r@OTP literal 0 HcmV?d00001 diff --git a/po/eo.po b/po/eo.po new file mode 100644 index 0000000..92f39e4 --- /dev/null +++ b/po/eo.po @@ -0,0 +1,4202 @@ +# Mesaøoj por la programo "mutt". +# Edmund GRIMLEY EVANS <edmundo@rano.org>, 2000-2003. +# +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.5.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-12 22:03+0000\n" +"Last-Translator: Edmund GRIMLEY EVANS <edmundo@rano.org>\n" +"Language-Team: eo <eo@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-3\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Uzantonomo æe %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Pasvorto por %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Fino" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Forviþi" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Malforviþi" + +#: addrbook.c:36 +msgid "Select" +msgstr "Elekto" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Helpo" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Vi ne havas adresaron!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Adresaro" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Aldonu nomon: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "En la adresaro jam estas nomo kun tiu adreso!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Averto: Æi tiu nomo eble ne funkcios. Æu ripari øin?" + +#: alias.c:279 +msgid "Address: " +msgstr "Adreso: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Eraro: '%s' estas malbona IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Plena nomo: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Æu akcepti?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Skribi al dosiero: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Adreso aldonita." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Nomþamblono ne estas plenumebla. Æu daýrigi?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "\"compose\" en Mailcap-dosiero postulas %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Eraro dum ruligo de \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Malsukceso malferi dosieron por analizi æapa¼ojn." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Malsukceso malferi dosieron por forigi æapa¼ojn." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"En la Mailcap-dosiero mankas \"compose\" por %s; malplena dosiero estas " +"kreita." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "\"edit\" en Mailcap-dosiero postulas %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "En la Mailcap-dosiero mankas \"edit\" por %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Neniu Mailcap-regulo kongruas. Traktas kiel tekston." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME-speco ne difinita. Ne povas vidigi parton." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Ne povas krei filtrilon." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Ne povas krei filtrilon" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Skriberaro!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Mi ne scias presi tion!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Listo" + +#: browser.c:42 +msgid "Mask" +msgstr "Masko" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ne estas dosierujo." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Poþtfakoj [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Abonita [%s], Dosieromasko: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Dosierujo [%s], Dosieromasko: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Ne povas aldoni dosierujon!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Neniu dosiero kongruas kun la dosieromasko" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Kreado funkcias nur æe IMAP-poþtfakoj" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Forviþado funkcias nur æe IMAP-poþtfakoj" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Æu vere forviþi la poþtfakon \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Poþtfako forviþita." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Poþtfako ne forviþita." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Iri al la dosierujo: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Eraro dum legado de dosierujo." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Dosieromasko: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Inversa ordigo laý (d)ato, (a)lfabete, (g)rando, aý (n)e ordigu? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ordigo laý (d)ato, (a)lfabete, (g)rando, aý (n)e ordigu? " + +#: browser.c:1049 +msgid "dazn" +msgstr "dagn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nova dosieronomo: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Ne povas rigardi dosierujon" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Eraro dum vidigo de dosiero" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Nova mesaøo en " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: terminalo ne kapablas je koloro" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: koloro ne ekzistas" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: objekto ne ekzistas" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: komando validas nur por indeksobjekto" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: Nesufiæe da argumentoj" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Mankas argumentoj" + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: nesufiæe da argumentoj" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: nesufiæe da argumentoj" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: nekonata trajto" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "nesufiæe da argumentoj" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "tro da argumentoj" + +#: color.c:721 +msgid "default colors not supported" +msgstr "implicitaj koloroj ne funkcias" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Æu kontroli PGP-subskribon?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Ne povis krei dumtempan dosieron!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Ne povas krei vidig-filtrilon" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Ne povis kopii mesaøon" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME-subskribo estis sukcese kontrolita." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Posedanto de S/MIME-atestilo ne kongruas kun sendinto." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME-subskribo NE povis esti kontrolita." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP-subskribo estis sukcese kontrolita." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP-subskribo NE povis esti kontrolita." + +#: commands.c:223 +msgid "Command: " +msgstr "Komando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Redirekti mesaøon al: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Redirekti markitajn mesaøojn al: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Eraro dum analizo de adreso!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Malbona IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Redirekti mesaøon al %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Redirekti mesaøojn al %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Mesaøo ne redirektita." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Mesaøoj ne redirektitaj." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Mesaøo redirektita." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Mesaøoj redirektitaj." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Ne povas krei filtrilprocezon" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Filtri per komando: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Neniu pres-komando estas difinita." + +#: commands.c:483 +msgid "Print message?" +msgstr "Æu presi mesaøon?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Æu presi markitajn mesaøojn?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Mesaøo presita" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Mesaøoj presitaj" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Ne eblis presi mesaøon" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Ne eblis presi mesaøojn" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Inversa ordigo laý (d)ato/d(e)/(r)ecv/(t)emo/(a)l/(f)adeno/(n)esortite/(g)" +"rando/(p)oentoj?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordigo laý (d)ato/d(e)/(r)ecv/(t)emo/(a)l/(f)adeno/(n)esortite/(g)rando/(p)" +"oentoj?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dertafngp" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Þelkomando: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Malkodita skribi%s al poþtfako" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Malkodita kopii%s al poþtfako" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Malæifrita skribi%s al poþtfako" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Malæifrita kopii%s al poþtfako" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Skribi%s al poþtfako" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopii%s al poþtfako" + +#: commands.c:706 +msgid " tagged" +msgstr " markitajn" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopias al %s ..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Æu konverti al %s æe sendado?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type þanøita al %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Signaro þanøita al %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "ne konvertas" + +#: commands.c:914 +msgid "converting" +msgstr "konvertas" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Mankas mesaøopartoj." + +#: compose.c:84 +msgid "Send" +msgstr "Sendi" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Interrompi" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Aldoni dosieron" + +#: compose.c:90 +msgid "Descrip" +msgstr "Priskribo" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Subskribi, Æifri" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Æifri" + +#: compose.c:131 +msgid "Sign" +msgstr "Subskribi" + +#: compose.c:133 +msgid "Clear" +msgstr "Neæifrita" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " subskribi kiel: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<implicite>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Æifri per: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP æ(i)fri, (s)ubskribi, subskribi (k)iel, (a)mbaý, aý (f)orgesi? " + +#: compose.c:166 +msgid "esabf" +msgstr "iskaf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Subskribi kiel: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME æ(i)fri, (s)ubskribi, subskribi (p)er, subskribi (k)iel, (a)mbaý, aý " +"(f)orgesi? " + +#: compose.c:228 +msgid "eswabf" +msgstr "ispkaf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, aý (f)orgesi? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345f" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ne plu ekzistas!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] modifita. Æu aktualigi kodadon?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Partoj" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Averto: '%s' estas malbona IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Vi ne povas forviþi la solan parton." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Malbona IDN en \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Aldonas la elektitajn dosierojn ..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Ne povas aldoni %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Malfermu poþtfakon por aldoni mesaøon el øi" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Ne estas mesaøoj en tiu poþtfako." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Marku la mesaøojn, kiujn vi volas aldoni!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Ne povas aldoni!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Rekodado efikas nur al tekstaj partoj." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Æi tiu parto ne estos konvertita." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Æi tiu parto estos konvertita." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Nevalida kodado." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Æu skribi kopion de æi tiu mesaøo?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Renomi al: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Ne povas ekzameni la dosieron %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nova dosiero: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type havas la formon bazo/subspeco" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Nekonata Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Ne povas krei dosieron %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Oni malsukcesis krei kunsenda¼on" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Æu prokrasti æi tiun mesaøon?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Skribi mesaøon al poþtfako" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Skribas mesaøon al %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Mesaøo skribita." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME jam elektita. Æu nuligi kaj daýrigi? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP jam elektita. Æu nuligi kaj daýrigi? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (nuna horo: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s eligo sekvas%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Pasfrazo(j) forgesita(j)." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Donu PGP-pasfrazon:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Donu S/MIME-pasfrazon:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Æu krei tradician (\"inline\") PGP-mesaøon?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Alvokas PGP ..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "S/MIME-mesaøoj sen informoj pri enhavo ne funkcias." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Provas eltiri PGP-þlosilojn ...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Provas eltiri S/MIME-atestilojn ...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Eraro: maløusta strukturo de multipart/signed! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Eraro: nekonata multipart/signed-protokolo %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Averto: ne povas kontroli %s/%s-subskribojn. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- La sekvaj datenoj estas subskribitaj --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Averto: ne povas trovi subskribon. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Fino de subskribitaj datenoj --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "jes" + +#: curs_lib.c:158 +msgid "no" +msgstr "ne" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Æu eliri el Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "nekonata eraro" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Premu klavon por daýrigi ..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' por listo): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Neniu poþtfako estas malfermita." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Ne estas mesaøoj." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Poþtfako estas nurlega." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funkcio nepermesata dum elektado de aldonoj." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Mankas videblaj mesaøoj" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Ne povas þanøi skribostaton æe nurlega poþtfako!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Þanøoj al poþtfako estos skribitaj æe eliro." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Þanøoj al poþtfako ne estos skribitaj." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Fini" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Skribi" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Nova mesaøo" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Respondi" + +#: curs_main.c:403 +msgid "Group" +msgstr "Respondi al grupo" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Poþtfako estis modifita de ekstere. Flagoj povas esti maløustaj." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Nova mesaøo en æi tiu poþtfako" + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Poþtfako estis modifita de ekstere." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Mankas markitaj mesaøoj." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Nenio farenda." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Salti al mesaøo: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argumento devas esti mesaønumero." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Tiu mesaøo ne estas videbla." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Nevalida mesaønumero." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Forviþi mesaøojn laý la þablono: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Nenia þablono estas aktiva." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Þablono: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limigi al mesaøoj laý la þablono: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Æu eliri el Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Marki mesaøojn laý la þablono: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Malforviþi mesaøojn laý la þablono: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Malmarki mesaøojn laý la þablono: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Malfermi poþtfakon nurlege" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Malfermi poþtfakon" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ne estas poþtfako." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Eliri el Mutt sen skribi?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Vi estas æe la lasta mesaøo." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Mankas neforviþitaj mesaøoj." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Vi estas æe la unua mesaøo." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Seræo rekomencis æe la komenco." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Seræo rekomencis æe la fino." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Mankas novaj mesaøoj" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Mankas nelegitaj mesaøoj" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " en æi tiu limigita rigardo" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Ne povas þanøi la flagon 'important' æe POP-servilo." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Ne restas fadenoj." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Vi estas æe la unua fadeno." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Fadenoj ne estas þaltitaj." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Fadeno enhavas nelegitajn mesaøojn." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Ne eblas redakti mesaøon en POP-servilo." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tenþovi linion, kiu komenciøas per unuopa ~\n" +"~b adresoj\taldoni adresojn al la linio Bcc:\n" +"~c adresoj\taldoni adresojn al la linio Cc:\n" +"~f mesaøoj\tinkluzivi mesaøojn\n" +"~F mesaøoj\tsame kiel ~f, sed inkluzivi ankaý la æapon\n" +"~h\t\tredakti la mesaøoæapon\n" +"~m mesaøoj\tinkluzivi kaj citi mesaøojn\n" +"~M mesaøoj\tsame kiel ~m, sed inkluzivi ankaý la æapojn\n" +"~[\t\tpresi la mesaøon\n" +"~q\t\tskribi la dosieron kaj eliri el la redaktilo\n" +"~r dosiero\t\tlegi dosieron en la redaktilon\n" +"~t adresoj\taldoni adresojn al la linio To:\n" +"~u\t\tredakti la antaýan linion denove\n" +"~v\t\tredakti mesaøon per la redaktilo $visual\n" +"~w dosiero\tskribi mesaøon al dosiero\n" +"~x\t\tfor¼eti þanøojn kaj eliri el la redaktilo\n" +"~?\t\tvidi æi tiun informon\n" +".\t\tsola en linio finas la enigon\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: nevalida mesaønumero.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Finu mesaøon per . sur propra linio)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Mankas poþtfako.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Mesaøo enhavas:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(daýrigi)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "mankas dosieronomo.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Nul linioj en mesaøo.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Malbona IDN en %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: nekonata redaktokomando (~? por helpo)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Ne povis krei dumtempan poþtfakon: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Ne povis skribi al dumtempa poþtfako: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Ne povis stumpigi dumtempan poþtfakon: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Mesaøodosiero estas malplena!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Mesaøo ne modifita!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Ne povas malfermi mesaøodosieron: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Ne povas aldoni al poþtfako: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Eraro. Konservas dumtempan dosieron: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Þalti flagon" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Malþalti flagon" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- Eraro: Neniu parto de Multipart/Alternative estis montrebla! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Parto #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Speco: %s/%s, Kodado: %s, Grando: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Aýtomata vidigo per %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Alvokas aýtomatan vidigon per: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Ne povas ruli %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Erareligo de %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- Eraro: parto message/external ne havas parametro access-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Æi tiu %s/%s-parto " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(grando %s bitokoj) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "estas forviþita --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- je %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nomo: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Æi tiu %s/%s-parto ne estas inkluzivita, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- kaj la indikita ekstera fonto eksvalidiøis. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- kaj Mutt ne kapablas je la indikita alirmaniero %s. --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Eraro: multipart/signed ne havas parametron protocol!" + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Eraro: multipart/encrypted ne havas parametron protocol!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Ne povas malfermi dumtempan dosieron!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s ne estas konata " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(uzu '%s' por vidigi æi tiun parton)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(bezonas klavodifinon por 'view-attachments'!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: ne povas aldoni dosieron" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERARO: bonvolu raporti æi tiun cimon" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<NEKONATA>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Øeneralaj klavodifinoj:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funkcioj, kiuj ne havas klavodifinon:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Helpo por %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Ne povas fari unhook * de en hoko." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: nekonata speco de hook: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Ne povas forviþi %s de en %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Nenia rajtiøilo disponata" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Rajtiøas (anonime) ..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonima rajtiøo malsukcesis." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Rajtiøas (CRAM-MD5) ..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5-rajtiøo malsukcesis." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Rajtiøas (GSSAPI) ..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI-rajtiøo malsukcesis." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN estas malþaltita æe æi tiu servilo." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Salutas ..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Saluto malsukcesis." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Rajtiøas (%s) ..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL-rajtiøo malsukcesis." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s ne estas valida IMAP-vojo" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Prenas nomspacojn ..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Prenas liston de poþtfakoj ..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Poþtfako ne ekzistas" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Krei poþtfakon: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Poþtfako devas havi nomon." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Poþtfako kreita." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Poþtfako fermita" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Fatala eraro. Mesaøonombro ne kongruas!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Fermas la konekton al %s ..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Æi tiu IMAP-servilo estas antikva. Mutt ne funkcias kun øi." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Neatendita respondo ricevita de servilo: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Æu sekura konekto per TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Ne povis negoci TLS-konekton" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Elektas %s ..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Eraro dum malfermado de poþtfako" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Ne povas aldoni al IMAP-poþtfako æe æi tiu servilo" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Æu krei %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Fermas la konekton al la IMAP-servilo ..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Markas %d mesaøojn kiel forviþitajn ..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Forviþo malsukcesis" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Skribas mesaøoflagojn ... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Forviþas mesaøojn de la servilo ..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE malsukcesis" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE malsukcesis" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Malbona nomo por poþtfako" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Abonas %s ..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Malabonas %s ..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Ne povas preni æapojn de æi tiu versio de IMAP-servilo." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Ne povis krei dumtempan dosieron %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Prenas mesaøoæapojn ... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Prenas mesaøon ..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "La mesaøindekso estas maløusta. Provu remalfermi la poþtfakon." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Alþutas mesaøon ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopias %d mesaøojn al %s ..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopias mesaøon %d al %s ..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Æu daýrigi?" + +#: init.c:611 +msgid "alias: no address" +msgstr "adresaro: mankas adreso" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Averto: Malbona IDN '%s' en adreso '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "nevalida æaplinio" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: nekonata ordigmaniero" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): eraro en regula esprimo: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: nekonata variablo" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "reset: prefikso ne permesata" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "reset: valoro ne permesata" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s estas þaltita" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s estas malþaltita" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: nevalida poþtfakospeco" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: nevalida valoro" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: Nekonata speco." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: nekonata speco" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Ne povas ekzameni la dosieron %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ne estas normala dosiero." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Eraro en %s, linio %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: eraroj en %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: legado æesis pro tro da eraroj en %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: eraro æe %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: tro da argumentoj" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: nekonata komando" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Eraro en komandlinio: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "ne povas eltrovi la hejmdosierujon" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "ne povas eltrovi la uzantonomo" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Cirkla makroo trovita." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Klavo ne estas difinita." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Klavo ne estas difinita. Premu '%s' por helpo." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: tro da argumentoj" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: nekonata menuo" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "malplena klavoserio" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: tro da argumentoj" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: nekonata funkcio" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: malplena klavoserio" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: tro da argumentoj" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: mankas argumentoj" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: funkcio ne ekzistas" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Donu þlosilojn (^G por nuligi): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Signo = %s, Okume = %o, Dekume = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "malplena funkcio" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "fino de kondiæa rulo (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "devigi vidigon de parto per mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "vidigi parton kiel tekston" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "þalti aý malþalti montradon de subpartoj" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "iri al fino de paøo" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "redirekti mesaøon al alia adreso" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "elekti novan dosieron en æi tiu dosierujo" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "vidigi dosieron" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "montri la nomon de la elektita dosiero" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "aboni æi tiun poþtfakon (nur IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "malaboni æi tiun poþtfakon (nur IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "elekti, æu vidi æiujn, aý nur abonitajn poþtfakojn (nur IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "listigi poþtfakojn kun nova mesaøo" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "þanøi la dosierujon" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "kontroli poþtfakojn pri novaj mesaøoj" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "aldoni dosiero(j)n al æi tiu mesaøo" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "aldoni mesaøo(j)n al æi tiu mesaøo" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "redakti la BCC-liston" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "redakti la CC-liston" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "redakti priskribon de parto" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "redakti kodadon de parto" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "donu dosieron, al kiu la mesaøo estu skribita" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "redakti la dosieron aldonotan" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "redakti la From-kampon" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "redakti la mesaøon kun æapo" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "redakti la mesaøon" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "redakti parton, uzante mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "redakti la kampon Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "redakti la temlinion de le mesaøo" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "redakti la liston de ricevontoj" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "krei novan poþtfakon (nur IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "redakti MIME-enhavospecon de parto" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "akiri dumtempan kopion de parto" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "apliki ispell al la mesaøo" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "verki novan parton per mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "þalti aý malþalti rekodadon de æi tiu parto" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "skribi æi tiun mesaøon por sendi øin poste" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "renomi/movi aldonitan dosieron" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "sendi la mesaøon" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "þalti dispozicion inter \"inline\" kaj \"attachment\"" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "elekti, æu forviþi la dosieron post sendado" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "aktualigi la kodadon de parto" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "skribi la mesaøon al poþtfako" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "kopii mesaøon al dosiero/poþtfako" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "aldoni sendinton al adresaro" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "movi registron al fino de ekrano" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "movi registron al mezo de ekrano" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "movi registron al komenco de ekrano" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "fari malkoditan kopion (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "fari malkoditan kopion (text/plain) kaj forviþi" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "forviþi registron" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "forviþi æi tiun poþtfakon (nur IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "forviþi æiujn mesaøojn en subfadeno" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "forviþi æiujn mesaøojn en fadeno" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "montri plenan adreson de sendinto" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "montri mesaøon kaj (mal)þalti montradon de plena æapo" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "montri mesaøon" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "redakti la krudan mesaøon" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "forviþi la signon antaý la tajpmontrilo" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "movi la tajpmontrilon unu signon maldekstren" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "movi la tajpmontrilon al la komenco de la vorto" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "salti al la komenco de la linio" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "rondiri tra enir-poþtfakoj" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "kompletigi dosieronomon aý nomon el la adresaro" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "kompletigi adreson kun demando" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "forviþi la signon sub la tajpmontrilo" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "salti al la fino de la linio" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "movi la tajpmontrilon unu signon dekstren" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "movi la tajpmontrilon al la fino de la vorto" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "rulumi malsupren tra la histori-listo" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "rulumi supren tra la histori-listo" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "forviþi signojn de la tajpmontrilo øis linifino" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "forviþi signojn de la tajpmontrilo øis fino de la vorto" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "forviþi æiujn signojn en la linio" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "forviþi la vorton antaý la tajpmontrilo" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "citi la sekvontan klavopremon" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "interþanøi la signon sub la tajpmontrilo kun la antaýa" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "majuskligi la vorton" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "konverti la vorton al minuskloj" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "konverti la vorton al majuskloj" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "enigi muttrc-komandon" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "enigi dosierþablonon" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "eliri el æi tiu menuo" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtri parton tra þelkomando" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "iri al la unua registro" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "þanøi la flagon 'grava' de mesaøo" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "plusendi mesaøon kun komentoj" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "elekti la aktualan registron" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "respondi al æiuj ricevintoj" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "rulumi malsupren duonon de paøo" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "rulumi supren duonon de paøo" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "æi tiu ekrano" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "salti al indeksnumero" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "iri al la lasta registro" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "respondi al specifita dissendolisto" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "ruligi makroon" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "verki novan mesaøon" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "malfermi alian poþtfakon" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "malfermi alian poþtfakon nurlege" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "malþalti flagon æe mesaøo" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "forviþi mesaøojn laý þablono" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "devigi prenadon de mesaøoj de IMAP-servilo" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "elþuti mesaøojn de POP-servilo" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "iri al la unua mesaøo" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "iri al la lasta mesaøo" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "montri nur la mesaøojn, kiuj kongruas kun þablono" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "salti al la unua nova mesaøo" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "salti al la sekva nova aý nelegita mesaøo" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "salti al la sekva subfadeno" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "salti al la sekva fadeno" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "salti al la sekva neforviþita mesaøo" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "salti al la sekva nelegita mesaøo" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "salti al patra mesaøo en fadeno" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "salti al la antaýa fadeno" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "salti al la antaýa subfadeno" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "salti al la antaýa neforviþita mesaøo" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "salti al la antaýa nova mesaøo" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "salti al la antaýa nova aý nelegita mesaøo" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "salti al la antaýa nelegita mesaøo" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "marki la aktualan fadenon kiel legitan" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "marki la aktualan subfadenon kiel legitan" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "þalti flagon æe mesaøo" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "skribi þanøojn al poþtfako" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "marki mesaøojn laý þablono" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "malforviþi mesaøojn laý þablono" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "malmarki mesaøojn laý þablono" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "iri al la mezo de la paøo" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "iri al la sekva registro" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "rulumi malsupren unu linion" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "iri al la sekva paøo" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "salti al la fino de la mesaøo" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "þalti aý malþalti montradon de citita teksto" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "supersalti cititan tekston" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "salti al la komenco de mesaøo" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "trakti mesaøon/parton per þelkomando" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "iri al la antaýa registro" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "rulumi supren unu linion" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "iri al la antaýa paøo" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "presi la aktualan registron" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "demandi eksteran programon pri adresoj" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "aldoni novajn demandrezultojn al jamaj rezultoj" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "skribi þanøojn al poþtfako kaj eliri" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "revoki prokrastitan mesaøon" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "rekrei la enhavon de la ekrano" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interna}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "respondi al mesaøo" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "uzi æi tiun mesaøon kiel modelon por nova mesaøo" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "skribi mesaøon/parton al dosiero" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "seræi pri regula esprimo" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "seræi malantaýen per regula esprimo" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "seræi pri la sekva trafo" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "seræi pri la sekva trafo en la mala direkto" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "þalti aý malþalti alikolorigon de seræþablono" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "alvoki komandon en subþelo" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ordigi mesaøojn" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ordigi mesaøojn en inversa ordo" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "marki la aktualan registron" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "apliki la sekvan komandon al æiuj markitaj mesaøoj" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "apliki la sekvan funkcion NUR al markitaj mesaøoj" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "marki la aktualan subfadenon" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "marki la aktualan fadenon" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "þanøi la flagon 'nova' de mesaøo" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "(mal)þalti, æu la poþtfako estos reskribita" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "(mal)þali, æu vidi poþtfakojn aý æiujn dosierojn" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "iri al la supro de la paøo" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "malforviþi la aktualan registron" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "malforviþi æiujn mesaøojn en fadeno" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "malforviþi æiujn mesaøojn en subfadeno" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "montri la version kaj daton de Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "vidigi parton, per mailcap, se necese" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "montri MIME-partojn" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "montri la klavokodon por klavopremo" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "montri la aktivan limigþablonon" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "(mal)kolapsigi la aktualan fadenon" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "(mal)kolapsigi æiujn fadenojn" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "aldoni publikan PGP-þlosilon" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "montri PGP-funkciojn" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "sendi publikan PGP-þlosilon" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "kontroli publikan PGP-þlosilon" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "vidi la uzant-identigilon de la þlosilo" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "kontroli pri klasika PGP" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Akcepti la konstruitan æenon" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Aldoni plusendilon al la æeno" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Enþovi plusendilon en la æenon" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Forviþi plusendilon el la æeno" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Elekti la antaýan elementon de la æeno" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Elekti la sekvan elementon de la æeno" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "Sendi la mesaøon tra mixmaster-plusendiloæeno" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "fari malæifritan kopion kaj forviþi" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "fari malæifritan kopion" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "forviþi pasfrazo(j)n el memoro" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "eltiri publikajn þlosilojn" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "montri S/MIME-funkciojn" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "Entjera troo - ne povas asigni memoron!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Mankas memoro!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Por kontakti la kreantojn, bonvolu skribi al <mutt-dev@mutt.org>.\n" +"Por raporti cimon, bonvolu uzi la programon flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Kopirajto (C) 1996-2002 Michael R. Elkins kaj aliaj.\n" +"Mutt venas kun ABSOLUTE NENIA GARANTIO; por detaloj tajpu 'mutt -vv'.\n" +"Mutt estas libera programo, kaj vi rajtas pludoni kopiojn\n" +"sub difinitaj kondiæoj; tajpu 'mutt -v' por detaloj.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Kopirajto (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Kopirajto (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Kopirajto (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n" +"Kopirajto (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Kopirajto (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n" +"Kopirajto (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Kopirajto (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Multaj aliaj homoj ne menciitaj æi tie kontribuis multe da\n" +"programlinioj, riparoj, kaj sugestoj.\n" +"\n" +" Æi tiu programo estas libera; vi povas pludoni kopiojn kaj modifi\n" +" øin sub la kondiæoj de la Øenerala Publika Rajtigilo de GNU,\n" +" kiel tio estas eldonita de Free Software Foundation; aý versio 2\n" +" de la Rajtigilo, aý (laý via elekto) iu sekva versio.\n" +"\n" +" Æi tiu programo estas disdonita kun la espero, ke øi estos utila,\n" +" sed SEN IA AJN GARANTIO; eæ sen la implicita garantio de\n" +" KOMERCA KVALITO aý ADEKVATECO POR DIFINITA CELO. Vidu la\n" +" Øeneralan Publikan Rajtigilon de GNU por pli da detaloj.\n" +"\n" +" Vi devus esti ricevinta kopion de la Øenerala Publika Rajtigilo de\n" +" GNU kun æi tiu programo; se ne, skribu al Free Software Foundation,\n" +" Inc., 59 Temple Place - Suite 330, Boston, MA 02111, Usono.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"uzado: mutt [ -nRyzZ ] [ -e <kom> ] [ -F <dos> ] [ -m <speco> ] [ -f " +"<dos> ]\n" +" mutt [ -nR ] [ -e <kom> ] [ -F <dos> ] -Q <var> [ -Q <var> ] [...]\n" +" mutt [ -nR ] [ -e <kom> ] [ -F <dos> ] -A <nom> [ -A <nom> ] [...]\n" +" mutt [ -nx ] [ -e <kom> ] [ -a <dos> ] [ -F <dos> ] [ -H <dos> ] [ -i " +"<dos> ] [ -s <temo> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n" +" mutt [ -n ] [ -e <kom> ] [ -F <dos> ] -p\n" +" mutt -v[v]\n" +"\n" +"opcioj:\n" +" -A <nomo> traduki la nomon per la adresaro\n" +" -a <dosiero>\taldoni dosieron al la mesaøo\n" +" -b <adreso>\tspecifi adreson por blinda kopio (BCC)\n" +" -c <adreso>\tspecifi adreson por kopio (CC)\n" +" -e <komando>\tspecifi komandon por ruligi post la starto\n" +" -f <dosiero>\tspecifi la poþtfakon por malfermi\n" +" -F <dosiero>\tspecifi alian dosieron muttrc\n" +" -H <dosiero>\tspecifi malnetan dosieron por legi la æapon\n" +" -i <dosiero>\tspecifi dosieron, kiun Mutt inkluzivu en la respondo\n" +" -m <speco>\tspecifi implicitan specon de poþtfakoj\n" +" -n\t\tindikas al Mutt ne legi la sisteman dosieron Muttrc\n" +" -p\t\trevoki prokrastitan mesaøon\n" +" -Q <variablo> pridemandi la valoron de agordo-variablo\n" +" -R\t\tmalfermi poþtfakon nurlege\n" +" -s <temo>\tspecifi temlinion (en citiloj, se øi enhavas spacetojn)\n" +" -v\t\tmontri version kaj parametrojn de la traduka¼o\n" +" -x\t\timiti la sendreøimon de mailx\n" +" -y\t\telekti poþtfakon specifitan en via listo 'mailboxes'\n" +" -z\t\teliri tuj, se ne estas mesaøoj en la poþtfako\n" +" -Z\t\tmalfermi la unuan poþtfakon kun nova mesaøo; eliri tuj, se mankas\n" +" -h\t\tdoni æi tiun helpmesaøon" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Parametroj de la traduka¼o:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Eraro dum startigo de la terminalo." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Sencimigo æe la nivelo %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG ne estis difinita por la tradukado. Ignoras.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s ne ekzistas. Æu krei øin?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Ne povas krei %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nenia ricevonto specifita.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: ne povas aldoni dosieron.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Mankas poþtfako kun nova poþto." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Neniu enir-poþtfako estas difinita." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Poþtfako estas malplena." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Legas %s ... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Poþtfako estas fuþita!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Poþtfako fuþiøis!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fatala eraro! Ne povis remalfermi poþtfakon!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Ne povis þlosi poþtfakon!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox modifita, sed mankas modifitaj mesaøoj! (Raportu æi tiun cimon.)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Skribas mesaøojn ... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Skribas þanøojn ..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Skribo malsukcesis! Skribis partan poþtfakon al %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Ne povis remalfermi poþtfakon!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Remalfermas poþtfakon ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Salti al: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Nevalida indeksnumero." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Neniaj registroj." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Vi ne povas rulumi pli malsupren." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Vi ne povas rulumi pli supren." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Vi estas æe la lasta paøo." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Vi estas æe la unua paøo." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Unua registro estas montrita." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Lasta registro estas montrita." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Vi estas æe la lasta registro." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Vi estas æe la lasta registro." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Seræi pri: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Inversa seræo pri: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Mankas seræþablono." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Ne trovita." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Mankas markitaj registroj." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Seræo ne eblas por æi tiu menuo." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Saltado ne funkcias æe dialogoj." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Markado ne funkcias." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Legas %s ... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): ne povas þanøi tempon de dosiero" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Dosiero estas dosierujo; æu skribi sub øi? [(j)es, (n)e, æ(i)uj]" + +#: muttlib.c:835 +msgid "yna" +msgstr "jni" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Tio estas dosierujo; æu skribi dosieron en øi?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Dosiero en dosierujo: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Dosiero ekzistas; æu (s)urskribi, (a)ldoni, aý (n)uligi?" + +#: muttlib.c:869 +msgid "oac" +msgstr "san" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Ne eblas skribi mesaøon al POP-poþtfako." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ne estas poþtfako!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Æu aldoni mesaøojn al %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Konekto al %s fermita" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL ne estas disponata." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Antaýkonekta komando malsukcesis." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Eraro dum komunikado kun %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Malbona IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Seræas pri %s ..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Ne povis trovi la servilon \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Konektiøas al %s ..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Ne povis konektiøi al %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Ne trovis sufiæe da entropio en via sistemo" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Plenigas entropiujon: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s havas malsekurajn permesojn!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL malþaltita pro manko de entropio" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "eraro æe legado aý skribado" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "nespecifita protokoleraro" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL malsukcesis: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Ne povas akiri SSL-atestilon" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL-konekto per %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Nekonata" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[ne povas kalkuli]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[nevalida dato]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Atestilo de servilo ankoraý ne validas" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Atestilo de servilo estas eksvalidiøinta" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Æi tiu atestilo apartenas al:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Æi tiu atestilo estis eldonita de:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Æi tiu atestilo estis valida" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " de %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " al %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingrospuro: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Kontrolo de SSL-atestilo" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(m)alakcepti, akcepti (u)nufoje, (a)kcepti æiam" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "mua" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(m)alakcepti, akcepti (u)nufoje" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "mu" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Eliri " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Averto: Ne povis skribi atestilon" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Atestilo skribita" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Tro da þlosoj; æu forigi la þloson por %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Ne povas þlosi %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Tro da tempo pasis dum provado akiri fcntl-þloson!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Atendas fcntl-þloson ... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Tro da tempo pasis dum provado akiri flock-þloson!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Atendas flock-þloson ... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Ne povis þlosi %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Legas %s ..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Skribas %s ..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Ne povis aktualigi la poþtfakon %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Æu movi legitajn mesaøojn al %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Æu forpurigi %d forviþitan mesaøon?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Æu forpurigi %d forviþitajn mesaøojn?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Movas legitajn mesaøojn al %s ..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Poþtfako estas neþanøita." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d retenite, %d movite, %d forviþite." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d retenite, %d forviþite." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Premu '%s' por (mal)þalti skribon" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Uzu 'toggle-write' por reebligi skribon!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Poþtfako estas markita kiel neskribebla. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Poþtfako sinkronigita." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Ne povas skribi mesaøon" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "Entjera troo - ne povas asigni memoron." + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Ne disponata en æi tiu menuo." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "AntPø" + +#: pager.c:1447 +msgid "NextPg" +msgstr "SekvPø" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Vidi Partojn" + +#: pager.c:1454 +msgid "Next" +msgstr "Sekva" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Fino de mesaøo estas montrita." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Vi estas æe la komenco de la mesaøo" + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Inversa seræo: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Seræo: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Helpo estas nun montrata." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Ne plu da citita teksto." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Ne plu da necitita teksto post citita teksto." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "Plurparta mesaøo ne havas limparametron!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Eraro en esprimo: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Nevalida tago de monato: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Nevalida monato: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Nevalida relativa dato: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "eraro en esprimo" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "eraro en þablono æe: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: nevalida komando" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: ne funkcias en æi tiu reøimo" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "parametro mankas" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "krampoj ne kongruas: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "malplena þablono" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "eraro: nekonata funkcio %d (raportu æi tiun cimon)" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Tradukas seræþablonon ..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Ruligas komandon pri trafataj mesaøoj ..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Mankas mesaøoj, kiuj plenumas la kondiæojn" + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Seræo atingis la finon sen trovi trafon" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Seræo atingis la komencon sen trovi trafon" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Seræo interrompita." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP-pasfrazo forgesita." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Eraro: ne povas krei PGP-subprocezon! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Fino de PGP-eligo --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "[-- KOMENCO DE PGP-MESAØO --]\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- KOMENCO DE PUBLIKA PGP-ÞLOSILO --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- KOMENCO DE PGP-SUBSKRIBITA MESAØO --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- FINO DE PGP-MESAØO --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- FINO DE PUBLIKA PGP-ÞLOSILO --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- FINO DE PGP-SUBSKRIBITA MESAØO --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Eraro: ne povas trovi komencon de PGP-mesaøo! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Interna eraro. Informu al <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Eraro: ne povas krei PGP-subprocezon! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Eraro: misformita PGP/MIME-mesaøo! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Eraro: ne povas krei dumtempan dosieron! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- La sekvaj datenoj estas PGP/MIME-æifritaj --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Fino de PGP/MIME-æifritaj datenoj --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Ne povas malfermi PGP-subprocezon!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Æu uzi keyID = \"%s\" por %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Donu keyID por %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Ne povas alvoki PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Prenas PGP-þlosilon ..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" +"Æiuj kongruaj þlosiloj estas eksvalidiøintaj, revokitaj, aý malþaltitaj." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Elekti " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Kontroli þlosilon " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP-þlosiloj, kiuj kongruas kun <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP-þlosiloj, kiuj kongruas kun \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Ne povas malfermi /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Ne povas krei dumtempan dosieron" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Key ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Æi tiu þlosilo ne estas uzebla: eksvalidiøinta/malþaltita/revokita." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID estas eksvalidiøinta/malþaltita/revokita." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ID havas nedifinitan validecon." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID ne estas valida." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID estas nur iomete valida." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Æu vi vere volas uzi la þlosilon?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Bonvolu doni la þlosilidentigilon: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Alvokas PGP ..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP-þlosilo %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Seræas þlosilojn, kiuj kongruas kun \"%s\" ..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Servilo ne havas la komandon TOP." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Ne povas skribi la æapa¼on al dumtempa dosiero!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Servilo ne havas la komandon UIDL." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s ne estas valida POP-vojo" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Prenas liston de mesaøoj ..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Ne povas skribi mesaøon al dumtempa dosiero!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Kontrolas pri novaj mesaøoj ..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP-servilo ne estas difinita." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Mankas novaj mesaøoj en POP-poþtfako." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Æu forviþi mesaøojn de servilo?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Legas novajn mesaøojn (%d bitokojn) ..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Eraro dum skribado de poþtfako!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d el %d mesaøoj legitaj]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Servilo fermis la konekton!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Rajtiøas (SASL) ..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Rajtiøas (APOP) ..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP-rajtiøo malsukcesis." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Servilo ne havas la komandon USER." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Ne povas lasi mesaøojn æe la servilo." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Eraro dum konektiøo al servilo: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Fermas la konekton al POP-servilo ..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Kontrolas mesaøindeksojn ..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Konekto perdita. Æu rekonekti al POP-servilo?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Prokrastitaj Mesaøoj" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Mankas prokrastitaj mesaøoj." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Nevalida PGP-æapo" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Nevalida S/MIME-æapo" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Malæifro malsukcesis." + +#: query.c:46 +msgid "New Query" +msgstr "Nova Demando" + +#: query.c:47 +msgid "Make Alias" +msgstr "Aldoni Nomon" + +#: query.c:48 +msgid "Search" +msgstr "Seræi" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Atendas respondon ..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Demandokomando ne difinita." + +#: query.c:286 +msgid "Query" +msgstr "Demando" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Demando: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Demando '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Tubo" + +#: recvattach.c:53 +msgid "Print" +msgstr "Presi" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Skribas ..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Parto skribita." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "AVERTO! Vi estas surskribonta %s; æu daýrigi?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Parto filtrita." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtri tra: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Trakti per: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Mi ne scias presi %s-partojn!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Æu presi markitajn partojn?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Æu presi parton?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Ne povas malæifri æifritan mesaøon!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Partoj" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Mankas subpartoj por montri!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Ne povas forviþi parton de POP-servilo." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Mutt ne kapablas forviþi partojn el æifrita mesaøo." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Mutt kapablas forviþi nur multipart-partojn." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Vi povas redirekti nur message/rfc822-partojn." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Eraro dum redirektado de mesaøo!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Eraro dum redirektado de mesaøoj!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Ne povas malfermi dumtempan dosieron %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Æu plusendi kiel kunsenda¼ojn?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "Ne povas malkodi æiujn markitajn partojn. Æu MIME-plusendi la aliajn?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Æu plusendi MIME-pakita?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Ne povas krei %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Ne povas trovi markitajn mesaøojn." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Neniu dissendolisto trovita!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "Ne povas malkodi æiujn markitajn partojn. Æu MIME-paki la aliajn?" + +#: remailer.c:480 +msgid "Append" +msgstr "Aldoni" + +#: remailer.c:481 +msgid "Insert" +msgstr "Enþovi" + +#: remailer.c:482 +msgid "Delete" +msgstr "Forviþi" + +#: remailer.c:484 +msgid "OK" +msgstr "Bone" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Ne povas preni type2.list de mixmaster!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Elekti plusendiloæenon." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Eraro: %s ne estas uzebla kiel la fina plusendilo de æeno." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster-æenoj estas limigitaj al %d elementoj." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "La plusendiloæeno estas jam malplena." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Vi jam elektis la unuan elementon de la æeno." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Vi jam elektis la lastan elementon de la æeno." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster ne akceptas la kampon Cc aý Bcc en la æapo." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Bonvolu doni øustan valoron al \"hostname\", kiam vi uzas mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Eraro dum sendado de mesaøo; ido finis per %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Eraro dum sendado de mesaøo." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Maløuste strukturita elemento por speco %s en \"%s\" linio %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Neniu mailcap-vojo specifita" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "mailcap-regulo por speco %s ne trovita" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: nesufiæe da argumentoj" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: tro da argumentoj" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Mankas temlinio; æu nuligi?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Mankas temlinio; eliras." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Æu respondi al %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Æu respondi grupe al %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Neniuj markitaj mesaøoj estas videblaj!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Æu inkluzivi mesaøon en respondo?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Inkluzivas cititan mesaøon ..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Ne povis inkluzivi æiujn petitajn mesaøojn!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Æu plusendi kiel kunsenda¼on?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Pretigas plusenditan mesaøon ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Æu revoki prokrastitan mesaøon?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Æu redakti plusendatan mesaøon?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Æu nuligi nemodifitan mesaøon?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Nemodifita mesaøon nuligita" + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Mesaøo ne sendita." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Mesaøo prokrastita." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Neniu ricevanto estas specifita!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Neniuj ricevantoj estis specifitaj." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Mankas temlinio; æu haltigi sendon?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Temlinio ne specifita." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Sendas mesaøon ..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Ne povis sendi la mesaøon." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Mesaøo sendita." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Sendas en fono." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Nenia limparametro trovita! (Raportu æi tiun cimon.)" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ne plu ekzistas!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s ne estas normala dosiero." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Ne povas malfermi %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Eraro dum sendado de mesaøo; ido finis per %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Eligo de la liverprocezo" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Malbona IDN %s dum kreado de resent-from." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s ... Eliras.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Ricevis %s ... Eliras.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Ricevis signalon %d ... Eliras.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Fidate " + +#: smime.c:303 +msgid "Verified " +msgstr "Kontrolite " + +#: smime.c:306 +msgid "Unverified" +msgstr "Nekontrolite " + +#: smime.c:309 +msgid "Expired " +msgstr "Eksvalidiøinte" + +#: smime.c:312 +msgid "Revoked " +msgstr "Revokite " + +#: smime.c:315 +msgid "Invalid " +msgstr "Nevalida " + +#: smime.c:318 +msgid "Unknown " +msgstr "Nekonate " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Donu keyID: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME-atestiloj, kiuj kongruas kun \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "Identigilo %s estas nekontrolita. Æu vi volas uzi øin por %s?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Æu uzi (nefidatan!) identigilon %s por %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Æu uzi identigilon %s por %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Averto: Vi ankoraý ne decidis fidi identigilon %s. (ajna klavo por daýrigi)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Nenia (valida) atestilo trovita por %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Eraro: ne povis krei OpenSSL-subprocezon!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "mankas certfile" + +#: smime.c:1200 +msgid "no mbox" +msgstr "mankas poþtfako" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Nenia eliro de OpenSSL." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Averto: intera atestilo ne trovita." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Ne povas malfermi OpenSSL-subprocezon!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Nenia eliro de OpenSSL." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Fino de OpenSSL-eligo --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Eraro: ne povas krei OpenSSL-subprocezon! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- La sekvaj datenoj estas S/MIME-æifritaj --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- La sekvaj datenoj estas S/MIME-subskribitaj --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Fino de S/MIME-æifritaj datenoj. --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Fino de S/MIME-subskribitaj datenoj. --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ordigas poþtfakon ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Ne povis trovi ordigfunkcion! (Raportu æi tiun cimon.)" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(mankas poþtfako)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Patra mesaøo ne estas videbla en æi tiu limigita rigardo." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Patra mesaøo ne estas havebla." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Alvokas PGP ..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Æu redirekti mesaøon al %s ...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Æu redirekti mesaøojn al %s ...?" + +#~ msgid "ewsabf" +#~ msgstr "iskaf" + +#~ msgid "Certificate *NOT* added." +#~ msgstr "Atestilo skribita" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "La valideco de æi tiu ID ne estas difinita." + +#~ msgid "[-- expired. --]\n" +#~ msgstr "[-- eksvalidiøis. --]\n" + +#~ msgid "Decode-save" +#~ msgstr "Malkodita skribi" + +#~ msgid "Decode-copy" +#~ msgstr "Malkodita kopii" + +#~ msgid "Decrypt-save" +#~ msgstr "Malæifrita skribi" + +#~ msgid "Decrypt-copy" +#~ msgstr "Malæifrita kopii" + +#~ msgid "Copy" +#~ msgstr "Kopii" + +#~ msgid "" +#~ "[-- This %s/%s attachment is not included, --]\n" +#~ "[-- and the indicated external source has --]\n" +#~ "[-- expired. --]\n" +#~ msgstr "" +#~ "[-- Æi tiu %s/%s-parto ne estas inkluzivita, --]\n" +#~ "[-- kaj la indikita ekstera fonto estas --]\n" +#~ "[-- eksvalidiøinta. --]\n" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Fino de PGP-eligo --]\n" +#~ "\n" + +#~ msgid "Can't stat %s." +#~ msgstr "Ne povas ekzameni la dosieron %s." + +#~ msgid "Authentication method is unknown." +#~ msgstr "Rajtiøo-metodo ne estas konata." diff --git a/po/es.gmo b/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..b07219321ac835d650c7ccad0dc55575c70b2e02 GIT binary patch literal 64298 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 literal 0 HcmV?d00001 diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..fb164c9 --- /dev/null +++ b/po/es.po @@ -0,0 +1,4286 @@ +# Spanish translation of mutt +# Copyright (C) 1999-2001 Boris Wesslowski <Boris@Wesslowski.com> +msgid "" +msgstr "" +"Project-Id-Version: mutt 1.4\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2001-06-08 19:44+02:00\n" +"Last-Translator: Boris Wesslowski <Boris@Wesslowski.com>\n" +"Language-Team: -\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nombre de usuario en %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Contraseña para %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Salir" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Sup." + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Recuperar" + +#: addrbook.c:36 +msgid "Select" +msgstr "Seleccionar" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Ayuda" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "¡No tiene nombres en la libreta!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Libreta" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Nombre corto: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "¡Este nombre ya está definido en la libreta!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Dirección: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nombre: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] ¿Aceptar?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Guardar en archivo: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Dirección añadida." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "No se pudo encontrar el nombre, ¿continuar?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "La entrada \"compose\" en el archivo Mailcap requiere %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "¡Error al ejecutar \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Error al abrir el archivo para leer las cabeceras." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Error al abrir el archivo para quitar las cabeceras." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"Falta la entrada \"compose\" de mailcap para %s, creando archivo vacío." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "La entrada \"edit\" en el archivo Mailcap requiere %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Falta la entrada \"edit\" para %s en el archivo Mailcap" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "" +"No hay una entrada correspondiente en el archivo mailcap. Viendo como texto." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Tipo MIME no definido. No se puede mostrar el archivo adjunto." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "No se pudo crear el filtro" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "No se pudo crear filtro" + +#: attach.c:824 +msgid "Write fault!" +msgstr "¡Error de escritura!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "¡No sé cómo se imprime eso!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Directorio" + +#: browser.c:42 +msgid "Mask" +msgstr "Patrón" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s no es un directorio." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Buzones [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Suscrito [%s], patrón de archivos: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Directorio [%s], patrón de archivos: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "¡No se puede adjuntar un directorio!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Ningún archivo coincide con el patrón" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Crear sólo está soportado para buzones IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Suprimir sólo está soportado para buzones IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "¿Realmente quiere suprimir el buzón \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "El buzón fue suprimido." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "El buzón no fue suprimido." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Cambiar directorio a:" + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Error leyendo directorio." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Patrón de archivos: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"¿Órden inverso por (f)echa, (t)amaño, (a)lfabéticamente o (s)in órden? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "¿Ordenar por (f)echa, (t)amaño, (a)lfabéticamente o (s)in órden? " + +#: browser.c:1049 +msgid "dazn" +msgstr "fats" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nombre del nuevo archivo: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "No se puede mostrar el directorio" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Error al tratar de mostrar el archivo" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Correo nuevo en %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: color no soportado por la terminal" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: color desconocido" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: objeto desconocido" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: comando sólo válido para objetos en el índice" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: parámetros insuficientes" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Faltan parámetros." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: faltan parámetros" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: faltan parámetros" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: atributo desconocido" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "Faltan parámetros" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "Demasiados parámetros" + +#: color.c:721 +msgid "default colors not supported" +msgstr "No hay soporte para colores estándar" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "¿Verificar firma PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "¡No se pudo crear el archivo temporal!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "No se pudo crear el filtro de muestra" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "No se pudo copiar el mensaje" + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "Firma PGP verificada con éxito." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "Firma PGP NO pudo ser verificada." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Firma PGP verificada con éxito." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "Firma PGP NO pudo ser verificada." + +#: commands.c:223 +msgid "Command: " +msgstr "Comando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Rebotar mensaje a: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Rebotar mensajes marcados a: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "¡Dirección errónea!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Rebotar mensaje a %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Rebotar mensajes a %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Mensaje rebotado." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Mensajes rebotados." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Mensaje rebotado." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Mensajes rebotados." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "No se pudo crear el proceso del filtro" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Redirigir el mensaje al comando:" + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "No ha sido definida la órden de impresión." + +#: commands.c:483 +msgid "Print message?" +msgstr "¿Impimir mensaje?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "¿Imprimir mensajes marcados?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Mensaje impreso" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Mensajes impresos" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "El mensaje no pudo ser imprimido" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Los mensajes no pudieron ser imprimidos" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Órden-rev fech(a)/d(e)/(r)ece/a(s)nto/(p)ara/(h)ilo/(n)ada/ta(m)añ/punta(j): " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Órden fech(a)/d(e)/(r)ecep/a(s)unto/(p)ara/(h)ilo/(n)ada/ta(m)año/punta(j)e: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "aersphnmj" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Comando de shell: " + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s en buzón" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s en buzón" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s en buzón" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s en buzón" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s en buzón" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s en buzón" + +#: commands.c:706 +msgid " tagged" +msgstr " marcado" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Copiando a %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "¿Convertir a %s al mandar?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type cambiado a %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "El mapa de caracteres fue cambiado a %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "dejando sin convertir" + +#: commands.c:914 +msgid "converting" +msgstr "convirtiendo" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "No hay archivos adjuntos." + +#: compose.c:84 +msgid "Send" +msgstr "Mandar" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Abortar" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Adjuntar archivo" + +#: compose.c:90 +msgid "Descrip" +msgstr "Descrip" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Firmar, cifrar" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Cifrar" + +#: compose.c:131 +msgid "Sign" +msgstr "Firmar" + +#: compose.c:133 +msgid "Clear" +msgstr "En claro" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " firmar como: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<por defecto>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Cifrar" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "¿co(d)ificar, f(i)rmar (c)omo, amb(o)s o ca(n)celar? " + +#: compose.c:166 +#, fuzzy +msgid "esabf" +msgstr "dicon" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Firmar como: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "¿co(d)ificar, f(i)rmar (c)omo, amb(o)s o ca(n)celar? " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "dicon" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "¡%s [#%d] ya no existe!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] modificado. ¿Rehacer codificación?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Archivos adjuntos" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "No puede borrar la única pieza." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Adjuntando archivos seleccionados..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "¡Imposible adjuntar %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Abrir buzón para adjuntar mensaje de" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "No hay mensajes en esa carpeta." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Marque el mensaje que quiere adjuntar." + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "¡Imposible adjuntar!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Recodificado sólo afecta archivos adjuntos de tipo texto." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "El archivo adjunto actual no será convertido." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "El archivo adjunto actual será convertido." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "La codificación no es válida." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "¿Guardar una copia de este mensaje?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Renombrar a: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "No se pudo encontrar en disco: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Archivo nuevo: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type es de la forma base/subtipo" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Content-Type %s desconocido" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "No se pudo creal el archivo %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Lo que tenemos aquí es un fallo al producir el archivo a adjuntar" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "¿Posponer el mensaje?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Guardar mensaje en el buzón" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Escribiendo mensaje en %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Mensaje escrito." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Salida de PGP a continuación (tiempo actual: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "Contraseña PGP olvidada." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Entre contraseña PGP:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Entre contraseña PGP:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "¿Crear un mensaje de tipo application/pgp?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Invocando PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Error: ¡Estructura multipart/signed inconsistente! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Error: ¡Protocolo multipart/signed %s desconocido! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Advertencia: No se pudieron verificar %s/%s firmas. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Los siguientes datos están firmados --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Advertencia: No se pudieron encontrar firmas. --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Fin de datos firmados --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "sí" + +#: curs_lib.c:158 +msgid "no" +msgstr "no" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "¿Salir de Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "error desconocido" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Presione una tecla para continuar..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' para lista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Ningún buzón está abierto." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "No hay mensajes." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "El buzón es de sólo lectura." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Función no permitida en el modo de adjuntar mensaje." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "No hay mensajes visibles." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "¡No se puede cambiar a escritura un buzón de sólo lectura!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Los cambios al buzón seran escritos al salir del mismo." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Los cambios al buzón no serán escritos." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Salir" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Guardar" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Nuevo" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Responder" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupo" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Buzón fue modificado. Los indicadores pueden estar mal." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Correo nuevo en este buzón." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Buzón fue modificado externamente." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "No hay mensajes marcados." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Conectando a %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Saltar a mensaje: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argumento tiene que ser un número de mensaje." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Ese mensaje no es visible." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Número de mensaje erróneo." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Suprimir mensajes que coincidan con: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "No hay patrón limitante activo." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Límite: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limitar a mensajes que coincidan con: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "¿Salir de Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Marcar mensajes que coincidan con: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "No suprimir mensajes que coincidan con: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Desmarcar mensajes que coincidan con: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Abrir buzón en modo de sólo lectura" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Abrir buzón" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s no es un buzón." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "¿Salir de Mutt sin guardar?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Está en el último mensaje." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "No hay mensajes sin suprimir." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Está en el primer mensaje." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "La búsqueda volvió a empezar desde arriba." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "La búsqueda volvió a empezar desde abajo." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "No hay mensajes nuevos" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "No hay mensajes sin leer" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " en esta vista limitada" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "No se pueden editar mensajes en el servidor POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "No hay mas hilos." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Ya está en el primer hilo." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "La muestra por hilos no está activada." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "El hilo contiene mensajes sin leer." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "No se pueden editar mensajes en el servidor POP." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tRenglón empieza con una tilde.\n" +"~b usuarios\tañadir usuarios al campoBcc:\n" +"~c usuarios\tañadir usuarios al camp Cc:\n" +"~f mensajes\tincluir mensajes.\n" +"~F mensajes\tlo mismo que ~f, pero con el encabezado.\n" +"~h\t\teditar el encabezado del mensaje.\n" +"~m mensajes\tincluir y citar mensajes.\n" +"~M mensajes\tlo mismo que ~m, pero con el encabezado.\n" +"~p\t\timprimir el mensaje.\n" +"~q\t\tguardar archivo y salir del editor.\n" +"~r archivo\t\tleer un archivo con el editor.\n" +"~t usuarios\tañadir usuarios al campo To:\n" +"~u\t\teditar el renglón anterior.\n" +"~v\t\teditar mensaje con el editor definido en $visual .\n" +"~w archivo\tescribir mensaje a un archivo.\n" +"~x\t\tcancelar cambios y salir del editor.\n" +"~?\t\teste mensaje.\n" +".\t\tsólo en un renglón finaliza la entrada.\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: número de mensaje erróneo.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Termine el mensaje con un . sólo en un renglón)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "No hay buzón.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Mensaje contiene:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(continuar)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "falta el nombre del archivo.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "No hay renglones en el mensaje.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: comando de editor deconocido (~? para ayuda)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "no se pudo crear la carpeta temporal: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "no se pudo escribir la carpeta temporal: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "no se pudo escribir la carpeta temporal: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "¡El archivo del mensaje está vacío!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "¡El mensaje no fue modificado!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "No se pudo abrir el archivo del mensaje: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "No se pudo agregar a la carpeta: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Error. Preservando el archivo temporal: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Poner indicador" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Quitar indicador" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- ¡Error: no se pudo mostrar ninguna parte de multipart/alternative! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Archivo adjunto #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tipo: %s/%s, codificación: %s, tamaño: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automuestra usando %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Invocando comando de automuestra: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- No se puede ejecutar %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Error al ejecutar %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Error: Contenido message/external no tiene parámetro acces-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Este archivo adjunto %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(tamaño %s bytes) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "ha sido suprimido --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- el %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nombre: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Este archivo adjunto %s/%s " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- Este archivo adjunto %s/%s no está incluido --]\n" +"[-- y la fuente externa indicada ha expirado. --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- Este archivo adjunto %s/%s no está incluido --]\n" +"[-- y el tipo de acceso indicado %s no está soportado --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Error: multipart/signed no tiene protocolo." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Error: ¡multipart/encrypted no tiene parámetro de protocolo!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "¡Imposible abrir archivo temporal!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s no está soportado " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(use '%s' para ver esta parte)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(necesita 'view-attachments' enlazado a una tecla)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: imposible adjuntar archivo" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERROR: por favor reporte este fallo" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<DESCONOCIDO>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Enlaces genéricos:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funciones sin enlazar:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Ayuda para %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: No se puede desenganchar * desde dentro de un gancho." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: tipo de gancho desconocido: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: No se puede suprimir un %s desde dentro de un %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Falta un método de verificación de autentidad" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Verificando autentidad (anónimo)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Autentidad anónima falló." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Verificando autentidad (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Verificación de autentidad CRAM-MD5 falló." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Verificando autentidad (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Verificación de autentidad GSSAPI falló." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN desactivado en este servidor." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Entrando..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "El login falló." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Verificando autentidad (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Verificación de autentidad SASL falló." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Consiguiendo espacio de nombres..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Consiguiendo lista de carpetas..." + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s: color desconocido" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Crear buzón: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "El buzón tiene que tener un nombre." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Buzón creado." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Buzón cerrado" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "¡Error fatal! La cuenta de mensajes no está sincronizada." + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Cerrando conexión a %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Este servidor IMAP es ancestral. Mutt no puede trabajar con el." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "¿Asegurar conexión con TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "No se pudo negociar una conexión TLS" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Seleccionando %s..." + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "¡Error al escribir el buzón!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "No es posible agregar a buzones IMAP en este servidor." + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "¿Crear %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Cerrando conexión al servidor IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Marcando %d mensajes como suprimidos..." + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "CLOSE falló" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Guardando indicadores de estado de mensajes... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Eliminando mensajes del servidor..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE falló" + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "Crear buzón: " + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Suscribiendo a %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Desuscribiendo de %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "" +"No se pueden recoger cabeceras de mensajes de esta versión de servidor IMAP." + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "¡No se pudo crear el archivo temporal!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Consiguiendo cabeceras de mensajes... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Consiguiendo mensaje..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "El índice de mensajes es incorrecto. Intente reabrir el buzón." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Subiendo mensaje ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Copiando %d mensajes a %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Copiando mensaje %d a %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "¿Continuar?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: sin dirección" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "encabezado erróneo" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: órden desconocido" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): error en expresión regular: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: variable desconocida" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefijo es ilegal con reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "valor es ilegal con reset" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s está activada" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s no está activada" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: tipo de buzón inválido" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: valor inválido" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: tipo desconocido" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: tipo desconocido" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "No se pudo encontrar en disco: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s no es un buzón." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Error en %s, renglón %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: errores en %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: lectura fue cancelada por demasiados errores en %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: errores en %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: demasiados parámetros" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: comando desconocido" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Error en línea de comando: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "imposible determinar el directorio del usuario" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "imposible determinar nombre del usuario" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Bucle de macros detectado." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "La tecla no tiene enlace a una función." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Tecla sin enlace. Presione '%s' para obtener ayuda." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: demasiados parámetros" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: menú desconocido" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "sequencia de teclas vacía" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: demasiados parámetros" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: función deconocida" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: sequencia de teclas vacía" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: demasiados parámetros" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec: faltan parámetros" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s: función deconocida" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Entre keyID para %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "operación nula" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "forzar la muestra de archivos adjuntos usando mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "mostrar archivos adjuntos como texto" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Cambiar muestra de subpartes" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ir al final de la página" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "reenviar el mensaje a otro usuario" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "seleccione un archivo nuevo en este directorio" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ver archivo" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "mostrar el nombre del archivo seleccionado" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "suscribir al buzón actual (sólo IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "desuscribir al buzón actual (sólo IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "cambiar entre ver todos los buzones o sólo los suscritos (sólo IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Ningún buzón con correo nuevo." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "cambiar directorio" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "revisar buzones por correo nuevo" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "adjuntar archivo(s) a este mensaje" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "adjuntar mensaje(s) a este mensaje" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "editar el campo BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "editar el campo CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "editar la descripción del archivo adjunto" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "editar la codificación del archivo adjunto" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "guardar copia de este mensaje en archivo" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "editar el archivo a ser adjunto" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "editar el campo de from" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "editar el mensaje con cabecera" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "editar el mensaje" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "editar el archivo adjunto usando la entrada mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "editar el campo Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "editar el asunto de este mensaje (subject)" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "editar el campo TO" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "crear un buzón nuevo (sólo IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "editar el tipo de archivo adjunto" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "producir copia temporal del archivo adjunto" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "Corrección ortográfica via ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "producir archivo a adjuntar usando entrada mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "marcar/desmarcar este archivo adjunto para ser recodificado" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "guardar este mensaje para enviarlo después" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "renombrar/mover un archivo adjunto" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "enviar el mensaje" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "cambiar disposición entre incluido/archivo adjunto" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "cambiar si el archivo adjunto es suprimido después de enviarlo" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "refrescar la información de codificado del archivo adjunto" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "guardar el mensaje en un buzón" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "copiar un mensaje a un archivo/buzón" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "crear una entrada en la libreta con los datos del mensaje actual" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "mover entrada hasta abajo en la pantalla" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "mover entrada al centro de la pantalla" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "mover entrada hasta arriba en la pantalla" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "crear copia decodificada (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "crear copia decodificada (text/plain) y suprimir" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "suprimir" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "suprimir el buzón actual (sólo IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "suprimir todos los mensajes en este subhilo" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "suprimir todos los mensajes en este hilo" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "mostrar dirección completa del autor" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "mostrar mensaje y cambiar la muestra de todos los encabezados" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "mostrar el mensaje" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "editar el mensaje completo" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "suprimir el caracter anterior al cursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "mover el cursor un caracter a la izquierda" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "mover el cursor al principio de la palabra" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "saltar al principio del renglón" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "cambiar entre buzones de entrada" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "completar nombres de archivos o nombres en libreta" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "completar dirección con pregunta" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "suprimir el caracter bajo el cursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "saltar al final del renglón" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "mover el cursor un caracter a la derecha" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "mover el cursor al final de la palabra" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "mover hacia atrás en el historial de comandos" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "mover hacia atrás en el historial de comandos" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "suprimir caracteres desde el cursor hasta el final del renglón" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "suprimir caracteres desde el cursor hasta el final de la palabra" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "suprimir todos lod caracteres en el renglón" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "suprimir la palabra anterior al cursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "marcar como cita la próxima tecla" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "transponer el caracter bajo el cursor con el anterior" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "capitalizar la palabra" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "convertir la palabra a minúsculas" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "convertir la palabra a mayúsculas" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "entrar comando de muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "entrar un patrón de archivos" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "salir de este menú" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrar archivos adjuntos con un comando de shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "mover la primera entrada" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "marcar/desmarcar el mensaje como 'importante'" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "Reenviar el mensaje con comentrarios" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "seleccionar la entrada actual" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "responder a todos los destinatarios" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "media página hacia abajo" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "media página hacia arriba" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "esta pantalla" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "saltar a un número del índice" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ir a la última entrada" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "responder a la lista de correo" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "ejecutar un macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "escribir un mensaje nuevo" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "abrir otro buzón" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "abrir otro buzón en modo de sólo lectura" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "quitarle un indicador a un mensaje" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "suprimir mensajes que coincidan con un patrón" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "forzar el obtener correo de un servidor IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "obtener correo de un servidor POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ir al primer mensaje" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ir al último mensaje" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "mostrar sólo mensajes que coincidan con un patrón" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "saltar al próximo mensaje nuevo" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "saltar al próximo mensaje sin leer" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "saltar al próximo subhilo" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "saltar al próximo hilo" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ir al próximo mensaje no borrado" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "saltar al próximo mensaje sin leer" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "saltar al mensaje anterior en el hilo" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "saltar al hilo anterior" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "saltar al subhilo anterior" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ir al mensaje no borrado anterior" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "saltar al mensaje nuevo anterior" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "saltar al mensaje sin leer anterior" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "saltar al mensaje sin leer anterior" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "marcar el hilo actual como leído" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "marcar el subhilo actual como leído" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "ponerle un indicador a un mensaje" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "guardar cabios al buzón" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "marcar mensajes que coincidan con un patrón" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "restaurar mensajes que coincidan con un patrón" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "quitar marca de los mensajes que coincidan con un patrón" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ir al centro de la página" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ir a la próxima entrada" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "bajar un renglón" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ir a la próxima página" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "saltar al final del mensaje" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "cambiar muestra del texto citado" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "saltar atrás del texto citado" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "saltar al principio del mensaje" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "filtrar mensaje/archivo adjunto via un comando de shell" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ir a la entrada anterior" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "subir un renglón" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ir a la página anterior" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "imprimir la entrada actual" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "Obtener direcciones de un programa externo" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "agregar nuevos resultados de la búsqueda a anteriores" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "guardar cambios al buzón y salir" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "reeditar mensaje pospuesto" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "refrescar la pantalla" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interno}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "responder a un mensaje" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "usar el mensaje actual como base para uno nuevo" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "guardar mensaje/archivo adjunto en un archivo" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "buscar con una expresión regular" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "buscar con una expresión regular hacia atrás" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "buscar próxima coincidencia" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "buscar próxima coincidencia en dirección opuesta" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "cambiar coloración de patrón de búsqueda" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "invocar comando en un subshell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ordenar mensajes" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ordenar mensajes en órden inverso" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "marcar la entrada actual" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "aplicar la próxima función a los mensajes marcados" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "aplicar la próxima función a los mensajes marcados" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "marcar el subhilo actual" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "marcar el hilo actual" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "cambiar el indicador de 'nuevo' de un mensaje" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "cambiar si los cambios del buzón serán guardados" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "cambiar entre ver buzones o todos los archivos al navegar" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ir al principio de la página" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "restaurar la entrada actual" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "restaurar todos los mensajes del hilo" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "restaurar todos los mensajes del subhilo" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "mostrar el número de versión y fecha de Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "mostrar archivo adjunto usando entrada mailcap si es necesario" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "mostrar archivos adjuntos tipo MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "mostrar patrón de limitación activo" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "colapsar/expander hilo actual" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "colapsar/expander todos los hilos" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "adjuntar clave PGP pública" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "mostrar opciones PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "enviar clave PGP pública" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "verificar clave PGP pública" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "mostrar la identificación del usuario de la clave" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "verificar presencia de un pgp clásico" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Aceptar la cadena construida" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Agregar un remailer a la cadena" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Poner un remailer en la cadena" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Suprimir un remailer de la cadena" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Seleccionar el elemento anterior en la cadena" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Seleccionar el siguiente elemento en la cadena" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "enviar el mensaje a través de una cadena de remailers mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "crear copia descifrada y suprimir " + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "crear copia descifrada" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "borrar contraseña PGP de la memoria" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "extraer claves PGP públicas" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "mostrar opciones PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "¡Sin memoria!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Para contactar a los desarrolladores mande un mensaje a <mutt-dev@mutt." +"org>.\n" +"Para reportar un fallo use la utilería flea(1) por favor.\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins y otros.\n" +"Mutt viene con ABSOLUTAMENTE NINGUNA GARANTÍA; para obtener detalles\n" +"teclee `mutt -vv'. Mutt es software libre, puede redistribuirlo\n" +"bajo ciertas condiciones; teclee `mutt -vv' para más detalles.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Muchos otros no mencionados aqui contribuyeron mucho código,\n" +"mejoras y sugerencias.\n" +"\n" +"La traducción al español fue hecha por Boris Wesslowski <Boris@Wesslowski." +"com>.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"uso: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <arch> ] [ -m <tipo> ] [ -f <arch> ]\n" +" mutt [ -nx ] [ -e <cmd> ] [ -a <arch> ] [ -F <arch> ] [ -H <arch> ] [ -" +"i <arch> ] [ -s <asunto> ] [ -b <dir> ] [ -c <dir> ] <dir> [ ... ]\n" +" mutt [ -n ] [ -e <cmd> ] [ -F <archivo> ] -p\n" +" mutt -v[v]\n" +"\n" +"opciones:\n" +" -a <archivo>\tañadir un archivo al mensaje\n" +" -b <dirección>\tespecifica una dirección para enviar copia ciega (BCC)\n" +" -c <dirección>\tespecifica una dirección para enviar copia (CC)\n" +" -e <comando>\tespecifica un comando a ser ejecutado al empezar\n" +" -f <archivo>\tespecifica un buzón a leer\n" +" -F <archivo>\tespecifica un archivo muttrc alterno\n" +" -H <archivo>\tespecifica un archivo para obtener una cabecera\n" +" -i <archivo>\tespecifica un archivo a incluir en la respuesta\n" +" -m <tipo>\tespecifica un tipo de buzón\n" +" -n\t\tproduce que Mutt no lea el archivo Muttrc del sistema\n" +" -p\t\tcontinuar un mensaje pospuesto\n" +" -R\t\tabrir un buzón en modo de solo-lectura\n" +" -s <asunto>\tespecifica el asunto (necesita comillas si contiene " +"espacios)\n" +" -v\t\tmuestra versión y opciones definidas al compilar\n" +" -x\t\tsimula el modo de envío mailx\n" +" -y\t\tselecciona un buzón especificado en su lista `mailboxes'\n" +" -z\t\tsalir inmediatamente si no hay mensajes en el buzón\n" +" -Z\t\tabrir la primera carpeta con mensajes nuevos, salir si no hay\n" +" -h\t\teste mensaje de ayuda" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opciones especificadas al compilar:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Error al inicializar la terminal." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Modo debug a nivel %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG no fue definido al compilar. Ignorado.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s no existe. ¿Crearlo?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "No se pudo crear %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "No hay destinatario.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: imposible adjuntar archivo.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Ningún buzón con correo nuevo." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Ningún buzón de entrada fue definido." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "El buzón está vacío." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Leyendo %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "¡El buzón está corrupto!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "¡El buzón fue corrupto!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "¡Error fatal! ¡No se pudo reabrir el buzón!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "¡Imposible bloquear buzón!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: buzón modificado, ¡pero sin mensajes modificados! (reporte este fallo)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Guardando mensajes... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "Compilando patrón de búsqueda..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "¡La escritura falló! Buzón parcial fue guardado en %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "¡Imposible reabrir buzón!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Reabriendo buzón..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Saltar a: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Número de índice inválido." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "No hay entradas." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Ya no puede bajar más." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Ya no puede subir más." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Está en la última página." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Está en la primera página." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "La primera entrada está siendo mostrada." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "La última entrada está siendo mostrada." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Está en la última entrada." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Está en la primera entrada." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Buscar por: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Buscar en sentido opuesto: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Nada que buscar." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "No fue encontrado." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "No hay entradas marcadas." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "No puede buscar en este menú." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Saltar no está implementado para diálogos." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Marcar no está soportado." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Leyendo %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Archivo es un directorio, ¿guardar en él?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Archivo es un directorio, ¿guardar en él?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Archivo bajo directorio: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "El archivo existe, ¿(s)obreescribir, (a)gregar o (c)ancelar?" + +#: muttlib.c:869 +msgid "oac" +msgstr "sac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "No se puede guardar un mensaje en un buzón POP." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "¡%s no es un buzón!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "¿Agregar mensajes a %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Conexión a %s cerrada" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL no está disponible." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "La órden anterior a la conexión falló." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Error al hablar con %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Buscando %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "No se encontró la dirección del servidor %s" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Conectando a %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "No se pudo conectar a %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "No se pudo encontrar suficiente entropía en su sistema" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Llenando repositorio de entropía: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "¡%s tiene derechos inseguros!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL fue desactivado por la falta de entropía" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "CLOSE falló" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Imposible recoger el certificado de la contraparte" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Conectando por SSL con %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Desconocido" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[imposible calcular]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[fecha inválida]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Certificado del servidor todavía no es válido" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Certificado del servidor ha expirado" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Este certificado pertenece a:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Este certificado fue producido por:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Este certificado es válido" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " de %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " a %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Huella: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Prueba del certificado SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)echazar, aceptar (u)na vez, (a)ceptar siempre" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "rua" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)echazar, aceptar (u)na vez" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ru" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Salir " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Advertencia: no se pudo guardar el certificado" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "El certificado fue guardado" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Cuenta de bloqueo excedida, ¿quitar bloqueo de %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "No se pudo bloquear %s con dotlock.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "¡Bloqueo fcntl tardó demasiado!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Esperando bloqueo fcntl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "¡Bloqueo flock tardó demasiado!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Esperando bloqueo flock... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "No se pudo bloquear %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Leyendo %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Escribiendo %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "¡No se pudo sincronizar el buzón %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "¿Mover mensajes leidos a %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "¿Expulsar %d mensaje suprimido?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "¿Expulsar %d mensajes suprimidos?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Moviendo mensajes leídos a %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Buzón sin cambios." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "quedan %d, %d movidos, %d suprimidos." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "quedan %d, %d suprimidos." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Presione '%s' para cambiar escritura" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "¡Use 'toggle-write' para activar escritura!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Buzón está marcado inescribible. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "El buzón fue marcado." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "No se pudo escribir el mensaje" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "No disponible en este menú." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PágAnt" + +#: pager.c:1447 +msgid "NextPg" +msgstr "PróxPág" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Adjuntos" + +#: pager.c:1454 +msgid "Next" +msgstr "Sig." + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "El final del mensaje está siendo mostrado." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "El principio del mensaje está siendo mostrado." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Buscar hacia atrás: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Buscar: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "La ayuda está siendo mostrada." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "No hay mas texto citado." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "No hay mas texto sin citar bajo el texto citado." + +# boundary es un parámetro definido por el estándar MIME +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "¡mensaje multiparte no tiene parámetro boundary!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Error en expresión: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Día inválido del mes: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Mes inválido: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Fecha relativa incorrecta: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "error en expresión" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "error en patrón en: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: comando inválido" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: no soportado en este modo" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "falta un parámetro" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "paréntesis sin contraparte: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "patrón vacío" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "error: op %d desconocida (reporte este error)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Compilando patrón de búsqueda..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Ejecutando comando en mensajes que coinciden..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Ningún mensaje responde al criterio dado." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "La búsqueda llegó al final sin encontrar nada." + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "La búsqueda llegó al principio sin encontrar nada." + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Búsqueda interrumpida." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Contraseña PGP olvidada." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ¡Error: imposible crear subproceso PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Fin de salida PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PRINCIPIO DEL MENSAJE PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PRINCIPIO DEL BLOQUE DE CLAVES PÚBLICAS PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PRINCIPIO DEL MENSAJE FIRMADO CON PGP --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- FIN DEL MENSAJE PGP --]\n" +"\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- FIN DEL BLOQUE DE CLAVES PÚBLICAS PGP --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- FIN DEL MENSAJE FIRMADO CON PGP --]\n" +"\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ¡Error: no se encontró el principio del mensaje PGP! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Error interno. Informe a <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- ¡Error: imposible crear subproceso PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ¡Error: mensaje PGP/MIME mal formado! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ¡Error: no se pudo cear archivo temporal! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Lo siguiente está cifrado con PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- Fin de datos cifrados con PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "¡No se pudo abrir subproceso PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "¿Usar keyID = \"%s\" para %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Entre keyID para %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "No se pudo invocar PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Recogiendo clave PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Todas las llaves que coinciden están marcadas expiradas/revocadas." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Seleccionar " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Verificar clave " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Claves PGP que coinciden con <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Claves PGP que coinciden con \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "No se pudo abrir /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "No se pudo crear archivo temporal" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Key ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Esta clave no se puede usar: expirada/desactivada/revocada." + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "Esta clave está expirada/desactivada/revocada" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Esta ID no es de confianza." + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "Esta ID es marginalmente de confianza." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ¿Realmente quiere utilizar la llave?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Por favor entre la identificación de la clave: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Invocando pgp..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Clave PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Buscando claves que coincidan con \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "La órden TOP no es soportada por el servidor." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "¡No se pudo escribir la cabecera al archivo temporal!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "La órden UIDL no es soportada por el servidor." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Consiguiendo la lista de mensajes..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "¡No se pudo escribir el mensaje al archivo temporal!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Revisando si hay mensajes nuevos..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "El servidor POP no fue definido." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "No hay correo nuevo en el buzón POP." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "¿Suprimir mensajes del servidor?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Leyendo mensajes nuevos (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "¡Error al escribir el buzón!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d de %d mensajes leídos]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "¡El servidor cerró la conneción!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Verificando autentidad (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Verificando autentidad (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Verificación de autentidad APOP falló." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "La órden USER no es soportada por el servidor." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "No es posible dejar los mensajes en el servidor." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Error al conectar al servidor: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Cerrando conexión al servidor POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Verificando índice de mensajes..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Conexión perdida. ¿Reconectar al servidor POP?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Mensajes pospuestos" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "No hay mensajes pospuestos." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Cabecera PGP illegal" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Cabecera PGP illegal" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "El login falló." + +#: query.c:46 +msgid "New Query" +msgstr "Nueva indagación" + +#: query.c:47 +msgid "Make Alias" +msgstr "Producir nombre corto" + +#: query.c:48 +msgid "Search" +msgstr "Buscar" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Esperando respuesta..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "El comando de indagación no fue definido." + +#: query.c:286 +msgid "Query" +msgstr "Indagación" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Indagar: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Indagar '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Redirigir" + +#: recvattach.c:53 +msgid "Print" +msgstr "Imprimir" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Guardando..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Archivo adjunto guardado." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "¡Atención! Está a punto de sobreescribir %s, ¿continuar?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Archivo adjunto filtrado." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrar a través de: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Redirigir a: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "¡No sé cómo imprimir archivos adjuntos %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "¿Imprimir archivo(s) adjunto(s) marcado(s)?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "¿Imprimir archivo adjunto?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "No fue encontrado ningún mensaje marcado." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Archivos adjuntos" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "¡No hay subpartes para mostrar!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "No se puede suprimir un archivo adjunto del servidor POP." + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Suprimir archivos adjuntos de mensajes PGP no es soportado." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Suprimir sólo es soportado con archivos adjuntos tipo multiparte." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Solo puede rebotar partes tipo message/rfc822." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Error al enviar el mensaje." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Error al enviar el mensaje." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "No se pudo abrir el archivo temporal %s" + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "¿Adelatar como archivos adjuntos?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"No se pudieron decodificar todos los archivos adjuntos marcados. ¿Adelantar " +"los otros por MIME?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "¿Adelantar con encapsulado MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "No se pudo crear %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "No fue encontrado ningún mensaje marcado." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "¡Ninguna lista de correo encontrada!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"No se pudieron decodificar todos los archivos adjuntos marcados. " +"¿Encapsular los otros por MIME?" + +#: remailer.c:480 +msgid "Append" +msgstr "Adjuntar" + +#: remailer.c:481 +msgid "Insert" +msgstr "Insertar" + +#: remailer.c:482 +msgid "Delete" +msgstr "Suprimir" + +#: remailer.c:484 +msgid "OK" +msgstr "Aceptar" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "¡No se pudo obtener el type2.list del mixmaster!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Seleccionar una cadena de remailers." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Error: %s no puede ser usado como remailer final de una cadena." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Las cadenas mixmaster están limitadas a %d elementos." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "La cadena de remailers ya está vacía." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Ya tiene el primer elemento de la cadena seleccionado." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Ya tiene el último elemento de la cadena seleccionado." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster no acepta cabeceras Cc or Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"¡Por favor ajuste la variable hostname a un valor correcto si usa mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Error al enviar mensaje, proceso hijo terminó %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Error al enviar el mensaje." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Entrada mal formateada para el tipo %s en \"%s\" renglón %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Ruta para mailcap no especificada" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Entrada mailcap para tipo %s no encontrada" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: faltan parámetros" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: demasiados parámetros" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Sin asunto, ¿cancelar?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Sin asunto, cancelando." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "¿Responder a %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "¿Responder a %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "¡No hay mensajes marcados visibles!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "¿Incluir mensaje en respuesta?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Incluyendo mensaje citado..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "¡No se pudieron incluir todos los mensajes pedidos!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "¿Adelatar como archivo adjunto?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Preparando mensaje reenviado..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "¿Continuar mensaje pospuesto?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Preparando mensaje reenviado..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "¿Cancelar mensaje sin cambios?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Mensaje sin cambios cancelado." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Mensaje no enviado." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Mensaje pospuesto." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "¡No especificó destinatarios!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "No especificó destinatarios." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Falta el asunto, ¿cancelar envío?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Asunto no fue especificado." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Enviando mensaje..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "No se pudo enviar el mensaje." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Mensaje enviado." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Enviando en un proceso en segundo plano." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "El parámetro límite no fue encontrado. [reporte este error]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "¡%s ya no existe!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s no es un buzón." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "No se pudo abrir %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Error al enviar mensaje, proceso hijo terminó %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Salida del proceso de repartición de correo" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Saliendo.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "\"%s\" recibido... Saliendo.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Señal %d recibida... Saliendo.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Salir " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Mes inválido: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Desconocido" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Entre keyID para %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Claves PGP que coinciden con \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "¿Usar keyID = \"%s\" para %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "¿Usar keyID = \"%s\" para %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- ¡Error: imposible crear subproceso PGP! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "No se pudo crear el filtro" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(ningún buzón)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Advertencia: no se pudo guardar el certificado" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "¡No se pudo abrir subproceso PGP!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Fin de salida PGP --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ¡Error: imposible crear subproceso PGP! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Lo siguiente está cifrado con PGP/MIME --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Los siguientes datos están firmados --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Fin de datos cifrados con PGP/MIME --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Fin de datos firmados --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ordenando buzón..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "¡No se pudo encontrar la función para ordenar! [reporte este fallo]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(ningún buzón)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "El mensaje anterior no es visible en vista limitada" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "El mensaje anterior no está disponible." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Invocando pgp..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "¿Rebotar mensaje a %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "¿Rebotar mensajes a %s...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "dicon" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "El certificado fue guardado" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "El nivel de confianza de esta ID no está definido." + +#~ msgid "Decode-save" +#~ msgstr "Guardar decodificado" + +#~ msgid "Decode-copy" +#~ msgstr "Copiar decodificado" + +#~ msgid "Decrypt-save" +#~ msgstr "Guardar descifrado" + +#~ msgid "Decrypt-copy" +#~ msgstr "Copiar descifrado" + +#~ msgid "Copy" +#~ msgstr "Copiar" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Fin de salida PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "No se pudo encontrar en disco: %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: comando desconocido" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Método de verificación de autentidad desconocido." diff --git a/po/et.gmo b/po/et.gmo new file mode 100644 index 0000000000000000000000000000000000000000..45d04541692e527b156422d03fef7e08ecc8e039 GIT binary patch literal 72107 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 K6a+{9)AS#n&ty#i literal 0 HcmV?d00001 diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..4159182 --- /dev/null +++ b/po/et.po @@ -0,0 +1,4169 @@ +# Estonian translations for mutt. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Toomas Soome <tsoome@muhv.pri.ee>, 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: mutt 1.5.2\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2002-12-09 17:19+02:00\n" +"Last-Translator: Toomas Soome <tsoome@muhv.pri.ee>\n" +"Language-Team: Estonian <et@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Kasutajanimi serveril %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s parool: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Välju" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Kustuta" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Taasta" + +#: addrbook.c:36 +msgid "Select" +msgstr "Vali" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Appi" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Tei pole hüüdnimesid!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Hüüdnimed" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Hüüdnimeks: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Teil on juba selle nimeline hüüdnimi!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Hoiatus: See hüüdnimi ei pruugi toimida. Parandan?" + +#: alias.c:279 +msgid "Address: " +msgstr "Aadress: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Isiku nimi: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Nõus?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Salvestan faili: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Hüüdnimi on lisatud." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Nimemuster ei sobi, jätkan?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap koostamise kirje nõuab %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Viga \"%s\" käivitamisel!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Faili avamine päiste analüüsiks ebaõnnestus." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Faili avamine päiste eemaldamiseks ebaõnnestus." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Mailcap koostamise kirjet %s jaoks puudub, loon tühja faili." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Mailcap toimeta kirje nõuab %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Mailcap toimeta kirjet %s jaoks ei ole." + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Sobivat mailcap kirjet pole. Käsitlen tekstina." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME tüüp ei ole defineeritud. Lisa ei saa vaadata." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Filtri loomine ebaõnnestus" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Ei õnnestu luua filtrit" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Viga kirjutamisel!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Ma ei tea, kuidas seda trükkida!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Chdir" + +#: browser.c:42 +msgid "Mask" +msgstr "Mask" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ei ole kataloog." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Postkastid [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Tellitud [%s], faili mask: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Kataloog [%s], failimask: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Kataloogi ei saa lisada!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Maskile vastavaid faile ei ole" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Luua saab ainult IMAP postkaste" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Kustutada saab ainult IMAP postkaste" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Kas tõesti kustutada postkast \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Postkast on kustutatud." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Postkasti ei kustutatud." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Mine kataloogi: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Viga kataloogi skaneerimisel." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Failimask: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Järjestan tagurpidi (k)uup., (t)ähest., (s)uuruse järgi või (e)i järjesta? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Järjestan (k)uup., (t)ähest., (s)uuruse järgi või (e)i järjesta? " + +#: browser.c:1049 +msgid "dazn" +msgstr "ktse" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Uus failinimi: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Kataloogi ei saa vaadata" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Viga faili vaatamisel" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Uus kiri kaustas " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: terminal ei toeta värve" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s. sellist värvi ei ole" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: sellist objekti ei ole" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: käsk kehtib ainult indekseeritud objektiga" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: liiga vähe argumente" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Puuduvad argumendid." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: liiga vähe argumente" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: liiga vähe argumente" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s. sellist atribuuti pole" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "liiga vähe argumente" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "liiga palju argumente" + +#: color.c:721 +msgid "default colors not supported" +msgstr "vaikimisi värve ei toetata" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Kontrollin PGP allkirja?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Ei õnnestu luua ajutist faili!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Filtri loomine ebaõnnestus" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Teadet ei õnnestu kopeerida." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME allkiri on edukalt kontrollitud." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "S/MIME sertifikaadi omanik ei ole kirja saatja." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME allkirja EI ÕNNESTU kontrollida." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP allkiri on edukalt kontrollitud." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP allkirja EI ÕNNESTU kontrollida." + +#: commands.c:223 +msgid "Command: " +msgstr "Käsklus: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Peegelda teade aadressile: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Peegelda märgitud teated aadressile: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Viga aadressi analüüsimisel!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Peegelda teade aadressile %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Peegelda teated aadressile %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Teade on peegeldatud." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Teated on peegeldatud." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Teade on peegeldatud." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Teated on peegeldatud." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Filterprotsessi loomine ebaõnnestus" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Toruga käsule: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Trükkimise käsklust ei ole defineeritud." + +#: commands.c:483 +msgid "Print message?" +msgstr "Trükin teate?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Trükin märgitud teated?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Teade on trükitud" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Teated on trükitud" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Teadet ei saa trükkida" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Teateid ei saa trükkida" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Käsurea käsk: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Dekodeeri-salvesta%s postkasti" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Dekodeeri-kopeeri%s postkasti" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Dekrüpti-salvesta%s postkasti" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Dekrüpti-kopeeri%s postkasti" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Salvesta%s postkasti" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopeeri%s postkasti" + +#: commands.c:706 +msgid " tagged" +msgstr " märgitud" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopeerin kausta %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Teisendan saatmisel kooditabelisse %s?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Sisu tüübiks on nüüd %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Kooditabeliks on nüüd %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "ei teisenda" + +#: commands.c:914 +msgid "converting" +msgstr "teisendan" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Lisasid ei ole." + +#: compose.c:84 +msgid "Send" +msgstr "Saada" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Katkesta" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Lisa fail" + +#: compose.c:90 +msgid "Descrip" +msgstr "Kirjeldus" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Allkirjasta, krüpti" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Krüpti" + +#: compose.c:131 +msgid "Sign" +msgstr "Allkirjasta" + +#: compose.c:133 +msgid "Clear" +msgstr "Puhas" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " allkirjasta kui: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<vaikimisi>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Krüpti kasutades: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (k)rüpti, (a)llkiri, allk. ku(i), (m)õlemad või (u)nusta? " + +#: compose.c:166 +msgid "esabf" +msgstr "kaimu" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Allkirjasta kui: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "S/MIME (k)rüpti, (a)llkiri, allk. ku(i), (m)õlemad või (u)nusta? " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "kaimu" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "1: DES, 2: 3DES, 3: RC2-40, 4: RC2-64, 5: RC2-128 või (u)nusta? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345u" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ei eksisteeri!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] muudeti. Uuendan kodeerimist?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Lisad" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Ainukest lisa ei saa kustutada." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Lisan valitud failid..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "%s ei õnnestu lisada!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Avage postkast, millest lisada teade" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Selles kaustas ei ole teateid." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Märkige teada, mida soovite lisada!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Ei õnnestu lisada!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Ümberkodeerimine puudutab ainult tekstilisasid." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Käesolevat lisa ei teisendata." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Käesolev lisa teisendatakse." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Vigane kodeering." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Salvestan sellest teatest koopia?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Uus nimi: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Ei saa lugeda %s atribuute: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Uus fail: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type on kujul baas/alam" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Tundmatu Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Faili %s ei saa luua" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "See mis siin nüüd on, on viga lisa loomisel" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Panen teate postitusootele?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Kirjuta teade postkasti" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Kirjutan teate faili %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Teade on kirjutatud." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME on juba valitud. Puhasta ja jätka ? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP on juba valitud. Puhasta ja jätka ? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (praegune aeg: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- järgneb %s väljund%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Parool(id) on unustatud." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Sisestage PGP parool:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Sisestage SMIME parool:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Loon PGP teade kirja kehas?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Käivitan PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "Sisu vihjeta S/MIME teateid ei toetata." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Proovin eraldada PGP võtmed...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Proovin eraldada S/MIME sertifikaadid...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Viga: Vigane multipart/signed struktuur! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Viga: Tundmatu multipart/signed protokoll %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Hoiatus: Me ai saa kontrollida %s/%s allkirju. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Järgnev info on allkirjastatud --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Hoiatus: Ei leia ühtegi allkirja. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Allkirjastatud info lõpp --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "jah" + +#: curs_lib.c:158 +msgid "no" +msgstr "ei" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Väljuda Muttist?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "tundmatu viga" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Jätkamiseks vajutage klahvi..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' annab loendi): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Avatud postkaste pole." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Teateid ei ole." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Postkast on ainult lugemiseks." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funktsioon ei ole teate lisamise moodis lubatud." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Nähtavaid teateid pole." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Ainult lugemiseks postkastil ei saa kirjutamist lülitada!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Muudatused kaustas salvestatakse kaustast väljumisel." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Muudatusi kaustas ei kirjutata." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Välju" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Salvesta" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Kiri" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Vasta" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupp" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Postkasti on väliselt muudetud. Lipud võivad olla valed." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Selles postkastis on uus kiri." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Postkasti on väliselt muudetud." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Märgitud teateid pole." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Ühendus serverisse %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Hüppa teatele: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argument peab olema teate number." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "See teate ei ole nähtav." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Vigane teate number." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Kustuta teated mustriga: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Kehtivat piirangumustrit ei ole." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Piirang: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Piirdu teadetega mustriga: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Väljun Muttist?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Märgi teated mustriga: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Taasta teated mustriga: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Võta märk teadetelt mustriga: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Avan postkasti ainult lugemiseks" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Avan postkasti" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ei ole postkast." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Väljun Muttist salvestamata?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Te olete viimasel teatel." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Kustutamata teateid pole." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Te olete esimesel teatel." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Otsing pööras algusest tagasi." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Otsing pööras lõpust tagasi." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Uusi teateid pole" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Lugemata teateid pole" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " selles piiratud vaates" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "POP serveril ei saa muuta lippu 'important' (tähtis)." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Rohkem teemasid pole." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Te olete esimesel teemal." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Teemad ei ole lubatud." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Teema sisaldab lugemata teateid." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "POP serveril ei saa teadet toimetada." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tlisa rida, mis algab sümboliga ~\n" +"~b kasutajad\tlisa kasutajad Bcc: väljale\n" +"~c kasutajad\tlisa kasutajad Cc: väljale\n" +"~f teated\tlisa teated\n" +"~F teated\tsama kui ~f, lisa ka päised\n" +"~h\t\ttoimeta teate päist\n" +"~m teated\tlisa ja tsiteeri teateid\n" +"~M teated\tsama kui ~m, lisa ka päised\n" +"~p\t\ttrüki teade\n" +"~q\t\tkirjuta fail ja välju toimetist\n" +"~r fail\t\tloe toimetisse fail\n" +"~t kasutajad\tlisa kasutajad To: väljale\n" +"~u\t\ttühista eelmine rida\n" +"~v\t\ttoimeta teadet $visual toimetiga\n" +"~w fail\t\tkirjuta teade faili\n" +"~x\t\tkatkesta muudatused ja välju toimetist\n" +"~?\t\tsee teade\n" +".\t\tüksinda real lõpetab sisendi\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: vigane teate number.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Teate lõpetab rida, milles on ainult .)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Postkasti pole.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Teade sisaldab:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(jätka)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "failinimi puudub.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Teates pole ridu.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: tundmatu toimeti käsk (~? annab abiinfot)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "ajutise kausta loomine ebaõnnestus: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "ei õnnestu kirjutada ajutisse kausta: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "ajutist kausta ei õnnestu lühendada: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Teate fail on tühi!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Teadet ei muudetud!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Teate faili ei saa avada: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Kausta ei saa lisada: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Viga. Säilitan ajutise faili: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Sea lipp" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Eemalda lipp" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- Viga: Multipart/Alternative osasid ei saa näidata! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Lisa #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tüüp: %s/%s, Kodeering: %s, Maht: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Autovaade kasutades %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Käivitan autovaate käskluse: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- %s ei saa käivitada.--]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Autovaate %s stderr --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- Viga: message/external-body juurdepääsu parameeter puudub --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- See %s/%s lisa " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(maht %s baiti) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "on kustutatud --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nimi: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Seda %s/%s lisa ei ole kaasatud, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- ja näidatud väline allikas on aegunud --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- ja näidatud juurdepääsu tüüpi %s ei toetata --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Viga: multipart/signed teatel puudub protokoll." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Viga: multipart/encrypted teatel puudub protokolli parameeter!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Ajutise faili avamine ebaõnnestus!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s ei toetata " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(selle osa vaatamiseks kasutage '%s')" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' peab olema klahviga seotud!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: faili lisamine ebaõnnestus" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "VIGA: Palun teatage sellest veast" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<TUNDMATU>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Üldised seosed:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Sidumata funktsioonid:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "%s abiinfo" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: seose sees ei saa unhook * kasutada." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: tundmatu seose tüüp: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: %s ei saa %s seest kustutada." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Autentikaatoreid pole" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Autentimine (anonüümne)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonüümne autentimine ebaõnnestus." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Autentimine (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 autentimine ebaõnnestus." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Autentimine (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI autentimine ebaõnnestus." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN on sellel serveril blokeeritud." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Meldin..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Meldimine ebaõnnestus." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Autentimine (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL autentimine ebaõnnestus." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s on vigane IMAP tee" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Laen nimeruumid..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Laen kaustade nimekirja..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Sellist värvi ei ole" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Loon postkasti: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Postkastil peab olema nimi." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Postkast on loodud." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Postkast on suletud" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Fataalne viga. Teadete arv ei ole sünkroonis!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Sulen ühendust serveriga %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "See IMAP server on iganenud. Mutt ei tööta sellega." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Turvan ühenduse TLS protokolliga?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "TLS ühendust ei õnnestu kokku leppida" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Valin %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Viga postkasti avamisel!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Sellel serveril ei saa IMAP postkastidele lisada" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Loon %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Sulen ühenduse IMAP serveriga..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "märgin %d teadet kustutatuks..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Kustutamine ebaõnnestus." + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Salvestan teadete olekud... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Kustutan serveril teateid..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE ebaõnnestus" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE ebaõnnestus." + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Halb nimi postkastile" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Tellin %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Loobun kaustast %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Sellest IMAP serverist ei saa päiseid laadida." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Ajutise faili %s loomine ebaõnnestus" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Laen teadete päiseid... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Laen teadet..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Teadete indeks on vigane. Proovige postkasti uuesti avada." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Saadan teadet ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopeerin %d teadet kausta %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopeerin teadet %d kausta %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Jätkan?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: aadress puudub" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "vigane päiseväli" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: tundmatu järjestamise meetod" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): vigane regexp: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: tundmatu muutuja" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "reset käsuga ei ole prefiks lubatud" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "reset käsuga ei ole väärtus lubatud" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s on seatud" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s ei ole seatud" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: vigane postkasti tüüp" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: vigane väärtus" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: tundmatu tüüp" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: tundmatu tüüp" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Ei saa lugeda %s atribuute: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ei ole tavaline fail." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Viga failis %s, real %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: vead failis %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: lugemine katkestati, kuna %s on liialt vigane" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: viga kohal %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: liiga palju argumente" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: tundmatu käsk" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Viga käsureal: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "ei leia kodukataloogi" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "ei suuda tuvastada kasutajanime" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Tuvastasin makros tsükli." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Klahv ei ole seotud." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Klahv ei ole seotud. Abiinfo saamiseks vajutage '%s'." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: liiga palju argumente" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: sellist menüüd ei ole" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "tühi klahvijärjend" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: iiga palju argumente" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: sellist funktsiooni tabelis ei ole" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "makro: tühi klahvijärjend" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "makro: liiga palju argumente" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: argumente pole" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: sellist funktsiooni pole" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Sisestage kasutaja teatele %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "tühi operatsioon" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "vaata lisa mailcap vahendusel" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "vaata lisa tekstina" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Lülita osade näitamist" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "liigu lehe lõppu" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "saada teade edasi teisele kasutajale" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "valige sellest kataloogist uus fail" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "vaata faili" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "näita praegu valitud faili nime" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "telli jooksev postkast (ainult IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "loobu jooksvast postkastist (ainult IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "lülita kõikide/tellitud kaustade vaatamine (ainult IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "näita uute teadetega postkaste" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "vaheta kataloogi" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "kontrolli uusi kirju postkastides" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "lisa sellele teatele fail(e)" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "lisa sellele teatele teateid" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "toimeta BCC nimekirja" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "toimeta CC nimekirja" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "toimeta lisa kirjeldust" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "toimeta lisa kodeeringut" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "sisestage failinimi, kuhu salvestada selle teate koopia" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "toimeta lisatavat faili" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "toimeta from välja" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "toimeta teadet koos päisega" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "toimeta teadet" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "toimeta lisa kasutades mailcap kirjet" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "toimeta Reply-To välja" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "toimeta selle teate teemat" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "toimeta TO nimekirja" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "loo uus postkast (ainult IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "muuda lisa sisu tüüpi" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "loo lisast ajutine koopia" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "käivita teatel ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "loo mailcap kirjet kasutades uus lisa" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "lülita selle lisa ümberkodeerimine" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "salvesta teade hilisemaks saatmiseks" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "tõsta/nimeta lisatud fail ümber" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "saada teade" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "lülita paigutust kehasse/lisasse" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "lülita faili kustutamist peale saatmist" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "uuenda teate kodeerimise infot" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "kirjuta teade kausta" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "koleeri teade faili/postkasti" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "loo teate saatjale alias" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "liiguta kirje ekraanil alla" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "liiguta kirje ekraanil keskele" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "liiguta kirje ekraanil üles" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "tee avatud (text/plain) koopia" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "tee avatud (text/plain) koopia ja kustuta" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "kustuta jooksev kirje" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "kustuta jooksev postkast (ainult IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "kustuta kõik teated alamteemas" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "kustuta kõik teated teemas" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "esita saatja täielik aadress" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "näita teadet ja lülita päise näitamist" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "näita teadet" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "toimeta kogu teadet" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "kustuta sümbol kursori eest" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "liiguta kursorit sümbol vasakule" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "tõsta kursor sõna algusse" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "hüppa rea algusse" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "vaheta sissetulevaid postkaste" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "täienda failinime või aliast" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "täienda aadressi päringuga" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "kustuta sümbol kursori alt" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "hüppa realõppu" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "liiguta kursorit sümbol paremale" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "tõsta kursor sõna lõppu" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "keri ajaloos alla" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "keri ajaloos üles" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "kustuta sümbolid kursorist realõpuni" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "kustuta sümbolid kursorist sõna lõpuni" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "kustuta real kõik sümbolid" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "kustuta sõna kursori eest" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "kvoodi järgmine klahvivajutus" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "vaheta kursori all olev sümbol kursorile eelnevaga" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "sõna algab suurtähega" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "teisenda tähed sõnas väiketähtedeks" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "teisenda tähed sõnas suurtähtedeks" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "sisestage muttrc käsk" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "sisestage faili mask" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "välju sellest menüüst" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtreeri lisa läbi väliskäsu" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "liigu esimesele kirjele" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "lülita teate 'tähtsuse' lippu" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "edasta teade kommentaaridega" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "vali jooksev kirje" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "vasta kõikidele" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "keri pool lehekülge alla" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "keri pool lehekülge üles" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "see ekraan" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "hüppa indeksi numbrile" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "liigu viimasele kirjele" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "vasta määratud postiloendile" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "käivita makro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "koosta uus e-posti teade" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "ava teine kaust" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "ava teine kaust ainult lugemiseks" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "puhasta teate olekulipp" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "kustuta mustrile vastavad teated" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "lae kiri IMAP serverilt" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "lae kiri POP serverilt" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "liigu esimesele teatele" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "liigu viimasele teatele" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "näita ainult mustrile vastavaid teateid" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "hüppa järgmisele uuele teatele" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "hüppa järgmisele lugemata teatele" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "hüppa järgmisele alamteemale" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "hüppa järgmisele teemale" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "liigu järgmisele kustutamata teatele" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "hüppa järgmisele lugemata teatele" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "hüppa teema vanemteatele" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "hüppa eelmisele teemale" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "hüppa eelmisele alamteemale" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "liigu eelmisele kustutamata teatele" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "hüppa eelmisele uuele teatele" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "hüppa eelmisele lugemata teatele" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "hüppa eelmisele lugemata teatele" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "märgi jooksev teema loetuks" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "märgi jooksev alamteema loetuks" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "sea teate olekulipp" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "salvesta postkasti muutused" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "märgi mustrile vastavad teated" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "taasta mustrile vastavad teated" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "eemalda märk mustrile vastavatelt teadetelt" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "liigu lehe keskele" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "liigu järgmisele kirjele" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "keri üks rida alla" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "liigu järgmisele lehele" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "hüppa teate lõppu" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "lülita tsiteeritud teksti näitamist" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "liigu tsiteeritud teksti lõppu" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "hüppa teate algusse" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "saada teade/lisa käsu sisendisse" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "liigu eelmisele kirjele" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "keri üks rida üles" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "liigu eelmisele lehele" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "trüki jooksev kirje" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "otsi aadresse välise programmiga" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "lisa uue päringu tulemused olemasolevatele" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "salvesta postkasti muutused ja välju" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "võta postitusootel teade" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "puhasta ja joonista ekraan uuesti" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{sisemine}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "vasta teatele" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "võta teade aluseks uuele" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "salvesta teade/lisa faili" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "otsi regulaaravaldist" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "otsi regulaaravaldist tagaspidi" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "otsi järgmist" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "otsi järgmist vastasuunas" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "lülita otsingumustri värvimine" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "käivita käsk käsuinterpretaatoris" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "järjesta teated" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "järjesta teated tagurpidi" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "märgi jooksev kirje" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "kasuta funktsiooni märgitud teadetel" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "kasuta funktsiooni märgitud teadetel" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "märgi jooksev alamteema" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "märgi jooksev teema" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "lülita teate 'värskuse' lippu" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "lülita postkasti ülekirjutatamist" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "lülita kas brausida ainult postkaste või kõiki faile" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "liigu lehe algusse" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "taasta jooksev kirje" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "taasta kõik teema teated" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "taasta kõik alamteema teated" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "näita Mutti versiooni ja kuupäeva" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "vaata lisa kasutades vajadusel mailcap kirjet" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "näita MIME lisasid" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "näita praegu kehtivat piirangu mustrit" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "ava/sule jooksev teema" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "ava/sule kõik teemad" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "lisa PGP avalik võti" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "näita PGP võtmeid" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "saada PGP avalik võti" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "kontrolli PGP avalikku võtit" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "vaata võtme kasutaja identifikaatorit" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "kontrolli klassikalise pgp olemasolu" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Aktsepteeri koostatud ahelaga" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Lisa edasisaatja ahela lõppu" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Lisa edasisaatja ahelasse" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Eemalda edasisaatja ahelast" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Vali ahela eelmine element" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Vali ahela järgmine element" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "saada teade läbi mixmaster vahendajate ahela" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "loo avateksti koopia ja kustuta" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "loo avateksti koopia" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "eemalda parool(id) mälust" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "eralda toetatud avalikud võtmed" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "näita S/MIME võtmeid" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Mälu on otsas!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Arendajatega kontakteerumiseks saatke palun kiri aadressil <mutt-dev@mutt." +"org>.\n" +"Veast teatamiseks kasutage palun käsku flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Autoriõigus (C) 1996-2002 Michael R. Elkins ja teised.\n" +"Mutt ei paku MITTE MINGISUGUSEID GARANTIISID; detailid käsuga `mutt -vv'.\n" +"Mutt on vaba tarkvara ja te võite seda teatud tingimustel levitada;\n" +"detailsemat infot saate käsuga `mutt -vv'.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Autoriõigus (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n" +"Autoriõigus (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Autoriõigus (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n" +"Autoriõigus (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Autoriõigus (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n" +"Autoriõigus (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Autoriõigus (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Paljud siin mainimata inimesed on saatnud koodi, parandusi ja soovitusi.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"kasutage: mutt [ -nRyzZ ] [ -e <käsk> ] [ -F <fail> ] [ -m <tüüp> ]\n" +" [ -f <fail> ]\n" +" mutt [ -nR ] [ -e <käsk> ] [ -F <fail> ] -Q <päring>\n" +" [ -Q <päring> ] [...]\n" +" mutt [ -nR ] [ -e <käsk> ] [ -F <fail> ] -A <hüüdnimi>\n" +" [ -A <hüüdnimi> ] [...]\n" +" mutt [ -nx ] [ -e <käsk> ] [ -a <fail> ] [ -F <fail> ] [ -H " +"<fail> ]\n" +" [ -i <fail> ] [ -s <teema> ] [ -b <aadr> ] [ -c <aadr> ]\n" +" <aadr> [ ... ]\n" +" mutt [ -n ] [ -e <käsk> ] [ -F <fail> ] -p\n" +" mutt -v[v]\n" +"\n" +"võtmed:\n" +" -A <hüüdnimi>\tavalda antud hüüdnimi\n" +" -a <fail>\tlisa teatele fail\n" +" -b <aadress>\tmäära pimekoopia (BCC) aadress\n" +" -c <aadress>\tmäära koopia (CC) aadress\n" +" -e <käsk>\tkäivita peale algväärtutamist käsk\n" +" -f <fail>\tmillist postkasti lugeda\n" +" -F <fail>\tmäära alternatiivne muttrc fail\n" +" -H <fail>\tmäära päiste mustandi fail\n" +" -i <fail>\tfail mida mutt peab vastamisel lisama\n" +" -m <tüüp>\tmääta vaikimisi postkasti tüüp\n" +" -n\t\tära loe süsteemset Muttrc faili\n" +" -p\t\tlae postitusootel teade\n" +" -Q <muutuja>\tloe seadete muutuja\n" +" -R\t\tava postkast ainult lugemiseks\n" +" -s <teema>\tmäära teate teema (jutumärkides, kui on mitmesõnaline)\n" +" -v\t\tnäita versiooni ja kompileerimis-aegseid määranguid\n" +" -x\t\tsimuleeri mailx saatmise moodi\n" +" -y\t\tvali postkast teie 'postkastide' loendist\n" +" -z\t\tvälju kohe, kui postkastis pole uusi teateid\n" +" -Z\t\tava esimene kaust uue teatega, välju kohe, kui pole\n" +" -h\t\tesita see abiinfo" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Kompileerimise võtmed:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Viga terminali initsialiseerimisel." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Silumise tase %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG ei ole kompileerimise ajal defineeritud. Ignoreerin.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s ei ole. Loon selle?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "%s ei saa luua: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Saajaid ei ole määratud.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: faili ei saa lisada.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Uute teadetega postkaste ei ole." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Sissetulevate kirjade postkaste ei ole määratud." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Postkast on tühi." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Loen %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Postkast on riknenud!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Postkast oli riknenud!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fataalne viga! Postkasti ei õnnestu uuesti avada!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Postkasti ei saa lukustada!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox on muudetud, aga muudetud teateid ei ole! (teatage sellest veast)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Kirjutan teateid... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Kinnitan muutused..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Kirjutamine ebaõnnestus! Osaline postkast salvestatud faili %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Postkasti ei õnnestu uuesti avada!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Avan postkasti uuesti..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Hüppa: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Vigane indeksi number." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Kirjeid pole." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Enam allapoole ei saa kerida." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Enam ülespoole ei saa kerida." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Te olete viimasel lehel." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Te olete esimesel lehel." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Esimene kirje on näidatud." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Viimane kirje on näidatud." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Te olete viimasel kirjel." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Te olete esimesel kirjel." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Otsi: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Otsi tagurpidi: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Otsingumuster puudub." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Ei leitud." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Märgitud kirjeid pole." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Selles menüüs ei ole otsimist realiseeritud." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "hüppamine ei ole dialoogidele realiseeritud." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Märkimist ei toetata." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Loen %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): ei õnnestu seada faili aegu" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Fail on kataloog, salvestan sinna?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Fail on kataloog, salvestan sinna?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Fail kataloogis: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Fail on olemas, (k)irjutan üle, (l)isan või ka(t)kestan?" + +#: muttlib.c:869 +msgid "oac" +msgstr "klt" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Teadet ei saa POP postkasti salvestada." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ei ole postkast!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Lisan teated kausta %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Ühendus serveriga %s suleti" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL ei ole kasutatav." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Preconnect käsklus ebaõnnestus" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Viga serveriga %s suhtlemisel (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Otsin serverit %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Ei leia masina \"%s\" aadressi" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Ühendus serverisse %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Serveriga %s ei õnnestu ühendust luua (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Teie süsteemis ei ole piisavalt entroopiat" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Kogun entroopiat: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s omab ebaturvalisi õigusi!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "Entroopia nappuse tõttu on SSL kasutamine blokeeritud" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "S/V viga" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "protokolli viga" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL ebaõnnestus: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Ei õnnestu saada partneri sertifikaati" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL ühendus kasutades %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Tundmatu" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[arvutamine ei õnnestu]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[vigane kuupäev]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Serveri sertifikaat ei ole veel kehtiv" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Serveri sertifikaat on aegunud" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Selle serveri omanik on:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Selle sertifikaadi väljastas:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "See sertifikaat on kehtiv" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " alates %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " kuni %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Sõrmejälg: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL Sertifikaadi kontroll" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(k)eeldu, (n)õustu korra, nõustu (a)alati" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "kna" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(k)eeldu, (n)õustu korra" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "kn" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Välju " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Hoiatus: Sertifikaati ei saa salvestada" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Sertifikaat on salvestatud" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Lukustamise arv on ületatud, eemaldan %s lukufaili? " + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "%s punktfailiga lukustamine ei õnnestu.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "fcntl luku seadmine aegus!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Ootan fcntl lukku... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "flock luku seadmine aegus!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Ootan flock lukku... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "%s ei saa lukustada\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Loen %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Kirjutan %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Postkasti %s ei õnnestu sünkroniseerida!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Tõstan loetud teated postkasti %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Eemaldan %d kustutatud teate?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Eemaldan %d kustutatud teadet?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Tõstan loetud teated kausta %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Postkasti ei muudetud." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d säilitatud, %d tõstetud, %d kustutatud." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d säilitatud, %d kustutatud." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Kirjutamise lülitamiseks vajutage '%s'" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Kirjutamise uuesti lubamiseks kasutage 'toggle-write'!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Postkast on märgitud mittekirjutatavaks. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Postkast on kontrollitud." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Teadet ei õnnestu kirjutada" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Ei ole selles menüüs kasutatav." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "EelmLk" + +#: pager.c:1447 +msgid "NextPg" +msgstr "JärgmLm" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Vaata lisa" + +#: pager.c:1454 +msgid "Next" +msgstr "Järgm." + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Teate lõpp on näidatud." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Teate algus on näidatud." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "tagurpidi otsing: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Otsing: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Te loete praegu abiinfot." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Rohkem tsiteetitud teksti pole." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Tsiteeritud teksiti järel rohkem teksti ei ole." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "mitmeosalisel teatel puudub eraldaja!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Viga avaldises: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Vigane kuupäev: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Vigane kuu: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Vigane suhteline kuupäev: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "viga avaldises" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "viga mustris: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: vigane käsklus" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: ei toetata selles moodis" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "parameeter puudub" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "sulud ei klapi: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "tühi muster" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "viga: tundmatu op %d (teatage sellest veast)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Kompileerin otsingumustrit..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Käivitan leitud teadetel käsu..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Ühtegi mustrile vastavat teadet ei leitud." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Otsing jõudis midagi leidmata lõppu" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Otsing jõudis midagi leidmata algusse" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Otsing katkestati." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP parool on unustatud." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Viga: ei õnnestu luua PGP alamprotsessi! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP väljundi lõpp --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP TEATE ALGUS --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP AVALIKU VÕTME BLOKI ALGUS --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ALLKIRJASTATUD TEATE ALGUS --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- PGP TEATE LÕPP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP AVALIKU VÕTME BLOKI LÕPP --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- PGP ALLKIRJASTATUD TEATE LÕPP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Viga: ei suuda leida PGP teate algust! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Sisemine viga. Informeerige <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Viga: PGP alamprotsessi loomine ei õnnestu! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Viga: vigane PGP/MIME teade! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Viga: ajutise faili loomine ebaõnnestus! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Järgneb PGP/MIME krüptitud info --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- PGP/MIME krüptitud info lõpp --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "PGP protsessi loomine ebaõnnestus!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Kasutan kasutajat = \"%s\" teatel %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Sisestage kasutaja teatele %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP käivitamine ei õnnestu" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Laen PGP võtit..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Kõik sobivad võtmed on märgitud aegunuks/tühistatuks." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Vali " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Võtme kontroll " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP võtmed, mis sisaldavad <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP võtmed, mis sisaldavad \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "/dev/null ei saa avada" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Ei õnnestu avada ajutist faili" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Võtme ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Seda võtit ei saa kasutada: aegunud/blokeeritud/tühistatud." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID on aegunud/blokeeritud/tühistatud." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ID kehtivuse väärtus ei ole defineeritud." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID ei ole kehtiv." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID on ainult osaliselt kehtiv." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Kas te soovite seda võtit tõesti kasutada?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Palun sisestage võtme ID: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Käivitan pgp..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP Võti %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Otsin võtmeid, mis sisaldavad \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Server ei toeta käsklust TOP." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Päist ei õnnestu ajutissse faili kirjutada!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Server ei toeta UIDL käsklust." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s on vigane POP tee" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Laen teadete nimekirja..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Teadet ei õnnestu ajutisse faili kirjutada!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Kontrollin, kas on uusi teateid..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP serverit ei ole määratud." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Uusi teateid POP postkastis pole." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Kustutan teated serverist?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Loen uusi teateid (%d baiti)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Viga postkasti kirjutamisel!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d/%d teadet loetud]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Server sulges ühenduse!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Autentimine (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Autentimine (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP autentimine ebaõnnestus." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Server ei toeta käsklust USER." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Teateid ei õnnestu sererile jätta." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Viga serveriga ühenduse loomisel: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Sulen ühenduse POP serveriga..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Kontrollin teadete indekseid ..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Ühendus katkes. Taastan ühenduse POP serveriga?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Postitusootel teated" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Postitusootel teateid pole" + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Vigane PGP päis" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Vigane S/MIME päis" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Dekrüptimine ebaõnnestus." + +#: query.c:46 +msgid "New Query" +msgstr "Uus päring" + +#: query.c:47 +msgid "Make Alias" +msgstr "Loo alias" + +#: query.c:48 +msgid "Search" +msgstr "Otsi" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Ootan vastust..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Päringukäsku ei ole defineeritud." + +#: query.c:286 +msgid "Query" +msgstr "Päring" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Päring: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Päring '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Toru" + +#: recvattach.c:53 +msgid "Print" +msgstr "Trüki" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Salvestan..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Lisa on salvestatud." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "HOIATUS: Te olete üle kirjutamas faili %s, jätkan?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Lisa on filtreeritud." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtreeri läbi: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Toru käsule: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Ma ei tea, kuidas trükkida %s lisasid!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Trükin märgitud lisa(d)?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Trükin lisa?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Krüpteeritud teadet ei õnnestu lahti krüpteerida!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Lisad" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Osasid, mida näidata, ei ole!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Lisasid ei saa POP serverilt kustutada." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Krüpteeritud teadetest ei saa lisasid eemaldada." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Kustutada saab ainult mitmeosalise teate lisasid." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Peegeldada saab ainult message/rfc822 osi." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Viga teate saatmisel." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Viga teate saatmisel." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Ajutist faili %s ei saa avada." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Edasta lisadena?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Kõiki märgitud lisasid ei saa dekodeerida. Edastan ülejäänud MIME formaadis?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Edastan MIME pakina?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "%s loomine ebaõnnestus." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Ei leia ühtegi märgitud teadet." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Postiloendeid pole!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Kõiki märgitud lisasid ei saa dekodeerida. Kapseldan ülejäänud MIME formaati?" + +#: remailer.c:480 +msgid "Append" +msgstr "Lõppu" + +#: remailer.c:481 +msgid "Insert" +msgstr "Lisa" + +#: remailer.c:482 +msgid "Delete" +msgstr "Kustuta" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Mixmaster type2.list laadimine ei õnnestu!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Valige vahendajate ahel." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Viga: %s ei saa ahela viimase vahendajana kasutada." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster ahelad on piiratud %d lüliga." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Vahendajate ahel on juba tühi." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Te olete ahela esimese lüli juba valinud." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Te olete ahela viimase lüli juba valinud." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster ei toeta Cc või Bcc päiseid." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Mixmaster kasutamisel omistage palun hostname muutujale korrektne väärtus!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Viga teate saatmisel, alamprotsess lõpetas koodiga %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Viga teate saatmisel." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Vigaselt formaaditud kirje tüübile %s faili \"%s\" real %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Mailcap tee ei ole määratud" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Tüübil %s puudub mailcap kirje" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: liiga vähe argumente" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: liiga palju argumente" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Teema puudub, katkestan?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Teema puudub, katkestan." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Vastan aadressile %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Vastus aadressile %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Märgitud teateid ei ole näha!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Kaasan vastuses teate?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Tsiteerin teadet..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Kõiki soovitud teateid ei õnnestu kaasata!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Edasta lisadena?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Valmistan edastatavat teadet..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Laen postitusootel teate?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Toimetan edastatavat teadet?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Katkestan muutmata teate?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Katkestasin muutmata teate saatmise." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Kirja ei saadetud." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Teade jäeti postitusootele." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Kirja saajaid pole määratud!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Kirja saajaid ei määratud!" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Teema puudub, katkestan saatmise?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Teema puudub." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Saadan teadet..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Teadet ei õnnestu saata." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Teade on saadetud." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Saadan taustal." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Eraldaja puudub! [teatage sellest veast]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ei ole enam!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s ei ole tavaline fail." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "%s ei saa avada" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Viga teate saatmisel, alamprotsess lõpetas %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Väljund saatmise protsessist" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Väljun.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Sain %s... Väljun.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Sain signaali %d... Väljun.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Usaldatud " + +#: smime.c:303 +msgid "Verified " +msgstr "Kontrollitud " + +#: smime.c:306 +msgid "Unverified" +msgstr "Kontrollimata" + +#: smime.c:309 +msgid "Expired " +msgstr "Aegunud " + +#: smime.c:312 +msgid "Revoked " +msgstr "Tühistatud " + +#: smime.c:315 +msgid "Invalid " +msgstr "Vigane " + +#: smime.c:318 +msgid "Unknown " +msgstr "Tundmatu " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Sisestage võtme ID: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME sertifikaadid, mis sisaldavad \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s pole kontrollitud. Kas soovite seda ikka %s jaoks kasutada ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Kasutan (mitteusaldatavat!) ID %s %s jaoks?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Kasutan ID %s %s jaoks?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Hoiatus: Te pole veel otsustanud usaldada ID %s. (jätkamiseks suvaline klahv)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "%s jaoks puudub kehtiv sertifikaat." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Viga: ei õnnestu luua OpenSSL alamprotsessi!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "sertifikaadi faili pole" + +#: smime.c:1200 +msgid "no mbox" +msgstr "pole postkast" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "OpenSSL väljundit pole..." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Hoiatus: vahepealset sertifikaati pole." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "OpenSSL protsessi avamine ebaõnnestus!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "OpenSSL väljundit pole..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- OpenSSL väljundi lõpp --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Viga: ei õnnestu luua OpenSSL alamprotsessi! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Järgneb S/MIME krüptitud info --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Järgneb S/MIME allkirjastatud info --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- S/MIME krüptitud info lõpp --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- S/MIME Allkirjastatud info lõpp --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Järjestan teateid..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Ei leia järjestamisfunktsiooni! [teatage sellest veast]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(pole postkast)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Vanem teade ei ole selles piiratud vaates nähtav." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Vanem teade ei ole kättesaadav." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Käivitan OpenSSL..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Peegelda teade aadressile %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Peegelda teated aadressile %s...?" + +#~ msgid "ewsabf" +#~ msgstr "kaimu" diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..0a6a3987535db9123507b3bc9df6c88d59b84e95 GIT binary patch literal 84263 zcmeFad3;<|{r^8@Z_2)JEw_cx1e$bZX((;eG%ba6p=ntJgh?_<2a=g|mbNKaMFl}o zHpPui<>Ll|h=K|#B8VWOfC4Has0eXEz+FUs&)55$bLUPnK|bH#@A3WXH|@>yo_&9x z_1^pR?%RAQ#qYwcQ>g=C2Y<e?O)7QX(b7$&22V((c7yBTp7338FZdBS72XUFfsaGE ze-+ljeLEZvhH~Ew_kauG0dNhJKZ8*AFNE8}%c1Oj6i$L)fC~2^uYMLPoYeAEsvb;) z2g5eFKkS3@|DA9mycWv-UEchsa6i<4fqTQ9S2+LcJzL;-^jE?O@Km@j%y{!Ha97k< zLZ#~lco4iDDnA~Fvi~1%zRyaR&PFKv3!u_-B2+wkq5OL%+#OyCl`o%$isxNW_8y1I zmsemT+-{Xi?+hsSCqVgoIy@Y%hl>9-Q1SX4+z~zk_kmBt2KYC)D?I2#mrpa`&Zw8e z?cnKf8SIA2moIqU0Tr)r!)@U&pyK;$um2iUzVEl%xjPan{Dn~Ey&S5%Pl0pbSulbh zf(rL`sPg{?R5?8br@%i$rEBj_7ycBebkB#o!A>ai43xX|P~~wERD3=GRZqU@^?wRg zPhNpL!Clw5{F($+4ojf?KOM?^Jyd?Z9V-2o!9C$ka1Z!xD0e@BGXFhPy0>5J>dBr^ z;m?7}ua$5b%tHBl72Fek#`7*He;<MJ?>WzLC#6!0P)~&O;aM<(*Flx*-Eem}3@5{X zL)FtsCp-0gsPN8$YCr3t!u=3bzJDGno)18U`x~fyN}b}$VG>k+x5B+)Cscbp8!En+ z!9(E<Q2G9SDF0u8hr!q2KCt0b7v4fB|IUOn;d&_dpMr|tgD`?GLe;lj-s0-fUQp#7 zL4`97%6yqOUkMfew?N6M4N(4l9I9P>3o5^!_uTa~S6}DCz0hxia(^mRy2?=P?_#L< z-v$qW--q)5d8l@><LOR+Z>V(5f{Nc_ub+m>|F^-%khdRzFQM*AyL|5K^7R+0-d_YG zcq5zzAA$$M*P-HbV7Ifk1S-5N+z*}$6~7Nb)q`8T`D0M+@HwdRcnKa359o36S_<c& zJ_RbB?}z)s|MC1Ll>bk7z6@30CS+2nt>Gl7c02_}uo24t<Dufc0qzg4gbU!!Q1akK zsCxD{&pmrx__LtQkB5>^tD(v#?aenr)vrsT+UX5Y{(s4v{{Slf&q3Ai|9JJpK4<Sp zsC1qP6~8Q${})2l@2jE8|2C*}-w)MppM|PFJFj#0j)Dqj1(dx$DF4ofhrny$T=*St z{u(?2^*&kW&vK}I+5lCqpM=}Mhv0Vb5h#D3get#RJYR##mmSV_<-8A6{N}<#VXx== z;Z)RLh6?8?sC4acj*I7k@L<$)q4dvy6X1F{1HKK){APGGd=x5wCiFY^Q=sbg0=NrY z1(lCyLDi29P~~zll)D?C^8HTO3?G9k|E&g`c?9MDD7Y<L4wWCBZ~{C9syut3<lDPo z1N;;m4<CZF;p0%@*5#bNdZ>7|LzT}-Q1L55D|e`Jxf&|JABAd1e}F279rCVT?*b1) zJ;U=fD0dgaI(QdUeYhX0T|NWl|0_`G-eJ(`M^NF+g1f*DsC+oxt2aZre=k(Ju7)bd zPs1JI!`}SoUjL6!`Lfq~*DmHjrE?jS`(CJg8iYH+k9vLvN=|$Q?h2oP)8PwH?Q7qH z%l{_0GwNAT>1>5cSBKZ{f^xs!^PN!j=}Nd8{0xlX*Pz_}%=0CveAuq&!i%8l$q_Ju z9Z>l@02ThHpvwJAa0+}BDn5UON`I>4;(HKOd=7!T!y};b<2We)GjLCM9#niThqCt> zsPgzal=}yv;{S7~^7$i_{Rw4fJ{ij0EI19e!^2?#DqYt?x%(<qIXn*K|1(hWehI2P zUxl*2!v+`sDNyxpDwG^)hN_R9a0bjnwTJ7W(sdJ5`XBIo0q%u*`;D#~CPMi?6DqtD z;1Tc?DEA-m<~PE9P~Qh<!CydyyXz*Gj%jdD)W<{R&zaEb6_mY?LZ$C3a9?;IRJc#W zz2QG#J=|r;g?j{)`D&<q>W9kD_d>=08mM-Bo7aEX>pu%sAO7z3x7+OM#eQ%P^yfl_ zw;am99;kS4go@`SQ2GB^D1UB)Tfuwa9C#m8KK%<SU$;Nk$-zUR>>m%Me=2N&o1n_$ zHrNQi1(lD(p5xAQ>D&*hJZF2J0+mm1gAu$6&W3k*{og~ydz-hpeBBR99yUVN%Vwy0 zwGi$HkB7&>9;ozx0V@6X!u{bBQ1N~R9td~a;_6v5l)OCx%HLz4(zzTS08fYVZxd8F zmqPjXIVgAcLgnX!UjHX>d(<yM#rGfH{52@~v%}k6{n;BTpQb{!=LJyVbwP!*1xoIH z1S)^;hRTnJpu&9?DxS~74)`~3-u4dX|0!@T`dO&>eF`pzH^XW0-%#?d@q8ElsZjRM zg9`U{&!?f{wcR^iy_^D-e@8===US+EY=)|T7el4{8Yp|8^yc4!%HM~f`srt&%5VF3 zxpLSIs^0Aj6@ERG|I4BLEkL!m3!(Do7N~N00PX;vfr{ral>FHC-A;c;sCu>+lz+`o z{&YgM*Yn^u@DeEhE{Cc&pM{g)o$z4zGpKO?0~OxB7dZEm;WnseLZ#<OsB&HikAo}V zO!#3ae;<JI_bI6Id=;u5?0TV#UjtM)%c1hG52{_g8y*I4hH7^|g@?dB-{b7hg^GVC zl>cYLqv6F+{@erQ?=Rs&@Sjle+V3LQ{!V~0?}ttBLeDS5LDav3s`s52yZp>S)vNbF zg?9yPgttQZ`*W!D?etz(?o;5AsOLcC=Q*C2LZ$yUD1W{Ww}rohiuX%U^>wHBxpvh8 z>rgL(a<?2R-5IF(pXbf5f|8@3fQQ06pwj&`R5|<ys$T4NiEA&1LHT<Ol)EKR;hzpw zo<ndJe2>@vI+TA;K*i(lQ1x$@_d7X%IGlp|L^utWpxWCf;8OSqoCEj!fGgJ(a7WZb zQ1QAD?gX!cO4k?QM0h_`{yqm4pM5TM>f@opKM%^@N1)2<cBphb;?*yD_4v!2zlTDl zV<D8gv!Kdt3!DnCgeuoN;coCbDF6Nr6|X%nclp^2Rer5d;hqH*pL3zg`@>NAaVJ!H zJq?x4zrx9I=PO)1W_YfGaz6+ak4xYZ_+>a3z6w>Jj=0kG8~tzw>g%D*AA!pE2_JOp z2S-EY_qkB^z6fW*XW?|X=ZBpA#ZdKSJybeA0%d-iH~%$kLcQx%&cFFk?W_nFz?<N1 z@DFfj_#e-mKJ4n%fl%hN;Nftw=O9$LSHpeacVGm64wXOuhRUx=A93>VD7ZW76X0I( ztx)Asg39O1q4Mv`Q04n0um2L<7xf+=b>`Ec(s`U`H#`jW7O3+4oagtT+Q;)Sg0H}O zxW~s_zRiWIC%sVSmqD4|3gyoeP;&BbQ1N`#bKj3U`$s_4zmuTKy98&$tD(~KBdGlO zGmPN=SG#l^1Es&l^ISL{^(Ue7`6j6FzX=t;UqGdA`)gdioCOa=eG)tX7NPR{Qg41M zls`X#yTa$8%I6<mz3a8k{baZY`tzaet%eg}H{27R4<mRLRJ*<ds$JX%<^M2jhOffC z;bGS~|5~BKTMHHc0Vw(SVYnT<2C5$10C$0RK-IhZp~8P0%H3aJ1DtfdQ!j-Fp<WMF zPM1T~qdTC|{{yIa{|Qcl+kC>s<6sz}J_ha&Pxty8;bhd8dfp0^pN~Q1@1LN`X~$1G zceA0=wE`+0y)c3oLY2>Fpz`NYsPO*=<<DN9a&l*uX9rZgd*Q+GJU9nl59RJB(9#c8 zK9g>6`m^8^)F(oPUxG@{2ch!w7N~N$2P&RFhVt(Zo)iAZrSC8(|Cd0;dk{+Qd>ksh z--B}ZCn$e*{<N37Q02T3sy&_zWpB{yUka73PeaA?E~xnZ67C281rLRLe#XV)7^rYh zhN?&JhFihg-~@O(+#cQoRX-ktO5abt`uA{a)c=Bt=YOEmwfARTx)ws^|2a_R7eU4Q zdUy!@npZy!70<uJ2=4wl=WaGszOI6D-wl=T=R(!fk3+@xYf$mH3o4y=L)rfsjNmJ9 zGTh_y&ixTk@mLFGKL=HBFY>$wDt=#r3jYbu-$CW;Yp@YUH#+~0hsyV};o<Nd@L+fo zR5(9^YTv_9^66ht<<@+YbGIDIyc?>%m7v^T1nc2Vo{vJM>mN|^VAn4=e<ne>I~FP( zC&HPq7b;&r0vq6Ma3OpODjz4_?7}}5Djzzb>em3A0N)K2kISI)`^%n>!fB{qg36DH zx43vLgfmc|31xm6oDRPMo8cd!>d%2+bots0rQZtW&mdHNxzek@2o=xApvvRVQ0dwC zR+rDSVH4^zq2l*`xD&h)%HG%DVerRL<^MXAKa;<NpWD*@pvq(aue$cI0xEyc_IxLt zf%;=`Jp4XX{`>@5yM_vP!q;5=YxHb_b?DE8`K?l^dGPpgl;fQ)pZ|WBOXqIiaBPMO z=LD$yI1ehmH$wUI1J5VnMAW~AipRKbI=QtkRJ@l%>1Uwo<9S|v1)PNXb5Qy6J*fKo zYp8H``j%5q_dFHui~hTy<nh&>Uxg~CAA9~CDn9$)?d%;5mA`AC>dg?`4PFBkzgwW( z-w)NUeg|d#npf}gZC9>S;4Ji4z^U+jsCxZ5I0=3e9t3{@BlsFrzD>Hv<?nK+c=ti2 z_gzr!=vpZM?uE*yKR|`E^><u390?VlPH6cETTq_|cZ7GqMetrIf49Ha#b*jsJ!*w& zhh-=^dokPvei3d5?}o?0`=RR7uJ^fl;r?(k>Vu)myWOi-LFI43^D=LKGgLkQ8r&7$ z54VL+LiztRJOobtu9M##@EFu<pz`H1sCID^l=~;(q3{K$`0sMRE1!d*(tRXUeQ1M9 z_vujOuo0@gUgh;~gNpCNQ2zV@9syI|bM}vf3V$tB`LBoa@7+-4c^y<Z-|~FYo4*XF zpugh-t{<8X>ru~#N@tH(Ukp_~w?NgmSD@lo_n^z)sZjA-1{-0Y=jCuE>O0{IIN|$F zuDk`#MST%G9Nq&}UtWX_aPmWb9tHP9eI8Ujyb3Cu``~o=Ybf`7{J^z~1+WQqH=GYI zhl<aSpvvK2Q1x!|!!F-Whbq5wq3qoO<^Qwrc=$S0z8(KV$8M-{Jr5oW-w%(5--n9# zHa~LlXo7NgB8=eKaA){FsQUOZsCso5RQtQf>puafq5daSx(<EB)&JFS4(ba%?}QUj zzXVn8|As2BeIIr0>{vJx^-3stbv{%+ei$krZiRCHB$WH#K-o(@=IYDdQ1$RgxGP)> zXAt3DxZODXdD6H0pE~>ZLdE+xQ1RaFXRdsXg{n^jQ1$gnI2AqsB?n%HGvE$Cclk6I zDxGhEDu+v99sB}phF^sX;q%_S;VG9tOQ7<5GnBh4J#U2(>K}T(1Z8ixU%2*rnCC1w z3;h<@1_z+xeJfOapMdS~b*Ox6f7<Dv2$i2hQ0?e?xC8tSRK7g~O`bxP`)g3`=b&FY z`E?XL4E0hN!2*;&SHgqg?QkOe8B{p`@alt}apiq1RK9mX`F|<gAKnTh_z-M`e}u=v z>Cd`y9e@X*z67egJ`0=RkD>B;t6#Z%o(U(TE_n3^;dInLfk(q_f9=}Oe7HU8&2T(? zCp-vV0#)yCf;+-Hq4MQ>Q0?ufQ2uQF8}{1ZJkJtbi25cd^FKo6!=cZ)cD5L*eh)yU z_d2L{^mRBF{t&7jjsGouKb#Nc{=HE7_*u9M{2|;4{t`y;k5KX6`FW>qhARJ+Q0;po zRQ_BK4~9SV`hWK717C3c(L%Tl=1ZZ{-2s)4r@}+wxlr-{q&NRDJO=f%a1xw2?Cj5j zYA0`nN@p4F0Wb6VH^5fZcfv#9Yw$og<#(<;7C`00Qn(bJ2baKm;Q~0}_bz@XK-J4r zpvq?u?hDU{swW?VyTjYP`T?l?dk!kzfA#8_e{k_@g>~q!g=*htLFM!1FoM^?`S5P9 ze%&+rqs#ABI05r4Tnx)_NBDK9{J0+;2A_tC*Z3D*{XP)xhx#pWdsu?Xuk)bddl^)E zu7^tBU7kOI%C{Hc6gc5et{j@7>g95%@GgKV_b<Y!@W(KM|Axx{i7z>Mv<NOoy#Xp; z?}g3qDX4Ov@Um+c$3nU5fZM_Ka96kqDxDWY#pimc@V^69&tHU+*IU2h?C%G6L46q9 z8MeUP;WDUro(|>TyWwu|<52#50nUQ=c>WbCeGPwh?mD32Q-aFZ3*heXI;ed75}XYm zhRW}){^HV62NmDlp!}N$RZq@>ir>|+9^MGmz8`^#XWd_2`<n%&UJd8K%~19K7O49B zAXGcr?QgD}j)n^7WH=9=>-E11<<ApP<@-8RIu881^Y=*4bD-+O^-%V{1|=^Zhx@?4 zz$UokKb(FGR69Kd%Kk>E_<a!W1#f|B@ArBA=i%O{xB92^Z$HnOQ02P}?hE^&{JFrJ zUk~>~{Z*)N9))Tbe}X%~SK(H0{J&g2?g-_+9UczPf=9qhpvwIo7{MPywX45E`PcHQ z>qnMArK{+91ys1VLY3#kQ2G2%7{Q7EcI7x9&PCk=<^Ec@Kl}z%emn`cfiFVk=bt?% zyyo)hV0aw*?NIhV02SXGU<7Z64e$xi)PGz(YlJ(XKLaZN=0dq&4IAM)D0zMbRDOKP z^J%F1TKBq>E4#x8^+B)>E`%~a0jj=sLbZb~xCbmkrSCmZ{(cg+z=z>PI6gJb@?$EL z`!rO29fXSShoRDUJzN351Qq{r;~e*g?Wku%$-N=C5?%<W!^ff8!FF4XvwT?&m!aMO zRZs7R3hzZY8Sb_9I4hT<;6bQQf-1)iQ1SQ}+z;Law}an>5&VJIe-SEQci3i}rE?Ng zy*U*szcNtuaS+PiEl_gplTh{kemDa@?e%xr*4di_<?a+X3HCyz_X4PVy8<2sKLM4` zKZQ!)whTfghh{^S(-Nq9wF0VqdZE(287kbXz4`}G`TQrSbnmdeOYi<r>6;8y&PT!H z;c@U-cqLT)9)U{VOHkqOxx+Y<FH@n)WhGSpz8$I_TnCj8-++q$ub}+hdAv*4sqjG5 zmqX?M%~19Hdr<A^Wp93Xos0KzQ1M8^R`?F6aPNW2msg<bVKl+<G<YHEtDxlV#2sC^ zwn61{4^%x_50y_JfeYXRQ1yHKPA*>$fvSJ=pyG82oCUuN<?f$Q={s!aaj9+LNl@+Y zbg1-P2vttEK!tk;RC(PCRX?7Bvj1mqK5-Y9ABVvs&|eId&dpHq`aD!V-v<wX&q4V+ zZda$?87f_eLFu0eo8eob%J2Q&{8p&?@FY|@y$qF}y?1lrErrLR-U#Qz+n~zt6}Si< zySvkW2UNZL7F0ew235aahl=NJdyF$VKNG5))<C7}ot|HXs;@74?z*RQHw&uVRzsO@ z^8A=LzYD7WcnT_Aufqr)yq8PIVyO00hI_&<K-IT<pyKsQsCd5)mA`xJ?aH+cs-A6t zhrtg)<<H$v;XMbH?>p?{%J&ec_$`O>HxFfgDO7&m2vvWcg38Zn`?~tM4k}+i1=Y@e z1(mPSel9-U@Ho_0!dCbcl)Xv&kF$RMbg26HQK)o22B*OZ2e^82G*tMVQ0aR&RQO+p zl9w+*xobJl*(<<ZQGW_b{(Kqk0>1-QPacDk6MukhaI1+f{!5_7DHlMs`>(?YKI!>S zsQSMDBquj!LDl<qsPZ@+9tnq_;{Qb`e}3WBuX;8d<n-4<wU;8C3a^36@B839_$*ZU zO^O_kg>|S;hw{G<sy%!V&V=8Av*BN%{A---(sLqIJ-rZa1Mh+||F-8al>6PLIDgxq z{2hdf-*r&+{Q+<Occ}Vw$ic3CuY^)(q1x*Q;dpo_RK2_pn%svfw`~t`@oa^%Uxtd$ z)n0usRQi4oC7<@KcmA9JC9ltfD#wCXzYi+^uZ3zKcS5z>A3?RJUqO}Ac85B96QT04 z1*%=PL*@H9upPb!N<RGnDx4R*`M9aBo=t?3k89y}@H8m@yP)DX1Qq@zQ0coCs$Sg( zRnPwgm%=#>E?>{{{5+JqC!yl~JE(fRbE9jY2f_VNALrFwQ1O2sjNq+M@qQG_-XFbs z`@@|16sU4)gYrKIRllx)YVWr~$%RLt^8YVT@?i4e&c8OO`fvt};CrC*=d)1x|7|G$ zpN6e){4^(TPJn8+gHZ9i9xC2<Le;Bhq579ynp`;?4Hf@2Q2CjI^8b9OcwY;ZulGR7 zvtg+EyK}SSLMVF$&#R!dXQ=c&2^H^Gq2jaWbf=yUr9KWS{BE!RHYoqDf~qH9hqCuL zR61UU@^7CRuAFDUcGMZTHM|i@{@emp@4f|9&JRL`^OQIL8<hR+X1Z|dpvvJ;sQS|h zRUQ{Xh5vadd2}C?y<b4d!Ma(_{UWIHcq>#sT?{4nZie#bUZ{NeEmZs5X7)Inhs=PA z$84y4KMG3zu7PU57eJNgw>@8m@@MiKmk$e|+Tkfs;SE5UzY9tpe8QW51u7j6Lizt3 zRDSM#ge#|ca31P2q2$2TQ1$hPQ1#+Pcmf=Eq)X>=DDzEF<?&&t^7<lFeR&8T4gU<4 zU(=3q@jMk;J%f@%=R@V|=b-%gHdMa;463|#Kia#8i&38nRgbTQGJgoFzWf#{K6P`Q zJZyxLtFxiP?}Dn2mqNM!5>)ulc=H`vT)%k)RQOxq0(d)AKl3-J{B1hM$%!_2Eb28- z`FRDDzu$psA1_0Nd+<D0eygDJ=N(Y)u7+y2KZBA72OjI{?L4UZ(gEd94yydGhjZbN z;CcjM-TZN>g{aS4?CRS$pvwJMQ1vj??(*w!sCW-T>0b!t@2ybb{2HqMZM(#AJXC+O z6Wj%Zec(9M-{smvH~f~O|84j<*ArVwhw(c6BiG$r7oetj#J>UbK8I==?!Ez4ZkMBX z6?UHF+Jydk)Zw=Qy#u+r(EkvcU*-Nwn6Klyn*00FyA|rU6U=ix>(y_CG!c77N9Lc# z&BF=5rB}w^KJ?y!y{)~wMd*D?hWz$H@7M5bt_fUk<N7&zZ}WCPiu$X#e=BaDfoGz> z1A5`t!VTSN>U_-i;#$DfguNA9`*3{|voCRt<I<0!OkKxyEB8lY_aodd#GZZ`)SrP{ zp`O9jf%+882e|a3_-sK#b^S5SC!lWQ{xk3fF2ue4XomJ%jGg)J*6P!rxTiX$K7hV{ zl1<xj|8DGmg6mnY|7W<7>pNWca{Ul{zkm<HG;z8b{tfkSaC0yB`b|ZB7G`P(<G5dq z*-d6bf5!cIu5PYd(7TB1WbW5u|NYnvzkL(;yI?MvrQf@-cPnQ5qxU7$r*ppyz3}@o z`ucqU-pTbHuf86=3E2A>_P6JLXY|!>^~-Xfga3q2m=1CeHei1)*YCK0tJmKN^-YPm zz1!;xJK!EMpBnV$ufqMY|4#HC<bD~~BCelc_w(rKcalTuZ0sF_nSMWq`(fS-zXIRs z^_?kkM|}|2TQK{o*IefL`(O#K#Qdp*+b6ltp{L(4Tn|5j-bo2NUEF_-Yn|DmKg8ZQ zyqmS?sjs+#>+jf+9Q_r%!<(Z_MW}zF8-BN-FB!BI{5<-Pa?fx(wU&GRUWTuuzKr`n za4&h+;LZBcmwXMsyTeU_Iqa&>{Vm*2<%FBBbN?>%cIA2y^^U0D!~JPojo7&X^>4ZV z2$y~*qW5X|bFS^MKOXbn!;iw-xc<$R{N0J-M9ja(bueZ>K)uLYILlLL9^vjD?CbXs z`rC5<FL)l;Zd@m$|0;TCaDOUS_#MUlj>K;hoQ!!IgM(3j3iUeF`fWh{KGgr>zSryZ zqjxgb|DgXHu9De=-aL!h7tp6mvELg0-stZ)!_}Cb2A6Rii{00}*+%Z~;{F$0Gr7M8 zd-`3B`j^}@lujMM)zAG?@NO<Wx31rJ(Yu}NW%O=Gy^5=gtAO6;p?;s@dI9szxVe;j zjU)8iiK}dP<URJE<Gz(^nCq|D&w4ZAX0B(@+W|i=#IAlV@LJgG<1z$q!_F7cpXu$G zMgGi3eKuyF<X-*%3E1sG?@+FZTz7E2!gU{JUxpXLRo>srarY8>1-Kj6>FD2q`PaDg zyT&2@dl7b5afRQx*k6IWx#&F(Kgl%}y&uDmbLqDY*Ckx{W9R$c?F7iM$$sy~{=@!W z8i%3&H0qVyKL&rmwH<o;oeD3-?SH&K{pdZ<{qgX3a4)W3dozt4F2ijb>YcfN0A3DD zFoKuBN4fO-r{}KN55Gok_C>uTm*&q`V&`UWK96{Oi~Fa!hP>N<aL>>)^&hTIuXiu^ z+hcbLETXrCs}sK%(xw)|AEMp|UJNJ0dZ^z)xY>s5c<jwXZv%Q?HWT86zQ%jUajnGc zB-A@{e=gTgQNJCvewW}@zmwp(-rwCYo96Fj_5<$MqjyR|?`?^D+0pM*t{-vLNx^Ta zw=*8MCy%hd61_h-YpF&b2d_+>kNR4!1F#c*PbBPY<bDd*(U^Y{fA8Y@DC#d@`6c)k z^e=__&GzA*;*_a-P+x%A%c$3QvjgFa=v|E72e=OA{%Z8j<o^3y;n#$}9hm*wYZSR( z$W`?5e9-HUhezZ7Jj|}+{upmA<5%^^|BlDbU{JspQEQB<c}*SsqBo1Ue-1PKj)foM zdO!DR{6B_E^QCvAH_3;y#j_9o4RifI=6M==Z|DAf=$+v8_J)VbuGu7wo_|392>ktv zSN{{f4SQen?q+fSS@f22&GL47;UwJ5#m=v|Uf_Ngu77zqANTfJP(OnH`CR%v4Znci z_uyGx@4ZlSpycmS?6eZ@Vcx&%v2zvIhfr_t-5rF3W4JbXhyR1w(OePN*SSXi&h>h8 zaKG6bX1Gst9Y<Kd#r%U_zuwzzLH`QOm!s~1$9nVUQE$)n&XIwj{x$kc)9rT{f9G+3 z1=rcQ|E$-)#~It-zw`Ht=)b~MNa!Dl{asLRhC6WScRF^?frrEA;oj)y;TEoU5Z9&X zui^SDYW=>;y?zhCiChnPwe$|wAAZa6V|UzM0DDm1<n0W>CayeYx1s+q*CVLE4om30 z1?u-6AGf{H)9)0|ec+EV+vv3I@Atjm=b<{n>u-bJDy{>uzq{A_BkFJCb}w)LY4mSK zUFXB{)(mrSm*H-A>^5TlK6n7?E4dbMKL`E=p277Q%$K9ShI{>f=Kb4tguho|HXS>U z!DqO(aK9&ZRuI-7QGXcq9`Ki3A4GqacYi4A6Gr&ehutOUO~Gsl*MVFE_;VO~-{XEU z_ibFqVedIE{a)w#7}tH+$)Ja^{q98l7Ou;<wnb+;)NcwF2Dvt%ewWv~4j$s~oh`Sw zs{20&4Y)scenJ>q;r<oWyP`fI;qET<CS#UG?>pQNaV38_%+A66;|Vv1qHg2TZ*Q*i zuv6d~$2A#yYv2?(9bV||O@(`+KA!70xS0+0Tkfg*8@cx7`YCq53BQRSUEKeW>*L&? z#&rhz>u_^AJOg&aiCp@v$KEa2(Qh@^C%7Kr>hWQ;Vy@pXc3y!0_Ud18e>?Z*p#K{8 z|KJM03%uI}-e2jz&ix7SBHZi-KL<~g0lz)G{r5U$YG>4a+&{^c$6Ytq=e%EU^*rC( zJ=44WDe4~lEP8!ednab^M{nfs+vu%8v)jA<3zmP+^%eAf1pkcrLT?t_ZbEOh*ZUdw zf9KNg2ClCtFn*tfGrXO8SjNuQ=-ub-%FZvje}``PeZsqIhwnxI$LI~hJy2ik&9=s$ z4|D%4W=pugAM-k{Z+Y{>eR!{--j(}ysWE>5=+}vQTW{yD*g1sz!{Prp<J15=0=>n! z(eE7Y*K)rn*J9K^@!|Xk^^M$5^nR%U&ga_6o6GH)+;8L6KSTXN-24Oe?q2UxsKf6+ z+%%(pJ7({KXL0Sv{UmrLS2KRU1NGan*Uohm*PqZYqxTf|ALhCq^{HHcLQlU%+#l!f zTj5cPYh7D@U@+UCiSmP`Y(7_PN!2aQ<T8b9chr^5^<;B>#g@9dRNdNKSH7I<iF(Vq zZf8-tr!_T2?daxvqt5Bemo0CPGP&-;&|oRk6ZND^>E@`Z>5Q88irK#0*p?Ee&WA|9 zQa-9Lrnu=X<Ol4wVd{dZQE$Ew^=FHv#+E1*HFTE?g-os#m9hhwmZ-kFF%_*UWQxUT zYJG94yeQ@S`bh7_LbjAiMcG_bT9+;2!2s%>XhSx$F%>ENC|#6?rF36krYBY3-Gbc> z>Hcg_)SVv~NavhhE?<g@<-x&xL9T;u1Nojzs=g;WCo@=@7ID*)>Ca%Hxk_^&zai5z z(zp`L0I^Q@Wujbppes{ou1nPyqs94XC|`~WnRI{uP_!|vgyy4iF+(ac1UIxmwoW^^ zzUPdHNMw7n1RAX!q%bln8?<tL2|Kxb)Su7wWeQPd6IocCY|e==CCXnPg`xuNIYVYW z`AjiVqRoDD)P@OOXG`Ykx^$5|C}t>xOf;A&3}lN%)hhFrTu$fWOkB3SbyYN&F0GTV z)kdpUR+%WYbkvhAWV%cF!Vr0A4xIKtI@{ls-xLC<(hN3>yiLQoDHAt;pPMRQ3z@!h zf4UI$(ge(Utqf^yZjPe%P1zE8XT{JGt<9a2%WtIa3=NvQ7Ai$Q^-$qgszcXMR3Z}y zT;^73B3Fg-If_pemo}E!6y>|lCUIsjR5G713!%yY56V<7yd<v0a`(C@T`Co_U1h3s zQr99>r4!n2O-<F^f%IUN*+3>&uF^=vvy{(Ay_t<sy3kj~Ua4pn%eizHjf*--q|(Gq z89TO#&&{&W&A4HaxS*Hm$x`ZZ_BCu-VEMK#(?8g#CQ-3jqzzI+RNB(IJgqZfq++Vl z*pMz{71LCM#8+r(8?z;HGir|Vw0=ZFE)!9N*-|mn-%DT(-T53Llry@|Wima{REdiw zmsHDysgV<tWB`qEawGQgWUJLt6otl&3VK?U?(Rl3L=E}ITsM)Ztv@YlNH;o*>HdxB zp<=3`nBAO-sLNeLrA)CgN;RnI2g#<$IB7PRE|eNm2<KKS1y?>ZXU(2-L~m+lOSHJX zb6Pa3C0bL+4)$l7OgXzHTHQ9QY0ivk(HwVs<eX{I5$<;8tfQwzltM#qW4_RrDXG0j zsd;NxoUmf$$t&ik=JjNH)8+os{8XzNZ@P>$BCER7>MEjM(l6Q9+C>SuzZ7o}Pa*dg zI1_Spv>9$)K1j-SuS-)`DT`vMQ0_*mrdoS?B;pa*t^HX<P`anb!gGpPKU2iKpW-NW zuTw>#gs_XG%4`}$x*&=RnGN}KbVFKuvPIPp#XFbJ4GrYWSRNx`gM%6RgI0q{6%{!` zRozX9aWIZ$Du(q%Qtca1G*B*<qOJ_?Lw)p;Kjli%wIz42=u<1HOXQc@SP>!R?Wwe- zhv>1`$5kLIrs;5!*2s`Vitw|czSw9!jnG!H)--5a-MYMK`QjsL8ZPbZY+bdircq~W zXGcwgbjWNoU6k&LmMvZpO{p(VX-)+d4PfIs5*-Z|GE{YC2IWt(n=~@0*rS@rVT-kp z*fqM64Qe%YK{H_`2;N+JAd^~@FO?W;&>My_p{pvcL-Z301ETIsY+%JXT9ZmyZLz3Y z!8pe2y75KuMTWR&>sZ;@?%Pc&Wbs(FuPtqTnX7#G-J9?4$rKp-6jR>FiQ+^bI@z1h zl<54Uso4PyU>Hp>n(9yYN&cxF7c+$oj68y6*VWe-M`<Xm5t^!#l^Aq8r>;^~d*}2h z$$U3WxZ13gQM}Rxx=OtBW<423F|-m|vd_DO{H3GTFtmxGPI|CN*Us2PEiliY0*%dO z$eZ$l-g#rX&{NyF#<+>GuCE*+Tis~ScY&@sYQ#D^OMCLA{(Sd2%Dy@uH}!X+Hq<VM zUd9ZJq!?S+&@@<%OF;5@AiHTGT|@#*rAE>D&1%*NImC}K24XH+wRDva)I?&W8m}x@ zu1%AGwazYNS{@k}P4CHUn4T;5_j`w?xe}Ak&JG46UA`DYKxRxZV;O};rQ%IgSaVig z_=y@ODHal~wxn$JjW$%mVkuq1MZ!z#8xt+S$KPfF(K<%AURqbxxR4BI%SX1#Wk>+g zsE)5W)o9RHeR>n})haTjB0my_m3AS`<OIcyL^S%g5u;D0JTLdHQxZpvO})P6FX?_p z@FR^g43T=(FK1k5kZLmtU^2<cjc8+*mPI$DM3*RXb>JpZG~_Rl!?j%~<`q|Ftq>hc z45vjayGuld`~0+Mai%*v;8Z>Gs*t7&D<EmeDf5^HC-HcU(uM_w{qC<9jO#Kq7dq|; zA*p-GevPAZ41IiISXbEApGo6Ve@&!un=i^T)jCJFsd0$~q~5N!naxnV2prQ=qD{+= zALOs0O43m%PpW1Eu|W0q)-GGz@#ZXcwy%CO7S(s)Hzj9jbwy=Kv}wLHi)0A{bEaNo ze9oD<EWxmnC6#O<<4VoZYQ(NtlbuSckq#A`<~r)e0fRF1sXnEqHHe?;vQ<7M%*ZJE zS4n9Kav<tT7c<ilC1y#ZZ3}{a$fmk<{pCT*j^5r)W!v(DLueATZydNA98yA)^VdYW zoMC9VSQ=$krBTSLp*6HMMl<KmJ+f)mj2W|{<yq=#raxNU9JTjT1&h(Vfy}~za;enJ z@OVCJDuY9{+$}1wY(V5Ym~uz+x-|1%NNZGOY|dp$H5?x00$j5$k2sH3Gx;uRTsg1c z?-pu4-b6iXa`W-p!5{5>Ihpdt@d<f~f8NG(7G{gt{^p+M;yNPE^tUHdBLZ`s(?zVQ z^e}sGL-Y?3b*Ef-PPwZ;oo!~`Hn!6>s*eOZKyS>9Di_T&o#u+p!t6QO=HBc`FUaZ{ zF7)=E0j)hPEo2A!Y5MIO(#rCT>E;)bsd<<0bshPVRVLTnTl-V@Oa3xUW&}V*q~^KF zat|vX&bG!A)9QM&n=%M1N{BYgnom*A=$GrX^t486M09R_h4g^hVQ(RW1kLxB7$Rhj zu{D`)vWEdT-K_JUIg&h^j&QQ6&X9S8CP`6eLw%<K4#bsz>58?HExjQfSCOx*z;$H1 zGpty!5)}<fr?`$}bUBaYeu-ky>0=Qs(E^>#xQ>Z3%w!3KR-^ToXjW)p-bYPvEIJMJ zlPo9|{PJI;jVsju$8N{SfJ!?3s#hjjN4HI~@R3A@UWEB+Z@GV(1;!FZbn>z_$E{qu zCTd-AYIJhz>ea0))|`3_wwbbHn%O}8P|6sP_Oo=w3Ri*REe#QW^J01X>bB!>)4FI` z$Feo2YM!=a*_svYot@E=m8+xHXjSX#HOt!8cC@aJR;^vVieWTE!cMXYU(JU%$Y%8; z19>V*Po~8DEtLJKEVwb`FZWZ0H1uE{DwAa*#YC-}h90tZY>zG6v|76*l&DlH(=k!D zSM_w7Tac768db99zEZl=qGh@6X6EK|qcs|>F_7y|GZATuI?JqKMzd!#hhK!y&gZ5@ z%Uh#p#;ln$XHJXOcD8DiIfiT+Ez{HzTtjNETaJhzwMb2ugw{o!D?8S%Y412STCp-w zkjg@zdp7Qj&XQD&nl@~h>OC3RcwCFqqNZlz8#Db1McFW-E!DYZ(@j6%r~eF;)k2RM z8IX+!;vyu$Dmit<w0(8`PT;$#Zj~uz>AQubwwt<CkM0<p{5LC%(c*w@#2%KX!YbV4 z=rm@pOuJlt=qmS}G17@@!a54lX0ZvwY_7Y%?B_s*%=$92is~4KKgp1DnZA4}tKr_7 zj?Rz)<XXZr8*Eplr;std%3w22h<aVCpFS-0<RN#9L%HsCg?vscRNg7s<RhaQs-Njl z1;a#=p55K1qf#O5$`k3=kj-iBtx*${kgC`!^~Z+7m2s8ooQ>6ds2R$}dFwS86fJIF zw00@d#Er>Vt-^m+<;%8qK#gMy#3U!eVp(4f8PG#hS)8Fz`ZSb4ru8G6Y(y=6^%zZR z{M925Z=eavC<DzHYdbNMG2KXfhXu67nSKJ-PJ%~rt;se;RAU&MWOKp7o60WdXUJ;x zZp>EQSam`0DAcZa`AoU0xF~{*-x8B>=f1KN6gwp{tiXrel4jf&yIF!vEe>n@(P{O? zGp0pLw0OXP=Ny~BwXa^ia&=3Dpkri+Sg2|<sdmkmsREj-R~o?r-lT3DQGq75h;lmv z&w^E~!E~`WxUPVoEnc_NcCbe4Gu>FW*rbZ4l-{ywCRN3#;jK$0ThdzQ)MiwBp+MEt zf^fGgk<W(7W9ZXVoC7bW<OJVbF}RE{|7`hcnp>T&@2NJRCTnNP3}sU1y~GV`oLVEL zw5psSL)p{XY=LRNhG}E7cO)TT@pjACUYGSYn@6$6D*r;H3+0?y)_PmeD>5W9&BWe~ zOQIjWhb&>Sf#tj&n_yCg^*vrVzd6ga)S4DUI+%RgG?C1tRceLP+b<Pto`Als4%ix# z^U19)Y6hIh0H3U8+fQU=%;i~fg{qRXx{F9YVvk8NgCIr=Oj2l_NFGF7AtTvDO;pQq zE!IcZtwd^!nPw_vtDmt6L+DagYx~nHjZ0f@>@hGlE#=wrVP3}&6$w%B(QRQ}Ik@uM zsw14l-d8qn{G!Fm8Vft^o7mlRvrAvuX#eq&dT8pJR%*x0{xDb9ePn}(Fw{ffk%6?+ zV4_=FhG)2~+p<<Bo#gXMD+}rzo1#@RN`Wm=cG_IdI@?Sx&jJZ6bftm~(Q<B-TO6XN z95Bn;p`_%kr&GyGp}I|vYpX%5KFH5n)-=K&Oj^_OMn;WuauiiM#F5?T5;nxWJuOqZ zgwQ9KS+19uX8cQSP&Ya`wIt*BDAWZaYAlICPfK~Sn#}Cjf!B<q$KK^>^*z(s5UzOY z?U<)Z`f?MsDHFRH+XrUrDc{KK!B)O(AIg@O-6l|XW15BU{sqo~)zr9!PqTF;KgZFo zuzC8%cB0c7h8i{ZYREORM8u|7e?PHR%-o<a_8p;$HiLt{xM&CS`F^!F5>qEbiT4uY z5Q^VyYjb;$ZoXuVb4j*9-l<x!uNSZ6FUj}!=QlQ$2UQ8`i`tc0;#Ysep@y)U+*2{4 z;Z-`lF|_5AKQUoLP}>t{;l(CR&UI5LF&!FcPPsjkvDW&RX57k-Uy)NyP$>p&t>6|1 znGDz(*iv#~Fm)U|rS`}7VD6s8`;!vP=esh>QNOLRj6HtIEp2c!`ea8@(uE8pThlBd zn|Uo`Bwi&y=opqwU+G#!iry1Lf-L8#Q~pqbKgy6i!{B;y*<Bzvl2fVxZm?z>=h+hb z{}|zy-?W<^_UWek&AVW(5x=<!8h!<}z=+OHPXxpM{!AYYQ!ULk{nRqA<<GPP-2sFw z1?YC}5qXrNt4SJxYL(qm>GqsL|D0m3W@GhG%5=pHVfs0!;Y^hC>&yAX0A2;UjA=i6 zr4Gqa9_5hSQ(VSyMyEG8NmA&g4s%+@cRM68Z|l4R8RoP@6vvyjs?cdg>ZVMnHAl;G zq;TMkSDoa_a#Z3w-1e~IEkVVi3$3xf7#q-k*-?~=D|Zkg?05zbLavR{ALU~qqY*sQ za~*XFVdbskr(|88vg@JjW*0YaJ-#0<Rofoy8<g$i%L673d<>8!UdP|bBWj^)nHDQD zT4$m{s4Da@q{{cvft<i%)w0Dc(Tq(bT?+3&LqhgpN9jb#qe}8gryQD79V?eETM_R^ zYeC*t5W-?|2OB-3L|TW=GpXtN_!r|on)sWcrMg4APp%8fZ0hDngWCny$s{*lQ!FG8 zJ2*9ENzN&AP*IOv=PZ@WSJ|bnss!b>ZOy*3frK?loied%O-32$n>f9q-xqPaHSxxE zb830IyP%^=`9Uo&*tWMcv;FqRN<sU-PEU)&{+6RbjIP)x7|hdhwD~PZrt4OzW2Ma) z6XreP#8$9D*>&d&h4LUWFrmi^jAT+mXCPhR3;~i$ou`fvG^^$(ED%&rlcZ6VGr9@4 z0aDSm69Km7l(x;eiiyiLf2J&Wt?8|gVy34ONoi*`xfYG=3g<2=o{eQ8ik7e$tm0G` z!2%U4Sg|XHV2mryuynE48reL|i9;<(FrzC*^*-G)*Cd;L0bfx^SYb1=Rfje3tzb>G zzOtM_fxC24k2Fw8E%zfQn^;+q#zU!`)`mE+7~7$0`^6s;V7(YS6TyRCjWE=cs0hg~ z?~U?yl;6?}Iajetic0K8BqK305WkH^+@1HF-O+?F;Y5Wtb}XHU8SN$xM@Q@=)WSI| zLJFI|Zel^V%vd)ZaMTEge#;3gWK_knwi4_lfjer`)~(gmMcv);P%^b#VnMaHB30xa z;sFyyqK28o#R@j(PAq2%Lw0A`u8|6oNG4MI+W{J<4x*WUP?)fjf@UkfHkItps=m~U zeAHllPGh8X!LYO0EAi?_J2+rQUOCN@FOVG@@XStsVWynz(Gi1q;)F}IMl8=+Pk4qr zQytGTz|y^<?!}#-+)<;na3Moh>GDjdnfSZ7V>1Xk8C!vbZ8%j!P11XNk!|L+R=`Ye zz||W@w>a`%$+~7PW;5v7={4I2CA_3b#p&pV=;S*SaLGSK)*6E)EcQaK>{x<p-p)yg zjSO{+Gb#?UwX5@{!9>1kfXZCWGSun&d5t1%{@PI7EFk_*;sl$VA+bu7vx`A!H{_4) zF1WF8wV6#o5xOiVA?UJcXR5V)KenoPCru^@)M8hLw&GvTCG17%Ud<vBI_6!-S`}2) znFGqj%zQ+ZP9}4M%;#(&&CjCM4#qGrlUSC-jmv3k=&d{nYdabhcV*ZoNmeHIB(j59 z%EvYKxGW|s%!FZV;Oa!eWTSS+D#mg*VyD=&%3V6ZIMSliWhq}vU+R9{-mLtnGFp)E z!`milmQFj#>WWsD{MnXdV;gbY#iZH>_Au#TEtw<C%~u+->piM7wVbPxR0`1hRArA1 zydWx6=uQxECRSc+(GlP6)=m>5348L*sg)<BR_buCh3nTw;}w|X1W9c;u@<UY5}J1^ zsZhv@t&JGe2W6^_3D-@#Le#C+rB=G-gfRL?sS3$pT#Hadj-j%Io<DY_$xlP3(XE*> z1ur&of`qxe&cQPu*WA3Tk<FkQr$FUYBUuJ^Dcz_0726?dfjgea8F4#>aVRy|ohXVp zJ1Uzs#)>uc=hYYIJD)2nvl8xXY;eB7nb>)klGbWmSGr>58jV=u$)<T*u|!?dVKX)+ zDX4@cPHotB3nk+QST^${2s%*azg`ln;A9-vjj=3*Dix|u=z=x6m7B2sOm0^t2!oAz zPM$eIyU-S$SFw|u*Obh6oU5{&Xx1N%@#A?+(4jkB<(A8dH=;~sPHx*|B$(*Pjr5gb zdCFwjor#u@Y1Itox|%_k8TxUYmsL!Oq4;Fk<kTuZ`UwrgR^}GO+C5Pi@}zhIBW%6} zF%~8d7}4{}XOdgJh_9go#yq>B({75trPWm;Z@7VBz$%GI_czhNh={FP_)-f>FC{7~ z73BU1Gw*_7&8jk|oi$z>Aw|YE!I2y3*k5<>)ZK=JSJf;tqO?wA=hpt%BI$zEYMPMp z#LbqfR79uR*sYiM)Ymu0`pNEy6>l9H(0Os?8GfnOy95P+V-q!n+Kpi}swXlNo3FdQ zx3mpYTpyjtaRk8Xj8!E&#JbwH5v|U+0gwxxwGXWESEcC|+g4{bG<B-yXy|EV_CB3s z=7oXjIu+l&VLIhQA2Pkfg5>muQls_U(;Lc-Ic=y;FJ>DyH*#L6p_`NGnFVAep3zq5 z%iK99YSk#sq=tg!kiQGrEj|veOH1_0V><|*XI+v7F@=ZZ!hf9+*D{A+AF3fZ{rY^= zu(6S&4R216df(oh{PdQS!(I+0(_rHVbljOv^~E~EJKFxpX?m~{YQNj)&*dX}H=UEQ zBlkMdWgTzTKA!iyB4Edm!lUesA&7N2JUM7j?t$u{X<K5jZ?pT9bi=+GF?FJ<-tYFv zFsu@?=d0l#^Pw~=A9RNrVX#GDJ~)|V3nOxaoM%fUi~z_(_I2%#wrp%$LA@!qVi6-7 zs@8r=BPEeQ!;jJB+8Tr#Dn>e|%3}pOb8RO%!%DrgruNclwb(-<lDg~kC>PCB?R<LJ zRMFmtYj6y+llDq1oV=kWt&Z5@h9;&y0N>AzT;56ygS^F!g*4j(w)^5D6nl{{Aqqj; z(qPYsCCbdEFPu_XK=2wlc&M3~I=KpJTio(Z7OgmQOc%neHjHxIMtH&!JD?k~dX58k zb}ZWuhmsa6Qn!<)Ll7=U>BGCIF?}qlYtR?8eaX9$(qZ|kiKvF^ewi8<ql|t24$%?Y zEH<`dOH+yZJQ)+lo79q2Crg6;i4MP$5n4)r+~bP6n-+z=@Bhzas(JLkl9F;ULiBf* zyR_ZkMMbH#%^!^A%6bN6>KYzKhy{{KG>oY}(pM{v&2)e$Y$dq9eX=aMHA^>MOANNx z=#-jw8-{a!v__ct8=fMq3=?QRWITgPsx0MfYl&mowEdIOR^tE>$(t0cRtR`nl^H*e zVhu6MXUJt6=9V<yX<B^Z{bH-CavQn{zy3&682zTXkl2-2(<N7#g!~$z%`A;U7*d{$ z*ESG&C%Kk50c}BYjsbDm>^5@aj)t-7Ij*zN@o;mP?3TJRI{7BATSglah^zXeoM};# zrL8ixrEAE$)DW<0Q@tfLuNu2RYiy*T;<80SM7icAq0}v7q@n6YEHo-(?BX8yTEnx$ z+KvrN;{ItPvQ@b)7rouNQopT`lU4uSwjF)aA8c#5PL#ad;&}@4hmkf@EPuj9eT52Q zo{r8nVWD!exVaAJ{saui1Im4|qwolDFT?(ZnT-)!^!?f_t0O>r-kA>29za0kh0?}o z(6(oMZ$viuJ-{^uo<(zG94e-7kw{pb){nx}jrNJ}ql{~eG|cAO%A=w2qe|7swy3wR zKXp4Bse}vn1e1=Fjnqu)^lFDZELXb47wfE&^;m;L#uLp6kMzJyvc}q~&0r=|NZ27; z>Doi{(P$`azf>Y*rR;n9WVF<(M?D_0Rx1+(5C-C|3@U>%gxp#>H5S!W5X^#DXSU-{ z{_ttyjFt^p{1eGIa!)4HZ-(18>KpCWoy4y%qE8JlQS3|B%`(<fD{D*JwehxXYVBZu z-Zh#a%_OGR60@o9xs@h6GB8yYxR7abP0F2ZB}=f@z;OpxyCyd>A7uvM=eg|p%Djda z%^uxjZIa?Gn_adjnYL1CY=(T2-&rQ%b~|JhH6D{L@VZKJh`Q}LvXn~-wDK69mTgXP zGI_<a6-znJp~JtDs;q1w5J;4ES}lo$%Cae0>z+|KIqeP$Y0_Si4tTBkT9u(y6E90@ zn1`ZPtWHiB)F0G56BL_;ry}h!V8$t&=R$T$Mf;3xwP}w*%lk!D<V1C^SXrhq-~cPV zIxm{AVZza`cE$dgz;;1dF=&%WLR7s0E4fRu^l%*ii0vyQZ7WNbH00qSysS>_k*8K6 zT*)`H+%$T!-<UdCJ@!UcD-?U{>yTDy+k*5*bOzGwB5?-4()p!M)@rcdrlc%29PiOO zzs|gcA-Te*O$4i)m744op_X7F4Bur-705N1ph{SzHe0!Qd)~yx_Vqf|X0vpwQ+}1q z?e2v_3uhf{ENqM2%G=4QQ7$w<=(V#fZa@$Qv_%^cYYbo0Nx!y=-_QkB-S(G*_nIED zPiel5H1nw&!*q~iT4NZw<@ZsB7Q5O3n$cL{nPDY3MhL272sn=QFdybM4ZV~(mBxiw zZO)c-m8q|zt`%kIaFp}`U%9=oR_@zrl1g23Udx^txc#~yXr>o>yN{kV%c>p&4@STC zWZW5%d#ZgwO7BrY6A@#(26h~YV@U4ZC(dv>N~(Nf-W{2<)_9jZ;;kP}E1YjAmYDn7 z8N;MsJo4?1Kg6?Sdr6CeS=6qR2I}CK^GHSO(sqkMo%vcZTeWsk$FjEQg!WUTMI9^K zPN+n)VyAQ2(iQECYk1RUhax#Hszy|C*}h`&sBkUVU@&%|!A6ZBoez4Bp*LDdFRWR; z&t#?9C9K_<E7fmcR_paPiRkO}UrX}zUl?ymnz^wxaabN7#cb6<wVa(;nLNrHP6pB0 zvvo#e7=3)xz4id9=N$S(xCn$UKi+X*fy`dC6Q2)d3}xX}Ijd|y`;(t(*LhYR=zSAz zsvnUUovKP8c0{u)!{p3nJ7kP9-#70X(c^(px>b56*>eT)2A17OYC6MJJH*t~m1j4? zpLx}LH;Tn3J9$E>AY8FDD*wyzP<8Bsu>akW(xjob+hR%N2QxB;F*<UnzC`ayQp=8$ zRyo^SsiU=>_@Q>S1FQ3IXx~?fxYgIToUrBUiuL&QMG2yc+;c*xwh@VvAZC`U6L7p$ zqY@&A<uq!=FI%m!wPk5ci#mCJM0XX-@esm^4y!zBRq@cy%MlmL*!IbcVNBLAV9WMu ze@Zd0?MP?lOO%S1&va;x)7puOg0m5lH%`cChoRcBTwE^jRF*29tV_K5wV;I9Q}<q- zT6*6&@jR!`2+Lljl{q7ITB2H}`@8Ms24|#f2xjjB@+b0BT8kq++5=dxLl>GnAa`tX zAJ#Rzmh7?+Z;NN)xuj_23ZClHsI2<+0yXW{vKHPpq55x+Ep}_~Cgtjk#%vs#(3Y3n zCRR^_1>dr3+0YxwT5zWU85JNt@{-~t0Y|NPj=`<%YWFO~Fh?iI!`WeuY@ns5$2CIl zX3S9J2}=(9d0jum%ed)C*y~Sq+umh5xl-#UmhoF!f)%oy$A$`Ny@H3`2P8)(m*PZz zKSzf%(>e0vZy8xIy>|x?YMO^Ka&}}zUCZeAEwQ1*iU9*$U+``X#)=$A-b|To<8u;i zRmF^S5Q`&a)DT;2@L3)k$sp0h{l;JN#0FMv70l9Vo0XI%0u5o>oi1i-8uQ%G2xG(_ zHhJtW&P-JbS3{<UF?Xfg@WMFJ&s5%YQnAHkf|q}gEfsr~NO!hCjg2tFd8>^!LwEz5 zED<S(<Gj+*!3JAT&^WI#75d9Cg12dTB{^>UCDlDdJ&MwtgJrR4)UlvcPkM7M#n@l3 zP>QU)N32+4=t`QZL%rq<lOLq(lu**pm!y^!)%W-+lyIH2P;Kh`wfIv5+3ZqTNRZGy zCxc1YQ$?@XmCD=Ktu?~2RyW8|{{n&#d-IE=Ddt3ife+zU0vKhDWq4}S7#93H0BtT& z<<cAYx>Z$@iLt#^=&|C_OWu^qo4Zr-2rrCWVjUeUh+8Ge@U<W~@MWN<!^vY?o%3%X z*~kf8HHu)<Cr_sj5Yu6DXA+bbyQp1PSw+m+yKyAp(zapFjt4K*vBO)52CY>K4J|bc z8fDny9?H{meWT1+0L&G8GX>Ul-1+TMHfqTV3tmZC)YfJv!kjDVjMA{3;ifg(Ld*2` zR4lGpIl`p`n`$V_>@H;-Jc|ReT0FvsAmn08p%`qk?H~H7cp*VP$_Y)%jz3w|WK0lS z&<WDGM*BuUF2|3wX53R#v|3&Wmmh3Qk^NL(C+ZNwoEWUqAz`*oQ+uP4HWFLcB5|P` zso~y9Y3CHxh8Sz8?5z~TbA!IgkzpnV&2HuWc`OENjlwT4Ti0wh8k<uYUWL}n-;D;+ z;szYy$Z5(YPjYfV2enb_@VV>Ub7hon<v8AfNsJ4MDN54vqB4<1Fxlf<bi2vzt`zl} z5mh0h1DK4AZ0%Z$<yPE@MP6@F=WH~>rnC~3zp94H=0?5csUotiIw(6SkYY+}!#thL zy1#o7RoM5fUT8|3$+NS{Zt%*BZU)cP^IT_odD9ZLpR#K03Z~U=r#Te{c)t0&8jGgh z&ZMGuPjgb5<OEB$%8b<6{=o!dVC$Fu{h+Zv(;BtyP`h#L<$Q1$?}Ao3h*3r(oT#Z* z&DW%1okDPFHsY71Nfp{g(ng|t80Fdqp*AFO6Sz1*@+>w)vQ=;7jJ7s9S+Nf_l4U-> zftPV^jTN;j3vV2~*y<aEr=5D=^MxF==ly&YVti^9G>qL+*5KF&GYO;(vZ7uHptnkT zlN!Ti8xOfDeqw+wT?W$h;Vk*tC^<aSq*<J;|Kcal>1GROs%mCSXZjd6@U(Mfa$*O| z*b~zjMN%3^RA-iZIl72^(MjCtY(-^roZ8mOiz;JlUsZP0OS--}w&~w6T;)2UXB}(o zgw08ne;8HAwL^!DwE>8)BdoYuQZdgK2lUEFBJbMPx(sVGCPD4}wn&&T%4WemXvM1w zDMo#~({J?n-5#=WnXP^-ZajYKP;ESr?dhSz(_q5QEUJxttx1~sL~9_&6ACtLbnn_C zFq!pddP~Gj2UcA6jA_$eWi-mF_hyt>uyNl=f4${I`%hSN@u_5h;-lqUAEYyOtKF7e zHS|MMapC#|#?M7nIY=%gR~b~YxMl=QP>c@Wv`59(OBGiM<4xzP;9_Ag+RxZ%l)tfw zhQF?>sg?AE5OH3Fb;lr;!+O~0rynM#G@>|@u>-H&&7A3HC3<QeArl4?yf&Hfg_=NJ zDwpTKZ5LT%=YD`m5_<N+6&7E#W0KN418qbaizn03&Nqvo3^nuV?v!nm>Lq=gFSJg~ zp9dd9U&9>R)3+seI~hHw6R|!=rYAam>fgx01X;-|pR}^W!47)@)C4OD=M~ZRbWLa& z78O@YgXJO*GS(2OZlxt&{9)10UKM2{ardT#Ofh9o6qv78KO|oDj_{!rXF#+nz@#WV zP!tk@k(bs!RT}fA$y~kOiB10k7Bml-ZZ$t1mEf<H27@_w&@vw1U_WRPA_4p71}ggT zLjaLN)&NQ!5au@QB75T@SLHQuDF%Iod^)9deGVGvjFO+BhU)3I9c@jf>O|Za`X<A9 zjI5M03u6_jCDLppmy(o6nsaf;kCA1n$SE6E*+xs?gu#dfB?KwUHE#20=5+1cAdZrn z5~((XNovw@*tk{lgTb%fR_^l7TVk(iq-SW2^a`!9J#vRybrem*R<~GHd5w8u&|i#? zzf!HjYtCz%TV=E^E|qXq(N#Ok^NRbTc2nJYnp&)zj^ew<A}R>kvtkHqZbQM2G9+}s zt|3|RNIR|{DzAh_oCnn0_<6SKV^H|6!Fl2kr7B&ert2_EWKWt_BtbD{x>}p`Up#Oc zekr|5&&QYsM8~N|i>n^la_*eyaU<5s;SC}YmNzUorOV!afjG1mvbpD(-9Uvpnkt^d z8zs6jLrfWy&mE=cljEU0QBSIz^pl4S3wZYp_1spRgP68+5!HIOEL1Olv^3p9wQxr{ z?6Dn0hMkQKtE(pLN4lsX`7|-HV|{9Mp^zmbMlO|UCdAuFq#d55oW>cZ5}O3EMyL*K zQdLbvIqKAys(Cymk<~IEUDHPD#sfg}FKOS;4y+23B(2~2<(arnvFbANWyv+|&?Kh1 z1DoE5u%g2NF7aGha4S<aFPas#pu{qeCU=rAiB2q7MrQl7`2P5DrFI7^z8Q!4zAY)L z7xt0S#8}JFdd;RQJBBE(#F$?smp8owp8p`D+;Uqe+HfASkkKM4>q)`)*fN9KLVhFF zv*NcFrjV<W7R4I&-I&G+6Za6F<b=8)I)c&iyGCua6)N&FIpB3mg;Y(AaIKRM!>Ckc z)}qJC_5LFyw_ZS35n;8gsN=QOw=fK|RC!T0V)1oME55qL=CN}V#Y%KVio}+Z_0>tz za&8^Z-?!+|c~1BE987By$(BWwUgWYgnn`YzUA`P*8qr}R?8;WfcG({(ldi29+T17T znw-Gr%CI5cYmSXVHH-d>h~R8kts`j3jBuYai3d7brJ+%V^+;MxZ$4GlD}wamBVIjt zTGW(VJ+%2P(HXkUMDw}_dgeRDl4zbPqF3>L3k}G;sy8;Xw=eRvN5!`{_NwW`Xr7G* z=PSU9g77&SbjJVMyVhu)ZQPi56~$QIZK@HwbetGPsXE!mRheb0RJ>#r330a1k}e{` zP}ZxuD=M#jnvOn2qZ3#oLWw9e4OZny(}vSFa4;i$jR>=*IL+f3zJv|eKKf(7=OQ~H zh2xzpq{7&MgzBaS<6D+2`b5xS&mZq<tahJxw<;ZPce>D(&)G}*q6XHgc^j%5y33(Y z?+AxgPDZ#;U2`jV$)Lib9#LcI+Ao~4{%DUJXLIxc+Q+mxk%A5NFpey*CgY525W@JP zPFyxap2jxSM*JxgvcN49D_3MWlzPQ-#MWgm%RCy#d0+iWT9XZO6e>r;ky&?9vhfY0 z9c``oEq@JBl>av6kPo4aC430mUU7<OgR+_%KfXJSoGrS6lctj)TJqAp$;-?N-LgM8 ze*D<8C|RH-h9?~7k9X5GEwSc$vwdYZ2aTVAl=ao)$J?|s#EYaTrz=n4%2H?`iS($! z=%JK`@Hr10T8~e+(5pA&YOUD4qp49|Y#2Y@hKONgs0vOU(Kor8^bIQ{Iwu}%Xi${> zP1w(JyvKGpRk!K4H$^s_)(luyhOlDi0IAs_`W5L+e1`PK-?O|?hR<SYf+v@o$J54$ zW0uu#I|j<wmspeGIs(h3p;{R1`oi_z$oX4*o~eM`dX1aFCzdRo<7rg<(ZTTL4~zf0 z@#Ad_rnldO;E?I@LRHoJHo586=PgIv&X*=6_?2RhfTz7`&+y4_oeCMX3hKs2mAwf3 z*NSCoq<+;lf?qS$t9*GmFwepAsta?V_Tlc7CrtI}t2B6svOTGdTC1o$)2ssz)?>Rz zwo`s<T1D(KP4yqSW_#YLA;wQbxpeAWdvJ>fgWs0gvSs{u-hRS@3)VDtbW8RcNZ6o< znG*Lj?=5v(x-1sO@d!9~C(ji{-uKZ$*|GOlx21b5OKlZ9mAB9lcGa7%igjC-gs2zC z7g?jwit3hLmA!rZDBWMQmt@%MvHbp9-4+Ue)DE39tlKhB@h=3X=HixBLcOfpvb<s~ z4t5|8Hn@yKL~>M?dqP*SW&QZ^t^`cPxnQWWiW~3F-r_zPCYi%CCBC<zC|o86OT6ow z;;50!YgiEWnOu(Lma;z#Os)LtwjdlVGeQlpa+JM8cv`8f7j*gPxCwZOa<EQx6#Kd@ z2o3jY26rfiCS%!_NY4V_=0f_LY04Tkx_T5of<--N%^{oPlxiK1SLY?^nwIr6o#dvq zElyU?Y(9d2GwW8ZT+`G>25DN;v>1Wa67f#=IZZQWHO-jG>-1Y@%{hF=%o#JV*u+z{ zyviYIZ+6qnnN2h1Ml)x(%<=X*SkY}-qdjOEyAH*iL}4-jj5;#CnGJ}ic|2VyjfLXO zqug8JJ2(eaW<c1qCX*g;qe4AZQ|tMfI;|E|QZuu82JiB(JUqb~QoMO_j5~;tDIJ?F z=9`W_`iQwrGb@(EK6$&}CvS<4?#h<xR@=*Ko0b>*vOP_U%6&z4x?3VXkhs!)eGy^r zg}-H5#Mc;G?OAJ67Nfr5+;AaF=T(gCtBgzX{%ec~W=hMf4hKV>I9q~{W<#HatXxh8 zyl1tyx1c-D!goh*)g$?p#*q$mUhe<Ex*d>X(9G`{ow%_(5~o}HXyc%|p!9}(mTxzz zmT}g#G2)q*s9{~kzsEr@e$Sw1-*DvHTIHe4X0|~K_GkkurQESqs`U^2m^!RizsRND z?pDYahxxc8Uo0TWyfTrO8_*Hh@{RQEXd|CIWOSl0D3YHRw7ttG^lt15tuGJrRl9D? z{Gd%MTy`RlkI6|}neO+rheKdm%D}iM>SKLw7@=+-c;v-C>29f-M;Y}Dvl(V)HEa?_ zd0?1VpOJT=RfjmR*;HSQPGZ27+1#{2kF{<nq!}@gB76GF@`WKz|1gi%U^Dqu$YCDh z%hIDh6P>Mm>?xDP9@<FKW^O8-H08o`Y4{y~8PZ3CPiCU4;?P^b@V;U_&4J7gDl+w~ z;5=kapDNc=$n!0|sAnpND_`J~1{vO~|0-vh%xj$UYy#aOb5g2lhN-xF{xD=XlRPX` z47K<ivciX7@t`ow#zKkOWnX7h++s7j#r%t;DqY^h9vFuwh}ozZ)UZU!xhRB{n%r=8 zuw&^HWj^w;E=y*xPRGk96R{eR!J0s=)Ob+~Dz1EyIgE%&DMMAgd4@=+K2qppy(*xs z9p&^E94ieDNVtWJbbqjGrwH^eRY?x3A1+T_8|t5`uR7|OE>ER8Cl(?#ZgfT^GrUEQ zZYmblnzT0^x3G_3R8<Ne9czwp0^&Nx%imnm%)HkNwlO`ZX~DHY<cYm@FZf5p$(3t+ zWFOvS0diC<R1Y~Jiol_^#>ZSNg8Eh(=W3MSnAt#40!SlXD`Xe!f3p<|Hz8T9fDs+8 zfPJC$OdY0+ce(5=MEV4#Nx%N7X`Z06uV7Lq28Q+7OU)N}o+=wEjQ1~Dhg=9@E>yAD za8jnMt+36$0=ZNLsl$G@8eg-dX3wyeZ3(Df4;LiAj9HL^0*H&J#uqYskOI-~Xm@dk zg%~O`TrK7KnrSAQ%!e|S|FtS$_=YA`ocBlBi|UA`-Ugy0^;y1<X`j*@%h=xU5nK_R zgdcA7wGRrAoX_*LWyyV5QxDLp0@!19mfzM}x$cDAC}lH=Pi$JdDyHlkoB972-`Fhc z#moBE3(3+aHkYkvTe)JzT76=3nDe20VY6duc%7Yn$V*Gc?xUO0a5uB>VZQI!#qdtw zx+tWU`>BHjg<Et-@>k4}&TnJ`uR>-~ri>k5B%7&)dIE(?$#*w(#LPO+R`;z<GPFbt z+D!CQKTVfz-HdtOn2*%bad6Qq>Ai<M{jLXF>8NGE8;<nQHE#iD$U*rc@cQkJN3eQ^ zi?$1cnm3M)&I9&D`A8>qs*(+g40+J%sM?$Srii*drG_J+%Is$}4q>Kk)jA|Lc3U+x z(1?bdBNE}$os}w0AftNh@Wo9+2{PjNAUP~Eye=6qtQT5Pq`6^xDz(*#7n9kH<VyvW zZbGk^E^nyTs(jHit{o%4=~*!t^;OS`QTXU&)i*jT#x=g|Suxb>TgGtbOUX=^6Ztfg zbA8|Q#_Q{g*WalZd{*?xWKO=D9H3|h>C$;%$F@iqu4tP+{@!QOm5uqFch~!`dX6$C zEN8@vLMs7|uwJA4OLh1v!V`hMVQE~!xEs+w%ur)>hO>J^lrz#K*ida5!+?g7a1kFT zExIvtZ6iM}#R{(7cS1vzuhlF<IVRf0vZ@ZuH;yzdOx+rBx7Gb>OQDxj6N*PxjGB_R zXiK)cufaHD344x)HkRBj(`b>LVPLvJJsKmp=8;~Q;LujZ2(P`qMXt7Cr3Y4q*K%$) zXhfN@O#P!;jBBm2A(Y0lsRCDC`GcX1=tkJ=8P;((EI4uJ#|di4+9kHB1w-)Ur%JIb zDT8p=h?LiZCyI$)J@}__zS*mYfrO7sG`M6OnAL3fjlHv(pamLNRnnx{;fR8rYLge) z3_{D~QBP*DOzVB)@??6(kqGs!dX2Q3bo!5;G6G5_(T#JgeuS1&tGcw7yQzf1hRaFD zZ^(zT8&mK$CzFX)e&@T`pVU;7K?b8~_cc__dMZZ?sw*=!ctc)`#Cj}`*UcunDx0Iw zT(tkE;@7%k<wXFR@Kgs~-cTUq>G6kCYndt&DcGh;1zhQ$Rvi&7(k9<V+t-1HG3|!h zI=W?7{0nv}HJSn&+0xYCR96`jw}|J_Q-x8jn|VfD3U+40hLF^XQPE<$Zp&MYziiN1 zkvY|Qt2w{w`P59Vsq{PMbS^gWP(0B*M`liN8q4Y0KF7vy-fQZL8~rF6k~W$qSP!8y zM9I=0Wpjin>)Z^m7@%v9o&_RJIW$flo!5-XHE_`KM=`_Hkkqy_v_i&Gh9l;bos8L8 zIjpyD!zL%2Z91w)HQ?ZgjVn?e$RRgqM2|rUU2&zCplEEg##?pzSS8SijXtT!BD3E7 zL|^!Zu1SUWKqLK3!V?CM_EFduNXviueC+WoAZQ2|>}z=|o$DL6?lTHskVVH$da;_Q zNNv_xc}bQqux}=+Z#{{XHr8nMtl%*36j_~NZo-FCZGy$uWj18AfZzp@4c6K?(_Bck zYo$kRB+&`-<rSV@w&EcYv=+_eSX^OHuF(M{^aeH%HKD`QBMxucvf3XWGh~V9nEEVj zWho@ATxk=+i4@l_SG%!K)c&s>>2tMj#!;KwAhjvP17QVEYejA>Vg032fxYmFHWS-? z)UH=$&z7Gn6=!K=uC~Sb%yJN?o0_9eb0cm0?r<V=wVvd^W*e7G#5vRfRt)h+4@@P# zW$P-LB9<`GV9*sX`%uh9+^1|2>}E~xiBb1}6NG39F;25Z{4w)DfHAo=Gv4A{KvV0Q z*4P)dcHjbC`OLCnsBumpxys|sE2C2EnJ7#en~$+Z&F|BW{s!d#|6SYBAM^E}#Qned zUE9Ulc^%-ZyS5?jhlo^ZCd_(Eyv^>ZpEhwso$b!D|7p)`@cy8>E<_dcTzxtNS-`h$ zx$%>4n`|P0Rd2PLJMz1?ZQ7Euqs&xizy8X%O$dOGA@*m95pveno>?K;z-kG7Pi2x# zb<dQh=gaI3M>27p3A!5WprNf*+DVw=EnP9@7jR3QDAv2&wLcuWr^kl9+)9u68C;^K zrF~XJi&}C*?y3z)>dqp$E>hZiV8^JNOkt6sfqip~H{{iAvzn6K#GBOUtAaaQ2`>z5 zi;3k~^I=pDu^wxSpTlmnOWS6JgT}tTJe5b)EGAl>=ZnKi%7A9TovkZ6qt>-;Yge>K zOI!6#+-2=VzNqbsf!~qyM4jyf<|BxKEJIH6U!xtDh7;Ge@-5s4_|&U?8+UQLQqnWE zb@2n3tXZ~lMRa$xb_MTt>0GIoyZ8^}E^FuO)vJelhYNo9z@lTTAa76(whm^wKwat? z*1}o%OfDM{Do9lVx35#kJYUwL3ujz3O4djXM<iuz|1A!-Gex0QDjr#pRWVk26e<JH znNMS_r@%p=&61%b>VbK+L~rY~vCIFhkLGIe+h%b7bGKBUUY3|Rz!AA`<}Pnv!Pk#R zm9<;YRa0=8$`bY<={n0!oh3e>TeA(ax6La=mH!NaX;{`SmDkmcvCf*EUhKugSJ>+g z52zNYY$L<-OU#uRjhL@#0O!Ur){)wpn5{I87{v0BmIhI3{cg!*q<LkqJaS4+=lH*{ z%t!OWrU6OU61c>on+`G{j!v^ze`tA|n#6hHGe-DrHWgDHnjtEb+!Q`$sYOdCt13M& zk7VRnkEA|I%4!4~W}j@+xXrTaaei*NFOSGH&&hQ^_Ty!@RdJZ=XJaJ0qt=Ydrn!m0 z3d54Qyoxj$G4mU}3N>mX7e3aj85SuXJ*BAEu2^*{2rDs}*LQq}ag9ZNoL9GrnYrep zoW*qyK<DTz8Z<|-?E<WmJSItQG0!#X%3xF?J8lgYFD;5x_UbeU4hzh+BF@m=eeE}7 z*Kmo=*<l@`a$<tva2QKAyRZEYQ@0nhr_tA^El|zv5h{Q=k_>DmN5=vwK~k&EARd|p zQ#UiNVd|Gz#&#Yo)b^o6V%Dw8Slr^(Z9mUoUcyK+QwUTUR61bWIHEPgtK3ciGq`?{ z<584?vR!NV>J<Nv3L>8FWaz3~19!W^H25%W;me+3Qk1k+wfaxdP;ec7t;tQxlFLo% zS`s0+9I+-SiKr$RYEb-HVGV~;t1HWu?xn*#Yp)tcMuZg)TYlgp!|iKV69-l%-6oh9 z7tH^xE9&ZhfwwI@pv}0XG$Y=<$u&2cf-lhc#*G6=T{{ofB7SIY?z_W^1TjaBs<qfx zh{rH@UnY)iaE^=@Vp=1q*YZj5+38o*$}+d9<~~krF4FPtkR7=2>jbn;mK#{S)`5tM zu)aQCNEl(EQWg~}R?&iROU$fX2D|kLKP}Psi`hEVgl3c}`Qr@DKfezuTlSq_Eo!)B z9yV>`x?AN5GjDf{wis_0Xq*{;+gM&`(&eP57EK6=P)7;Du!w>&jnEyCkkzSazwwpK zoy?|TK8&mEQ@4Te^f@aBer-nk7IA&F&+aNJ<ZO+cpQhC#H$cwj!dOx*8UM&N*VR@E z?|<zBlI;y$C!@#uK)(_eck)T6oOZNIL%b5Jc2ptXzJgulxQ1(qWsp%B9_N}JgJ8?Y zM2PBRXsn6l$z+-9p0k%aQ{tq7?Jv7yFvDaT=UGRJMLL9Ze@Nx^{uQf!cr{Sj6$&<} zr<IrLF=6n}n}<$@)N6Zc;00UoGl^l}V@@o^B|WecNW7y<3)jdlx%MA$X64M6ON)m3 z@lgYcK8%#cTq<t2Dkxcwhg4{#n~@5Vm};i!RxF{bWUnni=?f&<E%ju@E8Mw*-I|M7 z7o~Geh(LYk#9X*DfBx&utd!{&f4@22nsPmWUv5i8q<W2Ct2otTjxZ_<hcTFW@wo=3 zL2~HkY5z}aXSN*Iao+KB3p~Xz2?HQS5M^JbSd3_jq!T5iM3a;&WtB<+fgw2#7J3F? zD5ZjD@$2|4RKBt2Cil6^@Bb~`eU<?smt8J_b53`kUcP;6g@PMx#uRjf;?tn@Wq}(b zeTKwFzGZVXlQAalKYX&^{Om-Rir5y`esN51sNV;G-kLp~pdjUhQ$TEGw%!01GUZCX zPOqF4KwS^ZfaMlU?dbCTI-Q|@)EFt@BHF--w-#T=uyx}n8rD4-wk$VD_lGX_CJpv% zg0Er&E(hSTWTvqluDCIU_zm6JqEcOJ-CH8<`*2Sle*><zCk$RvO`)7zr{aDH;{)78 zeYx1j;(=J%eD0>5xO|#`iv_dc^64}FT<jt6>-uSA45s3|2I^5hFNXU<DlO&dC6htb zFNDJw@d7qQjo1^vj~d~uN&s9T%w5ZIK`j8o&(noW-Rg@)L-eP*lV9S;TLdm+RyewJ zK}}>Ba>v!ut>gh4v0PVZlU-J=sJ~tV)BfBrSpt^~A#d2uzL+YObSo5HkF*pEQ`lpa z*~uHNC*w5oe(NI0_F>9^xq@r>q>Vxi8Un7KMxhM?ajcD9c}-vnaZ&c46q4i`=b7&> zjuM%ZZ0&Wk|CLc7E3(IkBpc6w=Rt#)1XW551jcT4pK8Xz^qjr7x_L-GJ5LT?G7m3s zUQHPv%+Ekr4hEDG$$7F<LO4^*Q@{y*4^8#30KNr^4W4#WZRBv#YXOi)&>WPAnF9}` zi5AV53D41$<JQq1oAQNQ#RCLkMd4VJfQneW=A!KKEK;WHV}oD?DzadV0=B<`H!vLj zrZ`jRq(!2!NrqQ{BS|SGK`w_zc?K6~7343lj|BF$m%oo&vrS)-`!=F5Fo&&0guXai zVb5CT-%lw+;%Q=&t`0pWzyx7Dcog;}E>hPPi_?IfA_hcMw>+8nrjv6S^%>-JeX4NN z-`_%E{40!8qyW$Fz;jWe^RSPZ_u&4L3tLx^%U|d!j(swu_KnC|)VuZ~qCCZqe|0J2 zAzTuGiN_{BJ#wKoAKvZ0jBsOluXIUCw5~7e+0=K>h`cLJU7%OEKN1(taa8HSJ7T#p z2!M^ju)aX=a1Ue9x+1sGCS^(&<wbIUCk3+lcgk3CZTCY9H9+}D(12L`GgmN$;Yv9# z0l}Q-$y#T=P7nn)?E-J2?AgV~=KqU3ydPO`s;gAZ7!VNvehn&ps=@4)ne}Q+VT8aN zbpjK=vYWn3sGGqa`e$g;G*Bcp*2Il0<Eifb7RPCvlZ^o3QapR&?R*cvG}nR{7z~Y* z)UHFcEN;UXoB{M2D`Sy^qCt{ZSPfn+H){zGnPxR}r3{E<lHNK#0filf0HR=sB4~uR zsdLlrmExd{#fkYi*~5U-laUizgp;lL;BNOh!KDxu)`oRY0rhKLBd#-h=0qg_n%U6Q zDI)9Q9V<sQ=J)5L(D5MOj5B^0-ox<=M0tIA{KD)p3tW!2hp$IpGx^};Vl7$WmbQ7i z$p@$Fn_f%TSifZm4oUh-Rm`}pVuSI~7|S5c;F?Lo2Fw?~X(1Ld>A;U{2m7Ad4W09+ zb_D1GbxCx+Zcn^X1i&H%e5CaP-P?%$)R#9kohhoJMz>iK1Bu8H&rE<WH&olH_HCAS zQ#!^i7xJE9M3U5)I_)W56ct`O!?A>f2jRS}Q^@8}L)1W%Gq3MajIi)^!s(wW%*^n& z?>PQZ*Gwx$L3rk3dx3Me0RiZU(n&!DB)a#Bl%w`>>aMBTxS+Idg>dzxIuTtPmM%aN zd;-6TT{`FT<@RA5L(}w-c*W&egPHl+>}Dp0g19R2W~d7(w}2GK^-0sc33_Yxt+c7r zqI-E9UnJ5t69XVA+#k(4<0~#uplp@GH5S<%`9~Jsc|2P?+p#W9OSaWxu1yM+(w-XU zj2qeU^N^v5iPMsXMCE93niH1m!Q`sjlGUS4$TQQ;1Oi`5VU~M!N##HsNd7=p@bgpA z%LF>OhBf8Q_|Yz&(wK)5S#1{CeCnNt(T}Lt-A+0WJJ~&dtAFX1T+KmFtB6hV8{f$m zGt)qDZS*Z~+7Ao|#l_7PVy@_^RSs88HKhPrjK(!Ft)ob(V=ljc8{<0;^Er=1%$?|~ z>5@N8AI=ZjLi;oU8JQxc;0BbS+UH%EFT<Z^po_sydO%UPK9IG}>SEQ9@CD}7IQ@!j zsGv5@shBYrfx?4S#u=T6>#pM0<DjSB>RKla-?f7qlCace3_ODD5j&Z#pyM5QLGGyY zu--713p+JNP6SJi^2U;&uHLV8CH*>Ir(Ow2ym><cH~8(xE@IUCQjSnfFPxNw@Q6!v zX_RwNLMS}0AC_v%Lu?D}b@+M&E3%3r(cSI7;C|;FC8ei}-G-l;dJ_|L@3Me8%mKj4 zhHfIOrokM(Uy^SJShU0Wl;cnncZ<R`h69V|40IfULhi5!|G8KgA*@iC=r#GWybbCx zD-=E;w<-e)C9lpZ=jlcJ_2mGklpDk%r)Yyb{ybbse-p10NjALA*%wp<aU<p|j>Pll z@@ugm&#EJdrMO!Vv&4&JsLBnwB=N4-WWy^d770z#J0fimCf`CWB;F#+rMJWv3TyB; zI4{Yv7A35EGHf#J>+-N92Dt8USb-Q^XY@QjBkqE%UMR4`7pMVOBAHPy9Rrd0kulPn zcDMWL-?;Pik{F|FJc7j@Z&r`$|NDv{X|p4ZfVkWI3N{OdG%>W+mbjhih+E9e|CffI z*742l>J|o*_5k+zr3J)_%p-S8!t(|v#OR}K;iJS38a_j5#F!vgd!pvDkk0qmATbFP zUVLVp8y8j2FF$&;QkyCE$PK{Kl{#5#j@Q2>9Jl5Z-JPWq_U}#Xk7z`4NTi0TM~~K} zDz^Fc{oAY0_|&^4_dSS3zb~H5bLFpv3S(YWbNT2Kk{O>rd|ARJs`B)b6>}Fd=cab~ z+?kJViT*RodRi1=rH(ZEcj$txboyQza@F!H1olMRL92k;1kyp?crMoDn_O?Km1jtZ z)Tk*N5p3!gx6MI|img}Ji85+WR^;ak>hFV63c|1mrb6rVa>Mgt2a+Tr2~cJ~9~+HY z!#<WO{zKXc<zh^e9A9}yg;Aw008uIeVNpY2YqaRSDzo0Q?6;+i^M<f)?JgOENHZ>r zo5EOT{v7hC?^6P&D*n&0-{Bq0<gFz2ec!oc(KgM$NeQ*hG(AKyv}*YLEn^<ZS!CAP z@(;G7F~34;vxV4Sez$$PJ4ak?y6AMBSn6MGOOS6!D|w$-RYP<8BNT1xC$@bN!g&0( zG*pZ%nHF56btBJ(3ubGeVCc{@H=cYXPUC<WNCi7Ne1La(>KPtqyS%VzK9T~|CR1oN zbZgNrwFyF@7vxUaC(I=LpnGvBBO#5D2=mwi-q=Vefxyfv7P#@Pm)<Tq*&L}?@WJK} z4S6v~tC2Y$a?d8ch!Co4f&jFT7cxKN^DqAZk-`V_%5tqgh%RIDJiv!V(&^>$K#9nI zx;((S^!m3X{{R#h2gkdMz17iyd72JzG@<vO%nw%bgF&qx*o0EJuo)hbn<_%4nQnR! z6Cfx_G>K$rn+Uw)aPQ>(yTjLOvzD4;%f4rxwzEAWU@%{qwMjI7u~xp5yKf6aiuxeQ zk&x8i>3+^VN{8Ts<DZ+^Q!k4-JOwvqNgOY%63kXCB+HkER29G&tuIBxeMCYP6A}sY zl9^IzB*fOQjhp6iPg~TEmKJ;)mL4ez;iz_#2D&l4D1-k}@(_zsk)`BhInf(1y=c0D z@AZ{h%|<D<4SoH!`H<3v-rud4${)z699@9u)Ludbyh(8+ot_qNkpYnzG}w4k;N)+& zHc8Nd$J;A=GR<LMntQhMKgNeFcuriZ$4R1rsY{UO)ck;Uf5ZHG!FKl4;tv?AZ--;( z%qc6je=xUruD{|0H7mpBf=Vq`@l_SSfo_<GmgabeKo1^S;=jwOSXET}AX;r|RFD;0 zA=daM7Ce$q1RapANF%CShguUZ2;g3BvLYY%I>>NFB|WP=5DcFfmcgj~M#O<@x*~h= zS*7<j@USA1z>4L#q(ww3)b(YN8t2R24;)GDJ3m=-o@qY)utPW7uo_Vq%sS1OplKMt zz$&x$#B#zBx1lZJKu7Ci86x=@ykpo}kDaAGk;#v_>+eF8{^E};U+<|)!QHt29I6tW zML+?~X=n`ZGJ5ea{HdE;)RV;bE=ukmHg%|jm@mMlU62u*Llpg$jMYmRD~#SRz!656 zN)Uf+O`#U(K>g*N*`tg-6jS&saU>1(m-7|%_Tw5UW7_qH6x<}b?b^^xYvXQNab0zL zCOubs1{EkW*^sugFWydaZPQM^Llb-XkHW!2Qdpv@abl-wHLs_d^xd@Z6h`Xn&>8@t zp6Dr?o{k6*FmIT7Z8tR%J5f8aF<4A#>t5Ijsix@`7dtwgqVHG(Tdch2CHg9uG2UwP z$lU}}?E}WB-TqchOESc^3xwPCUl#d#;*E!_8R-(A=1LUPU2e&)kvL)(IEj8iY2Q=) zgMj%na^zLSm+j$Pgu~h(C5YHrGzg2hXrr^?IC?c~^HPHbPWE584Qb7tEe7K1C#6q% z6rY?7CX_H1B}!_91!cOuR*9yi5vqC4m2Ib54G>~D*~d~~@Q}&DoT6E))3Dd*uU`5@ zc7GCSAnI(xYTcH{P<kTz6~1;rq36Bz%jgxB@YB26RrMlMrbF@t%k>a89k1~ja4CQ+ z?05KJ1Wn8P0s;JSs<__WZ5zkrqmb+gxo<j`ke7&lapCU`H*oI$Y!53PaRQQZMJhdP z$DLcmB@(f<@8^#)$`*KiqC(#ds3X!x;o&-yHwz$a-o2{(hU{q9lu5o~69EFVi$HI- zuWL3EGOYt@X9?Zhk>Zk0dBe@VC%^z-@+EvfkU?r|(?9EP+#V)nBtnXKwOt?w9wQh; zviOjG6rd~jR4X)4)t=gtE6cMy<KB2}?tX(<3<9}1jdU4+Ubd=Xk~?5$7LFbf4skk` z3n^*V+W@epKS9q1tIfojlPW_tal#QViHc)UlQ&=+rtYCm$&w6W=~@IOvjJFjk4yw6 zVhR3r31r&enf@o~O4#Vh!kn1MwHiGptV8UsL>M_Qd%QN5bAxHgS{fPxU*WFIOl+@! zF6Q`ksa)mN`}eJm>5hw*xLQ1FPv5KY*tfEmo?=g8+F65($vdu4n5&8Rh_BT4Cb`n@ zK^@BT5&p@7I-0I#42u9abY=iw&_Gu>wret>hx!kPfvQ%?K=>dUrphxnZGeC!k<gR~ zv>Crv>ZNmdq>Wdv$i7oX<gFRD39u0T`v)ZvV#Cx7`gJ@W>hML(iHB?BVT__OxGW{5 zjbVb?7b^Tl)N`^~M6+pr-XHw?{WTHjZKEbM-Aj|X_7tVI6j&sGhRs}9eNT3;24ja_ zdnrZhYucOsa*9fAig@-`$VJ-i+iyX@%xN66F$O9|3e(PtaEQ8hXO9RGT)bt=AL!F} z$-2>LFuHO%)j9-e0=5^&YtbrCvZ=5rUEkmoD}={m?aAFNUVwQ=17JcReE=Gd*n$y> zBq~LRYoymp6}d2)r#FYSl1_%+Q*|#h6>iNwA4TCftC7pxwvR7JSG>KN>P~pMu|yiD z=;$XlLDsBo=0`YnP;Y-ykvzVpa{FzM9^iY9h*|6$(zUZD*SW1wb~OtVnR)g`oScck z7L?54q>|=T-qo!tAFhf<=iwq2m-f?o*~~0u)!4x(9NH|1k<=OtBj*--Icm|2p*x$d zdtYU=iB^LsyHN|yTyc1;ck@ij7(SE7`1T{}SUgvVNr8wapj6`BsL4C%b+3(WT7xQa zp2+4_Z10w=uHcfH5(+wH{vGgcv6BtV$I@yCkC<U)Qj|nbL$b=19xUG+{o~Jnez!ww zvl1=e&PtiU2c4=8Kg}vIBI>C47yPk`z<POmb->T6K2_Ju%sN95kSCl;{w)+%eSY0@ zyNiQm5a{ZHT{dZ^{l@0@(1o7;t4!<hA3p#3)r{o%XHQ<fe8?58Vl#TXZ8IpZKY#kw zBQ<;U^bfP=Uw{7ei(h?R+xDC0NH4$m=Pzm88?Tjj5Ihl0Bp`zGb)$Ysw*JI?>>Kg! z(~}tt(w~YC<uwn(IiGc>>dIvlg960+{wn+(+JLn9IjXDKAM`KjXj-zHUCS;%@mTnK zvvBS^Xo<r<%PR^G9>%2=Qf7?dL}jlK;FW4K9`7Y3Dc!MAyut?(8Rm8w#reB6Pz@{h zu70FtF3&Uds>$$*z5rE-Z_`~DJ+aj@w4khm3@vTi<d>(qLl)8y+6u7~Ywq_pehduJ zf299xoItXqa#E+1hEmKvMc^9fFIyGu4;1yn4M->Zug{Oa_fvwD0VW)1B*7_+ZME9B zc>nQv_2=#z$IJ&Cm(VzM;x`+iuH1nADWI9a8n#ECm?i%@*mZ!pdFL?amt|kmQ-D?w z<}c`{Z}{}EJhZY*5L#RI^s7pPfpLrxcPflothH1eXf<X<_q6Hv9U|D}wL-82H_8Gb z+TfQ9oL}^CBEeFOq{#3==6v35U+IXoRV=|xF&1Vk+0aruLl2twMq&dn4K#4a6y?H^ zW2-JU&3Se9>L-?^Tk#Ye3}{RFvyQ4L>-L_8G$Z8p*UyHO?V#XD&3O2>`(^;BhbKqM zar?G&etpm6UAVWW6nAMW&`uNwE0Qea@leInP0xr(O$)iJ@517^>M(|#h|NO`BoCb< zx~ZH+ir}-CPriQo#0ru0(gaKoU4Od!bf>gY$ZanJn%yid5dswKLf$ZUZc?`&W$y@r z(rb`Jsn_5&=K;`}ZIIo{(A$o{=>-XxRw|HFAWExaxo1)?*ef(G>@!NtS#`KxU{f+i z$nrBIVT5^NN7GJq4o|sbsW?cT!D-Z6uuJcpjw*9SB(<bz!3%1I)LF4hP7A@!RF7O^ zHa5MR+nE46)N!-^&6gb!6ducfS+V?E>HAqSxyq}n4UIYN+6W_;8KCDhrj9OqC*)C3 zNx!JMzI8$}ghx7MX8YUaAK4?X%N@{WAI+Ao=T%lk`eter){cO6JM7rMa?bi%@7+m{ zX7$7~#miYv*(oH4b7tVIoaQGjEsuE5OF|(*m+9AszwN)4t&5hpG<&fHcB-r(fz#H* zbvT^y0Dm(JJIm!ZOj<Ny&>VOrG@NfS<D2v_#ZxYC%T3$dCq<2bP*G&&8h1BZ4M@d( z?{(QOl)cvc*E-AlfC>{A@W`0}oKILRL8VdbatGZzGe1LIPLMZyRmxjM{en2aw^!FW zLU1@z6l~Hsi)bFV3uK~IWbc{CP{IBNJti81Irvh8x_Uxl-75U)Sh+#$GIlmcCnx6X z+Lo-ROnK;`0^TgDw2lku%zc0lUck4gs3k8F=R2CjxUu$PvT0&cp$WYx96?UL8G}$E zTSi?sPV4w^i8u4?;;2iKCW?@>uRMc6NAV0JJb#vb4W8BnZq)w5a?foLtt8(t%>Qzu ztH_#FucLd-k?8d`Q&de>Xbcv*(6{6O_xf0U4N+}^rTsdBIX6n49Z>|*;z|sWp+jcj zHQCl?AN)-?SK8U7Czx;SY9C+ZR5R780+jI&@5}0Cx1DYrGwuEQkf>kPWk<v^r+Y|l zfNpW&Lc?Zi{;YWfFuglGeLv%hqLc5rmT1)W)mP<FCHp@n^<FkFeIVUs);vr=$Z6H1 zHC0g;{iTy)+>483FYCs}g(YlKBS07;5#CJVw_$Q9)e=cLu2P2zklH;vKYzd1iMIp~ z7?v)`cQkf$X2TeQFhkQR=I3PyOyaSk6#XfcFEG&z+*3Wb<x$BAHyS3`kGS^!3qv>x zoho$|&Vr#s(#1V)uFm2Qp`2QR*RBc9Uf>LIJn~kEOFdf6kI(t<q5kN`$&dwFF{+p# zv=|&Z+~;l@e>jT3Lp&JfAd`PjY{C3vDdfq_!wum}5-L~hzsepPdu;$7VHIlkJwWT| zRkp-J96FRv%+wNC!*f-lMMaq`Of4#oa~R<^vI~Nmo*#N<B9py*0u$&`VK}7=H!({q zWQCP<xhX?LMl<G2WeHz(S<Jc~ej^AppEg5Q=Z<Ehq-)nZ7N>{rztff2-|72YihXbP z<lmov{Uw&C46_0Zy{vU+T5|wlDDtmnFsPtNy8`v!_uZ6ZLovlX&Fd&UqZ_S5Z*&$x zSuF-SnQ6lsa|ljkz+z=t_eh+13}?a1wePqA-wUIJ=`YUPn=cs3mN~Vf4%l*?|3I?L zP@>u(7nltZ>F~Oft}tk7lOHZIjRWmengtGCH`_V+3Et-{a#m#zZ!+O)8{3j5S`4i~ zozZ-k>BR9%*`}CUt!CXB0f0)Z*3da~p(Hz01_>lK8;sO3Ww_`93<J=i7Wkwm&bvnt z8f$Fyw$$Cs2GIu=C)~mPop5e(@m=iNu1c2m<?%O*k9_WA$FGgUkQfqt=jdF~(~AF) z^SoQ{@Y}mlBgq~i15LFLljk+B+5w8McZ^j<0y8=ToN5;$&S_GybAn_Ik=UV3@9;2F zkVZ_wN^r1Qw^yC9u$J6;t}1TAYOJ$(Pvp#w$ei<F4`Wr4xD&3bv+WjdV>1D4`7lgg zksI}_n{0E+T}oc8J#^oRW-tcxbxe*02XztL6_qL^yC+5Eadmf8GwdgO*ll#vJu0;l z%et5x)u=|2E!rpvCbx&B<gO^Bi?aXi+i71{B?AK&SC0bqYd_RJ17}oy(d>LorBL0} z2?n&x7N$ujnM@)-AacRXqIaET4qGTv_OAnvUQG{On#JHPgv4SR4WZcmr_IqN(f3v- z8SFc05X5SJ7h0;~pn>}kv78+?a@ow2S14r47ll>Zpw$@&WUw#)x*T`;8|s?>bd!Y{ z9j1sW<*w*f<vIU7KRWCpnhyq^W&<Uynj7P~cL>o)XKflAbCfNn?$iM)SmR@J8_z%* zlYMN7Gx8&1B*Al0<HtoIc5Z$lGl$njDvC$aukQWj>K&Uj;tj`EH<!6cm<laW(SWQG zBjsBh2c#v1`Lz+jE3yyuXGD`~-E?)WTW(Gq!2(#gQxSjc^LP{`^I71Gnefz9(%uqd zT+lpbnZ_aCzIA7D9B8w?hTu`{(_-CV#U(ElOJt;z(2pg!DwgS^bKcfCB}n{6;g=k^ zZh6W74?C(eiY$|634nsP?QwUZrATJ?dI}!=kam_)u;@?jApZ8dC?8lpmK!{PHp8sC zmHw?LDOk0+5Dg$DE=^cE^aX_nyA?1X44k%Q=GzI-TT!%KM|HgOvxA@09iq&kl!uZN zTq-4uy*_vS>>Ua;mCj@*reuhee_*(d(>!a3$%YeSz^W9@+RO1#*QyA%1c#574mWGn zLyYqycqi~ov|}^Sh9<?VhVTU$k@`%O=ee%at@aZp&Jm_Wn^<8-%NbUid%w$=P~`De z+63DBiPuLyBdr^|!vFFI0pXfdgIY?X<H{97>%MJ%homB+vcVD7kT_e-QzA{3I<96a zIMiB*xFa&|YBs+{Sno|E&KK^*YdcAb@C!?<j)SYVZiA}Liq+Nzi<wF5<nZ#6#Go`9 zt#;%nB?jrN*c%I&-VLn}%#=H7Pk1J%Wm{_vfDRLyJ*y_liAMnuJKS9h`h*b<<A6EK z`W*B2YWO_NwC#)JPEBTvjGoCZoC8nv8{zb7$HOTjcUCG*vY@dMQ<^qpLyfYw&z%`c zhN4@H62^Y#TioBRJw*lM_o_H9QtImSHRn@=_mqfoc6FT1N<iDD(L2i!#O_+$;#ud* z(K$-PPZv~s?Ved964I*`wbwk5dB^4JiN=m05)09>8W>7v8$ifBp%j!}1`u~8hbaEy zpuwiSu6|ue92uMdt(Ma?Y}zSz0{2z11{F*yw5<61q?0JM1HT1~H{E6&`GGwX1JwB& z)X3$&>w(w0FiUnFoF(Bnq%?Ff+L9YkugNy!#h77cKcB!bI$hsnc~+-X2wH@KAe=a^ zCcbM1dSEQDI*F{8@(`6=n20%6(nfef<fHpTLH;UBxpzTk4-tjbuFMw8?<#utwQW^R zQzdO98x5r|Y3(Ni|5v|5SW{a$s|Y(~TMA~eS3uRkGSi4hn|f4yX&RgO^GTd-WUmp{ zUY@->KmSjNNPkPJCk1|T+p|!iZC+r^(TT9GZbR?1QoxLC^nZ{{2xj*B>rFF)*-NZ- z#wNAq;WP=SxtLu<NRDFEGO<)i)3nkEN;g9<+bw8KDl^8A<C_Jmi?bS!3KksK%<Bvm zxKmUT6u36Jn>1h;iF;|L4Asmg|L2?8{@IJ~fB4PpTm5rByMJ_g{F(pw<?Oz2BYvIE z?rV4A*PHUrZi7*DejV=mvG#v8yB~h<&-6|IY2y-h`|VF3@8Rse1$@|O^#==@9`EDC z{0_@{G^PH^|E2eC(fhTU-KR!PY|3jUa=eTmN9Bh<{6;~=vx((R%%=JN{`>xh?0@*? z17S%i5Z&YLep&NY$sGdHJqSkR7l1fht6{EkD;R?0v?PCRNQm0{VnFNpXIlZ+en(<D z8Ob$sDG+|-Nyw16%eRoYT^wS28pHSCCylWiT?L8Z*%^F4AA`=tXdh*m!0z^X0!<+S zwXQ+_B_=uIH89nsu6-(}U%NEhBq(1V&8Ui~C_RKl^+*Vr>;aW{?G-;IMXI=sK4g+; zy5%%R!qwy$%-N++EA9v#vTDBRS}>(|Wphs~?TwPo)bWxrQ({}w?dO`p+13_B(<<VW z<iHbtOO9j55>g}vvjtHcULD_WZMkuPRw7W&46=%eT7cvq4ws8V3M75D71j!|AaVyS ztjFBK*+Q%w>&_brvAJ}j5ngO<$#63*C&)H~w5DBc3^eK%2-@2ZuPTKcC86f6<<|kq zINEfLm^{!{lToIWsDo|5{9$V=bQzm?s0D~0qP-p}-jLpM5soJDacgU}z>22%`8<{W zkDwtr`Q)RTd{2`S_V0)$eo;7z>k3|$-_08T5#Fu&YDWY7u(jou0+^^}mEbgEg#;C( z9G+Tb9#4V~-_ZcSDH|-dMzuF2ku;FGLxZCojBzKd6MO~!r%~Q*Z8gRQ{Gjq_xcSE= zoBVokLiSs>DGu+??2TnQjX%>N#Nu`hU}?-|n8_6l?RK*gXl5Gi&_j|QOlH9coB-Me z0XkU+%BAnFY1%jF(R6cIfOgvJjLMDK8>HY)qgmnr&w|j6bxfcSTHpb$kt>I@T|kTs zF)IkA8aOmE+heqj0@<B1YmBlK3{0C)oFnGVMF)I$|7|Mb+5CUHtE;UouEA9)6m6Ra z=-8Q@{YlX=q7dv?BsW}bU%k#PP(0ph%Y!PJ2!7Hke4^<S+G9}<6xF=9eRb4(`{`bf z)agyGW5pC9c`8p()x+(pUpDVmy+CFpxWd(&&_AP-N~=3A2vZBqy#iD%WCC89?qC$K zfY0r#)BI=ox>OC-kkv5JY_)y$to(ZmSg*4<?a!kBZ761#d5t7E!Q8(39aKP(4_=7_ zgh-mprvtlj^XR6e%jNdfGGA|rN^?rt+A+H}<YjX<pWgjf=j{IF*4FW*N4p9n9Wsjc zGT**}AjbZIze)0ij%A8L7M*teouk$E)qmwY2W!nS5@=&J+gFg!QtQt*pI9E=hNwHa hHxF7mw0)O-Rn0rMO$C_W0o_gG((+WEdokbc{vX-L)X4w< literal 0 HcmV?d00001 diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..f550027 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,4662 @@ +# French messages for Mutt. +# Copyright (C) 1998-2003 Marc Baudoin <babafou@babafou.eu.org>, Vincent Lefevre <vincent@vinc17.org> +# Marc Baudoin <babafou@babafou.eu.org>, Vincent Lefevre <vincent@vinc17.org>, 1998-2003 +# +# , fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.5.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-09 13:44+0100\n" +"Last-Translator: Vincent Lefevre <vincent@vinc17.org>\n" +"Language-Team: mutt-dev <mutt-dev@mutt.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nom d'utilisateur sur %s : " + +# , c-format +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Mot de passe pour %s@%s : " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Quitter" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Effacer" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Récup" + +#: addrbook.c:36 +msgid "Select" +msgstr "Sélectionner" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Aide" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Vous n'avez pas défini d'alias !" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Alias" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Créer l'alias : " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Vous avez déjà défini un alias ayant ce nom !" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Attention : ce nom d'alias peut ne pas fonctionner. Corriger ?" + +#: alias.c:279 +msgid "Address: " +msgstr "Adresse : " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Erreur : '%s' est un mauvais IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nom de la personne : " + +# , c-format +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Accepter ?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Sauver dans le fichier : " + +#: alias.c:342 +msgid "Alias added." +msgstr "Alias ajouté." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Ne correspond pas au nametemplate, continuer ?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "L'entrée compose du fichier mailcap nécessite %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Erreur en exécutant \"%s\" !" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Échec d'ouverture du fichier pour décoder les en-têtes." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Échec d'ouverture du fichier pour enlever les en-têtes." + +# , c-format +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Pas d'entrée compose pour %s dans mailcap, création d'un fichier vide." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "L'entrée Edit du fichier mailcap nécessite %%s" + +# , c-format +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Pas d'entrée edit pour %s dans mailcap" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Pas d'entrée mailcap correspondante. Visualisation en texte." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Type MIME non défini. Impossible de visualiser l'attachement." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Impossible de créer le filtre" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Impossible de créer le filtre" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Erreur d'écriture !" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Je ne sais pas comment imprimer ceci !" + +#: browser.c:41 +msgid "Chdir" +msgstr "Changement de répertoire" + +#: browser.c:42 +msgid "Mask" +msgstr "Masque" + +# , c-format +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s n'est pas un répertoire." + +# , c-format +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Boîtes aux lettres [%d]" + +# , c-format +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Abonné [%s], masque de fichier : %s" + +# , c-format +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Répertoire [%s], masque de fichier : %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Impossible d'attacher un répertoire !" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Aucun fichier ne correspond au masque" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "La création n'est supportée que pour les boîtes aux lettres IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "La suppression n'est supportée que pour les boîtes aux lettres IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Voulez-vous vraiment supprimer la boîte aux lettres \"%s\" ?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Boîte aux lettres supprimée." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Boîte aux lettres non supprimée." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Changement de répertoire vers : " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Erreur de lecture du répertoire." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Masque de fichier : " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Tri inverse par (d)ate, (a)lphabétique, (t)aille ou (n)e pas trier ? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Tri par (d)ate, (a)lphabétique, (t)aille ou (n)e pas trier ? " + +#: browser.c:1049 +msgid "dazn" +msgstr "datn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nouveau nom de fichier : " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Impossible de visualiser un répertoire" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Erreur en essayant de visualiser le fichier" + +# , c-format +#: buffy.c:442 +msgid "New mail in " +msgstr "Nouveau(x) message(s) dans " + +# , c-format +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s : couleur non disponible sur ce terminal" + +# , c-format +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s : cette couleur n'existe pas" + +# , c-format +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s : cet objet n'existe pas" + +# , c-format +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s : commande uniquement valide pour l'objet index" + +# , c-format +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s : pas assez d'arguments" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Arguments manquants." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color : pas assez d'arguments" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono : pas assez d'arguments" + +# , c-format +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s : cet attribut n'existe pas" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "pas assez d'arguments" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "trop d'arguments" + +#: color.c:721 +msgid "default colors not supported" +msgstr "La couleur default n'est pas disponible" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Vérifier la signature PGP ?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Impossible de créer le fichier temporaire !" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Impossible de créer le filtre d'affichage" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Impossible de copier le message" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "Signature S/MIME vérifiée avec succès." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Le propriétaire du certificat S/MIME ne correspond pas à l'expéditeur." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "La signature S/MIME n'a PAS pu être vérifiée." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Signature PGP vérifiée avec succès." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "La signature PGP n'a PAS pu être vérifiée." + +#: commands.c:223 +msgid "Command: " +msgstr "Commande : " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Renvoyer le message à : " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Renvoyer les messages marqués à : " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Erreur de décodage de l'adresse !" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Mauvais IDN : '%s'" + +# , c-format +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Renvoyer le message à %s" + +# , c-format +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Renvoyer les messages à %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Message non renvoyé." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Messages non renvoyés." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Message renvoyé." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Messages renvoyés." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Impossible de créer le processus filtrant" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Passer à la commande : " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Aucune commande d'impression n'a été définie." + +#: commands.c:483 +msgid "Print message?" +msgstr "Imprimer le message ?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Imprimer les messages marqués ?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Message imprimé" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Messages imprimés" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Le message n'a pas pu être imprimé" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Les messages n'ont pas pu être imprimés" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Tri inv (d)ate/(a)uteur/(r)eçu/(o)bj/de(s)t/d(i)sc/(n)on/(t)aille/s(c)" +"ore ? : " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Tri (d)ate/(a)uteur/(r)eçu/(o)bj/de(s)t/d(i)sc/(n)on/(t)aille/s(c)ore ? : " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "darosintc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Commande shell : " + +# , c-format +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Décoder-sauver%s vers une BAL" + +# , c-format +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Décoder-copier%s vers une BAL" + +# , c-format +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Déchiffrer-sauver%s vers une BAL" + +# , c-format +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Déchiffrer-copier%s vers une BAL" + +# , c-format +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Sauver%s vers une BAL" + +# , c-format +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Copier%s vers une BAL" + +#: commands.c:706 +msgid " tagged" +msgstr " les messages marqués" + +# , c-format +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Copie vers %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Convertir en %s à l'envoi ?" + +# , c-format +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type changé à %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Jeu de caractères changé à %s ; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "pas de conversion" + +#: commands.c:914 +msgid "converting" +msgstr "conversion" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Il n'y a pas d'attachements." + +#: compose.c:84 +msgid "Send" +msgstr "Envoyer" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Abandonner" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Attacher fichier" + +#: compose.c:90 +msgid "Descrip" +msgstr "Description" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Signer, Chiffrer" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Chiffrer" + +#: compose.c:131 +msgid "Sign" +msgstr "Signer" + +#: compose.c:133 +msgid "Clear" +msgstr "Clair" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " signer en tant que : " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<défaut>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Chiffrer avec : " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "(c)hiffrer PGP, (s)igner, (e)n tant que, les (d)eux, ou (o)ublier ? " + +#: compose.c:166 +msgid "esabf" +msgstr "csedo" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Signer en tant que : " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(c)hiffr S/MIME, (s)ign, ch. (a)vec, s. (e)n tant que, les (d)eux, (o)" +"ublier ? " + +#: compose.c:228 +msgid "eswabf" +msgstr "csaedo" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, ou (o)ublier ? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345o" + +# , c-format +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] n'existe plus !" + +# , c-format +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] modifié. Mise à jour du codage ?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Attachements" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Attention : '%s' est un mauvais IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Vous ne pouvez pas effacer l'unique attachement." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Mauvais IDN dans « %s » : '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "J'attache les fichiers sélectionnés..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Impossible d'attacher %s !" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Ouvrir une boîte aux lettres d'où attacher un message" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Aucun message dans ce dossier." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Marquez les messages que vous voulez attacher !" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Impossible d'attacher !" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Le recodage affecte uniquement les attachements textuels." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "L'attachement courant ne sera pas converti." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "L'attachement courant sera converti." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Codage invalide." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Sauver une copie de ce message ?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Renommer en : " + +# , c-format +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Impossible d'obtenir le statut de %s : %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nouveau fichier : " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type est de la forme base/sous" + +# , c-format +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Content-Type %s inconnu" + +# , c-format +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Impossible de créer le fichier %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Nous sommes en présence d'un échec de fabrication d'un attachement" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Ajourner ce message ?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Écrire le message dans la boîte aux lettres" + +# , c-format +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Écriture du message dans %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Message écrit." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME déjà sélectionné. Effacer & continuer ? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP déjà sélectionné. Effacer & continuer ? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (heure courante : %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- La sortie %s suit%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Phrase(s) de passe oubliée(s)." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Entrez la phrase de passe PGP :" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Entrez la phrase de passe SMIME :" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Créer un message PGP traditionnel (en ligne) ?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Appel de PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" +"Les messages S/MIME sans indication sur le contenu ne sont pas supportés." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Tentative d'extraction de clés PGP...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Tentative d'extraction de certificats S/MIME...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Erreur : Structure multipart/signed incohérente ! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Erreur : Protocole multipart/signed %s inconnu ! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Attention : les signatures %s/%s ne peuvent pas être vérifiées. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Les données suivantes sont signées --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Attention : Impossible de trouver des signatures. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Fin des données signées --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "oui" + +#: curs_lib.c:158 +msgid "no" +msgstr "non" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Quitter Mutt ?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "erreur inconnue" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Appuyez sur une touche pour continuer..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' pour avoir la liste) : " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Aucune boîte aux lettres n'est ouverte." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Il n'y a pas de messages." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "La boîte aux lettres est en lecture seule." + +# , c-format +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Fonction non autorisée en mode attach-message." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Pas de messages visibles." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "" +"Impossible de rendre inscriptible une boîte aux lettres en lecture seule !" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Les modifications du dossier seront enregistrées à sa sortie." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Les modifications du dossier ne seront pas enregistrées." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Quitter" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Sauver" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Message" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Répondre" + +#: curs_main.c:403 +msgid "Group" +msgstr "Groupe" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"Boîte aux lettres modifiée extérieurement. Les indicateurs peuvent être faux." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Nouveau(x) message(s) dans cette boîte aux lettres." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "La boîte aux lettres a été modifiée extérieurement." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Pas de messages marqués." + +# , c-format +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Rien à faire." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Aller au message : " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "L'argument doit être un numéro de message." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Ce message n'est pas visible." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Numéro de message invalide." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Effacer les messages correspondant à : " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Aucun motif de limite n'est en vigueur." + +# , c-format +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Limite : %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limiter aux messages correspondant à : " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Quitter Mutt ?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Marquer les messages correspondant à : " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Récupérer les messages correspondant à : " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Démarquer les messages correspondant à : " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Ouvre la boîte aux lettres en lecture seule" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Ouvre la boîte aux lettres" + +# , c-format +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s n'est pas une boîte aux lettres." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Quitter Mutt sans sauvegarder ?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Vous êtes sur le dernier message." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Pas de message non effacé." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Vous êtes sur le premier message." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "La recherche est repartie du début." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "La recherche est repartie de la fin." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Pas de nouveaux messages" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Pas de messages non lus" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " dans cette vue limitée" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Impossible de changer l'indicateur 'important' sur le serveur POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Pas d'autres discussions." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Vous êtes sur la première discussion." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "L'affichage des discussions n'est pas activé." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Cette discussion contient des messages non-lus." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Impossible d'éditer le message sur le serveur POP." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tinsère une ligne commençant par un unique ~\n" +"~b utilisateurs\tajoute des utilisateurs au champ Bcc:\n" +"~c utilisateurs\tajoute des utilisateurs au champ Cc:\n" +"~f messages\tinclut des messages\n" +"~F messages\tidentique à ~f, mais inclut également les en-têtes\n" +"~h\t\tédite l'en-tête du message\n" +"~m messages\tinclut et cite les messages\n" +"~M messages\tidentique à ~m, mais inclut les en-têtes\n" +"~p\t\timprime le message\n" +"~q\t\tsauvegarde le fichier et quitte l'éditeur\n" +"~r fichier\tlit un fichier dans l'éditeur\n" +"~t utilisateurs\tajoute des utilisateurs au champ To:\n" +"~u\t\tduplique la ligne précédente\n" +"~v\t\tédite le message avec l'éditeur défini dans $visual\n" +"~w fichier\tsauvegarde le message dans un fichier\n" +"~x\t\tabandonne les modifications et quitte l'éditeur\n" +"~?\t\tce message\n" +".\t\tseul sur une ligne, termine la saisie\n" + +# , c-format +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d : numéro de message invalide.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Veuillez terminer le message par un . en début de ligne)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Pas de boîte aux lettres.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Le message contient :\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(continuer)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "nom de fichier manquant.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Pas de lignes dans le message.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Mauvais IDN dans %s : '%s'\n" + +# , c-format +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s : commande d'éditeur inconnue (~? pour l'aide)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "impossible de créer le dossier temporaire : %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "impossible d'écrire dans le dossier temporaire : %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "impossible de tronquer le dossier temporaire : %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Le fichier contenant le message est vide !" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Message non modifié !" + +# , c-format +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Impossible d'ouvrir le fichier : %s" + +# , c-format +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Impossible d'ajouter au dossier : %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Erreur. On préserve le fichier temporaire : %s" + +# , c-format +#: flags.c:332 +msgid "Set flag" +msgstr "Positionner l'indicateur" + +# , c-format +#: flags.c:332 +msgid "Clear flag" +msgstr "Effacer l'indicateur" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Erreur : Aucune partie du Multipart/Alternative n'a pu être affichée ! " +"--]\n" + +# , c-format +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Attachement #%d" + +# , c-format +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Type : %s/%s, Codage : %s, Taille : %s --]\n" + +# , c-format +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Visualisation automatique en utilisant %s --]\n" + +# , c-format +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Invocation de la commande de visualisation automatique : %s" + +# , c-format +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Impossible d'exécuter %s. --]\n" + +# , c-format +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Visualisation automatique stderr de %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Erreur : message/external-body n'a pas de paramètre access-type --]\n" + +# , c-format +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Cet attachement %s/%s " + +# , c-format +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(taille %s octets) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "a été effacé --]\n" + +# , c-format +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- le %s --]\n" + +# , c-format +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nom: %s --]\n" + +# , c-format +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Cet attachement %s/%s n'est pas inclus, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- et la source externe indiquée a expiré. --]\n" + +# , c-format +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- et l'access-type %s indiqué n'est pas supporté --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Erreur : multipart/signed n'a pas de protocole." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Erreur : multipart/encrypted n'a pas de paramètre de protocole !" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Impossible d'ouvrir le fichier temporaire !" + +# , c-format +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s n'est pas disponible " + +# , c-format +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(utilisez '%s' pour voir cette partie)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(la fonction 'view-attachments' doit être affectée à une touche !)" + +# , c-format +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s : impossible d'attacher le fichier" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERREUR : veuillez signaler ce problème" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<INCONNU>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Affectations génériques :\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Fonctions non affectées :\n" +"\n" + +# , c-format +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Aide pour %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook : impossible de faire un unhook * à l'intérieur d'un hook." + +# , c-format +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook : type hook inconnu : %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook : impossible de supprimer un %s à l'intérieur d'un %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Pas d'authentificateurs disponibles" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Authentification (anonyme)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "L'authentification anonyme a échoué." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Authentification (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "L'authentification CRAM-MD5 a échoué." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Authentification (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "L'authentification GSSAPI a échoué." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN désactivée sur ce serveur." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Connexion..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "La connexion a échoué." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Authentification (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "L'authentification SASL a échoué." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s n'est pas un chemin IMAP valide" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Récupération des espaces de noms..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Récupération de la liste des dossiers..." + +# , c-format +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Ce dossier n'existe pas" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Créer la boîte aux lettres : " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "La boîte aux lettres doit avoir un nom." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Boîte aux lettres créée." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Boîte aux lettres fermée" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Erreur fatale. Le nombre de messages ne correspond pas !" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Fermeture de la connexion à %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Ce serveur IMAP est trop ancien. Mutt ne marche pas avec." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Réponse inattendue reçue du serveur : %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Connexion sécurisée avec TLS ?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Impossible de négocier la connexion TLS" + +# , c-format +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Sélection de %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Erreur à l'ouverture de la boîte aux lettres" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Impossible d'ajouter aux boîtes aux lettres IMAP sur ce serveur" + +# , c-format +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Créer %s ?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Fermeture de la connexion au serveur IMAP..." + +# , c-format +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Marquage de %d messages à effacer..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Expunge a échoué" + +# , c-format +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Sauvegarde des indicateurs de statut du message... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Effacement des messages sur le serveur..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE a échoué" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE a échoué" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Mauvaise boîte aux lettres" + +# , c-format +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Abonnement à %s..." + +# , c-format +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Désabonnement de %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "" +"Impossible de récupérer les en-têtes à partir de cette version du serveur " +"IMAP." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Impossible de créer le fichier temporaire %s" + +# , c-format +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Récupération des en-têtes des messages... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Récupération du message..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" +"L'index du message est incorrect. Essayez de rouvrir la boîte aux lettres." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Chargement du message ..." + +# , c-format +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Copie de %d messages dans %s..." + +# , c-format +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Copie du message %d dans %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Continuer ?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias : pas d'adresse" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Attention : mauvais IDN '%s' dans l'alias '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "en-tête invalide" + +# , c-format +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s : méthode de tri inconnue" + +# , c-format +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s) : erreur dans l'expression rationnelle : %s\n" + +# , c-format +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s : variable inconnue" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "ce préfixe est illégal avec reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "cette valeur est illégale avec reset" + +# , c-format +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s est positionné" + +# , c-format +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s n'est pas positionné" + +# , c-format +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s : type de boîte aux lettres invalide" + +# , c-format +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s : valeur invalide" + +# , c-format +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s : type inconnu." + +# , c-format +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s : type inconnu" + +# , c-format +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Impossible d'obtenir le statut de %s : %s" + +# , c-format +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s n'est pas un fichier ordinaire." + +# , c-format +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Erreur dans %s, ligne %d : %s" + +# , c-format +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source : erreurs dans %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source : lecture interrompue car trop d'erreurs dans %s" + +# , c-format +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source : erreur dans %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source : trop d'arguments" + +# , c-format +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s : commande inconnue" + +# , c-format +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Erreur dans la ligne de commande : %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "impossible de déterminer le répertoire personnel" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "impossible de déterminer le nom d'utilisateur" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Boucle de macro détectée." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Cette touche n'est pas affectée." + +# , c-format +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Cette touche n'est pas affectée. Tapez '%s' pour avoir l'aide." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push : trop d'arguments" + +# , c-format +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s : ce menu n'existe pas" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "séquence de touches nulle" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind : trop d'arguments" + +# , c-format +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s : cette fonction n'existe pas dans la table" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro : séquence de touches vide" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro : trop d'arguments" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec : pas d'arguments" + +# , c-format +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s : cette fonction n'existe pas" + +# , c-format +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Entrez des touches (^G pour abandonner) : " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Caractère = %s, Octal = %o, Decimal = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "opération nulle" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "fin d'exécution conditionnelle (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "" +"forcer la visualisation d'un attachment en utilisant le fichier mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "visualiser un attachment en tant que texte" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Inverser l'affichage des sous-parties" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "se déplacer en bas de la page" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "renvoyer un message à un autre utilisateur" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "sélectionner un nouveau fichier dans ce répertoire" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "visualiser le fichier" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "afficher le nom du fichier sélectionné actuellement" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "s'abonner à la BAL courante (IMAP seulement)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "se désabonner de la BAL courante (IMAP seulement)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "" +"changer entre voir toutes les BAL/voir les BAL abonnées (IMAP seulement)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "lister les BAL ayant de nouveaux messages" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "changer de répertoires" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "vérifier la présence de nouveaux messages dans les BAL" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "attacher un fichier à ce message" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "attacher un message à ce message" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "éditer la liste BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "éditer la liste CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "éditer la description de l'attachement" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "éditer le transfer-encoding de l'attachement" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "entrer le nom d'un fichier dans lequel sauver une copie de ce message" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "éditer le fichier à attacher" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "éditer le champ from" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "éditer le message avec ses en-têtes" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "éditer le message" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "éditer l'attachement en utilisant l'entrée mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "éditer le champ Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "éditer l'objet de ce message" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "éditer la liste TO" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "créer une nouvelle BAL (IMAP seulement)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "éditer le content-type de l'attachement" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "obtenir une copie temporaire d'un attachement" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "lancer ispell sur le message" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "composer un nouvel attachement en utilisant l'entrée mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "inverser le recodage de cet attachement" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "sauvegarder ce message pour l'envoyer plus tard" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "renommer/déplacer un fichier attaché" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "envoyer le message" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "changer la disposition (en ligne/attachement)" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "changer l'option de suppression de fichier après envoi" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "mettre à jour les informations de codage d'un attachement" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "écrire le message dans un dossier" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "copier un message dans un fichier ou une BAL" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "créer un alias à partir de l'expéditeur d'un message" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "déplacer l'entrée au bas de l'écran" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "déplacer l'entrée au milieu de l'écran" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "déplacer l'entrée en haut de l'écran" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "faire une copie décodée (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "faire une copie décodée (text/plain) et effacer" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "effacer l'entrée courante" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "supprimer la BAL courante (IMAP seulement)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "effacer tous les messages dans la sous-discussion" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "effacer tous les messages dans la discussion" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "afficher l'adresse complète de l'expéditeur" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "afficher le message et inverser la restriction des en-têtes" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "afficher un message" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "éditer le message brut" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "effacer le caractère situé devant le curseur" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "déplacer le curseur d'un caractère vers la gauche" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "déplacer le curseur au début du mot" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "aller au début de la ligne" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "parcourir les boîtes aux lettres recevant du courrier" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "compléter un nom de fichier ou un alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "compléter une adresse grâce à une requête" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "effacer le caractère situé sous le curseur" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "aller à la fin de la ligne" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "déplacer le curseur d'un caractère vers la droite" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "déplacer le curseur à la fin du mot" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "redescendre dans l'historique" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "remonter dans l'historique" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "effacer la fin de la ligne à partir du curseur" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "effacer la fin du mot à partir du curseur" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "effacer tous les caractères de la ligne" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "effacer le mot situé devant le curseur" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "entrer le caractère correspondant à la prochaine touche" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "échanger le caractère situé sous le curseur avec le précédent" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "capitaliser le mot" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "convertir le mot en minuscules" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "convertir le mot en majuscules" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "entrer une commande muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "entrer un masque de fichier" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "sortir de ce menu" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrer un attachement au moyen d'une commande shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "se déplacer sur la première entrée" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "modifier l'indicateur 'important' d'un message" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "faire suivre un message avec des commentaires" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "sélectionner l'entrée courante" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "répondre à tous les destinataires" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "descendre d'1/2 page" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "remonter d'1/2 page" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "cet écran" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "aller à un numéro d'index" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "aller à la dernière entrée" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "répondre à la liste spécifiée" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "exécuter une macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "composer un nouveau message" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "ouvrir un dossier différent" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "ouvrir un dossier différent en lecture seule" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "effacer un indicateur de statut d'un message" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "effacer les messages correspondant à un motif" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "forcer la récupération du courrier depuis un serveur IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "récupérer le courrier depuis un serveur POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "aller au premier message" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "aller au dernier message" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "afficher seulement les messages correspondant à un motif" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "aller au nouveau message suivant" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "aller au message nouveau ou non lu suivant" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "aller à la sous-discussion suivante" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "aller à la discussion suivante" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "aller au message non effacé suivant" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "aller au message non lu suivant" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "aller au message père dans la discussion" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "aller à la discussion précédente" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "aller à la sous-discussion précédente" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "aller au message non effacé précédent" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "aller au nouveau message précédent" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "aller au message nouveau ou non lu précédent" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "aller au message non lu précédent" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "marquer la discussion courante comme lue" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "marquer la sous-discussion courante comme lue" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "mettre un indicateur d'état sur un message" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "sauver les modifications de la boîte aux lettres" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "marquer les messages correspondant à un motif" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "récupérer les messages correspondant à un motif" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "démarquer les messages correspondant à un motif" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "aller au milieu de la page" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "aller à l'entrée suivante" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "descendre d'une ligne" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "aller à la page suivante" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "aller à la fin du message" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "inverser l'affichage du texte cité" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "sauter le texte cité" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "aller au début du message" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "passer le message/l'attachement à une commande shell" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "aller à l'entrée précédente" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "remonter d'une ligne" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "aller à la page précédente" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "imprimer l'entrée courante" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "demander des adresses à un programme externe" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "ajouter les nouveaux résultats de la requête aux résultats courants" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "sauver les modifications de la boîte aux lettres et quitter" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "rappeler un message ajourné" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "effacer l'écran et réafficher" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interne}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "répondre à un message" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "utiliser le message courant comme modèle pour un nouveau message" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "sauver le message/l'attachement dans un fichier" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "rechercher une expression rationnelle" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "rechercher en arrière une expression rationnelle" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "rechercher la prochaine occurrence" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "rechercher la prochaine occurrence dans la direction opposée" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "inverser la coloration du motif de recherche" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "exécuter une commande dans un sous-shell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "trier les messages" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "trier les messages dans l'ordre inverse" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "marquer l'entrée courante" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "appliquer la prochaine fonction aux messages marqués" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "appliquer la prochaine fonction SEULEMENT aux messages marqués" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "marquer la sous-discussion courante" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "marquer la discussion courante" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "inverser l'indicateur 'nouveau' d'un message" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "changer l'option de mise à jour de la boîte aux lettres" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "changer entre l'affichage des BAL et celui de tous les fichiers" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "aller en haut de la page" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "récupérer l'entrée courante" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "récupérer tous les messages de la discussion" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "récupérer tous les messages de la sous-discussion" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "afficher la version de Mutt (numéro et date)" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "visualiser l'attachement en utilisant l'entrée mailcap si nécessaire" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "afficher les attachements MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "afficher le code d'une touche enfoncée" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "afficher le motif de limitation actuel" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "comprimer/décomprimer la discussion courante" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "comprimer/décomprimer toutes les discussions" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "attacher une clé publique PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "afficher les options PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "envoyer une clé publique PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "vérifier une clé publique PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "afficher le numéro d'utilisateur de la clé" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "reconnaissance pgp classique" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Accepter la chaîne construite" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Ajouter un redistributeur de courrier à la fin de la chaîne" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Insérer un redistributeur de courrier dans la chaîne" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Retirer un redistributeur de courrier de la chaîne" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Sélectionner l'élément précédent de la chaîne" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Sélectionner l'élément suivant de la chaîne" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "" +"envoyer le message dans une chaîne de redistributeurs de courrier mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "faire une copie déchiffrée et effacer" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "faire une copie déchiffrée" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "effacer la (les) phrase(s) de passe de la mémoire" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "extraire les clés publiques supportées" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "afficher les options S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" +"Dépassement de capacité sur entier -- impossible d'allouer la mémoire !" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Plus de mémoire !" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Pour contacter les développeurs, veuillez écrire à <mutt-dev@mutt.org>.\n" +"Pour signaler un bug, veuillez utiliser l'utilitaire flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins et autres.\n" +"Mutt ne fournit ABSOLUMENT AUCUNE GARANTIE ; pour les détails tapez `mutt -" +"vv'.\n" +"Mutt est un logiciel libre, et vous êtes libre de le redistribuer\n" +"sous certaines conditions ; tapez `mutt -vv' pour les détails.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"De nombreuses autres personnes non mentionnées ici ont fourni\n" +"beaucoup de code, des corrections et des suggestions.\n" +"\n" +" Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou\n" +" le modifier sous les termes de la GNU General Public License telle que\n" +" publiée par la Free Software Foundation ; que ce soit la version 2 de\n" +" la licence, ou (selon votre choix) une version plus récente.\n" +"\n" +" Ce programme est distribué avec l'espoir qu'il soit utile,\n" +" mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de\n" +" QUALITÉ MARCHANDE ou d'ADÉQUATION À UN BESOIN PARTICULIER. Référez-vous\n" +" à la GNU General Public License pour plus de détails.\n" +"\n" +" Vous devez avoir reçu un exemplaire de la GNU General Public License\n" +" avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"usage : mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <fich> ] [ -m <type> ] [ -f " +"<fich> ]\n" +" mutt [ -nR ] [ -e <cmd> ] [ -F <fich> ] -Q <requête> [ -Q <req> ] " +"[...]\n" +" mutt [ -nR ] [ -e <cmd> ] [ -F <fich> ] -A <alias> [ -A <alias> ] " +"[...]\n" +" mutt [ -nx ] [ -e <cmd> ] [ -a <fich> ] [ -F <fich> ] [ -H <fich> ] " +"[ -i <fich> ] [ -s <obj> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n" +" mutt [ -n ] [ -e <cmd> ] [ -F <fich> ] -p\n" +" mutt -v[v]\n" +"\n" +"options :\n" +" -A <alias>\tdéveloppe l'alias mentionné\n" +" -a <fich>\tattache un fichier à ce message\n" +" -b <adresse>\tspécifie une adresse à mettre en copie aveugle (BCC)\n" +" -c <adresse>\tspécifie une adresse à mettre en copie (CC)\n" +" -e <commande>\tspécifie une commande à exécuter après l'initialisation\n" +" -f <fich>\tspécifie quelle boîte aux lettres lire\n" +" -F <fich>\tspécifie un fichier muttrc alternatif\n" +" -H <fich>\tspécifie un fichier de brouillon d'où lire les en-têtes\n" +" -i <fich>\tspécifie un fichier que Mutt doit inclure dans la réponse\n" +" -m <type>\tspécifie un type de boîte aux lettres par défaut\n" +" -n\t\tfait que Mutt ne lit pas le fichier Muttrc système\n" +" -p\t\trappelle un message ajourné\n" +" -Q <variable>\tdemande la valeur d'une variable de configuration\n" +" -R\t\touvre la boîte aux lettres en mode lecture seule\n" +" -s <obj>\tspécifie un objet (entre guillemets s'il contient des espaces)\n" +" -v\t\taffiche la version et les définitions de compilation\n" +" -x\t\tsimule le mode d'envoi mailx\n" +" -y\t\tsélectionne une BAL spécifiée dans votre liste `mailboxes'\n" +" -z\t\tquitte immédiatement si pas de nouveau message dans la BAL\n" +" -Z\t\touvre le premier dossier ayant un nouveau message, quitte sinon\n" +" -h\t\tce message d'aide" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Options de compilation :" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Erreur d'initialisation du terminal." + +# , c-format +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Débuggage au niveau %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG n'a pas été défini à la compilation. Ignoré.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s n'existe pas. Le créer ?" + +# , c-format +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Impossible de créer %s : %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Pas de destinataire spécifié.\n" + +# , c-format +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s : impossible d'attacher le fichier.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Pas de boîte aux lettres avec des nouveaux messages." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Pas de boîtes aux lettres recevant du courrier définies." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "La boîte aux lettres est vide." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Lecture de %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "La boîte aux lettres est altérée !" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "La boîte aux lettres a été altérée !" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Erreur fatale ! La boîte aux lettres n'a pas pu être réouverte !" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Impossible de verrouiller la boîte aux lettres !" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync : BAL modifiée, mais pas de message modifié ! (signalez ce bug)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Écriture des messages... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Écriture des changements..." + +# , c-format +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Erreur d'écriture ! Boîte aux lettres partielle sauvée dans %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "La boîte aux lettres n'a pas pu être réouverte !" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Réouverture de la boîte aux lettres..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Aller à : " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Numéro d'index invalide." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Pas d'entrées." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Défilement vers le bas impossible." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Défilement vers le haut impossible." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Vous êtes sur la dernière page." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Vous êtes sur la première page." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "La première entrée est affichée." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "La dernière entrée est affichée." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Vous êtes sur la dernière entrée." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Vous êtes sur la première entrée." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Rechercher : " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Rechercher en arrière : " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Pas de motif de recherche." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Non trouvé." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Pas d'entrées marquées." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "La recherche n'est pas implémentée pour ce menu." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Le saut n'est pas implémenté pour les dialogues." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Le marquage n'est pas supporté." + +# , c-format +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Lecture de %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message() : impossible de fixer l'heure du fichier" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "" +"Le fichier est un répertoire, sauver dans celui-ci ? [(o)ui, (n)on, (t)ous]" + +#: muttlib.c:835 +msgid "yna" +msgstr "ont" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Le fichier est un répertoire, sauver dans celui-ci ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Fichier dans le répertoire : " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Le fichier existe, écras(e)r, (c)oncaténer ou (a)nnuler ?" + +#: muttlib.c:869 +msgid "oac" +msgstr "eca" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Impossible de sauver le message dans la boîte aux lettres POP." + +# , c-format +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s n'est pas une boîte aux lettres !" + +# , c-format +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Ajouter les messages à %s ?" + +# , c-format +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Connexion à %s fermée" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL n'est pas disponible." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "La commande Preconnect a échoué." + +# , c-format +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Erreur en parlant à %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Mauvais IDN « %s »." + +# , c-format +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Recherche de %s..." + +# , c-format +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Impossible de trouver la machine \"%s\"" + +# , c-format +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Connexion à %s..." + +# , c-format +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Impossible de se connecter à %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Impossible de trouver assez d'entropie sur votre système" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Remplissage du tas d'entropie : %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s a des droits d'accès peu sûrs !" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL désactivé par manque d'entropie" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "erreur d'E/S" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "erreur de protocole non spécifiée" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL a échoué : %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Impossible d'obtenir le certificat de la machine distante" + +# , c-format +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Connexion SSL utilisant %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Inconnu" + +# , c-format +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[impossible de calculer]" + +# , c-format +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[date invalide]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Le certificat du serveur n'est pas encore valide" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Le certificat du serveur a expiré" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Ce certificat appartient à :" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Ce certificat a été émis par :" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Ce certificat est valide" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " de %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " à %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Empreinte: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Vérification du certificat SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ejeter, accepter (u)ne fois, (a)ccepter toujours" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "rua" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ejeter, accepter (u)ne fois" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ru" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Quitter " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Attention : le certificat n'a pas pu être sauvé" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certificat sauvé" + +# , c-format +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Nombre d'essais de verrouillage dépassé, enlever le verrou pour %s ?" + +# , c-format +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Impossible de verrouiller %s avec dotlock.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Délai dépassé lors de la tentative de verrouillage fcntl !" + +# , c-format +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Attente du verrouillage fcntl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Délai dépassé lors de la tentative de verrouillage flock !" + +# , c-format +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Attente de la tentative de flock... %d" + +# , c-format +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Impossible de verrouiller %s\n" + +# , c-format +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Lecture de %s..." + +# , c-format +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Écriture de %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Impossible de synchroniser la boîte aux lettres %s !" + +# , c-format +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Déplacer les messages lus dans %s ?" + +# , c-format +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Effacer %d message(s) marqué(s) à effacer ?" + +# , c-format +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Effacer %d message(s) marqué(s) à effacer ?" + +# , c-format +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Déplacement des messages lus dans %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "La boîte aux lettres est inchangée." + +# , c-format +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d gardé(s), %d déplacé(s), %d effacé(s)." + +# , c-format +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d gardé(s), %d effacé(s)." + +# , c-format +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Appuyez sur '%s' pour inverser l'écriture autorisée" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Utilisez 'toggle-write' pour réautoriser l'écriture !" + +# , c-format +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "La boîte aux lettres est protégée contre l'écriture. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Boîte aux lettres vérifiée." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Impossible d'écrire le message" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "Dépassement de capacité sur entier -- impossible d'allouer la mémoire." + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Non disponible dans ce menu." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PgPréc" + +#: pager.c:1447 +msgid "NextPg" +msgstr "PgSuiv" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Voir attach." + +#: pager.c:1454 +msgid "Next" +msgstr "Suivant" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "La fin du message est affichée." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Le début du message est affiché." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Rechercher en arrière : " + +#: pager.c:1955 +msgid "Search: " +msgstr "Rechercher : " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "L'aide est actuellement affichée." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Il n'y a plus de texte cité." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Il n'y a plus de texte non cité après le texte cité." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "le message multipart n'a pas de paramètre boundary !" + +# , c-format +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Erreur dans l'expression : %s" + +# , c-format +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Quantième invalide : %s" + +# , c-format +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Mois invalide : %s" + +# , c-format +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Date relative invalide : %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "erreur dans l'expression" + +# , c-format +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "erreur dans le motif à : %s" + +# , c-format +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c : commande invalide" + +# , c-format +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c : non supporté dans ce mode" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "paramètre manquant" + +# , c-format +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "parenthésage incorrect : %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "motif vide" + +# , c-format +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "erreur : opération inconnue %d (signalez cette erreur)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Compilation du motif de recherche..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Exécution de la commande sur les messages correspondants..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Aucun message ne correspond au critère." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Fin atteinte sans rien avoir trouvé" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Début atteint sans rien avoir trouvé" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Recherche interrompue." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Phrase de passe PGP oubliée." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Erreur : impossible de créer le sous-processus PGP ! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Fin de sortie PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- DÉBUT DE MESSAGE PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- DÉBUT DE BLOC DE CLÉ PUBLIQUE PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- DÉBUT DE MESSAGE SIGNÉ PGP --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- FIN DE MESSAGE PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- FIN DE BLOC DE CLÉ PUBLIQUE PGP --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- FIN DE MESSAGE SIGNÉ PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Erreur : impossible de trouver le début du message PGP ! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Erreur interne. Veuillez avertir <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Erreur : impossible de créer un sous-processus PGP ! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Erreur : message PGP/MIME mal formé ! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Erreur : impossible de créer le fichier temporaire ! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Les données suivantes sont chiffrées avec PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Fin des données chiffrées avec PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Impossible d'ouvrir le sous-processus PGP !" + +# , c-format +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Utiliser keyID = \"%s\" pour %s ?" + +# , c-format +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Entrez keyID pour %s : " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Impossible d'invoquer PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Récupération de la clé PGP..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" +"Toutes les clés correspondantes sont expirées, annulées, ou désactivées." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Sélectionner " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Vérifier clé " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Clés PGP correspondant à <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Clés PGP correspondant à \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Impossible d'ouvrir /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Impossible de créer le fichier temporaire" + +# , c-format +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "ID clé : 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Cette clé ne peut pas être utilisée : expirée/désactivée/annulée." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "L'ID est expiré/désactivé/annulé." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "L'ID a une validité indéfinie." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "L'ID n'est pas valide." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "L'ID n'est que peu valide." + +# , c-format +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Voulez-vous vraiment utiliser la clé ?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Veuillez entrer l'ID de la clé : " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Appel de pgp..." + +# , c-format +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Clé PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Recherche des clés correspondant à \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "La commande TOP n'est pas supportée par le serveur." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Impossible d'écrire l'en-tête dans le fichier temporaire !" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "La commande UIDL n'est pas supportée par le serveur." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s est un chemin POP invalide" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Récupération de la liste des messages..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Impossible d'écrire le message dans le fichier temporaire !" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Recherche de nouveaux messages..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Le serveur POP n'est pas défini." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Aucun nouveau message dans la boîte aux lettres POP." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Effacer les messages sur le serveur ?" + +# , c-format +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Lecture de nouveaux messages (%d octets)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Erreur à l'écriture de la boîte aux lettres !" + +# , c-format +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d messages lus sur %d]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Le serveur a fermé la connexion !" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Authentification (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Authentification (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "L'authentification APOP a échoué." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "La commande USER n'est pas supportée par le serveur." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Impossible de laisser les messages sur le serveur." + +# , c-format +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Erreur de connexion au serveur : %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Fermeture de la connexion au serveur POP..." + +# , c-format +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Vérification des index des messages..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Connexion perdue. Se reconnecter au serveur POP ?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Messages ajournés" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Pas de message ajourné." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "En-tête PGP illégal" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "En-tête S/MIME illégal" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Le déchiffrage a échoué." + +#: query.c:46 +msgid "New Query" +msgstr "Nouvelle requête" + +#: query.c:47 +msgid "Make Alias" +msgstr "Créer un alias" + +#: query.c:48 +msgid "Search" +msgstr "Rechercher" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Attente de la réponse..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Commande de requête non définie." + +#: query.c:286 +msgid "Query" +msgstr "Requête" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Requête : " + +# , c-format +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Requête '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Pipe" + +#: recvattach.c:53 +msgid "Print" +msgstr "Imprimer" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "On sauve..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Attachement sauvé." + +# , c-format +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ATTENTION ! Vous allez écraser %s, continuer ?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Attachement filtré." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrer avec : " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Passer à la commande : " + +# , c-format +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Je ne sais pas comment imprimer %s attachements !" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Imprimer l(es) attachement(s) marqué(s) ?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Imprimer l'attachement ?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Impossible de déchiffrer le message chiffré !" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Attachements" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Il n'y a pas de sous-parties à montrer !" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Impossible d'effacer l'attachement depuis le serveur POP." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "L'effacement d'attachements des messages chiffrés n'est pas supporté." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Seul l'effacement d'attachements multipart est supporté." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Vous ne pouvez renvoyer que des parties message/rfc822." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Erreur en renvoyant le message !" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Erreur en renvoyant les messages !" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Impossible d'ouvrir le fichier temporaire %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Faire suivre sous forme d'attachements ?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Impossible de décoder tous les attachements marqués. Faire suivre les " +"autres ?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Faire suivre en MIME encapsulé ?" + +# , c-format +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Impossible de créer %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Aucun message marqué n'a pu être trouvé." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Pas de liste de diffusion trouvée !" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Impossible de décoder ts les attachements marqués. MIME-encapsuler les " +"autres ?" + +#: remailer.c:480 +msgid "Append" +msgstr "Ajouter" + +#: remailer.c:481 +msgid "Insert" +msgstr "Insérer" + +#: remailer.c:482 +msgid "Delete" +msgstr "Retirer" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Impossible d'obtenir le type2.list du mixmaster !" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Sélectionner une chaîne de redistributeurs de courrier." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Erreur : %s ne peut pas être utilisé comme redistributeur final." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Les chaînes mixmaster sont limitées à %d éléments." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "La chaîne de redistributeurs de courrier est déjà vide." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Le premier élément de la chaîne est déjà sélectionné." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Le dernier élément de la chaîne est déjà sélectionné." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Le mixmaster n'accepte pas les en-têtes Cc et Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Donnez une valeur correcte à hostname quand vous utilisez le mixmaster !" + +# , c-format +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Erreur en envoyant le message, fils terminé avec le code %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Erreur en envoyant le message." + +# , c-format +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Entrée incorrectement formatée pour le type %s dans \"%s\" ligne %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Pas de chemin mailcap spécifié" + +# , c-format +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Entrée mailcap pour le type %s non trouvée" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score : pas assez d'arguments" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score : trop d'arguments" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Pas de sujet, abandonner ?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Pas de sujet, abandon." + +# , c-format +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Répondre à %s%s ?" + +# , c-format +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Suivi de la discussion à %s%s ?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Pas de messages marqués visibles !" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Inclure le message dans la réponse ?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Inclusion du message cité..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Tous les messages demandés n'ont pas pu être inclus !" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Faire suivre sous forme d'attachement ?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Préparation du message à faire suivre..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Rappeler un message ajourné ?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Éditer le message à faire suivre ?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Message non modifié. Abandonner ?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Message non modifié. Abandon." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Message non envoyé." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Message ajourné." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Aucun destinataire spécifié !" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Aucun destinataire spécifié." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Pas d'objet, abandonner l'envoi ?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Pas d'objet spécifié." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Envoi du message..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Impossible d'envoyer le message." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Message envoyé." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Envoi en tâche de fond." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Pas de paramètre boundary trouvé ! [signalez cette erreur]" + +# , c-format +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s n'existe plus !" + +# , c-format +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s n'est pas un fichier ordinaire." + +# , c-format +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Impossible d'ouvrir %s" + +# , c-format +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Erreur en envoyant le message, fils terminé avec le code %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Sortie du processus de livraison" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Mauvais IDN %s lors de la préparation du resent-from." + +# , c-format +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... On quitte.\n" + +# , c-format +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Erreur %s... On quitte.\n" + +# , c-format +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Signal %d... On quitte.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "De confiance" + +#: smime.c:303 +msgid "Verified " +msgstr "Vérifié " + +#: smime.c:306 +msgid "Unverified" +msgstr "Non vérifié " + +#: smime.c:309 +msgid "Expired " +msgstr "Expiré " + +#: smime.c:312 +msgid "Revoked " +msgstr "Révoqué " + +# , c-format +#: smime.c:315 +msgid "Invalid " +msgstr "Invalide " + +#: smime.c:318 +msgid "Unknown " +msgstr "Inconnu " + +# , c-format +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Entrez keyID : " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Certificats S/MIME correspondant à \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "L'ID %s n'est pas vérifié. Voulez-vous l'utiliser pour %s ?" + +# , c-format +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Utiliser l'ID %s (pas de confiance !) pour %s ?" + +# , c-format +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Utiliser l'ID %s pour %s ?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Att.: vous n'avez pas encore décidé de faire confiance à l'ID %s. (touche)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Pas de certificat (valide) trouvé pour %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Erreur : impossible de créer le sous-processus OpenSSL !" + +#: smime.c:1197 +msgid "no certfile" +msgstr "pas de certfile" + +#: smime.c:1200 +msgid "no mbox" +msgstr "pas de BAL" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Pas de sortie pour OpenSSL.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Attention : le certificat intermédiaire n'a pas été trouvé." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Impossible d'ouvrir le sous-processus OpenSSL !" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Pas de sortie pour OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Fin de sortie OpenSSL --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Erreur : impossible de créer le sous-processus OpenSSL ! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Les données suivantes sont chiffrées avec S/MIME --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Les données suivantes sont signées avec S/MIME --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Fin des données chiffrées avec S/MIME. --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Fin des données signées avec S/MIME. --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Tri de la boîte aux lettres..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Fonction de tri non trouvée ! [signalez ce bug]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(pas de boîte aux lettres)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Le message père n'est pas visible dans cette vue limitée." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Le message père n'est pas disponible." + +# , c-format +#~ msgid "Bounce message to %s...?" +#~ msgstr "Renvoyer le message à %s... ?" + +# , c-format +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Renvoyer les messages à %s... ?" + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Appel d'OpenSSL..." + +#~ msgid "ewsabf" +#~ msgstr "casedo" + +#~ msgid "%s/.index" +#~ msgstr "%s/.index" + +#~ msgid "This message seems to require key %s. (Any key to continue)" +#~ msgstr "Ce message semble nécessiter la clé %s. (Touche pour continuer)" + +#~ msgid "Alert: No mailbox specified in certificate.\n" +#~ msgstr "Alerte : pas de boîte aux lettres spécifiée dans le certificat.\n" + +#~ msgid "Alert: Certificate does *NOT* belong to \"%s\".\n" +#~ msgstr "Alerte : le certificat n'appartient *PAS* à \"%s\".\n" + +#~ msgid "%s/%s.%d" +#~ msgstr "%s/%s.%d" + +#~ msgid "Certificate \"%s\" exists for \"%s\"." +#~ msgstr "Le certificat \"%s\" existe pour \"%s\"." + +#~ msgid "Successfully added certificate \"%s\" for \"%s\". " +#~ msgstr "Certificat \"%s\" ajouté avec succès pour \"%s\". " + +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certificat *NON* ajouté." + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Le niveau de validité de cet ID est indéfini." + +#~ msgid "[-- expired. --]\n" +#~ msgstr "[-- expiré. --]\n" + +#~ msgid "Decode-save" +#~ msgstr "Décoder-sauver" + +#~ msgid "Decode-copy" +#~ msgstr "Décoder-copier" + +#~ msgid "Decrypt-save" +#~ msgstr "Déchiffrer-sauver" + +#~ msgid "Decrypt-copy" +#~ msgstr "Déchiffrer-copier" + +#~ msgid "Copy" +#~ msgstr "Copier" + +# , c-format +#~ msgid "" +#~ "[-- This %s/%s attachment is not included, --]\n" +#~ "[-- and the indicated external source has --]\n" +#~ "[-- expired. --]\n" +#~ msgstr "" +#~ "[-- Cet attachement %s/%s n'est pas inclus, --]\n" +#~ "[-- et la source externe indiquée a --]\n" +#~ "[-- expiré. --]\n" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Fin de sortie PGP --]\n" +#~ "\n" + +# , c-format +#~ msgid "Can't stat %s." +#~ msgstr "Impossible d'obtenir le statut de %s." + +# , c-format +#~ msgid "%s: no such command" +#~ msgstr "%s : cette commande n'existe pas" + +#~ msgid "Authentication method is unknown." +#~ msgstr "La méthode d'authentification est inconnue." + +#~ msgid "MIC algorithm: " +#~ msgstr "Algorithme MIC : " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Ceci n'a aucun sens si vous ne voulez pas signer le message." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "" +#~ "Algorithme MIC inconnu, algorithmes valides : pgp-md5, pgp-sha1, pgp-" +#~ "rmd160" + +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "Implémentation SHA1 Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution et utilisation sous formes source et binaire, avec ou\n" +#~ " sans modification, sont autorisées sous certaines conditions.\n" +#~ "\n" +#~ " L'implémentation SHA1 est fournie TELLE QUELLE, et TOUTE GARANTIE\n" +#~ " EXPLICITE OU IMPLICITE, dont, mais pas uniquement, les garanties\n" +#~ " implicites de qualité marchande ou d'adéquation à un besoin " +#~ "particulier\n" +#~ " EST DÉMENTIE.\n" +#~ "\n" +#~ " Vous devez avoir reçu un exemplaire des termes de la distribution " +#~ "complète\n" +#~ " avec ce programme ; si ce n'est pas le cas, écrivez aux développeurs " +#~ "du\n" +#~ " programme.\n" + +#~ msgid "POP Username: " +#~ msgstr "Nom d'utilisateur POP : " + +# , c-format +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Lecture d'un nouveau message (%d octets)..." + +#~ msgid "Error reading message!" +#~ msgstr "Erreur à la lecture du message !" + +# , c-format +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d message lu]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "La création de boîtes aux lettres n'est pas encore supportée." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Réouverture de la boîte aux lettres... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Fermeture de la boîte aux lettres..." + +#~ msgid "IMAP Username: " +#~ msgstr "Nom d'utilisateur IMAP : " + +# , c-format +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "Clé CRAM pour %s@%s : " + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "On passe sur l'authentification CRAM-MD5." + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- Erreur : fin de fichier inattendue ! --]\n" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "Envoi de la commande APPEND ..." + +#~ msgid "%d kept." +#~ msgstr "%d gardés." + +#~ msgid "POP Password: " +#~ msgstr "Mot de passe POP : " + +#~ msgid "No POP username is defined." +#~ msgstr "Le nom d'utilisateur POP n'est pas défini." + +# , c-format +#~ msgid "Could not find address for host %s." +#~ msgstr "Impossible de trouver l'adresse de la machine %s." + +#~ msgid "Attachment saved" +#~ msgstr "Attachement sauvé" + +#~ msgid "Can't open %s: %s." +#~ msgstr "Impossible d'ouvrir %s : %s." + +#~ msgid "Error while recoding %s. Leave it unchanged." +#~ msgstr "Erreur en recodant %s. Laisser inchangé." + +#~ msgid "Error while recoding %s. See %s for recovering your data." +#~ msgstr "Erreur en recodant %s. Voir %s pour récupérer vos données." + +#~ msgid "Can't change character set for non-text attachments!" +#~ msgstr "" +#~ "Impossible de changer le jeu de caractères pour des attachements non " +#~ "textuels !" + +#~ msgid "Enter character set: " +#~ msgstr "Entrez le jeu de caractères : " + +#~ msgid "Recoding successful." +#~ msgstr "Recodage réussi." + +#~ msgid "change an attachment's character set" +#~ msgstr "changer le jeu de caractères d'un attachement" + +#~ msgid "recode this attachment to/from the local charset" +#~ msgstr "recoder cet attachement vers/depuis le jeu de caractères local" + +#~ msgid "Compose" +#~ msgstr "Composer" + +#~ msgid "Target message not found while counting messages in thread." +#~ msgstr "" +#~ "Message cible non trouvé pendant le comptage des messages dans la " +#~ "discussion." + +#~ msgid "We can't currently handle utf-8 at this point." +#~ msgstr "Nous ne supportons pas actuellement l'utf-8 à cet endroit." + +#~ msgid "UTF-8 encoding attachments has not yet been implemented." +#~ msgstr "Les attachements en utf-8 ne sont pas encore implémentés." + +#~ msgid "We currently can't encode to utf-8." +#~ msgstr "Nous ne pouvons pas actuellement encoder en utf-8." + +#~ msgid "move to the last undelete message" +#~ msgstr "aller au dernier message non effacé" + +#~ msgid "return to the main-menu" +#~ msgstr "retourner au menu principal" + +# , c-format +#~ msgid "ignoring empty header field: %s" +#~ msgstr "En-tête vide ignoré : %s" + +#~ msgid "Recoding only affetcs text attachments." +#~ msgstr "Le recodage affecte uniquement les attachements textuels." + +# , c-format +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_error() : réponse inattendue dans %s : %s\n" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "Une version inconnue de PGP a été définie pour signer." + +#~ msgid "Message edited. Really send?" +#~ msgstr "Message édité. Voulez-vous vraiment l'envoyer ?" + +# , c-format +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "Version de PGP \"%s\" inconnue." + +#~ msgid "reserved" +#~ msgstr "réservé" + +#~ msgid "Encrypted Session Key" +#~ msgstr "Clé de session chiffrée" + +#~ msgid "Signature Packet" +#~ msgstr "Paquet de signature" + +#~ msgid "Conventionally Encrypted Session Key Packet" +#~ msgstr "Paquet de clé de session chiffré de manière conventionnelle" + +#~ msgid "One-Pass Signature Packet" +#~ msgstr "Paquet de signature à une passe" + +#~ msgid "Secret Key Packet" +#~ msgstr "Paquet de clé secrète" + +#~ msgid "Public Key Packet" +#~ msgstr "Paquet de clé publique" + +#~ msgid "Secret Subkey Packet" +#~ msgstr "Paquet de sous-clé secrète" + +#~ msgid "Compressed Data Packet" +#~ msgstr "Paquet de données comprimées" + +#~ msgid "Symmetrically Encrypted Data Packet" +#~ msgstr "Paquet de données chiffrées symétriquement" + +#~ msgid "Marker Packet" +#~ msgstr "Paquet marqueur" + +#~ msgid "Literal Data Packet" +#~ msgstr "Paquet de données littérales" + +#~ msgid "Trust Packet" +#~ msgstr "Paquet de confiance" + +#~ msgid "Name Packet" +#~ msgstr "Paquet de nom" + +#~ msgid "Subkey Packet" +#~ msgstr "Paquet de sous-clé" + +#~ msgid "Reserved" +#~ msgstr "Réservé" + +#~ msgid "Comment Packet" +#~ msgstr "Paquet de commentaire" + +#~ msgid "Display message using mailcap?" +#~ msgstr "Afficher le message en utilisant mailcap ?" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "Impossible d'ouvrir votre fichier de clés secrètes" + +#~ msgid "===== Attachments =====" +#~ msgstr "===== Attachements =====" + +#~ msgid "Please report this program error in the function mutt_mktime." +#~ msgstr "Veuillez signaler cette erreur dans la fonction mutt_mktime." + +# , c-format +#~ msgid "%s is a boolean var!" +#~ msgstr "%s est une variable booléenne !" + +# , c-format +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "Sortie du processus fils sauvée dans %s.\n" + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- Erreur : ce message n'est pas conforme à la spécification PGP/MIME ! " +#~ "--]\n" +#~ "\n" diff --git a/po/gl.gmo b/po/gl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..7a251b855a82d77984bb34d9e749adae7c2fad4e GIT binary patch literal 62852 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 D5G^oV literal 0 HcmV?d00001 diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..c5688e0 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,4476 @@ +# GALICIAN TRANSLATION OF MUTT +# Copyright (C) 1999 Roberto Suarez Soto <ask4it@bigfoot.com> +# Roberto Suarez Soto <ask4it@bigfoot.com>, 1999-2001. +# +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.3\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2001-04-22 22:05+0200\n" +"Last-Translator: Roberto Suarez Soto <ask4it@bigfoot.com>\n" +"Language-Team: Galician <trasno@ceu.fi.udc.es>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nome de usuario en %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Contrasinal para %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Saír" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Borrar" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Recuperar" + +#: addrbook.c:36 +msgid "Select" +msgstr "Seleccionar" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Axuda" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "¡Non tés aliases definidas!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Aliases" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Alias como: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "¡Xa tés un alias definido con ese nome!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Enderezo: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nome persoal: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] ¿Aceptar?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Gardar a ficheiro: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Alias engadido." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Non se puido atopa-lo nome, ¿continuar?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "A entrada \"compose\" no ficheiro Mailcap require %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "¡Erro executando \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Fallo ó abri-lo ficheiro para analiza-las cabeceiras." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Fallo ó abri-lo ficheiro para quitar as cabeceiras" + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"Non hai entrada \"compose\" para %sno ficheiro Mailcap, creando\n" +" ficheiro vacío." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "A entrada \"Edit\" do ficheiro Mailcap require %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Non hai entrada \"edit\" no ficheiro Mailcap para %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "" +"Non se atopou ningunha entrada coincidente no ficheiro mailcap.Vendo como " +"texto" + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Tipo MIME non definido. Non se pode ver-lo ficheiro adxunto." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Non se puido crea-lo filtro" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Non podo crea-lo filtro" + +#: attach.c:824 +msgid "Write fault!" +msgstr "¡Fallo de escritura!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "¡Non lle sei cómo imprimir iso!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Directorio" + +#: browser.c:42 +msgid "Mask" +msgstr "Máscara" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s non é un directorio." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Buzóns [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Subscrito [%s], máscara de ficheiro: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Directorio [%s], máscara de ficheiro: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Non é posible adxuntar un directorio" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Non hai ficheiros que coincidan coa máscara" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "A operación 'Crear' está soportada só en buzóns IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "A operación 'Borrar' está soportada só en buzóns IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "¿Seguro de borra-lo buzón \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Buzón borrado." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Buzón non borrado." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Cambiar directorio a: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Erro lendo directorio." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Máscara de ficheiro: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "¿Ordear inversamente por (d)ata, (a)lfabeto, (t)amaño ou (s)en orden?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "¿Ordear por (d)ata, (a)lfabeto, (t)amaño ou (s)en orden?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dats" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Novo nome de ficheiro: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Non é posible ver un directorio" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Erro intentando ver ficheiro" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Novo correo en %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: color non soportado polo terminal" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: non hai tal color" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: non hai tal obxeto" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: comando válido só para o obxeto \"índice\"" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: parámetros insuficientes" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Faltan parámetros." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: parámetros insuficientes" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: parámetros insuficientes" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: non hai tal atributo" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "parámetros insuficientes" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "demasiados parámetros" + +#: color.c:721 +msgid "default colors not supported" +msgstr "colores por defecto non soportados" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "¿Verificar firma PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "¡Non foi posible crear o ficheiro temporal!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Non foi posible crea-lo filtro de visualización" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Non foi posible copia-la mensaxe." + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "Sinatura PGP verificada con éxito." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "Non foi posible verifica-la sinatura PGP." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Sinatura PGP verificada con éxito." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "Non foi posible verifica-la sinatura PGP." + +#: commands.c:223 +msgid "Command: " +msgstr "Comando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Rebotar mensaxe a: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Rebotar mensaxes marcadas a: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "¡Erro analizando enderezo!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Rebotar mensaxe a %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Rebotar mensaxes a %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Mensaxe rebotada." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Mensaxes rebotadas." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Mensaxe rebotada." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Mensaxes rebotadas." + +#: commands.c:381 commands.c:415 commands.c:432 +#, fuzzy +msgid "Can't create filter process" +msgstr "Non podo crea-lo filtro" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Canalizar ó comando: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Non foi definido ningún comando de impresión." + +#: commands.c:483 +msgid "Print message?" +msgstr "¿Imprimir mensaxe?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "¿Imprimir mensaxes marcadas?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Mensaxe impresa" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Mensaxes impresas" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Non foi posible imprimi-la mensaxe" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Non foi posible imprimi-las mensaxes" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordear-inv (d)ata/d(e)/(r)ecb/(t)ema/(p)ara/(f)ío/(n)ada/t(a)m/p(u)nt: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "Ordear (d)ata/d(e)/(r)ecb/(t)ema/(p)ara/(f)ío/(n)ada/t(a)m/p(u)nt: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dertpfnau" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Comando de shell: " + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s ó buzón" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s ó buzón" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s ó buzón" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s ó buzón" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s ó buzón" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s ó buzón" + +#: commands.c:706 +msgid " tagged" +msgstr " marcado" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Copiando a %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Tipo de contido cambiado a %s..." + +#: commands.c:912 +#, fuzzy, c-format +msgid "Character set changed to %s; %s." +msgstr "O xogo de caracteres foi cambiado a %s." + +#: commands.c:914 +msgid "not converting" +msgstr "" + +#: commands.c:914 +msgid "converting" +msgstr "" + +# +#: compose.c:42 +msgid "There are no attachments." +msgstr "Non hai ficheiros adxuntos." + +#: compose.c:84 +msgid "Send" +msgstr "Enviar" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Cancelar" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Adxuntar ficheiro" + +#: compose.c:90 +msgid "Descrip" +msgstr "Descrip" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Firmar, Encriptar" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Encriptar" + +#: compose.c:131 +msgid "Sign" +msgstr "Firmar" + +#: compose.c:133 +msgid "Clear" +msgstr "Limpar" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " firmar como: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<por defecto>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Encriptar" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "¿(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas ou (o)lvidar? " + +#: compose.c:166 +msgid "esabf" +msgstr "efcao" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Firmar como: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "¿(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas ou (o)lvidar? " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "efcao" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] xa non existe!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] modificado. ¿Actualizar codificación?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Adxuntos" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Non podes borra-lo único adxunto." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Adxuntando ficheiros seleccionados ..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "¡Non foi posible adxuntar %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Abrir buzón do que adxuntar mensaxe" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Non hai mensaxes nese buzón." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "¡Marca as mensaxes que queres adxuntar!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "¡Non foi posible adxuntar!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "A recodificación só afecta ós adxuntos de texto." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "O adxunto actual non será convertido." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "O adxunto actual será convertido" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Codificación inválida." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "¿Gardar unha copia desta mensaxe?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Cambiar nome a: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "Non foi atopado: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Novo ficheiro: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type é da forma base/subtipo" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Non coñezo ó Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Non fun capaz de crea-lo ficheiro %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "O que temos aquí é un fallo ó face-lo adxunto" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "¿Pospór esta mensaxe?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Escribir mensaxe ó buzón" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Escribindo mensaxe a %s..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Mensaxe escrita." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Saída PGP a continuación (hora actual: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "Contrasinal PGP esquecido." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Introduza o contrasinal PGP:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Introduza o contrasinal PGP:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "¿Crear unha mensaxe aplicación/pgp?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Chamando ó PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "[-- Erro: estructura multiparte/asinada inconsistente --]\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "[-- Erro: protocolo multiparte/asinado %s descoñecido --]\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Atención: non é posible verificar sinaturas %s/%s --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Os datos a continuación están asinados --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Atención: non se atoparon sinaturas. --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Fin dos datos asinados --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "sí" + +#: curs_lib.c:158 +msgid "no" +msgstr "non" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "¿Saír de Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "erro descoñecido" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Pulsa calquera tecla para seguir..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr "('?' para lista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Non hai buzóns abertos." + +# +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Non hai mensaxes." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "O buzón é de só lectura." + +# +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Función non permitida no modo \"adxuntar-mensaxe\"." + +#: curs_main.c:51 +#, fuzzy +msgid "No visible messages." +msgstr "Non hai novas mensaxes" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "¡Non se pode cambiar a escritura un buzón de só lectura!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Os cambios ó buzón serán escritos á saída da carpeta." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Os cambios á carpeta non serán gardados." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Saír" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Gardar" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Nova" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Responder" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupo" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "O buzón foi modificado externamente. Os indicadores poden ser erróneos" + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Novo correo neste buzón." + +#: curs_main.c:499 +#, fuzzy +msgid "Mailbox was externally modified." +msgstr "O buzón foi modificado externamente. Os indicadores poden ser erróneos" + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Non hai mensaxes marcadas." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Conectando con %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Saltar á mensaxe: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "O parámetro debe ser un número de mensaxe." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Esa mensaxe non é visible." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Número de mensaxe inválido." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Borrar as mensaxes que coincidan con: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Non hai patrón limitante efectivo." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Límite: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limitar ás mensaxes que coincidan con: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "¿Saír de Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Marcar as mensaxes que coincidan con: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Recuperar as mensaxes que coincidan con: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Desmarcar as mensaxes que coincidan con: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Abrir buzón en modo de só lectura" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Abrir buzón" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s non é un buzón." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "¿Saír de Mutt sen gardar?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Está na última mensaxe." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Non hai mensaxes recuperadas." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Está na primeira mensaxe." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "A búsqueda volveu ó principio." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "A búsqueda volveu ó final." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Non hai novas mensaxes" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Non hai mensaxes sen ler" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " nesta vista limitada" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "Non é posible editar unha mensaxe no servidor POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Non hai máis fíos" + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Está no primeiro fío" + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Enfiamento non habilitado." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "O fío contén mensaxes sen ler." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Non é posible editar unha mensaxe no servidor POP." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tinsertar unha liña comezando cun único ~\n" +"~b usuarios\tengadir usuarios ó campo Bcc:\n" +"~c usuarios\tengadir usuarios ó campo Cc:\n" +"~f mensaxes\tincluir mensaxes\n" +"~F mensaxes\tmesmo que ~f, mais tamén incluir cabeceiras\n" +"~h\t\tedita-la cabeceira da mensaxe\n" +"~m mensaxes\tincluir e citar mensaxes\n" +"~M mensaxes\tcomo ~m, mais tamén incluir cabeceiras\n" +"~p\t\timprimi-la mensaxe\n" +"~q\t\tescribir ficheiro e saír do editor\n" +"~r ficheiro\t\tler un ficheiro ó editor\n" +"~t usuarios\tengadir usuarios ó campo Para: \n" +"~u\t\treedita-la liña anterior\n" +"~v\t\tedita-la mensaxe có editor $visual\n" +"~w ficheiro\t\tescribir mensaxes ó ficheiro\n" +"~x\t\tcancelar cambios e saír do editor\n" +"~?\t\testa mensaxe\n" +".\t\tnunha liña, de seu, acaba a entrada\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: número de mensaxe non válido.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Un '.' de seu nunha liña remata a mensaxe)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Non hai buzón.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "A mensaxe contén:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(seguir)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "falta o nome do ficheiro.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Non hai liñas na mensaxe.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: comando de editor descoñecido (~? para axuda)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Non foi posible crea-la carpeta temporal: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Non foi posible crea-lo buzón temporal: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Non foi posible crea-lo buzón temporal: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "¡A mensaxe está valeira!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Mensaxe non modificada." + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Non foi posible abri-lo ficheiro da mensaxe: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Non foi posible engadir á carpeta: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Erro. Conservando ficheiro temporal: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Pór indicador" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Limpar indicador" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Erro: ¡Non foi posible amosar ningunha parte de Multipart/" +"Alternative!--]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Adxunto #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tipo: %s/%s, Codificación: %s, Tamaño: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automostra usando %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Chamando ó comando de automostra: %s" + +#: handler.c:1560 +#, fuzzy, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- o %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Automostra da stderr de %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- Erro: mensaxe/corpo externo non ten parámetro \"access-type\"--]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Este adxunto %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(tamaño %s bytes) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "foi borrado --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- o %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nome: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Este adxunto %s/%s " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- Este adxunto %s/%s non está incluido --]\n" +"[-- e a fonte externa indicada expirou--]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- Este adxunto %s/%s non está incluido, --]\n" +"[-- e o \"access-type\" %s indicado non está soportado --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Erro: multipart/signed non ten protocolo." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Erro: ¡multipart/encrypted non ten parámetro de protocolo!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "¡Non foi posible abri-lo ficheiro temporal!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s non está soportado " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(use '%s' para ver esta parte)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(cómpre que 'view-attachments' esté vinculado a unha tecla!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: non foi posible adxuntar ficheiro" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERRO: por favor, informe deste fallo" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<DESCOÑECIDO>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Vínculos xerais:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funcións sen vínculo:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Axuda sobre %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Non é posible facer 'unhook *' dentro doutro hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: tipo descoñecido: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: non é posible borrar un %s dende dentro dun %s" + +#: imap/auth.c:104 pop_auth.c:411 +#, fuzzy +msgid "No authenticators available" +msgstr "Autenticación SASL fallida." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Autenticando como anónimo ..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Autenticación anónima fallida." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Autenticando (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Autenticación CRAM-MD5 fallida." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Autenticando (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Autenticación GSSAPI fallida." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN deshabilitado neste servidor." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Comezando secuencia de login ..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "O login fallou." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Autenticando (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Autenticación SASL fallida." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Recollendo entornos de nomes..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Recollendo lista de carpetas..." + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s: non hai tal color" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Crear buzón:" + +#: imap/browse.c:282 +#, fuzzy +msgid "Mailbox must have a name." +msgstr "O buzón non cambiou." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Buzón creado." + +#: imap/command.c:290 +#, fuzzy +msgid "Mailbox closed" +msgstr "Buzón borrado." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Erro fatal. ¡A conta de mensaxes non está sincronizada!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Pechando conexión con %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Este servidor IMAP é moi vello. Mutt non traballa con el." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "¿Usar conexión segura con TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Seleccionando %s..." + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "¡Erro cando se estaba a escribi-lo buzón!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Non é posible engadir ós buzóns IMAP deste servidor" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "¿Crear %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Pechando conexión ó servidor IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Marcando %d mensaxes borradas ..." + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "O login fallou." + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Gardando indicadores de estado da mensaxe... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Borrando mensaxes do servidor..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +#, fuzzy +msgid "CLOSE failed" +msgstr "O login fallou." + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "Crear buzón:" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Subscribindo a %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Borrando a subscripción con %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Non foi posible recoller cabeceiras da versión de IMAP do servidor" + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "¡Non foi posible crear o ficheiro temporal!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Recollendo cabeceiras de mensaxes... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Recollendo mensaxe..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "O índice de mensaxes é incorrecto. Tente reabri-lo buzón." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Enviando mensaxe ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Copiando %d mensaxes a %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Copiando mensaxe %d a %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "¿Seguir?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: sen enderezo" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "campo de cabeceira inválido" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: método de ordeación descoñecido" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): erro en regexp: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: variable descoñecida" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefixo ilegal con reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "valor ilegal con reset" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s está activada" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s non está activada" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: tipo de buzón inválido" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: valor inválido" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: tipo descoñecido" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: tipo descoñecido" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Non foi atopado: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s non é un buzón." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Erro en %s, liña %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: erros en %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: a lectura foi abortada por haber demasiados erros in %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: erro en %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: demasiados parámetros" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: comando descoñecido" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Erro na liña de comando: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "non foi posible determina-lo directorio \"home\"" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "non foi posible determina-lo nome de usuario" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Bucle de macro detectado." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "A tecla non está vinculada." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "A tecla non está vinculada. Pulsa '%s' para axuda." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: demasiados parámetros" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: non hai tal menú" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "secuencia de teclas nula" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: demasiados argumentos" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: función descoñecida" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: secuencia de teclas baleira" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: demasiados parámetros" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec: parámetros insuficientes" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s: función descoñecida" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Introduza keyID para %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "operación nula" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "forzar amosa do adxunto usando mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ver adxunto como texto" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Cambia-la visualización das subpartes" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "mover ó final da páxina" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "volver a manda-la mensaxe a outro usuario" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "seleccionar un novo ficheiro neste directorio" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ver ficheiro" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ve-lo nome do ficheiro seleccioado actualmente" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "subscribir ó buzón actual (só IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "borra-la subscripción ó buzón actual (só IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "cambiar entre ver todos e ver só os buzóns subscritos (só IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Non hai buzóns con novo correo." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "cambiar directorios" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "comprobar se hai novo correo nos buzóns" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "adxuntar ficheiro(s) a esta mensaxe" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "adxuntar mensaxe(s) a esta mensaxe" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "edita-la lista de BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "edita-la lista CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "edita-la descripción do adxunto" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "edita-lo \"transfer-encoding\" do adxunto" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "introducir un ficheiro no que gardar unha copia da mensaxe" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "edita-lo ficheiro a adxuntar" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "edita-lo campo \"De\"" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "edita-la mensaxe con cabeceiras" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "edita-la mensaxe" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "edita-lo adxunto usando a entrada mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "edita-lo campo Responder-A" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "edita-lo tema desta mensaxe" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "edita-a lista do Para" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "crear un novo buzón (só IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "edita-lo tipo de contido do adxunto" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "coller unha copia temporal do adxunto" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "executar ispell na mensaxe" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "compór novo adxunto usando a entrada mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "cambia-la recodificación deste adxunto" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "gardar esta mensaxe para mandar logo" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "renomear/mover un ficheiro adxunto" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "envia-la mensaxe" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "cambia-la disposición entre interior/adxunto" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "cambiar a opción de borra-lo ficheiro logo de mandalo" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "actualiza-la información de codificación dun adxunto" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "escribi-la mensaxe a unha carpeta" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "copiar unha mensaxe a un ficheiro/buzón" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "crear un alias do remitente dunha mensaxe" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "mover entrada ó final da pantalla" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "mover entrada ó medio da pantalla" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "mover entrada ó principio da pantalla" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "facer copia descodificada (texto plano)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "facer copia descodificada (texto plano) e borrar" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "borra-la entrada actual" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "borra-lo buzón actual (só IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "borrar tódalas mensaxes no subfío" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "borrar tódalas mensaxes no fío" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "amosa-lo enderezo completo do remitente" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "amosa-la mensaxe e cambia-lo filtrado de cabeceiras" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "amosar unha mensaxe" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "edita-la mensaxe en cru" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "borra-lo carácter en fronte do cursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "move-lo cursor un carácter á esquerda" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "move-lo cursor ó comezo da palabra" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "saltar ó comezo de liña" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "cambiar entre buzóns de entrada" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "nome de ficheiro completo ou alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "enderezo completo con consulta" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "borra-lo carácter baixo o cursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "saltar ó final da liña" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "move-lo cursor un carácter á dereita" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "move-lo cursor ó final da palabra" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "moverse cara atrás na lista do historial" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "moverse cara atrás na lista do historial" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "borra-los caracteres dende o cursor ata o fin da liña" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "borra-los caracteres dende o cursor ata o fin da palabra" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "borrar tódolos caracteres da liña" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "borra-la palabra en fronte do cursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "cita-la vindeira tecla pulsada" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "intercambia-lo caracter baixo o cursor có anterior" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "pasa-la primeira letra da palabra a maiúsculas" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "converti-la palabra a minúsculas" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "converti-la palabra a maiúsculas" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "introducir un comando do muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "introducir unha máscara de ficheiro" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "saír deste menú" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrar adxunto a través dun comando shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "moverse á primeira entrada" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "cambia-lo indicador de 'importante' dunha mensaxe" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "reenvia-la mensaxe con comentarios" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "selecciona-la entrada actual" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "responder a tódolos destinatarios" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "moverse 1/2 páxina cara abaixo" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "moverse 1/2 páxina cara arriba" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "esta pantalla" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "saltar a un número do índice" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "moverse á última entrada" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "responder á lista de correo especificada" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "executar unha macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "compór unha nova mensaxe" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "abrir unha carpeta diferente" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "abrir unha carpeta diferente en modo de só lectura" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "limpar a marca de estado dunha mensaxe" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "borrar mensaxes coincidentes cun patrón" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "forza-la recollida de correo desde un servidor IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "recoller correo dun servidor POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "moverse á primeira mensaxe" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "moverse á última mensaxe" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "amosar só mensaxes que coincidan cun patrón" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "saltar á vindeira nova mensaxe" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "saltar á vindeira mensaxe recuperada" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "saltar ó vindeiro subfío" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "saltar ó vindeiro fío" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "moverse á vindeira mensaxe recuperada" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "saltar á vindeira mensaxe recuperada" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "saltar á mensaxe pai no fío" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "saltar ó fío anterior" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "saltar ó subfío anterior" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "moverse á anterior mensaxe recuperada" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "saltar á vindeira mensaxe nova" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "saltar á anterior mensaxe non lida" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "saltar á anterior mensaxe non lida" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "marca-lo fío actual como lido" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "marca-lo subfío actual como lido" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "pór un indicador de estado nunha mensaxe" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "gardar cambios ó buzón" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "marcar mensaxes coincidintes cun patrón" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "recuperar mensaxes coincidindo cun patrón" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "quitar marca a mensaxes coincidintes cun patrón" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "moverse ó medio da páxina" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "moverse á vindeira entrada" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "avanzar unha liña" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "moverse á vindeira páxina" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "saltar ó final da mensaxe" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "cambiar a visualización do texto citado" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "saltar o texto citado" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "saltar ó comezo da mensaxe" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "canalizar mensaxe/adxunto a un comando de shell" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "moverse á entrada anterior" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "retroceder unha liña" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "moverse á vindeira páxina" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "imprimi-la entrada actual" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "consultar o enderezo a un programa externo" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "engadir os resultados da nova consulta ós resultados actuais" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "gardar cambios ó buzón e saír" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "reeditar unha mensaxe posposta" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "limpar e redibuxa-la pantalla" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interno}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "responder a unha mensaxe" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "usa-la mensaxe actual como patrón para unha nova" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "gardar mensaxe/adxunto a un ficheiro" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "buscar unha expresión regular" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "buscar unha expresión regular cara atrás" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "busca-la vindeira coincidencia" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "busca-la vindeira coincidencia en dirección oposta" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "cambia-la coloración do patrón de búsqueda" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "chamar a un comando nun subshell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ordear mensaxes" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ordear mensaxes en orden inverso" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "marca-la entrada actual" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "aplica-la vindeira función ás mensaxes marcadas" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "aplica-la vindeira función ás mensaxes marcadas" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "marca-lo subfío actual" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "marca-lo fío actual" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "cambia-lo indicador de 'novo' dunha mensaxe" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "cambia-la opción de reescribir/non-reescribi-lo buzón" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "cambia-la opción de ver buzóns/tódolos ficheiros" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "moverse ó comezo da páxina" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "recupera-la entrada actual" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "recuperar tódalas mensaxes en fío" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "recuperar tódalas mensaxes en subfío" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "amosa-lo número e data de versión de Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "ver adxunto usando a entrada de mailcap se cómpre" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "amosar adxuntos MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "amosar o patrón limitante actual" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "colapsar/expandir fío actual" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "colapsar/expandir tódolos fíos" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "adxuntar unha chave pública PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "amosa-las opcións PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "enviar por correo unha chave pública PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "verificar unha chave pública PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "ve-la identificación de usuario da chave" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "verificar para pgp clásico" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Acepta-la cadea construida" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Engadir un remailer á cadea" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Insertar un remailer na cadea" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Borrar un remailer da cadea" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Selecciona-lo anterior elemento da cadea" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Selecciona-lo vindeiro elemento da cadea" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "envia-la mensaxe a través dunha cadea de remailers mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "facer unha copia desencriptada e borrar" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "facer unha copia desencriptada" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "borra-lo contrasinal PGP de memoria" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "extraer chaves públicas PGP" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "amosa-las opcións PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "¡Memoria agotada!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Para pórse en contacto cós desenvolvedores, manda unha mensaxe a <mutt-" +"dev@mutt.org>.\n" +"Para informar dun fallo, use a utilidade flea(1).\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-9 de Michael R. Elkins and others.\n" +"Mutt vén sen NINGÚN TIPO DE GARANTIA; para ve-los detalles, escriba `mutt -" +"vv'.\n" +"Mutt é software libre, e vostede é benvido cando desexe redistribuilo \n" +"baixo certas condicións; escriba `mutt -vv' para ve-losdetalles.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Moita xente non mencionada aquí colaborou con unha morea de código,\n" +"amaños, e suxerencias.\n" +"\n" +" Este programa é software libre; pode redistribuilo e/ou modificalo\n" +" baixo os términos da Licencia Pública Xeral de GNU, tal e como foi\n" +" publicada pola Free Software Foundation; tanto a versión 2 da\n" +" licencia, ou (ó seu gusto) outra versión posterior.\n" +"\n" +" Este programa é distribuido na esperanza de que sexa útil,\n" +" mais SEN GARANTÍA DE NINGÚN TIPO; incluso sen a garantía implícita\n" +" de MERCANTIBILIDADE ou AXEITAMENTE PARA ALGÚN PROPÓSITO PARTICULAR.\n" +" Mire a Licencia General de GNU para máis información.\n" +"\n" +" Debería haber recibido unha copia da Licencia Pública Xeral de GNU\n" +" xunto deste programa; se non foi así, escriba á Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"uso: mutt [ -nRzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f <file> ]\n" +" mutt [ -nx ] [ -e <cmd> ] [ -a <ficheiro> ] [ -F <ficheiro> ]\n" +" [ -H <ficheiro> ] [ -i <ficheiro> ] [ -s <tema> ] [ -b <enderz> ] [ -c " +"<enderz> ] <enderz> [ ... ]\n" +" mutt [ -n ] [ -e <cmd> ] [ -F <ficheiro> ] -p\n" +" mutt -v[v]\n" +"\n" +"options:\n" +" -a <ficheiro>\tadxuntar un ficheiro á mensaxe\n" +" -b <enderezo>\tespecificar un enderezo para carbon-copy cego (BCC)\n" +" -c <enderezo>\tespecificar un enderezo para carbon-copy (CC)\n" +" -e <comando>\tespecificar un comando a executar despois do inicio\n" +" -f <ficheiro>\tespecificar que buzón ler\n" +" -F <ficheiro>\tespecificar un ficheiro muttrc alternativo\n" +" -H <ficheiro>\tespecificar un ficheiro borrador do que le-la cabeceira\n" +" -i <ficheiro>\tespecificar un ficheiro que Mutt deberá incluir na " +"resposta\n" +" -m <tipo>\tespecificar un tipo de buzón por defecto\n" +" -n\t\tfai que Mutt non lea o Muttrc do sistema\n" +" -p\t\teditar unha mensaxe posposta\n" +" -R\t\tabrir un buzón en modo de só lectura\n" +" -s <tema>\tespecificar un tema (debe ir entre comillas se ten espacios)\n" +" -v\t\tamosa-la versión e las definicións en tempo de compilación\n" +" -x\t\tsimula-lo modo de envío de mailx\n" +" -y\t\tseleccionar un buzón especificado na súa lista de buzóns\n" +" -z\t\tsalir de contado se non quedan mensaxes no buzón\n" +" -Z\t\tabri-la primeira carpeta con algunha mensaxe nova, saír de contado " +"si non hai tal\n" +" -h\t\testa mensaxe de axuda" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opcións de compilación:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Error iniciando terminal." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Depurando a nivel %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "" +"A opción \"DEBUG\" non foi especificada durante a compilación. Ignorado.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s non existe. ¿Desexa crealo?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Non foi posible crear %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Non foi especificado ningún destinatario.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: non foi posible adxuntar ficheiro.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Non hai buzóns con novo correo." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Non se definiron buzóns para correo entrante." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "O buzón está valeiro." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Lendo %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "¡O buzón está corrupto!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "¡O buzón foi corrompido!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "¡Erro fatal! ¡Non foi posible reabri-lo buzón!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "¡Imposible bloquea-lo buzón!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: ¡buzón modificado, mais non hai mensaxes modificadas! (informe deste " +"fallo)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Escribindo mensaxes... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "Compilando patrón de búsqueda..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "¡Fallou a escritura! Gardado buzón parcialmente a %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "¡Non foi posible reabri-lo buzón!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Reabrindo buzón..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Saltar a: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Número de índice inválido." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Non hai entradas." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Non é posible moverse máis abaixo." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Non é posible moverse máis arriba." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Está na derradeira páxina." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Está na primeira páxina." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Amosase a primeira entrada." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Amosase a derradeira entrada." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Está na derradeira entrada." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Está na primeira entrada." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Búsqueda de: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Búsqueda inversa de: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Non hai patrón de búsqueda." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Non se atopou." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Non hai entradas marcadas." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "A búsqueda non está implementada neste menú." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "O salto non está implementado nos diálogos." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "O marcado non está soportado." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Lendo %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "O ficheiro é un directorio, ¿gardar nel?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "O ficheiro é un directorio, ¿gardar nel?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Ficheiro no directorio: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "O ficheiro existe, ¿(s)obreescribir, (e)ngadir ou (c)ancelar?" + +#: muttlib.c:869 +msgid "oac" +msgstr "sec" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Non foi posible garda-la mensaxe no buzón POP." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "¡%s non é un buzón!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "¿engadir mensaxes a %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, fuzzy, c-format +msgid "Connection to %s closed" +msgstr "Fallou a conexión con %s." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL non está accesible." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "O comando de preconexión fallou." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, fuzzy, c-format +msgid "Error talking to %s (%s)" +msgstr "Erro ó conectar có servidor: %s" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Buscando %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Non foi posible atopa-lo servidor \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Conectando con %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Non foi posible conectar con %s (%s)" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Non hai entropía abondo no seu sistema" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Enchendo pozo de entropía: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s ten permisos inseguros." + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL foi deshabilitado debido á falta de entropía." + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "O login fallou." + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Non foi posible obter un certificado do outro extremo" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Conectando mediante SSL usando %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Descoñecido" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[imposible calcular]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ data incorrecta ]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "O certificado do servidor non é aínda válido" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "O certificado do servidor expirou" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Este certificado pertence a:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Este certificado foi emitido por:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Este certificado é válido" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " de %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " a %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingerprint: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Comprobación do certificado SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)exeitar, aceptar (e)sta vez, (a)ceptar sempre" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "rea" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)exeitar, aceptar (e)sta vez" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "re" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Saír " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Atención: non foi posible garda-lo certificado" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certificado gardado" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Excedeuse a conta de bloqueos, ¿borrar bloqueo para %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Non se pode bloquear %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "¡Tempo de espera excedido cando se tentaba face-lo bloqueo fcntl!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Agardando polo bloqueo fcntl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "¡Tempo de espera excedido cando se tentaba face-lo bloqueo flock!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Agardando polo intento de flock... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Non foi posible bloquear %s.\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Lendo %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Escribindo %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "¡Non foi posible sincroniza-lo buzón %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "¿Mover mensaxes lidas a %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "¿Purgar %d mensaxe marcada como borrada?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "¿Purgar %d mensaxes marcadas como borradas?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Movendo mensaxes lidas a %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "O buzón non cambiou." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d conservados, %d movidos, %d borrados." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d conservados, %d borrados." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Pulse '%s' para cambiar a modo escritura" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "¡Use 'toggle-write' para restablece-lo modo escritura!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "O buzón está marcado como non escribible. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Buzón marcado para comprobación." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Non foi posible escribi-la mensaxe" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +# +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Non dispoñible neste menú." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PáxAnt" + +#: pager.c:1447 +msgid "NextPg" +msgstr "SegPáx" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Ver adxunto" + +#: pager.c:1454 +msgid "Next" +msgstr "Seguinte" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Amosase o final da mensaxe." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Amosase o principio da mensaxe." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Búsqueda inversa: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Búsqueda: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Estase a amosa-la axuda" + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Non hai máis texto citado." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Non hai máis texto sen citar despois do texto citado." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "¡A mensaxe multiparte non ten parámetro \"boundary\"!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Erro na expresión: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Día do mes inválido: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Mes inválido: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Data relativa incorrecta: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "erro na expresión" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "erro no patrón en: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: comando inválido" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: non está soportado neste modo" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "falta un parámetro" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "paréntese sen contraparte: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "patrón valeiro" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "erro: operador descoñecido %d (informe deste erro)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Compilando patrón de búsqueda..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Executando comando nas mensaxes coincidintes..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Non hai mensaxes que coincidan co criterio." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "A búsqueda cheou ó final sen atopar coincidencias" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "A búsqueda chegou ó comezo sen atopar coincidencia" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Búsqueda interrompida." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Contrasinal PGP esquecido." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Erro: ¡non foi posible crear subproceso PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "[-- Fin da saída PGP --]\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- COMEZA A MESAXE PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- COMEZA O BLOQUE DE CHAVE PÚBLICA PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- COMEZA A MESAXE FIRMADA CON PGP --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- FIN DA MESAXE PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- FIN DO BLOQUE DE CHAVE PÚBLICA PGP --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- FIN DA MESAXE FIRMADA CON PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Erro: ¡non se atopou o comezo da mensaxe PGP! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Erro interno. Informe a <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Erro: ¡non foi posible crear un subproceso PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Erro: ¡mensaxe PGP/MIME mal formada! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Erro: ¡non foi posible crea-lo ficheiro temporal! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Os datos a continuación están encriptados con PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- Fin dos datos con encriptación PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "¡Non foi posible abri-lo subproceso PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "¿Usa-lo keyID = \"%s\" para %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Introduza keyID para %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Non foi posible invocar ó PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Recollendo chave PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Tódalas chaves coincidintes están marcadas como expiradas/revocadas." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Seleccionar " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Comprobar chave " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Chaves PGP coincidintes con <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Chaves PGP coincidintes con \"%s\"" + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Non foi posible abrir /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Non podo crea-lo ficheiro temporal" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Key ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Esta chave non pode ser usada: expirada/deshabilitada/revocada." + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "Este ID expirou/foi deshabilitado/foi revocado" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Este ID non é de confianza." + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "Este ID é de confianza marxinal." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ¿Está seguro de querer usa-la chave?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Introduza o key ID: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Chamando ó PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Chave PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Buscando chaves que coincidan con \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "O comando TOP non está soportado polo servidor." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Non foi posible escribi-la cabeceira ó ficheiro temporal" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "O comando UIDL non está soportado polo servidor." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Recollendo a lista de mensaxes..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Non foi posible escribi-la mensaxe ó ficheiro temporal" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Buscando novas mensaxes..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "O servidor POP non está definido" + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Non hai novo correo no buzón POP." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "¿Borra-las mensaxes do servidor?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Lendo novas mensaxes (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "¡Erro cando se estaba a escribi-lo buzón!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d de %d mensaxes lidas]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "¡O servidor pechou a conexión!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Autenticando (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Autenticando (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Autenticación APOP fallida." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "O comando USER non está soportado polo servidor." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Non foi posible deixa-las mensaxes no servidor." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Erro ó conectar có servidor: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Pechando conexión có servidor POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Verificando os índices de mensaxes..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Perdeuse a conexión. ¿Volver a conectar ó servidor POP?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Mensaxes pospostas" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Non hai mensaxes pospostas." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Cabeceira PGP ilegal" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Cabeceira PGP ilegal" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "O login fallou." + +#: query.c:46 +msgid "New Query" +msgstr "Nova consulta" + +#: query.c:47 +msgid "Make Alias" +msgstr "Facer alias" + +#: query.c:48 +msgid "Search" +msgstr "Búsqueda" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Agardando resposta..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Comando de consulta non definido." + +#: query.c:286 +msgid "Query" +msgstr "Consulta" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Consulta: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Consulta '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Canalizar" + +#: recvattach.c:53 +msgid "Print" +msgstr "Imprimir" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Gardando..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Adxunto gardado." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "¡ATENCION! Está a punto de sobreescribir %s, ¿seguir?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Adxunto filtrado." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrar a través de: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Canalizar a: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "¡Non sei cómo imprimir adxuntos %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "¿Imprimi-la(s) mensaxe(s) marcada(s)?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "¿Imprimir adxunto?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Non foi posible atopar ningunha mensaxe marcada." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Adxuntos" + +# +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Non hai subpartes que amosar." + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Non é posible borrar un adxunto do servidor POP." + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "O borrado de adxuntos de mensaxes PGP non está soportado." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Só o borrado de adxuntos de mensaxes multiparte está soportado." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Somentes podes rebotar partes \"message/rfc822\"" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Erro enviando a mensaxe." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Erro enviando a mensaxe." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Non foi posible abri-lo ficheiro temporal %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "¿Reenviar mensaxes coma adxuntos?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Non foi posible decodificar tódolos adxuntos marcados.\n" +"¿Remitir con MIME os outros?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "¿Facer \"forward\" con encapsulamento MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Non foi posible crear %s" + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Non foi posible atopar ningunha mensaxe marcada." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "¡Non se atoparon listas de correo!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Non foi posible decodificar tódolos adxuntos marcados.\n" +"¿Remitir con MIME os outros?" + +#: remailer.c:480 +msgid "Append" +msgstr "Engadir" + +#: remailer.c:481 +msgid "Insert" +msgstr "Insertar" + +#: remailer.c:482 +msgid "Delete" +msgstr "Borrar" + +#: remailer.c:484 +msgid "OK" +msgstr "Ok" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Non foi posible recolle-lo 'type2.list' do mixmaster." + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Seleccionar unha cadea de remailers." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Erro: %s non pode ser usado como remailer final dunha cadea." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "As cadeas mixmaster están limitadas a %d elementos." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "A cadea de remailers xa está valeira." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "O primeiro elemento da cadea xa está seleccionado." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "O derradeiro elemento da cadea xa está seleccionado." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "O mixmaster non acepta cabeceiras Cc ou Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Por favor, use un valor correcto da variable 'hostname' cando use o " +"mixmaster." + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Erro enviando mensaxe, o proceso fillo saíu con %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Erro enviando a mensaxe." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Entrada malformada para o tipo %s en \"%s\" liña %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Non se especificou unha ruta de mailcap" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "non se atopou unha entrada mailcap para o tipo %s" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: insuficientes parámetros" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: demasiados parámetros" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Non hai tema, ¿cancelar?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Non hai tema, cancelando." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "¿Responder a %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "¿Responder a %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "¡Non hai mensaxes marcadas que sexan visibles!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "¿Inclui-la mensaxe na resposta?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Incluindo mensaxe citada..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "¡Non foi posible incluir tódalas mensaxes requeridas!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "¿Remitir como adxunto?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Preparando mensaxe remitida ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "¿Editar mensaxe posposta?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Preparando mensaxe remitida ..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "¿Cancelar mensaxe sen modificar?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Mensaxe sen modificar cancelada." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Mensaxe non enviada." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Mensaxe posposta." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "¡Non se especificaron destinatarios!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Non se especificaron destinatarios." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Non hai tema, ¿cancela-lo envío?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Non se especificou tema." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Enviando mensaxe..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Non foi posible envia-la mensaxe." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Mensaxe enviada." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Mandando en segundo plano." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "¡Non se atopout parámetro \"boundary\"! [informe deste erro]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "¡Xa non existe %s!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s non é un buzón." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Non foi posible abrir %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Erro enviando mensaxe, o proceso fillo saíu con %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Saída do proceso de distribución" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "Atrapado %s... Saíndo.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Atrapado %s... Saíndo.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Atrapado sinal %d... Saíndo.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Saír " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Mes inválido: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Descoñecido" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Introduza keyID para %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Chaves PGP coincidintes con \"%s\"" + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "¿Usa-lo keyID = \"%s\" para %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "¿Usa-lo keyID = \"%s\" para %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Erro: ¡non foi posible crear subproceso PGP! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Non se puido crea-lo filtro" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(non hai buzón)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Atención: non foi posible garda-lo certificado" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "¡Non foi posible abri-lo subproceso PGP!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "[-- Fin da saída PGP --]\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Erro: ¡non foi posible crear subproceso PGP! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Os datos a continuación están encriptados con PGP/MIME --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Os datos a continuación están asinados --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Fin dos datos con encriptación PGP/MIME --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Fin dos datos asinados --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ordeando buzón..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "¡Non foi atopada unha función de ordeación! [informe deste fallo]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(non hai buzón)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "A mensaxe pai non é visible na vista limitada." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "A mensaxe pai non é accesible." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Chamando ó PGP..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "¿Rebotar mensaxe a %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "¿Rebotar mensaxes a %s...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "efcao" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certificado gardado" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "O nivel de confianza deste ID está sen definir." + +#~ msgid "Decode-save" +#~ msgstr "Descodificar-gardar" + +#~ msgid "Decode-copy" +#~ msgstr "Descodificar-copiar" + +#~ msgid "Decrypt-save" +#~ msgstr "Desencriptar-gardar" + +#~ msgid "Decrypt-copy" +#~ msgstr "Desencriptar-copiar" + +#~ msgid "Copy" +#~ msgstr "Copiar" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Fin da saída PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Non foi atopado: %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: non hai tal comando" + +#~ msgid "Authentication method is unknown." +#~ msgstr "O método de autenticación é descoñecido." + +#, fuzzy +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "O marcado non está soportado." + +#, fuzzy +#~ msgid "Can't open %s: %s." +#~ msgstr "Non foi atopado: %s" + +#~ msgid "MIC algorithm: " +#~ msgstr "Algoritmo MIC: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Isto non é moi sensato se non queres firma-la mensaxe." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "" +#~ "Algoritmo MIC descoñecido, os válidos son: pgp-md5, pgp-sha1, pgp-rmd160" + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- Erro: ¡fin de ficheiro inesperado! --]\n" + +#~ msgid "IMAP Username: " +#~ msgstr "Usuario IMAP: " + +#, fuzzy +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "Introduza keyID para %s: " + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Reabrindo buzón... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Pechando buzón..." + +#~ msgid "Sending APPEND command ..." +#~ msgstr "Enviando comando APPEND..." + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "Implementación SHA1 Copyright (C) 1995-7 Eric A. Young <eay@cryptosoft." +#~ "com>\n" +#~ " A redistribución e uso na súa forma de fontes e binarios, con ou sin\n" +#~ " modificación, están permitidas baixo certas condicións.\n" +#~ "\n" +#~ " A implementación de SHA1 ven TAL CUAL, e CALQUERA GARANTIA EXPRESA " +#~ "OU\n" +#~ " IMPLICADA, incluindo, mais non limitada a, as garantías implícitas " +#~ "de\n" +#~ " comercialización e adaptación a un propósito particular SON\n" +#~ " DESCARGADAS.\n" + +#~ msgid "POP Password: " +#~ msgstr "Contrasinal POP: " + +#~ msgid "No POP username is defined." +#~ msgstr "Non foi definido nome de usuario POP." + +#, fuzzy +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Lendo %d nova mensaxe (%d butes)..." + +#~ msgid "Error reading message!" +#~ msgstr "¡Erro lendo mensaxe!" + +#, fuzzy +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d mensaxes lidas]" + +#~ msgid "Attachment saved" +#~ msgstr "Adxunto gardado" + +#~ msgid "Compose" +#~ msgstr "Compór" + +#~ msgid "move to the last undelete message" +#~ msgstr "moverse á última mensaxe recuperada" + +#~ msgid "return to the main-menu" +#~ msgstr "voltar ó menú principal" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "ignorando campo de cabeceira valeiro: %s" + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_erro(): resposta inesperada en %s: %s\n" + +# +#~ msgid "IMAP folder browsing is not currently supported" +#~ msgstr "A navegación de carpetas IMAP non está soportada actualmente" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "¡Non fun capaz de abri-lo teu anel secreto de chaves!" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "Foi definida unha versión descoñecida de PGP para firmar." + +#~ msgid "===== Attachments =====" +#~ msgstr "====== Adxuntos =====" + +# +#~ msgid "Sending CREATE command ..." +#~ msgstr "Enviando comando CREATE..." + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "Versión de PGP descoñecida \"%s\"." + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- Erro: ¡esta mensaxe non compre coas especificacións PGP/MIME! --]\n" +#~ "\n" + +#~ msgid "reserved" +#~ msgstr "reservado" + +#~ msgid "Encrypted Session Key" +#~ msgstr "Chave da sesión encriptada" + +#~ msgid "Signature Packet" +#~ msgstr "Paquete da firma" + +#~ msgid "Conventionally Encrypted Session Key Packet" +#~ msgstr "Paquete da sesión encriptada convencionalmente" + +#~ msgid "One-Pass Signature Packet" +#~ msgstr "Paquete de firma \"One-Pass\"" + +#~ msgid "Secret Key Packet" +#~ msgstr "Paquete de chave secreta" + +#~ msgid "Public Key Packet" +#~ msgstr "Paquete de chave pública" + +#~ msgid "Secret Subkey Packet" +#~ msgstr "Paquete de subchave secreta" + +#~ msgid "Compressed Data Packet" +#~ msgstr "Paquete de datos comprimidos" + +#~ msgid "Symmetrically Encrypted Data Packet" +#~ msgstr "Paquete de data encriptada simétricamente" + +#~ msgid "Marker Packet" +#~ msgstr "Paquete marcador" + +#~ msgid "Literal Data Packet" +#~ msgstr "Paquete de datos literales" + +#~ msgid "Trust Packet" +#~ msgstr "Paquete de confianza" + +#~ msgid "Name Packet" +#~ msgstr "Paquete de nome" + +#~ msgid "Subkey Packet" +#~ msgstr "Paquete de subchave" + +#~ msgid "Reserved" +#~ msgstr "Reservado" + +#~ msgid "Comment Packet" +#~ msgstr "Paquete de comentario" + +#~ msgid "Message edited. Really send?" +#~ msgstr "Mensaxe editada. ¿Enviar de verdad?" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "Gardada saída do proceso fillo a %s.\n" diff --git a/po/hu.gmo b/po/hu.gmo new file mode 100644 index 0000000000000000000000000000000000000000..93fc145a27d9b7fd474f86357f98b27d3267555d GIT binary patch literal 79559 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 z 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 literal 0 HcmV?d00001 diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..c9daca4 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,4163 @@ +# Hungarian translation for Mutt. +# Copyright (C) 2000-2001 Free Software Foundation, Inc. +# László Kiss <kissl@eptan.efe.hu>, 2000-2001; +# Szabolcs Horváth <horvaths@fi.inf.elte.hu>, 2001-2003. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.5.4i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-08-01 13:56+0000\n" +"Last-Translator: Szabolcs Horváth <horvaths@fi.inf.elte.hu>\n" +"Language-Team: LME Magyaritasok Lista <magyar@lists.linux.hu>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "%s azonosító: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s jelszava: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Kilép" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Töröl" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Visszaállít" + +#: addrbook.c:36 +msgid "Select" +msgstr "Választ" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Súgó" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Nincs bejegyzés a címjegyzékben!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Címjegyzék" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Álnév: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Már van bejegyzés ilyen álnévvel!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Figyelmeztetés: Ez az álnév lehet, hogy nem mûködik. Javítsam?" + +#: alias.c:279 +msgid "Address: " +msgstr "Cím: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Hiba: '%s' hibás IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Név: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Rendben?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Mentés fájlba: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Cím bejegyezve." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Nem felel meg a névmintának, tovább?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "A mailcap-ba \"compose\" bejegyzés szükséges %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Hiba a(z) \"%s\" futtatásakor!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Fájl megnyitási hiba a fejléc vizsgálatakor." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Fájl megnyitási hiba a fejléc eltávolításkor." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"Nincs mailcap \"compose\" bejegyzés a(z) %s esetre, üres fájl létrehozása." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "A mailcap-ba \"edit\" bejegyzés szükséges %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Nincs \"edit\" bejegyzés a mailcap-ban a(z) %s esetre" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Nincs megfelelõ mailcap bejegyzés. Megjelenítés szövegként." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "A MIME típus nincs definiálva. A melléklet nem jeleníthetõ meg." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Nem lehet szûrõt létrehozni." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Szûrõt nem lehet létrehozni" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Írási hiba!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Nem ismert, hogy ezt hogyan kell kinyomtatni!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Könyvtárváltás" + +#: browser.c:42 +msgid "Mask" +msgstr "Maszk" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "A(z) %s nem könyvtár." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Postafiókok [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Felírt [%s], Fájlmaszk: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Könyvtár [%s], Fájlmaszk: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Könyvtár nem csatolható!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Nincs a fájlmaszknak megfelelõ fájl" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Csak IMAP postafiókok létrehozása támogatott" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Csak IMAP postafiókok törlése támogatott" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Valóban törli a \"%s\" postafiókot?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Postafiók törölve." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "A postafiók nem lett törölve." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Könyvtár: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Hiba a könyvtár beolvasásakor." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Fájlmaszk: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Fordított rendezés (d)átum, (n)év, (m)éret szerint vagy (r)endezetlen?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Rendezés (d)átum, (n)év, (m)éret szerint vagy (r)endezetlen?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dnmr" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Az új fájl neve: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "A könyvtár nem jeleníthetõ meg" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Hiba a fájl megjelenítéskor" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Új levél: " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: a terminál által nem támogatott szín" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%%s: nincs ilyen szín" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: nincs ilyen objektum" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: a parancs csak index objektumra érvényes" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: túl kevés paraméter" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Hiányzó paraméter." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: túl kevés paraméter" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: túl kevés paraméter" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: nincs ilyen attribútum" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "túl kevés paraméter" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "túl sok paraméter" + +#: color.c:721 +msgid "default colors not supported" +msgstr "az alapértelmezett színek nem támogatottak" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Ellenõrizzük a PGP aláírást?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Nem lehet átmeneti fájlt létrehozni!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Nem lehet megjelenítõ szûrõt létrehozni." + +#: commands.c:146 +msgid "Could not copy message" +msgstr "A levelet nem tudtam másolni" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME aláírás sikeresen ellenõrizve." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Az S/MIME tanúsítvány tulajdonosa nem egyezik a küldõvel. " + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "Az S/MIME aláírást NEM tudtam ellenõrizni." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "A PGP aláírás sikeresen ellenõrizve." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "A PGP aláírást NEM tudtam ellenõrizni." + +#: commands.c:223 +msgid "Command: " +msgstr "Parancs: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Levél visszaküldése. Címzett: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Kijelölt levelek visszaküldése. Címzett: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Hibás cím!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Hibás IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Levél visszaküldése %s részére" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Levél visszaküldése %s részére" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "A levél nem lett visszaküldve." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "A levél nem lett visszaküldve." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Levél visszaküldve." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Levél visszaküldve." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Szûrõfolyamatot nem lehet létrehozni" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Parancs, aminek továbbít: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Nincs nyomtatási parancs megadva." + +#: commands.c:483 +msgid "Print message?" +msgstr "Kinyomtatod a levelet?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Kinyomtatod a kijelölt leveleket?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Levél kinyomtatva" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Levél kinyomtatva" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "A levelet nem tudtam kinyomtatni" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "A leveleket nem tudtam kinyomtatni" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Fordítva rendez Dátum/Feladó/érK/tárGy/Címzett/Téma/Rendetlen/Méret/" +"Pontszám: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Rendez Dátum/Feladó/érKezés/tárGy/Címzett/Téma/Rendezetlen/Méret/Pontszám: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfkgctrmp" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Shell parancs: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Dekódolás-mentés%s postafiókba" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Dekódolás-másolás%s postafiókba" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Visszafejtés-mentés%s postafiókba" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Visszafejtés-másolás%s postafiókba" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Mentés%s postafiókba" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Másolás%s postafiókba" + +#: commands.c:706 +msgid " tagged" +msgstr " kijelölt" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Másolás a(z) %s-ba..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Átalakítsam %s formátumra küldéskor?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Tartalom-típus megváltoztatva %s-ra." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Karakterkészlet beállítva: %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "nem alakítom át" + +#: commands.c:914 +msgid "converting" +msgstr "átalakítom" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Nincs melléklet." + +#: compose.c:84 +msgid "Send" +msgstr "Küld" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Mégse" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Fájl csatolás" + +#: compose.c:90 +msgid "Descrip" +msgstr "Leírás" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Aláír, Titkosít" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Titkosít" + +#: compose.c:131 +msgid "Sign" +msgstr "Aláír" + +#: compose.c:133 +msgid "Clear" +msgstr "Nincs" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " aláír mint: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<alapeset>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Titkosítás: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (t)itkosít, (a)láír, aláír (m)int, titkosít é(s) aláír, mé(g)se? " + +#: compose.c:166 +msgid "esabf" +msgstr "tamsg" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Aláír mint: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (t)itkosít, (a)láír, titkosít (p)rg, aláír (m)int, titkosít é(s) " +"aláír, mé(g)se? " + +#: compose.c:228 +msgid "eswabf" +msgstr "tapmsg" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, vagy (m)égse? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345m" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] tovább nem létezik!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] módosítva. Frissítsük a kódolást?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Mellékletek" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Figyelmeztetés: '%s' hibás IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Az egyetlen melléklet nem törölhetõ." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Hibás IDN \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "A kiválasztott fájlok csatolása..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "%s nem csatolható!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Postafiók megnyitása levél csatolásához" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Nincs levél ebben a postafiókban." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Jelöld ki a csatolandó levelet!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Nem lehet csatolni!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Az újrakódolás csak a szöveg mellékleteket érinti." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Ez a melléklet nem lesz konvertálva." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Ez a melléklet konvertálva lesz." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Érvénytelen kódolás." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Mented egy másolatát a levélnek?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Átnevezés: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "%s nem olvasható: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Új fájl: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "A tartalom-típus alap-/altípus formájú." + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "%s ismeretlen tartalom-típus" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Nem lehet a(z) %s fájlt létrehozni" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Hiba a melléklet csatolásakor" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Eltegyük a levelet késõbbre?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Levél mentése postafiókba" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Levél mentése %s-ba ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Levél elmentve." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME már ki van jelölve. Törlés & folytatás ?" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP már ki van jelölve. Törlés & folytatás ?" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (pontos idõ: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s kimenet következik%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Jelszó elfelejtve." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Kérlek írd be a PGP jelszavadat: " + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Kérlek írd be az SMIME jelszavadat: " + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Hagyományos (beágyazott) PGP üzenet készítése?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "PGP betöltés..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "Tartalom-útmutatás nélküli S/MIME üzenetek nem támogatottak." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "PGP kulcsok kibontása...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "S/MIME tanúsítványok kibontása...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Hiba: Ellentmondó többrészes/aláírt struktúra! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Hiba: Ismeretlen többrészes/aláírt protokoll %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Figyelmeztetés: Nem tudtam leellenõrizni a %s/%s aláírásokat. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- A következõ adatok alá vannak írva --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Figyelmeztetés: Nem találtam egy aláírást sem. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Aláírt adat vége --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "igen" + +#: curs_lib.c:158 +msgid "no" +msgstr "nem" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Kilépsz a Mutt-ból?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "ismeretlen hiba" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Nyomj le egy billentyût a folytatáshoz..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' lista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Nincs megnyitott postafiók." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Nincs levél." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "A postafiók csak olvasható." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "A funkció levél-csatolás módban le van tiltva." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Nincs látható levél." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "A csak olvasható postafiókba nem lehet írni!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "" +"A postafiók módosításai a postafiókból történõ kilépéskor lesznek elmentve." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "A postafiók módosításai nem lesznek elmentve." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Kilép" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Ment" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Levél" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Válasz" + +#: curs_main.c:403 +msgid "Group" +msgstr "Csoport" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "A postafiókot más program módosította. A jelzõk hibásak lehetnek." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Új levél érkezett a postafiókba." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "A postafiókot más program módosította." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Nincs kijelölt levél." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Kapcsolódás %s-hez..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Levélre ugrás: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "A paraméternek levélszámnak kell lennie." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Ez a levél nem látható." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Érvénytelen levélszám." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "A mintára illeszkedõ levelek törlése: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "A szûrõ mintának nincs hatása." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Szûkítés: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Minta a levelek szûkítéséhez: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Kilépsz a Muttból?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Minta a levelek kijelöléséhez: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Minta a levelek visszaállításához: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Minta a levélkijelölés megszüntetéséhez:" + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Postafiók megnyitása csak olvasásra" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Postafiók megnyitása" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "A(z) %s nem egy postafiók." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Kilépsz a Muttból mentés nélül?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Ez az utolsó levél." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Nincs visszaállított levél." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Ez az elsõ levél." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Keresés az elejétõl." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Keresés a végétõl." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Nincs új levél" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Nincs olvasatlan levél" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " ebben a szûkített megjelenítésben" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "A POP kiszolgálón nem lehet a 'fontos' jelzõt állítani." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Nincs több téma." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Ez az elsõ téma." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "A témázás le van tiltva." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "A témában olvasatlan levelek vannak." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "A POP kiszolgálón nem lehet szerkeszteni a levelet." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tbeszúr egy '~'-al kezdödõ sort\n" +"~b címzett\thozzáadás a Bcc: (Titkos másolat:) mezõhöz\n" +"~c címzett\thozzáadás a Cc: (Másolat:) mezõhöz\n" +"~f levelek\tlevelek beszúrása\n" +"~F levelek\tmint az ~f, de az levélfejlécet is beszúrja\n" +"~h\t\tlevél fejlécének szerkesztése\n" +"~m leveleket\tidézett levelek beszúrása\n" +"~M levelek\tmint az ~m, de az levélfejlécet is beszúrja\n" +"~p\t\tlevél kinyomtatása\n" +"~q\t\tfájl mentése és kilépés az editorból\n" +"~r fájl\t\tfájl beolvasása az editorba\n" +"~t címzett\thozzáadás a To: (Címzett:) mezõhöz\n" +"~u\t\taz utolsó sor visszahívása\n" +"~v\t\tlevél szerkesztése a $visual editorral\n" +"~w fájl\t\tlevél mentése fájlba\n" +"~x\t\tváltoztatások megszakítása és kilépés az editorból\n" +"~?\t\tez az üzenet\n" +".\t\tha egyedül áll a sorban befejezi a bevitelt\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: érvénytelen levélszám.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Levél befejezése egyetlen '.'-ot tartalmazó sorral)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Nincs postafiók.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Levél tartalom:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(tovább)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "hiányzó fájlnév.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Nincsenek sorok a levélben.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Hibás IDN a következõben: %s '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "s%: ismeretlen editor parancs (~? súgó)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "%s ideiglenes postafiók nem hozható létre" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "nem lehet írni a(z) %s ideiglenes postafiókba" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "nem lehet levágni a(z) %s ideiglenes postafiókból" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "A levélfájl üres!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "A levél nem lett módosítva!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "A(z) %s levélfájl üres" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Nem lehet hozzáfûzni a(z) %s postafiókhoz" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Hiba a(z) %s ideiglenes fájl mentésekor" + +#: flags.c:332 +msgid "Set flag" +msgstr "Jelzõ beállítása" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Jelzõ törlése" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- Hiba: Egy Többrészes/Alternatív rész sem jeleníthetõ meg! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Melléklet #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Típus: %s/%s, Kódolás: %s, Méret: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automatikus megjelenítés a(z) %s segítségével --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Megjelenítõ parancs indítása: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Nem futtatható: %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- A(z) %s hiba kimenete --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Hiba: az üzenetnek/külsõ-törzsének nincs elérési-típus paramétere --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Ez a %s/%s melléklet " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(mérete %s bájt)" + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr " törölve lett --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s-on --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- név: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- A %s/%s melléklet nincs beágyazva, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- és a jelzett külsõ forrás --]\n" +"[-- megszûnt. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- és a jelzett elérési-típus, %s nincs támogatva --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Hiba: a többrészes/aláírt részhez nincs protokoll megadva." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Hiba: a többrészes/kódolt rész protokoll paramétere hiányzik!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Nem lehet megnyitni átmeneti fájlt!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s nincs támogatva " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(E rész megjelenítéséhez használja a(z) '%s'-t)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(a mellélet megtekintéshez billentyû lenyomás szükséges!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: nem lehet csatolni a fájlt" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "HIBA: kérlek jelezd ezt a hibát a fejlesztõknek" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<ISMERETLEN>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Alap billentyûkombinációk:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Billentyûkombináció nélküli parancsok:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Súgó: %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Nem lehet 'unhook *'-ot végrehajtani hook parancsból." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "hozzárendelés törlése: ismeretlen hozzárendelési típus: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: %s-t nem lehet törölni a következõbõl: %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Egyetlen azonosító sem érhetõ el" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Azonosítás (anonymous)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonymous azonosítás nem sikerült." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Azonosítás (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 azonosítás nem sikerült." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Azonosítás (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI azonosítás nem sikerült." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "A LOGIN parancsot letiltották ezen a szerveren." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Bejelentkezés..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Sikertelen bejelentkezés." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Azonosítás (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL azonosítás nem sikerült." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s érvénytelen IMAP útvonal" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Névterek letöltése..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Postafiókok listájának letöltése..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Nincs ilyen postafiók" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Postafiók létrehozása: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "A postafióknak nevet kell adni." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Postafiók létrehozva." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Postafiók lezárva" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Végzetes hiba. Az üzenetszámláló nincs szinkronban." + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "%s kapcsolat lezárása..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Ez az IMAP kiszolgáló nagyon régi. A Mutt nem tud együttmûködni vele." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Biztonságos TLS kapcsolat?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Nem lehetett megtárgyalni a TLS kapcsolatot" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "%s választása..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Hiba a postafiók megnyitásaor" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Ezen a szerveren az IMAP postafiókokhoz nem lehet hozzáfûzni" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "%s létrehozása?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "IMAP kapcsolat lezárása..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "%d levél megjelölése töröltnek..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Sikertelen törlés" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Állapotjelzõk mentése... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Levelek törlése a szerverrõl..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE sikertelen" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "Sikertelen CLOSE" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Hibás postafiók név" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "%s felírása..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "%s leírása..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Nem lehet a fejléceket letölteni ezen verziójú IMAP szerverrõl" + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Nem lehet a %s átmeneti fájlt létrehozni" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Levélfejlécek letöltése... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Levél letöltése..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" +"A levelek tartalomjegyzéke hibás. Próbáld megnyitni újra a postafiókot." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Levél feltöltése..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "%d levél másolása a %s postafiókba..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "%d levél másolása %s-ba ..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Folytatod?" + +#: init.c:611 +msgid "alias: no address" +msgstr "címjegyzék: nincs cím" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Figyelmeztetés: Hibás IDN '%s' a '%s' álnévben.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "érvénytelen mezõ a fejlécben" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: ismeretlen rendezési mód" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): hibás reguláris kifejezés: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: ismeretlen változó" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "\"reset\"-nél nem adható meg elõtag" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "\"reset\"-nél nem adható meg érték" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s beállítva" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s beállítása törölve" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: érvénytelen postafiók típus" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: érvénytelen érték" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: ismeretlen típus" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: ismeretlen típus" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "%s nem olvasható: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s nem egy hagyományos fájl." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Hiba a %s-ban, sor %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: hiba a %s fájlban" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: az olvasás megszakadt, a %s fájlban túl sok a hiba" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: hiba a %s-nál" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: túl sok paraméter" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: ismeretlen parancs" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Hibás parancssor: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "meghatározhatatlan felhasználói könyvtár" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "meghatározhatatlan felhasználónév" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Végtelen ciklus a makróban." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "A billentyûhöz nincs funkció rendelve." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "A billentyûhöz nincs funkció rendelve. A súgóhoz nyomd meg a '%s'-t." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: túl sok paraméter" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: nincs ilyen menü" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "üres billentyûzet-szekvencia" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: túl sok paraméter" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: ismeretlen funkció" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: üres billentyûzet-szekvencia" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: túl sok paraméter" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: nincs paraméter" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: nincs ilyen funkció" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Add meg a kulcsokat (^G megszakítás): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Karakter = %s, Oktális = %o, Decimális = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "üres mûvelet" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "melléklet megtekintése mailcap segítségével" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "melléklet megtekintése szövegként" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "További részek mutatása/elrejtése" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ugrás az oldal aljára" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "levél újraküldése egy másik felhasználónak" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "válassz egy új fájlt ebben a könyvtárban" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "fájl megtekintése" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "kijelölt fájl nevének mutatása" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "aktuális postafiók felírása (csak IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "aktuális postafiók leírása (csak IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "váltás az összes/felírt postafiók nézetek között (csak IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "új levelet tartalmazó postafiókok" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "könyvtár váltás" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "új levél keresése a postafiókokban" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "fájl(ok) csatolása ezen üzenethez" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "üzenet(ek) csatolása ezen üzenethez" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "Rejtett másolatot kap (BCC) lista szerkesztése" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "Másolatot kap lista (CC) szerkesztése" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "melléklet-leírás szerkesztése" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "melléklet átviteli-kódolás szerkesztése" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "adj meg egy fájlnevet, ahova a levél másolatát elmentem" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "csatolandó fájl szerkesztése" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "feladó mezõ szerkesztése" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "üzenet szerkesztése fejlécekkel együtt" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "üzenet szerkesztése" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "melléklet szerkesztése a mailcap bejegyzés használatával" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "Válaszcím szerkesztése" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "levél tárgyának szerkesztése" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "Címzett lista (TO) szerkesztése" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "új postafiók létrehozása (csak IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "melléklet tartalom-típusának szerkesztése" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "ideiglenes másolat készítése a mellékletrõl" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "levél ellenõrzése ispell-el" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "új melléklet összeállítása a mailcap bejegyzéssel segítségével" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "ezen melléklet újrakódolása" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "üzenet elmentése késõbbi küldéshez" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "csatolt fájl átnevezése/mozgatása" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "üzenet elküldése" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "váltás beágyazás/csatolás között" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "fájl törlése/meghagyása küldés után" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "melléklet kódolási információinak frissítése" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "üzenet írása postafiókba" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "üzenet másolása fájlba/postafiókba" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "álnév létrehozása a feladóhoz" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "lapozás a képernyõ aljára" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "lapozás a képernyõ közepére" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "lapozás a képernyõ tetejére" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "visszafejtett (sima szöveges) másolat készítése" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "visszafejtett (sima szöveges) másolat készítése és törlés" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "aktuális bejegyzés törlése" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "aktuális postafiók törlése (csak IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "témarész összes üzenetének törlése" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "téma összes üzenetének törlése" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "a feladó teljes címének mutatása" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "üzenet megjelenítése és a teljes fejléc ki/bekapcsolása" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "üzenet megjelenítése" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "nyers üzenet szerkesztése" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "a kurzor elõtti karakter törlése" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "kurzor mozgatása egy karakterrel balra" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "kurzor mozgatása a szó elejére" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ugrás a sor elejére" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "bejövõ postafiókok körbejárása" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "teljes fájlnév vagy álnév" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "teljes cím lekérdezéssel" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "kurzoron álló karakter törlése" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ugrás a sor végére" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "kurzor mozgatása egy karakterrel jobbra" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "kurzor mozgatása a szó végére" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "lapozás lefelé az elõzményekben" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "lapozás felfelé az elõzményekben" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "karakterek törlése a sor végéig" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "karakterek törlése a szó végéig" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "karakter törlése a sorban" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "a kurzor elõtti szó törlése" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "a következõ kulcs idézése" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "az elõzõ és az aktuális karakter cseréje" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "szó nagy kezdõbetûssé alakítása" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "szó kisbetûssé alakítása" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "szó nagybetûssé alakítása" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "adj meg egy muttrc parancsot" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "adj meg egy fájlmaszkot" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "kilépés ebbõl a menübõl" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "melléklet szûrése egy shell parancson keresztül" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ugrás az elsõ bejegyzésre" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "üzenet 'fontos' jelzõjének állítása" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "üzenet továbbítása kommentekkel" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "aktuális bejegyzés kijelölése" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "válasz az összes címzettnek" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "fél oldal lapozás lefelé" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "fél oldal lapozás felfelé" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "ez a képernyõ" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ugrás sorszámra" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ugrás az utolsó bejegyzésre" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "válasz a megadott levelezõlistára" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "makró végrehajtása" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "új levél szerkesztése" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "más postafiók megnyitása" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "más postafiók megnyitása csak olvasásra" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "levél-állapotjelzõ törlése" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "mintára illeszkedõ levelek törlése" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "kényszerített levélletöltés az IMAP kiszolgálóról" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "levelek törlése POP kiszolgálóról" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ugrás az elsõ levélre" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ugrás az utolsó levélre" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "csak a mintára illeszkedõ levelek mutatása" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ugrás a következõ új levélre" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "ugrás a következõ új vagy olvasatlan levélre" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ugrás a következõ témarészre" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ugrás a következõ témára" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ugrás a következõ visszaállított levélre" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ugrás a következõ olvasatlan levélre" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "ugrás a levél elõzményére ebben a témában" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ugrás az elõzõ témára" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ugrás az elõzõ témarészre" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ugrás az elõzõ visszaállított levélre" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ugrás az elõzõ új levélre" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "ugrás az elõzõ új vagy olvasatlan levélre" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ugrás az elõzõ olvasatlan levélre" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "téma jelölése olvasottnak" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "témarész jelölése olvasottnak" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "levél-állapotjelzõ beállítása" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "mentés postafiókba" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "levelek kijelölése mintára illesztéssel" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "levelek visszaállítása mintára illesztéssel" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "kijelölés megszüntetése mintára illesztéssel" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "mozgatás az oldal közepére" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "mozgatás a következõ bejegyzésre" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "mozgás egy sorral lejjebb" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ugrás a következõ oldalra" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ugrás az üzenet aljára" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "idézett szöveg mutatása/elrejtése" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "idézett szöveg átlépése" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "ugrás az üzenet tetejére" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "üzenet/melléklet átadása csövön shell parancsnak" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ugrás az elõzõ bejegyzésre" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "mozgás egy sorral feljebb" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ugrás az elõzõ oldalra" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "bejegyzés nyomtatása" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "címek lekérdezése külsõ program segítségével" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "új lekérdezés eredményének hozzáfûzése az eddigiekhez" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "változások mentése és kilépés" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "elhalasztott levél újrahívása" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "képernyõ törlése és újrarajzolása" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "(belsõ)" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "válasz a levélre" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "levél sablonként használata egy új levélhez" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "levél/melléklet mentése fájlba" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "reguláris kifejezés keresése" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "reguláris kifejezés keresése visszafelé" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "keresés tovább" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "keresés visszafelé" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "keresett minta színezése ki/be" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "parancs végrehajtása rész-shellben" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "üzenetek rendezése" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "üzenetek rendezése fordított sorrendben" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "bejegyzés megjelölése" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "csoportos mûvelet végrehajtás a kijelölt üzenetekre" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "csoportos mûvelet végrehajtás a kijelölt üzenetekre" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "témarész megjelölése" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "téma megjelölése" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "levél 'új' jelzõjének állítása" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "a postafiók újraírásának ki/bekapcsolása" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "váltás a csak postafiókok/összes fájl böngészése között" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ugrás az oldal tetejére" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "aktuális bejegyzés visszaállítása" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "a téma összes levelének visszaállítása" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "a témarész összes levelének visszaállítása" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "a Mutt verziójának és dátumának megjelenítése" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "melléklet mutatása mailcap bejegyzés használatával, ha szükséges" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "MIME mellékletek mutatása" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "billentyûleütés kódjának mutatása" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "aktuális szûrõminta mutatása" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "téma kinyitása/bezárása" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "összes téma kinyitása/bezárása" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "PGP nyilvános kulcs csatolása" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "PGP paraméterek mutatása" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "PGP nyilvános kulcs elküldése" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "PGP nyilvános kulcs ellenõrzése" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "a kulcstulajdonos azonosítójának megtekintése" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "klasszikus php keresése" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Összeállított lánc elfogadása" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Újraküldõ hozzáfûzése a lánchoz" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Újraküldõ beszúrása a láncba" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Újraküldõ törlése a láncból" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "A lánc elõzõ elemének kijelölése" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "A lánc következõ elemének kijelölése" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "üzenet küldése egy mixmaster újraküldõ láncon keresztül" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "visszafejtett másolat készítése és törlés" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "visszafejtett másolat készítése" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "jelszó törlése a memóriából" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "támogatott nyilvános kulcsok kibontása" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "S/MIME opciók mutatása" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Elfogyott a memória!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"A fejlesztõkkel a <mutt-dev@mutt.org> címen veheted fel a kapcsolatot.\n" +"Hiba jelentéséhez kérlek használd a flea(1) programot.\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins és sokan mások.\n" +"A Mutt-ra SEMMIFÉLE GARANCIA NINCS; a részletekért írd be: `mutt -vv'.\n" +"A Mutt szabad szoftver, és terjesztheted az alábbi feltételek\n" +"szerint; írd be a `mutt -vv'-t a részletekért.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Sokan mások (akik itt nincsenek felsorolva) programrészekkel,\n" +"javításokkal, ötlettekkel járultak hozzá a Mutt-hoz.\n" +"\n" +" Ez a program szabad szoftver; terjesztheted és/vagy módosíthatod\n" +" a Szabad Szoftver Alapítvány által kiadott GNU General Public License\n" +" (a license második, vagy annál késõbbi verziójának) feltételei szerint.\n" +"\n" +" Ezt a programot abban a szellemben terjesztjük, hogy hasznos,\n" +" de NINCS SEMMIFÉLE GARANCIA; nincs burkolt garancia a FORGALOMKÉPESSÉG\n" +" vagy a HELYESSÉG SZAVATOSSÁGÁRA EGY SAJÁTSÁGOS HASZNÁLATKOR.\n" +" Olvasd el a GNU General Public License-t a további információkért.\n" +"\n" +" Ezzel a programmal meg kellett kapnod a GNU General Public License\n" +" másolatát; ha nem, írj a Szabad Szoftver Alapítványnak: Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"használat:\n" +" mutt [ -nRyzZ ] [ -e <par.> ] [ -F <fájl> ] [ -m <típus> ] [ -f " +"<fájl> ]\n" +" mutt [ -nR ] [ -e <par.> ] [ -F <fájl> ] -Q <kérd.> [ -Q <kérd.> ] " +"[...]\n" +" mutt [ -nR ] [ -e <par.> ] [ -F <fájl> ] -A <álnév> [ -A <álnév> ] " +"[...]\n" +" mutt [ -nx ] [ -e <par.> ] [ -a <fájl> ] [ -F <fájl> ] [ -H <fájl> ]\n" +"\t[ -i <fájl> ] [ -s <tárgy> ] [ -b <címek> ] [ -c <címek> ] <címek>\n" +"\t[ ... ]\n" +" mutt [ -n ] [ -e <par.> ] [ -F <fájl> ] -p\n" +" mutt -v[v]\n" +"\n" +"paraméterek:\n" +" -A <álnév>\trövid név kifejtése\n" +" -a <fájl>\tfájl csatolása a levélhez\n" +" -b <cím>\trejtett másolatot (BCC) küld a megadott címre\n" +" -c <cím>\tmásolatot (CC) küld a megadott címre\n" +" -e <parancs>\tmegadott parancs végrehajtása inicializálás után\n" +" -f <fájl>\tbetöltendõ levelesláda megadása\n" +" -F <fájl>\talternatív muttrc fájl használata\n" +" -H <fájl>\tvázlat (draft) fájl megadása, amibõl a fejlécet és\n" +"\t\ta törzset kell beolvasni\n" +" -i <fájl>\tválasz esetén a Mutt beleteszi ezt a fájlt a válaszba\n" +" -m <típus>\taz alapértelmezett postafiók típusának megadása\n" +" -n\t\ta Mutt nem fogja beolvasni a rendszerre vonatkozó Muttrc-t\n" +" -p\t\telhalasztott levél visszahívása\n" +" -Q <változó>\tkonfigurációs beállítása lekérdezése\n" +" -R\t\tpostafiók megnyitása csak olvasható módban\n" +" -s <tárgy>\ttárgy megadása (idézõjelek közé kell tenni, ha van benne " +"szóköz)\n" +" -v\t\tverziószám és fordítási opciók mutatása\n" +" -x\t\tmailx küldés szimulálása\n" +" -y\t\tpostafiók megadása a `mailboxes' listából\n" +" -z\t\tkilép rögtön, ha nincs új levél a postafiókban\n" +" -Z\t\tmegnyitja az elsõ olyan postafiókot, amiben új levél van (ha nincs, " +"kilép)\n" +" -h\t\tkiírja ezt az üzenetet" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Fordítási opciók:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Hiba a terminál inicializálásakor." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Hibakövetés szintje: %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "" +"A HIBAKÖVETÉS nem volt engedélyezve fordításkor. Figyelmen kívül hagyva.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s nem létezik. Létrehozzam?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Nem tudom létrehozni %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nincs címzett megadva.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: nem tudom csatolni a fájlt.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Nincs új levél egyik postafiókban sem." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Nincs bejövõ postafiók megadva." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "A postafiók üres." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "%s olvasása... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "A postafiók megsérült!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "A postafiók megsérült!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Végzetes hiba! A postafiókot nem lehet újra megnyitni!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Nem tudom zárolni a postafiókot!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox megváltozott, de nincs módosított levél! (jelentsd ezt a hibát)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Levelek írása... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Változások mentése..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Írás nem sikerült! Részleges postafiókot elmentettem a(z) %s fájlba" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Nem lehetett újra megnyitni a postafiókot!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Postafiók újra megnyitása..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Ugrás: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Érvénytelen indexszám." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Nincsenek bejegyzések." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Nem lehet tovább lefelé scrollozni." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Nem lehet tovább felfelé scrollozni." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Ez az utolsó oldal." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Ez az elsõ oldal." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Az elsõ bejegyzés látható." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Az utolsó bejegyzés látható." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Az utolsó bejegyzésen vagy." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Az elsõ bejegyzésen vagy." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Keresés: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Keresés visszafelé: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Nincs keresési minta." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Nem található." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Nincsenek kijelölt bejegyzések." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "A keresés nincs megírva ehhez a menühöz." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Az ugrás funkció nincs megírva ehhez a menühöz." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Kijelölés nem támogatott." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "%s olvasása... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message (): a fájlidõ beállítása nem sikerült" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "A fájl egy könyvtár, elmentsem ebbe a könyvtárba?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "A fájl egy könyvtár, elmentsem ebbe a könyvtárba?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Könyvtárbeli fájlok: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "A fájl létezik, (f)elülírjam, (h)ozzáfûzzem, vagy (m)égsem?" + +#: muttlib.c:869 +msgid "oac" +msgstr "fhm" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Levelet nem lehet menteni POP postafiókba." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "A %s nem postafiók!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Levelek hozzáfûzése %s postafiókhoz?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "%s kapcsolat lezárva" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL nem elérhetõ." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "A \"preconnect\" parancs nem sikerült." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Hiba a %s kapcsolat közben (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Hibás IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "%s feloldása..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "A \"%s\" host nem található." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Kapcsolódás %s-hez..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "%s-hoz nem lehet kapcsolódni %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Nem találtam elég entrópiát ezen a rendszeren" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Entrópiát szerzek a véletlenszámgenerátorhoz: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s jogai nem biztonságosak!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "Entrópia hiány miatt az SSL letiltva" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O hiba" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ismeretlen protokoll hiba" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL sikertelen: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "A szervertõl nem lehet tanusítványt kapni" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL kapcsolódás a(z) %s használatával (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Ismeretlen" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[nem kiszámítható]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[érvénytelen dátum]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "A szerver tanúsítványa még nem érvényes" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "A szerver tanúsítványa lejárt" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Akire a tanusítvány vonatkozik:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "A tanusítványt kiállította:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Ez a tanúsítvány érvényes" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " kezdete: %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " vége: %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Ujjlenyomat: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL Tanúsítvány ellenõrzés" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(v)isszautasít, (e)gyszer elfogad, (m)indig elfogad" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "vem" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(v)isszautasít, (e)gyszer elfogad" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ve" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Kilép " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Figyelmeztetés: A tanúsítvány nem menthetõ" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "A tanúsítvány elmentve" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "A lock számláló túlhaladt, eltávolítsam a(z) %s lockfájlt?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Nem lehet dotlock-olni: %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Lejárt a maximális várakozási idõ az fcntl lock-ra!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Várakozás az fcntl lock-ra... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Lejárt a maximális várakozási idõ az flock lock-ra!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Várakozás az flock-ra... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Nem lehet lockolni %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "%s olvasása..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "%s írása..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "A %s postafiókot nem tudtam szinkronizálni!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Az olvasott leveleket mozgassam a %s postafiókba?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Töröljem a %d töröltnek jelölt levelet?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Töröljem a %d töröltnek jelölt levelet?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Olvasott levelek mozgatása a %s postafiókba..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Postafiók változatlan." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d megtartva, %d átmozgatva, %d törölve." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d megtartva, %d törölve." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Nyomd meg a '%s' gombot az írás ki/bekapcsolásához" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Használd a 'toggle-write'-ot az írás újra engedélyezéséhez!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "A postafiókot megjelöltem nem írhatónak. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "A postafiók ellenõrizve." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Nem lehet írni a levelet" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Nem elérhetõ ebben a menüben." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "ElõzõO" + +#: pager.c:1447 +msgid "NextPg" +msgstr "KövO" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Melléklet" + +#: pager.c:1454 +msgid "Next" +msgstr "Köv." + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Ez az üzenet vége." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Ez az üzenet eleje." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Keresés visszafelé: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Keresés: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "A súgó már meg van jelenítve." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Nincs több idézett szöveg." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Nincs nem idézett szöveg az idézett szöveg után." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "a többrészes üzenetnek nincs határoló paramétere!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Hiba a kifejezésben: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Érvénytelen a hónap napja: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Érvénytelen hónap: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Érvénytelen viszonylagos hónap: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "hiba a kifejezésben" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "hiba a mintában: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: érvénytelen parancs" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: nincs támogatva ebben a módban" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "hiányzó paraméter" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "nem megegyezõ zárójelek: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "üres minta" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "hiba: ismeretlen operandus %d (jelentsd ezt a hibát)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Keresési minta fordítása..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Parancs végrehajtása az egyezõ leveleken..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Nincs a kritériumnak megfelelõ levél." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "A keresõ elérte a végét, és nem talált egyezést" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "A keresõ elérte az elejét, és nem talált egyezést" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Keresés megszakítva." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP jelszó elfelejtve." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Hiba: nem lehet létrehozni a PGP alfolyamatot! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP kimenet vége --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP LEVÉL KEZDÕDIK --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP NYILVÁNOS KULCS KEZDÕDIK --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ALÁÍRT LEVÉL KEZDÕDIK --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- PGP LEVÉL VÉGE --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP NYILVÁNOS KULCS VÉGE --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- PGP ALÁÍRT LEVÉL VÉGE --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Hiba: nem található a PGP levél kezdete! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Belsõ hiba. Kérlek értesítsd <roessler@does-not-exist.org>-t." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Hiba: nem lehet a PGP alfolyamatot létrehozni! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Hiba: hibás PGP/MIME levél! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Hiba: nem lehet létrehozni az ideiglenes fájlt! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- A következõ adat PGP/MIME-vel titkosított --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- PGP/MIME titkosított adat vége --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "PGP alfolyamatot nem lehet megnyitni" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Használjam a kulcsID = \"%s\" ehhez: %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Add meg a kulcsID-t %s-hoz: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP-t nem tudom meghívni" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "PGP kulcs leszedése..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Minden illeszkedõ kulcs lejárt/letiltott/visszavont." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Választ " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Kulcs ellenõrzése " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP kulcsok egyeznek <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP kulcsok egyeznek \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Nem lehet a /dev/null-t megnyitni" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Nem lehet ideiglenes fájlt létrehozni" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Kulcs ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Ez a kulcs nem használható: lejárt/letiltott/visszahívott." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID lejárt/letiltott/visszavont." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ID-nek nincs meghatározva az érvényessége." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Az ID nem érvényes." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Az ID csak részlegesen érvényes." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Valóban szeretnéd használni ezt a kulcsot?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Kérlek írd be a kulcs ID-t: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "pgp hívása..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP Kulcs %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Egyezõ \"%s\" kulcsok keresése..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "A TOP parancsot nem támogatja a szerver." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Nem lehet írni az ideiglenes fájlba!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Az UIDL parancsot nem támogatja a szerver." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s érvénytelen POP útvonal" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Üzenetek listájának letöltése..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Nem lehet a levelet beleírni az ideiglenes fájlba!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Új levelek letöltése..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP szerver nincs megadva." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Nincs új levél a POP postafiókban." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Levelek törlése a szerverrõl?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Új levelek olvasása (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Hiba a postafiók írásakor!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d/%d levél beolvasva]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "A szerver lezárta a kapcsolatot!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Azonosítás (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Azonosítás (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP azonosítás sikertelen." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "A USER parancsot nem ismeri ez a kiszolgáló." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Nem lehet a leveleket a szerveren hagyni." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Hiba a szerverre való csatlakozás közben: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "POP kapcsolat lezárása..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Levelek tartalomjegyzékének ellenõrzése..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "A kapcsolatot elveszett. Újracsatlakozik a POP kiszolgálóhoz?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Elhalasztott levelek" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Nincsenek elhalasztott levelek." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Érvénytelen PGP fejléc" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Érvénytelen S/MIME fejléc" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Visszafejtés sikertelen." + +#: query.c:46 +msgid "New Query" +msgstr "Új lekérdezés" + +#: query.c:47 +msgid "Make Alias" +msgstr "Álnév" + +#: query.c:48 +msgid "Search" +msgstr "Keresés" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Várakozás a válaszra..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "A lekérdezés parancs nincs megadva." + +#: query.c:286 +msgid "Query" +msgstr "Lekérdezés" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Lekérdezés: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "'%s' lekérdezése" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Átküld" + +#: recvattach.c:53 +msgid "Print" +msgstr "Nyomtat" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Mentés..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "A melléklet elmentve." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "FIGYELMEZTETÉS! %s-t felülírására készülsz, folytatod?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Melléklet szûrve." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Szûrõn keresztül: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Átküld: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Nem tudom hogyan kell nyomtatni a(z) %s csatolást!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Kinyomtassam a kijelölt melléklet(ek)et?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Kinyomtassam a mellékletet?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Nem tudtam visszafejteni a titkosított üzenetet!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Mellékletek" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Nincsenek mutatható részek!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "POP kiszolgálón nem lehet mellékletet törölni." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Mellékletek törlése kódolt üzenetbõl nem támogatott." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Többrészes csatolásoknál csak a törlés támogatott." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Csak levél/rfc222 részeket lehet visszaküldeni." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Hiba a levél újraküldésekor." + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Hiba a levelek újraküldésekor." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Nem tudtam megnyitni a(z) %s ideiglenes fájlt." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Továbbítás mellékletként?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Nem lehet kibontani minden kijelölt mellékletet. A többit MIME kódolva " +"küldöd?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Továbbküldés MIME kódolással?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Nem tudtam létrehozni: %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Nem található egyetlen kijelölt levél sem." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Nincs levelezõlista!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Nem tudom az összes kijelölt mellékletet visszaalakítani. A többit MIME-" +"kódolod?" + +#: remailer.c:480 +msgid "Append" +msgstr "Hozzáfûzés" + +#: remailer.c:481 +msgid "Insert" +msgstr "Beszúrás" + +#: remailer.c:482 +msgid "Delete" +msgstr "Törlés" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Nem lehet beolvasni a mixmaster type2.list-jét!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Válaszd ki az újraküldõ láncot." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Hiba: %s-t nem lehet használni a lánc utolsó újraküldõjeként." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "A Mixmaster lánc maximálisan %d elembõl állhat." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Az újraküldõ lánc már üres." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Már ki van választva a lánc elsõ eleme." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Már ki van választva a lánc utolsó eleme." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "A Mixmaster nem fogadja el a Cc vagy a Bcc fejléceket." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Kérlek állítsd be a hostname változót a megfelelõ értékre, ha mixmastert " +"használsz!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Hiba a levél elküldésekor, a gyermek folyamat kilépett: %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Hiba a levél elküldésekor." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "" +"Nem megfelelõen formázott bejegyzés a(z) %s típushoz a(z) \"%s\" fájl %d. " +"sorában" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Nincs mailcap útvonal megadva" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "mailcap bejegyzés a(z) %s típushoz nem található" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: túl kevés paraméter" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: túl sok paraméter" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Nincs tárgy megadva, megszakítod?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Nincs tárgy megadva, megszakítom." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Válasz a %s%s címre?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Válasz a %s%s címre?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Nincs látható, kijeölt levél!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Levél beillesztése a válaszba?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Idézett levél beillesztése..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Nem tudtam az összes kért levelet beilleszteni!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Továbbítás mellékletként?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Továbbított levél elõkészítése..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Elhalasztott levél újrahívása?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Továbbított levél szerkesztése?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Megszakítod a nem módosított levelet?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Nem módosított levelet megszakítottam." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "A levél nem lett elküldve." + +#: send.c:1430 +msgid "Message postponed." +msgstr "A levél el lett halasztva." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Nincs címzett megadva!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Nem volt címzett megadva." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Nincs tárgy, megszakítsam a küldést?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Nincs tárgy megadva." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Levél elküldése..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Nem tudtam a levelet elküldeni." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Levél elküldve." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Küldés a háttérben." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Nem található határoló paraméter! [jelentsd ezt a hibát]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s többé nem létezik!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s nem egy hagyományos fájl." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "%s nem nyitható meg" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Hiba a levél elküldése közben, a gyermek folyamat kilépett: %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "A kézbesítõ folyamat kimenete" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Hibás IDN %s a resent-from mezõ elõkészítésekor" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Kilépés.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "%s-t kaptam... Kilépek.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "%d jelzést kaptam... Kilépek.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Megbízható " + +#: smime.c:303 +msgid "Verified " +msgstr "Ellenõrzött " + +#: smime.c:306 +msgid "Unverified" +msgstr "Ellenõrizetlen" + +#: smime.c:309 +msgid "Expired " +msgstr "Lejárt " + +#: smime.c:312 +msgid "Revoked " +msgstr "Visszavont " + +#: smime.c:315 +msgid "Invalid " +msgstr "Érvénytelen " + +#: smime.c:318 +msgid "Unknown " +msgstr "Ismeretlen " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Add meg a kulcsID-t: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME kulcsok egyeznek \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s ellenõrizetlen. Szeretnéd használni a következõhöz: %s ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "ID %s (ellenõrizetlen!) használata ehhez: %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "ID %s használata ehhez: %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Figyelem: nem döntötted el, hogy megbízható-e az alábbi ID: %s. (billentyû)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Nem található (érvényes) tanúsítvány ehhez: %s" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Hiba: nem lehet létrehozni az OpenSSL alfolyamatot!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "nincs tanúsítványfájl" + +#: smime.c:1200 +msgid "no mbox" +msgstr "nincs postafiók" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Nincs kimenet az OpenSSLtõl..." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Figyelmeztetés: köztes tanúsítvány nem található." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "OpenSSL alfolyamatot nem lehet megnyitni!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Nincs kimenet az OpenSSLtõl..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- OpenSSL kimenet vége --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Hiba: nem lehet létrehozni az OpenSSL alfolyamatot! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- A következõ adat S/MIME-vel titkosított --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- A következõ adatok S/MIME-vel alá vannak írva --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- S/MIME titkosított adat vége. --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- S/MIME aláírt adat vége --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Postafiók rendezése..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Nincs meg a rendezõ függvény! [kérlek jelentsd ezt a hibát]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(nincs postafiók)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "A nyitóüzenet nem látható a szûkített nézetben." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "A nyitóüzenet nem áll rendelkezésre." diff --git a/po/id.gmo b/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..05ca556cedabadb1ee994ac61cb7bc1ec1bbf2a9 GIT binary patch literal 80281 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 literal 0 HcmV?d00001 diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..7ffe28e --- /dev/null +++ b/po/id.po @@ -0,0 +1,4316 @@ +# Ronny Haryanto <ronny-mutt-po-file@haryan.to>, 1999-2003 +# +# http://www.linux.or.id +# +msgid "" +msgstr "" +"Project-Id-Version: 1.5.5.1i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-11 10:30+0700\n" +"Last-Translator: Ronny Haryanto <ronny-mutt-po-file@haryan.to>\n" +"Language-Team: Indonesia <web@linux.or.id>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 7bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nama user di %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Password utk %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Keluar" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Hapus" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Nggak jadi hapus" + +#: addrbook.c:36 +msgid "Select" +msgstr "Pilih" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Bantuan" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Anda tidak punya kumpulan alias!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Kumpulan alias" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Alias sebagai: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Anda telah punya alias dengan nama tersebut!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Peringatan: Nama alias ini mungkin tidak akan bekerja. Betulkan?" + +#: alias.c:279 +msgid "Address: " +msgstr "Alamat: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Error: IDN '%s' tidak benar." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nama lengkap: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Sudah betul?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Simpan ke file: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Alias telah ditambahkan." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Tidak cocok dengan nametemplate, lanjutkan?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "'compose' di file mailcap membutuhkan %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Gagal menjalankan \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Gagal membuka file untuk menge-parse headers." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Gagal membuka file untuk menghapus headers." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"'compose' di file mailcap tidak ditemukan untuk %s, membuat file kosong." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "'Edit' di file mailcap membutuhkan %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "'Edit' di file mailcap tidak ditemukan untuk %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Tidak ada jenis yang cocok di file mailcap. Ditampilkan sebagai teks." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Jenis MIME tidak didefinisikan. Tidak bisa melihat lampiran." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Tidak bisa membuat filter" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Tidak bisa membuat filter" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Gagal menulis!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Saya tidak tahu bagaimana mencetak itu!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Pindah dir" + +#: browser.c:42 +msgid "Mask" +msgstr "Mask" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s bukan direktori." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Kotak surat [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Berlangganan [%s], File mask: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Direktori [%s], File mask: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Tidak bisa melampirkan sebuah direktori" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Tidak ada file yang sesuai dengan mask" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Pembuatan hanya didukung untuk kotak surat jenis IMAP." + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Penghapusan hanya didukung untuk kotak surat jenis IMAP." + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Yakin hapus kotak surat \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Kotak surat telah dihapus." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Kotak surat tidak dihapus." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Pindah dir ke: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Gagal membaca direktori." + +#: browser.c:975 +msgid "File Mask: " +msgstr "File Mask: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Urut terbalik berdasarkan (t)anggal, (a)bjad, (u)kuran atau (n)ggak diurut? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Urut berdasarkan (t)anggal, (a)bjad, (u)kuran atau (n)ggak diurut? " + +#: browser.c:1049 +msgid "dazn" +msgstr "taun" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nama file baru: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Tidak bisa menampilkan sebuah direktori" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Gagal menampilkan file" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Surat baru di " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: warna tidak didukung oleh term" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: tidak ada warna begitu" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: tidak ada objek begitu" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: perintah hanya untuk objek indeks" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: parameternya kurang" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Parameter tidak ditemukan" + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: parameternya kurang" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: parameternya kurang" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: tidak ada atribut begitu" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "parameternya kurang" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "parameternya terlalu banyak" + +#: color.c:721 +msgid "default colors not supported" +msgstr "warna default tidak didukung" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Periksa tandatangan PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Tidak bisa membuat file sementara!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Tidak bisa membuat tampilan filter" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Tidak bisa menyalin surat" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "Tanda tangan S/MIME berhasil diverifikasi." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Pemilik sertifikat S/MIME tidak sesuai dg pengirim." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "Tanda tangan S/MIME TIDAK berhasil diverifikasi." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Tanda tangan PGP berhasil diverifikasi." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "Tanda tangan PGP TIDAK berhasil diverifikasi." + +#: commands.c:223 +msgid "Command: " +msgstr "Perintah: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Bounce surat ke: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Bounce surat yang telah ditandai ke: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Gagal menguraikan alamat!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "IDN salah: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Bounce surat ke %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Bounce surat-surat ke %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Surat tidak dibounce." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Surat-surat tidak dibounce." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Surat telah dibounce." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Surat-surat telah dibounce." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Tidak bisa membuat proses filter" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Pipe ke perintah: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Perintah untuk mencetak belum didefinisikan." + +#: commands.c:483 +msgid "Print message?" +msgstr "Cetak surat?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Cetak surat-surat yang ditandai?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Surat telah dicetak" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Surat-surat telah dicetak" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Surat tidak dapat dicetak" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Surat-surat tidak dapat dicetak" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Urut terbalik tan(g)gal/d(a)ri/t(e)rima/(s)ubj/(k)e/(t)hread/(n)ggak urut/(u)" +"kuran/n(i)lai? " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Urut tan(g)gal/d(a)ri/t(e)rima/(s)ubj/(k)e/(t)hread/(n)ggak urut/(u)kuran/n" +"(i)lai? " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "gaesktnui" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Perintah shell: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Urai-simpan%s ke kotak surat" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Urai-salin%s ke kotak surat" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Dekripsi-simpan%s ke kotak surat" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Dekripsi-salin%s ke kotak surat" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Simpan%s ke kotak surat" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Salin%s ke kotak surat" + +#: commands.c:706 +msgid " tagged" +msgstr " telah ditandai" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Sedang menyalin ke %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Ubah ke %s saat mengirim?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type diubah ke %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Character set diubah ke %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "tidak melakukan konversi" + +#: commands.c:914 +msgid "converting" +msgstr "melakukan konversi" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Tidak ada lampiran." + +#: compose.c:84 +msgid "Send" +msgstr "Kirim" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Batal" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Lampirkan file" + +#: compose.c:90 +msgid "Descrip" +msgstr "Ket" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Tandatangan, Enkrip" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Enkrip" + +#: compose.c:131 +msgid "Sign" +msgstr "Tandatangan" + +#: compose.c:133 +msgid "Clear" +msgstr "Polos" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " tandatangan sebagai: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<default>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Enkrip dengan: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (e)nkrip, (t)andatangan, tandatangan (s)bg, ke(d)uanya, (b)atal? " + +#: compose.c:166 +msgid "esabf" +msgstr "etsdb" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Tandatangani sebagai: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (e)nkrip, (t)andatangan, enkrip d(g), tandatangan (s)bg, ke(d)uanya, " +"(b)atal? " + +#: compose.c:228 +msgid "eswabf" +msgstr "etgsdb" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, atau (b)atal? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345b" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] sudah tidak ada!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] telah diubah. Update encoding?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Lampiran" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Peringatan: IDN '%s' tidak benar." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Tidak bisa menghapus satu-satunya lampiran." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "IDN di \"%s\" tidak benar: '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Melampirkan file-file yang dipilih..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Tidak bisa melampirkan %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Buka kotak surat untuk mengambil lampiran" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Tidak ada surat di kotak tersebut." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Tandai surat-surat yang mau dilampirkan!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Tidak bisa dilampirkan!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Peng-coding-an ulang hanya berpengaruh terhadap lampiran teks." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Lampiran yg dipilih tidak akan dikonersi." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Lampiran yg dipilih akan dikonversi." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Encoding tidak betul." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Simpan salinan dari surat ini?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Ganti nama ke: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Tidak bisa stat %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "File baru: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type harus dalam format jenis-dasar/sub-jenis" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Content-Type %s tak dikenali" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Tidak bisa membuat file %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Gagal membuat lampiran, nih..." + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Tunda surat ini?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Simpan surat ke kotak surat" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Menyimpan surat ke %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Surat telah disimpan." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME sudah dipilih. Bersihkan & lanjut ? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP sudah dipilih. Bersihkan & lanjut ? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (waktu skrg: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Keluaran dari %s%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Passphrase sudah dilupakan." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Masukkan passphrase PGP: " + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Masukkan passphrase S/MIME: " + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Buat surat PGP traditional (inline)?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Memanggil PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "Surat2 S/MIME tanpa hints pada isi tidak didukung." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Mencoba mengekstrak kunci2 PGP...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Mencoba mengekstrak sertifikat2 S/MIME...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Error: Struktur multipart/signed tidak konsisten! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Error: Protokol multipart/signed %s tidak dikenal! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Warning: Tidak dapat mem-verifikasi tandatangan %s/%s. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Data berikut ini ditandatangani --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Warning: Tidak dapat menemukan tandatangan. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Akhir data yang ditandatangani --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "ya" + +#: curs_lib.c:158 +msgid "no" +msgstr "nggak" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Keluar dari Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "eh..eh.. napa nih?" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Tekan sembarang tombol untuk lanjut..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' utk lihat daftar): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Tidak ada kotak surat yang terbuka." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Tidak ada surat." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Kotak surat hanya bisa dibaca." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Fungsi ini tidak diperbolehkan pada mode pelampiran-surat" + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Tidak ada surat yg bisa dilihat." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Kotak surat read-only, tidak bisa toggle write!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Perubahan ke folder akan dilakukan sewaktu keluar dari folder." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Perubahan ke folder tidak akan dilakukan." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Keluar" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Simpan" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Surat" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Balas" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grup" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"Kotak surat diobok-obok oleh program lain. Tanda-tanda surat mungkin tidak " +"tepat." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Surat baru di kotak ini." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Kotak surat diobok-obok oleh program lain." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Tidak ada surat yang ditandai." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Gak ngapa-ngapain." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Ke surat no: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Parameter harus berupa nomer surat." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Surat itu tidak bisa dilihat." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Tidak ada nomer begitu." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Hapus surat-surat yang: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Pola batas (limit pattern) tidak ditentukan." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr " Batas: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Hanya surat-surat yang: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Keluar dari Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Tandai surat-surat yang: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Tidak jadi hapus surat-surat yang: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Tidak jadi tandai surat-surat yang: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Buka kotak surat dengan mode read-only" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Buka kotak surat" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s bukan kotak surat." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Keluar dari Mutt tanpa menyimpan?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Anda sudah di surat yang terakhir." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Tidak ada surat yang tidak jadi dihapus." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Anda sudah di surat yang pertama." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Pencarian kembali ke atas." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Pencarian kembali ke bawah." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Tidak ada surat baru" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Tidak ada surat yang belum dibaca" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " di tampilan terbatas ini" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Tidak bisa mengubah tanda 'penting' di server POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Tidak ada thread lagi." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Anda di thread yang pertama." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Tidak disetting untuk melakukan threading." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Thread berisi surat yang belum dibaca." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Tidak bisa menyunting surat di server POP" + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tmasukkan baris yang dimulai dengan ~\n" +"~b users\ttambahkan users ke kolom Bcc:\n" +"~c users\ttambahkan users ke kolom Cc:\n" +"~f surat2\tsertakan surat2\n" +"~F surat2\tsama seperti ~f, tapi juga menyertakan headers\n" +"~h\t\tedit header surat\n" +"~m surat2\tmenyertakan dan mengutip surat2\n" +"~M surat2\tsama seperti ~m, tapi menyertakan headers\n" +"~p\t\tcetak surat\n" +"~q\t\ttulis surat dan keluar dari editor\n" +"~r file\t\tselipkan file ke editor\n" +"~t users\ttambahkan users ke kolom To:\n" +"~u\t\tpanggil baris sebelumnya\n" +"~v\t\tedit surat dengan editor $visual\n" +"~w file\t\tsimpan surat ke file\n" +"~x\t\tbatalkan perubahan dan keluar dari editor\n" +"~?\t\tsurat ini\n" +".\t\tdi satu baris sendiri menyelesaikan input\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: bukan nomer surat yang betul.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Akhiri surat dengan . di satu baris sendiri)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Tidak ada kotak surat.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Surat berisi:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(lanjut)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "nama file tidak ditemukan.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Tidak ada sebaris pun di dalam surat.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "IDN di %s tidak benar: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: perintah editor tidak dikenali (~? utk bantuan)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Tidak bisa membuat kotak surat sementara: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Tidak bisa membuat kotak surat sementara: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "tidak bisa memotong kotak surat sementara: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Surat kosong!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Surat tidak diubah!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Tidak bisa membuka file surat: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Tidak bisa menambah ke kotak surat: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Error. Menyimpan file sementara: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Tandai" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Batal ditandai" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Error: Tidak ada bagian Multipart/Alternative yg bisa ditampilkan! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Lampiran #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Jenis: %s/%s, Encoding: %s, Ukuran: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Tampil-otomatis dengan %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Menjalankan perintah tampil-otomatis: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Tidak bisa menjalankan %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Stderr dari tampil-otomatis %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Error: message/external-body tidak punya parameter access-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Lampiran %s/%s ini " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(ukuran %s bytes) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "telah dihapus --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- pada %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nama: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Lampiran %s/%s ini tidak disertakan, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- dan sumber eksternal yg disebutkan telah --]\n" +"[-- kadaluwarsa. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- dan tipe akses %s tsb tidak didukung --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Error: multipart/signed tidak punya protokol." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Error: multipart/encrypted tidak punya parameter protokol!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Tidak bisa membuka file sementara!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s tidak didukung " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(gunakan '%s' untuk melihat bagian ini)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(tombol untuk 'view-attachments' belum ditentukan!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: tidak bisa melampirkan file" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERROR: harap laporkan bug ini" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<GAK TAU>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Penentuan tombol generik:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Fungsi-fungsi yang belum ditentukan tombolnya:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Bantuan utk %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Tidak dapat melakukan unhook * dari hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: jenis tidak dikenali: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Tidak dapat menghapus %s dari %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Tidak ada pengauthentikasi yg bisa digunakan" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Mengauthentikasi (anonim)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Authentikasi anonim gagal." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Mengauthentikasi (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Authentikasi CRAM-MD5 gagal." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Mengauthentikasi (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Authentikasi GSSAPI gagal." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN tidak diaktifkan di server ini." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Sedang login..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Login gagal." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Mengauthentikasi (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Authentikasi SASL gagal." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s bukan path IMAP yang valid" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Mencari namespaces..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Mengambil daftar kotak surat..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Tidak ada folder itu" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Membuat kotak surat: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Kotak surat harus punya nama." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Kotak surat telah dibuat." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Kotak surat telah ditutup." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Fatal error. Jumlah surat tidak konsisten dengan server!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Menutup hubungan ke %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "IMAP server ini sudah kuno. Mutt tidak bisa menggunakannya." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Respons yg tdk diharapkan dari server: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Gunakan hubungan aman dg TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Tidak dapat negosiasi hubungan TLS" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Memilih %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Error sewaktu membuka kotak surat" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Tidak dapat menambah ke kotak surat IMAP di server ini" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Buat %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Menutup hubungan ke server IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Menandai %d surat-surat \"dihapus\"..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Penghapusan gagal" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Menyimpan tanda-tanda status surat... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Menghapus surat-surat di server..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE (hapus) gagal" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE (penutupan) gagal." + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Nama kotak surat yg buruk" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Berlangganan ke %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Berhenti langganan dari %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Tidak dapat mengambil header dari IMAP server versi ini." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Tidak bisa membuat file sementara %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Mengambil header surat... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Mengambil surat..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Index dari surat tidak benar. Cobalah membuka kembali kotak surat tsb." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Meletakkan surat ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Menyalin %d surat ke %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Menyalin surat %d ke %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Lanjutkan?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: tidak ada alamat email" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Peringatan: IDN '%s' di alias '%s' tidak benar.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "kolom header tidak dikenali" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: metoda pengurutan tidak dikenali" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): error pada regexp: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: variable tidak diketahui" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefix tidak diperbolehkan dengan reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "nilai tidak diperbolehkan dengan reset" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s hidup" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s mati" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: jenis kotak surat tidak dikenali" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: nilai tidak betul" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: Jenis tidak dikenali." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: jenis tidak dikenali" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Tidak bisa stat %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s bukan file biasa." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Error di %s, baris %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: errors di %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: pembacaan dibatalkan sebab terlalu banyak error di %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: error pada %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: parameter terlalu banyak" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: perintah tidak dikenali" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Error di baris perintah: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "tidak bisa menentukan home direktori" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "tidak bisa menentukan username" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Loop macro terdeteksi." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Tombol itu tidak ditentukan untuk apa." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Tombol itu tidak ditentukan untuk apa. Tekan '%s' utk bantuan." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: parameter terlalu banyak" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: tidak ada menu begitu" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "urutan tombol kosong" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: parameter terlalu banyak" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: tidak ada fungsi begitu di map" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: urutan tombol kosong" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: parameter terlalu banyak" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: tidak ada parameter" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: tidak ada fungsi begitu" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Masukkan kunci-kunci (^G utk batal): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Kar = %s, Oktal = %o, Desimal = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "null operation" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "akhir eksekusi bersyarat (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "paksa menampilkan lampiran menggunakan mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "tampilkan lampiran sebagai teks" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Tampilkan atau tidak sub-bagian" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ke akhir halaman" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "kirim surat ke user lain" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "pilih file baru di direktori ini" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "tampilkan file" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "tampilkan nama file yang sedang dipilih" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "berlangganan ke kotak surat (untuk IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "berhenti langganan dari kotak surat (untuk IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "tampilkan semua kotak surat atau hanya yang langganan? (untuk IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "tampilkan daftar kotak surat dengan surat baru" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "pindah direktori" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "periksa kotak surat apakah ada surat baru" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "lampirkan file ke surat ini" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "lampirkan surat lain ke surat ini" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "edit daftar BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "edit daftar CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "edit keterangan lampiran" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "edit transfer-encoding dari lampiran" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "masukkan nama file di mana salinan surat ini mau disimpan" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "edit file yang akan dilampirkan" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "edit kolom From" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "edit surat berikut dengan headers" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "edit surat" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "edit lampiran berdasarkan mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "edit kolom Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "edit subjek dari surat ini" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "edit daftar TO" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "buat kotak surat baru (untuk IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "edit jenis isi (content-type) lampiran" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "ambil salinan sementara dari lampiran" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "jalankan ispell ke surat" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "buat lampiran berdasarkan mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "peng-coding-an ulang dari lampiran ini" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "simpan surat ini untuk dikirim nanti" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "ganti nama/pindahkan file lampiran" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "kirim suratnya" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "penampilan inline atau sebagai attachment" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "hapus atau tidak setelah suratnya dikirim" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "betulkan encoding info dari lampiran" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "simpan surat ke sebuah folder" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "simpan surat ke file/kotak surat" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "buat alias dari pengirim surat" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "pindahkan entry ke akhir layar" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "pindahkan entry ke tengah layar" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "pindahkan entry ke awal layar" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "buat salinan (text/plain) yang sudah di-decode" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "buat salinan (text/plain) yang sudah di-decode dan hapus" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "hapus entry" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "hapus kotak surat (untuk IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "hapus semua surat di subthread" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "hapus semua surat di thread" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "tampilkan alamat lengkap pengirim" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "tampilkan surat dan pilih penghapusan header" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "tampilkan surat" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "edit keseluruhan surat" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "hapus karakter di depan kursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "pindahkan kursor satu karakter ke kanan" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "ke awal kata" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ke awal baris" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "cycle antara kotak surat yang menerima surat" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "lengkapi nama file atau alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "lengkapi alamat dengan query" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "hapus karakter di bawah kursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ke akhir baris" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "pindahkan kursor satu karakter ke kanan" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "pindahkan kursor ke akhir kata" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "scroll daftar history ke bawah" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "scroll daftar history ke atas" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "hapus dari kursor sampai akhir baris" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "hapus dari kursor sampai akhir kata" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "hapus baris" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "hapus kata di depan kursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "kutip tombol yang akan ditekan berikut" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "tukar karakter di bawah kursor dg yg sebelumnya" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "ubah kata ke huruf kapital" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "ubah kata ke huruf kecil" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "ubah kata ke huruf besar" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "menjalankan perintah muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "menentukan file mask" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "keluar dari menu ini" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "mem-filter lampiran melalui perintah shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ke entry pertama" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "menandai surat penting atau tidak ('important' flag)" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "forward surat dengan komentar" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "pilih entry" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "balas ke semua penerima" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "geser ke bawah setengah layar" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "geser ke atas setengah layar" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "layar ini" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ke nomer indeks" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ke entry terakhir" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "balas ke mailing list yang disebut" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "menjalankan macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "menulis surat baru" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "membuka folder lain" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "membuka folder lain dengan mode read-only" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "bersihkan suatu tanda status pada surat" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "hapus surat yang cocok dengan suatu kriteria" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "paksa mengambil surat dari server IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "mengambil surat dari server POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ke surat pertama" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ke surat terakhir" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "hanya tunjukkan surat yang cocok dengan suatu kriteria" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ke surat berikutnya yang baru" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "ke surat berikutnya yang baru atau belum dibaca" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ke subthread berikutnya" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ke thread berikutnya" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ke surat berikutnya yang tidak dihapus" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ke surat berikutnya yang belum dibaca" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "loncat ke surat induk di thread ini" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ke thread sebelumnya" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ke subthread sebelumnya" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ke surat sebelumnya yang tidak dihapus" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ke surat sebelumnya yang baru" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "ke surat sebelumnya yang baru atau belum dibaca" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ke surat sebelumnya yang belum dibaca" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "tandai thread 'sudah dibaca'" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "tandai subthread 'sudah dibaca'" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "tandai status dari surat" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "simpan perubahan ke kotak surat" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "tandai surat-surat yang cocok dengan kriteria" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "tidak jadi menghapus surat-surat yang cocok dengan kriteria" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "tidak jadi menandai surat-surat yang cocok dengan kriteria" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ke tengah halaman" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ke entry berikutnya" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "geser ke bawah satu baris" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ke halaman berikutnya" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ke akhir surat" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "tampilkan atau tidak teks yang dikutip" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "lompati setelah teks yang dikutip" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "ke awal surat" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "pipe surat/lampiran ke perintah shell" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ke entry sebelumnya" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "geser ke atas satu baris" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ke halaman sebelumnya" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "cetak entry" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "gunakan program lain untuk mencari alamat" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "tambahkan hasil pencarian baru ke hasil yang sudah ada" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "simpan perubahan ke kotak surat dan keluar" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "lanjutkan surat yang ditunda" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "bersihkan layar dan redraw" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{jerohan}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "balas surat" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "gunakan surat sebagai template" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "simpan surat/lampiran ke suatu file" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "cari dengan regular expression" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "cari mundur dengan regular expression" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "cari yang cocok berikutnya" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "cari mundur yang cocok berikutnya" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "diwarnai atau tidak jika ketemu" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "jalankan perintah di subshell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "urutkan surat-surat" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "urutkan terbalik surat-surat" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "tandai entry" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "lakukan fungsi berikutnya ke surat-surat yang ditandai" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "lakukan fungsi berikutnya HANYA ke surat-surat yang ditandai" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "tandai subthread" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "tandai thread" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "tandai atau tidak sebuah surat 'baru'" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "apakah kotak surat akan ditulis ulang" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "apakah menjelajahi kotak-kotak surat saja atau semua file" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ke awal halaman" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "tidak jadi hapus entry" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "tidak jadi hapus semua surat di thread" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "tidak jadi hapus semua surat di subthread" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "tunjukkan versi dan tanggal dari Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "tampilkan lampiran berdasarkan mailcap jika perlu" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "tampilkan lampiran MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "tampilkan keycode untuk penekanan tombol" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "tampilkan kriteria batas yang aktif" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "collapse/uncollapse thread" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "collapse/uncollapse semua thread" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "lampirkan PGP public key" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "tunjukan opsi2 PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "kirim PGP public key lewat surat" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "periksa PGP public key" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "tampilkan user ID dari key" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "periksa pgp klasik" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Terima rangkaian yang dibentuk" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Tambahkan remailer ke rangkaian" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Sisipkan remailer ke rangkaian" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Hapus remailer dari rangkaian" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Pilih elemen sebelumnya dalam rangkaian" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Pilih elemen berikutnya dalam rangkaian" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "kirim surat melalui sebuah rangkaian remailer mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "buat salinan yang sudah di-decrypt dan hapus" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "buat salinan yang sudah di-decrypt" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "hapus passphrase dari memory" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "ekstrak kunci2 publik yg didukung" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "tunjukan opsi2 S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "Integer overflow -- tidak bisa mengalokasikan memori!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Buset, memory abis!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Untuk menghubungi developersnya, kirim email ke <mutt-dev@mutt.org>.\n" +"Untuk melaporkan bug, mohon gunakan program flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins dan kawan-kawan.\n" +"Mutt TIDAK menyertakan jaminan dalam bentuk apapun; baca 'mutt -vv'.\n" +"Mutt adalah software bebas, anda diperbolehkan utk menyebarluaskannya\n" +"dengan beberapa persyaratan; baca 'mutt -vv' utk jelasnya.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Hak Cipta (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n" +"Hak Cipta (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Hak Cipta (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n" +"Hak Cipta (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Hak Cipta (C) 1999-2002 Brendan Cully <brendan@kublai.com>\n" +"Hak Cipta (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Dan banyak lagi yang tidak dapat disebutkan di sini satu per satu telah\n" +"menyumbangkan banyak kode, perbaikan dan saran.\n" +"\n" +" Program ini adalah program bebas; anda dapat mendistribusikan ulang\n" +" dan/atau mengubahnya di bawah persyaratan dan aturan dari GNU General\n" +" Public License seperti yang dipublikasikan oleh Free Software " +"Foundation;\n" +" baik versi 2 dari lisensi tersebut, atau yang lebih baru.\n" +"\n" +" Program ini didistribusikan dengan harapan agar berguna, tetapi\n" +" TANPA JAMINAN APAPUN; bahkan tanpa jaminan terimplikasi dari\n" +" kelayakan perdagangan atau kecocokan untuk suatu kegunaan. Silakan\n" +" mengacu ke GNU General Public License untuk informasi lebih lanjut.\n" +"\n" +" Anda seharusnya sudah menerima salinan dari GNU General Public License\n" +" bersama dengan program ini; jika tidak, silakan bersurat kepada\n" +" Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA " +"02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"penggunaan: mutt [ -nRzZ ] [ -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 [ -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" +"\n" +"opsi:\n" +" -A <alias>\tekspansi alias\n" +" -a <file>\tlampirkan file ke surat\n" +" -b <alamat>\talamat blind carbon-copy (BCC)\n" +" -c <alamat>\talamat carbon-copy (CC)\n" +" -e <perintah>\tperintah yang dijalankan setelah inisialisasi\n" +" -f <file>\tkotak surat yang dibaca\n" +" -F <file>\tfile muttrc alternatif\n" +" -H <file>\tfile contoh daftar headers\n" +" -i <file>\tfile yang disertakan dalam surat balasan\n" +" -m <jenis>\tjenis kotak surat yang digunakan\n" +" -n\t\tmenyuruh Mutt untuk tidak membaca muttrc dari system\n" +" -p\t\tlanjutkan surat yang ditunda\n" +" -Q <variabel>\tmelakukan query thd suatu variabel konfigurasi\n" +" -R\t\tbuka kotak surat dengan mode read-only\n" +" -s <subj>\tsubjek surat (harus dikutip jika mengandung spasi)\n" +" -v\t\ttunjukkan versi dan definisi sewaktu compile\n" +" -x\t\tsimulasi mailx untuk mengirim surat\n" +" -y\t\tpilih kotak surat yg ada di daftar `mailboxes'\n" +" -z\t\tlangsung keluar jika tidak ada surat di kotak surat\n" +" -Z\t\tbuka folder pertama dg surat baru, langsung keluar jika tidak ada\n" +" -h\t\tsurat ini" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opsi2 sewaktu kompilasi:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Gagal menginisialisasi terminal." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Melakukan debug tingkat %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG tidak digunakan sewaktu compile. Cuek.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s tidak ada. Buat?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Tidak bisa membuat %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Tidak ada penerima yang disebutkan.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: tidak bisa melampirkan file.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Tidak ada kotak surat dengan surat baru." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Tidak ada kotak surat incoming yang didefinisikan." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Kotak surat kosong." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Membaca %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Kotak surat kacau!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Kotak surat diobok-obok sampe kacau!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fatal error! Tidak bisa membuka kembali kotak surat!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Tidak bisa mengunci kotak surat!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox diubah, tapi tidak ada surat yang berubah! (laporkan bug ini)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Menulis surat-surat... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Melakukan perubahan..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Gagal menulis! Sebagian dari kotak surat disimpan ke %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Tidak bisa membuka kembali mailbox!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Membuka kembali kotak surat..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Ke: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Nomer indeks tidak betul." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Tidak ada entry." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Sudah tidak bisa geser lagi. Jebol nanti." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Sudah tidak bisa geser lagi. Jebol nanti." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Anda di halaman terakhir." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Anda di halaman pertama." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Entry pertama sudah ditampilkan." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Entry terakhir sudah ditampilkan." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Anda di entry terakhir." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Anda di entry pertama." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Cari: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Cari mundur: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Tidak ada kriteria pencarian." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Tidak ketemu." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Tidak ada entry yang ditandai." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Pencarian tidak bisa dilakukan untuk menu ini." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Pelompatan tidak diimplementasikan untuk dialogs." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Penandaan tidak didukung." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Membaca %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): tidak dapat mengeset waktu pada file" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "" +"File adalah sebuah direktori, simpan di dalamnya? [(y)a, (t)idak, (s)emua]" + +#: muttlib.c:835 +msgid "yna" +msgstr "yts" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "File adalah sebuah direktori, simpan di dalamnya?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "File di dalam direktori: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "File sudah ada, (t)impa, t(a)mbahkan, atau (b)atal?" + +#: muttlib.c:869 +msgid "oac" +msgstr "tab" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Tidak bisa menyimpan surat ke kotak surat POP" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s bukan kotak surat!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Tambahkan surat-surat ke %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Hubungan ke %s ditutup." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL tidak tersedia." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Perintah pra-koneksi gagal." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Kesalahan waktu menghubungi ke server %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "IDN \"%s\" tidak benar." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Mencari %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Tidak dapat menemukan host \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Menghubungi %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Tidak bisa berhubungan ke %s (%s)" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Gagal menemukan cukup entropy di sistem anda" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Mengisi pool entropy: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s mempunyai permissions yang tidak aman!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL tidak dapat digunakan karena kekurangan entropy" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "Kesalahan I/O" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "kesalahan protokol tak terdefinisikan" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL gagal: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Tidak bisa mengambil sertifikat" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Hubungan SSL menggunakan %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Tidak diketahui" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "%s: tidak bisa melampirkan file" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[tanggal tidak betul]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Sertifikat server belum sah" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Sertifikat server sudah kadaluwarsa" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Sertifikat ini dimiliki oleh:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Sertifikat ini dikeluarkan oleh:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Sertifikat ini sah" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " dari %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " ke %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Cap jari: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Cek sertifikat SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(t)olak, terima (s)ekali, terima selal(u)" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "tsu" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(t)olak, terima (s)ekali" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ts" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Keluar " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Warning: Tidak dapat menyimpan sertifikat" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Sertifikat telah disimpan" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Jumlah lock terlalu banyak, hapus lock untuk %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Tidak bisa men-dotlock %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Terlalu lama menunggu waktu mencoba fcntl lock!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Menunggu fcntl lock... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Terlalu lama menunggu waktu mencoba flock!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Menunggu flock... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Tidak bisa mengunci %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Membaca %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Menulis %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Tidak bisa mensinkronisasi kotak surat %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Pindahkan surat-surat yang sudah dibaca ke %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Benar-benar hapus %d surat yang ditandai akan dihapus?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Benar-benar hapus %d surat yang ditandai akan dihapus?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Pindahkan surat-surat yang sudah dibaca ke %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Kotak surat tidak berubah." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d disimpan, %d dipindahkan, %d dihapus." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d disimpan, %d dihapus." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Tekan '%s' untuk mengeset bisa/tidak menulis" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Gunakan 'toggle-write' supaya bisa menulis lagi!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Kotak surat ditandai tidak boleh ditulisi. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Kotak surat telah di-checkpoint." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Tidak dapat menulis surat" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "Integer overflow -- tidak bisa mengalokasikan memori." + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Tidak ada di menu ini." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "HlmnSblm" + +#: pager.c:1447 +msgid "NextPg" +msgstr "HlmnBrkt" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Lampiran" + +#: pager.c:1454 +msgid "Next" +msgstr "Brkt" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Sudah paling bawah." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Sudah paling atas." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Cari mundur: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Cari: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Bantuan sudah ditampilkan." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Tidak ada lagi teks kutipan." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Tidak ada lagi teks yang tidak dikutp setelah teks kutipan." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "surat multi bagian tidak punya parameter batas!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Kesalahan pada ekspresi: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Tidak tanggal: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Tidak ada bulan: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Bulan relatif tidak benar: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "kesalahan pada ekspresi" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "error pada kriteria pada: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: tidak ada perintah begitu" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: tidak didukung pada mode ini" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "parameter tidak ada" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "tanda kurung tidak klop: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "kriteria kosong" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "error: %d tidak dikenali (laporkan error ini)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Menyusun kriteria pencarian..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Menjalankan perintah terhadap surat-surat yang cocok..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Tidak ada surat yang memenuhi kriteria." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Sudah dicari sampe bawah, tapi tidak ketemu" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Sudah dicari sampe atas, tapi tidak ketemu" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Pencarian dibatalkan." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Passphrase PGP sudah dilupakan." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Error: tidak bisa membuat subproses utk PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Akhir keluaran PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- AWAL SURAT PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- AWAL PGP PUBLIC KEY BLOCK --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- AWAL SURAT DG TANDATANGAN PGP --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- AKHIR PESAN PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- AKHIR PGP PUBLIC KEY BLOCK --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- AKHIR PESAN DG TANDATANGAN PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Error: tidak tahu dimana surat PGP dimulai! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Internal error. Beritahukan kepada <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Error: tidak bisa membuat subproses PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Error: surat PGP/MIME tidak dalam format yg betul! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Error: tidak bisa membuat file sementara! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Data berikut dienkripsi dg PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Akhir data yang dienkripsi dg PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Tidak bisa membuka subproses PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Gunakan keyID = '%s' untuk %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Masukkan keyID untuk %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Tidak dapat menjalankan PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Mengambil PGP key..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Semua kunci yang cocok telah kadaluwarsa, dicabut, atau disabled." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Pilih " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Cek key " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP keys yg cocok dg <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP keys yg cocok dg \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Tidak bisa membuka /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Tidak bisa membuat file sementara" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Identifikasi kunci: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Kunci ini tidak dapat digunakan: kadaluwarsa/disabled/dicabut." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID telah kadaluwarsa/disabled/dicabut." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Validitas ID tidak terdifinisikan." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID tidak valid." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID hanya valid secara marginal." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Anda yakin mau menggunakan kunci tsb?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Masukkan key ID: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Menjalankan PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Kunci PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Mencari kunci yg cocok dengan \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Perintah TOP tidak didukung oleh server." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Tidak bisa menulis header ke file sementara!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Perintah UIDL tidak didukung oleh server." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s bukan path POP yang valid" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Mengambil daftar surat..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Tidak bisa menulis surat ke file sementara!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Memeriksa surat baru..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Nama server POP tidak diketahui." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Tidak ada surat baru di kotak surat POP." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Hapus surat-surat dari server?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Membaca surat-surat baru (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Error sewaktu menulis ke kotak surat!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d dari %d surat dibaca]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Server menutup hubungan!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Mengauthentikasi (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Mengauthentikasi (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Authentikasi APOP gagal." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Perintah USER tidak didukung oleh server." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Tidak bisa meninggalkan surat-surat di server." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Kesalahan waktu menghubungi ke server: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Menutup hubungan ke server POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Memverifikasi indeks surat..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Hubungan terputus. Hubungi kembali server POP?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Surat-surat tertunda" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Tidak ada surat yg ditunda." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "PGP header tidak betul" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "S/MIME header tidak betul" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Dekripsi gagal." + +#: query.c:46 +msgid "New Query" +msgstr "Query Baru" + +#: query.c:47 +msgid "Make Alias" +msgstr "Buat Alias" + +#: query.c:48 +msgid "Search" +msgstr "Cari" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Menunggu respons..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Perintah query tidak diketahui." + +#: query.c:286 +msgid "Query" +msgstr "Query" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Query: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Query '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Pipa" + +#: recvattach.c:53 +msgid "Print" +msgstr "Cetak" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Menyimpan..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Lampiran telah disimpan." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "PERHATIAN! Anda akan menimpa %s, lanjut?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Lampiran telah difilter." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filter melalui: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Pipe ke: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Saya tidak tahu bagaimana mencetak lampiran %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Cetak lampiran yang ditandai?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Cetak lampiran?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Tidak dapat men-decrypt surat ini!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Lampiran" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Tidak ada sub-bagian yg bisa ditampilkan!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Tidak bisa menghapus lampiran dari server POP." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Penghapusan lampiran dari surat yg dienkripsi tidak didukung." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Hanya penghapusan lampiran dari surat multi bagian yang didukung." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Anda hanya dapat menge-bounce bagian-bagian 'message/rfc822'." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Gagal menge-bounce surat!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Gagal menge-bounce surat-surat!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Tidak bisa membuka file sementara %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Forward sebagai lampiran?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Tidak dapat menguraikan semua lampiran yang ditandai. MIME-forward yg " +"lainnya?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Forward dalam MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Tidak bisa membuat %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Tidak dapat menemukan surat yang ditandai." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Tidak ada mailing list yang ditemukan!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Tidak dapat menguraikan semua lampiran yang ditandai. Ubah yg lainnya ke " +"MIME?" + +#: remailer.c:480 +msgid "Append" +msgstr "Tambahkan" + +#: remailer.c:481 +msgid "Insert" +msgstr "Masukkan" + +#: remailer.c:482 +msgid "Delete" +msgstr "Hapus" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Tidak dapat mengambil type2.list milik mixmaster!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Pilih rangkaian remailer." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Error: %s tidak dapat digunakan sebagai akhir rangkaian remailer." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Rangkaian mixmaster dibatasi hingga %d elemen." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Rangkaian remailer sudah kosong." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Anda sudah memilih awal rangkaian." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Anda sudah memilih akhir rangkaian." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster tidak menerima header Cc maupun Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Mohon variabel hostname diisi dengan benar jika menggunakan mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Error mengirimkan surat, proses keluar dengan kode %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Gagal mengirim surat." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Entry utk jenis %s di '%s' baris %d tidak diformat dengan benar" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Path untuk mailcap tidak diketahui" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "entry mailcap untuk jenis %s tidak ditemukan" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: parameternya kurang" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: parameternya terlalu banyak" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Tidak ada subjek, batal?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Tidak ada subjek, batal." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Balas ke %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Balas ke %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Tidak ada surat yang ditandai yang kelihatan!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Sertakan surat asli di surat balasan?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Menyertakan surat terkutip..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Tidak bisa menyertakan semua surat yang diminta!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Forward sebagai lampiran?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Mempersiapkan surat yg diforward..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Lanjutkan surat yang ditunda sebelumnya?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Edit surat yg diforward?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Batalkan surat yang tidak diubah?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Surat yang tidak diubah dibatalkan." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Surat tidak dikirim." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Surat ditunda." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Tidak ada penerima yang disebutkan!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Tidak ada penerima yang disebutkan." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Tidak ada subjek, batalkan pengiriman?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Tidak ada subjek." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Mengirim surat..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Tidak bisa mengirim surat." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Surat telah dikirim." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Mengirim di latar belakang." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Tidak ada parameter batas yang bisa ditemukan! [laporkan error ini]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s tidak ada lagi!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s bukan file biasa." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Tidak bisa membuka %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Error mengirimkan surat, proses keluar dengan kode %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Keluaran dari proses pengiriman" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "IDN %s pada saat mempersiapkan resent-from tidak benar." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Keluar.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "%s tertangkap... Keluar.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Sinyal %d tertangkap... Keluar.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Dipercaya " + +#: smime.c:303 +msgid "Verified " +msgstr "Sudah verif." + +#: smime.c:306 +msgid "Unverified" +msgstr "Blm verif." + +#: smime.c:309 +msgid "Expired " +msgstr "Kadaluarsa" + +#: smime.c:312 +msgid "Revoked " +msgstr "Dicabut " + +#: smime.c:315 +msgid "Invalid " +msgstr "Tdk valid " + +#: smime.c:318 +msgid "Unknown " +msgstr "Tdk diketahui" + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Masukkan keyID: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Sertifikat2 S/MIME yg cocok dg \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s belum diverifikasi. Yakin mau digunakan utk %s ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Gunakan ID (belum dipercaya!) %s utk %s ?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Gunakan ID %s utk %s ?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Warning: Anda belum memutuskan utk mempercayai ID %s. (sembarang utk lanjut)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Tidak ditemukan sertifikat (yg valid) utk %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Error: tidak bisa membuat subproses utk OpenSSL!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "tdk ada certfile" + +#: smime.c:1200 +msgid "no mbox" +msgstr "tdk ada mbox" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Tdk ada keluaran dr OpenSSL" + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Warning: Sertifikat intermediate tdk ditemukan." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Tidak bisa membuka subproses OpenSSL!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Tdk ada keluaran dr OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Akhir keluaran OpenSSL --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Error: tidak bisa membuat subproses utk OpenSSL! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Data berikut dienkripsi dg S/MIME --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Data berikut ditandatangani dg S/MIME --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Akhir data yang dienkripsi dg S/MIME. --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Akhir data yg ditandatangani dg S/MIME. --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Mengurutkan surat-surat..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Tidak bisa menemukan fungsi pengurutan! [laporkan bug ini]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(tidak ada kotak surat)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Surat induk tidak bisa dilihat di tampilan terbatas ini." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Surat induk tidak ada." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Memanggil OpenSSL..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Bounce surat ke %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Bounce surat-surat ke %s...?" + +#~ msgid "ewsabf" +#~ msgstr "etgsdb" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Sertifikat telah disimpan" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Tingkat validitas dari ID ini tidak didefinisikan." + +#~ msgid "[-- expired. --]\n" +#~ msgstr "[-- kadaluwarsa. --]\n" + +#~ msgid "Decode-save" +#~ msgstr "Decode-simpan" + +#~ msgid "Decode-copy" +#~ msgstr "Decode-copy" + +#~ msgid "Decrypt-save" +#~ msgstr "Decrypt-simpan" + +#~ msgid "Decrypt-copy" +#~ msgstr "Decrypt-copy" + +#~ msgid "Copy" +#~ msgstr "Copy" + +#~ msgid "" +#~ "[-- This %s/%s attachment is not included, --]\n" +#~ "[-- and the indicated external source has --]\n" +#~ "[-- expired. --]\n" +#~ msgstr "" +#~ "[-- Lampiran %s/%s ini tidak disertakan, --]\n" +#~ "[-- dan sumber luar yang dimaksud sudah --]\n" +#~ "[-- kadaluwarsa. --]\n" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Akhir keluaran PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Tidak bisa stat: %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: tidak ada perintah begitu" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Metode otentikasi tidak diketahui." + +#~ msgid "MIC algorithm: " +#~ msgstr "Algoritma MIC: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Ini tidak masuk akal jika anda tidak mau tandatangani suratnya." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "Algoritma MIC yang dikenali adalah: pgp-md5, pgp-sha1, pgp-rmd160" + +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "Implementasi SHA1 Hak Cipta (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Pendistribusian ulang dan penggunaan dalam bentuk sumber dan biner\n" +#~ " dengan maupun tanpa perubahan, diperbolehkan dengan syarat-syarat\n" +#~ " tertentu.\n" +#~ "\n" +#~ " Implementasi SHA1 adalah APA ADANYA, dan TIDAK diberikan jaminan\n" +#~ " dalam bentuk apapun, baik eksplisit maupun terimplikasi, termasuk\n" +#~ " tapi tidak terbatas kepada jaminan perdagangan dan ketepatgunaan.\n" +#~ "\n" +#~ " Anda semestinya sudah menerima sebuah salinan dari persyaratan " +#~ "lengkap\n" +#~ " pendistribusian ulang bersama program ini; jika tidak, hubungi\n" +#~ " para pembuat program ini.\n" + +#~ msgid "POP Username: " +#~ msgstr "Nama user POP: " + +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Membaca surat baru (%d bytes)..." + +#~ msgid "Error reading message!" +#~ msgstr "Gagal membaca surat!" + +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d surat dibaca]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "Pembuatan kotak surat belum diimplementasikan." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Membuka kembali kotak surat... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Menutup kotak surat..." + +#~ msgid "IMAP Username: " +#~ msgstr "IMAP Username: " + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "CRAM key untuk %s@%s: " + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "Melewati authentikasi CRAM-MD5." + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- Error: akhir file tak diduga! --]\n" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "Mengirim perintah APPEND ..." + +#~ msgid "%d kept." +#~ msgstr "%d disimpan." + +#~ msgid "POP Password: " +#~ msgstr "Password POP: " + +#~ msgid "No POP username is defined." +#~ msgstr "Username POP tidak diketahui." + +#~ msgid "Could not find address for host %s." +#~ msgstr "Alamat tidak ditemukan untuk %s." + +#~ msgid "Attachment saved" +#~ msgstr "Lampiran telah disimpan" diff --git a/po/it.gmo b/po/it.gmo new file mode 100644 index 0000000000000000000000000000000000000000..701361a3127d93fa1757a347b1346adcf5943953 GIT binary patch literal 67648 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 literal 0 HcmV?d00001 diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..06c7d49 --- /dev/null +++ b/po/it.po @@ -0,0 +1,4199 @@ +# Translation for mutt. +# Copyright (C) 1998-2001 Marco d'Itri +# Marco d'Itri <md@linux.it>, 2000. +# +# $Id: it.po,v 3.10 2003/11/05 20:09:35 roessler Exp $ +# +msgid "" +msgstr "" +"Project-Id-Version: mutt-1.3.23\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2002-01-19 21:09+0100\n" +"Last-Translator: Marco d'Itri <md@linux.it>\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nome dell'utente su %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Password per %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Esci" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Canc" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "DeCanc" + +#: addrbook.c:36 +msgid "Select" +msgstr "Seleziona" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Aiuto" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Non hai alias!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Crea l'alias" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Crea l'alias: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Hai già definito un alias con questo nome!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Indirizzo: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nome della persona: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Va bene?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Salva nel file: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Alias aggiunto." + +# FIXME +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Il nametemplate non corrisponde, continuo?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "La voce compose di mailcap richiede %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Errore eseguendo \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Errore nell'apertura del file per leggere gli header." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Errore nell'apertura del file per rimuovere gli header." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Manca la voce compose di mailcap per %s, creo un file vuoto." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "La voce edit di mailcap richiede %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Manca la voce edit di mailcap per %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "" +"Non è stata trovata la voce di mailcap corrispondente. Visualizzo come " +"testo." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Tipo MIME non definito. Impossibile visualizzare l'allegato." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Impossibile creare il filtro" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Impossibile creare il filtro" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Errore di scrittura!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Non so come stamparlo!" + +#: browser.c:41 +msgid "Chdir" +msgstr "CambiaDir" + +#: browser.c:42 +msgid "Mask" +msgstr "Maschera" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s non è una directory." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Mailbox [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Iscritto [%s], Maschera dei file: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Directory [%s], Maschera dei file: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Impossibile allegare una directory!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Non ci sono file corrispondenti alla maschera" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "È possibile creare solo mailbox IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "È possibile cancellare solo mailbox IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Cancello davvero la mailbox \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Mailbox cancellata." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Mailbox non cancellata." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Cambia directory:" + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Errore nella lettura della directory." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Maschera dei file: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Ordino al contrario per (d)ata, (a)lfabetico, dimensioni(z) o (n)ulla? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ordino per (d)ata, (a)lfabetico, dimensioni(z) o (n)ulla? " + +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nuovo nome del file: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Impossibile vedere una directory" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "C'è stato un errore nella visualizzazione del file" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Nuova posta in %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: il colore non è gestito dal terminale" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: colore inesistente" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: oggetto inesistente" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: comando valido solo per l'oggetto index" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: troppo pochi argomenti" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Mancano dei parametri." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: troppo pochi argomenti" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: troppo pochi argomenti" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: attributo inesistente" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "troppo pochi argomenti" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "troppi argomenti" + +#: color.c:721 +msgid "default colors not supported" +msgstr "i colori predefiniti non sono gestiti" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Verifico la firma PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Impossibile creare il file temporaneo!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Impossibile creare il filtro di visualizzazione" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Impossibile copiare il messaggio" + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "Firma PGP verificata con successo." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "Non è stato possibile verificare la firma PGP." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Firma PGP verificata con successo." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "Non è stato possibile verificare la firma PGP." + +#: commands.c:223 +msgid "Command: " +msgstr "Comando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Rimbalza il messaggio a: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Rimbalza i messaggi a: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Errore nella lettura dell'indirizzo!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Rimbalza il messaggio a %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Rimbalza i messaggi a %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Messaggio rimbalzato." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Messaggi rimbalzati." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Messaggio rimbalzato." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Messaggi rimbalzati." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Impossibile creare il processo filtro" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Apri una pipe con il comando: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Non è stato definito un comando di stampa." + +#: commands.c:483 +msgid "Print message?" +msgstr "Stampo il messaggio?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Stampo i messaggi segnati?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Messaggio stampato" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Messaggi stampati" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Impossibile stampare il messaggio" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Impossibile stampare i messaggi" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"OrdContr (d)ata/(f)rom/(r)icev/(s)ogg/t(o)/(t)hread/n(u)lla/si(z)e/s(c)ore?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordina per (d)ata/(f)rom/(r)icev/(s)ogg/t(o)/(t)hread/n(u)lla/si(z)e/s(c)" +"ore?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Comando della shell: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Decodifica e salva nella mailbox%s" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Decodifica e copia nella mailbox%s" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Decifra e salva nella mailbox%s" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Decifra e copia nella mailbox%s" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Salva nella mailbox%s" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Copia nella mailbox%s" + +#: commands.c:706 +msgid " tagged" +msgstr " i messaggi segnati" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Copio in %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Convertire in %s al momento dell'invio?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Il Content-Type è stato cambiato in %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Il set di caratteri è stato cambiato in %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "non convertito" + +#: commands.c:914 +msgid "converting" +msgstr "convertito" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Non ci sono allegati." + +#: compose.c:84 +msgid "Send" +msgstr "Spedisci" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Abbandona" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Allega un file" + +#: compose.c:90 +msgid "Descrip" +msgstr "Descr" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Firma, Crittografa" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Crittografa" + +#: compose.c:131 +msgid "Sign" +msgstr "Firma" + +#: compose.c:133 +msgid "Clear" +msgstr "Normale" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " firma come: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<predefinito>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Crittografa" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "cifra(e), firma(s), firma come(a), entrambi(b), annulla(f) " + +#: compose.c:166 +msgid "esabf" +msgstr "esabf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Firma come: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "cifra(e), firma(s), firma come(a), entrambi(b), annulla(f) " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "esabf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] non esiste più!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] è stato modificato. Aggiorno la codifica?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Allegati" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Non puoi cancellare l'unico allegato." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Allego i file selezionati..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Impossibile allegare %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Apri la mailbox da cui allegare il messaggio" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "In questo folder non ci sono messaggi." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Segna i messaggi che vuoi allegare!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Impossibile allegare!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "La ricodifica ha effetti solo sugli allegati di testo." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "L'allegato corrente non sarà convertito." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "L'allegato corrente sarà convertito." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Codifica non valida." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Salvo una copia di questo messaggio?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Rinomina in: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Impossibile fare stat di %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nuovo file: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type non è nella forma base/sub" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Content-Type %s sconosciuto" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Impossibile creare il file %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Quel che abbiamo qui è l'impossibilità di fare un allegato" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Rimando a dopo questo messaggio?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Salva il messaggio nella mailbox" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Scrivo il messaggio in %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Messaggio scritto." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Segue l'output di PGP (ora attuale: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "Passphrase di PGP dimenticata." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Inserisci la passphrase di PGP:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Inserisci la passphrase di PGP:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Creo un messaggio application/pgp?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Eseguo PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Errore: struttura multipart/signed incoerente! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "[-- Errore: protocollo multipart/signed %s sconosciuto! --]\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "[-- Attenzione: impossibile verificare firme %s/%s. --]\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- I seguenti dati sono firmati --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Attenzione: non è stata trovata alcuna firma. --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "[-- Fine dei dati firmati --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "sì" + +#: curs_lib.c:158 +msgid "no" +msgstr "no" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Esci da mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "errore sconosciuto" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Premi un tasto per continuare..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' per la lista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Nessuna mailbox aperta." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Non ci sono messaggi." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "La mailbox è di sola lettura." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funzione non permessa nella modalità attach-message." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Non ci sono messaggi visibili" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Impossibile (dis)abilitare la scrittura a una mailbox di sola lettura!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "I cambiamenti al folder saranno scritti all'uscita dal folder." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "I cambiamenti al folder non saranno scritti." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Esci" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Salva" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Mail" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Rispondi" + +#: curs_main.c:403 +msgid "Group" +msgstr "Gruppo" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"La mailbox è stata modificata dall'esterno. I flag possono essere sbagliati." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "C'è nuova posta in questa mailbox." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "La mailbox è stata modificata dall'esterno." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Nessun messaggio segnato." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Mi connetto a %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Salta al messaggio: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "L'argomento deve essere il numero di un messaggio." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Questo messaggio non è visibile." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Numero del messaggio non valido." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Cancella i messaggi corrispondenti a: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Non è attivo alcun modello limitatore." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Limita: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limita ai messaggi corrispondenti a: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Esci da Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Segna i messaggi corrispondenti a: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "De-cancella i messaggi corrispondenti a: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Togli il segno ai messaggi corrispondenti a: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Apri la mailbox in sola lettura" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Apri la mailbox" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s non è una mailbox." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Esci da Mutt senza salvare?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Sei all'ultimo messaggio." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Nessun messaggio da de-cancellare." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Sei al primo messaggio." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "La ricerca è ritornata all'inizio." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "La ricerca è ritornata al fondo." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Non ci sono nuovi messaggi" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Non ci sono messaggi non letti" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " in questa visualizzazione limitata" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Impossibile cambiare il flag \"importante\" sul server POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Non ci sono altri thread." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Sei al primo thread." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Il threading non è attivo." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Il thread contiene messaggi non letti." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Impossibile modificare i messaggi sul server POP." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tinserisci una linea che inizia con un solo ~\n" +"~b utenti\taggiungi utenti al campo Bcc:\n" +"~c utenti\taggiungi utenti al campo Cc:\n" +"~f messaggi\tincludi dei messaggi\n" +"~F messaggi\tcome ~f, ma include anche gli header\n" +"~h\t\tmodifica gli header del messaggio\n" +"~m messaggi\tincludi e cita dei messaggi\n" +"~Mmessaggi\tcome ~m, ma include anche gli header\n" +"~p\t\tstampa il messaggio\n" +"~q\t\tscrivi il file e abbandona l'editor\n" +"~r file\t\tleggi un file nell'editor\n" +"~t utenti\taggiungi utenti al campo To:\n" +"~u\t\trichiama la linea precedente\n" +"~v\t\tmodifica il messaggio con il $VISUAL editor\n" +"~w file\t\tscrivi il messaggio nel file\n" +"~x\t\tabbandona i cambiamenti e lascia l'editor\n" +"~?\t\tquesto messaggio\n" +"~.\t\tda solo su una linea termina l'input\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: numero del messaggio non valido.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Termina il messaggio con un . su una linea da solo)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Nessuna mailbox.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Il messaggio contiene:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(continua)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "manca il nome del file.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Non ci sono linee nel messaggio.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: comando dell'editor sconosciuto (~? per l'aiuto)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "impossibile creare il folder temporaneo: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "impossibile scrivere il folder temporaneo: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "impossibile scrivere il folder temporaneo: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Il file del messaggio è vuoto!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Messaggio non modificato!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Impossibile aprire il file del messaggio: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Impossibile accodare al folder: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Errore. Preservato il file temporaneo: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Imposta il flag" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Cancella il flag" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Errore: impossibile visualizzare ogni parte di multipart/alternative! " +"--]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Allegato #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tipo: %s/%s, Codifica: %s, Dimensioni: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Visualizza automaticamente con %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Richiamo il comando di autovisualizzazione: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Impossibile eseguire %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Stderr dell'autoview di %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Errore: message/external-body non ha un parametro access-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Questo allegato %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(dimensioni %s byte) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "è stato cancellato -- ]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- su %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nome: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Questo allegato %s/%s non è incluso, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- e l'origine esterna indicata è scaduta. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- e il l'access-type %s indicato non è gestito --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Errore: multipart/signed non ha protocollo." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Errore: multipart/encrypted non ha il parametro protocol!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Impossibile aprire il file temporaneo!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s non è gestito " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(usa '%s' per vederlo)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' deve essere assegnato a un tasto!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: impossibile allegare il file" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERRORE: per favore segnala questo bug" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<SCONOSCIUTO>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Assegnazioni generiche:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funzioni non assegnate:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Aiuto per %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: impossibile usare unhook * dentro un hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: tipo di hook sconosciuto: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: impossibile cancellare un %s dentro un %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Non ci sono autenticatori disponibili." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Autenticazione in corso (anonimo)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "L'autenticazione anonima è fallita." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Autenticazione in corso (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Autenticazione CRAM-MD5 fallita." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Autenticazione in corso (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Autenticazione GSSAPI fallita." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN non è abilitato su questo server." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Faccio il login..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Login fallito." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Autenticazione in corso (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Autenticazione SASL fallita." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s non è un percorso IMAP valido" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Scarico i namespace..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Scarico la lista dei folder..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Folder inesistente" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Crea la mailbox:" + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "La mailbox deve avere un nome." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Mailbox creata." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Mailbox chiusa" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Errore fatale. Il numero dei messaggi non è sincronizzato!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Chiudo la connessione a %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Questo server IMAP è troppo vecchio, mutt non può usarlo." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Vuoi usare TLS per rendere sicura la connessione?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Impossibile negoziare la connessione TLS" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Seleziono %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Errore durante l'apertura della mailbox" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Impossibile accodare alle mailbox IMAP di questo server" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Creo %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Chiudo la connessione al server IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Segno cancellati %d messaggi..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Expunge fallito" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Salvo i flag di stato dei messaggi... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Cancello i messaggi dal server..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE fallito" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE fallito" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Nome della mailbox non valido" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Mi iscrivo a %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Mi deiscrivo da %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Impossibile scaricare gli header da questa versione del server IMAP." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Impossibile creare il file temporaneo %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Prendo gli header dei messaggi... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Prendo il messaggio..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "L'indice dei messaggi non è corretto; prova a riaprire la mailbox." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Mando il messaggio ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Copio %d messaggi in %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Copio il messaggio %d in %s ..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Continua?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: nessun indirizzo" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "Campo dell'header non valido" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: metodo di ordinamento sconosciuto" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): errore nella regexp: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: variabile sconosciuta" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefix non è consentito con reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "value non è consentito con reset" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s è attivo" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s non è attivo" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: tipo di mailbox non valido" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: valore non valido" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: tipo sconosciuto" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: tipo sconosciuto" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Impossibile fare stat di %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s non è un file regolare." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Errore in %s, linea %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: errori in %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: lettura terminata a causa di troppi errori in %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: errore in %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: troppi argomenti" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: comando sconosciuto" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Errore nella riga di comando: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "impossibile determinare la home directory" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "impossibile determinare l'username" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Individuato un loop di macro." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Il tasto non è assegnato." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Il tasto non è assegnato. Premi '%s' per l'aiuto." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: troppi argomenti" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: menù inesistente" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "sequenza di tasti nulla" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: troppi argomenti" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: la funzione non è nella mappa" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: sequenza di tasti nulla" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: troppi argomenti" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: non ci sono argomenti" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: la funzione non esiste" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Inserisci il keyID per %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "operazione nulla" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "forza la visualizzazione dell'allegato usando mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "visualizza l'allegato come se fosse testo" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "(dis)attiva la visualizzazione delle sottoparti" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "spostati in fondo alla pagina" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "rispedisci un messaggio a un altro utente" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "seleziona un nuovo file in questa directory" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "guarda il file" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "mostra il nome del file attualmente selezionato" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "iscrizione alla mailbox corrente (solo IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "deiscrizione dalla mailbox corrente (solo IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "" +"visualizza tutte le mailbox o solo quelle a cui si è iscritti (solo IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Nessuna mailbox con nuova posta." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "cambia directory" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "controlla se c'è nuova posta nella mailbox" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "allega un file a questo messaggio" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "allega un messaggio a questo messaggio" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "modifica la lista dei BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "modifica la lista dei CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "modifica la descrizione dell'allegato" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "modifica il transfer-encoding dell'allegato" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "inserisci un file in cui salvare una coppia di questo messagio" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "modifica il file da allegare" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "modifica il campo from" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "modifica il messaggio insieme agli header" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "modifica il messaggio" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "modifica l'allegato usando la voce di mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "modifica il campo Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "modifica il Subject di questo messaggio" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "modifica la lista dei TO" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "crea una nuova mailbox (solo IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "modifica il tipo di allegato" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "prendi una copia temporanea di un allegato" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "esegui ispell sul messaggio" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "componi un nuovo allegato usando la voce di mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "(dis)abilita la ricodifica di questo allegato" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "salva questo messaggio per inviarlo in seguito" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "rinomina/sposta un file allegato" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "spedisce il messaggio" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "cambia la disposizione tra inline e attachment" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "(dis)attiva se cancellare il file dopo averlo spedito" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "aggiorna le informazioni sulla codifica di un allegato" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "scrivi il messaggio in un folder" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "copia un messaggio in un file/mailbox" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "crea un alias dal mittente del messaggio" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "muovi la voce in fondo allo schermo" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "muovi al voce in mezzo allo schermo" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "muovi la voce all'inizio dello schermo" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "fai una copia decodificata (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "fai una copia decodificata (text/plain) e cancellalo" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "cancella la voce corrente" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "cancella la mailbox corrente (solo IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "cancella tutti i messaggi nel subthread" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "cancella tutti i messaggi nel thread" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "visualizza l'indirizzo completo del mittente" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "visualizza il messaggio e (dis)attiva la rimozione degli header" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "visualizza un messaggio" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "modifica il messaggio grezzo" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "cancella il carattere davanti al cursore" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "sposta il cursore di un carattere a sinistra" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "sposta il cursore all'inizio della parola" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "salta all'inizio della riga" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "passa alla mailbox di ingresso successiva" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "completa il nome del file o l'alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "completa l'indirizzo con una ricerca" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "cancella il carattere sotto il cursore" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "salta alla fine della riga" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "sposta il cursore di un carattere a destra" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "sposta il cursore alla fine della parola" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "spostati in alto attraverso l'history" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "spostati in alto attraverso l'history" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "cancella i caratteri dal cursore alla fine della riga" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "cancella i caratteri dal cursore alla fine della parola" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "cancella tutti i caratteri sulla riga" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "cancella la parola davanti al cursore" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "proteggi il prossimo tasto digitato" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "scambia il carattere sotto il cursore con il precedente" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "rendi maiuscola la prima lettera" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "rendi minuscola la parola" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "rendi maiuscola la parola" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "inserisci un comando di muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "inserisci la maschera dei file" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "esci da questo menù" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtra l'allegato attraverso un comando della shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "spostati alla prima voce" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "(dis)attiva il flag 'importante' del messaggio" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "inoltra un messaggio con i commenti" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "seleziona la voce corrente" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "rispondi a tutti i destinatari" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "sposta verso il basso di 1/2 pagina" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "sposta verso l'alto di 1/2 pagina" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "questo schermo" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "salta a un numero dell'indice" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "spostati all'ultima voce" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "rispondi alla mailing list indicata" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "esegui una macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "componi un nuovo messaggio" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "apri un altro folder" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "apri un altro folder in sola lettura" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "cancella il flag di stato da un messaggio" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "cancella i messaggi corrispondenti al modello" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "recupera la posta dal server IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "recupera la posta dal server POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "spostati al primo messaggio" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "spostati all'ultimo messaggio" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "mostra solo i messaggi corrispondenti al modello" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "salta al prossimo messaggio nuovo" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "salta al prossimo messaggio non letto" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "salta al prossimo subthread" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "salta al prossimo thread" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "salta al prossimo messaggio de-cancellato" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "salta al prossimo messaggio non letto" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "salta al messaggio padre nel thread" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "salta al thread precedente" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "salta al thread seguente" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "salta al precedente messaggio de-cancellato" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "salta al precedente messaggio nuovo" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "salta al precedente messaggio non letto" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "salta al precedente messaggio non letto" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "segna il thread corrente come già letto" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "segna il subthread corrente come già letto" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "imposta un flag di stato su un messaggio" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "salva i cambiamenti nella mailbox" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "segna i messaggi corrispondenti al modello" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "de-cancella i messaggi corrispondenti al modello" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "togli il segno ai messaggi corrispondenti al modello" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "spostati in mezzo alla pagina" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "spostati alla prossima voce" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "spostati una riga in basso" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "spostati alla prossima pagina" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "salta in fondo al messaggio" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "(dis)attiva la visualizzazione del testo citato" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "salta oltre il testo citato" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "salta all'inizio del messaggio" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "manda un messaggio/allegato a un comando della shell con una pipe" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "spostati alla voce precedente" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "spostati in alto di una riga" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "spostati alla pagina precedente" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "stampa la voce corrente" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "chiedi gli indirizzi a un programma esterno" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "aggiungi i risultati della nuova ricerca ai risultati attuali" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "salva i cambiamenti alla mailbox ed esci" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "richiama un messaggio rimandato" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "cancella e ridisegna lo schermo" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{internal}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "rispondi a un messaggio" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "usa il messaggio corrente come modello per uno nuovo" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "salva in un file un messaggio/allegato" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "cerca una espressione regolare" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "cerca all'indietro una espressione regolare" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "cerca la prossima corrispondenza" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "cerca la prossima corrispondenza nella direzione opposta" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "(dis)attiva la colorazione del modello cercato" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "esegui un comando in una subshell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ordina i messaggi" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ordina i messaggi in ordine inverso" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "segna la voce corrente" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "applica la prossima funzione ai messaggi segnati" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "applica la prossima funzione ai messaggi segnati" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "segna il subthread corrente" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "segna il thread corrente" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "(dis)attiva il flag 'nuovo' di un messaggio" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "(dis)attiva se la mailbox sarà riscritta" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "(dis)attiva se visualizzare le mailbox o tutti i file" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "spostati all'inizio della pagina" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "de-cancella la voce corrente" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "de-cancella tutti i messaggi nel thread" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "de-cancella tutti i messaggi nel subthread" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "mostra il numero di versione e la data di Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "visualizza l'allegato usando se necessario la voce di mailcap" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "mostra gli allegati MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "mostra il modello limitatore attivo" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "(de)comprimi il thread corrente" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "(de)comprimi tutti i thread" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "allega una chiave pubblica PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "mostra le opzioni PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "spedisci una chiave pubblica PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "verifica una chiave pubblica PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "visualizza la chiave dell'user id" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "controlla una firma PGP tradizionale" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Accetta la catena costruita" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Accoda un remailer alla catena" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Inserisce un remailer nella catena" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Toglie un remail dalla catena" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Seleziona l'elemento precedente della catena" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Seleziona il prossimo elemento della catena" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "invia il messaggio attraverso una catena di remailer mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "fai una copia decodificata e cancellalo" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "fai una copia decodificata" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "cancella la passphrase PGP dalla memoria" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "estrai le chiavi pubbliche PGP" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "mostra le opzioni PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Memoria esaurita!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Per contattare gli sviluppatori scrivi a <mutt-dev@mutt.org>.\n" +"Per segnalare un bug usa il programma flea(1).\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins e altri.\n" +"Mutt non ha ALCUNA GARANZIA; usare `mutt -vv' per i dettagli.\n" +"Mutt è software libero e sei invitato a ridistribuirlo\n" +"sotto certe condizioni; scrivere `mutt -vv' per i dettagli.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2001 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Molti altri non menzionati qui hanno contribuito con codice, correzioni\n" +"e suggerimenti.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"uso: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <tipo> ] [ -f <file> ]\n" +"\tmutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] [ -i " +"<file> ] [ -s <sogg> ] [ -b <indir> ] [ -c <indir> ] <indir> [ ... ]\n" +"\tmutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n" +"\tmutt -v[v]\n" +"\n" +"opzioni\n" +" -a <file>\tallega un file al messaggio\n" +" -b <indir>\tindirizzo in blind carbon copy (BCC)\n" +" -c <indir>\tindirizzo in carbon copy (CC)\n" +" -e <cmd>\tcomando da eseguire dopo l'inizializzazione\n" +" -f <file>\tquale mailbox leggere\n" +" -F <file>\tun file muttrc alternativo\n" +" -H <file>\tun file di esempio da cui leggere gli header\n" +" -i <file>\tun file che mutt dovrebbe includere nella risposta\n" +" -m <tipo>\til tipo di mailbox predefinita\n" +" -n\t\tdisabilita la lettura del Muttrc di sistema\n" +" -p\t\trichiama un messaggio rimandato\n" +" -R\t\tapri la mailbox in sola lettura\n" +" -s <sogg>\tspecifica il Subject (deve essere tra apici se ha spazi)\n" +" -v\t\tmostra la versione e le definizioni della compilazione\n" +" -x\t\tsimula la modalità invio di mailx\n" +" -y\t\tseleziona una mailbox specificata nella lista `mailboxes'\n" +" -z\t\tesce immediatamente se non ci sono messaggi nella mailbox\n" +" -Z\t\tapre il primo folder con un nuovo messaggio, esce se non ce ne sono\n" +" -h\t\tquesto messaggio di aiuto" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opzioni di compilazione:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Errore nell'inizializzazione del terminale." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Debugging al livello %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG non è stato definito durante la compilazione. Ignorato.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s non esiste. Lo creo?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Impossibile creare %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nessun destinatario specificato.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: impossibile allegare il file.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Nessuna mailbox con nuova posta." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Non è stata definita una mailbox di ingresso." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "La mailbox è vuota." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Leggo %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "La mailbox è rovinata!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "La mailbox è stata rovinata!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Errore fatale! Impossibile riaprire la mailbox!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Impossibile bloccare la mailbox." + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: mbox modified, but no modified messages! (segnala questo bug)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Scrivo i messaggi... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Applico i cambiamenti..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Scrittura fallita! Salvo la mailbox parziale in %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Impossibile riaprire la mailbox!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Riapro la mailbox..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Salta a: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Numero dell'indice non valido." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Nessuna voce." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Non puoi spostarti più in basso." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Non puoi spostarti più in alto." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Sei all'ultima pagina." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Sei alla prima pagina." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "La prima voce è questa." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "L'ultima voce è questa." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Sei all'ultima voce." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Sei alla prima voce." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Cerca: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Cerca all'indietro: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Nessun modello di ricerca." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Non trovato." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Nessuna voce segnata." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "In questo menù la ricerca non è stata implementata." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "I salti non sono implementati per i dialog." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Non è possibile segnare un messaggio." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Leggo %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Il file è una directory, salvo lì dentro?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Il file è una directory, salvo lì dentro?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "File nella directory: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "" +"Il file esiste, lo s(o)vrascrivo, (a)ccodo, o (c) annullo l'operazione?" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Impossibile salvare il messaggio nella mailbox POP." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s non è una mailbox!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Accodo i messaggi a %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Connessione a %s chiusa." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL non è disponibile." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Comando di preconnessione fallito." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Errore parlando a %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Cerco %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Impossibile trovare l'host \"%s\"." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Mi connetto a %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Impossibile connettersi a %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Impossibile trovare abbastanza entropia nel sistema" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Riempimento del pool di entropia: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s ha permessi insicuri!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL disabilitato a causa della mancanza di entropia" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "errore di I/O" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "errore del protocollo non precisato" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL fallito: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Impossibile ottenere il certificato dal peer" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Connessione SSL con %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Sconosciuto" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[impossibile da calcolare]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[data non valida]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Il certificato del server non è ancora valido" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Il certificato del server è scaduto" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Questo certificato appartiene a:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Questo certificato è stato emesso da:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Questo certificato è valido" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " da %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " a %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingerprint: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Controllo del certificato SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ifiuta, accetta s(o)lo adesso, (a)ccetta sempre" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "roa" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ifiuta, accetta s(o)lo adesso" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ro" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Esci " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Attenzione: impossibile salvare il certificato" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certificato salvato" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Tentati troppi lock, rimuovo il lock di %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Impossibile fare un dotlock su %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Timeout scaduto durante il tentativo di lock fcntl!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Aspetto il lock fcntl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Timeout scaduto durante il tentativo di lock flock!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Attesa del lock flock... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Impossibile fare il lock di %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Leggo %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Scrivo %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Impossibile sincronizzare la mailbox %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Sposto i messaggi letti in %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Cancello %d messaggio cancellato?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Cancello %d messaggi cancellati?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Sposto i messaggi letti in %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "La mailbox non è stata modificata." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d tenuti, %d spostati, %d cancellati." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d tenuti, %d cancellati." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Premi '%s' per (dis)abilitare la scrittura" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Usa 'toggle-write' per riabilitare la scrittura!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "La mailbox è indicata non scrivibile. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Effettuato il checkpoint della mailbox." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Impossibile scrivere il messaggio" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Non disponibile in questo menù." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PgPrec" + +#: pager.c:1447 +msgid "NextPg" +msgstr "PgSucc" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Vedi Allegato" + +#: pager.c:1454 +msgid "Next" +msgstr "Succ" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Il messaggio finisce qui." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "L'inizio del messaggio è questo." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Cerca all'indietro: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Cerca: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "L'help è questo." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Non c'è altro testo citato." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Non c'è altro testo non citato dopo quello citato." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "il messaggio multipart non ha il parametro boundary!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Errore nell'espressione: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Giorno del mese non valido: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Mese non valido: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Data relativa non valida: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "errore nell'espressione" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "errore nel modello in: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: comando non valido" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: non gestito in questa modalità" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "parametro mancante" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "parentesi fuori posto: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "modello vuoto" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "errore: unknown op %d (segnala questo errore)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Compilo il modello da cercare..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Eseguo il comando sui messaggi corrispondenti..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Nessun messaggio corrisponde al criterio." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "La ricerca è arrivata in fondo senza trovare una corrispondenza" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "La ricerca è arrivata all'inizio senza trovare una corrispondenza" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Ricerca interrotta." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Passphrase di PGP dimenticata." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Errore: impossibile creare il sottoprocesso PGP --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Fine dell'output di PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "[-- INIZIO DEL MESSAGGIO DI PGP --]\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- INIZIO DEL BLOCCO DELLA CHIAVE PUBBLICA --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "[-- INIZIO DEL MESSAGGIO FIRMATO CON PGP --]\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- FINE DEL MESSAGGIO DI PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- FINE DEL BLOCCO DELLA CHIAVE PUBBLICA --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- FINE DEL MESSAGGIO FIRMATO CON PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Errore: impossibile trovare l'inizio del messaggio di PGP! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Errore interno. Informa <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Errore: non è stato possibile creare un sottoprocesso PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Errore: impossibile trovare l'inizio del messaggio di PGP! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Errore: impossibile creare il file temporaneo! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "[-- I seguenti dati sono cifrati con PGP/MIME --]\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Fine dei dati cifrati con PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Impossibile aprire il sottoprocesso PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Uso il keyID \"%s\" per %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Inserisci il keyID per %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Impossibile eseguire PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Prendo la chiave PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Tutte le chiavi corrispondenti sono scadute o revocate." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Seleziona " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Controlla la chiave " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Chiavi PGP corrispondenti a <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Chiavi PGP corrispondenti a \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Impossibile aprire /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Impossibile creare il file temporaneo" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Key ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Questa chiave non può essere usata: è scaduta/disabilitata/revocata." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "L'ID è scaduto/disabilitato/revocato." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "L'ID ha validità indefinita." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "L'ID non è valido." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "L'ID è solo marginalmente valido." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Vuoi veramente usare questa chiave?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Inserisci il key ID: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Eseguo PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Chiave PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Cerco chiavi corrispondenti a \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Il comando TOP non è gestito dal server." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Impossibile scrivere l'header nel file temporaneo!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Il comando UIDL non è gestito dal server." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s non è un percorso POP valido" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Prendo la lista dei messaggi..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Impossibile scrivere il messaggio nel file temporaneo!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Controllo se ci sono nuovi messaggi..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "L'host POP non è stato definito." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Non c'è nuova posta nella mailbox POP." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Cancello i messaggi dal server?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Leggo i nuovi messaggi (%d byte)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Errore durante la scrittura della mailbox!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d messaggi letti su %d]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Il server ha chiuso la connessione!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Autenticazione in corso (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Autenticazione in corso (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Autenticazione APOP fallita." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Il comando USER non è gestito dal server." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Impossibile lasciare i messaggi sul server." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Errore nella connessione al server: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Chiudo la connessione al server POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Verifica degli indici dei messaggi..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Connessione persa. Mi riconnetto al server POP?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Messaggi Rimandati" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Non ci sono messaggi rimandati." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Header PGP non consentito" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Header PGP non consentito" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Login fallito." + +#: query.c:46 +msgid "New Query" +msgstr "Nuova Ricerca" + +#: query.c:47 +msgid "Make Alias" +msgstr "Crea un alias" + +#: query.c:48 +msgid "Search" +msgstr "Cerca" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Aspetto la risposta..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Il comando della ricerca non è definito." + +#: query.c:286 +msgid "Query" +msgstr "Ricerca" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Cerca: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Ricerca '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Pipe" + +#: recvattach.c:53 +msgid "Print" +msgstr "Stampa" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Salvo..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Allegato salvato." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ATTENZIONE! Stai per sovrascrivere %s, continuo?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Allegato filtrato." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtra attraverso: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Manda con una pipe a: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Non so come stampare allegati %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Stampo gli allegati segnati?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Stampo l'allegato?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Non ci sono messaggi segnati." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Allegati" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Non ci sono sottoparti da visualizzare!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Impossibile cancellare l'allegato dal server POP" + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "La cancellazione degli allegati da messaggi PGP non è gestita." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "È gestita solo la cancellazione degli allegati multiparte." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Puoi rimbalzare solo parti message/rfc822." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Errore durante l'invio del messaggio." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Errore durante l'invio del messaggio." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Impossibile aprire il file temporaneo %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Inoltro come allegati?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Impossibile decodificare tutti gli allegati segnati. Uso MIME per gli altri?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Inoltro incapsulato in MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Impossibile creare %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Non ci sono messaggi segnati." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Non è stata trovata alcuna mailing list!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Impossibile decodificare tutti gli allegati segnati. Uso MIME per gli altri?" + +#: remailer.c:480 +msgid "Append" +msgstr "Accoda" + +#: remailer.c:481 +msgid "Insert" +msgstr "Inserisce" + +#: remailer.c:482 +msgid "Delete" +msgstr "Cancella" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Non trovo type2.list di mixmaster!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Seleziona una catena di remailer." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Errore: %s non può essere usato come remailer finale di una catena." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Le catene mixmaster sono limitate a %d elementi." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "La catena di remailer è già vuota." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Hai già selezionato il primo elemento della catena." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Hai già selezionato l'ultimo elemento della catena." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster non accetta header Cc o Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Imposta la variabile hostname al valore corretto quando usi mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Errore nella spedizione del messaggio, il figlio è uscito con %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Errore durante l'invio del messaggio." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Voce impropriamente formattata per il tipo %s in \"%s\", linea %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Il percorso di mailcap non è stato specificato" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "La voce di mailcap per il tipo %s non è stata trovata" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: troppo pochi argomenti" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: troppi argomenti" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Nessun soggetto, lo abbandono?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Nessun soggetto, abbandonato." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Rispondo a %s%s?" + +# FIXME - come tradurre questo messaggio? +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Rispondo a %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Non è visibile alcun messaggio segnato!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Includo il messaggio nella risposta?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Includo il messaggio citato..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Non ho potuto includere tutti i messaggi richiesti!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Inoltro come allegato?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Preparo il messaggio inoltrato..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Richiamo il messaggio rimandato?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Preparo il messaggio inoltrato..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Abbandono il messaggio non modificato?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Ho abbandonato il messaggio non modificato." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Il messaggio non è stato spedito." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Il messaggio è stato rimandato." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Non sono stati specificati destinatari!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Non sono stati specificati destinatari." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Nessun soggetto, abbandono l'invio?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Non è stato specificato un soggetto." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Spedisco il messaggio..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Impossibile spedire il messaggio." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Messaggio spedito." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Invio in background." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "No boundary parameter found! [segnala questo errore]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s non esiste più!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s non è un file regolare." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Impossibile aprire %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Errore nella spedizione del messaggio, il figlio è uscito con %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Output del processo di consegna" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Esco.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Preso %s... Esco.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Preso il segnale %d... Esco.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Esci " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Mese non valido: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Sconosciuto" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Inserisci il keyID per %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Chiavi PGP corrispondenti a \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Uso il keyID \"%s\" per %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "Uso il keyID \"%s\" per %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Errore: impossibile creare il sottoprocesso PGP --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Impossibile creare il filtro" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(nessuna mailbox)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Attenzione: impossibile salvare il certificato" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "Impossibile aprire il sottoprocesso PGP!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Fine dell'output di PGP --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Errore: impossibile creare il sottoprocesso PGP --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- I seguenti dati sono cifrati con PGP/MIME --]\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- I seguenti dati sono firmati --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "[-- Fine dei dati cifrati con PGP/MIME --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "[-- Fine dei dati firmati --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ordino la mailbox..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Could not find sorting function! [segnala questo bug]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(nessuna mailbox)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Il messaggio padre non è visibil in questa visualizzazione limitata." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Il messaggio padre non è disponibile." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Eseguo PGP..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Rimbalzo il messaggio a %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Rimbalzo i messaggi a %s...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "esabf" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certificato salvato" diff --git a/po/ja.gmo b/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f9d3d1212cfc010f73332a98ba06e2c01f4e919c GIT binary patch literal 74634 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 C5XKJx literal 0 HcmV?d00001 diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..0522e7b --- /dev/null +++ b/po/ja.po @@ -0,0 +1,4162 @@ +# Japanese messages for Mutt. +# Copyright (C) 2002 mutt-j ML members. +# FIRST AUTHOR Kikutani Makoto <kikutani@Galaxy.net>, 1999. +# 2nd AUTHOR OOTA,Toshiya <oota@mspd.mt.nec.co.jp>, 2002. +# (temporarily with Tamotsu TAKAHASHI <tamo@momonga-linux.org> for 1.5.x) +# +msgid "" +msgstr "" +"Project-Id-Version: 1.5.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-17 17:10+0900\n" +"Last-Translator: Tamotsu TAKAHASHI <tamo@momonga-linux.org>\n" +"Language-Team: mutt-j <mutt-j@ribbon.or.jp>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=euc-jp\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "%s ¤Î¥æ¡¼¥¶Ì¾: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s ¤Î¥Ñ¥¹¥ï¡¼¥É: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Ìá¤ë" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "ºï½ü" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "ºï½ü¤ò²ò½ü" + +#: addrbook.c:36 +msgid "Select" +msgstr "ÁªÂò" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "¥Ø¥ë¥×" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "ÊÌ̾¤¬¤Ê¤¤!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "ÊÌ̾" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "ÊÌ̾ÆþÎÏ: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "¤¹¤Ç¤Ë¤³¤Î̾Á°¤ÎÊÌ̾¤¬¤¢¤ë!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "·Ù¹ð: ¤³¤ÎÊÌ̾¤ÏÀµ¾ï¤ËÆ°ºî¤·¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£½¤Àµ?" + +#: alias.c:279 +msgid "Address: " +msgstr "¥¢¥É¥ì¥¹: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "¥¨¥é¡¼: '%s' ¤ÏÉÔÀµ¤Ê IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "¸Ä¿Í̾: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] λ²ò?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë: " + +#: alias.c:342 +msgid "Alias added." +msgstr "ÊÌ̾¤òÄɲä·¤¿¡£" + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "̾Á°¤Î¥Æ¥ó¥×¥ì¡¼¥È¤Ë°ìÃפµ¤»¤é¤ì¤Ê¤¤¡£Â³¹Ô?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤Ë %%s ¤¬É¬Í×" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "\"%s\" ¼Â¹Ô¥¨¥é¡¼!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "¥Ø¥Ã¥À²òÀϤΤ¿¤á¤Î¥Õ¥¡¥¤¥ë¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¡£" + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "¥Ø¥Ã¥Àºï½ü¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¡£" + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "%s ¤Î¤¿¤á¤Î mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤¬¤Ê¤¤¤Î¤Ç¶õ¥Õ¥¡¥¤¥ë¤òºîÀ®¡£" + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤Ë¤Ï %%s ¤¬É¬Í×" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "%s ¤Î¤¿¤á¤Î mailcap ÊÔ½¸¥¨¥ó¥È¥ê¤¬¤Ê¤¤" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "mailcap ¤Ë°ìÃ×¥¨¥ó¥È¥ê¤¬¤Ê¤¤¡£¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨Ãæ¡£" + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME ·Á¼°¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ÅºÉÕ¥Õ¥¡¥¤¥ë¤òɽ¼¨¤Ç¤­¤Ê¤¤¡£" + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "¥Õ¥£¥ë¥¿¤òºîÀ®¤Ç¤­¤Ê¤¤" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "¥Õ¥£¥ë¥¿¤òºîÀ®¤Ç¤­¤Ê¤¤" + +#: attach.c:824 +msgid "Write fault!" +msgstr "½ñ¤­¹þ¤ß¼ºÇÔ!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "¤É¤Î¤è¤¦¤Ë°õºþ¤¹¤ë¤«ÉÔÌÀ!" + +#: browser.c:41 +msgid "Chdir" +msgstr "¥Ç¥£¥ì¥¯¥È¥êÊѹ¹" + +#: browser.c:42 +msgid "Mask" +msgstr "¥Þ¥¹¥¯" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤Ê¤¤¡£" + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "¹ØÆÉ [%s], ¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê [%s], ¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ÏźÉդǤ­¤Ê¤¤!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯¤Ë°ìÃפ¹¤ë¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "ºîÀ®µ¡Ç½¤Ï IMAP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¤ß¤Î¥µ¥Ý¡¼¥È" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "ºï½üµ¡Ç½¤Ï IMAP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¤ß¤Î¥µ¥Ý¡¼¥È" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "ËÜÅö¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ \"%s\" ¤òºï½ü?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ïºï½ü¤µ¤ì¤¿¡£" + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ïºï½ü¤µ¤ì¤Ê¤«¤Ã¤¿¡£" + +#: browser.c:923 +msgid "Chdir to: " +msgstr "¥Ç¥£¥ì¥¯¥È¥êÊѹ¹Àè: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¹¥­¥ã¥ó¥¨¥é¡¼¡£" + +#: browser.c:975 +msgid "File Mask: " +msgstr "¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "µÕ½ç¤ÎÀ°Îó: (d)ÆüÉÕ,(a)ABC½ç,(z)¥µ¥¤¥º,(n)À°Î󤷤ʤ¤?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "À°Îó: (d)ÆüÉÕ,(a)ABC½ç,(z)¥µ¥¤¥º,(n)À°Î󤷤ʤ¤?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "¿·µ¬¥Õ¥¡¥¤¥ë̾: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Ï±ÜÍ÷¤Ç¤­¤Ê¤¤" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "¥Õ¥¡¥¤¥ë±ÜÍ÷¥¨¥é¡¼" + +#: buffy.c:442 +msgid "New mail in " +msgstr "¿·Ãå¥á¡¼¥ë¤¢¤ê: " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "¿§ %s ¤Ï¤³¤ÎüËö¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s ¤È¤¤¤¦¿§¤Ï¤Ê¤¤" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s ¤È¤¤¤¦¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ê¤¤" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s ¥³¥Þ¥ó¥É¤Ï¥¤¥ó¥Ç¥Ã¥¯¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Î¤ßÍ­¸ú" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë" + +#: color.c:563 +msgid "Missing arguments." +msgstr "°ú¿ô¤¬¤Ê¤¤¡£" + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s ¤È¤¤¤¦Â°À­¤Ï¤Ê¤¤" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "°ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "°ú¿ô¤¬Â¿¤¹¤®¤ë" + +#: color.c:721 +msgid "default colors not supported" +msgstr "´ûÄêÃͤ理¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "PGP ½ð̾¤ò¸¡¾Ú?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "ɽ¼¨ÍÑ¥Õ¥£¥ë¥¿¤òºîÀ®¤Ç¤­¤Ê¤¤" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥³¥Ô¡¼¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME ½ð̾¤Î¸¡¾Ú¤ËÀ®¸ù¤·¤¿¡£" + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "S/MIME ¾ÚÌÀ½ñ½êÍ­¼Ô¤¬Á÷¿®¼Ô¤Ë°ìÃפ·¤Ê¤¤¡£" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME ½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Ê¤«¤Ã¤¿¡£" + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP ½ð̾¤Î¸¡¾Ú¤ËÀ®¸ù¤·¤¿¡£" + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP ½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Ê¤«¤Ã¤¿¡£" + +#: commands.c:223 +msgid "Command: " +msgstr "¥³¥Þ¥ó¥É: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "¥á¥Ã¥»¡¼¥¸¤ÎºÆÁ÷Àè: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ÎºÆÁ÷Àè: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "¥¢¥É¥ì¥¹²òÀÏ¥¨¥é¡¼!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "ÉÔÀµ¤Ê IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸ºÆÁ÷" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸ºÆÁ÷" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "¥á¥Ã¥»¡¼¥¸¤ÏºÆÁ÷¤µ¤ì¤Ê¤«¤Ã¤¿¡£" + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "¥á¥Ã¥»¡¼¥¸¤ÏºÆÁ÷¤µ¤ì¤Ê¤«¤Ã¤¿¡£" + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷¤·¤¿¡£" + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷¤·¤¿¡£" + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "¥Õ¥£¥ë¥¿¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤¤" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "¥³¥Þ¥ó¥É¤Ø¤Î¥Ñ¥¤¥×: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "°õºþ¥³¥Þ¥ó¥É¤¬Ì¤ÄêµÁ¡£" + +#: commands.c:483 +msgid "Print message?" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò°õºþ?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ò°õºþ?" + +#: commands.c:492 +msgid "Message printed" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤µ¤ì¤¿" + +#: commands.c:492 +msgid "Messages printed" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤µ¤ì¤¿" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï°õºþ¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"µÕ½ç¤ÎÀ°Îó d)»þ/f)Á÷¼Ô/r)Ãå½ç/s)Âê/o)°¸Àè/t)¥¹¥ì/u)̵/z)¥µ¥¤¥º/c)ÆÀÅÀ?:" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "À°Îó d)»þ/f)Á÷¼Ô/r)Ãå½ç/s)Âê/o)°¸Àè/t)¥¹¥ì/u)̵/z)¥µ¥¤¥º/c)ÆÀÅÀ?:" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "¥·¥§¥ë¥³¥Þ¥ó¥É: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥Ç¥³¡¼¥É¤·¤ÆÊݸ" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥Ç¥³¡¼¥É¤·¤Æ¥³¥Ô¡¼" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÉü¹æ²½¤·¤ÆÊݸ" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÉü¹æ²½¤·¤Æ¥³¥Ô¡¼" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊݸ" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "%s¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥³¥Ô¡¼" + +#: commands.c:706 +msgid " tagged" +msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ò" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "%s ¤Ë¥³¥Ô¡¼Ãæ..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Á÷¿®»þ¤Ë %s ¤ËÊÑ´¹?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type¤ò %s ¤ËÊѹ¹¤·¤¿¡£" + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "ʸ»ú¥»¥Ã¥È¤ò %s ¤ËÊѹ¹¤·¤¿; %s¡£" + +#: commands.c:914 +msgid "not converting" +msgstr "ÊÑ´¹¤Ê¤·" + +#: commands.c:914 +msgid "converting" +msgstr "ÊÑ´¹¤¢¤ê" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤¡£" + +#: compose.c:84 +msgid "Send" +msgstr "Á÷¿®" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Ãæ»ß" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "¥Õ¥¡¥¤¥ëźÉÕ" + +#: compose.c:90 +msgid "Descrip" +msgstr "ÆâÍÆÀâÌÀ" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "½ð̾,°Å¹æ²½" + +#: compose.c:129 +msgid "Encrypt" +msgstr "°Å¹æ²½" + +#: compose.c:131 +msgid "Sign" +msgstr "½ð̾" + +#: compose.c:133 +msgid "Clear" +msgstr "ʿʸ" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " ½ð̾: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<´ûÄêÃÍ>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr " °Å¹æ²½Êý¼°: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (e)°Å¹æ²½,(s)½ð̾,(a)..¤È¤·¤Æ½ð̾,(b)ξ¼Ô,(f)²ò½ü?" + +#: compose.c:166 +msgid "esabf" +msgstr "esabf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "..¤È¤·¤Æ½ð̾: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (e)°Å¹æ²½,(s)½ð̾,(w)..¤Ç°Å¹æ²½,(a)..¤È¤·¤Æ½ð̾,(b)ξ¼Ô,(f)²ò½ü?" + +#: compose.c:228 +msgid "eswabf" +msgstr "eswabf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, (f)²ò½ü? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345f" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ¤Ï¤â¤Ï¤ä¸ºß¤·¤Ê¤¤!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] ¤ÏÊѹ¹¤µ¤ì¤¿¡£¥¨¥ó¥³¡¼¥É¹¹¿·?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- źÉÕ¥Õ¥¡¥¤¥ë" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "·Ù¹ð: '%s' ¤ÏÉÔÀµ¤Ê IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Í£°ì¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤Ï¤¤¤±¤Ê¤¤¡£" + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "\"%s\" Ãæ¤ËÉÔÀµ¤Ê IDN: '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "ÁªÂò¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òźÉÕÃæ..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "%s ¤ÏźÉդǤ­¤Ê¤¤!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òźÉÕ¤¹¤ë¤¿¤á¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥ª¡¼¥×¥ó" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "¤½¤Î¥Õ¥©¥ë¥À¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£" + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "źÉÕ¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°¤òÉÕ¤±¤è!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "źÉդǤ­¤Ê¤¤!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "¥³¡¼¥ÉÊÑ´¹¤Ï¥Æ¥­¥¹¥È·¿ÅºÉÕ¥Õ¥¡¥¤¥ë¤Ë¤Î¤ßÍ­¸ú¡£" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "¸½ºß¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÏÊÑ´¹¤µ¤ì¤Ê¤¤¡£" + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "¸½ºß¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÏÊÑ´¹¤µ¤ì¤ë¡£" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "ÉÔÀµ¤Ê¥¨¥ó¥³¡¼¥ÉË¡¡£" + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Î¥³¥Ô¡¼¤òÊݸ?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "¥ê¥Í¡¼¥à (°ÜÆ°) Àè: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "%s ¤ò°À­Ä´ºº¤Ç¤­¤Ê¤¤: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "¿·µ¬¥Õ¥¡¥¤¥ë: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type ¤Ï base/sub ¤È¤¤¤¦·Á¼°¤Ë¤¹¤ë¤³¤È" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "%s ¤ÏÉÔÌÀ¤Ê Content-Type" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤­¤Ê¤¤" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "¤Ä¤Þ¤êźÉÕ¥Õ¥¡¥¤¥ë¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤¿¤È¤¤¤¦¤³¤È¤À" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò½ñ¤­¤«¤±¤ÇÊÝα?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë½ñ¤­¹þ¤à" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤Ë½ñ¤­¹þ¤ßÃæ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï½ñ¤­¹þ¤Þ¤ì¤¿¡£" + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME ¤¬´û¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¡£²ò½ü¤·¤Æ·Ñ³?" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP ¤¬´û¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¡£²ò½ü¤·¤Æ·Ñ³?" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (¸½ºß»þ¹ï: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s ½ÐÎϤϰʲ¼¤ÎÄ̤ê%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¹¤Ù¤Æ¥á¥â¥ê¤«¤é¾Ãµî¤µ¤ì¤¿¡£" + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "PGP ¥Ñ¥¹¥Õ¥ì¡¼¥ºÆþÎÏ:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "S/MIME ¥Ñ¥¹¥Õ¥ì¡¼¥ºÆþÎÏ:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "ÅÁÅýŪ¤Ê (¥¤¥ó¥é¥¤¥ó¤Î) PGP ¥á¥Ã¥»¡¼¥¸¤òºîÀ®?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "PGP µ¯Æ°Ãæ..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "ÆâÍÆ¥Ò¥ó¥È¤Î¤Ê¤¤ S/MIME ¥á¥Ã¥»¡¼¥¸¤Ï̤¥µ¥Ý¡¼¥È¡£" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "PGP ¸°¤ÎŸ³«¤ò»î¹ÔÃæ...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "S/MIME ¾ÚÌÀ½ñ¤ÎŸ³«¤ò»î¹ÔÃæ...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- ¥¨¥é¡¼: multipart/signed ¹½Â¤¤¬Ì·½â¤·¤Æ¤¤¤ë! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- ¥¨¥é¡¼: ÉÔÌÀ¤Ê multipart/signed ¥×¥í¥È¥³¥ë %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- ·Ù¹ð: ¤³¤Î Mutt ¤Ç¤Ï %s/%s ½ð̾¤ò¸¡¾Ú¤Ç¤­¤Ê¤¤ --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï½ð̾¤µ¤ì¤Æ¤¤¤ë --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- ·Ù¹ð: °ì¤Ä¤â½ð̾¤ò¸¡½Ð¤Ç¤­¤Ê¤«¤Ã¤¿ --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- ½ð̾¥Ç¡¼¥¿½ªÎ» --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "yes" + +#: curs_lib.c:158 +msgid "no" +msgstr "no" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Mutt ¤òÈ´¤±¤ë?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "ÉÔÌÀ¤Ê¥¨¥é¡¼" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "³¤±¤ë¤Ë¤Ï²¿¤«¥­¡¼¤ò..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr "('?' ¤Ç°ìÍ÷): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "³«¤¤¤Æ¤¤¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤Ê¤¤¡£" + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£" + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÏÆɤ߽Ф·ÀìÍÑ¡£" + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "¤³¤Îµ¡Ç½¤Ï¥á¥Ã¥»¡¼¥¸ÅºÉե⡼¥É¤Ç¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "²Ä»ë¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Æɤ߽Ф·ÀìÍѥ᡼¥ë¥Ü¥Ã¥¯¥¹¤Ç¤ÏÊѹ¹¤Î½ñ¤­¹þ¤ß¤òÀÚÂؤǤ­¤Ê¤¤!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "¥Õ¥©¥ë¥Àæ½Ð»þ¤Ë¥Õ¥©¥ë¥À¤Ø¤ÎÊѹ¹¤¬½ñ¤­¹þ¤Þ¤ì¤ë¡£" + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "¥Õ¥©¥ë¥À¤Ø¤ÎÊѹ¹¤Ï½ñ¤­¹þ¤Þ¤ì¤Ê¤¤¡£" + +#: curs_main.c:397 +msgid "Quit" +msgstr "Ãæ»ß" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Êݸ" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "¥á¡¼¥ë" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "ÊÖ¿®" + +#: curs_main.c:403 +msgid "Group" +msgstr "Á´°÷¤ËÊÖ¿®" + +# ¡ÖÉÔÀµ¤Ê²ÄǽÀ­¤¢¤ê¡×¤À¤È½ÅÂç¤Ê¤³¤È¤Î¤è¤¦¤Ë»×¤¨¤Æ¤·¤Þ¤¦¤Î¤ÇÊѹ¹¤·¤¿¡£ +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬³°Éô¤«¤éÊѹ¹¤µ¤ì¤¿¡£¥Õ¥é¥°¤¬Àµ³Î¤Ç¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£" + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "¤³¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¿·Ãå¥á¡¼¥ë¡£" + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬³°Éô¤«¤éÊѹ¹¤µ¤ì¤¿¡£" + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£" + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "²¿¤â¤·¤Ê¤¤¡£" + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤ò»ØÄê: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "°ú¿ô¤Ï¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£" + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "¤½¤Î¥á¥Ã¥»¡¼¥¸¤Ï²Ä»ë¤Ç¤Ï¤Ê¤¤¡£" + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "ÉÔÀµ¤Ê¥á¥Ã¥»¡¼¥¸Èֹ档" + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "¸½ºßÍ­¸ú¤ÊÀ©¸Â¥Ñ¥¿¡¼¥ó¤Ï¤Ê¤¤¡£" + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "À©¸Â¥Ñ¥¿¡¼¥ó: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨¤òÀ©¸Â¤¹¤ë¥Ñ¥¿¡¼¥ó: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Mutt ¤òÃæ»ß?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°¤òÉÕ¤±¤ë¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "¥á¥Ã¥»¡¼¥¸¤Îºï½ü¤ò²ò½ü¤¹¤ë¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥¿¥°¤ò³°¤¹¤¿¤á¤Î¥Ñ¥¿¡¼¥ó: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Æɤ߽Ф·ÀìÍѥ⡼¥É¤Ç¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥ª¡¼¥×¥ó" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥ª¡¼¥×¥ó" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ¤Ï¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ç¤Ï¤Ê¤¤¡£" + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Êݸ¤·¤Ê¤¤¤Ç Mutt ¤òÈ´¤±¤ë?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸¡£" + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "̤ºï½ü¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£" + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥á¥Ã¥»¡¼¥¸¡£" + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "¸¡º÷¤Ï°ìÈÖ¾å¤ËÌá¤Ã¤¿¡£" + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "¸¡º÷¤Ï°ìÈÖ²¼¤ËÌá¤Ã¤¿¡£" + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤" + +# ÆüËܸì¤Ç¤Ï¸ì½ç¤¬°ã¤¦¤Î¤Ç¤¹ (T_T +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " (¤³¤ÎÀ©¸Âɽ¼¨¾õÂ֤ǤÏ)" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "POP ¥µ¡¼¥Ð¾å¤Ç¤Ï¡Ö½ÅÍסץե饰¤òÊѹ¹¤Ç¤­¤Ê¤¤¡£" + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "¤â¤¦¥¹¥ì¥Ã¥É¤¬¤Ê¤¤¡£" + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥¹¥ì¥Ã¥É¡£" + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "¥¹¥ì¥Ã¥Éɽ¼¨¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¡£" + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "¥¹¥ì¥Ã¥ÉÃæ¤Ë̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ë¡£" + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "POP ¥µ¡¼¥Ð¾å¤Ç¤Ï¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸¤Ç¤­¤Ê¤¤¡£" + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\t¹Ô¤¬ ~ ¤Ç»Ï¤Þ¤ë¤È¤­¤ÎºÇ½é¤Î ~ ¤òÆþÎÏ\n" +"~b users\tBcc: ¥Õ¥£¡¼¥ë¥É¤Ë¥æ¡¼¥¶¤òÄɲÃ\n" +"~c users\tCc: ¥Õ¥£¡¼¥ë¥É¤Ë¥æ¡¼¥¶¤òÄɲÃ\n" +"~f messages\t¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤ß\n" +"~F messages\t¥Ø¥Ã¥À¤â´Þ¤á¤ë¤³¤È¤ò½ü¤±¤Ð ~f ¤ÈƱ¤¸\n" +"~h\t\t¥á¥Ã¥»¡¼¥¸¥Ø¥Ã¥À¤òÊÔ½¸\n" +"~m messages\t¥á¥Ã¥»¡¼¥¸¤ò°úÍѤΰ٤˼è¤ê¹þ¤ß\n" +"~M messages\t¥Ø¥Ã¥À¤ò´Þ¤á¤ë¤³¤È¤ò½ü¤±¤Ð ~m ¤ÈƱ¤¸\n" +"~p\t\t¥á¥Ã¥»¡¼¥¸¤ò°õºþ\n" +"~q\t\t¥Õ¥¡¥¤¥ë¤Ø½ñ¤­¹þ¤ó¤Ç¥¨¥Ç¥£¥¿¤ò½ªÎ»\n" +"~r file\t\t¥¨¥Ç¥£¥¿¤Ë¥Õ¥¡¥¤¥ë¤òÆɤ߽Ф·\n" +"~t users\tTo: ¥Õ¥£¡¼¥ë¥É¤Ë¥æ¡¼¥¶¤òÄɲÃ\n" +"~u\t\tÁ°¤Î¹Ô¤òºÆ¸Æ½Ð¤·\n" +"~v\t\t$visual ¥¨¥Ç¥£¥¿¤Ç¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸\n" +"~w file\t\t¥á¥Ã¥»¡¼¥¸¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤ß\n" +"~x\t\tÊѹ¹¤òÃæ»ß¤·¤Æ¥¨¥Ç¥£¥¿¤ò½ªÎ»\n" +"~?\t\t¤³¤Î¥á¥Ã¥»¡¼¥¸\n" +".\t\t¤³¤Îʸ»ú¤Î¤ß¤Î¹Ô¤ÇÆþÎϤò½ªÎ»\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d ¤ÏÉÔÀµ¤Ê¥á¥Ã¥»¡¼¥¸Èֹ档\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(¥á¥Ã¥»¡¼¥¸¤Î½ªÎ»¤Ï . ¤Î¤ß¤Î¹Ô¤òÆþÎÏ)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î»ØÄ꤬¤Ê¤¤¡£\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "¥á¥Ã¥»¡¼¥¸ÆâÍÆ:\n" + +# ¥á¥Ã¥»¡¼¥¸ÆâÍƤÎɽ¼¨½ªÎ»¸å¤Ë½Ð¤ë¤Î¤ÇÌ¿Îá¤À¤È»×¤¦¡£ +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(·Ñ³¤»¤è)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "¥Õ¥¡¥¤¥ë̾¤Î»ØÄ꤬¤Ê¤¤¡£\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "¥á¥Ã¥»¡¼¥¸¤ËÆâÍƤ¬°ì¹Ô¤â¤Ê¤¤¡£\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "%s Ãæ¤ËÉÔÀµ¤Ê IDN: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s ¤ÏÉÔÌÀ¤Ê¥¨¥Ç¥£¥¿¥³¥Þ¥ó¥É (~? ¤Ç¥Ø¥ë¥×)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "°ì»þ¥Õ¥©¥ë¥À¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "°ì»þ¥á¡¼¥ë¥Õ¥©¥ë¥À¤Ë½ñ¤­¹þ¤á¤Ê¤«¤Ã¤¿: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "°ì»þ¥á¡¼¥ë¥Õ¥©¥ë¥À¤ÎºÇ¸å¤Î¹Ô¤ò¾Ã¤»¤Ê¤«¤Ã¤¿: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¤¬¶õ!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "¥á¥Ã¥»¡¼¥¸¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Ê¤¤!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤: %s" + +# %s ¤Ï strerror(errno) ¤Î¤è¤¦¤Ç¤¢¤ë¡£ +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "¥Õ¥©¥ë¥À¤ËÄɲäǤ­¤Ê¤¤: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "¥¨¥é¡¼¡£°ì»þ¥Õ¥¡¥¤¥ë %s ¤ÏÊÝ´É" + +#: flags.c:332 +msgid "Set flag" +msgstr "¥Õ¥é¥°ÀßÄê" + +#: flags.c:332 +msgid "Clear flag" +msgstr "¥Õ¥é¥°²ò½ü" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- ¥¨¥é¡¼: ¤É¤Î Multipart/Alternative ¥Ñ¡¼¥È¤âɽ¼¨¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- źÉÕ¥Õ¥¡¥¤¥ë #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- ¥¿¥¤¥×: %s/%s, ¥¨¥ó¥³¡¼¥ÉË¡: %s, ¥µ¥¤¥º: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- %s ¤ò»È¤Ã¤¿¼«Æ°É½¼¨ --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "¼«Æ°É½¼¨¥³¥Þ¥ó¥É %s µ¯Æ°" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- %s ¤ò¼Â¹Ô¤Ç¤­¤Ê¤¤¡£ --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- %s ¤Îɸ½à¥¨¥é¡¼½ÐÎϤò¼«Æ°É½¼¨ --]\n" + +# ¡Ö»ØÄê¡×¤Ã¤ÆɬÍס©¤Ï¤ß¤Ç¤½¤¦¤Ê¤ó¤Ç¤¹¤±¤É +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- ¥¨¥é¡¼: message/external-body ¤Ë access-type ¥Ñ¥é¥á¡¼¥¿¤Î»ØÄ꤬¤Ê¤¤ --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- ¤³¤Î %s/%s ·Á¼°ÅºÉÕ¥Õ¥¡¥¤¥ë" + +# °ì¹Ô¤Ë¤ª¤µ¤Þ¤é¤Ê¤¤¤Èµ¤»ý¤Á°­¤¤¤Î¤Ç¡Ö¥µ¥¤¥º¡×¤ò¤±¤º¤Ã¤¿¤ê¤·¤¿ +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(%s ¥Ð¥¤¥È)" + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "¤Ïºï½üºÑ¤ß --]\n" + +# ËÜÅö¤Ï¡Ö¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¡Á·î¡ÁÆü¤Ëºï½üºÑ¤ß¡×¤È¤·¤¿¤¤¤Î¤À¤¬¡£ +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- (%s ¤Ëºï½ü) --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- ̾Á°: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- ¤³¤Î %s/%s ·Á¼°ÅºÉÕ¥Õ¥¡¥¤¥ë¤Ï´Þ¤Þ¤ì¤Æ¤ª¤é¤º¡¢ --]\n" + +# °ì¹Ô¤Ë¤·¤Æ¤âÂç¾æÉפÀ¤È»×¤¦¤Î¤À¤¬¤Ê¤¡¡Ä¡Ä +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- ¤«¤Ä¡¢»ØÄꤵ¤ì¤¿³°Éô¤Î¥½¡¼¥¹¤Ï´ü¸Â¤¬ --]\n" +"[-- Ëþλ¤·¤Æ¤¤¤ë¡£ --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- ¤«¤Ä¡¢»ØÄꤵ¤ì¤¿ access-type %s ¤Ï̤¥µ¥Ý¡¼¥È --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "¥¨¥é¡¼: multipart/signed ¤Ë¥×¥í¥È¥³¥ë¤¬¤Ê¤¤¡£" + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "¥¨¥é¡¼: multipart/encrypted ¤Ë¥×¥í¥È¥³¥ë¥Ñ¥é¥á¡¼¥¿¤¬¤Ê¤¤!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s ·Á¼°¤Ï̤¥µ¥Ý¡¼¥È " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(¤³¤Î¥Ñ¡¼¥È¤òɽ¼¨¤¹¤ë¤Ë¤Ï '%s' ¤ò»ÈÍÑ)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(¥­¡¼¤Ë 'view-attachments' ¤ò³ä¤êÅö¤Æ¤ëɬÍפ¬¤¢¤ë!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: ¥Õ¥¡¥¤¥ë¤òźÉդǤ­¤Ê¤¤" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "¥¨¥é¡¼: ¤³¤Î¥Ð¥°¤ò¥ì¥Ý¡¼¥È¤»¤è" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<ÉÔÌÀ>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"°ìÈÌŪ¤Ê¥­¡¼¥Ð¥¤¥ó¥É:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"̤¥Ð¥¤¥ó¥É¤Îµ¡Ç½:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "%s ¤Î¥Ø¥ë¥×" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: ¥Õ¥Ã¥¯Æ⤫¤é¤Ï unhook * ¤Ç¤­¤Ê¤¤" + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: %s ¤ÏÉÔÌÀ¤Ê¥Õ¥Ã¥¯¥¿¥¤¥×" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: %s ¤ò %s Æ⤫¤éºï½ü¤Ç¤­¤Ê¤¤¡£" + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "ÍøÍѤǤ­¤ëǧ¾Ú½èÍý¤¬¤Ê¤¤" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "ǧ¾ÚÃæ (ƿ̾)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "ƿ̾ǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¡£" + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "ǧ¾ÚÃæ (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 ǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¡£" + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "ǧ¾ÚÃæ (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI ǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¡£" + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN ¤Ï¤³¤Î¥µ¡¼¥Ð¤Ç¤Ï̵¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë" + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "¥í¥°¥¤¥óÃæ..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "¥í¥°¥¤¥ó¤Ë¼ºÇÔ¤·¤¿¡£" + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "ǧ¾ÚÃæ (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL ǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¡£" + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s ¤ÏÉÔÀµ¤Ê IMAP ¥Ñ¥¹" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "¥Í¡¼¥à¥¹¥Ú¡¼¥¹¼èÆÀÃæ..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "¥Õ¥©¥ë¥À¥ê¥¹¥È¼èÆÀÃæ..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "¤½¤Î¤è¤¦¤Ê¥Õ¥©¥ë¥À¤Ï¤Ê¤¤" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºîÀ®: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤Ï̾Á°¤¬É¬Íס£" + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬ºîÀ®¤µ¤ì¤¿¡£" + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÊĤ¸¤¿" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Ã×̿Ū¥¨¥é¡¼¡£¥á¥Ã¥»¡¼¥¸¿ô¤¬Æ±´ü¤·¤Æ¤¤¤Ê¤¤!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "%s ¤Ø¤ÎÀܳ¤ò½ªÎ»Ãæ..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "¤³¤Î IMAP ¥µ¡¼¥Ð¤Ï¸Å¤¤¡£¤³¤ì¤Ç¤Ï Mutt ¤Ï¤¦¤Þ¤¯µ¡Ç½¤·¤Ê¤¤¡£" + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "¥µ¡¼¥Ð¤«¤éͽ´ü¤»¤ÌÈ¿±þ¤ò¼õ¤±¼è¤Ã¤¿: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "TLS ¤ò»È¤Ã¤¿°ÂÁ´¤ÊÀܳ?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "TLS Àܳ¤ò³ÎΩ¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "%s ¤òÁªÂòÃæ..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¥ª¡¼¥×¥ó»þ¥¨¥é¡¼" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "¤³¤Î¥µ¡¼¥Ð¤Î IMAP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤ÏÄɲäǤ­¤Ê¤¤" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "%s ¤òºîÀ®?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "IMAP ¥µ¡¼¥Ð¤Ø¤ÎÀܳ¤ò½ªÎ»Ãæ..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "%d ¸Ä¤Î¥á¥Ã¥»¡¼¥¸¤Ëºï½ü¤ò¥Þ¡¼¥¯Ãæ..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "ºï½ü¤Ë¼ºÇÔ¤·¤¿" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "¥á¥Ã¥»¡¼¥¸¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤òÊݸÃæ... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "¥µ¡¼¥Ð¤«¤é¥á¥Ã¥»¡¼¥¸¤òºï½üÃæ..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: ºï½ü¤Ë¼ºÇÔ¤·¤¿" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "¥¯¥í¡¼¥º¤Ë¼ºÇÔ¤·¤¿" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "ÉÔÀµ¤Ê¥á¡¼¥ë¥Ü¥Ã¥¯¥¹Ì¾" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "%s ¤Î¹ØÆɤò³«»ÏÃæ..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "%s ¤Î¹ØÆɤò¼è¤ê¾Ã¤·Ãæ..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Î IMAP ¥µ¡¼¥Ð¤«¤é¤Ï¤Ø¥Ã¥À¤ò¼èÆÀ¤Ç¤­¤Ê¤¤¡£" + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë %s ¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "¥á¥Ã¥»¡¼¥¸¥Ø¥Ã¥À¼èÆÀÃæ... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "¥á¥Ã¥»¡¼¥¸¼èÆÀÃæ..." + +# ¤³¤Î Try ¤¬Ì¿Îá¤Ç¤Ê¤±¤ì¤Ð¤è¤¤¤Î¤À¤¬¡£ +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "¥á¥Ã¥»¡¼¥¸º÷°ú¤¬ÉÔÀµ¡£¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ºÆ¥ª¡¼¥×¥ó¤ò»î¤ß¤ë¡£" + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥¢¥Ã¥×¥í¡¼¥ÉÃæ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "%d ¥á¥Ã¥»¡¼¥¸¤ò %s ¤Ë¥³¥Ô¡¼Ãæ..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë¥³¥Ô¡¼Ãæ..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "·Ñ³?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias (ÊÌ̾): ¥¢¥É¥ì¥¹¤¬¤Ê¤¤" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "·Ù¹ð: ÉÔÀµ¤Ê IDN '%s' ¤¬¥¨¥¤¥ê¥¢¥¹ '%s' Ãæ¤Ë¤¢¤ë¡£\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "ÉÔÀµ¤Ê¤Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s ¤ÏÉÔÌÀ¤ÊÀ°ÎóÊýË¡" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): Àµµ¬É½¸½¤Ç¥¨¥é¡¼: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s ¤ÏÉÔÌÀ¤ÊÊÑ¿ô" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "reset ¤È¶¦¤Ë»È¤¦ÀÜƬ¼­¤¬ÉÔÀµ" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "reset ¤È¶¦¤Ë»È¤¦Ãͤ¬ÉÔÀµ" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s ¤ÏÀßÄꤵ¤ì¤Æ¤¤¤ë" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s ¤Ï²ò½ü¤µ¤ì¤Æ¤¤¤ë" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s ¤ÏÉÔÀµ¤Ê¥á¡¼¥ë¥Ü¥Ã¥¯¥¹·Á¼°" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s ¤ÏÉÔÀµ¤ÊÃÍ" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s ¤ÏÉÔÌÀ¤Ê¥¿¥¤¥×" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s ¤ÏÉÔÌÀ¤Ê¥¿¥¤¥×" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "%s ¤ò°À­Ä´ºº¤Ç¤­¤Ê¤¤: %s" + +# regular file ¤Ã¤Æ¡ÖÄ̾ï¥Õ¥¡¥¤¥ë¡×¤Ç¤¹¤«¡© +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ¤Ïɸ½à¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¤¡£" + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "%s Ãæ¤Î %d ¹ÔÌܤǥ¨¥é¡¼: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: %s Ãæ¤Ç¥¨¥é¡¼" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: %s Ãæ¤Ë¥¨¥é¡¼¤¬Â¿¤¹¤®¤ë¤Î¤ÇÆɤ߽Ф·Ãæ»ß" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: %s ¤Ç¥¨¥é¡¼" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: °ú¿ô¤¬Â¿¤¹¤®¤ë" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: ÉÔÌÀ¤Ê¥³¥Þ¥ó¥É" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç¥¨¥é¡¼: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ò¼±Ê̤Ǥ­¤Ê¤¤" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "¥æ¡¼¥¶Ì¾¤ò¼±Ê̤Ǥ­¤Ê¤¤" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "¥Þ¥¯¥í¤Î¥ë¡¼¥×¤¬¸¡½Ð¤µ¤ì¤¿¡£" + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "¥­¡¼¤Ï¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "¥­¡¼¤Ï¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¡£'%s' ¤ò²¡¤¹¤È¥Ø¥ë¥×" + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: °ú¿ô¤¬Â¿¤¹¤®¤ë" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s ¤È¤¤¤¦¥á¥Ë¥å¡¼¤Ï¤Ê¤¤" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "¥­¡¼¥·¡¼¥±¥ó¥¹¤¬¤Ê¤¤" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: °ú¿ô¤¬Â¿¤¹¤®¤ë" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s ¤È¤¤¤¦µ¡Ç½¤Ï¥Þ¥Ã¥×Ãæ¤Ë¤Ê¤¤" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: ¥­¡¼¥·¡¼¥±¥ó¥¹¤¬¤Ê¤¤" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: °ú¿ô¤¬Â¿¤¹¤®¤ë" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: °ú¿ô¤¬¤Ê¤¤" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s ¤È¤¤¤¦µ¡Ç½¤Ï¤Ê¤¤" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "¥­¡¼¤ò²¡¤¹¤È³«»Ï (½ªÎ»¤Ï ^G): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "ʸ»ú = %s, 8¿Ê = %o, 10¿Ê = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "Æ°ºî¤Î»ØÄ꤬¤Ê¤¤" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "¾ò·ïÉÕ¤­¼Â¹Ô¤Î½ªÎ» (²¿¤â¤·¤Ê¤¤)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "mailcap ¤ò»È¤Ã¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤ò¶¯À©É½¼¨" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Éû¥Ñ¡¼¥È¤Îɽ¼¨¤òÀÚÂØ" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "¥Ú¡¼¥¸¤Î°ìÈÖ²¼¤Ë°ÜÆ°" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¾¤Î¥æ¡¼¥¶¤ËºÆÁ÷" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "¤³¤Î¥Ç¥£¥ì¥¯¥È¥êÃæ¤Î¿·¤·¤¤¥Õ¥¡¥¤¥ë¤òÁªÂò" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "¥Õ¥¡¥¤¥ë¤ò±ÜÍ÷" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ÁªÂòÃæ¤Î¥Õ¥¡¥¤¥ë̾¤òɽ¼¨" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "¸½ºß¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¹ØÆÉ(IMAP¤Î¤ß)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "¸½ºß¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¹ØÆɤòÃæ»ß(IMAP¤Î¤ß)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "¡ÖÁ´¥Ü¥Ã¥¯¥¹/¹ØÆÉÃæ¤Î¤ß¡×±ÜÍ÷ÀÚÂØ(IMAP¤Î¤ß)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "¿·Ãå¥á¡¼¥ë¤Î¤¢¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò°ìÍ÷ɽ¼¨" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤òÊѹ¹" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¿·Ãå¥á¡¼¥ë¤¬¤¢¤ë¤«¸¡ºº" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ë¥Õ¥¡¥¤¥ë¤òźÉÕ" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ë¥á¥Ã¥»¡¼¥¸¤òźÉÕ" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "BCC¥ê¥¹¥È¤òÊÔ½¸" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "CC¥ê¥¹¥È¤òÊÔ½¸" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆÀâÌÀʸ¤òÊÔ½¸" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î content-trasfer-encoding ¤òÊÔ½¸" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥³¥Ô¡¼¤òÊݸ¤¹¤ë¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "źÉÕ¤¹¤ë¥Õ¥¡¥¤¥ë¤òÊÔ½¸" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "From ¥Õ¥£¡¼¥ë¥É¤òÊÔ½¸" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥Ø¥Ã¥À¤´¤ÈÊÔ½¸" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò mailcap ¥¨¥ó¥È¥ê¤ò»È¤Ã¤ÆÊÔ½¸" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "Reply-To ¥Õ¥£¡¼¥ë¥É¤òÊÔ½¸" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÂê̾¤òÊÔ½¸" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "TO ¥ê¥¹¥È¤òÊÔ½¸" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "¿·¤·¤¤¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºîÀ®(IMAP¤Î¤ß)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î content-type ¤òÊÔ½¸" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î°ì»þŪ¤Ê¥³¥Ô¡¼¤òºîÀ®" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ë ispell ¤ò¼Â¹Ô" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "mailcap ¥¨¥ó¥È¥ê¤ò»È¤Ã¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤òºîÀ®" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "¤³¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤Î¥³¡¼¥ÉÊÑ´¹¤Î̵ͭ¤òÀÚÂØ" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò¡Ö½ñ¤­¤«¤±¡×¤Ë¤¹¤ë" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò¥ê¥Í¡¼¥à(°ÜÆ°)" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "disposition ¤Î inline/attachment ¤òÀÚÂØ" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "Á÷¿®¸å¤Ë¥Õ¥¡¥¤¥ë¤ò¾Ã¤¹¤«¤É¤¦¤«¤òÀÚÂØ" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Î¥¨¥ó¥³¡¼¥É¾ðÊó¤ò¹¹¿·" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "¥Õ¥©¥ë¥À¤Ë¥á¥Ã¥»¡¼¥¸¤ò½ñ¤­¹þ¤à" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥Õ¥¡¥¤¥ë¤ä¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¥³¥Ô¡¼" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¼Ô¤«¤éÊÌ̾¤òºîÀ®" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "¥¹¥¯¥ê¡¼¥ó¤Î°ìÈÖ²¼¤Ë¥¨¥ó¥È¥ê°ÜÆ°" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "¥¹¥¯¥ê¡¼¥ó¤ÎÃæ±û¤Ë¥¨¥ó¥È¥ê°ÜÆ°" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "¥¹¥¯¥ê¡¼¥ó¤Î°ìÈÖ¾å¤Ë¥¨¥ó¥È¥ê°ÜÆ°" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "text/plain ¤Ë¥Ç¥³¡¼¥É¤·¤¿¥³¥Ô¡¼¤òºîÀ®" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "text/plain ¤Ë¥Ç¥³¡¼¥É¤·¤¿¥³¥Ô¡¼¤òºîÀ®¤·ºï½ü" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "¸½ºß¤Î¥¨¥ó¥È¥ê¤òºï½ü" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "¸½ºß¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºï½ü(IMAP¤Î¤ß)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "Éû¥¹¥ì¥Ã¥É¤Î¥á¥Ã¥»¡¼¥¸¤ò¤¹¤Ù¤Æºï½ü" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "¥¹¥ì¥Ã¥É¤Î¥á¥Ã¥»¡¼¥¸¤ò¤¹¤Ù¤Æºï½ü" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "Á÷¿®¼Ô¤Î´°Á´¤Ê¥¢¥É¥ì¥¹¤òɽ¼¨" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¡¢¥Ø¥Ã¥ÀÍ޻ߤòÀÚÂØ" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òɽ¼¨" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "À¸¤Î¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "¥«¡¼¥½¥ë¤ÎÁ°¤Îʸ»ú¤òºï½ü" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "¥«¡¼¥½¥ë¤ò°ìʸ»úº¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "¥«¡¼¥½¥ë¤òñ¸ì¤ÎÀèƬ¤Ë°ÜÆ°" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "¹ÔƬ¤Ë°ÜÆ°" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "ÅþÃåÍѥ᡼¥ë¥Ü¥Ã¥¯¥¹¤ò½ä²ó" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "¥Õ¥¡¥¤¥ë̾¤äÊÌ̾¤òÊä´°" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "Ì䤤¹ç¤ï¤»¤Ë¤è¤ê¥¢¥É¥ì¥¹¤òÊä´°" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "¥«¡¼¥½¥ë¤Î²¼¤Î»ú¤òºï½ü" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "¹ÔËö¤Ë°ÜÆ°" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "¥«¡¼¥½¥ë¤ò°ìʸ»ú±¦¤Ë°ÜÆ°" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "¥«¡¼¥½¥ë¤òñ¸ì¤ÎºÇ¸å¤Ë°ÜÆ°" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "ÍúÎò¥ê¥¹¥È¤ò²¼¤Ë¥¹¥¯¥í¡¼¥ë" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ÍúÎò¥ê¥¹¥È¤ò¾å¤Ë¥¹¥¯¥í¡¼¥ë" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "¥«¡¼¥½¥ë¤«¤é¹ÔËö¤Þ¤Çºï½ü" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "¥«¡¼¥½¥ë¤«¤éñ¸ìËö¤Þ¤Çºï½ü" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "¤½¤Î¹Ô¤Îʸ»ú¤ò¤¹¤Ù¤Æºï½ü" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "¥«¡¼¥½¥ë¤ÎÁ°Êý¤Îñ¸ì¤òºï½ü" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "¼¡¤Ë¥¿¥¤¥×¤¹¤ëʸ»ú¤ò°úÍÑÉä¤Ç¤¯¤¯¤ë" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "¥«¡¼¥½¥ë°ÌÃÖ¤Îʸ»ú¤È¤½¤ÎÁ°¤Îʸ»ú¤È¤òÆþ¤ì´¹¤¨" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "ñ¸ì¤ÎÀèƬʸ»ú¤òÂçʸ»ú²½" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "ñ¸ì¤ò¾®Ê¸»ú²½" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "ñ¸ì¤òÂçʸ»ú²½" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "muttrc ¤Î¥³¥Þ¥ó¥É¤òÆþÎÏ" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "¥Õ¥¡¥¤¥ë¥Þ¥¹¥¯¤òÆþÎÏ" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "¤³¤Î¥á¥Ë¥å¡¼¤ò½ªÎ»" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "¥·¥§¥ë¥³¥Þ¥ó¥É¤òÄ̤·¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤òɽ¼¨" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ºÇ½é¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "¡Ö½ÅÍסץե饰¤ÎÀÚÂØ" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "¥³¥á¥ó¥ÈÉÕ¤­¤Ç¥á¥Ã¥»¡¼¥¸¤òžÁ÷" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "¸½ºß¤Î¥¨¥ó¥È¥ê¤òÁªÂò" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "¤¹¤Ù¤Æ¤Î¼õ¿®¼Ô¤ËÊÖ¿®" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "Ⱦ¥Ú¡¼¥¸²¼¤Ë¥¹¥¯¥í¡¼¥ë" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "Ⱦ¥Ú¡¼¥¸¾å¤Ë¥¹¥¯¥í¡¼¥ë" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "¤³¤Î²èÌÌ" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "¥¤¥ó¥Ç¥Ã¥¯¥¹ÈÖ¹æ¤ËÈô¤Ö" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ºÇ¸å¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "»ØÄêºÑ¤ß¥á¡¼¥ê¥ó¥°¥ê¥¹¥È°¸¤Æ¤ËÊÖ¿®" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "¥Þ¥¯¥í¤ò¼Â¹Ô" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "¿·µ¬¥á¥Ã¥»¡¼¥¸¤òºîÀ®" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "Ê̤Υե©¥ë¥À¤ò¥ª¡¼¥×¥ó" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "Æɤ߽Ф·ÀìÍѥ⡼¥É¤ÇÊ̤Υե©¥ë¥À¤ò¥ª¡¼¥×¥ó" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò²ò½ü" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤òºï½ü" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "IMAP ¥µ¡¼¥Ð¤«¤é¥á¡¼¥ë¤ò¼èÆÀ" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "POP ¥µ¡¼¥Ð¤«¤é¥á¡¼¥ë¤ò¼èÆÀ" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ºÇ½é¤Î¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤À¤±É½¼¨" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "¼¡¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "¼¡¤Î¿·Ãå¤Þ¤¿¤Ï̤ÆɤΥá¥Ã¥»¡¼¥¸¤Ø°ÜÆ°" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "¼¡¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤Ë°ÜÆ°" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "¼¡¤Î¥¹¥ì¥Ã¥É¤Ë°ÜÆ°" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "¼¡¤Î̤ºï½ü¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ø°ÜÆ°" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "¥¹¥ì¥Ã¥É¤Î¿Æ¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "Á°¤Î¥¹¥ì¥Ã¥É¤Ë°ÜÆ°" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "Á°¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤Ë°ÜÆ°" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "Á°¤Î̤ºï½ü¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "Á°¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "Á°¤Î¿·Ãå¤Þ¤¿¤Ï̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "Á°¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "¸½ºß¤Î¥¹¥ì¥Ã¥É¤ò´ûÆɤˤ¹¤ë" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "¸½ºß¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤ò´ûÆɤˤ¹¤ë" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤òÀßÄê" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "Êѹ¹¤ò¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊݸ" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°¤òÉÕ¤±¤ë" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤Îºï½ü¾õÂÖ¤ò²ò½ü" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ·¤¿¥á¥Ã¥»¡¼¥¸¤Î¥¿¥°¤ò¤Ï¤º¤¹" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "¥Ú¡¼¥¸¤ÎÃæ±û¤Ë°ÜÆ°" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "¼¡¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "°ì¹Ô²¼¤Ë¥¹¥¯¥í¡¼¥ë" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "¼¡¥Ú¡¼¥¸¤Ø°ÜÆ°" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈÖ²¼¤Ë°ÜÆ°" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "°úÍÑʸ¤Îɽ¼¨¤ò¤¹¤ë¤«¤É¤¦¤«ÀÚÂØ" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "°úÍÑʸ¤ò¥¹¥­¥Ã¥×¤¹¤ë" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈÖ¾å¤Ë°ÜÆ°" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "¥á¥Ã¥»¡¼¥¸/źÉÕ¥Õ¥¡¥¤¥ë¤ò¥³¥Þ¥ó¥É¤Ë¥Ñ¥¤¥×" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "Á°¤Î¥¨¥ó¥È¥ê¤Ë°ÜÆ°" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "°ì¹Ô¾å¤Ë¥¹¥¯¥í¡¼¥ë" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "Á°¤Î¥Ú¡¼¥¸¤Ë°ÜÆ°" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "¸½ºß¤Î¥¨¥ó¥È¥ê¤ò°õºþ" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "³°Éô¥×¥í¥°¥é¥à¤Ë¥¢¥É¥ì¥¹¤òÌ䤤¹ç¤ï¤»" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "¿·¤¿¤ÊÌ䤤¹ç¤ï¤»·ë²Ì¤ò¸½ºß¤Î·ë²Ì¤ËÄɲÃ" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "Êѹ¹¤ò¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊݸ¸å½ªÎ»" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "½ñ¤­¤«¤±¤Î¥á¥Ã¥»¡¼¥¸¤ò¸Æ¤Ó½Ð¤¹" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "²èÌ̤ò¥¯¥ê¥¢¤·ºÆÉÁ²è" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{ÆâÉô}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®" + +# ¤³¤ì¤Ç¥®¥ê¥®¥ê°ì¹Ô¤Ë¤ª¤µ¤Þ¤ë¥Ï¥º +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "¸½ºß¤Î¥á¥Ã¥»¡¼¥¸¤ò¿·¤·¤¤¤â¤Î¤Î¸¶·Á¤È¤·¤ÆÍøÍÑ" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "¥á¥Ã¥»¡¼¥¸/źÉÕ¥Õ¥¡¥¤¥ë¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "Àµµ¬É½¸½¸¡º÷" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "µÕ½ç¤ÎÀµµ¬É½¸½¸¡º÷" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "¼¡¤Ë°ìÃפ¹¤ë¤â¤Î¤ò¸¡º÷" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "µÕ½ç¤Ç°ìÃפ¹¤ë¤â¤Î¤ò¸¡º÷" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó¤òÃ忧¤¹¤ë¤«¤É¤¦¤«ÀÚÂØ" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "¥µ¥Ö¥·¥§¥ë¤Ç¥³¥Þ¥ó¥É¤òµ¯Æ°" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÀ°Îó" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "¥á¥Ã¥»¡¼¥¸¤òµÕ½ç¤ÇÀ°Îó" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¥¿¥°ÉÕ¤±" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "¼¡¤ËÆþÎϤ¹¤ëµ¡Ç½¤ò¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤ËŬÍÑ" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "¼¡¤ËÆþÎϤ¹¤ëµ¡Ç½¤ò¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤Ë¤Î¤ßŬÍÑ" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "¸½ºß¤Î¥µ¥Ö¥¹¥ì¥Ã¥É¤Ë¥¿¥°¤òÉÕ¤±¤ë" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "¸½ºß¤Î¥¹¥ì¥Ã¥É¤Ë¥¿¥°¤òÉÕ¤±¤ë" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¡Ö¿·Ãå¡×¥Õ¥é¥°¤òÀÚÂØ" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ËÊѹ¹¤ò½ñ¤­¹þ¤à¤«¤É¤¦¤«¤òÀÚÂØ" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "±ÜÍ÷Ë¡¤ò¡Ö¥á¡¼¥ë¥Ü¥Ã¥¯¥¹/Á´¥Õ¥¡¥¤¥ë¡×´Ö¤ÇÀÚÂØ" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "¥Ú¡¼¥¸¤Î°ìÈÖ¾å¤Ë°ÜÆ°" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "¥¨¥ó¥È¥ê¤Îºï½ü¾õÂÖ¤ò²ò½ü" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "¥¹¥ì¥Ã¥É¤Î¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤Îºï½ü¾õÂÖ¤ò²ò½ü" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "¥µ¥Ö¥¹¥ì¥Ã¥É¤Î¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤Îºï½ü¤ò²ò½ü" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "Mutt ¤Î¥Ð¡¼¥¸¥ç¥ó¤ÎÈÖ¹æ¤ÈÆüÉÕ¤òɽ¼¨" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë±ÜÍ÷(ɬÍפʤémailcap¥¨¥ó¥È¥ê»ÈÍÑ)" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "MIME źÉÕ¥Õ¥¡¥¤¥ë¤òɽ¼¨" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "¼¡¤Ë²¡¤¹¥­¡¼¤Î¥³¡¼¥É¤òɽ¼¨" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "¸½ºßÍ­¸ú¤ÊÀ©¸Â¥Ñ¥¿¡¼¥ó¤ÎÃͤòɽ¼¨" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "¸½ºß¤Î¥¹¥ì¥Ã¥É¤òŸ³«/È󟳫" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "¤¹¤Ù¤Æ¤Î¥¹¥ì¥Ã¥É¤òŸ³«/È󟳫" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "PGP ¸ø³«¸°¤òźÉÕ" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "PGP ¥ª¥×¥·¥ç¥ó¤òɽ¼¨" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "PGP ¸ø³«¸°¤ò¥á¡¼¥ëÁ÷¿®" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "PGP ¸ø³«¸°¤ò¸¡¾Ú" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "¸°¤Î¥æ¡¼¥¶ ID ¤òɽ¼¨" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "µì·Á¼°¤Î PGP ¤ò¥Á¥§¥Ã¥¯" + +# ¡Ö¤¹¤Ù¤Æ¤Î¡×¤Ã¤ÆɬÍס© +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "¹½ÃÛ¤µ¤ì¤¿Á´¤Æ¤Î¥Á¥§¡¼¥ó¤ò¼õÍÆ" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "¥Á¥§¡¼¥ó¤Ë remailer ¤òÄɲÃ" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "¥Á¥§¡¼¥ó¤Ë remailer ¤òÁÞÆþ" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "¥Á¥§¡¼¥ó¤«¤é remailer ¤òºï½ü" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Á°¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "¼¡¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "mixmaster remailer ¥Á¥§¡¼¥ó¤ò»È¤Ã¤ÆÁ÷¿®" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "Éü¹æ²½¤·¤¿¥³¥Ô¡¼¤òºî¤Ã¤Æ¤«¤éºï½ü" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "Éü¹æ²½¤·¤¿¥³¥Ô¡¼¤òºîÀ®" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ò¤¹¤Ù¤Æ¥á¥â¥ê¤«¤é¾Ãµî" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¸ø³«¸°¤òÃê½Ð" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "S/MIME ¥ª¥×¥·¥ç¥ó¤òɽ¼¨" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "·å¤¢¤Õ¤ì -- ¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Ê¤¤!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "¥á¥â¥êÉÔ­!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"³«È¯¼Ô(ËܲÈ)¤ËÏ¢Íí¤ò¤È¤ë¤Ë¤Ï <mutt-dev@mutt.org> ¤Ø¥á¡¼¥ë¤»¤è¡£\n" +"¥Ð¥°¤ò¥ì¥Ý¡¼¥È¤¹¤ë¤Ë¤Ï flea (1) ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¤ò»ÈÍѤ»¤è¡£\n" +"ÆüËܸìÈǤΥХ°¥ì¥Ý¡¼¥È¤ª¤è¤ÓÏ¢Íí¤Ï mutt-j ML ¤Ø¡£\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"»ÈÍÑË¡: mutt [-nRyzZ] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] [-m <¥¿¥¤¥×>] \n" +" [-f <¥Õ¥¡¥¤¥ë>]\n" +" mutt [-nR] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] -Q <Ì䤤¹ç¤ï¤»> \n" +" [-Q <Ì䤤¹ç¤ï¤»> ]\n" +" mutt [-nR] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] -A <ÊÌ̾> \n" +" [-A <ÊÌ̾> ]\n" +" mutt [-nx] [-e <¥³¥Þ¥ó¥É>] [-a <¥Õ¥¡¥¤¥ë>] [-F <¥Õ¥¡¥¤¥ë>] \n" +" [-H <¥Õ¥¡¥¤¥ë>] [-i <¥Õ¥¡¥¤¥ë>] [-s <Âê̾>] [-b <¥¢¥É¥ì¥¹>] \n" +" [-c <¥¢¥É¥ì¥¹>] <¥¢¥É¥ì¥¹> [ ... ]\n" +" mutt [-n] [-e <¥³¥Þ¥ó¥É>] [-F <¥Õ¥¡¥¤¥ë>] -p\n" +" mutt -v[v]\n" +"\n" +"¥ª¥×¥·¥ç¥ó:\n" +" -A <ÊÌ̾>\t»ØÄꤷ¤¿ÊÌ̾¤ÎŸ³«\n" +" -a <¥Õ¥¡¥¤¥ë>\t¥á¥Ã¥»¡¼¥¸¤Ë¥Õ¥¡¥¤¥ë¤òźÉÕ\n" +" -b <¥¢¥É¥ì¥¹>\tblind carbon-copy (BCC) ¥¢¥É¥ì¥¹¤Î»ØÄê\n" +" -c <¥¢¥É¥ì¥¹>\tcarbon-copy (CC) ¥¢¥É¥ì¥¹¤Î»ØÄê\n" +" -e <¥³¥Þ¥ó¥É>\t½é´ü²½¸å¤Ë¼Â¹Ô¤¹¤ë¥³¥Þ¥ó¥É¤Î»ØÄê\n" +" -f <¥Õ¥¡¥¤¥ë>\tÆɤ߽Ф·¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î»ØÄê\n" +" -F <¥Õ¥¡¥¤¥ë>\tÂåÂØ muttrc ¥Õ¥¡¥¤¥ë¤Î»ØÄê\n" +" -H <¥Õ¥¡¥¤¥ë>\t¤Ø¥Ã¥À¤òÆɤि¤á¤Ë²¼½ñ¥Õ¥¡¥¤¥ë¤ò»ØÄê\n" +" -i <¥Õ¥¡¥¤¥ë>\tÊÖ¿®»þ¤Ë Mutt ¤¬ÁÞÆþ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î»ØÄê\n" +" -m <¥¿¥¤¥×>\t¥á¡¼¥ë¥Ü¥Ã¥¯¥¹·Á¼°¤Î»ØÄê\n" +" -n\t\t¥·¥¹¥Æ¥à´ûÄê¤Î Muttrc ¤òÆɤޤʤ¤¤³¤È¤Î»ØÄê\n" +" -p\t\tÊݸ¤µ¤ì¤Æ¤¤¤ë (½ñ¤­¤«¤±) ¥á¥Ã¥»¡¼¥¸¤ÎºÆÆɤ߽Ф·¤Î»ØÄê\n" +" -Q <variable>\tÀßÄêÊÑ¿ô¤ÎÌ䤤¹ç¤ï¤»\n" +" -R\t\t¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÆɤ߽Ф·ÀìÍѥ⡼¥É¤Ç¥ª¡¼¥×¥ó¤¹¤ë¤³¤È¤Î»ØÄê\n" +" -s <Âê̾>\tÂê̾¤Î»ØÄê (¶õÇò¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï°úÍÑÉä¤Ç¤¯¤¯¤ë¤³¤È)\n" +" -v\t\t¥Ð¡¼¥¸¥ç¥ó¤È¥³¥ó¥Ñ¥¤¥ë»þ»ØÄê¤Îɽ¼¨\n" +" -x\t\tmailx Á÷¿®¥â¡¼¥É¤Î¥·¥ß¥å¥ì¡¼¥È\n" +" -y\t\t»ØÄꤵ¤ì¤¿ `mailboxes' ¥ê¥¹¥È¤ÎÃ椫¤é¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎÁªÂò\n" +" -z\t\t¥á¡¼¥ë¥Ü¥Ã¥¯¥¹Ãæ¤Ë¥á¥Ã¥»¡¼¥¸¤¬Ìµ¤±¤ì¤Ð¤¹¤°¤Ë½ªÎ»\n" +" -Z\t\t¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬Ìµ¤±¤ì¤Ð¤¹¤°¤Ë½ªÎ»\n" +" -h\t\t¤³¤Î¥Ø¥ë¥×¥á¥Ã¥»¡¼¥¸" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "üËö½é´ü²½¥¨¥é¡¼" + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "¥ì¥Ù¥ë %d ¤Ç¥Ç¥Ð¥Ã¥°Ãæ¡£\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG ¤¬¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£Ìµ»ë¤¹¤ë¡£\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s ¤¬Â¸ºß¤·¤Ê¤¤¡£ºîÀ®?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "%s ¤¬ %s ¤Î¤¿¤á¤ËºîÀ®¤Ç¤­¤Ê¤¤¡£" + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "¼õ¼è¿Í¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: ¥Õ¥¡¥¤¥ë¤òźÉդǤ­¤Ê¤¤¡£\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "¿·Ãå¥á¡¼¥ë¤Î¤¢¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ï¤Ê¤¤¡£" + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "ÅþÃåÍѥ᡼¥ë¥Ü¥Ã¥¯¥¹¤¬Ì¤ÄêµÁ¡£" + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¶õ¡£" + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Æɤ߽Ф·Ãæ %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤³¤ï¤ì¤Æ¤¤¤ë!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤³¤ï¤ì¤¿!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Ã×̿Ū¤Ê¥¨¥é¡¼! ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºÆ¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤«¤Ã¤¿!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¥í¥Ã¥¯ÉÔǽ!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬Êѹ¹¤µ¤ì¤¿¤¬¡¢Êѹ¹¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤(¤³¤Î¥Ð¥°¤òÊó¹ð¤»¤è)!" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "¥á¥Ã¥»¡¼¥¸½ñ¤­¹þ¤ßÃæ... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Êѹ¹·ë²Ì¤òÈ¿±ÇÃæ..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "½ñ¤­¹þ¤ß¼ºÇÔ! ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎÃÇÊÒ¤ò %s ¤ËÊݸ¤·¤¿" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºÆ¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤«¤Ã¤¿!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ºÆ¥ª¡¼¥×¥óÃæ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "°ÜÆ°À襤¥ó¥Ç¥Ã¥¯¥¹ÈÖ¹æ¤ò»ØÄê: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "ÉÔÀµ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹Èֹ档" + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "¥¨¥ó¥È¥ê¤¬¤Ê¤¤¡£" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "¤³¤ì¤è¤ê²¼¤Ë¤Ï¥¹¥¯¥í¡¼¥ë¤Ç¤­¤Ê¤¤¡£" + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "¤³¤ì¤è¤ê¾å¤Ë¤Ï¥¹¥¯¥í¡¼¥ë¤Ç¤­¤Ê¤¤¡£" + +#: menu.c:477 +msgid "You are on the last page." +msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥Ú¡¼¥¸¡£" + +#: menu.c:499 +msgid "You are on the first page." +msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥Ú¡¼¥¸¡£" + +#: menu.c:578 +msgid "First entry is shown." +msgstr "ºÇ½é¤Î¥¨¥ó¥È¥ê¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¡£" + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "ºÇ¸å¤Î¥¨¥ó¥È¥ê¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¡£" + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥¨¥ó¥È¥ê¡£" + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥¨¥ó¥È¥ê¡£" + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "µÕ½ç¸¡º÷¥Ñ¥¿¡¼¥ó: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó¤¬¤Ê¤¤¡£" + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¡£" + +#: menu.c:885 +msgid "No tagged entries." +msgstr "¥¿¥°ÉÕ¤­¥¨¥ó¥È¥ê¤¬¤Ê¤¤¡£" + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "¤³¤Î¥á¥Ë¥å¡¼¤Ç¤Ï¸¡º÷µ¡Ç½¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "¥¸¥ã¥ó¥×µ¡Ç½¤Ï¥À¥¤¥¢¥í¥°¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "¥¿¥°ÉÕ¤±µ¡Ç½¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "%s ¤«¤éÆɤ߽Ф·Ãæ... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): ¥Õ¥¡¥¤¥ë¤Ë»þ¹ï¤òÀßÄê¤Ç¤­¤Ê¤¤" + +# »²¹Í: "Save to file: " => "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë: " (alias.c, recvattach.c) +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "" +"¤½¤³¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë¡£¤½¤ÎÇÛ²¼¤ËÊݸ? [(y)¤¹¤ë,(n)¤·¤Ê¤¤,(a)¤¹¤Ù¤ÆÊݸ]" + +#: muttlib.c:835 +msgid "yna" +msgstr "yna" + +# »²¹Í: "Save to file: " => "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë: " (alias.c, recvattach.c) +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "¤½¤³¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¢¤ë¡£¤½¤ÎÇÛ²¼¤ËÊݸ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "¥Ç¥£¥ì¥¯¥È¥êÇÛ²¼¤Î¥Õ¥¡¥¤¥ë: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¡¢(o)¾å½ñ¤­ (a)Äɲà (c)Ãæ»ß?" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "POP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤òÊݸ¤Ç¤­¤Ê¤¤" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ¤Ï¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ç¤Ï¤Ê¤¤!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "%s ¤Ë¥á¥Ã¥»¡¼¥¸¤òÄɲÃ?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "%s ¤Ø¤ÎÀܳ¤ò½ªÎ»¤·¤¿" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL ¤¬ÍøÍѤǤ­¤Ê¤¤¡£" + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "»öÁ°Àܳ¥³¥Þ¥ó¥É¤¬¼ºÇÔ¡£" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "%s ¤Ø¤Î¸ò¿®¥¨¥é¡¼ (%s)¡£" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "ÉÔÀµ¤Ê IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "%s ¸¡º÷Ãæ..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "¥Û¥¹¥È \"%s\" ¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "%s ¤ËÀܳÃæ..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "%s ¤ËÀܳ¤Ç¤­¤Ê¤«¤Ã¤¿ (%s)¡£" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "¼Â¹ÔÃæ¤Î¥·¥¹¥Æ¥à¤Ë¤Ï½½Ê¬¤ÊÍ𻨤µ¤ò¸«¤Ä¤±¤é¤ì¤Ê¤«¤Ã¤¿" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Í𻨤µ¥×¡¼¥ë¤ò½¼Å¶Ãæ: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s ¤ËÀȼå¤Ê¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤¬¤¢¤ë!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "Í𻨤µÉÔ­¤Î¤¿¤á SSL ¤Ï̵¸ú¤Ë¤Ê¤Ã¤¿" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O ¥¨¥é¡¼" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ÆÃÄê¤Ç¤­¤Ê¤¤¥×¥í¥È¥³¥ë¥¨¥é¡¼" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL ¤Ï %s ¤Ç¼ºÇÔ¡£" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "ÀܳÀ褫¤é¾ÚÌÀ½ñ¤òÆÀ¤é¤ì¤Ê¤«¤Ã¤¿" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "%s ¤ò»È¤Ã¤¿ SSL Àܳ (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "ÉÔÌÀ" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[·×»»ÉÔǽ]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ÉÔÀµ¤ÊÆüÉÕ]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤Ï¤Þ¤ÀÍ­¸ú¤Ç¤Ê¤¤" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "¥µ¡¼¥Ð¤Î¾ÚÌÀ½ñ¤¬´ü¸ÂÀÚ¤ì" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "¤³¤Î¾ÚÌÀ½ñ¤Î½ê°Àè:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "¤³¤Î¾ÚÌÀ½ñ¤Îȯ¹Ô¸µ:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "¤³¤Î¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü´Ö¤Ï" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " %s ¤«¤é" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " %s ¤Þ¤Ç" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "¥Õ¥£¥ó¥¬¡¼¥×¥ê¥ó¥È: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL ¾ÚÌÀ½ñ¸¡ºº" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)µñÈÝ (o)º£²ó¤Î¤ß¾µÇ§ (a)¤¤¤Ä¤Ç¤â¾µÇ§" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "roa" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)µñÈÝ (o)º£²ó¤Î¤ß¾µÇ§" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ro" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "½ªÎ» " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "·Ù¹ð: ¾ÚÌÀ½ñ¤òÊݸ¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "¾ÚÌÀ½ñ¤òÊݸ¤·¤¿" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "¥í¥Ã¥¯²ó¿ô¤¬Ëþλ¡¢%s ¤Î¥í¥Ã¥¯¤ò¤Ï¤º¤¹¤«?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "%s ¤Î¥É¥Ã¥È¥í¥Ã¥¯¤¬¤Ç¤­¤Ê¤¤¡£\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "fcntl ¥í¥Ã¥¯Ãæ¤Ë¥¿¥¤¥à¥¢¥¦¥ÈȯÀ¸!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "fcntl ¥í¥Ã¥¯ÂÔ¤Á... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "flock ¥í¥Ã¥¯Ãæ¤Ë¥¿¥¤¥à¥¢¥¦¥ÈȯÀ¸!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "flock ¥í¥Ã¥¯ÂÔ¤Á... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "%s ¤ò¥í¥Ã¥¯¤Ç¤­¤Ê¤«¤Ã¤¿\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "%s Æɤ߽Ф·Ãæ..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "%s ½ñ¤­¹þ¤ßÃæ..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "%s ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎƱ´ü¤¬¤È¤ì¤Ê¤«¤Ã¤¿!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "%s ¤Ë´ûÆÉ¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "ºï½ü¤µ¤ì¤¿ %d ¥á¥Ã¥»¡¼¥¸¤òÇÑ´þ?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "ºï½ü¤µ¤ì¤¿ %d ¥á¥Ã¥»¡¼¥¸¤òÇÑ´þ?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "%s ¤Ë´ûÆÉ¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°Ãæ..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÏÊѹ¹¤µ¤ì¤Ê¤«¤Ã¤¿" + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d ÊÝ»ý¡¢%d °ÜÆ°¡¢%d ÇÑ´þ" + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d ÊÝ»ý¡¢%d ÇÑ´þ" + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " '%s' ¤ò²¡¤¹¤ÈÊѹ¹¤ò½ñ¤­¹þ¤à¤«¤É¤¦¤«¤òÀÚÂØ" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "'toggle-write' ¤ò»È¤Ã¤Æ½ñ¤­¹þ¤ß¤òÍ­¸ú¤Ë¤»¤è!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ï½ñ¤­¹þ¤ßÉÔǽ¤Ë¥Þ¡¼¥¯¤µ¤ì¤¿¡£%s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¥Á¥§¥Ã¥¯¥Ý¥¤¥ó¥È¤òºÎ¼è¤·¤¿¡£" + +#: mx.c:1490 +msgid "Can't write message" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò½ñ¤­¹þ¤á¤Ê¤¤" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "·å¤¢¤Õ¤ì -- ¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Ê¤¤¡£" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "¤³¤Î¥á¥Ë¥å¡¼¤Ç¤ÏÍøÍѤǤ­¤Ê¤¤¡£" + +#: pager.c:1446 +msgid "PrevPg" +msgstr "Á°ÊÇ" + +#: pager.c:1447 +msgid "NextPg" +msgstr "¼¡ÊÇ" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "źÉÕ¥Õ¥¡¥¤¥ë" + +#: pager.c:1454 +msgid "Next" +msgstr "¼¡" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈÖ²¼¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë" + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "¥á¥Ã¥»¡¼¥¸¤Î°ìÈ־夬ɽ¼¨¤µ¤ì¤Æ¤¤¤ë" + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "µÕ½ç¤Î¸¡º÷: " + +#: pager.c:1955 +msgid "Search: " +msgstr "¸¡º÷: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "¸½ºß¥Ø¥ë¥×¤òɽ¼¨Ãæ" + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "¤³¤ì°Ê¾å¤Î°úÍÑʸ¤Ï¤Ê¤¤¡£" + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "°úÍÑʸ¤Î¸å¤Ë¤Ï¤â¤¦Èó°úÍÑʸ¤¬¤Ê¤¤¡£" + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥È¤Î¥á¥Ã¥»¡¼¥¸¤À¤¬ boundary ¥Ñ¥é¥á¡¼¥¿¤¬¤Ê¤¤!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "±¦µ­¤Î¼°Ãæ¤Ë¥¨¥é¡¼: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "%s ¤ÏÉÔÀµ¤ÊÆüÉÕ" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "%s ¤ÏÉÔÀµ¤Ê·î" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "%s ¤ÏÉÔÀµ¤ÊÁêÂзîÆü" + +#: pattern.c:528 +msgid "error in expression" +msgstr "¼°Ãæ¤Ë¥¨¥é¡¼" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "%s ¥Ñ¥¿¡¼¥óÃæ¤Ë¥¨¥é¡¼" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c ¤ÏÉÔÀµ¤Ê¥³¥Þ¥ó¥É" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c ¤Ï¤³¤Î¥â¡¼¥É¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "¥Ñ¥é¥á¡¼¥¿¤¬¤Ê¤¤" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "Âбþ¤¹¤ë³ç¸Ì¤¬¤Ê¤¤: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "¥Ñ¥¿¡¼¥ó¤¬¶õ" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "¥¨¥é¡¼: ÉÔÌÀ¤Ê op %d (¤³¤Î¥¨¥é¡¼¤òÊó¹ð¤»¤è)¡£" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "¸¡º÷¥Ñ¥¿¡¼¥ó¤ò¥³¥ó¥Ñ¥¤¥ëÃæ..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "¥á¥Ã¥»¡¼¥¸¥Ñ¥¿¡¼¥ó¸¡º÷¤Î¤¿¤á¤Ë¥³¥Þ¥ó¥É¼Â¹ÔÃæ..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ¹¤ë¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤«¤Ã¤¿¡£" + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "°ìÈÖ²¼¤Þ¤Ç¡¢²¿¤â¸¡º÷¤Ë°ìÃפ·¤Ê¤«¤Ã¤¿¡£" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "°ìÈÖ¾å¤Þ¤Ç¡¢²¿¤â¸¡º÷¤Ë°ìÃפ·¤Ê¤«¤Ã¤¿¡£" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "¸¡º÷¤¬ÃæÃǤµ¤ì¤¿¡£" + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP ¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¥á¥â¥ê¤«¤é¾Ãµî¤µ¤ì¤¿¡£" + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ¥¨¥é¡¼: PGP »Ò¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP ½ÐÎϽªÎ» --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ¥á¥Ã¥»¡¼¥¸³«»Ï --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP ¸ø³«¸°¥Ö¥í¥Ã¥¯³«»Ï --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ½ð̾¥á¥Ã¥»¡¼¥¸³«»Ï --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- PGP¥á¥Ã¥»¡¼¥¸½ªÎ» --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP ¸ø³«¸°¥Ö¥í¥Ã¥¯½ªÎ» --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- PGP ½ð̾¥á¥Ã¥»¡¼¥¸½ªÎ» --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ¥¨¥é¡¼: PGP ¥á¥Ã¥»¡¼¥¸¤Î³«»ÏÅÀ¤òȯ¸«¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "ÆâÉô¥¨¥é¡¼¡£<roessler@does-not-exist.org> ¤ËÊó¹ð¤»¤è¡£" + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- ¥¨¥é¡¼: PGP »Ò¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ¥¨¥é¡¼: ÉÔÀµ¤Ê·Á¼°¤Î PGP/MIME ¥á¥Ã¥»¡¼¥¸! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ¥¨¥é¡¼: °ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï PGP/MIME ¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤ë --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- PGP/MIME °Å¹æ²½¥Ç¡¼¥¿½ªÎ» --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "PGP »Ò¥×¥í¥»¥¹¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "¸° ID = \"%s\" ¤ò %s ¤Ë»È¤¦?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "%s ¤Î¸° ID ÆþÎÏ: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP µ¯Æ°¤Ç¤­¤Ê¤¤" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "PGP ¸°¤ò¼èÆÀÃæ..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "°ìÃפ·¤¿¸°¤Ï¤¹¤Ù¤Æ´ü¸ÂÀڤ줫ÇÑ´þºÑ¤ß¡¢¤Þ¤¿¤Ï»ÈÍѶػߡ£" + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "ÁªÂò " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "PGP ¸°¸¡ºº " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP ¸°¤Ï <%s> ¤Ë°ìÃס£" + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP ¸°¤Ï \"%s\" ¤Ë°ìÃס£" + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "/dev/null ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Ê¤¤" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "¸° ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "¤³¤Î¸°¤Ï´ü¸ÂÀڤ줫»ÈÍÑÉԲĤ«ÇÑ´þºÑ¤ß¤Î¤¿¤á¡¢»È¤¨¤Ê¤¤¡£" + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID ¤Ï´ü¸ÂÀڤ줫»ÈÍÑÉԲĤ«ÇÑ´þºÑ¤ß¡£" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ID ¤Ï¿®ÍÑÅÙ¤¬Ì¤ÄêµÁ¡£" + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID ¤Ï¿®ÍѤµ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID ¤Ï¤«¤í¤¦¤¸¤Æ¿®ÍѤµ¤ì¤Æ¤¤¤ë¡£" + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ËÜÅö¤Ë¤³¤Î¸°¤ò»ÈÍÑ?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "¸° ID ¤òÆþÎÏ: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "PGP µ¯Æ°Ãæ..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP ¸° %s" + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "\"%s\" ¤Ë°ìÃפ¹¤ë¸°¤ò¸¡º÷Ãæ..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "¥³¥Þ¥ó¥É TOP ¤ò¥µ¡¼¥Ð¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£" + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "¥Ø¥Ã¥À¤ò°ì»þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Ê¤¤!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "¥³¥Þ¥ó¥É UIDL ¤ò¥µ¡¼¥Ð¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£" + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s ¤ÏÉÔÀµ¤Ê POP ¥Ñ¥¹" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "¥á¥Ã¥»¡¼¥¸¥ê¥¹¥È¤ò¼èÆÀÃæ..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò°ì»þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Ê¤¤!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¸¡½ÐÃæ..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP ¥Û¥¹¥È¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "POP ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¿·Ãå¥á¡¼¥ë¤Ï¤Ê¤¤¡£" + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "¥µ¡¼¥Ð¤«¤é¥á¥Ã¥»¡¼¥¸¤òºï½ü?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸Æɤ߽Ф·Ãæ (%d ¥Ð¥¤¥È)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹½ñ¤­¹þ¤ßÃæ¤Ë¥¨¥é¡¼!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d / %d ¥á¥Ã¥»¡¼¥¸Æɤ߽Ф·]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "¥µ¡¼¥Ð¤¬Àܳ¤òÀڤä¿!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "ǧ¾ÚÃæ (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "ǧ¾ÚÃæ (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP ǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¡£" + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "¥³¥Þ¥ó¥É USER ¤Ï¥µ¡¼¥Ð¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£" + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "¥µ¡¼¥Ð¤Ë¥á¥Ã¥»¡¼¥¸¤ò»Ä¤»¤Ê¤¤¡£" + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "¥µ¡¼¥Ð %s ¤Ø¤ÎÀܳ¥¨¥é¡¼¡£" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "POP ¥µ¡¼¥Ð¤Ø¤ÎÀܳ½ªÎ»Ãæ..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "¥á¥Ã¥»¡¼¥¸º÷°ú¸¡¾ÚÃæ..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Àܳ¤¬Àڤ줿¡£POP ¥µ¡¼¥Ð¤ËºÆÀܳ?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "½ñ¤­¤«¤±¤Î¥á¥Ã¥»¡¼¥¸" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "½ñ¤­¤«¤±¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤¡£" + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "ÉÔÀµ¤Ê PGP ¥Ø¥Ã¥À" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "ÉÔÀµ¤Ê S/MIME ¥Ø¥Ã¥À" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Éü¹æ²½¤Ë¼ºÇÔ¤·¤¿¡£" + +#: query.c:46 +msgid "New Query" +msgstr "¿·µ¬Ì䤤¹ç¤ï¤»" + +#: query.c:47 +msgid "Make Alias" +msgstr "ÊÌ̾ºîÀ®" + +#: query.c:48 +msgid "Search" +msgstr "¸¡º÷" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "±þÅúÂÔ¤Á..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Ì䤤¹ç¤ï¤»¥³¥Þ¥ó¥É¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: query.c:286 +msgid "Query" +msgstr "Ì䤤¹ç¤ï¤»" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Ì䤤¹ç¤ï¤»: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Ì䤤¹ç¤ï¤» '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "¥Ñ¥¤¥×" + +#: recvattach.c:53 +msgid "Print" +msgstr "°õºþ" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "ÊݸÃæ..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤òÊݸ¤·¤¿¡£" + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "·Ù¹ð! %s ¤ò¾å½ñ¤­¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¡£·Ñ³?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤Ï¥³¥Þ¥ó¥É¤òÄ̤·¤Æ¤¢¤ë¡£" + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "ɽ¼¨¤Î¤¿¤á¤ËÄ̲ᤵ¤»¤ë¥³¥Þ¥ó¥É: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "¥Ñ¥¤¥×¤¹¤ë¥³¥Þ¥ó¥É: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "¤É¤Î¤è¤¦¤ËźÉÕ¥Õ¥¡¥¤¥ë %s ¤ò°õºþ¤¹¤ë¤«ÉÔÌÀ!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "¥¿¥°ÉÕ¤­ÅºÉÕ¥Õ¥¡¥¤¥ë¤ò°õºþ?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤ò°õºþ?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "°Å¹æ²½¥á¥Ã¥»¡¼¥¸¤òÉü¹æ²½¤Ç¤­¤Ê¤¤!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "ɽ¼¨¤¹¤Ù¤­Éû¥Ñ¡¼¥È¤¬¤Ê¤¤!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "POP ¥µ¡¼¥Ð¤«¤éźÉÕ¥Õ¥¡¥¤¥ë¤òºï½ü¤Ç¤­¤Ê¤¤¡£" + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "°Å¹æ²½¥á¥Ã¥»¡¼¥¸¤«¤é¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥ÈźÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü¤Î¤ß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£" + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "message/rfc822 ¥Ñ¡¼¥È¤Î¤ßºÆÁ÷¤·¤Æ¤â¤è¤¤¡£" + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "¥á¥Ã¥»¡¼¥¸ºÆÁ÷¥¨¥é¡¼!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "¥á¥Ã¥»¡¼¥¸ºÆÁ÷¥¨¥é¡¼!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "°ì»þ¥Õ¥¡¥¤¥ë %s ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤¤¡£" + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤È¤·¤ÆžÁ÷?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "¥¿¥°ÉÕ¤­ÅºÉÕ¥Õ¥¡¥¤¥ë¤¹¤Ù¤Æ¤ÎÉü¹æ²½¤Ï¼ºÇÔ¡£À®¸ùʬ¤À¤± MIME žÁ÷?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "MIME ¥«¥×¥»¥ë²½¤·¤ÆžÁ÷?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "%s ¤òºîÀ®¤Ç¤­¤Ê¤¤¡£" + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤¬°ì¤Ä¤â¸«¤Ä¤«¤é¤Ê¤¤¡£" + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "¥¿¥°ÉÕ¤­ÅºÉÕ¥Õ¥¡¥¤¥ë¤¹¤Ù¤Æ¤ÎÉü¹æ²½¤Ï¼ºÇÔ¡£À®¸ùʬ¤À¤± MIME ¥«¥×¥»¥ë²½?" + +#: remailer.c:480 +msgid "Append" +msgstr "ÄɲÃ" + +#: remailer.c:481 +msgid "Insert" +msgstr "ÁÞÆþ" + +#: remailer.c:482 +msgid "Delete" +msgstr "ºï½ü" + +#: remailer.c:484 +msgid "OK" +msgstr "¾µÇ§(OK)" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "mixmaster ¤Î type2.list ¼èÆÀ¤Ç¤­¤º!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "remailer ¥Á¥§¡¼¥ó¤òÁªÂò¡£" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "¥¨¥é¡¼: %s ¤ÏºÇ¸å¤Î remailer ¥Á¥§¡¼¥ó¤Ë¤Ï»È¤¨¤Ê¤¤¡£" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster ¥Á¥§¡¼¥ó¤Ï %d ¥¨¥ì¥á¥ó¥È¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¡£" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "remailer ¥Á¥§¡¼¥ó¤Ï¤¹¤Ç¤Ë¶õ¡£" + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "¤¹¤Ç¤ËºÇ½é¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò¤·¤Æ¤¤¤ë¡£" + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "¤¹¤Ç¤ËºÇ¸å¤Î¥Á¥§¡¼¥ó¥¨¥ì¥á¥ó¥È¤òÁªÂò¤·¤Æ¤¤¤ë¡£" + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster ¤Ï Cc ¤Þ¤¿¤Ï Bcc ¥Ø¥Ã¥À¤ò¼õ¤±¤Ä¤±¤Ê¤¤¡£" + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "mixmaster ¤ò»È¤¦»þ¤Ë¤Ï¡¢hostname ÊÑ¿ô¤ËŬÀÚ¤ÊÃͤòÀßÄꤻ¤è¡£" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "¥á¥Ã¥»¡¼¥¸Á÷¿®¥¨¥é¡¼¡¢»Ò¥×¥í¥»¥¹¤¬ %d ¤Ç½ªÎ»¡£\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "¥á¥Ã¥»¡¼¥¸Á÷¿®¥¨¥é¡¼¡£" + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "%s ·Á¼°¤ËÉÔŬÀڤʥ¨¥ó¥È¥ê¤¬ \"%s\" ¤Î %d ¹ÔÌܤˤ¢¤ë" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "mailcap ¥Ñ¥¹¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "%s ·Á¼°ÍѤΠmailcap ¥¨¥ó¥È¥ê¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: °ú¿ô¤¬¾¯¤Ê¤¹¤®¤ë" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: °ú¿ô¤¬Â¿¤¹¤®¤ë" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Âê̾¤¬¤Ê¤¤¡£Ãæ»ß?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "̵Âê¤ÇÃæ»ß¤¹¤ë¡£" + +# ¤³¤³¤Ç no ¤À¤È from ¤ËÊÖ¿®¤¹¤ë¡£ +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "%s%s ¤Ø¤ÎÊÖ¿®?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "%s%s ¤Ø¤Î¥Õ¥©¥í¡¼¥¢¥Ã¥×?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "²Ä»ë¤Ê¥¿¥°ÉÕ¤­¥á¥Ã¥»¡¼¥¸¤¬¤Ê¤¤!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "ÊÖ¿®¤Ë¥á¥Ã¥»¡¼¥¸¤ò´Þ¤á¤ë¤«?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "°úÍÑ¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤ßÃæ..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "¤¹¤Ù¤Æ¤ÎÍ׵ᤵ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤á¤Ê¤«¤Ã¤¿!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "źÉÕ¥Õ¥¡¥¤¥ë¤È¤·¤ÆžÁ÷?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "žÁ÷¥á¥Ã¥»¡¼¥¸¤ò½àÈ÷Ãæ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "½ñ¤­¤«¤±¤Î¥á¥Ã¥»¡¼¥¸¤ò¸Æ¤Ó½Ð¤¹?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "žÁ÷¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï̤Êѹ¹¡£Ãæ»ß?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "̤Êѹ¹¤Î¥á¥Ã¥»¡¼¥¸¤òÃæ»ß¤·¤¿¡£" + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "¥á¡¼¥ë¤ÏÁ÷¿®¤µ¤ì¤Ê¤«¤Ã¤¿¡£" + +#: send.c:1430 +msgid "Message postponed." +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï½ñ¤­¤«¤±¤ÇÊÝᤵ¤ì¤¿¡£" + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "¼õ¿®¼Ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "¼õ¿®¼Ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Âê̾¤¬¤Ê¤¤¡£Á÷¿®¤òÃæ»ß?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Âê̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£" + +#: send.c:1526 +msgid "Sending message..." +msgstr "Á÷¿®Ãæ..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤Ç¤­¤Ê¤«¤Ã¤¿¡£" + +#: send.c:1672 +msgid "Mail sent." +msgstr "¥á¡¼¥ë¤òÁ÷¿®¤·¤¿¡£" + +#: send.c:1672 +msgid "Sending in background." +msgstr "¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇÁ÷¿®¡£" + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "boundary ¥Ñ¥é¥á¡¼¥¿¤¬¤ß¤Ä¤«¤é¤Ê¤¤! [¤³¤Î¥¨¥é¡¼¤òÊó¹ð¤»¤è]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ¤Ï¤â¤Ï¤ä¸ºß¤·¤Ê¤¤!" + +# regular file ¤Ã¤Æ¡ÖÄ̾ï¥Õ¥¡¥¤¥ë¡×¤Ç¤¹¤«¡© +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s ¤Ïɸ½à¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¤¡£" + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "%s ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Ê¤«¤Ã¤¿" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "¥á¥Ã¥»¡¼¥¸Á÷¿®¥¨¥é¡¼¡£»Ò¥×¥í¥»¥¹¤¬ %d (%s) ¤Ç½ªÎ»¤·¤¿¡£" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "ÇÛ¿®¥×¥í¥»¥¹¤Î½ÐÎÏ" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "ÉÔÀµ¤Ê IDN %s ¤ò resent-from ¤Î½àÈ÷Ãæ¤Ëȯ¸«¡£" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... ½ªÎ»¡£\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "%s ¤ò¼õ¤±¼è¤Ã¤¿¡£½ªÎ»¡£\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "¥·¥°¥Ê¥ë %d ¤ò¼õ¤±¼è¤Ã¤¿¡£½ªÎ»¡£\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "¿®ÍÑºÑ¤ß " + +#: smime.c:303 +msgid "Verified " +msgstr "¸¡¾ÚºÑ¤ß " + +#: smime.c:306 +msgid "Unverified" +msgstr "̤¸¡¾Ú " + +#: smime.c:309 +msgid "Expired " +msgstr "´ü¸ÂÀÚ¤ì " + +#: smime.c:312 +msgid "Revoked " +msgstr "ÇÑ´þºÑ¤ß " + +# ÉÔÀµ¤è¤êÉÔ¿®¤«¡© +#: smime.c:315 +msgid "Invalid " +msgstr "ÉÔÀµ " + +#: smime.c:318 +msgid "Unknown " +msgstr "ÉÔÌÀ " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "¸°IDÆþÎÏ: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME ¾ÚÌÀ½ñ¤Ï \"%s\" ¤Ë°ìÃס£" + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s ¤Ï̤¸¡¾Ú¡£%s ¤Ë»ÈÍÑ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "(̤¿®ÍѤÊ!) ID %s ¤ò %s ¤Ë»ÈÍÑ?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "ID %s ¤ò %s ¤Ë»ÈÍÑ?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "·Ù¹ð: ¤Þ¤À ID %s ¤ò¿®ÍѤ¹¤ë¤«·èÄꤷ¤Æ¤¤¤Ê¤¤¡£(²¿¤«¥­¡¼¤ò²¡¤»¤Ð³¤¯)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "%s ¤Î (Àµ¤·¤¤) ¾ÚÌÀ½ñ¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "¥¨¥é¡¼: OpenSSL »Ò¥×¥í¥»¥¹ºîÀ®ÉÔǽ!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "¾ÚÌÀ½ñ¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤" + +#: smime.c:1200 +msgid "no mbox" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤Ê¤¤" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "OpenSSL ¤«¤é½ÐÎϤ¬¤Ê¤¤.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "·Ù¹ð: Ãæ´Ö¾ÚÌÀ½ñ¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£" + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "OpenSSL »Ò¥×¥í¥»¥¹¥ª¡¼¥×¥óÉÔǽ!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "OpenSSL ¤«¤é½ÐÎϤ¬¤Ê¤¤..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- OpenSSL ½ÐÎϽªÎ» --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ¥¨¥é¡¼: OpenSSL »Ò¥×¥í¥»¥¹¤òºîÀ®¤Ç¤­¤Ê¤«¤Ã¤¿! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï S/MIME ¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤ë --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- °Ê²¼¤Î¥Ç¡¼¥¿¤Ï S/MIME ¤Ç½ð̾¤µ¤ì¤Æ¤¤¤ë --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- S/MIME °Å¹æ²½¥Ç¡¼¥¿½ªÎ» --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- S/MIME ½ð̾¥Ç¡¼¥¿½ªÎ» --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹À°ÎóÃæ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "À°Îóµ¡Ç½¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿! [¤³¤Î¥Ð¥°¤òÊó¹ð¤»¤è]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬¤Ê¤¤)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "¿Æ¥á¥Ã¥»¡¼¥¸¤Ï¤³¤ÎÀ©¸Â¤µ¤ì¤¿É½¼¨ÈϰϤǤÏÉԲĻ롣" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "¿Æ¥á¥Ã¥»¡¼¥¸¤¬ÍøÍѤǤ­¤Ê¤¤¡£" + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "OpenSSL µ¯Æ°Ãæ..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "%s ¤Ø¥á¥Ã¥»¡¼¥¸¤òºÆÁ÷?" + +#~ msgid "This message seems to require key %s. (Any key to continue)" +#~ msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ï¸° %s ¤òÍ׵ᤷ¤Æ¤¤¤ë¤è¤¦¤À¡£(²¿¤«¥­¡¼¤ò²¡¤»¤Ð³¤¯)" + +#~ msgid "Alert: No mailbox specified in certificate.\n" +#~ msgstr "·Ù¹ð: ¾ÚÌÀ½ñ¤Ç¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£\n" + +#~ msgid "Alert: Certificate does *NOT* belong to \"%s\".\n" +#~ msgstr "·Ù¹ð: ¾ÚÌÀ½ñ¤¬ \"%s\" ¤Ë½ê°¤·¤Æ *¤¤¤Ê¤¤*¡£\n" + +#~ msgid "Certificate \"%s\" exists for \"%s\"." +#~ msgstr "¾ÚÌÀ½ñ \"%s\" ¤¬ \"%s\" ¤ËÂФ·¤Æ¸ºß¤¹¤ë¡£" + +#~ msgid "Successfully added certificate \"%s\" for \"%s\". " +#~ msgstr "¾ÚÌÀ½ñ \"%s\" ¤ò \"%s\" ¤ËÄɲÃÀ®¸ù¡£" + +#~ msgid "Certificate *NOT* added." +#~ msgstr "¾ÚÌÀ½ñ¤ÏÄɲà *¤µ¤ì¤º* ¡£" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "¤³¤Î ID ¤Î¿®ÍÑÅÙ¤Ï̤ÄêµÁ¤Ç¤¢¤ë¡£" diff --git a/po/ko.gmo b/po/ko.gmo new file mode 100644 index 0000000000000000000000000000000000000000..c220fe28d1139a5171df4bde033edee8a4dcd9f7 GIT binary patch literal 72535 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 literal 0 HcmV?d00001 diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..1cee78f --- /dev/null +++ b/po/ko.po @@ -0,0 +1,4143 @@ +# Korean messages for mutt. +# Copyright (C) 1998 Free Software Foundation, Inc. +# Sang-Jin Hwang,ý <accel@linux.mdworld.com>, 1998, 1999. +# Byeong-Chan Kim <redhands@linux.sarag.net>, 2000. +# Im Eunjea <eunjea@kldp.org>, 2002, 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.5.1i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-08-26 23:46+300\n" +"Last-Translator: Im Eunjea <eunjea@kldp.org>\n" +"Language-Team: Im Eunjea <eunjea@kldp.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "À̸§ ¹Ù²Ù±â (%s): " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%sÀÇ ¾ÏÈ£: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Á¾·á" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "»èÁ¦" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "º¹±¸" + +#: addrbook.c:36 +msgid "Select" +msgstr "¼±ÅÃ" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "µµ¿ò¸»" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "º°ÄªÀÌ ¾øÀ½!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "º°Äª" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "»ç¿ë º°Äª: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "°°Àº À̸§ÀÇ º°ÄªÀÌ ÀÌ¹Ì ÀÖÀ½!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "°æ°í: ÀÌ ¾Ë¸®¾Æ½º´Â ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. °íÄ¥±î¿ä?" + +#: alias.c:279 +msgid "Address: " +msgstr "ÁÖ¼Ò: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "¿À·ù: '%s'´Â À߸øµÈ IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "À̸§: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Ãß°¡ÇÒ±î¿ä?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "ÆÄÀÏ·Î ÀúÀå: " + +#: alias.c:342 +msgid "Alias added." +msgstr "º°Äª Ãß°¡µÊ." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "À̸§ ÅÛÇ÷¹ÀÌÆ®¿Í ÀÏÄ¡ÇÏÁö ¾ÊÀ½. °è¼ÓÇÒ±î¿ä?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap ÀÛ¼º Ç׸ñÀº %%s°¡ ÇÊ¿äÇÔ" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "\"%s\" ½ÇÇà ¿À·ù!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Çì´õ¸¦ ºÐ¼®Çϱâ À§ÇÑ ÆÄÀÏ ¿­±â ½ÇÆÐ" + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Çì´õ Á¦°Å¸¦ À§ÇÑ ÆÄÀÏ ¿­±â ½ÇÆÐ" + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "%sÀÇ mailcap ÀÛ¼º Ç׸ñÀÌ ¾øÀ½, ºó ÆÄÀÏ »ý¼º." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Mailcap ÆíÁý Ç׸ñÀº %%s°¡ ÇÊ¿äÇÔ" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "ÆíÁýÀ» À§ÇÑ %sÀÇ mailcap Ç׸ñÀÌ ¾øÀ½" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "mailcap Ç׸ñ¿¡¼­ ÀÏÄ¡ÇÏ´Â °ÍÀ» ãÀ» ¼ö ¾øÀ½. text·Î º¸±â." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Á¤ÀǵÇÁö ¾ÊÀº MIME Çü½Ä. ÷ºÎ¹°À» º¼ ¼ö ¾øÀ½." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "ÇÊÅ͸¦ ¸¸µé ¼ö ¾øÀ½" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "ÇÊÅ͸¦ ¸¸µé ¼ö ¾øÀ½" + +#: attach.c:824 +msgid "Write fault!" +msgstr "¾²±â ½ÇÆÐ!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "¾î¶»°Ô Ãâ·ÂÇÒ Áö ¾Ë ¼ö ¾øÀ½!" + +#: browser.c:41 +msgid "Chdir" +msgstr "µð·ºÅ丮 À̵¿" + +#: browser.c:42 +msgid "Mask" +msgstr "¸Å½ºÅ©" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s´Â µð·ºÅ丮°¡ ¾Æ´Õ´Ï´Ù." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "¸ÞÀÏÇÔ [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "°¡ÀÔ [%s], ÆÄÀÏ ¸Å½ºÅ©: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "µð·ºÅ丮 [%s], ÆÄÀÏ ¸Å½ºÅ©: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "µð·ºÅ丮´Â ÷ºÎÇÒ ¼ö ¾øÀ½!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "ÆÄÀÏ ¸Å½ºÅ©¿Í ÀÏÄ¡ÇÏ´Â ÆÄÀÏ ¾øÀ½." + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "»ý¼ºÀº IMAP ¸ÞÀÏÇÔ¿¡¼­¸¸ Áö¿øµÊ" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "»èÁ¦´Â IMAP ¸ÞÀÏÇÔ¿¡¼­¸¸ Áö¿øµÊ" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Á¤¸»·Î \"%s\" ¸ÞÀÏÇÔÀ» Áö¿ï±î¿ä?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "¸ÞÀÏÇÔ »èÁ¦µÊ." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "¸ÞÀÏÇÔÀÌ »èÁ¦µÇÁö ¾ÊÀ½." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "À̵¿ÇÒ µð·ºÅ丮: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "µð·ºÅ丮 °Ë»çÁß ¿À·ù." + +#: browser.c:975 +msgid "File Mask: " +msgstr "ÆÄÀÏ ¸Å½ºÅ©: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "¿ª¼øÁ¤·Ä ¹æ¹ý: ³¯Â¥(d), ³¹¸»(a), Å©±â(z), ¾ÈÇÔ(n)?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Á¤·Ä ¹æ¹ý: ³¯Â¥(d), ±ÛÀÚ(a), Å©±â(z), ¾ÈÇÔ(n)?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "»õ ÆÄÀÏ À̸§: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "µð·ºÅ丮¸¦ º¼ ¼ö ¾øÀ½" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "ÆÄÀÏ º¸±â ½Ãµµ Áß ¿À·ù" + +#: buffy.c:442 +msgid "New mail in " +msgstr "»õ ¸ÞÀÏ µµÂø " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: Å͹̳ο¡¼­ Áö¿øµÇÁö ¾Ê´Â »ö." + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: »ö»ó ¾øÀ½." + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: Ç׸ñ ¾øÀ½" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: À妽º Ç׸ñ¿¡¼­¸¸ »ç¿ë °¡´ÉÇÑ ¸í·É¾î." + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: Àμö°¡ ºÎÁ·ÇÔ" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Àμö°¡ ºüÁ³À½." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: Àμö°¡ ºÎÁ·ÇÔ" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: Àμö°¡ ºÎÁ·ÇÔ" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: ¼Ó¼º ¾øÀ½." + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "Àμö°¡ ºÎÁ·ÇÔ" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "Àμö°¡ ³Ê¹« ¸¹À½" + +#: color.c:721 +msgid "default colors not supported" +msgstr "±âº» »ö»óµéÀÌ Áö¿øµÇÁö ¾ÊÀ½" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "PGP ¼­¸íÀ» È®ÀÎÇÒ±î¿ä?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Àӽà ÆÄÀÏÀ» ¸¸µé ¼ö ¾øÀ½!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Ç¥½Ã ÇÊÅ͸¦ ¸¸µé ¼ö ¾øÀ½" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "¸ÞÀÏÀ» º¹»çÇÒ ¼ö ¾øÀ½" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME ¼­¸í È®Àο¡ ¼º°øÇÔ." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "S/MIME ÀÎÁõ¼­ ¼ÒÀ¯ÀÚ¿Í º¸³½ÀÌ°¡ ÀÏÄ¡ÇÏÁö ¾ÊÀ½." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME ¼­¸í °ËÁõ¿¡ ½ÇÆÐÇÔ." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP ¼­¸í È®Àο¡ ¼º°øÇÔ." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP ¼­¸í °ËÁõ¿¡ ½ÇÆÐÇÔ." + +#: commands.c:223 +msgid "Command: " +msgstr "¸í·É¾î: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "¸ÞÀÏÀ» Àü´ÞÇÒ ÁÖ¼Ò: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "¼±ÅÃÇÑ ¸ÞÀÏÀ» Àü´ÞÇÑ ÁÖ¼Ò: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "ÁÖ¼Ò ºÐ¼® Áß ¿À·ù!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "À߸øµÈ IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "%s¿¡°Ô ¸ÞÀÏ Àü´Þ" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "%s¿¡°Ô ¸ÞÀÏ Àü´Þ" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "¸ÞÀÏÀÌ Àü´Þ µÇÁö ¾ÊÀ½." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "¸ÞÀϵéÀÌ Àü´Þ µÇÁö ¾ÊÀ½." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "¸ÞÀÏÀÌ Àü´ÞµÊ." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "¸ÞÀϵéÀÌ Àü´ÞµÊ." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "ÇÊÅÍ°úÁ¤À» »ý¼ºÇÒ ¼ö ¾øÀ½" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "¸í·É¾î·Î ¿¬°á: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "ÇÁ¸°Æ® ¸í·ÉÀÌ Á¤ÀǵÇÁö ¾ÊÀ½." + +#: commands.c:483 +msgid "Print message?" +msgstr "¸ÞÀÏÀ» ÇÁ¸°Æ® ÇÒ±î¿ä?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Ç¥½ÃÇÑ ¸ÞÀÏÀ» ÇÁ¸°Æ® ÇÒ±î¿ä?" + +#: commands.c:492 +msgid "Message printed" +msgstr "¸ÞÀÏÀ» ÇÁ¸°Æ®ÇÔ" + +#: commands.c:492 +msgid "Messages printed" +msgstr "¸ÞÀϵéÀ» ÇÁ¸°Æ®ÇÔ" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "¸ÞÀÏÀ» ÇÁ¸°Æ® ÇÒ ¼ö ¾øÀ½" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "¸ÞÀϵéÀ» ÇÁ¸°Æ® ÇÒ ¼ö ¾øÀ½" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"¿ª¼øÁ¤·Ä: (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Á¤·Ä: (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "½© ¸í·É¾î: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "º¹È£È­-ÀúÀå%s ¸ÞÀÏÇÔÀ¸·Î" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "º¹È£È­-º¹»ç%s ¸ÞÀÏÇÔÀ¸·Î" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Çص¶-ÀúÀå%s ¸ÞÀÏÇÔÀ¸·Î" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Çص¶-º¹»ç%s ¸ÞÀÏÇÔÀ¸·Î" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "ÀúÀå%s ¸ÞÀÏÇÔÀ¸·Î" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "º¹»ç%s ¸ÞÀÏÇÔÀ¸·Î" + +#: commands.c:706 +msgid " tagged" +msgstr " Ç¥½ÃµÊ" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "%s·Î º¹»ç..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "º¸³¾¶§ %s·Î º¯È¯ÇÒ±î¿ä?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "%s·Î Content-TypeÀÌ ¹Ù²ñ." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "¹®ÀÚ¼ÂÀÌ %s¿¡¼­ %s·Î ¹Ù²ñ." + +#: commands.c:914 +msgid "not converting" +msgstr "º¯È¯ÇÏÁö ¾ÊÀ½" + +#: commands.c:914 +msgid "converting" +msgstr "º¯È¯Áß" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "÷ºÎ¹°ÀÌ ¾øÀ½." + +#: compose.c:84 +msgid "Send" +msgstr "º¸³¿" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Ãë¼Ò" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "ÆÄÀÏ Ã·ºÎ" + +#: compose.c:90 +msgid "Descrip" +msgstr "¼³¸í" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "¼­¸í, ¾Ïȣȭ" + +#: compose.c:129 +msgid "Encrypt" +msgstr "¾Ïȣȭ" + +#: compose.c:131 +msgid "Sign" +msgstr "¼­¸í" + +#: compose.c:133 +msgid "Clear" +msgstr "¾øÀ½" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " »ç¿ë ¼­¸í: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<±âº»°ª>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "¾Ïȣȭ ¹æ½Ä: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP ¾Ïȣȭ(e), ¼­¸í(s), »ç¿ë ¼­¸í(a), µÑ ´Ù(b), Ãë¼Ò(f)? " + +#: compose.c:166 +msgid "esabf" +msgstr "esabf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "»ç¿ë ¼­¸í: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "S/MIME ¾Ïȣȭ(e), ¼­¸í(s), ¹æ½Ä(w), »ç¿ë ¼­¸í(a), µÑ ´Ù(b), Ãë¼Ò(f)? " + +#: compose.c:228 +msgid "eswabf" +msgstr "eswabf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, Ãë¼Ò(f)? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345f" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d]´Â ´õ ÀÌ»ó Á¸ÀçÇÏÁö ¾ÊÀ½!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] º¯°æµÊ. ´Ù½Ã ÀÎÄÚµùÇÒ±î¿ä?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- ÷ºÎ¹°" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "°æ°í: '%s' À߸øµÈ IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "÷ºÎ¹°¸¸À» »èÁ¦ÇÒ ¼ö´Â ¾ø½À´Ï´Ù." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "À߸øµÈ IDN \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "¼±ÅÃµÈ ÆÄÀÏÀ» ÷ºÎÁß..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "%s¸¦ ÷ºÎÇÒ ¼ö ¾øÀ½!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "¸ÞÀÏÀ» ÷ºÎÇϱâ À§ÇØ ¸ÞÀÏÇÔÀ» ¿°" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Æú´õ¿¡ ¸ÞÀÏÀÌ ¾øÀ½." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "÷ºÎÇÏ°íÀÚ ÇÏ´Â ¸ÞÀÏÀ» Ç¥½ÃÇϼ¼¿ä." + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "÷ºÎÇÒ ¼ö ¾øÀ½!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "ÀúÀåÀº ÅؽºÆ® ÷ºÎ¹°¿¡¸¸ Àû¿ëµÊ." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "ÇöÀç ÷ºÎ¹°Àº º¯È¯ÇÒ¼ö ¾øÀ½." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "ÇöÀç ÷ºÎ¹°Àº º¯È¯ °¡´ÉÇÔ." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "À߸øµÈ ÀÎÄÚµù" + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "ÀÌ ¸ÞÀÏÀÇ º¹»çº»À» ÀúÀåÇÒ±î¿ä?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "À̸§ ¹Ù²Ù±â: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "%s: %sÀÇ »óŸ¦ ¾Ë¼ö ¾øÀ½." + +#: compose.c:1141 +msgid "New file: " +msgstr "»õ ÆÄÀÏ: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-TypeÀÌ base/sub Çü½ÄÀÓ." + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "¾Ë ¼ö ¾ø´Â Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "%s ÆÄÀÏÀ» ¸¸µé ¼ö ¾øÀ½" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "¿©±â¿¡ ÀÖ´Â °ÍµéÀº ÷ºÎ °úÁ¤¿¡¼­ ½ÇÆÐÇÑ °ÍµéÀÔ´Ï´Ù." + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "ÀÌ ¸ÞÀÏÀ» ³ªÁß¿¡ º¸³¾±î¿ä?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "¸ÞÀÏÇÔ¿¡ ¸ÞÀÏ ¾²±â" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "%s¿¡ ¸ÞÀÏ ¾²´ÂÁß..." + +#: compose.c:1305 +msgid "Message written." +msgstr "¸ÞÀÏ ¾²±â ¿Ï·á." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "ÀÌ¹Ì S/MIMEÀÌ ¼±ÅõÊ. Áö¿ì°í °è¼ÓÇÒ±î¿ä? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP°¡ ¼±ÅõÊ. Áö¿ì°í °è¼ÓÇÒ±î¿ä? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (ÇöÀç ½Ã°£: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s Ãâ·Â °á°ú %s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "¾ÏÈ£ ¹®±¸ ÀØÀ½." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "PGP ¾ÏÈ£ ¹®±¸ ÀÔ·Â:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "SMIME ¾ÏÈ£ ¹®±¸ ÀÔ·Â:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "±¸½Ä inline PGP ¸Þ¼¼Áö¸¦ ¸¸µé±î¿ä?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "PGP¸¦ ±¸µ¿ÇÕ´Ï´Ù..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "³»¿ë¿¡ S/MIME Ç¥½Ã°¡ ¾ø´Â °æ¿ì´Â Áö¿øÇÏÁö ¾ÊÀ½." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "PGP ¿­¼è¸¦ ÃßÃâÇÏ´Â Áß...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "S/MIME ÀÎÁõ¼­ ÃßÃâÇÏ´Â Áß...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- ¿À·ù: ÀÏÄ¡ÇÏÁö ¾Ê´Â multipart/signed ±¸Á¶! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- ¿À·ù: ¾Ë ¼ö ¾ø´Â multipart/signed ÇÁ·ÎÅäÄÝ %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Warning: %s/%s ¼­¸íÀ» È®ÀÎ ÇÒ ¼ö ¾øÀ½ --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â ¼­¸í µÇ¾úÀ½ --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- °æ°í: ¼­¸íÀ» ãÀ» ¼ö ¾øÀ½. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- ¼­¸í ÀÚ·áÀÇ ³¡ --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "yes" + +#: curs_lib.c:158 +msgid "no" +msgstr "no" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "MuttÀ» Á¾·áÇÒ±î¿ä?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "¾Ë ¼ö ¾ø´Â ¿À·ù" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "¾Æ¹«Å°³ª ´©¸£¸é °è¼ÓÇÕ´Ï´Ù..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr "(¸ñ·Ï º¸±â '?'): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "¿­¸° ¸ÞÀÏÇÔÀÌ ¾øÀ½." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "¸ÞÀÏÀÌ ¾øÀ½." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Àбâ Àü¿ë ¸ÞÀÏÇÔ." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "¸ÞÀÏ Ã·ºÎ ¸ðµå¿¡¼­ Çã°¡µÇÁö ¾Ê´Â ±â´ÉÀÓ." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "¸ÞÀÏ ¾øÀ½." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Àбâ Àü¿ë ¸ÞÀÏÇÔ¿¡ ¾µ¼ö ¾øÀ½!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "º¯°æ »çÇ×Àº Æú´õ¸¦ ´ÝÀ»¶§ ±â·ÏµÊ." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "º¯°æ »çÇ×À» ±â·Ï ÇÏÁö ¾ÊÀ½." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Á¾·á" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "ÀúÀå" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "¸ÞÀÏ" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "´äÀå" + +#: curs_main.c:403 +msgid "Group" +msgstr "±×·ì" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "¿ÜºÎ¿¡¼­ ¸ÞÀÏÇÔÀÌ º¯°æµÊ. Ç÷¡±×°¡ Ʋ¸± ¼ö ÀÖÀ½" + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "ÇöÀç ¸ÞÀÏÇÔ¿¡ »õ ¸ÞÀÏ µµÂø." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "¿ÜºÎ¿¡¼­ ¸ÞÀÏÇÔÀÌ º¯°æµÊ." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Ç¥½ÃµÈ ¸ÞÀÏÀÌ ¾øÀ½." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "%s·Î ¿¬°á Áß..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "À̵¿: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "¸ÞÀÏÀÇ ¹øÈ£¸¸ °¡´É." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "¸ÞÀÏÀÌ º¼ ¼ö ¾ø´Â »óÅÂÀÓ." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "À߸øµÈ ¸ÞÀÏ ¹øÈ£." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "ÀÏÄ¡ÇÏ´Â ¸ÞÀÏ »èÁ¦: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Á¦ÇÑ ÆÐÅÏÀÌ ¾øÀ½." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "ÆÐÅÏ: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀÏ: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "MuttÀ» Á¾·áÇÒ±î¿ä?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "ÀÏÄ¡ÇÏ´Â ¸ÞÀÏ¿¡ Ç¥½ÃÇÔ: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "ÀÏÄ¡ÇÏ´Â ¸ÞÀÏÀ» »èÁ¦ Ãë¼Ò: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "ÀÏÄ¡ÇÏ´Â ¸ÞÀÏÀ» Ç¥½Ã ÇØÁ¦: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Àбâ Àü¿ëÀ¸·Î ¸ÞÀÏÇÔ ¿­±â" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "¸ÞÀÏÇÔ ¿­±â" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s´Â ¸ÞÀÏÇÔÀÌ ¾Æ´Ô." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "ÀúÀåÇÏÁö ¾Ê°í MuttÀ» ³¡³¾±î¿ä?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "¸¶Áö¸· ¸Þ¼¼ÁöÀÔ´Ï´Ù." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "»èÁ¦ Ãë¼ÒµÈ ¸ÞÀÏ ¾øÀ½." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "ù¹ø° ¸Þ¼¼ÁöÀÔ´Ï´Ù." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "À§ºÎÅÍ ´Ù½Ã °Ë»ö." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "¾Æ·¡ºÎÅÍ ´Ù½Ã °Ë»ö." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "»õ ¸ÞÀÏ ¾øÀ½" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "ÀÐÁö ¾ÊÀº ¸ÞÀÏ ¾øÀ½" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " º¸±â Á¦ÇÑ" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "POP ¼­¹ö¿¡¼­ 'Áß¿ä' Ç¥½Ã¸¦ ¹Ù²Ü ¼ö ¾øÀ½." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "´õ ÀÌ»ó ±ÛŸ·¡ ¾øÀ½." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "óÀ½ ±ÛŸ·¡ÀÔ´Ï´Ù." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "±ÛŸ·¡ ¸ðµå°¡ ¾Æ´Ô." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "±ÛŸ·¡¿¡ ÀÐÁö ¾ÊÀº ¸Þ¼¼Áö ÀÖÀ½." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "POP ¼­¹öÀÇ ¸ÞÀÏÀ» ¼öÁ¤ÇÒ ¼ö ¾øÀ½." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\t~ ·Î ½ÃÀÛÇÏ´Â ÇÑÁÙÀ» »ðÀÔÇϱâ\n" +"~b »ç¿ëÀÚ\tBcc: Ç׸ñ¿¡ »ç¿ëÀÚ Ãß°¡Çϱâ\n" +"~c »ç¿ëÀÚ\tCc: Ç׸ñ¿¡ »ç¿ëÀÚ Ãß°¡Çϱâ\n" +"~f ¸Þ¼¼Áö\t¸Þ¼¼Áö Æ÷ÇÔÇϱâ\n" +"~F ¸Þ¼¼Áö\tÇì´õ Æ÷ÇÔ ÀÌ¿Ü¿¡´Â ~f ¿Í µ¿ÀÏ\n" +"~h\t\t¸Þ¼¼Áö Çì´õ ÆíÁý\n" +"~m ¸Þ¼¼Áö\tÀÎ¿ë ¸Þ¼¼Áö Æ÷ÇÔ\n" +"~M ¸Þ¼¼Áö\tÇì´õ Æ÷ÇÔ ÀÌ¿Ü¿¡´Â ~m °ú µ¿ÀÏ\n" +"~p\t\t¸Þ¼¼Áö Àμâ\n" +"~q\t\t¸Þ¼¼Áö ÀúÀå ÈÄ ÆíÁý±â Á¾·á\n" +"~t »ç¿ëÀÚ\t»ç¿ëÀÚ¸¦ To: Ç׸ñ¿¡ Ãß°¡\n" +"~u\t\tÀÌÀü ÁÙ ´Ù½Ã ºÒ·¯¿È\n" +"~v\t\t$visual ÆíÁý±â·Î ¸Þ¼¼Áö ÆíÁý\n" +"~w ÆÄÀÏ\t\tÆÄÀÏ·Î ¸Þ¼¼Áö ÀúÀå\n" +"~x\t\tÆíÁý ¹«½ÃÇÏ°í ÆíÁý±â Á¾·á\n" +"~?\t\tÇöÀç ¸Þ¼¼Áö\n" +".\t\tÁÙ¿¡ Ȧ·Î ÀÖÀ» °æ¿ì ÀÔ·Â Á¾·á\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: À߸øµÈ ¸ÞÀÏ ¹øÈ£.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(ÁÙ¿¡ . Ȧ·Î »ç¿ëÇÏ¿© ¸Þ¼¼Áö ³¡³»±â)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "¸ÞÀÏÇÔ ¾øÀ½.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "¸Þ¼¼Áö¿¡ Æ÷ÇÔµÊ:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(°è¼Ó)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "ÆÄÀÏÀ̸§ÀÌ ºüÁü.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "¸Þ¼¼Áö¿¡ ³»¿ë ¾øÀ½.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "À߸øµÈ IDN %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: ¾Ë ¼ö ¾ø´Â ÆíÁý ¸í·É (~? µµ¿ò¸»)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Àӽà Æú´õ¸¦ ¸¸µé ¼ö ¾øÀ½: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Àӽà ¸ÞÀÏ Æú´õ¸¦ ¾µ ¼ö ¾øÀ½: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Àӽà ¸ÞÀÏ Æú´õ¸¦ »èÁ¦ ÇÒ ¼ö ¾øÀ½: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "¸Þ¼¼Áö ÆÄÀÏÀÌ ºñ¾úÀ½!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "¸Þ¼¼Áö°¡ º¯°æµÇÁö ¾ÊÀ½!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "¸Þ¼¼Áö ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Æú´õ¿¡ ÷°¡ÇÒ ¼ö ¾øÀ½: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Àӽà ÆÄÀÏÀ» ÀúÀåÇÏ´Â Áß ¿À·ù: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Ç÷¡±× ¼³Á¤" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Ç÷¡±× Áö¿ò" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- ¿À·ù: Multipart/Alternative ºÎºÐÀ» Ç¥½Ã ¼ö ¾øÀ½! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- ÷ºÎ¹° #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Á¾·ù: %s/%s, ÀÎÄÚµù ¹æ½Ä: %s, Å©±â: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- %s¸¦ »ç¿ëÇÑ ÀÚµ¿ º¸±â --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "ÀÚµ¿ º¸±â ¸í·É ½ÇÇà: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- %s¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- %sÀÇ ÀÚµ¿ º¸±â ¿À·ù --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- ¿À·ù: message/external-body¿¡ access-type º¯¼ö°¡ ¾øÀ½ --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[ -- %s/%s ÷ºÎ¹° " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(Å©±â: %s ¹ÙÀÌÆ®) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "»èÁ¦ µÇ¾úÀ½ --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s¿¡ --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- À̸§: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- ÀÌ %s/%s ÷ºÎ¹°Àº Æ÷ÇÔµÇÁö ¾ÊÀ½, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- ÁöÁ¤µÈ ¿ÜºÎ ¼Ò½º°¡ ¸¸±âµÊ --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- ÁöÁ¤µÈ access-type %s´Â Áö¿øµÇÁö ¾ÊÀ½ --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "¿À·ù: multipart/signed ÇÁ·ÎÅäÄÝÀÌ ¾øÀ½." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "¿À·ù: multipart/encrypted ÇÁ·ÎÅäÄÝ º¯¼ö°¡ ¾øÀ½!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Àӽà ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- '%s/%s'´Â Áö¿øµÇÁö ¾ÊÀ½ " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "('%s' Å°: ºÎºÐ º¸±â)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('÷ºÎ¹° º¸±â' ±Û¼è Á¤ÀÇ°¡ ÇÊ¿äÇÔ!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: ÆÄÀÏÀ» ÷ºÎÇÒ ¼ö ¾øÀ½" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "¿À·ù: ÀÌ ¹ö±×¸¦ º¸°í ÇØÁÖ¼¼¿ä" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<¾Ë¼ö ¾øÀ½>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"±âº» ±Û¼è Á¤ÀÇ:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"±Û¼è°¡ Á¤ÀǵÇÁö ¾ÊÀº ±â´É:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "%s µµ¿ò¸»" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: unhook * ÇÒ ¼ö ¾øÀ½." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: ¾Ë ¼ö ¾ø´Â hook À¯Çü: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: %s¸¦ %s¿¡¼­ Áö¿ï ¼ö ¾øÀ½." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "ÀÎÁõÀÚ°¡ ¾øÀ½." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "ÀÎÁõ Áß (anonymous)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonymous ÀÎÁõ ½ÇÆÐ" + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "ÀÎÁõ Áß (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 ÀÎÁõ¿¡ ½ÇÆÐÇÔ." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "ÀÎÁõ Áß (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI ÀÎÁõ¿¡ ½ÇÆÐÇÔ." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "ÀÌ ¼­¹ö´Â LOGINÀÌ Çã¿ëµÇÁö ¾ÊÀ½." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Á¢¼Ó Áß..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Á¢¼Ó ½ÇÆÐ." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "ÀÎÁõ Áß (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL ÀÎÁõ¿¡ ½ÇÆÐÇÔ." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s´Â À߸øµÈ IMAP ÆнºÀÓ" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "³×ÀÓ½ºÆäÀ̽º ¹Þ´Â Áß..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Æú´õ ¸ñ·Ï ¹Þ´Â Áß..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Æú´õ ¾øÀ½" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "¸ÞÀÏÇÔ ¿­±â" + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "¸ÞÀÏÇÔÀº À̸§À» °¡Á®¾ß ÇÔ." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "¸ÞÀÏÇÔÀÌ »ý¼ºµÊ." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "¸ÞÀÏÇÔÀÌ ´ÝÈû" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Ä¡¸íÀû ¿À·ù. ¸Þ¼¼Áö ¼ýÀÚ°¡ µ¿±âµÇÁö ¾ÊÀ½!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "%s¿ÍÀÇ ¿¬°áÀ» ´Ý´ÂÁß..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "¿À·¡µÈ ¹öÁ¯ÀÇ IMAP ¼­¹ö·Î Mutt¿Í »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "TLS¸¦ »ç¿ëÇÏ¿© ¿¬°á ÇÒ±î¿ä?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "TLS ¿¬°á ÇÒ¼ö ¾øÀ½" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "%s ¼±Åà Áß..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "¸ÞÀÏÇÔ ¿©´ÂÁß ¿À·ù" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "ÀÌ ¼­¹ö¿¡ IMAP ¸ÞÀÏÇÔÀ» Ãß°¡ÇÒ ¼ö ¾øÀ½" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "%s¸¦ ¸¸µé±î¿ä?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "IMAP ¼­¹ö Á¢¼Ó ´Ý´Â Áß..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "%d°³ÀÇ ¸ÞÀÏÀ» »èÁ¦ Ç¥½ÃÇÔ..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "»èÁ¦ ½ÇÆÐ" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "¸Þ¼¼Áö »óÅ Ç÷¡±× ÀúÀå... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "¼­¹ö¿¡¼­ ¸Þ¼¼Áö »èÁ¦ Áß..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: »èÁ¦ ½ÇÆÐ" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "´Ý±â ½ÇÆÐ" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "À߸øµÈ ¸ÞÀÏÇÔ À̸§" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "%s¿¡ °¡ÀÔ Áß..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "%s¿¡¼­ °¡ÀÔ Å»Åð Áß..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "ÀÌ ¹öÁ¯ÀÇ IAMP ¼­¹ö¿¡¼­ Çì´õ¸¦ °¡Á®¿Ã ¼ö ¾ø½À´Ï´Ù." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Àӽà ÆÄÀÏ %s¸¦ ¸¸µé ¼ö ¾øÀ½!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "¸Þ¼¼Áö Çì´õ °¡Á®¿À´Â Áß... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "¸Þ¼¼Áö °¡Á®¿À´Â Áß..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "À߸øµÈ ¸ÞÀÏ À妽º. ¸ÞÀÏÇÔ ¿­±â Àç½Ãµµ." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "¸ÞÀÏÀ» ¾÷·Îµå ÇÏ´Â Áß..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "%d°³ÀÇ ¸Þ¼¼Áö¸¦ %s·Î º¹»ç Áß..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "¸Þ¼¼Áö %d¸¦ %s·Î º¹»ç Áß..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "°è¼ÓÇÒ±î¿ä?" + +#: init.c:611 +msgid "alias: no address" +msgstr "º°Äª: ÁÖ¼Ò ¾øÀ½" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "°æ°í: À߸øµÈ IDN '%s' ¾Ë¸®¾Æ½º '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "À߸øµÈ Çì´õ Çʵå" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: ¾Ë ¼ö ¾ø´Â Á¤·Ä ¹æ¹ý" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): Á¤±ÔÇ¥Çö½Ä ¿À·ù: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: ¾Ë ¼ö ¾ø´Â º¯¼ö" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "À߸øµÈ Á¢µÎ»ç" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "À߸øµÈ º¯¼ö°ª" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s ¼³Á¤" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s ¼³Á¤ ÇØÁ¦" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: À߸øµÈ ¸ÞÀÏÇÔ Çü½Ä" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: À߸øµÈ °ª" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: ¾Ë ¼ö ¾ø´Â Çü½Ä" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: ¾Ë ¼ö ¾ø´Â Çü½Ä" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "%s: %sÀÇ »óŸ¦ ¾Ë¼ö ¾øÀ½." + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s´Â ¿Ã¹Ù¸¥ ÆÄÀÏÀÌ ¾Æ´Ô." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "%sÀÇ %d¹ø ÁÙ¿¡ ¿À·ù: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: %s¿¡ ¿À·ù" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: %s¿¡ ¿À·ù°¡ ¸¹À¸¹Ç·Î Àбâ Ãë¼Ò" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: %s¿¡ ¿À·ù" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: Àμö°¡ ³Ê¹« ¸¹À½" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: ¾Ë ¼ö ¾ø´Â ¸í·É¾î" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "¸í·É¾î ¿À·ù: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "Ȩ µð·ºÅ丮¸¦ ãÀ» ¼ö ¾øÀ½" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "»ç¿ëÀÚ À̸§À» ¾Ë¼ö ¾øÀ½" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "¸ÅÅ©·Î ·çÇÁ°¡ ¹ß»ý." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Á¤ÀǵÇÁö ¾ÊÀº ±Û¼è." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Á¤ÀǵÇÁö ¾ÊÀº ±Û¼è. µµ¿ò¸» º¸±â´Â '%s'" + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: Àμö°¡ ³Ê¹« ¸¹À½" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: ±×·± ¸Þ´º ¾øÀ½" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "°ø¹é ±Û¼è ½ÃÄö½º" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: Àμö°¡ ³Ê¹« ¸¹À½" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: ¸Ê¿¡ ±×·± ±â´É ¾øÀ½" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: ºó ±Û¼è ½ÃÄö½º" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: Àμö°¡ ³Ê¹« ¸¹À½" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: Àμö°¡ ¾øÀ½" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: ±×·± ±â´É ¾øÀ½" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Å° ÀÔ·Â (^G Ãë¼Ò): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Char = %s, Octal = %o, Decimal = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "°ø¹é ¿¬»ê" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "mailcapÀ» »ç¿ëÇØ °­Á¦·Î ÷ºÎ¹°À» º½" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "÷ºÎ¹°À» text·Î º¸±â" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Ãß°¡ ÷ºÎ¹°ÀÇ Ç¥½Ã »óÅ ¹Ù²Þ" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ÆäÀÌÁö ¸¶Áö¸·À¸·Î À̵¿" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "¸Þ¼¼Áö¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô º¸³¿" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "ÇöÀç µð·ºÅ丮¿¡¼­ »õ ÆÄÀÏ ¼±ÅÃ" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ÆÄÀÏ º¸±â" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ÇöÀç ¼±ÅÃµÈ ÆÄÀÏÀÇ À̸§ º¸±â" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "ÇöÀç ¸ÞÀÏÇÔ °¡ÀÔ (IMAP¸¸ Áö¿ø)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "ÇöÀç ¸ÞÀÏÇÔ Å»Åð (IMAP¸¸ Áö¿ø)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "¸ðµç/°¡ÀÔµÈ ¸ÞÀÏÇÔ º¸±â ¼±Åà (IMAP¸¸ Áö¿ø)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "»õ ¸ÞÀÏÀÌ µµÂøÇÑ ¸ÞÀÏÇÔ ¸ñ·Ï." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "µð·ºÅ丮 ¹Ù²Ù±â" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "¸ÞÀÏÇÔÀÇ »õ ¸ÞÀÏ È®ÀÎ" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "ÇöÀç ¸Þ¼¼Áö¿¡ ÆÄÀÏ Ã·ºÎ" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "ÇöÀç ¸Þ¼¼Áö¿¡ ¸Þ¼¼Áö ÷ºÎ" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "BCC ¸ñ·Ï ÆíÁý" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "CC ¸ñ·Ï ÆíÁý" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "÷ºÎ¹° ¼³¸í ÆíÁý" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "÷ºÎ¹° Àü¼Û ºÎȣȭ ¹æ¹ý ÆíÁý" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "ÇöÀç ¸Þ¼¼ÁöÀÇ º¹»çº»À» ÀúÀåÇÒ ÆÄÀÏ ¼±ÅÃ" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "ÆÄÀÏÀ» °íÄ£ ÈÄ Ã·ºÎÇϱâ" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "from Çʵå ÆíÁý" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "Çì´õ¸¦ Æ÷ÇÔÇÑ ¸Þ¼¼Áö ÆíÁý" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "¸Þ¼¼Áö ÆíÁý" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "mailcap Ç׸ñÀ» »ç¿ëÇÏ¿© ÷ºÎ¹° ÆíÁý" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "Reply-To Çʵå ÆíÁý" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "Á¦¸ñ ÆíÁý" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "TO ¸ñ·Ï ÆíÁýÇϱâ" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "»õ·Î¿î ¸ÞÀÏÇÔ ¸¸µë (IMAP¸¸ Áö¿ø)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "÷ºÎ¹° ³»¿ë À¯Çü ÆíÁý" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "÷ºÎ¹°ÀÇ Àӽà »çº» °¡Á®¿È" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "ispell·Î ¸ÞÀÏ °Ë»ç" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "mailcap Ç׸ñÀ» »ç¿ëÇØ »õ·Î¿î ÷ºÎ¹° ÀÛ¼º" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "÷ºÎ¹°ÀÇ ÀúÀå »óÅ Åä±Û" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "ÇöÀç ¸ÞÀÏÀ» ÀúÀå ÈÄ ³ªÁß¿¡ º¸³¿" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "÷ºÎ ÆÄÀÏ À̸§ º¯°æ/À̵¿" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "¸ÞÀÏ º¸³¿" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "inline ¶Ç´Â attachment ¼±ÅÃ" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "¹ß½Å ÈÄ ÆÄÀÏÀ» Áö¿ïÁö ¼±ÅÃ" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "÷ºÎ¹°ÀÇ ÀÎÄÚµù Á¤º¸ ´Ù½Ã Àбâ" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "¸ÞÀÏÀ» Æú´õ¿¡ ÀúÀå" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "¸ÞÀÏÀ» ÆÄÀÏ/¸ÞÀÏÇÔ¿¡ º¹»ç" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "¹ß½ÅÀÎÀÇ º°Äª ¸¸µé±â" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "Ç׸ñÀ» È­¸é ¾Æ·¡·Î À̵¿" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "Ç׸ñÀ» È­¸é Áß°£À¸·Î À̵¿" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "Ç׸ñÀ» È­¸é À§·Î À̵¿" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "text/plain À¸·Î µðÄÚµùÈÄ º¹»ç" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "text/plain À¸·Î µðÄÚµùÈÄ º¹»ç, Áö¿ì±â" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "ÇöÀç Ç׸ñ Áö¿ò" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "ÇöÀç ¸ÞÀÏÇÔÀ» »èÁ¦ (IMAP¿¡¼­¸¸)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "ºÎ¼Ó ±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ Áö¿ò" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ Áö¿ì±â" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "¼Û½ÅÀÎÀÇ ÁÖ¼Ò ÀüºÎ º¸±â" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "¸ÞÀÏ Ãâ·Â°ú Çì´õ ¼û±â±â Åä±Û" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "¸ÞÀÏ º¸±â" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "ÀúÀåµÈ »óÅÂÀÇ ¸ÞÀÏ ÆíÁý" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "Ä¿¼­ ¾ÕÀÇ ±ÛÀÚ Áö¿ò" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "Ä¿¼­¸¦ ÇѱÛÀÚ ¿ÞÂÊÀ¸·Î º¸³¿" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "´Ü¾îÀÇ Ã³À½À¸·Î À̵¿" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ÁÙÀÇ Ã³À½À¸·Î À̵¿" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "¼ö½Å ¸ÞÀÏÇÔ º¸±â" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "ÆÄÀÏ¸í ¶Ç´Â º°Äª ¿Ï¼ºÇϱâ" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "Äõ¸®·Î ÁÖ¼Ò ¿Ï¼ºÇϱâ" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "Ä¿¼­ÀÇ ±ÛÀÚ Áö¿ò" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ÁÙÀÇ ³¡À¸·Î À̵¿" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "ÇѱÛÀÚ ¿À¸¥ÂÊÀ¸·Î À̵¿" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "´Ü¾îÀÇ ³¡À¸·Î À̵¿" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "history ¸ñ·Ï ¾Æ·¡·Î ³»¸®±â" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "history ¸ñ·Ï À§·Î ¿Ã¸®±â" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "Ä¿¼­ºÎÅÍ ÁÙÀÇ ³¡±îÁö ±ÛÀÚ Áö¿ò" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "Ä¿¼­ºÎÅÍ ´Ü¾îÀÇ ³¡±îÁö Áö¿ò" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "ÇöÀç ÁÙÀÇ ¸ðµç ±ÛÀÚ Áö¿ò" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "Ä¿¼­ ¾ÕÀÇ ´Ü¾î Áö¿ò" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "´ÙÀ½¿¡ ÀԷµǴ ¹®ÀÚ¸¦ Àοë" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "¾ÕµÚ ¹®ÀÚ ¹Ù²Ù±â" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "´ë¹®ÀÚ·Î º¯È¯" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "¼Ò¹®ÀÚ·Î º¯È¯" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "´ë¹®ÀÚ·Î º¯È¯" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "muttrc ¸í·É¾î ÀÔ·Â" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "ÆÄÀÏ ¸Å½ºÅ© ÀÔ·Â" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "ÇöÀç ¸Þ´º ³ª°¨" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "½© ¸í·É¾î¸¦ ÅëÇØ Ã·ºÎ¹° °É¸£±â" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "óÀ½ Ç׸ñÀ¸·Î À̵¿" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "¸ÞÀÏÀÇ 'Áß¿ä' Ç÷¡±× »óÅ ¹Ù²Ù±â" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "¸ÞÀÏ Æ÷¿öµù" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "ÇöÀç Ç׸ñ ¼±ÅÃ" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "¸ðµç ¼ö½ÅÀÚ¿¡°Ô ´äÀå" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "1/2 ÆäÀÌÁö ³»¸®±â" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "1/2 ÆäÀÌÁö ¿Ã¸®±â" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "ÇöÀç È­¸é" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "¹øÈ£·Î À̵¿" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "¸¶Áö¸· Ç׸ñÀ¸·Î À̵¿" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "ÁöÁ¤µÈ ¸ÞÀϸµ ¸®½ºÆ®·Î ´äÀåÇϱâ" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "¸ÅÅ©·Î ½ÇÇà" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "»õ·Î¿î ¸ÞÀÏ ÀÛ¼º" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "´Ù¸¥ Æú´õ ¿­±â" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "´Ù¸¥ Æú´õ¸¦ Àбâ Àü¿ëÀ¸·Î ¿­±â" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "¸ÞÀÏÀÇ »óÅ Ç÷¡±× ÇØÁ¦Çϱâ" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀÏ »èÁ¦" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "IMAP ¼­¹ö¿¡¼­ ¸ÞÀÏ °¡Á®¿À±â" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "POP ¼­¹ö¿¡¼­ ¸ÞÀÏ °¡Á®¿À±â" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "óÀ½ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "¸¶Áö¸· ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀϸ¸ º¸ÀÓ" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "´ÙÀ½ »õ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "ÀÐÁö ¾ÊÀº ´ÙÀ½ ¸ÞÀÏ/»õ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "´ÙÀ½ ºÎ¼Ó ±ÛŸ·¡·Î À̵¿" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "´ÙÀ½ ±ÛŸ·¡·Î À̵¿" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "»èÁ¦µÇÁö ¾ÊÀº ´ÙÀ½ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ÀÐÁö ¾ÊÀº ´ÙÀ½ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "±ÛŸ·¡ÀÇ ºÎ¸ð ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ÀÌÀü ±ÛŸ·¡·Î À̵¿" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ÀÌÀü ºÎ¼Ó ±ÛŸ·¡·Î À̵¿" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "»èÁ¦µÇÁö ¾ÊÀº ÀÌÀü ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ÀÌÀü »õ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "ÀÐÁö ¾ÊÀº ÀÌÀü ¸ÞÀÏ/»õ ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ÀÐÁö ¾ÊÀº ÀÌÀü ¸ÞÀÏ·Î À̵¿" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "ÇöÀç ±ÛŸ·¡¿¡ ÀÐÀº Ç¥½ÃÇϱâ" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "ÇöÀç ºÎ¼Ó ±ÛŸ·¡¿¡ ÀÐÀº Ç¥½ÃÇϱâ" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "¸ÞÀÏÀÇ »óÅ Ç÷¡±× ¼³Á¤Çϱâ" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "¸ÞÀÏÇÔ º¯°æ »çÇ× ÀúÀå" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀÏ¿¡ ÅÂ±× ºÙÀÓ" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀÏ º¹±¸" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀÏÀÇ ÅÂ±× ÇØÁ¦" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ÆäÀÌÁö Áß°£À¸·Î À̵¿" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "´ÙÀ½ Ç׸ñÀ¸·Î À̵¿" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "ÇÑÁÙ¾¿ ³»¸®±â" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "´ÙÀ½ ÆäÀÌÁö·Î À̵¿" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "¸Þ¼¼Áö ¸¶Áö¸·À¸·Î À̵¿" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "Àο빮ÀÇ Ç¥½Ã »óÅ ¹Ù²Ù±â" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "Àο빮 ´ÙÀ½À¸·Î ³Ñ¾î°¡±â" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "¸Þ¼¼Áö óÀ½À¸·Î À̵¿" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "¸ÞÀÏ/÷ºÎ¹°À» ½© ¸í·ÉÀ¸·Î ¿¬°áÇϱâ" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ÀÌÀü Ç׸ñÀ¸·Î À̵¿" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "ÇÑÁÙ¾¿ ¿Ã¸®±â" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ÀÌÀü ÆäÀÌÁö·Î À̵¿" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "ÇöÀç Ç׸ñ Ãâ·Â" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "ÁÖ¼Ò¸¦ ¾ò±â À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥ ½ÇÇà" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "Äõ¸® °á°ú¸¦ ÇöÀç °á°ú¿¡ Ãß°¡" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "¸ÞÀÏÇÔÀÇ º¯°æ »çÇ× ÀúÀå ÈÄ ³¡³»±â" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "¹ß¼Û ¿¬±âÇÑ ¸ÞÀÏ ´Ù½Ã ºÎ¸£±â" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "È­¸é ´Ù½Ã ±×¸®±â" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{³»ºÎÀÇ}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "¸ÞÀÏ¿¡ ´äÀåÇϱâ" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "ÇöÀç ¸ÞÀÏÀ» »õ ¸ÞÀÏÀÇ ÅÛÇ÷¹ÀÌÆ®·Î »ç¿ëÇÔ" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "¸ÞÀÏ/÷ºÎ¹° ÆÄÀÏ·Î ÀúÀå" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "Á¤±Ô Ç¥Çö½ÄÀ» ÀÌ¿ëÇØ °Ë»ö" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "Á¤±Ô Ç¥Çö½ÄÀ» ÀÌ¿ëÇØ ¿ª¼ø °Ë»ö" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "´ÙÀ½ ã±â" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "¿ª¼øÀ¸·Î ã±â" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "°Ë»ö ÆÐÅÏ Ä÷¯¸µ ¼±ÅÃ" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "ÇϺΠ½© ½ÇÇà" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "¸ÞÀÏ Á¤·Ä" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "¸ÞÀÏ ¿ª¼ø Á¤·Ä" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "ÇöÀç Ç׸ñ¿¡ ÅÂ±× ºÙÀÓ" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "´ÙÀ½ ±â´ÉÀ» űװ¡ ºÙÀº ¸ÞÀÏ¿¡ Àû¿ë" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "´ÙÀ½ ±â´ÉÀ» űװ¡ ºÙÀº ¸ÞÀÏ¿¡ Àû¿ë" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "ÇöÀç ºÎ¼Ó ±ÛŸ·¡¿¡ ÅÂ±× ºÙÀÓ" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "ÇöÀç ±ÛŸ·¡¿¡ ÅÂ±× ºÙÀÓ" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "¸ÞÀÏÀÇ '»õ±Û' Ç÷¡±× »óÅ ¹Ù²Þ" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "¸ÞÀÏÇÔÀ» ´Ù½Ã ¾µ °ÍÀÎÁö ¼±ÅÃ" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "¸ÞÀÏÇÔÀ» º¼Áö ¸ðµç ÆÄÀÏÀ» º¼Áö ¼±ÅÃ" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ù ÆäÀÌÁö·Î À̵¿" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "ÇöÀç Ç׸ñ º¹±¸" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ º¹±¸Çϱâ" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "ºÎ¼Ó ±ÛŸ·¡ÀÇ ¸ðµç ¸ÞÀÏ º¹±¸Çϱâ" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "MuttÀÇ ¹öÁ¯°ú Á¦ÀÛÀÏ º¸±â" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "ÇÊ¿äÇÏ´Ù¸é mailcap Ç׸ñÀ» »ç¿ëÇØ Ã·ºÎ¹°À» º¸¿©ÁÜ" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "MIME ÷ºÎ¹° º¸±â" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "ÇöÀç Á¦ÇÑ ÆÐÅÏ º¸±â" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "ÇöÀç ±ÛŸ·¡ Æì±â/Á¢±â" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "¸ðµç ±ÛŸ·¡ Æì±â/Á¢±â" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "PGP °ø°³ ¿­¼è ÷ºÎ" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "PGP ¿É¼Ç º¸±â" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "PGP °ø°³ ¿­¼è ¹ß¼Û" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "PGP °ø°³ ¿­¼è È®ÀÎ" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "¿­¼èÀÇ »ç¿ëÀÚ ID º¸±â" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "Classic PGP È®ÀÎ" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "üÀÎ ±¸Á¶¸¦ Çã°¡ÇÔ" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "üÀο¡ ¸®¸ÞÀÏ·¯ ÷°¡" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "üÀο¡ ¸®¸ÞÀÏ·¯ »ðÀÔ" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "üÀο¡¼­ ¸®¸ÞÀÏ·¯ »èÁ¦" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "üÀÎÀÇ ÀÌÀü Ç׸ñ ¼±ÅÃ" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "üÀÎÀÇ ´ÙÀ½ Ç׸ñ ¼±ÅÃ" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "mixmaster ¸®¸ÞÀÏ·¯ üÀÎÀ» ÅëÇÑ ¸ÞÀÏ º¸³»±â" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "Çص¶ »çº» ¸¸µç ÈÄ »èÁ¦Çϱâ" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "Çص¶ »çº» ¸¸µé±â" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "¸Þ¸ð¸®¿¡¼­ ¾ÏÈ£ ¹®±¸ Áö¿ò" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "°ø°³ ¿­¼è ÃßÃâ" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "S/MIME ¿É¼Ç º¸±â" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "¸Þ¸ð¸® ºÎÁ·!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"°³¹ßÀÚ¿Í ¿¬¶ôÇÏ·Á¸é <mutt-dev@mutt.org>·Î ¸ÞÀÏÀ» º¸³»½Ê½Ã¿À.\n" +"¹ö±× º¸°í´Â flea(1) À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇØ ÁֽʽÿÀ.\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins ¿Ü.\n" +"MuttÀº ¾î¶°ÇÑ Ã¥ÀÓµµ ÁöÁö ¾Ê½À´Ï´Ù; ÀÚ¼¼ÇÑ »çÇ×Àº 'mutt -vv'¸¦ È®ÀÎÇϽñâ\n" +"¹Ù¶ø´Ï´Ù. MuttÀº °ø°³ ¼ÒÇÁÆ®¿þ¾îÀ̸ç, ÀÏÁ¤ »çÇ׸¸ ÁöŲ´Ù¸é ¿©·¯ºÐ²²¼­ ÀÚÀ¯\n" +"·ÎÀÌ Àç¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº 'mutt -vv'·Î È®ÀÎÇϽñ⠹ٶø´Ï´Ù.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"¿©±â¿¡ ¾ð±ÞµÇÁö ¾ÊÀº ¸¹Àº ºÐµé²²¼­ ¼Ò½º ÄÚµå, ¼öÁ¤, ±×¸®°í\n" +"±â´ÉÁ¦¾È¿¡ ¸¹Àº µµ¿òÀ» Áּ̽À´Ï´Ù.\n" +"\n" +" ÀÌ ÇÁ·Î±×·¥Àº °ø°³ Ç®±×¸²ÀÔ´Ï´Ù; ¿©·¯ºÐ²²¼­´Â Free Software Foundation\n" +" ÀÇ GNU General Public License¿¡ µû¶ó¼­ º» ÇÁ·Î±×·¥À» Àç¹èÆ÷ ¶Ç´Â ¼öÁ¤\n" +" ÇÒ ¼ö ÀÖ½À´Ï´Ù; GPL ¹öÁ¯ 2 ¶Ç´Â (¿©·¯ºÐÀÌ ¼±ÅÃÇÑ) ÀÌÈÄÀÇ GPL ¹öÁ¯À» µû\n" +" ¸¨´Ï´Ù.\n" +"\n" +" ÀÌ ÇÁ·Î±×·¥Àº À¯¿ëÇÏ°Ô ¾²ÀÌ±æ ¹Ù¶ó´Â Àǹ̿¡¼­ ¹èÆ÷µÇ¾úÀ¸¸ç, ÀÛµ¿¿¡ ´ë\n" +" ÇÑ ¾î¶°ÇÑ º¸Áõµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù; »óÇ°¼º ¶Ç´Â ƯÁ¤ ¸ñÀûÀÇ »ç¿ë¿¡ ´ëÇÑ\n" +" º¸Áõ ¶ÇÇÑ ¾ø½À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº GNU General Public License¸¦ Âü°íÇÏ\n" +" ½Ã±â ¹Ù¶ø´Ï´Ù.\n" +"\n" +" º» ÇÁ·Î±×·¥¿¡´Â GNU General Public License º¹»çº»ÀÌ Æ÷ÇÔ µÇ¾îÀÖ½À´Ï´Ù;\n" +" Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ» °æ¿ì ¾Æ·¡ÀÇ ÁÖ¼Ò·Î ¿¬¶ôÇϽñ⠹ٶø´Ï´Ù.\n" +" Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA " +"02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"usage: mutt [ -nRyzZ ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] [ -m <Á¾·ù> ] [ -f <ÆÄÀÏ" +"> ]\n" +" mutt [ -nR ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] -Q <Äõ¸®> [ -Q <Äõ¸®> ] " +"[...]\n" +" mutt [ -nR ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] -A <¾Ë¸®¾Æ½º> [ -A <¾Ë¸®¾Æ" +"½º> ] [...]\n" +" mutt [ -nx ] [ -e <¸í·É¾î> ] [ -a <ÆÄÀÏ> ] [ -F <ÆÄÀÏ> ] [ -H <ÆÄÀÏ" +"> ] [ -i <ÆÄÀÏ> ] [ -s <Á¦¸ñ> ] [ -b <ÁÖ¼Ò> ] [ -c <ÁÖ¼Ò> ] <ÁÖ¼Ò> [ ... ]\n" +" mutt [ -n ] [ -e <¸í·É¾î> ] [ -F <ÆÄÀÏ> ] -p\n" +" mutt -v[v]\n" +"\n" +"¼±ÅûçÇ×:\n" +" -A <¾Ë¸®¾Æ½º>\tÁÖ¾îÁø ¾Ë¸®¾Æ½º È®Àå\n" +" -a <ÆÄÀÏ>\t¸ÞÀÏ¿¡ ÆÄÀÏ Ã·ºÎ\n" +" -b <ÁÖ¼Ò>\tBCC ÁÖ¼Ò ÁöÁ¤\n" +" -c <ÁÖ¼Ò>\tCC ÁÖ¼Ò ÁöÁ¤\n" +" -e <¸í·É¾î>\tÃʱâÈ­ ÈÄ ½ÇÇàÇÒ ¸í·É¾î ÁöÁ¤\n" +" -f <ÆÄÀÏ>\tÀÐÀ» ¸ÞÀÏÇÔ ÁöÁ¤\n" +" -F <ÆÄÀÏ>\tº°µµÀÇ muttrc ÆÄÀÏ ÁöÁ¤\n" +" -H <ÆÄÀÏ>\tÇì´õºÎÅÍ ÀÐÀ» ÃÊ¾È ÆÄÀÏ ÁöÁ¤\n" +" -i <ÆÄÀÏ>\tMutt °¡ ´äÀå¿¡ Æ÷ÇÔ½Ãų ÆÄÀÏ ÁöÁ¤\n" +" -m <À¯Çü>\t±âº» ¸ÞÀÏÇÔ À¯Çü ÁöÁ¤\n" +" -n\t\tMutt ½Ã½ºÅÛ Muttrc ÆÄÀÏ ÀÐÁö ¾ÊÀ½\n" +" -p\t\t¹ß¼Û ¿¬±âµÈ ¸ÞÀÏ ´Ù½Ã ¿­±â\n" +" -Q <º¯¼ö>\t¼³Á¤ º¯¼ö Äõ¸®\n" +" -R\t\t¸ÞÀÏÇÔ Àбâ Àü¿ë ¹æ½ÄÀ¸·Î ¿­±â\n" +" -s <Á¦¸ñ>\tÁ¦¸ñ ÁöÁ¤ (°ø¹éÀÌ ÀÖÀ» °æ¿ì ÀÎ¿ë ºÎÈ£ »ç¿ë)\n" +" -v\t\t¹öÁ¯, ÄÄÆÄÀÏ ¿É¼Ç º¸±â\n" +" -x\t\tmailx Àü¼Û ¹æ½Ä Èä³»³»±â\n" +" -y\t\t`¸ÞÀÏÇÔ'ÀÇ ¸ñ·Ï Áß ¸ÞÀÏÇÔ ÁöÁ¤\n" +" -z\t\t¸ÞÀÏÇÔ¿¡ ¸ÞÀÏÀÌ ¾øÀ¸¸é Áï½Ã ³¡³»±â\n" +" -Z\t\t»õ ¸ÞÀÏÀÌ Àִ ù¹ø° ¸ÞÀÏÇÔ ¿­±â, ¾øÀ» °æ¿ì ³¡³¿\n" +" -h\t\tÇöÀç µµ¿ò¸»" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"ÄÄÆÄÀÏ ¼±ÅûçÇ×:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Å͹̳ΠÃʱâÈ­ ¿À·ù." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "µð¹ö±ë ·¹º§ %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG°¡ ÄÄÆÄÀϽà Á¤ÀǵÇÁö ¾ÊÀ½. ¹«½ÃÇÔ\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s°¡ ¾øÀ½. ¸¸µé±î¿ä?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "%s¸¦ ¸¸µé ¼ö ¾øÀ½: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "¼ö½ÅÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ½.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: ÆÄÀÏÀ» ÷ºÎÇÒ ¼ö ¾øÀ½.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "»õ ¸ÞÀÏÀÌ µµÂøÇÑ ¸ÞÀÏÇÔ ¾øÀ½." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "¼ö½Å ¸ÞÀÏÇÔÀÌ Á¤ÀǵÇÁö ¾ÊÀ½." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "¸ÞÀÏÇÔÀÌ ºñ¾úÀ½" + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "%s Àд Áß... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "¸ÞÀÏÇÔÀÌ ¼Õ»óµÊ!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "¸ÞÀÏÇÔÀÌ ¼Õ»óµÇ¾úÀ½!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Ä¡¸íÀû ¿À·ù! ¸ÞÀÏÇÔÀ» ´Ù½Ã ¿­ ¼ö ¾øÀ½!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "¸ÞÀÏÇÔÀ» Àá±Û ¼ö ¾øÀ½!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: mbox°¡ ¼öÁ¤µÇ¾úÀ¸³ª, ¼öÁ¤µÈ ¸ÞÀÏ´Â ¾øÀ½! (¹ö±× º¸°í ¹Ù¶÷)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "¸ÞÀÏ ¾²´Â Áß... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "¼öÁ¤Áß..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "¾²±â ½ÇÆÐ! ¸ÞÀÏÇÔÀÇ ÀϺΰ¡ %s¿¡ ÀúÀåµÇ¾úÀ½" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "¸ÞÀÏÇÔÀ» ´Ù½Ã ¿­ ¼ö ¾øÀ½!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "¸ÞÀÏÇÔÀ» ´Ù½Ã ¿©´Â Áß..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "À̵¿ÇÒ À§Ä¡: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "À߸øµÈ »öÀÎ ¹øÈ£." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Ç׸ñÀÌ ¾øÀ½." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "´õ ÀÌ»ó ³»·Á°¥ ¼ö ¾øÀ½." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "´õ ÀÌ»ó ¿Ã¶ó°¥ ¼ö ¾øÀ½." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "¸¶Áö¸· ÆäÀÌÁöÀÔ´Ï´Ù." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "ù¹ø° ÆäÀÌÁöÀÔ´Ï´Ù." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "ù¹ø° Ç׸ñ º¸ÀÓ." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "¸¶Áö¸· Ç׸ñ º¸ÀÓ." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "¸¶Áö¸· Ç׸ñ¿¡ À§Ä¡ÇÏ°í ÀÖ½À´Ï´Ù." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "ù¹ø° Ç׸ñ¿¡ À§Ä¡ÇÏ°í ÀÖ½À´Ï´Ù." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "ã¾Æº¸±â: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "¹Ý´ë ¹æÇâÀ¸·Î ã¾Æº¸±â: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "ÆÐÅÏÀ» ãÀ» ¼ö ¾øÀ½." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "ãÀ» ¼ö ¾øÀ½." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "űװ¡ ºÙÀº Ç׸ñ ¾øÀ½." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "ÀÌ ¸Þ´º¿¡´Â °Ë»ö ±â´ÉÀÌ ¾ø½À´Ï´Ù." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "¼±ÅÃâ¿¡´Â ¹Ù·Î °¡±â ±â´ÉÀÌ ¾ø½À´Ï´Ù." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "ű׸¦ ºÙÀÌ´Â °ÍÀ» Áö¿øÇÏÁö ¾ÊÀ½." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "%s Àд Áß... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): ÆÄÀÏ ½Ã°£À» ¼³Á¤ÇÒ ¼ö ¾øÀ½" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "ÆÄÀÏÀÌ ¾Æ´Ï¶ó µð·ºÅ丮ÀÔ´Ï´Ù, ±× ¾Æ·¡¿¡ ÀúÀåÇÒ±î¿ä?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "ÆÄÀÏÀÌ ¾Æ´Ï¶ó µð·ºÅ丮ÀÔ´Ï´Ù, ±× ¾Æ·¡¿¡ ÀúÀåÇÒ±î¿ä?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "µð·ºÅ丮¾È¿¡ ÀúÀåÇÒ ÆÄÀÏ:" + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "ÆÄÀÏÀÌ Á¸ÀçÇÔ, µ¤¾î¾²±â(o), ÷°¡(a), Ãë¼Ò(c)?" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "POP ¸ÞÀÏÇÔ¿¡ ¸ÞÀÏÀ» ÀúÀåÇÒ ¼ö ¾øÀ½." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s´Â ¸ÞÀÏÇÔÀÌ ¾Æ´Ô!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "%s¿¡ ¸ÞÀÏÀ» ÷°¡ÇÒ±î¿ä?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "%sÀÇ Á¢¼ÓÀÌ ²÷¾îÁü" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL »ç¿ë ºÒ°¡." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Ãʱâ Á¢¼Ó(preconnect) ¸í·É ½ÇÆÐ." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "%s (%s) ¿À·ù" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "À߸øµÈ IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "%s¸¦ ã´Â Áß..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "%s È£½ºÆ®¸¦ ãÀ» ¼ö ¾øÀ½." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "%s·Î ¿¬°á Áß..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "%s (%s)·Î ¿¬°áÇÒ ¼ö ¾øÀ½." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "½Ã½ºÅÛ¿¡¼­ ÃæºÐÇÑ ¿£Æ®·ÎÇǸ¦ ãÀ» ¼ö ¾øÀ½" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "¿£Æ®·ÎÇǸ¦ ä¿ì´Â Áß: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s´Â ¾ÈÀüÇÏÁö ¾ÊÀº Æ۹̼ÇÀ» °¡Áö°í ÀÖÀ½!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "¿£Æ®·ÎÇÇ ºÎÁ·À¸·Î ÀÎÇØ SSL »ç¿ë ºÒ°¡" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "ÀÔ/Ãâ·Â ¿À·ù" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "¸íÈ®ÇÏÁö ¾ÊÀº ÇÁ·ÎÅäÄÝ ¿À·ù" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL ½ÇÆÐ: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "ÁöÁ¤ÇÑ °÷¿¡¼­ ÀÎÁõ¼­¸¦ °¡Á®¿Ã ¼ö ¾øÀ½" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "%s¸¦ »ç¿ëÇØ SSL ¿¬°á (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "¾Ë ¼ö ¾øÀ½" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[°è»êÇÒ ¼ö ¾øÀ½]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[À߸øµÈ ³¯Â¥]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "¼­¹ö ÀÎÁõ¼­°¡ ¾ÆÁ÷ À¯È¿ÇÏÁö ¾ÊÀ½ " + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "¼­¹ö ÀÎÁõ¼­°¡ ¸¸±âµÊ" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "ÀÌ ÀÎÁõ¼­´Â ´ÙÀ½¿¡ ¼ÓÇÔ:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "ÀÌ ÀÎÁõ¼­ÀÇ ¹ßÇàÀÎÀº:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "ÀÌ ÀÎÁõ¼­´Â À¯È¿ÇÔ" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " from %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " to %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingerprint: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL ÀÎÁõ¼­ °Ë»ç" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "°ÅºÎ(r), À̹ø¸¸ Çã°¡(o), ¾ðÁ¦³ª Çã°¡(a)" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "roa" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "°ÅºÎ(r), À̹ø¸¸ Çã°¡(o)" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ro" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "³¡³»±â " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "°æ°í: ÀÎÁõ¼­¸¦ ÀúÀåÇÏÁö ¸øÇÔ" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "ÀÎÁõ¼­ ÀúÀåµÊ" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Àá±Ý ¼ö°¡ Çѵµ¸¦ ³Ñ¾úÀ½, %sÀÇ Àá±ÝÀ» ¾ø¾Ù±î¿ä?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "dotlock %s¸¦ ÇÒ ¼ö ¾øÀ½.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "fcntl Àá±Ý ½Ãµµ Áß ½Ã°£ Á¦ÇÑÀ» ÃÊ°úÇÔ!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "fcntl Àá±ÝÀ» ±â´Ù¸®´Â Áß... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "flock Àá±Ý ½Ãµµ Áß ½Ã°£ Á¦ÇÑÀ» ÃÊ°úÇÔ!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "flock ½Ãµµ¸¦ ±â´Ù¸®´Â Áß... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "%s¸¦ Àá±Û ¼ö ¾øÀ½.\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "%s Àд Áß..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "%s ¾²´Â Áß..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "%s ¸ÞÀÏÇÔÀ» µ¿±âÈ­ ½Ãų ¼ö ¾øÀ½!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "ÀÐÀº ¸ÞÀÏÀ» %s·Î ¿Å±æ±î¿ä?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "»èÁ¦ Ç¥½ÃµÈ ¸ÞÀÏ(%d)À» »èÁ¦ÇÒ±î¿ä?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "»èÁ¦ Ç¥½ÃµÈ ¸ÞÀϵé(%d)À» »èÁ¦ÇÒ±î¿ä?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "ÀÐÀº ¸ÞÀÏÀ» %s·Î ¿Å±â´Â Áß..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "¸ÞÀÏÇÔÀÌ º¯°æµÇÁö ¾ÊÀ½." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d°³ º¸°ü, %d°³ À̵¿, %d°³ »èÁ¦" + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d°³ º¸°ü, %d°³ »èÁ¦" + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " ¾²±â »óÅ ¹Ù²Ù±â; `%s'¸¦ ´©¸£¼¼¿ä" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "´Ù½Ã ¾²±â¸¦ °¡´ÉÇÏ°Ô ÇÏ·Á¸é 'toggle-write'¸¦ »ç¿ëÇϼ¼¿ä!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "¸ÞÀÏÇÔÀÌ ¾²±â ºÒ°¡´ÉÀ¸·Î Ç¥½Ã µÇ¾úÀ½. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "¸ÞÀÏÇÔÀÌ Ç¥½ÃµÊ." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "¸ÞÀÏÀ» ¾²Áö ¸øÇÔ" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "ÀÌ ¸Þ´º¿¡¼± À¯È¿ÇÏÁö ¾ÊÀ½." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "ÀÌÀüÆäÀÌÁö" + +#: pager.c:1447 +msgid "NextPg" +msgstr "´ÙÀ½ÆäÀÌÁö" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "÷ºÎ¹°º¸±â" + +#: pager.c:1454 +msgid "Next" +msgstr "´ÙÀ½" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "¸Þ¼¼ÁöÀÇ ³¡ÀÔ´Ï´Ù." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "¸Þ¼¼ÁöÀÇ Ã³À½ÀÔ´Ï´Ù." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "°Å²Ù·Î ã±â: " + +#: pager.c:1955 +msgid "Search: " +msgstr "ã±â: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "ÇöÀç µµ¿ò¸»À» º¸°í ÀÖ½À´Ï´Ù." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "´õ ÀÌ»óÀÇ Àο빮 ¾øÀ½." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Àο빮 ÀÌÈÄ¿¡ ´õ ÀÌ»óÀÇ ºñ Àο빮 ¾øÀ½." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "´ÙÁß ÆÄÆ® ¸ÞÀÏ¿¡ °æ°è º¯¼ö°¡ ¾øÀ½!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Ç¥Çö½Ä¿¡¼­ ¿À·ù: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "À߸øµÈ ³¯Â¥ ÀÔ·Â: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "À߸øµÈ ´Þ ÀÔ·Â: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "À߸øµÈ ³¯Â¥ ÀÔ·Â: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "Ç¥Çö½Ä ¿À·ù" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "ÆÐÅÏ ¿À·ù: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: À߸øµÈ ¸í·É¾î" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: ÀÌ ¸ðµå¿¡¼­ Áö¿øµÇÁö ¾ÊÀ½" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "º¯¼ö°¡ ºüÁü" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "»ðÀÔ ¾î±¸°¡ ¸ÂÁö ¾ÊÀ½: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "ºó ÆÐÅÏ" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "¿À·ù: ¾Ë ¼ö ¾ø´Â ÀÛµ¿ %d (¿À·ù º¸°í ¹Ù¶÷)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "°Ë»ö ÆÐÅÏ ÄÄÆÄÀÏ Áß..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "¼±ÅÃµÈ ¸ÞÀÏ¿¡ ¸í·É ½ÇÇàÁß..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "±âÁØ°ú ÀÏÄ¡ÇÏ´Â ¸ÞÀÏÀÌ ¾øÀ½." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "ÀÏÄ¡ÇÏ´Â °á°ú°¡ ¾Æ·¡¿¡ ¾øÀ½" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "ÀÏÄ¡ÇÏ´Â °á°ú°¡ À§¿¡ ¾øÀ½" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "ã´Â µµÁß ÁߴܵÊ." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP ¾ÏÈ£ ¹®±¸ ÀØÀ½." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ¿À·ù: PGP ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP Ãâ·Â ³¡ --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ¸ÞÀÏ ½ÃÀÛ --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP °ø°³ ¿­¼è ºÎºÐ ½ÃÀÛ --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ¼­¸í ¸ÞÀÏ ½ÃÀÛ --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- PGP ¸ÞÀÏ ³¡ --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP °ø°³ ¿­¼è ºÎºÐ ³¡--]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- PGP ¼­¸í ¸ÞÀÏ ³¡ --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ¿À·ù: PGP ¸ÞÀÏÀÇ ½ÃÀÛÀ» ãÀ» ¼ö ¾øÀ½! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "³»ºÎ ¿À·ù. <roessler@does-not-exist.org>¿¡°Ô ¾Ë·ÁÁֽʽÿä." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Error: PGP ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ¿À·ù: À߸ø ¸¸µé¾îÁø PGP/MIME Çü½ÄÀÇ ¸ÞÀÏ! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ¿À·ù: Àӽà ÆÄÀÏÀ» ¸¸µé ¼ö°¡ ¾øÀ½! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â PGP/MIME ¾Ïȣȭ µÇ¾úÀ½ --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- PGP/MIME ¾Ïȣȭ ÀÚ·á ³¡ --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "PGP ÇϺΠÇÁ·Î¼¼½º¸¦ ¿­ ¼ö ¾øÀ½!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "keyID = \"%s\"¸¦ %s¿¡ »ç¿ëÇÒ±î¿ä?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "%sÀÇ keyID ÀÔ·Â: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP¸¦ ½ÇÇàÇÏÁö ¸øÇÔ" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "PGP ¿­¼è °¡Á®¿À´Â Áß..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "¸ðµç Å°°¡ ¸¸±â/Ãë¼Ò/»ç¿ë ºÒ°¡ ÀÔ´Ï´Ù." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "¼±Åà " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "¿­¼è È®ÀÎ " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP Å°°¡ <%s>¿Í ÀÏÄ¡ÇÔ." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP Å°°¡ \"%s\"¿Í ÀÏÄ¡ÇÔ." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "/dev/null¸¦ ¿­ ¼ö ¾øÀ½" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Àӽà ÆÄÀÏÀ» ¸¸µé ¼ö ¾øÀ½" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "¿­¼è ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "ÀÌ Å°´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: ¸¸±â/»ç¿ëÁßÁö/Ãë¼ÒµÊ." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ÀÌ Å°´Â ¸¸±â/»ç¿ëÁßÁö/Ãë¼ÒµÊ." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "IDÀÇ ÀÎÁõÀÚ°¡ Á¤ÀǵÇÁö ¾ÊÀ½." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ÀÌ ID´Â È®½ÇÇÏÁö ¾ÊÀ½." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ÀÌ ID´Â ½Å¿ëµµ°¡ ³·À½" + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ÀÌ Å°¸¦ Á¤¸»·Î »ç¿ëÀ» ÇÏ°Ú½À´Ï±î?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "¿­¼è ID ¸¦ ÀÔ·ÂÇϽʽÿä: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "PGP¸¦ ±¸µ¿ÇÕ´Ï´Ù..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP Å° %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "\"%s\"¿Í ÀÏÄ¡ÇÏ´Â Å°¸¦ ã´Â Áß..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "¸í·É¾î TOPÀÌ ¼­¹ö¿¡¼­ Áö¿øµÇÁö ¾ÊÀ½." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Àӽà ÆÄÀÏ ¸¸µé ¼ö ¾øÀ½" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "¸í·É¾î UIDLÀÌ ¼­¹ö¿¡¼­ Áö¿øµÇÁö ¾ÊÀ½." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s´Â À߸øµÈ POP Æнº" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "¸ÞÀÏÀÇ ¸ñ·ÏÀ» °¡Á®¿À´Â Áß..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "¸ÞÀÏÀ» Àӽà ÆÄÀÏ¿¡ ¾µ¼ö ¾øÀ½!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "»õ ¸ÞÀÏÀ» È®ÀÎÁß..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP ¼­¹ö°¡ ÁöÁ¤µÇÁö ¾ÊÀ½." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "POP ¸ÞÀÏÇÔ¿¡ »õ ¸ÞÀÏÀÌ ¾øÀ½." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "¼­¹öÀÇ ¸ÞÀÏÀ» »èÁ¦ ÇÒ±î¿ä?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "»õ ¸ÞÀÏ Àд Áß (%d ¹ÙÀÌÆ®)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "¸ÞÀÏÇÔ¿¡ ¾²´Â Áß ¿À·ù!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d - %d ¸ÞÀÏ ÀÐÀ½]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "¼­¹ö¿Í ¿¬°áÀÌ ²÷¾îÁü!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "ÀÎÁõ Áß (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "ÀÎÁõ Áß (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP ÀÎÁõ¿¡ ½ÇÆÐÇÔ." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "¸í·É¾î USER¸¦ ¼­¹ö¿¡¼­ Áö¿øÇÏÁö ¾ÊÀ½." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "¼­¹ö¿¡ ¸ÞÀÏÀ» ³²°Ü µÑ ¼ö ¾øÀ½." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "%s ¼­¹ö¿ÍÀÇ ¿¬°á ¿À·ù" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "POP ¼­¹ö¿ÍÀÇ ¿¬°áÀ» ´Ý´ÂÁß..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "¸ÞÀÏ À妽º¸¦ È®ÀÎÁß..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "¿¬°áÀÌ ²÷¾îÁü. POP ¼­¹ö¿Í ´Ù½Ã ¿¬°á ÇÒ±î¿ä?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "¹ß¼Û ¿¬±â µÊ" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "¹ß¼Û ¿¬±âµÈ ¸ÞÀÏ ¾øÀ½." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "À߸øµÈ PGP Çì´õ" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "À߸øµÈ S/MIME Çì´õ" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Çص¶ ½ÇÆÐ." + +#: query.c:46 +msgid "New Query" +msgstr "»õ Áú¹®" + +#: query.c:47 +msgid "Make Alias" +msgstr "º°Äª ¸¸µé±â" + +#: query.c:48 +msgid "Search" +msgstr "ã±â" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "ÀÀ´äÀ» ±â´Ù¸®´Â Áß..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "ÁúÀÇ ¸í·ÉÀÌ Á¤ÀǵÇÁö ¾ÊÀ½." + +#: query.c:286 +msgid "Query" +msgstr "ÁúÀÇ" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "ÁúÀÇ: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "ÁúÀÇ '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "¿¬°á" + +#: recvattach.c:53 +msgid "Print" +msgstr "Ãâ·Â" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "ÀúÀåÁß..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "÷ºÎ¹° ÀúÀåµÊ." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ÁÖÀÇ! %s¸¦ µ¤¾î ¾º¿ó´Ï´Ù, °è¼ÓÇÒ±î¿ä?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "÷ºÎ¹° ÇÊÅ͵Ê." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "ÇÊÅÍ: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "¿¬°á: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "÷ºÎ¹° %sÀÇ Ãâ·Â ¹æ¹ýÀ» ¾Ë ¼ö ¾øÀ½!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "űװ¡ ºÙÀº ÷ºÎ¹° Ãâ·Â?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "÷ºÎ¹° Ãâ·Â?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "¾ÏȣȭµÈ ¸ÞÀÏÀ» Çص¶ÇÒ ¼ö ¾øÀ½!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "÷ºÎ¹°" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "´õ ÀÌ»ó ÷ºÎ¹°ÀÌ ¾ø½À´Ï´Ù." + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "POP ¼­¹ö¿¡¼­ ÷ºÎ¹°À» »èÁ¦ ÇÒ¼ö ¾øÀ½." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "¾ÏȣȭµÈ ¸ÞÀÏÀÇ Ã·ºÎ¹° »èÁ¦´Â Áö¿øµÇÁö ¾ÊÀ½." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "´ÙÁßü°è ÷ºÎ¹°ÀÇ »èÁ¦¸¸ÀÌ Áö¿øµË´Ï´Ù." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "message/rfc822 ºÎºÐ¸¸ Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "¸ÞÀÏ ¹Ù¿î½ºÁß ¿À·ù!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "¸ÞÀÏ ¹Ù¿î½ºÁß ¿À·ù!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Àӽà ÆÄÀÏ %s¸¦ ¿­Áö ¸øÇÔ" + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "÷ºÎ¹°·Î Æ÷¿öµù?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "Ç¥½ÃµÈ ÷ºÎ¹°À» ¸ðµÎ µðÄÚµùÇÏÁö ¸øÇÔ. ³ª¸ÓÁö´Â MIME Æ÷¿öµù ÇÒ±î¿ä?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "MIME ĸ½¶¿¡ ³Ö¾î Æ÷¿öµùÇÒ±î¿ä?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "%s¸¦ ¸¸µé ¼ö ¾øÀ½." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Ç¥½ÃµÈ ¸ÞÀÏÀÌ ¾ø½À´Ï´Ù." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "¸ÞÀϸµ ¸®½ºÆ®¸¦ ãÀ» ¼ö ¾øÀ½!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "Ç¥½ÃµÈ ÷ºÎ¹°À» ¸ðµÎ µðÄÚµùÇÏÁö ¸øÇÔ. ³ª¸ÓÁö´Â MIME ĸ½¶À» »ç¿ëÇÒ±î¿ä?" + +#: remailer.c:480 +msgid "Append" +msgstr "÷°¡" + +#: remailer.c:481 +msgid "Insert" +msgstr "»ðÀÔ" + +#: remailer.c:482 +msgid "Delete" +msgstr "»èÁ¦" + +#: remailer.c:484 +msgid "OK" +msgstr "È®ÀÎ" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "mixmasterÀÇ type2.list¸¦ ãÁö ¸øÇÔ!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "¸®¸ÞÀÏ·¯ üÀÎ ¼±ÅÃ." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "¿À·ù: %s´Â üÀÎÀÇ ¸¶Áö¸· ¸®¸ÞÀÏ·¯·Î »ç¿ëÇÒ¼ö ¾øÀ½." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster üÀÎÀº %d°³ÀÇ Á¦ÇÑÀÌ ÀÖÀ½." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "¸®¸ÞÀÏ·¯ üÀÎÀÌ ÀÌ¹Ì ºñ¾î ÀÖÀ½." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "ÀÌ¹Ì Ã¹¹ø° üÀÎÀ» ¼±ÅÃÇßÀ½." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "ÀÌ¹Ì ¸¶Áö¸· üÀÎÀ» ¼±ÅÃÇßÀ½." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster´Â Cc ¶Ç´Â Bcc Çì´õ¸¦ Çã¿ëÇÏÁö ¾ÊÀ½." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "mixmaster¸¦ »ç¿ëÇϱâ À§ÇÑ Àû´çÇÑ È£½ºÆ® º¯¼ö¸¦ »ç¿ëÇϼ¼¿ä!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "¸ÞÀÏ º¸³»´Â Áß ¿À·ù %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "¸ÞÀÏ º¸³»´Â Áß ¿À·ù." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "\"%2$s\" %d ¹ø° ÁÙÀÇ %1$s À¯ÇüÀÇ Ç׸ñÀº À߸øµÈ Çü½ÄÀÓ" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "mailcap Æнº°¡ ÁöÁ¤µÇÁö ¾ÊÀ½" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "%s Çü½ÄÀ» mailcap Ç׸ñ¿¡¼­ ãÀ» ¼ö ¾øÀ½" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: ³Ê¹« ÀûÀº ÀÎÀÚ" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: ³Ê¹« ¸¹Àº ÀÎÀÚ" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Á¦¸ñ ¾øÀ½. ³¡³¾±î¿ä?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Á¦¸ñ ¾øÀ½. ³¡³À´Ï´Ù." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "%s%s¿¡°Ô ´äÀå?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "%s%s¿¡°Ô ´ñ±Û?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "űװ¡ ºÙÀº ¸ÞÀÏÀ» º¼ ¼ö ¾øÀ½!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "´äÀå¿¡ ¿øº»À» Æ÷ÇÔ½Ãŵ´Ï±î?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "ÀÎ¿ë ¸ÞÀÏ Æ÷ÇÔ Áß..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "¿äûµÈ ¸ðµç ¸ÞÀÏÀ» Æ÷ÇÔÇÒ ¼ö ¾øÀ½!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "÷ºÎ¹°·Î Æ÷¿öµù?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "¸ÞÀÏ Æ÷¿öµùÀ» Áغñ Áß..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "¹ß¼Û ¿¬±âµÈ ¸ÞÀÏÀ» ´Ù½Ã ºÎ¸¦±î¿ä?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Æ÷¿öµùµÈ ¸ÞÀÏÀ» ¼öÁ¤ÇÒ±î¿ä?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "º¯°æµÇÁö ¾ÊÀº ¸ÞÀÏÀ» Ãë¼ÒÇÒ±î¿ä?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "º¯°æµÇÁö ¾ÊÀº ¸ÞÀÏ Ãë¼ÒÇÔ." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "º¸³»Áö ¾ÊÀ½." + +#: send.c:1430 +msgid "Message postponed." +msgstr "¹ß¼Û ¿¬±âµÊ." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "¼ö½ÅÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ½!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "¼ö½ÅÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ½." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Á¦¸ñ ¾øÀ½, º¸³»±â¸¦ Ãë¼ÒÇÒ±î¿ä?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Á¦¸ñÀÌ ÁöÁ¤µÇÁö ¾ÊÀ½." + +#: send.c:1526 +msgid "Sending message..." +msgstr "¸ÞÀÏ º¸³»´Â Áß..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "¸ÞÀÏÀ» º¸³¾ ¼ö ¾øÀ½." + +#: send.c:1672 +msgid "Mail sent." +msgstr "¸ÞÀÏ º¸³¿." + +#: send.c:1672 +msgid "Sending in background." +msgstr "¹é±×¶ó¿îµå·Î º¸³¿." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "ÇÑ°è º¯¼ö ¾øÀ½! [¿À·ù º¸°í ¹Ù¶÷]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s°¡ ´õ ÀÌ»ó Á¸ÀçÄ¡ ¾ÊÀ½!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s´Â ¿Ã¹Ù¸¥ ÆÄÀÏÀÌ ¾Æ´Ô." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "%s¸¦ ¿­ ¼ö ¾øÀ½" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "¸ÞÀÏÀ» º¸³»´Â Áß ¿À·ù %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "¹è´Þ ÇÁ·Î¼¼½ºÀÇ Ãâ·Â" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "resent-fromÀ» ÁغñÇÏ´Â µ¿¾È À߸øµÈ IDN %s" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Á¾·áÇÔ.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "%s ¹ß°ß... Á¾·áÇÔ.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "%d ½ÅÈ£ ¹ß°ß... Á¾·áÇÔ.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "½Å¿ëÇÒ ¼ö ÀÖÀ½ " + +#: smime.c:303 +msgid "Verified " +msgstr "È®ÀÎµÊ " + +#: smime.c:306 +msgid "Unverified" +msgstr "¹ÌÈ®ÀεÊ" + +#: smime.c:309 +msgid "Expired " +msgstr "¸¸±âµÊ " + +#: smime.c:312 +msgid "Revoked " +msgstr "Ãë¼ÒµÊ " + +#: smime.c:315 +msgid "Invalid " +msgstr "¹«È¿ " + +#: smime.c:318 +msgid "Unknown " +msgstr "¾Ë ¼ö ¾øÀ½ " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "keyID ÀÔ·Â: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME ÀÎÁõ¼­°¡ \"%s\"¿Í ÀÏÄ¡." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s ¹ÌÈ®ÀεÊ. %s¿¡ »ç¿ëÇÒ±î¿ä?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "ID \"%s\" (¹ÏÀ» ¼ö ¾øÀ½!)¸¦ %s¿¡ »ç¿ëÇÒ±î¿ä?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "ID \"%s\"¸¦ %s¿¡ »ç¿ëÇÒ±î¿ä?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "°æ°í: ½Å¿ë ID %s¸¦ °áÁ¤ÇÏÁö ¾Ê¾Ò½À´Ï´Ù. (¾Æ¹« Å°³ª °è¼Ó)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "%s¸¦ À§ÇÑ ÀÎÁõ¼­¸¦ ãÀ» ¼ö ¾øÀ½." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "¿À·ù: OpenSSL ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "ÀÎÁõÆÄÀÏ ¾øÀ½" + +#: smime.c:1200 +msgid "no mbox" +msgstr "¸ÞÀÏÇÔ ¾øÀ½" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "OpenSSLÀ¸·Î ºÎÅÍ Ãâ·ÂÀÌ ¾øÀ½.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "°æ°í: ÀÎÁõ¼­¸¦ ãÀ» ¼ö ¾øÀ½" + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "OpenSSL ÇϺΠÇÁ·Î¼¼½º¸¦ ¿­ ¼ö ¾øÀ½!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "OpenSSLÀ¸·Î ºÎÅÍ Ãâ·ÂÀÌ ¾øÀ½..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- OpenSSL Ãâ·Â ³¡ --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ¿À·ù: OpenSSL ÇϺΠÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â S/MIME ¾Ïȣȭ µÇ¾úÀ½ --]\n" +"\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- ¾Æ·¡ÀÇ ÀÚ·á´Â S/MIME ¼­¸í µÇ¾úÀ½ --]\n" +"\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- S/MIME ¾Ïȣȭ ÀÚ·á ³¡ --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- S/MIME ¼­¸í ÀÚ·á ³¡ --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "¸ÞÀÏÇÔ Á¤·Ä Áß..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Á¤·Ä ÇÔ¼ö ãÀ» ¼ö ¾øÀ½! [¹ö±× º¸°í ¹Ù¶÷]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(¸ÞÀÏÇÔ ¾øÀ½)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Á¦ÇÑµÈ º¸±â·Î ºÎ¸ð ¸ÞÀÏÀº º¸ÀÌÁö ¾Ê´Â »óÅÂÀÓ." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "ºÎ¸ð ¸ÞÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½." diff --git a/po/lt.gmo b/po/lt.gmo new file mode 100644 index 0000000000000000000000000000000000000000..599ae97b30fd7cc8b916021eea5945a8beca15e1 GIT binary patch literal 59501 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 literal 0 HcmV?d00001 diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..f4dd8f6 --- /dev/null +++ b/po/lt.po @@ -0,0 +1,4301 @@ +# Lithuanian translation of Mutt +# Copyright (C) 2000 Free Software Foundation, Inc. +# Tadas <btadas@is.lt>, 2000 +# Marius Gedminas <mgedmin@puni.osf.lt> +# Gediminas Paulauskas <menesis@delfi.lt>, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: mutt 1.3.12i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2000-11-29 21:22+0200\n" +"Last-Translator: Gediminas Paulauskas <menesis@delfi.lt>\n" +"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-13\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "%s vartotojo vardas: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s slaptaþodis: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Iðeit" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Trint" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Gràþint" + +#: addrbook.c:36 +msgid "Select" +msgstr "Pasirinkti" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Pagalba" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Tu neturi aliasø!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Aliasai" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Aliase kaip:" + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Tu jau apibrëþei aliasà tokiu vardu!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Adresas:" + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Asmens vardas:" + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Tinka?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Iðsaugoti á bylà:" + +#: alias.c:342 +msgid "Alias added." +msgstr "Aliasas ádëtas." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Negaliu rasti tinkanèio vardo, tæsti?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap kûrimo áraðui reikia %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Klaida vykdant \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Nepavyko atidaryti bylos antraðtëms nuskaityti." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Nepavyko atidaryti bylos antraðtëms iðmesti." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Nëra mailcap kûrimo áraðo %s, sukuriu tuðèià bylà." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Mailcap Taisymo áraðui reikia %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Nëra mailcap taisymo áraðo tipui %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Neradau tinkamo mailcap áraðo. Rodau kaip tekstà." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME tipas neapibrëþtas. Negaliu parodyti priedo." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Negaliu sukurti filtro" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Negaliu sukurti filtro" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Raðymo nesëkmë!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Að neþinau, kaip tai atspausdinti!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Pereiti" + +#: browser.c:42 +msgid "Mask" +msgstr "Kaukë" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s nëra katalogas." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Paðto dëþutës [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Uþsakytos [%s], Bylø kaukë: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Katalogas [%s], Bylø kaukë: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Negaliu prisegti katalogo!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Në viena byla netinka bylø kaukei" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Kol kas sukurti gali tik IMAP paðto dëþutes" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Kol kas iðtrinti gali tik IMAP paðto dëþutes" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Tikrai iðtrinti paðto dëþutæ \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Paðto dëþutë iðtrinta." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Paðto dëþutë neiðtrinta." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Pereiti á katalogà: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Klaida skaitant katalogà." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Bylø kaukë:" + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Atvirkðèiai rikiuoti pagal (d)atà, (v)ardà, d(y)dá ar (n)erikiuoti?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Rikiuoti pagal (d)atà, (v)ardà, d(y)dá ar (n)erikiuoti? " + +#: browser.c:1049 +msgid "dazn" +msgstr "dvyn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Naujos bylos vardas: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Negaliu þiûrëti katalogo" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Klaida bandant þiûrëti bylà" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Naujas paðtas dëþutëje %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: spalva nepalaikoma terminalo" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: nëra tokios spalvos" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: nëra tokio objekto" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: komanda teisinga tik indekso objektams" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: per maþai argumentø" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Trûksta argumentø." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: per maþai argumentø" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: per maþai argumentø" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: tokio atributo nëra" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "per maþai argumentø" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "per daug argumentø" + +#: color.c:721 +msgid "default colors not supported" +msgstr "áprastos spalvos nepalaikomos" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Tikrinti PGP paraðà?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Negaliu sukurti laikinos bylos!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Negaliu sukurti ekrano filtro" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Negalëjau kopijuoti laiðko" + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "PGP paraðas patikrintas sëkmingai." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "PGP paraðas NEGALI bûti patikrintas." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP paraðas patikrintas sëkmingai." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP paraðas NEGALI bûti patikrintas." + +#: commands.c:223 +msgid "Command: " +msgstr "Komanda: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Nukreipti laiðkà kam: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Nukreipti paþymëtus laiðkus kam: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Klaida nagrinëjant adresà!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Nukreipti laiðkà á %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Nukreipti laiðkus á %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Laiðkas nukreiptas." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Laiðkai nukreipti." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Laiðkas nukreiptas." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Laiðkai nukreipti." + +#: commands.c:381 commands.c:415 commands.c:432 +#, fuzzy +msgid "Can't create filter process" +msgstr "Negaliu sukurti filtro" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Filtruoti per komandà: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Spausdinimo komanda nebuvo apibrëþta." + +#: commands.c:483 +msgid "Print message?" +msgstr "Spausdinti laiðkà?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Spausdinti paþymëtus laiðkus?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Laiðkas atspausdintas" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Laiðkai atspausdinti" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Laiðkas negalëjo bûti atspausdintas" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Laiðkai negalëjo bûti atspausdinti" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Atv-Rik (d)ata/n(u)o/g(a)uta/(t)ema/(k)am/(g)ija/(n)erik/d(y)dis/(v)ertë?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Rik (d)ata/n(u)o/g(a)uta/(t)ema/(k)am/(g)ija/(n)erik/d(y)dis/(v)ertë?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "duatkgnyv" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Shell komanda: " + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s á dëþutæ" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s á dëþutæ" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s á dëþutæ" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s á dëþutæ" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s á dëþutæ" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s á dëþutæ" + +#: commands.c:706 +msgid " tagged" +msgstr " paþymëtus" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopijuoju á %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type pakeistas á %s." + +#: commands.c:912 +#, fuzzy, c-format +msgid "Character set changed to %s; %s." +msgstr "Character set pakeistas á %s." + +#: commands.c:914 +msgid "not converting" +msgstr "" + +#: commands.c:914 +msgid "converting" +msgstr "" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Nëra jokiø priedø." + +#: compose.c:84 +msgid "Send" +msgstr "Siøsti" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Nutraukti" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Prisegti bylà" + +#: compose.c:90 +msgid "Descrip" +msgstr "Aprað" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Pasiraðyti, Uþðifruoti" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Uþðifruoti" + +#: compose.c:131 +msgid "Sign" +msgstr "Pasiraðyti" + +#: compose.c:133 +msgid "Clear" +msgstr "Iðvalyti" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " pasiraðyti kaip: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<áprastas>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Uþðifruoti" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(u)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, rinktis (m)ic algoritmà, " +"ar (p)amirðti?" + +#: compose.c:166 +#, fuzzy +msgid "esabf" +msgstr "usabmp" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Pasiraðyti kaip: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(u)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, rinktis (m)ic algoritmà, " +"ar (p)amirðti?" + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "usabmp" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] nebeegzistuoja!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] pasikeitë. Atnaujinti koduotæ?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Priedai" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Tu negali iðtrinti vienintelio priedo." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Prisegu parinktas bylas..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Negaliu prisegti %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Atidaryti dëþutæ, ið kurios prisegti laiðkà" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Nëra laiðkø tame aplanke." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Paþymëk laiðkus, kuriuos nori prisegti!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Negaliu prisegti!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Perkodavimas keièia tik tekstinius priedus." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Esamas priedas nebus konvertuotas." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Esamas priedas bus konvertuotas." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Bloga koduotë." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Iðsaugoti ðio laiðko kopijà?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Pervadinti á:" + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "Negalëjau stat'inti: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nauja byla:" + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type pavidalas yra rûðis/porûðis" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Neþinomas Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Negaliu sukurti bylos %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Èia turëtø bûti priedas, taèiau jo nepavyko padaryti" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Atidëti ðá laiðkà?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Áraðyti laiðkà á dëþutæ" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Raðau laiðkà á %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Laiðkas áraðytas." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Toliau PGP iðvestis (esamas laikas: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "PGP slapta frazë pamirðta." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Ávesk slaptà PGP frazæ:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Ávesk slaptà PGP frazæ:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Ar sukurti application/pgp laiðkà?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Kvieèiu PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Klaida: Neteisinga multipart/signed struktûra! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Klaida: Neþinomas multipart/signed protokolas %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Dëmesio: Negaliu patikrinti %s/%s paraðo. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Toliau einantys duomenys yra pasiraðyti --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Dëmesio: Negaliu rasti jokiø paraðø --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Pasiraðytø duomenø pabaiga --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "taip" + +#: curs_lib.c:158 +msgid "no" +msgstr "ne" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Iðeiti ið Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "neþinoma klaida" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Spausk bet koká klaviðà..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr "('?' parodo sàraðà): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Jokia dëþutë neatidaryta." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Ten nëra laiðkø." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Dëþutë yra tik skaitoma." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funkcija neleistina laiðko prisegimo reþime." + +#: curs_main.c:51 +#, fuzzy +msgid "No visible messages." +msgstr "Nëra naujø laiðkø" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Negaliu perjungti tik skaitomos dëþutës raðomumo!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Aplanko pakeitimai bus áraðyti iðeinant ið aplanko." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Aplanko pakeitimai nebus áraðyti." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Iðeit" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Saugoti" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Raðyt" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Atsakyt" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupei" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Dëþutë buvo iðoriðkai pakeista. Flagai gali bûti neteisingi." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Naujas paðtas ðioje dëþutëje." + +#: curs_main.c:499 +#, fuzzy +msgid "Mailbox was externally modified." +msgstr "Dëþutë buvo iðoriðkai pakeista. Flagai gali bûti neteisingi." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Nëra paþymëtø laiðkø." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Jungiuosi prie %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Ðokti á laiðkà: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argumentas turi bûti laiðko numeris." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Tas laiðkas yra nematomas." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Blogas laiðko numeris." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Iðtrinti laiðkus, tenkinanèius: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Joks ribojimo pattern'as nëra naudojamas." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Riba: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Riboti iki laiðkø, tenkinanèiø: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Iðeiti ið Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Paþymëti laiðkus, tenkinanèius: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Sugràþinti laiðkus, tenkinanèius: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Atþymëti laiðkus, tenkinanèius: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Atidaryti dëþutæ tik skaitymo reþimu." + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Atidaryti dëþutæ" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s nëra paðto dëþutë." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Iðeiti ið Mutt neiðsaugojus pakeitimø?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Tu esi ties paskutiniu laiðku." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Nëra iðtrintø laiðkø." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Tu esi ties pirmu laiðku." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Paieðka perðoko á virðø." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Paieðka perðoko á apaèià." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Nëra naujø laiðkø" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Nëra neskaitytø laiðkø" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " ðiame apribotame vaizde" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "Negaliu taisyti laiðko POP serveryje." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Daugiau gijø nëra." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Tu esi ties pirma gija." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Skirstymas gijomis neleidþiamas." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Gijoje yra neskaitytø laiðkø." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Negaliu taisyti laiðko POP serveryje." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\táterpti eilutæ, prasidedanèià vienu ~\n" +"~b vartotojai\tpridëti vartotojus prie Bcc: lauko\n" +"~c vartotojai\tpridëti vartotojus prie Cc: lauko\n" +"~f laiðkai\tátraukti laiðkus\n" +"~F laiðkai\ttas pats kas ~f, be to, átraukti antraðtes\n" +"~h\t\ttaisyti laiðko antraðtæ\n" +"~m laiðkai\tátraukti ir cituoti laiðkus\n" +"~M laiðkai\ttas pats kas ~m, be to, átraukti antraðtes\n" +"~p\t\tspausdinti laiðkà\n" +"~q\t\táraðyti bylà ir iðeiti ið redaktoriaus\n" +"~r byla\tperskaityti bylà á redaktoriø\n" +"~t vartotojai\tpridëti vartotojus prie To: lauko\n" +"~u\t\tatkurti praeità eilutæ\n" +"~v\t\ttaisyti laiðkà su $visual redaktoriumi\n" +"~w byla\táraðyti laiðkà á bylà\n" +"~x\t\tatsisakyti pakeitimø ir iðeiti ið redaktoriaus\n" +"~?\t\tði þinutë\n" +".\t\tvienas eilutëje baigia ávedimà\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: blogas laiðko numeris.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Uþbaik laiðkà vieninteliu taðku eilutëje)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Nëra dëþutës.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Laiðke yra:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(tæsti)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "trûksta bylos vardo.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Laiðke nëra eiluèiø.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: neþinoma redaktoriaus komanda (~? suteiks pagalbà)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "negalëjau sukurti laikino aplanko: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "negalëjau áraðyti laikino paðto aplanko: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "negalëjau áraðyti laikino paðto aplanko: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Laiðkø byla yra tuðèia!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Laiðkas nepakeistas!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Negaliu atidaryti laiðko bylos: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Negaliu pridurti laiðko prie aplanko: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Klaida. Iðsaugau laikinà bylà: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Uþdëti flagà" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Iðvalyti flagà" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Klaida: Nepavyko parodyti në vienos Multipart/Alternative dalies! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Priedas #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tipas: %s/%s, Koduotë: %s, Dydis: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automatinë perþiûra su %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Kvieèiu autom. perþiûros komandà: %s" + +#: handler.c:1560 +#, fuzzy, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Automatinës perþiûros %s klaidos --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Klaida: message/external-body dalis neturi access-type parametro --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Ðis %s/%s priedas " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(dydis %s baitø)" + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "buvo iðtrintas --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- vardas: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Ðis %s/%s priedas " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- Ðis %s/%s priedas neátrauktas, --]\n" +"[-- o nurodytas iðorinis ðaltinis iðseko. --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- Ðis %s/%s priedas neátrauktas, --]\n" +"[-- o nurodytas pasiekimo tipas %s yra nepalaikomas. --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Klaida: multipart/signed neturi protokolo." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Klaida: multipart/encrypted neturi protocol parametro!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Negaliu atidaryti laikinos bylos!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s yra nepalaikomas " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(naudok '%s' ðiai daliai perþiûrëti)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' turi bûti susietas su klaviðu!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: negalëjau prisegti bylos" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "KLAIDA: praðau praneðti ðià klaidà" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<NEÞINOMAS>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Bendri susiejimai:\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Nesusietos funkcijos:\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Pagalba apie %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "" + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: neþinomas hook tipas: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "" + +#: imap/auth.c:104 pop_auth.c:411 +#, fuzzy +msgid "No authenticators available" +msgstr "SASL autentikacija nepavyko." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Autentikuojuosi (anoniminë)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anoniminë autentikacija nepavyko." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Autentikuojuosi (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 autentikacija nepavyko." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Autentikuojuosi (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI autentikacija nepavyko." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN iðjungtas ðiame serveryje." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Pasisveikinu..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Nepavyko pasisveikinti." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Autentikuojuosi (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL autentikacija nepavyko." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Gaunu vardø erdves..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Gaunu aplankø sàraðà..." + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s: nëra tokios spalvos" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Sukurti dëþutæ: " + +#: imap/browse.c:282 +#, fuzzy +msgid "Mailbox must have a name." +msgstr "Dëþutë yra nepakeista." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Dëþutë sukurta." + +#: imap/command.c:290 +#, fuzzy +msgid "Mailbox closed" +msgstr "Paðto dëþutë iðtrinta." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Mirtina klaida. Nesutampa laiðkø skaièius!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Uþdarau jungtá su %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Ðis IMAP serveris yra senoviðkas. Mutt su juo neveikia." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Parenku %s..." + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "Klaida raðant á paðto dëþutæ!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Nepavyko pridurti prie IMAP dëþuèiø ðiame serveryje" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Sukurti %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Uþdarau jungtá su IMAP serveriu..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Paþymiu %d laiðkus iðtrintais..." + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "Nepavyko pasisveikinti." + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Iðsaugau laiðko bûsenos flagus... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Iðtuðtinu laiðkus ið serverio..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +#, fuzzy +msgid "CLOSE failed" +msgstr "Nepavyko pasisveikinti." + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "Sukurti dëþutæ: " + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Uþsakau %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Atsisakau %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Negaliu paimti antraðèiø ið ðios IMAP serverio versijos." + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "Negaliu sukurti laikinos bylos!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Paimu laiðkø antraðtes... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Paimu laiðkà..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Laiðkø indeksas yra neteisingas. Bandyk ið naujo atidaryti dëþutæ." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Nusiunèiu laiðkà..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopijuoju %d laiðkus á %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopijuoju laiðkà %d á %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Tæsti?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: nëra adreso" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "blogas antraðtës laukas" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: neþinomas rikiavimo metodas" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): klaida regexp'e: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: neþinomas kintamasis" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "negalima vartoti prieðdëlio su reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "reikðmë neleistina reset komandoje" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s yra ájungtas" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s yra iðjungtas" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: blogas paðto dëþutës tipas" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: bloga reikðmë" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: neþinomas tipas" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: neþinomas tipas" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Negalëjau stat'inti: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s nëra paðto dëþutë." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Klaida %s, eilutë %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: klaidos %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: skaitymas nutrauktas, nes %s yra per daug klaidø." + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: klaida %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: per daug argumentø" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: neþinoma komanda" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Klaida komandinëje eilutëje: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "negaliu nustatyti namø katalogo" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "negaliu nustatyti vartotojo vardo" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Rastas ciklas makrokomandoje." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Klaviðas nëra susietas." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Klaviðas nëra susietas. Spausk '%s' dël pagalbos." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: per daug argumentø" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: nëra tokio meniu" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "nulinë klaviðø seka" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: per daug argumentø" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: èia nëra tokios funkcijos" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: tuðèia klaviðø seka" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: per daug argumentø" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec: per maþai argumentø" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s: èia nëra tokios funkcijos" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Ávesk rakto ID, skirtà %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "nulinë operacija" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "priverstinai rodyti priedà naudojant mailcap áraðà" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "þiûrëti priedà kaip tekstà" + +#: keymap_alldefs.h:9 +#, fuzzy +msgid "Toggle display of subparts" +msgstr "perjungti cituojamo teksto rodymà" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "eiti á puslapio apaèià" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "vël siøsti laiðkà kitam vartotojui" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "pasirink naujà bylà ðiame kataloge" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "þiûrëti bylà" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "parodyti dabar paþymëtos bylos vardà" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "uþsakyti esamà aplankà (tik IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "atsisakyti esamo aplanko (tik IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "perjungti visø/uþsakytø dëþuèiø rodymà (tik IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Nëra dëþutës su nauju paðtu." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "keisti katalogus" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "tikrinti, ar dëþutëse yra naujo paðto" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "prisegti bylà(as) prie ðio laiðko" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "prisegti bylà(as) prie ðio laiðko" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "taisyti BCC sàraðà" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "taisyti CC sàraðà" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "taisyti priedo apraðymà" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "taisyti priedo Transfer-Encoding" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "ávesk bylà, á kurià iðsaugoti ðio laiðko kopijà" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "taisyti bylà, skirtà prisegimui" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "taisyti From laukà" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "taisyti laiðkà su antraðtëmis" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "taisyti laiðkà" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "taisyti priedà naudojant mailcap áraðà" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "taisyti Reply-To laukà" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "taisyti ðio laiðko temà" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "taisyti To sàraðà" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "sukurti naujà dëþutæ (tik IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "keisti priedo Content-Type" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "gauti laikinà priedo kopijà" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "paleisti ispell laiðkui" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "sukurti naujà priedà naudojant mailcap áraðà" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "perjungti ðio priedo perkodavimà" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "iðsaugoti ðá laiðkà vëlesniam siuntimui" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "pervadinti/perkelti prisegtà bylà" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "siøsti laiðkà" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "perjungti, ar siøsti laiðke, ar priede" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "perjungti, ar iðtrinti bylà, jà iðsiuntus" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "atnaujinti priedo koduotës info." + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "áraðyti laiðkà á aplankà" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "kopijuoti laiðkà á bylà/dëþutæ" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "sukurti aliasà laiðko siuntëjui" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "rodyti áraðà á ekrano apaèioje" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "rodyti áraðà á ekrano viduryje" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "rodyti áraðà á ekrano virðuje" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "padaryti iðkoduotà (text/plain) kopijà" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "padaryti iðkoduotà (text/plain) kopijà ir iðtrinti" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "iðtrinti esamà áraðà" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "iðtrinti esamà dëþutæ (tik IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "iðtrinti visus laiðkus subgijoje" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "iðtrinti visus laiðkus gijoje" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "rodyti pilnà siuntëjo adresà" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "rodyti laiðkà ir perjungti antraðèiø rodymà" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "rodyti laiðkà" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "taisyti grynà laiðkà" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "iðtrinti simbolá prieð þymeklá" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "perkelti þymeklá vienu simboliu kairën" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "perkelti þymeklá á þodþio pradþià" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "perðokti á eilutës pradþià" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "eiti ratu per gaunamo paðto dëþutes" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "uþbaigti bylos vardà ar aliasà" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "uþbaigti adresà su uþklausa" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "iðtrinti simbolá po þymekliu" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "perðokti á eilutës galà" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "perkelti þymeklá vienu simboliu deðinën" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "perkelti þymeklá á þodþio pabaigà" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "slinktis aukðtyn istorijos sàraðe" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "slinktis aukðtyn istorijos sàraðe" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "iðtrinti simbolius nuo þymeklio iki eilutës galo" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "iðtrinti simbolius nuo þymeklio iki þodþio galo" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "iðtrinti visus simbolius eilutëje" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "iðtrinti þodá prieð þymeklá" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "cituoti sekantá nuspaustà klaviðà" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "sukeisti simbolá po þymekliu su praeitu" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "pradëti þodá didþiàja raide" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "perraðyti þodá maþosiomis raidëmis" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "perraðyti þodá didþiosiomis raidëmis" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "ávesti muttrc komandà" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "ávesti bylø kaukæ" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "iðeiti ið ðio meniu" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtruoti priedà per shell komandà" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "eiti á pirmà uþraðà" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "perjungti laiðko 'svarbumo' flagà" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "persiøsti laiðkà su komentarais" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "paþymëti esamà áraðà" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "atsakyti visiems gavëjams" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "slinktis þemyn per 1/2 puslapio" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "slinktis aukðtyn per 1/2 puslapio" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "ðis ekranas" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ðokti á indekso numerá" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "eiti á paskutiná áraðà" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "atsakyti nurodytai konferencijai" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "ávykdyti macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "sukurti naujà laiðkà" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "atidaryti kità aplankà" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "atidaryti kità aplankà tik skaitymo reþimu" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "iðvalyti laiðko bûsenos flagà" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "iðtrinti laiðkus, tenkinanèius pattern'à" + +#: keymap_alldefs.h:107 +#, fuzzy +msgid "force retrieval of mail from IMAP server" +msgstr "parsiøsti paðtà ið POP serverio" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "parsiøsti paðtà ið POP serverio" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "eiti á pirmà laiðkà" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "eiti á paskutiná laiðkà" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "rodyti tik laiðkus, tenkinanèius pattern'à" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ðokti á kità naujà laiðkà" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "ðokti á kità neskaitytà laiðkà" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ðokti á kità subgijà" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ðokti á kità gijà" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "eiti á kità neiðtrintà laiðkà" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ðokti á kità neskaitytà laiðkà" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "ðokti á tëviná laiðkà gijoje" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ðokti á praeità gijà" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ðokti á praeità subgijà" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "eiti á praeità neiðtrintà laiðkà" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ðokti á praeità naujà laiðkà" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "ðokti á praeità neskaitytà laiðkà" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ðokti á praeità neskaitytà laiðkà" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "paþymëti esamà gijà skaityta" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "paþymëti esamà subgijà skaityta" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "uþdëti bûsenos flagà laiðkui" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "iðsaugoti dëþutës pakeitimus" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "paþymëti laiðkus, tenkinanèius pattern'à" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "sugràþinti laiðkus, tenkinanèius pattern'à" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "atþymëti laiðkus, tenkinanèius pattern'à" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "eiti á puslapio vidurá" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "eiti á kità áraðà" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "slinktis viena eilute þemyn" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "eiti á kità puslapá" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ðokti á laiðko apaèià" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "perjungti cituojamo teksto rodymà" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "praleisti cituojamà tekstà" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "ðokti á laiðko virðø" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "filtruoti laiðkà/priedà per shell komandà" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "eiti á praeità áraðà" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "slinktis viena eilute aukðtyn" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "eiti á praeità puslapá" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "spausdinti esamà áraðà" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "uþklausti iðorinæ programà adresams rasti" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "pridurti naujos uþklausos rezultatus prie esamø" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "iðsaugoti dëþutës pakeitimus ir iðeiti" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "tæsti atidëtà laiðkà" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "iðvalyti ir perpieðti ekranà" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{vidinë}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "atsakyti á laiðkà" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "naudoti esamà laiðkà kaip ðablonà naujam" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "iðsaugoti laiðkà/priedà á bylà" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "ieðkoti reguliarios iðraiðkos" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "ieðkoti reguliarios iðraiðkos atgal" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "ieðkoti kito tinkamo" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "ieðkoti kito tinkamo prieðinga kryptimi" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "perjungti paieðkos pattern'o spalvojimà" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "kviesti komandà subshell'e" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "rikiuoti laiðkus" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "rikiuoti laiðkus atvirkðèia tvarka" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "paþymëti esamà áraðà" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "pritaikyti kità funkcijà paþymëtiems laiðkams" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "pritaikyti kità funkcijà paþymëtiems laiðkams" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "paþymëti esamà subgijà" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "paþymëti esamà gijà" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "perjungti laiðko 'naujumo' flagà" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "perjungti, ar dëþutë bus perraðoma" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "perjungti, ar narðyti paðto dëþutes, ar visas bylas" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "eiti á puslapio virðø" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "sugràþinti esamà áraðà" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "sugràþinti visus laiðkus gijoje" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "sugràþinti visus laiðkus subgijoje" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "parodyti Mutt versijos numerá ir datà" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "rodyti priedà naudojant mailcap áraðà, jei reikia" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "rodyti MIME priedus" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "parodyti dabar aktyvø ribojimo pattern'à" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "sutraukti/iðskleisti esamà gijà" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "sutraukti/iðskleisti visas gijas" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "prisegti PGP vieðà raktà" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "rodyti PGP parinktis" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "siøsti PGP vieðà raktà" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "patikrinti PGP vieðà raktà" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "þiûrëti rakto vartotojo id" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Priimti sukonstruotà grandinæ" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Pridëti persiuntëjà á grandinæ" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Áterpti persiuntëjà á grandinæ" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Paðalinti persiuntëjà ið grandinës" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Pasirinkti ankstesná elementà grandinëje" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Pasirinkti tolesná elementà grandinëje" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "pasiøsti praneðimà per mixmaster persiuntëjø grandinæ" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "padaryti iððifruotà kopijà ir iðtrinti" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "padaryti iððifruotà kopijà" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "uþmirðti PGP slaptà frazæ" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "iðtraukti PGP vieðus raktus" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "rodyti PGP parinktis" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Baigësi atmintis!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Kad susisiektum su kûrëjais, raðyk laiðkus á <mutt-dev@mutt.org>.\n" +"Kad praneðtum klaidà, naudok flea(1) áranká.\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2000 Michael R. Elkins ir kiti.\n" +"Mutt ateina ABSOLIUÈIAI BE JOKIOS GARANTIJOS; dël smulkmenø paleisk 'mutt -" +"vv.'\n" +"Mutt yra free software, ir tu gali laisvai jà platinti su tam\n" +"tikromis sàlygomis; raðyk 'mutt -vv' dël smulkmenø.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2000 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2000 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Copyright (C) 2000 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Daugybë kitø, nepaminëtø èia, prisidëjo daugybe kodo, pataisymø ir " +"pasiûlymø.\n" +"\n" +" Ði programa yra free software; tu gali jà platinti ir/arba\n" +"keisti \n" +" pagal GNU General Public License sàlygas, kurias paskelbë\n" +" Free Software Foundation; arba 2 Licenzijos versijà, arba\n" +" (pagal tavo pasirinkimà) bet kurià vëlesnæ versijà.\n" +"\n" +" Ði programa yra platinama, tikintis, kad ji bus naudinga,\n" +" bet BE JOKIOS GARANTIJOS; netgi be numanomos garantijos\n" +" VERTINGUMUI arba TINKAMUMUI KOKIAM NORS TIKSLUI.\n" +" Þiûrëk á GNU General Public License dël detaliø.\n" +"\n" +" Tu turëjai gauti GNU General Public License kopijà\n" +" kartu su ðia programa; jeigu ne, paraðyk á Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"vartosena: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <byla> ] [ -m <tipas> ] [ -f " +"<byla> ]\n" +" mutt [ -nx ] [ -e <cmd> ] [ -a <byla> ] [ -F <byla> ] [ -H <byla> ] " +"[ -i <byla> ] [ -s <tema> ] [ -b <adres> ] [ -c <adres> ] <adres> [ ... ]\n" +" mutt [ -n ] [ -e <cmd> ] [ -F <byla> ] -p\n" +" mutt -v[v]\n" +"\n" +"parinktys:\n" +" -a <byla>\tprisegti bylà prie laiðko\n" +" -b <adresas>\tnurodyti blind carbon-copy (BCC) adresà\n" +" -c <adresas>\tnurodyti carbon-copy (CC) adresà\n" +" -e <komanda>\tnurodyti komandà, kurià ávykdyti po inicializacijos\n" +" -f <byla>\tnurodyti, kurià dëþutæ perskaityti\n" +" -F <byla>\tnurodyti alternatyvià muttrc bylà\n" +" -H <byla>\tnurodyti juodraðèio bylà, ið kurios skaityti antraðtæ\n" +" -i <byla>\tnurodyti bylà, kurià Mutt turëtø átraukti á atsakymà\n" +" -m <tipas>\tnurodyti áprastà dëþutës tipà\n" +" -n\t\tpriverèia Mutt neskaityti sistemos Muttrc\n" +" -p\t\ttæsti atidëtà laiðkà\n" +" -R\t\tatidaryti dëþutæ tik skaitymo reþime\n" +" -s <tema>\tnurodyti temà (turi bûti kabutëse, jei yra tarpø)\n" +" -v\t\trodyti versijà ir kompiliavimo apibrëþimus\n" +" -x\t\tsimuliuoti mailx siuntimo bûdà\n" +" -y\t\tpasirinkti dëþutæ, nurodytà tavo 'mailboxes' sàraðe\n" +" -z\t\tiðkart iðeiti, jei dëþutëje nëra laiðkø\n" +" -Z\t\tatidaryti pirmà aplankà su naujais laiðkais, iðkart iðeiti, jei " +"nëra\n" +" -h\t\tði pagalbos þinutë" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Kompiliavimo parinktys:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Klaida inicializuojant terminalà." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Derinimo lygis %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG nebuvo apibrëþtas kompiliavimo metu. Ignoruoju.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s neegzistuoja. Sukurti jà?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Negaliu sukurti %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nenurodyti jokie gavëjai.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: negaliu prisegti bylos.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Nëra dëþutës su nauju paðtu." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Neapibrëþta në viena paðtà gaunanti dëþutë." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Dëþutë yra tuðèia." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Skaitau %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Dëþutë yra sugadinta!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Dëþutë buvo sugadinta!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Baisi klaida! Negaliu vël atidaryti dëþutës!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Negaliu uþrakinti dëþutës!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: mbox pakeista, bet nëra pakeistø laiðkø! (praneðk ðià klaidà)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Raðau laiðkus... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "Kompiliuoju paieðkos pattern'à..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Áraðyti nepavyko! Dëþutë dalinai iðsaugota á %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Negaliu vël atidaryti dëþutës!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Vël atidarau dëþutæ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Ðokti á: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Blogas indekso numeris." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Nëra áraðø." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Tu negali slinkti þemyn daugiau." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Tu negali slinkti aukðtyn daugiau." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Tu esi paskutiniame puslapyje." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Tu esi pirmame puslapyje." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Rodomas pirmas áraðas." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Rodomas paskutinis áraðas." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Tu esi ties paskutiniu áraðu." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Tu esi ties pirmu áraðu." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Ieðkoti ko: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Atgal ieðkoti ko: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Jokio paieðkos pattern'o." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Nerasta." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Nëra paþymëtø áraðø." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Paieðka ðiam meniu neágyvendinta." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Ðokinëjimas dialoguose neágyvendintas." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Þymëjimas nepalaikomas." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Skaitau %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Byla yra katalogas, saugoti joje?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Byla yra katalogas, saugoti joje?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Byla kataloge: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Byla egzistuoja, (u)þraðyti, (p)ridurti, arba (n)utraukti?" + +#: muttlib.c:869 +msgid "oac" +msgstr "upn" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Negaliu iðsaugoti laiðko á POP dëþutæ." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s nëra paðto dëþutë!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Pridurti laiðkus prie %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, fuzzy, c-format +msgid "Connection to %s closed" +msgstr "Jungiuosi prie %s..." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL nepasiekiamas." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Nepavyko komanda prieð jungimàsi" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, fuzzy, c-format +msgid "Error talking to %s (%s)" +msgstr "Klaida jungiantis prie IMAP serverio: %s" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Ieðkau %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Negalëjau rasti hosto \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Jungiuosi prie %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Negalëjau prisijungti prie %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Nepavyko rasti pakankamai entropijos tavo sistemoje" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Pildau entropijos tvenkiná: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s teisës nesaugios!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL uþdraustas dël entropijos trûkumo" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "Nepavyko pasisveikinti." + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Nepavyko gauti sertifikato ið peer'o" + +#: mutt_ssl.c:341 +#, fuzzy, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL jungtis, naudojant %s" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Neþinoma" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[negaliu suskaièiuoti]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[bloga data]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Serverio sertifikatas dar negalioja" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Serverio sertifikatas paseno" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Ðis sertifikatas priklauso: " + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Ðis sertifikatas buvo iðduotas:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Ðis sertifikatas galioja" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " nuo %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " iki %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Pirðtø antspaudas: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL sertifikato patikrinimas" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(a)tmesti, (p)riimti ðákart, (v)isada priimti" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "apv" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(a)tmesti, (p)riimti ðákart" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ap" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Iðeiti " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Áspëju: Negalëjau iðsaugoti sertifikato" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Sertifikatas iðsaugotas" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Uþraktø skaièius virðytas, paðalinti uþraktà nuo %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Negaliu taðku uþrakinti %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Virðytas leistinas laikas siekiant fcntl uþrakto!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Laukiu fcntl uþrakto... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Virðytas leistinas laikas siekiant flock uþrakto!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Laukiu fcntl uþrakto... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Nepavyko uþrakinti %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Skaitau %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Raðau %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Nepavyko sinchronizuoti dëþutës %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Perkelti skaitytus laiðkus á %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Sunaikinti %d iðtrintà laiðkà?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Sunaikinti %d iðtrintus laiðkus?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Perkeliu skaitytus laiðkus á %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Dëþutë yra nepakeista." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d palikti, %d perkelti, %d iðtrinti." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d palikti, %d iðtrinti." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "Spausk '%s', kad perjungtum raðymà" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Naudok 'toggle-write', kad vël galëtum raðyti!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Dëþutë yra padaryta neáraðoma. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Dëþutë sutikrinta." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Negaliu áraðyti laiðko" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Neprieinama ðiame meniu." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PraPsl" + +#: pager.c:1447 +msgid "NextPg" +msgstr "KitPsl" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Priedai" + +#: pager.c:1454 +msgid "Next" +msgstr "Kitas" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Rodoma laiðko apaèia." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Rodomas laiðko virðus." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Atvirkðèia paieðka: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Paieðka: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Ðiuo metu rodoma pagalba." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Cituojamo teksto nebëra." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Nëra daugiau necituojamo teksto uþ cituojamo." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "keliø daliø laiðkas neturi boundary parametro!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Klaida iðraiðkoje: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Bloga mënesio diena: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Blogas mënuo: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, fuzzy, c-format +msgid "Invalid relative date: %s" +msgstr "Blogas mënuo: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "klaida iðraiðkoje" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "klaida pattern'e: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: bloga komanda" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: nepalaikomas ðiame reþime" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "trûksta parametro" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "trûkstami skliausteliai: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "tuðèias pattern'as" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "klaida: neþinoma operacija %d (praneðkite ðià klaidà)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Kompiliuoju paieðkos pattern'à..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Vykdau komandà tinkantiems laiðkams..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Jokie laiðkai netenkina kriterijaus." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Paieðka pasiekë apaèià nieko neradusi" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Paieðka pasiekë virðø nieko neradusi" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Paieðka pertraukta." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP slapta frazë pamirðta." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Klaida: negaliu sukurti PGP subproceso! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP iðvesties pabaiga --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP LAIÐKO PRADÞIA --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP VIEÐO RAKTO BLOKO PRADÞIA --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP PASIRAÐYTO LAIÐKO PRADÞIA --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP LAIÐKO PABAIGA --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP VIEÐO RAKTO BLOKO PABAIGA --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP PASIRAÐYTO LAIÐKO PABAIGA --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Klaida: neradau PGP laiðko pradþios! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Vidinë klaida. Praneðk <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Klaida: negalëjau sukurti PGP subproceso! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Klaida: blogai suformuotas PGP/MIME laiðkas! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Klaida: negalëjau sukurti laikinos bylos! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Toliau einantys duomenys yra uþðifruoti su PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- PGP/MIME uþðifruotø duomenø pabaiga --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Negaliu atidaryti PGP vaikinio proceso!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Naudoti rakto ID = \"%s\", skirtà %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Ávesk rakto ID, skirtà %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Negaliu kviesti PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Paimu PGP raktà..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Ðis raktas negali bûti naudojamas: jis pasenæs/uþdraustas/atðauktas." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Pasirink " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Tikrinti raktà " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP raktai, tenkinantys <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP raktai, tenkinantys \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Negaliu atidaryti /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Negaliu sukurti laikinos bylos" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Rakto ID: ox%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Ðis raktas negali bûti naudojamas: jis pasenæs/uþdraustas/atðauktas." + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "Ðis raktas negali bûti naudojamas: jis pasenæs/uþdraustas/atðauktas." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Ðis ID yra nepatikimas." + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "Ðis ID yra tik vos vos patikimas." + +#: pgpkey.c:622 +#, fuzzy, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Ar tikrai nori já naudoti?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Praðau, ávesk rakto ID:" + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Kvieèiu pgp..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP raktas %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Ieðkau raktø, tenkinanèiø \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Serveris nepalaiko komandos TOP." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Negaliu áraðyti antraðtës á laikinà bylà!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Serveris nepalaiko komandos UIDL." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Paimu laiðkø sàraðà..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Negaliu áraðyti laiðko á laikinà bylà!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Tikrinu, ar yra naujø laiðkø..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP hostas nenurodytas." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Nëra naujø laiðkø POP dëþutëje." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Iðtrinti laiðkus ið serverio?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Skaitau naujus laiðkus (%d baitø)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Klaida raðant á paðto dëþutæ!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d ið %d laiðkø perskaityti]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Serveris uþdarë jungtá!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Autentikuojuosi (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Autentikuojuosi (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP autentikacija nepavyko." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Serveris nepalaiko komandos USER." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Negaliu palikti laiðkø serveryje." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Klaida jungiantis prie IMAP serverio: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Uþdarau jungtá su POP serveriu..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Tikrinu laiðkø indeksus..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Jungtis prarasta. Vël prisijungti prie POP serverio?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Atidëti laiðkai" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Nëra atidëtø laiðkø." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Neleistina PGP antraðtë" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Neleistina PGP antraðtë" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Nepavyko pasisveikinti." + +#: query.c:46 +msgid "New Query" +msgstr "Nauja uþklausa" + +#: query.c:47 +msgid "Make Alias" +msgstr "Padaryti aliasà" + +#: query.c:48 +msgid "Search" +msgstr "Ieðkoti" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Laukiu atsakymo..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Uþklausos komanda nenurodyta." + +#: query.c:286 +msgid "Query" +msgstr "Uþklausa" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Uþklausa: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Uþklausa '%s''" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Pipe" + +#: recvattach.c:53 +msgid "Print" +msgstr "Spausdinti" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Iðsaugau..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Priedas iðsaugotas." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "DËMESIO! Tu þadi uþraðyti ant seno %s, tæsti" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Priedas perfiltruotas." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtruoti per: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Pipe á: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Að neþinau kaip spausdinti %s priedus!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Spausdinti paþymëtus priedus?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Spausdinti priedà?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Negaliu rasti në vieno paþymëto laiðko." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Priedai" + +#: recvattach.c:987 +#, fuzzy +msgid "There are no subparts to show!" +msgstr "Nëra jokiø priedø." + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Negaliu iðtrinti priedo ið POP serverio." + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "PGP laiðkø priedø iðtrynimas nepalaikomas." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Palaikomas trynimas tik ið keleto daliø priedø." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Tu gali nukreipti tik message/rfc822 priedus." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Klaida siunèiant laiðkà." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Klaida siunèiant laiðkà." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Negaliu atidaryti laikinos bylos %s." + +#: recvcmd.c:444 +#, fuzzy +msgid "Forward as attachments?" +msgstr "rodyti MIME priedus" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "Negaliu dekoduoti visø paþymëtø priedø. Persiøsti kitus MIME formatu?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Persiøsti MIME enkapsuliuotà?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Negaliu sukurti %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Negaliu rasti në vieno paþymëto laiðko." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Nerasta jokia konferencija!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Negaliu dekoduoti visø paþymëtø priedø. Enkapsuliuoti kitus MIME formatu?" + +#: remailer.c:480 +msgid "Append" +msgstr "Pridurti" + +#: remailer.c:481 +msgid "Insert" +msgstr "Áterpti" + +#: remailer.c:482 +msgid "Delete" +msgstr "Trinti" + +#: remailer.c:484 +msgid "OK" +msgstr "Gerai" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Negaliu gauti mixmaster'io type2.list!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Pasirink persiuntëjø grandinæ." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" +"Klaida: %s negali bûti naudojamas kaip galutinis persiuntëjas grandinëje." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster'io grandinës turi bûti ne ilgesnës nei %d elementø." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Persiuntëjø grandinë jau tuðèia." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Tu jau pasirinkai pirmà grandinës elementà." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Tu jau pasirinkai paskutiná grandinës elementà." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster'is nepriima Cc bei Bcc antraðèiø." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Teisingai nustatyk hostname kintamàjá, kai naudoji mixmaster'á!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Klaida siunèiant laiðkà, klaidos kodas %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Klaida siunèiant laiðkà." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Blogai suformuotas tipo %s áraðas \"%s\" %d eilutëje" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Nenurodytas mailcap kelias!" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "mailcap áraðas tipui %s nerastas" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: per maþai argumentø" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: per daug argumentø" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Nëra temos, nutraukti?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Nëra temos, nutraukiu." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Atsakyti %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Pratæsti-á %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Në vienas paþymëtas laiðkas nëra matomas!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Átraukti laiðkà á atsakymà?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Átraukiu cituojamà laiðkà..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Negalëjau átraukti visø praðytø laiðkø!" + +#: send.c:762 +#, fuzzy +msgid "Forward as attachment?" +msgstr "Spausdinti priedà?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Paruoðiu persiunèiamà laiðkà..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Tæsti atidëtà laiðkà?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Paruoðiu persiunèiamà laiðkà..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Nutraukti nepakeistà laiðkà?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Nutrauktas nepakeistas laiðkas." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Laiðkas neiðsiøstas." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Laiðkas atidëtas." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Nenurodyti jokie gavëjai!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Nebuvo nurodyti jokie gavëjai." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Nëra temos, nutraukti siuntimà?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Nenurodyta jokia tema." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Siunèiu laiðkà..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Negalëjau iðsiøsti laiðko." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Laiðkas iðsiøstas." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Siunèiu fone." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Trûksta boundary parametro! [praneðk ðià klaidà]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s nebeegzistuoja!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s nëra paðto dëþutë." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Negalëjau atidaryti %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Klaida siunèiant laiðkà, klaidos kodas %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Pristatymo proceso iðvestis" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Iðeinu.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Sugavau %s... Iðeinu.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Sugavau signalà %d... Iðeinu.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Iðeiti " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Blogas mënuo: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Neþinoma" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Ávesk rakto ID, skirtà %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "PGP raktai, tenkinantys \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Naudoti rakto ID = \"%s\", skirtà %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "Naudoti rakto ID = \"%s\", skirtà %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Klaida: negaliu sukurti PGP subproceso! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Negaliu sukurti filtro" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(nëra dëþutës)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Áspëju: Negalëjau iðsaugoti sertifikato" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "Negaliu atidaryti PGP vaikinio proceso!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- PGP iðvesties pabaiga --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Klaida: negaliu sukurti PGP subproceso! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Toliau einantys duomenys yra uþðifruoti su PGP/MIME --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Toliau einantys duomenys yra pasiraðyti --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- PGP/MIME uþðifruotø duomenø pabaiga --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Pasiraðytø duomenø pabaiga --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Rikiuoju dëþutæ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Negalëjau rasti rikiavimo funkcijos! [praneðk ðià klaidà]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(nëra dëþutës)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "Tëvinis laiðkas nematomas ribotame vaizde" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Nëra prieinamo tëvinio laiðko." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Kvieèiu pgp..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Nukreipti laiðkà á %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Nukreipti laiðkus á %s...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "usabmp" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Sertifikatas iðsaugotas" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Ðio ID pasitikëjimo lygis nenurodytas." + +#~ msgid "Decode-save" +#~ msgstr "Dekoduoti-iðsaugoti" + +#~ msgid "Decode-copy" +#~ msgstr "Dekoduoti-kopijuoti" + +#~ msgid "Decrypt-save" +#~ msgstr "Iððifruoti-iðsaugoti" + +#~ msgid "Decrypt-copy" +#~ msgstr "Iððifruoti-kopijuoti" + +#~ msgid "Copy" +#~ msgstr "Kopijuoti" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- PGP iðvesties pabaiga --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Negalëjau stat'inti: %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: nëra tokios komandos" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Autentikacijos metodas neþinomas." + +#~ msgid "MIC algorithm: " +#~ msgstr "MIC algoritmas: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Tai neturi jokios prasmës, jei tu nenori pasiraðyti laiðko." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "Neþinomas MIC algoritmas, galimi yra: pgp-md5, pgp-sha1, pgp-rmd160" diff --git a/po/mutt.pot b/po/mutt.pot new file mode 100644 index 0000000..f1da0c3 --- /dev/null +++ b/po/mutt.pot @@ -0,0 +1,4012 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "" + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "" + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "" + +#: addrbook.c:36 +msgid "Select" +msgstr "" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "" + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "" + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "" + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "" + +#: alias.c:342 +msgid "Alias added." +msgstr "" + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "" + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "" + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "" + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "" + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "" + +#: attach.c:824 +msgid "Write fault!" +msgstr "" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "" + +#: browser.c:41 +msgid "Chdir" +msgstr "" + +#: browser.c:42 +msgid "Mask" +msgstr "" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "" + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "" + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "" + +#: browser.c:923 +msgid "Chdir to: " +msgstr "" + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "" + +#: browser.c:975 +msgid "File Mask: " +msgstr "" + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" + +#: browser.c:1049 +msgid "dazn" +msgstr "" + +#: browser.c:1115 +msgid "New file name: " +msgstr "" + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "" + +#: buffy.c:442 +msgid "New mail in " +msgstr "" + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "" + +#: color.c:563 +msgid "Missing arguments." +msgstr "" + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "" + +#: color.c:721 +msgid "default colors not supported" +msgstr "" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "" + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "" + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "" + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "" + +#: commands.c:223 +msgid "Command: " +msgstr "" + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "" + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "" + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "" + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "" + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "" + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "" + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "" + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "" + +#: commands.c:483 +msgid "Print message?" +msgstr "" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "" + +#: commands.c:492 +msgid "Message printed" +msgstr "" + +#: commands.c:492 +msgid "Messages printed" +msgstr "" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "" + +#: commands.c:559 +msgid "Shell command: " +msgstr "" + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "" + +#: commands.c:706 +msgid " tagged" +msgstr "" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "" + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "" + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "" + +#: commands.c:914 +msgid "not converting" +msgstr "" + +#: commands.c:914 +msgid "converting" +msgstr "" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "" + +#: compose.c:84 +msgid "Send" +msgstr "" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "" + +#: compose.c:90 +msgid "Descrip" +msgstr "" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "" + +#: compose.c:129 +msgid "Encrypt" +msgstr "" + +#: compose.c:131 +msgid "Sign" +msgstr "" + +#: compose.c:133 +msgid "Clear" +msgstr "" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr "" + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "" + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" + +#: compose.c:166 +msgid "esabf" +msgstr "" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "" + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" + +#: compose.c:228 +msgid "eswabf" +msgstr "" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "" + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "" + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "" + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "" + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "" + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "" + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "" + +#: compose.c:1141 +msgid "New file: " +msgstr "" + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "" + +#: compose.c:1305 +msgid "Message written." +msgstr "" + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "" + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "" + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" + +#: curs_lib.c:157 +msgid "yes" +msgstr "" + +#: curs_lib.c:158 +msgid "no" +msgstr "" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "" + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr "" + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "" + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "" + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "" + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "" + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "" + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "" + +#: curs_main.c:397 +msgid "Quit" +msgstr "" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "" + +#: curs_main.c:403 +msgid "Group" +msgstr "" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "" + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "" + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "" + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "" + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "" + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "" + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "" + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "" + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "" + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "" + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "" + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "" + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "" + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "" + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "" + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "" + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "" + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "" + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "" + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "" + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr "" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "" + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "" + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "" + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "" + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "" + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "" + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "" + +#: flags.c:332 +msgid "Set flag" +msgstr "" + +#: flags.c:332 +msgid "Clear flag" +msgstr "" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "" + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "" + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "" + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "" + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "" + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "" + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "" + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "" + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "" + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "" + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "" + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "" + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "" + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "" + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "" + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "" + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "" + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "" + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "" + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "" + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "" + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "" + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "" + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "" + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "" + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "" + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "" + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "" + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "" + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "" + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "" + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "" + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "" + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "" + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "" + +#: imap/util.c:239 +msgid "Continue?" +msgstr "" + +#: init.c:611 +msgid "alias: no address" +msgstr "" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "" + +#: init.c:1375 +#, c-format +msgid "%s: stat: %s" +msgstr "" + +#: init.c:1380 +#, c-format +msgid "%s: not a regular file" +msgstr "" + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "" + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "" + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "" + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "" + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "" + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "" + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "" + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "" + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "" + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "" + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "" + +#: menu.c:413 +msgid "Jump to: " +msgstr "" + +#: menu.c:422 +msgid "Invalid index number." +msgstr "" + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "" + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "" + +#: menu.c:477 +msgid "You are on the last page." +msgstr "" + +#: menu.c:499 +msgid "You are on the first page." +msgstr "" + +#: menu.c:578 +msgid "First entry is shown." +msgstr "" + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "" + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "" + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "" + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "" + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "" + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "" + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "" + +#: menu.c:885 +msgid "No tagged entries." +msgstr "" + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "" + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "" + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "" + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "" + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "" + +#: muttlib.c:869 +msgid "oac" +msgstr "" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "" + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "" + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "" + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr "" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr "" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "" + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "" + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "" + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "" + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "" + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "" + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "" + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "" + +#: mx.c:1490 +msgid "Can't write message" +msgstr "" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "" + +#: pager.c:1446 +msgid "PrevPg" +msgstr "" + +#: pager.c:1447 +msgid "NextPg" +msgstr "" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "" + +#: pager.c:1454 +msgid "Next" +msgstr "" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "" + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "" + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "" + +#: pager.c:1955 +msgid "Search: " +msgstr "" + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "" + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "" + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "" + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "" + +#: pattern.c:528 +msgid "error in expression" +msgstr "" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "" + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "" + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "" + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "" + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "" + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "" + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "" + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "" + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "" + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "" + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "" + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "" + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "" + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "" + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "" + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "" + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "" + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "" + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "" + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "" + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "" + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "" + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "" + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "" + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "" + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "" + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "" + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "" + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "" + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "" + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "" + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "" + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "" + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "" + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "" + +#: query.c:46 +msgid "New Query" +msgstr "" + +#: query.c:47 +msgid "Make Alias" +msgstr "" + +#: query.c:48 +msgid "Search" +msgstr "" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "" + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "" + +#: query.c:286 +msgid "Query" +msgstr "" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "" + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "" + +#: recvattach.c:53 +msgid "Print" +msgstr "" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "" + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "" + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "" + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "" + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "" + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "" + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "" + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "" + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "" + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "" + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "" + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "" + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" + +#: remailer.c:480 +msgid "Append" +msgstr "" + +#: remailer.c:481 +msgid "Insert" +msgstr "" + +#: remailer.c:482 +msgid "Delete" +msgstr "" + +#: remailer.c:484 +msgid "OK" +msgstr "" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "" + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "" + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "" + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "" + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "" + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "" + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "" + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "" + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "" + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "" + +#: send.c:1430 +msgid "Message postponed." +msgstr "" + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "" + +#: send.c:1464 +msgid "No subject specified." +msgstr "" + +#: send.c:1526 +msgid "Sending message..." +msgstr "" + +#: send.c:1667 +msgid "Could not send the message." +msgstr "" + +#: send.c:1672 +msgid "Mail sent." +msgstr "" + +#: send.c:1672 +msgid "Sending in background." +msgstr "" + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "" + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +msgid "Expired " +msgstr "" + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +msgid "Invalid " +msgstr "" + +#: smime.c:318 +msgid "Unknown " +msgstr "" + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "" + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "" + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "" + +#: smime.c:1197 +msgid "no certfile" +msgstr "" + +#: smime.c:1200 +msgid "no mbox" +msgstr "" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "" + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "" + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "" diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..90c1495b52f9d1d65768cc80d4b7df49af853499 GIT binary patch literal 81712 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�vxW~<7p@&Qi>e<Acs=gY1*E|wp})2t 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 DFAx1m literal 0 HcmV?d00001 diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..654084e --- /dev/null +++ b/po/nl.po @@ -0,0 +1,4359 @@ +# $Id: nl.po,v 3.15 2003/11/12 14:01:03 roessler Exp $ +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.5.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-06\n" +"Last-Translator: René Clerc <rene@clerc.nl>\n" +"Language-Team: mutt-dev <mutt-dev@mutt.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Gebruikersnaam voor %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Wachtwoord voor %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Afsluiten" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Wis" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Herstel" + +#: addrbook.c:36 +msgid "Select" +msgstr "Selecteren" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Hulp" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Geen afkortingen opgegeven!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Afkortingen" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Afkorten als: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "U heeft al een afkorting onder die naam!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Waarschuwing: Deze afkorting kan niet werken. Verbeteren?" + +#: alias.c:279 +msgid "Address: " +msgstr "Adres: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "Fout: '%s' is een ongeldige IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Naam: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Accepteren?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Opslaan als: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Adres toegevoegd." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Naamsjabloon kan niet worden ingevuld, doorgaan?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "\"compose\"-entry in mailcap vereist %%s." + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Fout opgetreden bij het uitvoeren van \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Kan bestand niet openen om header te lezen." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Kan bestand niet openen om header te verwijderen." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Geen \"compose\"-entry voor %s, een leeg bestand wordt aangemaakt." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "\"edit\"-entry in mailcap vereist %%s." + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Geen \"edit\"-entry voor %s in mailcap." + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Geen geschikte mailcap-entry gevonden. Weergave als normale tekst." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME type is niet gedefinieerd. Kan bijlage niet weergeven." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Filter kan niet worden aangemaakt." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Kan filter niet aanmaken" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Fout bij schrijven!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Ik weet niet hoe dit afgedrukt moet worden!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Wijzig directory" + +#: browser.c:42 +msgid "Mask" +msgstr "Masker" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s is geen directory." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Mailfolders [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Geselecteerd [%s], Bestandsmasker: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Directory [%s], Bestandsmasker: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Directory kan niet worden getoond!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Geen bestanden waarop het masker past gevonden." + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Alleen IMAP folders kunnen aangemaakt worden" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Alleen IMAP folders kunnen verwijderd worden" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Mailfolder \"%s\" echt verwijderen?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Mailfolder is verwijderd." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Mailfolder is niet verwijderd." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Wisselen naar directory: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Fout opgetreden tijdens het analyseren van de directory." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Bestandsmasker: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "" +"Achteruit sorteren op (d)atum, bestands(g)rootte, (a)lfabet of (n)iet? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sorteren op (d)atum, bestands(g)rootte, (a)lfabet of helemaal (n)iet?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dagn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nieuwe bestandsnaam: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Directory kan niet worden getoond." + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Fout opgetreden tijdens het weergeven van bestand" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Nieuw bericht in " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: Terminal ondersteunt geen kleur" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: onbekende kleur" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: Object onbekend" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: Commando alleen geldig voor index-objecten" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: Te weinig argumenten" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Argumenten afwezig." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: Te weinig argumenten." + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: Te weinig argumenten." + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: Attribuut onbekend" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "Te weinig argumenten" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "Te veel argumenten" + +#: color.c:721 +msgid "default colors not supported" +msgstr "standaard kleuren niet ondersteund" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "PGP-handtekening controleren?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Tijdelijk bestand kon niet worden aangelegd!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Display filter kan niet worden aangemaakt." + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Bericht kon niet gekopiëerd worden." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME handtekening is correct bevonden." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "S/MIME certificaat eigenaar komt niet overeen met afzender." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME handtekening kon NIET worden geverifiëerd." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP handtekening is correct bevonden." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP handtekening kon NIET worden geverifiëerd." + +#: commands.c:223 +msgid "Command: " +msgstr "Commando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Bericht doorsturen naar: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Gemarkeerde berichten doorsturen naar: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Ongeldig adres!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "Ongeldig IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Bericht doorsturen aan %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Berichten doorsturen aan %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Bericht niet doorgestuurd." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Berichten niet doorgestuurd." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Bericht doorgestuurd." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Berichten doorgestuurd." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Kan filter proces niet aanmaken" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Doorsluizen naar commando: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Er is geen print commando gedefiniëerd." + +#: commands.c:483 +msgid "Print message?" +msgstr "Bericht afdrukken?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Geselecteerde berichten uitprinten?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Bericht afgedrukt" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Berichten afgedrukt" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Bericht kon niet worden afgedrukt" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Berichten konden niet worden afgedrukt" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Omgekeerd (d)atum/(v)an/o(n)tv/(o)nd/(a)an/(t)hread/(u)nsort/(g)rootte/(s)" +"core?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sorteren (d)atum/(v)an/o(n)tv/(o)nd/(a)an/(t)hread/(u)nsort/(g)rootte/(s)" +"core?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dvnoatugs" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Shell commando: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Decoderen-opslaan%s in mailfolder" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Decoderen-kopiëren%s naar mailfolder" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Ontsleutelen-opslaan%s in mailfolder" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Ontsleutelen-kopiëren%s naar mailfolder" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Opslaan%s in mailfolder" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopiëren%s naar mailfolder" + +#: commands.c:706 +msgid " tagged" +msgstr " gemarkeerd" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopieren naar %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Converteren naar %s bij versturen?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type veranderd naar %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Karakterset veranderd naar %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "niet converteren" + +#: commands.c:914 +msgid "converting" +msgstr "converteren" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Bericht bevat geen bijlage." + +#: compose.c:84 +msgid "Send" +msgstr "Versturen" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Afbreken" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Bijvoegen" + +#: compose.c:90 +msgid "Descrip" +msgstr "Omschrijving" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Ondertekenen, Versleutelen" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Versleutelen" + +#: compose.c:131 +msgid "Sign" +msgstr "Ondertekenen" + +#: compose.c:133 +msgid "Clear" +msgstr "Geen" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " ondertekenen als: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<standaard>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Versleutelen met: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (v)ersleutel, (o)ndertekenen, ondert. (a)ls, (b)eiden, (g)een? " + +#: compose.c:166 +msgid "esabf" +msgstr "voabg" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Ondertekenen als: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (v)ersleutel, (o)ndert, ondert (a)ls, (b)eiden, (m)ic selecteren, (g)" +"een? " + +#: compose.c:228 +msgid "eswabf" +msgstr "vomabg" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, of (g)een? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345g" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] bestaat niet meer!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] werd veranderd. Codering aanpassen?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Bijlagen" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Waarschuwing: '%s' is een ongeldige IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Een bericht bestaat uit minimaal één gedeelte." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "Ongeldige IDN in \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Opgegeven bestanden worden bijgevoegd..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Kan %s niet bijvoegen!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Open mailfolder waaruit een bericht als bijlage toegevoegd wordt" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Geen berichten in deze mailfolder." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Selecteer de berichten die u wilt bijvoegen!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Kan niet bijvoegen!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Codering wijzigen is alleen van toepassing op bijlagen." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Deze bijlage zal niet geconverteerd worden." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Deze bijlage zal geconverteerd worden." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Ongeldige codering." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Een kopie van dit bericht maken?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Hernoemen naar: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Kan %s niet statten: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nieuw bestand: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type is van de vorm basis/subtype" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Onbekend Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Kan bestand %s niet aanmaken" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Het lukt niet helemaal met dat toevoegen. Het blijft moeilijk.." + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Bericht uitstellen?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Sla bericht op in mailfolder" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Bericht wordt opgeslagen in %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Bericht opgeslagen." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME al geselecteerd. Wissen & doorgaan ? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP al geselecteerd. Wissen & doorgaan ? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (huidige tijd: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s uitvoer volgt%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Wachtwoord(en) zijn vergeten." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Geef PGP-wachtwoord in:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Geef S/MIME-wachtwoord in:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Een traditioneel PGP bericht aanmaken?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "PGP wordt aangeroepen..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" +"S/MIME berichten zonder aanwijzingen over inhoud zijn niet ondersteund." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "PGP sleutels onttrekken...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "S/MIME certificaten onttrekken...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Fout: Gebroken multipart/signed structuur! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Fout: Onbekend multipart/signed protocol: %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Waarschuwing: %s/%s handtekeningen kunnen niet gecontroleerd worden --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- De volgende gegevens zijn ondertekend --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Waarschuwing: kan geen enkele handtekening vinden --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Einde van ondertekende gegevens --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "ja" + +#: curs_lib.c:158 +msgid "no" +msgstr "nee" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Mutt afsluiten?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "onbekende fout" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Druk een willekeurige toets in..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' voor een overzicht): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Er is geen mailfolder geopend." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Er zijn geen berichten." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Mailfolder is schrijfbeveiligd." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funktie wordt niet ondersteund in deze modus" + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Geen zichtbare berichten" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Kan niet schrijven in een scrijfbeveiligde mailfolder!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "" +"Wijzigingen zullen worden weggeschreven bij het verlaten van de mailfolder." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Wijzigingen worden niet weggeschreven." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Einde" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Opslaan" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Sturen" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Antw." + +#: curs_main.c:403 +msgid "Group" +msgstr "Groep" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Mailfolder is extern veranderd. Markeringen kunnen onjuist zijn." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Nieuwe berichten in deze mailfolder." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Mailfolder is extern veranderd." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Geen gemarkeerde berichten." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Niets te doen." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Ga naar bericht: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argument moet een berichtennummer zijn." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Dit bericht is niet zichtbaar." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Ongeldig berichtennummer" + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Wis berichten volgens patroon: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Er is geen beperkend patroon in werking." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Limiet: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limiteer berichten volgens patroon: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Mutt afsluiten?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Berichten markeren volgens patroon: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Herstel berichten: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Verwijder markering volgens patroon: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Open mailfolder in schrijfbeveiligde modus" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Open mailfolder" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s is geen mailfolder." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Mutt verlaten zonder op te slaan?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "U bent bij het laatste bericht." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Alle berichten zijn gewist." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "U bent bij het eerste bericht." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Zoekopdracht bovenaan begonnen." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Zoekopdracht onderaan begonnen." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Geen nieuwe berichten" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Geen ongelezen berichten" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " in deze beperkte weergave." + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Kan markering 'belangrijk' op POP server niet veranderen." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Geen verdere threads." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "U bent al bij de eerste thread." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Het weergeven van threads is niet ingeschakeld." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Thread bevat ongelezen berichten" + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Kan bericht op POP server niet aanpassen." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tVoeg een regel in die begint met een enkele ~\n" +"~b adressen\tVoeg adressen aan Bcc: veld toe\n" +"~c adressen\tVoeg adressen aan Cc: veld toe\n" +"~f berichten\tBerichten toevoegen\n" +"~F berichten\tAls ~f, maar met header\n" +"~h\t\tBewerk header\n" +"~m berichten\tBerichten citeren\n" +"~M berichten\tAls ~m, maar met header\n" +"~p\t\tBericht afdrukken\n" +"~q\t\tBericht opslaan en editor verlaten\n" +"~r bestand\tBestand inlezen\n" +"~t adressen\tVoeg adresen aan To: veld toe\n" +"~u\t\tLaatste regel opnieuw bewerken\n" +"~v\t\tBewerk bericht met alternatieve editor($visual)\n" +"~w bestand\tSla bericht op in een bestand\n" +"~x\t\tVerlaat de editor zonder wijzigingen te behouden\n" +"~?\t\tDit bericht\n" +".\t\tals enige inhoud van een regel beëndigt het invoegen\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: ongeldig berichtennummer.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Beëndig bericht met een . als enige inhoud van de regel)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Geen mailfolder.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Bericht bevat:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(verder)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "Geen bestandsnaam opgegeven.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Bericht bevat geen regels.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "Ongeldige IDN in %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: Onbekend editor-commando (~? voor hulp)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Tijdelijke directory %s kan niet worden aangemaakt." + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Tijdelijk bestand %s kan niet worden aangemaakt." + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "tijdelijke bestand %s kan niet worden geknot." + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Mailfolder is leeg!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Bericht niet gewijzigd!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Kan bestand %s niet openen." + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Kan bericht niet toevoegen aan mailfolder %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Fout opgetreden. Tijdelijk bestand opgeslagen als: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Zet markering" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Verwijder markering" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Fout: Kon geen enkel multipart/alternative gedeelte weergeven! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Bijlage #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Type: %s/%s, Codering: %s, Grootte: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automatische weergave met %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Commando wordt aangeroepen: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Kan %s niet uitvoeren. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Foutenuitvoer van %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- Fout: message/external-body heeft geen access-type paramter --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Deze %s/%s bijlage " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(grootte %s bytes) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "werd gewist --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- op %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- naam: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Deze %s/%s bijlage is niet bijgesloten, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- en de aangegeven externe bron --]\n" +"[-- bestaat niet meer. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- en het access-type %s wordt niet ondersteund --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Fout: multipart/signed zonder protocol-parameter." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Fout: multipart/encrypted zonder protocol-parameter!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Tijdelijk bestand kon niet worden geopend!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s wordt niet ondersteund " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(gebruik '%s' om dit gedeelte weer te geven)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' moet aan een toets gekoppeld zijn!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: kan bestand niet toevoegen" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "FOUT: Meldt deze bug!" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<onbekend>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Algemene toetsenbindingen:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Ongebonden functies:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Hulp voor %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Kan geen unhook * doen binnen een hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: onbekend type: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Kan geen %s wissen binnen een %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Geen authenticeerders beschikbaar" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Authenticatie (anoniem)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonieme verbinding mislukt." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Authenticatie (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 authenticatie geweigerd." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Authenticatie (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI authenticatie geweigerd." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN uitgeschakeld op deze server." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Aanmelden..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Aanmelden mislukt..." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Authenticeren (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL authenticatie geweigerd." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s is een ongeldig IMAP pad" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Namespace wordt overgehaald..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Mailfolder lijst wordt overgehaald..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Niet bestaande mailfolder" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Mailfolder aanmaken: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Mailfolder moet een naam hebben." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Mailfolder is aangemaakt." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Mailfolder is gesloten." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Kritieke fout. Berichtenteller wijkt af!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Verbinding met %s wordt gesloten..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Mutt kan niet overweg met deze antieke IMAP server." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Onverwacht antwoord ontvangen van de server: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Beveiligde connectie met TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Kon TLS connectie niet onderhandelen" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "%s wordt uitgekozen..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Er is een fout opgetreden tijdens het openen van de mailfolder" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "IMAP server laat het toevoegen van berichten niet toe" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "%s aanmaken?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Verbinding met IMAP-server wordt gesloten.." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "%d berichten worden gemarkeerd voor verwijdering..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Verwijderen mislukt" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Berichten-status wordt opgeslagen... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Berichten op de server worden gewist..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE mislukt" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE mislukt" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Verkeerde mailfolder naam" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Aanmelden voor %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Afmelden voor %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Kan berichtenoverzicht niet overhalen van deze IMAP server." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Tijdelijk bestand %s kon niet worden aangemaakt" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Headers worden gelezen... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Bericht wordt gelezen..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "The berichten index is niet correct. Probeer mailfolder te heropenen." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Bericht wordt verstuurd ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "%d berichten worden gekopieerd naar %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Bericht %d wordt gekopieerd naar %s ..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Doorgaan?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: Geen adres" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Waarschuwing: Ongeldige IDN '%s' in alias '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "my_hdr: Ongeldig veld in berichtenkop" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: onbekende sorteermethode" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): fout in reguliere expressie: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: onbekende variable" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "Prefix is niet toegestaan" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "Toekenning van een waarde is niet toegestaan" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s is gezet" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s is niet gezet" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: Ongeldig mailfolder-type" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: ongeldige waarde" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: Onbekend type." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: onbekend type" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Kan %s niet statten: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s is geen normaal bestand." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Fout in %s, regel %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: fouten in %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: inlezen gestaakt vanwege te veel fouten in %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: fout bij %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: Te veel argumenten" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: onbekend commando" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Fout in opdrachtregel: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "Kan Home-directory niet achterhalen" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "Kan gebruikersnaam niet achterhalen" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Macro-lus gedetecteerd." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Toets is niet in gebruik." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Toets is niet in gebruik. Toets '%s' voor hulp." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: Te veel argumenten" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: Menu onbekend" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "lege toetsenvolgorde" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: Te veel argumenten" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: onbekende functie" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: Lege toetsenvolgorde" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: Te veel argumenten" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: geen argumenten" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: onbekende functie" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Geef toetsen in (^G om af te breken): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Karakter = %s, Octaal = %o, Decimaal = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "lege functie" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "einde van conditionele uitvoering (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "bijlage wordt noodgedwongen volgens mailcap weergegeven" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "toon bijlage als tekst" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "schakel weergeven van onderdelen aan/uit" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "naar het einde van deze pagina" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "bericht opnieuw versturen naar een andere gebruiker" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "kies een nieuw bestand in deze directory" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "toon bestand" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "toon de bestandsnaam van het huidige bestand" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "aanmelden voor huidige mailfolder (alleen met IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "afmelden voor huidige mailfolder (alleen met IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "omschakelen weergave alle/aangemelde mailfolders (alleen met IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "toon mailfolders met nieuwe berichten." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "verander directories" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "controleer mailfolders op nieuwe berichten" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "voeg bestand(en) aan dit bericht toe" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "voeg bericht(en) aan dit bericht toe" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "bewerk de Bcc-lijst" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "bewerk de Cc-lijst" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "bewerk de omschrijving van een bijlage" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "bewerk de transport-codering van een bijlage" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "kopieer bericht naar bestand" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "bewerk het bij te voegen bestand" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "bewerk het From-veld" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "bewerk het bericht (incl. header)" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "bewerk het bericht" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "bewerk bijlage volgens mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "bewerk Reply-To-veld" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "bewerk onderwerp (Subject) van dit bericht" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "bewerk ontvangers (To-veld)" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "maak een nieuwe mailfolder aan (alleen met IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "bewerk type van bijlage" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "maak een tijdelijke kopie van de bijlage" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "controleer spelling via ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "maak nieuwe bijlage aan volgens mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "omschakelen decodering van de bijlage" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "sla dit bericht op om later te verzenden" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "hernoem/verplaats een toegevoegd bestand" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "verstuur het bericht" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "omschakelen weergave in bericht/als bijlage" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "kies of bestand na verzenden gewist wordt" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "controleer codering van een bijlage" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "schrijf een bericht naar een mailfolder" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "kopieer bericht naar bestand/mailfolder" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "maak een afkorting van de afzender" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "verplaats item naar onderkant van scherm" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "verplaats item naar midden van scherm" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "verplaats item naar bovenkant van scherm" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "maak gedecodeerde (text/plain) kopie" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "maak gedecodeerde kopie (text/plain) en verwijder" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "verwijder huidig item" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "verwijder de huidige mailfolder (alleen met IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "verwijder alle berichten in subthread" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "wis alle berichten in thread" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "toon adres van afzender" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "toon bericht met complete berichtenkop" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "toon bericht" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "bewerk het bericht" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "wis karakter voor de cursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "verplaats cursor een karakter naar links" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "verplaats cursor naar begin van het woord" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ga naar begin van de regel" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "roteer door mailfolders" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "complete bestandsnaam of afkorting" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "compleet adres met vraag" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "wis karakter onder de cursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ga naar regeleinde" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "beweeg de cursor een karakter naar rechts" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "beweeg de cursor naar het einde van het woord" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "ga omhoog in history lijst" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ga omhoog in history list" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "wis alle karakters tot einde van de regel" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "wis alle karakters tot einde van het woord" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "wis regel" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "wis woord voor de cursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "voeg volgende toets onveranderd in" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "transponeer karakter onder cursor naar de vorige" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "begin het woord met een hoofdletter" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "verander het woord in kleine letters" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "verander het woord in hoofdletters" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "geef een muttrc commando in" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "geef bestandsmasker in" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "menu verlaten" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filter bijlage door een shell commando" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ga naar eerste item" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "markeer bericht als belangrijk" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "stuur bericht door met commentaar" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "selecteer het huidige item" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "antwoord aan alle ontvangers" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "ga 1/2 pagina naar beneden" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "ga 1/2 pagina omhoog" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "dit scherm" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ga naar een index nummer" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ga naar laatste item" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "stuur antwoord naar mailing-list" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "Voer macro uit" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "maak nieuw bericht aan" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "open een andere mailfolder" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "open een andere mailfolder in read-only mode" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "verwijder een status-vlag" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "verwijder berichten volgens patroon" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "forceer ophalen van mail vanaf IMAP-server" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "haal mail vanaf POP-server" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "spring naar eeste bericht" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "spring naar het laaste bericht" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "geef alleen berichten weer volgens patroon" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "spring naar het volgende nieuwe bericht" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "spring naar het volgende nieuwe of ongelezen bericht" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "spring naar de volgende subthread" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "spring naar de volgende thread" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "spring naar het volgende ongewiste bericht" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "spring naar het volgende ongelezen bericht" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "spring naar het vorige bericht in de thread" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "spring naar de vorige thread" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "spring naar de vorige subthread" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "spring naar het volgende ongewiste bericht" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "spring naar het vorige nieuwe bericht" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "spring naar het vorige nieuwe of ongelezen bericht" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "spring naar het vorige ongelezen bericht" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "markeer de huidige thread als gelezen" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "markeer de huidige subthread als gelezen" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "zet een status-vlag in een bericht" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "sla wijzigingen in mailfolder op" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "markeer berichten volgens patroon" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "herstel berichten volgens patroon" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "verwijder markering volgens patroon" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ga naar het midden van de pagina" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ga naar het volgende item" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "ga een regel naar beneden" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ga naar de volgende pagina" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "spring naar het einde van het bericht" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "schakel weergeven van geciteerde tekst aan/uit" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "sla geciteerde tekst over" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "spring naar het begin van het bericht" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "bewerk (pipe) bericht/bijlage met een shell-commando" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ga naar het vorige item" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "ga een regel omhoog" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ga naar de vorige pagina" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "druk het huidige item af" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "vraag een extern programma om adressen" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "voeg resultaten van zoekopdracht toe aan huidige resultaten" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "sla wijzigingen in de mailfolder op en verlaat Mutt" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "bewerk een uitgesteld bericht" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "wis scherm en bouw scherm opnieuw op" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "(intern)" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "beantwoord een bericht" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "gebruik het huidige bericht als template voor een nieuw bericht" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "sla bericht/bijlage op in een bestand" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "zoek naar een reguliere expressie" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "zoek achteruit naar een reguliere expressie" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "zoek volgende match" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "zoek achteruit naar volgende match" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "schakel inkleuren van zoekpatronen in/uit" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "roep een commando in een shell aan" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "sorteer berichten" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "sorteer berichten in omgekeerde volgorde" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "markeer huidig item" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "voer volgende functie uit op gemarkeerde berichten" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "voer volgende functie ALLEEN uit op gemarkeerde berichten" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "markeer de huidige subthread" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "markeer de huidige thread" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "zet/wis de 'nieuw'-markering van een bericht" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "schakel het opslaan van wijzigingen aan/uit" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "kies tussen doorlopen van mailfolders/alle bestanden" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "spring naar het begin van de pagina" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "verwijder wismarkering van huidig item" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "verwijder wismarkering van alle berichten in thread" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "verwijder wismarkering van alle berichten in subtread" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "geef de datum en het versienummer van Mutt weer" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "geef bijlage weer, zo nodig via mailcap" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "geef MIME-bijlagen weer" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "toon de code voor een toets" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "geef het momenteel actieve limietpatroon weer" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "comprimeer/expandeer huidige thread" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "comprimeer/expandeer alle threads" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "voeg een PGP publieke sleutel toe" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "geef PGP-opties weer" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "mail een PGP publieke sleutel" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "controleer een PGP publieke sleutel" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "geef User-ID van een sleutel weer" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "controleer klassieke pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Accepteer de gemaakte lijst" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Voeg een remailer toe aan het einde van de lijst" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Voeg een remailer toe in de lijst" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Verwijder een remailer van de lijst" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Kies het vorige item uit de lijst" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Kies het volgende item uit de lijst" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "verstuur het bericht via een \"mixmaster remailer\" lijst" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "maak een gedecodeerde kopie en wis" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "maak een gedecodeerde kopie" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "verwijder wachtwoord(en) uit geheugen" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "extraheer ondersteunde publieke sleutels" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "geef S/MIME-opties weer" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "Integer overflow -- kan geen geheugen alloceren!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Onvoldoende geheugen!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Stuur een bericht naar <mutt-dev@mutt.org> om de auteurs te bereiken.\n" +"Gebruik de flea(1) om een programmafout te melden.\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins en anderen.\n" +"Mutt komt ABSOLUUT ZONDER GARANTIE; voor meer informatie `mutt -vv'.\n" +"Mutt is vrije software, en u bent vrij om het te verspreiden\n" +"onder bepaalde voorwaarden; type `mutt -vv' voor meer informatie.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Vele anderen, hier niet genoemd, hebben veel code, verbeteringen\n" +"en suggesties aangedragen.\n" +"\n" +" Dit Programma is vrije software; U kan het verspreiden en/of wijzigen\n" +" onder de bepalingen van de GNU Algemene Publieke Licentie, zoals\n" +" uitgegeven door de Free Software Foundation; oftewel versie 2 van\n" +" de Licentie,of (naar vrije keuze) een latere versie.\n" +"\n" +" Dit Programma is verspreid met de hoop dat het nuttig zal zijn maar\n" +" ZONDER EENDER WELKE GARANTIE; zelfs zonder de impliciete garantie van\n" +" VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU\n" +" Algemene Publieke Licentie voor meer details.\n" +"\n" +" U zou een kopie van de GNU Algemene Publieke Licentie ontvangen moeten\n" +" hebben samen met dit Programma; zoniet, schrijf naar de Free Software\n" +" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 " +"USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"gebruik: 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 [ -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" +"\n" +" -A <alias>\tgebruik een afkorting\n" +" -a <file>\tvoeg een bestand bij het bericht\n" +" -b <address>\tspecificeer een blind carbon-copy (BCC) adres\n" +" -c <address>\tspecificeer een carbon-copy (CC) adres\n" +" -e <opdracht>\tspecificeer een uit te voeren opdracht na initialisatie\n" +" -f <file>\tspecificeer de te lezen mailfolder\n" +" -F <file>\tspecificeer een alternatieve muttrc\n" +" -H <file>\tspecificeer een een bestand om de headers uit te lezen\n" +" -i <file>\tspecificeer een bestand dat Mutt moet bijsluiten in het " +"antwoord\n" +" -m <type>\tspecificeer een standaard mailfolder type\n" +" -n\t\tzorgt dat Mutt niet de systeem Muttrc inleest\n" +" -p\t\troept een uitgesteld bericht op\n" +" -Q <variabele>\tvraagt de waarde van een configuratievariabele op\n" +" -R\t\topent de mailfolder met alleen-lezen rechten\n" +" -s <ond>\tspecificeer een onderwerp (tussen aanhalingstekens i.g.v. " +"spaties)\n" +" -v\t\ttoont het versienummer en opties tijdens het compileren\n" +" -x\t\tsimuleert de mailx verstuurmodus\n" +" -y\t\tselecteert een mailfolder gespecificeerd in de `mailboxes' lijst\n" +" -z\t\tbeëindigt meteen als er geen berichten in de mailfolder staan\n" +" -Z\t\topent de eerste mailfolder met nieuwe berichten, eindigt indien " +"geen\n" +" -h\t\tdit hulp bericht" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opties tijdens compileren:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Kan terminal niet initialiseren." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Debug informatie level %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG optie niet beschikbaar: deze wordt genegeerd.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s bestaat niet. Aanmaken?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Kan bestand %s niet aanmaken: %s" + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Geen ontvangers opgegeven.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: kan bestand niet bijvoegen.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Geen mailfolder met nieuwe berichten." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Geen mailfolders opgegeven." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Mailfolder is leeg." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Bezig met het lezen van %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Mailfolder is beschadigd!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Mailfolder was beschadigd!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fatale fout! Kon mailfolder niet opnieuw openen!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Kan mailfolder niet claimen!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: mbox is gewijzigd, maar geen gewijzigde berichten gevonden!" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Berichten worden opgeslagen ... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Wijzigingen doorvoeren..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Opslaan mislukt! Deel-mailfolder opgeslagen als %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Kan mailfolder niet opnieuw openen!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Mailfolder wordt heropend.." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Ga naar: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Ongeldig Indexnummer." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Geen items" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "U kunt niet verder naar beneden gaan." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "U kunt niet verder naar boven gaan." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "U bent op de laatste pagina." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "U bent op de eerste pagina." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Het eerste item wordt weergegeven." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Het laatste item wordt weergegeven." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "U bent op het laatste item." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "U bent op het eerste item." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Zoek naar: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Zoek achteruit naar: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Geen zoekpatroon." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Niet gevonden." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Geen geselecteerde items." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "In dit menu kan niet worden gezocht." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Verspringen is niet mogelijk in menu." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Markeren is niet ondersteund." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Bezig met het lezen van %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): kan bestandstijd niet zetten" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Bestand is een directory, daarin opslaan? [(j)a, (n)ee, (a)llen]" + +#: muttlib.c:835 +msgid "yna" +msgstr "jna" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Bestand is een directory, daarin opslaan?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Bestandsnaam in directory: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Bestand bestaat, (o)verschrijven, (t)oevoegen, (a)nnuleren?" + +#: muttlib.c:869 +msgid "oac" +msgstr "ota" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Kan het bericht niet opslaan in de POP mailfolder." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s is geen mailfolder!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Bericht aan %s toevoegen?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Verbinding met %s beëindigd" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL is niet beschikbaar." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Preconnect commando is mislukt." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Verbinding met %s mislukt (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "Ongeldige IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "%s aan het opzoeken..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Kan adres van server \"%s\" niet achterhalen" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Bezig met verbinden met %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Kan niet verbinden met %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Te weinig entropie op uw systeem gevonden" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Entropieverzameling aan het vullen: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s heeft onveilige rechten!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL uitgeschakeld vanwege te weinig entropie" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O fout" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "algemene protocolfout" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL mislukt: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Kan server certificaat niet verkrijgen" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL verbinding via %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Onbekende fout" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[kan niet berekend worden]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ongeldige datum]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Certificaat van de server is nog niet geldig" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Certificaat van de server is verlopen" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Dit certificaat behoort aan:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Dit certificaat is uitgegeven door:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Dit certificaat is geldig" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " van %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " tot %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Handtekening: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL certificaat controle" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(w)eigeren, (e)enmalig toelaten, (a)ltijd toelaten" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "wea" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(w)eigeren, (e)enmalig toelaten" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "we" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Einde " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Waarschuwing: certificaat kan niet bewaard worden" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certificaat wordt bewaard" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Claim-timeout overschreden, oude claim voor %s verwijderen?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Kan %s niet claimen met \"dotlock\".\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "De fcntl-claim kon niet binnen de toegestane tijd worden verkregen." + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Wacht op fcntl-claim... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "de flock-claim kon niet binnen de toegestane tijd worden verkregen." + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Wacht op flock-poging... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Kan %s niet claimen.\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Bezig met het lezen van %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Bezig met het schrijven van %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Kan mailfolder %s niet synchronisieren!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Gelezen berichten naar %s verplaatsen?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "%d als gewist gemarkeerde berichten verwijderen?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "%d als gewist gemarkeerde berichten verwijderen?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Gelezen berichten worden naar %s verplaatst..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Mailfolder is niet veranderd." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d bewaard, %d verschoven, %d gewist." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d bewaard, %d gewist." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Druk '%s' om schrijfmode aan/uit te schakelen" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Gebruik 'toggle-write' om schrijven mogelijk te maken!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "De mailfolder is als schrijfbeveiligd gemarkeerd. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Mailfolder is gecontroleerd." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Kan bericht niet wegschrijven" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "Integer overflow -- kan geen geheugen alloceren!" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Optie niet beschikbaar in dit menu." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "Vorig.P" + +#: pager.c:1447 +msgid "NextPg" +msgstr "Volg.P" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Bijlagen tonen" + +#: pager.c:1454 +msgid "Next" +msgstr "Volgend ber." + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Einde van bericht is weergegeven." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Begin van bericht is weergegeven." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Achteruit zoeken: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Zoeken: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Hulp wordt al weergegeven." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Geen verdere geciteerde text." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Geen verdere eigen text na geciteerde text." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "Multi-part bericht heeft geen \"boundary\" parameter." + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Fout in expressie: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Ongeldige dag van de maand: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Ongeldige maand: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Ongeldige maand: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "Fout in expressie" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "Fout in expressie bij: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: Ongeldig commando" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: Niet ondersteund in deze modus" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "Te weinig parameters" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "Haakjes kloppen niet: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "Leeg patroon" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "fout: onbekende operatie %d (interne fout)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Bezig met het compileren van patroon..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Commando wordt uitgevoerd..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Geen berichten voldeden aan de criteria." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Zoeken heeft einde bereikt zonder iets te vinden" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Zoeken heeft begin bereikt zonder iets te vinden" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Zoeken onderbroken." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP-wachtwoord is vergeten." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Fout: Kan geen PGP-proces starten! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Einde van PGP uitvoer --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- BEGIN PGP BERICHT --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- BEGIN PGP PUBLIC KEY BLOK --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- BEGIN PGP ONDERTEKEND BERICHT --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- EINDE PGP BERICHT --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- EINDE PGP PUBLIC KEY BLOK --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- EINDE PGP ONDERTEKEND BERICHT --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Fout: Kon begin van PGP-bericht niet vinden! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Interne fout. Informeer <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Fout: Kon PGP-subproces niet starten! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Fout: Foutief PGP/MIME bericht! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Fout: Kon geen tijdelijk bestand aanmaken! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- De volgende gegevens zijn PGP/MIME versleuteld --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Einde van PGP/MIME versleutelde data --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Kan PGP-Subproces niet starten!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "KeyID = \"%s\" gebruiken voor %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "KeyID voor %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Kan PGP niet aanroepen" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "PGP sleutel wordt gelezen..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Alle overeenkomende sleutels zijn verlopen/ingetrokken." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Selecteer " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Controleer sleutel " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP-sleutels voor <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP-sleutels voor \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Kan /dev/null niet openen" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Kan tijdelijk bestand niet aanmaken" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Sleutel ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Deze sleutel is onbruikbaar: verlopen/ingetrokken." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Dit ID is verlopen/uitgeschakeld/ingetrokken." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Dit ID heeft ongedefiniëerde geldigheid." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Dit ID is niet geldig." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Dit ID is slechts marginaal vertrouwd." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Wilt U deze sleutel gebruiken?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Geef Key-ID in: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "PGP wordt aangeroepen..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP-key %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Zoeken naar sleutels voor \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Het TOP commando wordt niet door de server ondersteund." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Kan de header niet naar een tijdelijk bestand wegschrijven!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Het UIDL commando wordt niet door de server ondersteund." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s is een ongeldig POP pad" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Berichtenlijst ophalen..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Kan het bericht niet naar een tijdelijk bestand wegschrijven" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Controleren op nieuwe berichten..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Er is geen POP-server gespecificeerd." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Geen nieuwe berichten op de POP-server." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Berichten op de server verwijderen?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Bezig met het lezen van nieuwe berichten (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Er is een fout opgetreden tijdens het wegschrijven van de mailfolder!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d van de %d berichten gelezen]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Server heeft verbinding gesloten!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Authenticatie (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Authenticatie (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP authenticatie geweigerd." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Het UIDL commando wordt niet door de server ondersteund." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Niet in staat berichten op de server achter te laten." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Fout tijdens verbinden met server: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Verbinding met POP-server wordt gesloten.." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Berichten index wordt geverifiëerd..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Verbinging verbroken. Opnieuw verbinden met POP server?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Uitgestelde Berichten" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Geen uitgestelde berichten." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Ongeldige PGP-Header" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Ongeldige S/MIME header" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Ontsleuteling mislukt." + +#: query.c:46 +msgid "New Query" +msgstr "Nieuwe query" + +#: query.c:47 +msgid "Make Alias" +msgstr "Afkorting maken" + +#: query.c:48 +msgid "Search" +msgstr "Zoeken" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Wacht op antwoord..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Query-commando niet gedefinieerd." + +#: query.c:286 +msgid "Query" +msgstr "Zoekopdracht" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Zoekopdracht: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Zoekopdracht '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Filteren" + +#: recvattach.c:53 +msgid "Print" +msgstr "Druk af" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Bezig met opslaan..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Bijlage opgeslagen." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "Waarschuwing! Bestand %s bestaat al. Overschrijven?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Bijlage gefilterd." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filter door: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Doorgeven aan (pipe): " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Kan %s bijlagen niet afdrukken!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Gemarkeerde bericht(en) afdrukken?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Bijlage afdrukken?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Kan het versleutelde bericht niet ontsleutelen!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Bijlagen" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Er zijn geen onderdelen om te laten zien!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Kan de bijlage niet van de POP server verwijderen." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "" +"Het wissen van bijlagen uit versleutelde berichten is niet ondersteund." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Kan alleen multipart-bijlagen wissen." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "U kunt alleen message/rfc882-gedeelten doorsturen!" + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "Fout opgetreden tijdens het doorsturen van het bericht!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "Fout opgetreden tijdens het doorsturen van de berichten!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Kan tijdelijk bestand %s niet aanmaken." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Doorsturen als bijlagen?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "Kan niet alle bijlagen decoderen. De rest doorsturen met MIME?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Doorsturen als MIME-bijlage?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Kan bestand %s niet aanmaken." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Kan geen geselecteerde berichten vinden." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Geen mailing-lists gevonden!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "Kan niet alle bijlagen decoderen. De rest inpakken met MIME?" + +#: remailer.c:480 +msgid "Append" +msgstr "Toevoegen" + +#: remailer.c:481 +msgid "Insert" +msgstr "Invoegen" + +#: remailer.c:482 +msgid "Delete" +msgstr "Verwijderen" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Kan type2.list niet lezen van mixmaster." + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Selecteer een remailer lijster." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Fout: %s kan niet gebruikt worden als laaste remailer van een lijst." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster lijsten zijn beperkt tot %d items." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "De remailer lijst is al leeg." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Het eerste lijst-item is al geselecteerd." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Het laaste lijst-item is al geselecteerd." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster laat geen Cc or Bcc headers toe." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "De hostname variable moet ingesteld zijn voor mixmaster gebruik!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Externe fout %d opgetreden tijdens versturen van bericht.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Fout opgetreden tijdens het verzenden van het bericht." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Ongeldig geformuleerde entry voor type %s in \"%s\", regel %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Geen mailcap-path opgegeven" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Kan geen mailcap-entry voor %s vinden." + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: te weinig argumenten" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: te veel argumenten" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Geen onderwerp, afbreken?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Geen onderwerp. Operatie afgebroken." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Reactie sturen naar %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Reactie sturen naar %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Geen gemarkeerde berichten zichtbaar!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Bericht in antwoord citeren?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Geciteerde bericht wordt toegevoegd..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Kon niet alle berichten citeren!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Doorsturen als bijlage?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Voorbereiden door te sturen bericht..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Uigesteld bericht hervatten?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Doorgestuurd bericht wijzigen?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Uitgesteld bericht afbreken?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Bericht werd niet veranderd. Operatie afgebroken." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Bericht niet verstuurd." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Bericht uitgesteld." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Er zijn geen geadresseerden opgegeven!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Er werden geen geadresseerden opgegeven!" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Geen onderwerp. Versturen afbreken?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Geen onderwerp." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Verstuur bericht..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Bericht kon niet verstuurd worden." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Bericht verstuurd." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Bericht wordt op de achtergrond verstuurd." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Geen 'boundary parameter' gevonden! [meldt deze fout!]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s bestaat niet meer!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s is geen normaal bestand." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Kan %s niet openen." + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Fout %d opgetreden tijdens versturen van bericht: %s" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Uitvoer van het afleverings proces" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "Ongeldige IDN %s tijdens maken resent-from header." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Mutt wordt afgesloten.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Signaal %s...\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Signaal %d...\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Vertrouwd " + +#: smime.c:303 +msgid "Verified " +msgstr "Geverifieerd " + +#: smime.c:306 +msgid "Unverified" +msgstr "Niet geverifieerd" + +#: smime.c:309 +msgid "Expired " +msgstr "Verlopen " + +#: smime.c:312 +msgid "Revoked " +msgstr "Herroepen " + +#: smime.c:315 +msgid "Invalid " +msgstr "Ongeldig " + +#: smime.c:318 +msgid "Unknown " +msgstr "Onbekend " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Geef keyID: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME certficiaten voor \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s is niet geverifieerd. Wilt u het gebruiken voor %s ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "ID %s (niet vertrouwd!) gebruiken voor %s ?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "ID %s gebruiken voor %s ?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Waarschuwing: nog niet besloten om ID %s te vertrouwen. (druk op een toets)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Geen (geldig) certificaat gevonden voor %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Fout: kan geen OpenSSL subproces starten!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "geen certfile" + +#: smime.c:1200 +msgid "no mbox" +msgstr "geen mbox" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Geen uitvoer van OpenSSL.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Waarschuwing: Tussentijds certificaat niet gevonden." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Kan OpenSSL subproces niet starten!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Geen uitvoer van OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Einde van OpenSSL uitvoer --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Fout: Kan geen OpenSSL subproces starten! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- De volgende gegevens zijn S/MIME versleuteld --]\n" +"\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- De volgende gegevens zijn S/MIME ondertekend --]\n" +"\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Einde van S/MIME versleutelde data --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Einde van S/MIME ondertekende gegevens --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Mailfolder wordt gesorteerd..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Kan 'sorting function' niet vinden! [Meldt deze bug!]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(geen mailfolder)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Vorig bericht niet zichtbaar in gelimiteerd overzicht." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Vorig bericht is niet beschikbaar." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "OpenSSL wordt aangeroepen..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Berichten aan %s doorsturen ?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Berichten aan %s doorsturen ?" + +#~ msgid "ewsabf" +#~ msgstr "voabmg" + +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certificaat *NIET* toegevoegd." + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Het vertrouwensniveau van dit ID is niet gedefinieerd." + +#~ msgid "Decode-save" +#~ msgstr "Gedecodeerd opslaan" + +#~ msgid "Decode-copy" +#~ msgstr "Gedecodeerd kopieeren" + +#~ msgid "Decrypt-save" +#~ msgstr "Gedecodeerd opslaan" + +#~ msgid "Decrypt-copy" +#~ msgstr "Gedecodeerd kopieeren" + +#~ msgid "Copy" +#~ msgstr "Kopieeren" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Einde van PGP uitvoer --]\n" +#~ "\n" + +#~ msgid "Can't stat %s." +#~ msgstr "Kan %s niet statten." + +#~ msgid "%s: no such command" +#~ msgstr "%s: Commando bestaat niet" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Authenticatiemethode onbekend." + +#~ msgid "MIC algorithm: " +#~ msgstr "MIC-Algoritme: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Dit heeft geen zin als U het bericht niet wilt ondertekenen." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "" +#~ "Onbekend MIC algoritme. Bekend zijn: pgp-md5, pgp-sha1 en pgp-rmd160" + +#~ msgid "POP Username: " +#~ msgstr "POP-gebruikersnaam: " + +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Bezig met het lezen van nieuw bericht (%d bytes)..." + +#~ msgid "Error reading message!" +#~ msgstr "Kan bericht niet lezen!" + +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d bericht gelezen]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "Aanmaken van mailfolders wordt niet ondersteund." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Mailfolder wordt heropend... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Mailfolder wordt gesloten..." + +#~ msgid "IMAP Username: " +#~ msgstr "IMAP-gebruikersnaam: " + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "CRAM sleutel voor %s@%s: " + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "CRAM-MD5 authenticatie wordt overgeslagen." + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- Fout: Onverwacht einde van het bestand! --]\n" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "APPEND-commando wordt verstuurd..." + +#~ msgid "%d kept." +#~ msgstr "%d bewaard." + +#~ msgid "POP Password: " +#~ msgstr "POP-Wachtwoord:" + +#~ msgid "No POP username is defined." +#~ msgstr "Er is geen POP-gebruikersnaam gespecificeerd." + +#~ msgid "Could not find address for host %s." +#~ msgstr "Kan adres van server %s niet achterhalen." + +#~ msgid "Attachment saved" +#~ msgstr "Bijlage opgeslagen." + +#~ msgid "Can't open %s: %s." +#~ msgstr "Kan directory %s niet lezen: %s" + +#~ msgid "Error while recoding %s. Leave it unchanged." +#~ msgstr "Fout bij aanpassen codering van %s. Codering is ongewijzigd." + +#~ msgid "Error while recoding %s. See %s for recovering your data." +#~ msgstr "" +#~ "Fout bij aanpassen codering van %s. Zie %s om het bestand te herstellen." + +#~ msgid "Can't change character set for non-text attachments!" +#~ msgstr "Kan karakterset niet aanpassen voor binary bijlage!" + +#~ msgid "Enter character set: " +#~ msgstr "Geef karakterset op: " + +#~ msgid "Recoding successful." +#~ msgstr "Conversie is geslaagd." + +#~ msgid "change an attachment's character set" +#~ msgstr "Wijzig de karakterset van een bijlage" + +#~ msgid "recode this attachment to/from the local charset" +#~ msgstr "hercodeer dit attachment met de gebruikte karakterset" + +#~ msgid "Compose" +#~ msgstr "Bericht schrijven" + +#~ msgid "We can't currently handle utf-8 at this point." +#~ msgstr "UTF-8 opmaak wordt nog niet ondersteund." + +#~ msgid "UTF-8 encoding attachments has not yet been implemented." +#~ msgstr "UTF-8 codering voor bijlagen is nog niet geïplementeerd." + +#~ msgid "We currently can't encode to utf-8." +#~ msgstr "UTF-8 codering wordt nog niet ondersteund." + +#~ msgid "move to the last undelete message" +#~ msgstr "Spring naar het laaste ongewiste bericht" + +#~ msgid "return to the main-menu" +#~ msgstr "Ga terug naar het hoofdmenu" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "Leeg Kop-veld %s wordt genegeerd." + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_error(): Onbekend antwoord in %s:%s\n" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "" +#~ "Een onbekende PGP versie werd gedefinieerd tijdens het ondertekenen." + +#~ msgid "Message edited. Really send?" +#~ msgstr "Bericht veranderd. Werkelijk versturen?" + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "Onbekende PGP-Versie \"%s\"." + +#~ msgid "Display message using mailcap?" +#~ msgstr "Bericht weergeven volgens mailcap?" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "Kan geheime sleutelhanger niet openen!" + +#~ msgid "===== Attachments =====" +#~ msgstr "===== Bijlagen =====" + +#~ msgid "Please report this program error in the function mutt_mktime." +#~ msgstr "Meldt deze programmafout in de functie mutt_mktime." + +#~ msgid "%s is a boolean var!" +#~ msgstr "%s is een boolsche variable!" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "Uitvoer van child proces opgeslagen in %s.\n" + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- Fout: Dit bericht komt niet overeen met de PGP/MIME specificatie! " +#~ "--]\n" + +#~ msgid "This encoding is deprecated. Really use it?" +#~ msgstr "Deze codering zou u eigenlijk niet moeten gebruiken. Toch doen?" + +#~ msgid "Confused when attempting to delete attachment, h & m can't be NULL" +#~ msgstr "Interne fout." + +#~ msgid "Deleting non-multipart messages not yet supported" +#~ msgstr "Alleen delen van multipart berichten kunnen gewist worden." diff --git a/po/pl.gmo b/po/pl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9c568876813bab414d050ac8500e0eb7857ebe29 GIT binary patch literal 80705 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%0DB;Q>l=4z2<1ObMM+)n_C5Zxw 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 literal 0 HcmV?d00001 diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..2756e5d --- /dev/null +++ b/po/pl.po @@ -0,0 +1,4155 @@ +# Polish messages for Mutt 1.5.xi +# Polskie teksty dla Mutta 1.5.xi +# 1998-2003 Pawe³ Dziekoñski <dzieko@pwr.wroc.pl> +# 1998-2003 Sergiusz Paw³owicz <ser@hyperreal.art.pl> +# Pre-translation had been done using PePeSza v0.9 +# get your own copy of PePeSza from http://www.ids.pl/~pkollegu/pepesza.html +msgid "" +msgstr "" +"Project-Id-Version: mutt-1.5.5.1i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-12-10\n" +"Last-Translator: Pawe³ Dziekoñski <dzieko@pwr.wroc.pl>\n" +"Language-Team: POLISH <pl@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Nazwa konta na %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Has³o dla %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Wyj¶cie" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Usuñ" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Odtwórz" + +#: addrbook.c:36 +msgid "Select" +msgstr "Wybierz" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Pomoc" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Brak aliasów!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Aliasy" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Nazwa aliasu: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Istnieje ju¿ tak nazwany alias!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "Ostrze¿enie: alias o takiej nazwie mo¿e nie zadzia³aæ. Poprawiæ?" + +#: alias.c:279 +msgid "Address: " +msgstr "Adres: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "B³±d: '%s' to b³êdny IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nazwisko: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Potwierdzasz?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Zapisz do pliku: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Alias dodany." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Nie pasuj±cy szablon nazwy, kontynuowaæ?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Pole \"compose\" w pliku 'mailcap' wymaga %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "B³±d uruchomienia \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "B³±d otwarcia pliku podczas interpretacji nag³ówków." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "B³±d podczas próby otwarcia pliku w celu eliminacji nag³ówków." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Brak pola \"compose\" dla %s w pliku 'mailcap', utworzono pusty plik." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Pole \"Edit\" w pliku 'mailcap' wymaga %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Brak pola \"Edit\" dla %s w pliku 'mailcap'" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Brak odpowiedniego wpisu w 'mailcap'. Wy¶wietlony jako tekst." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Typ MIME nie zosta³ zdefiniowany. Nie mo¿na wy¶wietliæ za³±cznika." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Nie mo¿na utworzyæ filtru" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Nie mo¿na utworzyæ filtra" + +#: attach.c:824 +msgid "Write fault!" +msgstr "B³±d zapisu!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Nie wiem jak to wydrukowaæ!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Zmieñ katalog" + +#: browser.c:42 +msgid "Mask" +msgstr "Wzorzec" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s nie jest katalogiem." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Skrzynki [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Zapisane [%s], wzorzec nazw plików: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Katalog [%s], wzorzec nazw plików: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Za³±cznikiem nie mo¿e zostaæ katalog!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "¯aden plik nie pasuje do wzorca" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Tworzenie skrzynek jest obs³ugiwane tylko dla skrzynek IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Usuwanie skrzynek jest obs³ugiwane tylko dla skrzynek IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Naprawdê usun±æ skrzynkê \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Skrzynka zosta³a usuniêta." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Skrzynka nie zosta³a usuniêta." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Zmieñ katalog na: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "B³±d przegl±dania katalogu." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Wzorzec nazw plików: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sortowanie odwrotne wg (d)aty, (a)lfabetu, (w)ielko¶ci, ¿ad(n)e?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sortowanie wg (d)aty, (a)lfabetu, (w)ielko¶ci, ¿ad(n)e?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dawn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nazwa nowego pliku: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Nie mo¿na przegl±daæ tego katalogu" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "B³±d podczas próby przegl±dania pliku" + +#: buffy.c:442 +msgid "New mail in " +msgstr "Nowa poczta w " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: kolor nie jest obs³ugiwany przez Twój terminal" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: nie ma takiego koloru" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: nie ma takiego obiektu" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: polecenia mog± dotyczyæ tylko obiektów indeksu" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: za ma³o argumentów" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Brakuje argumentów." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: za ma³o argumentów" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: za ma³o argumentów" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: nie ma takiego atrybutu" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "za ma³o argumentów" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "za du¿o argumentów" + +#: color.c:721 +msgid "default colors not supported" +msgstr "domy¶lnie ustalone kolory nie s± obs³ugiwane" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Weryfikowaæ podpis PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Nie mo¿na utworzyæ pliku tymczasowego!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Nie mo¿na utworzyæ filtru wy¶wietlania" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Nie mo¿na skopiowaæ listu" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "Podpis S/MIME zosta³ pomy¶lnie zweryfikowany." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "W³a¶ciciel certyfikatu nie odpowiada nadawcy." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "Podpis S/MIME NIE mo¿e zostaæ zweryfikowany." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Podpis PGP zosta³ pomy¶lnie zweryfikowany." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "Podpis PGP NIE mo¿e zostaæ zweryfikowany." + +#: commands.c:223 +msgid "Command: " +msgstr "Wprowad¼ polecenie: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Wy¶lij kopiê listu do: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Wy¶lij kopie zaznaczonych listów do: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "B³±d interpretacji adresu!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "B³êdny IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Wy¶lij kopiê listu do %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Wy¶lij kopie listów do %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "Kopia nie zosta³a wys³ana." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "Kopie nie zosta³y wys³ane." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Kopia zosta³a wys³ana." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Kopie zosta³y wys³ane." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Nie mo¿na utworzyæ procesu filtru" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Wy¶lij przez potok do polecenia: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Polecenie drukowania nie zosta³o skonfigurowane." + +#: commands.c:483 +msgid "Print message?" +msgstr "Wydrukowaæ list?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Wydrukowaæ zaznaczone listy?" + +#: commands.c:492 +msgid "Message printed" +msgstr "List zosta³ wydrukowany" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Listy zosta³y wydrukowane" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "List nie zosta³ wydrukowany " + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Listy nie zosta³y wydrukowane" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Odwr-Sort (d)ata/(a)utor/o(t)rzym/t(e)mat/d(o)/(w)±tek/(b)ez/ro(z)miar/wa(g)" +"a?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sortuj (d)ata/(a)utor/o(t)rzym/t(e)mat/d(o)/(w)±tek/(b)ez/ro(z)miar/wa(g)a?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dateowbzg" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Polecenie pow³oki: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Dekoduj-zapisz%s do skrzynki" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Dekoduj-kopiuj%s do skrzynki" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Rozszyfruj-zapisz%s do skrzynki" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Rozszyfruj-kopiuj%s do skrzynki" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Zapisz%s do skrzynki" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopiuj%s do skrzynki" + +#: commands.c:706 +msgid " tagged" +msgstr " zaznaczone" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopiowanie do %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Przekonwertowaæ do %s przy wysy³aniu?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Typ \"Content-Type\" zmieniono na %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Zestaw znaków zosta³ zmieniony na %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "bez konwersji" + +#: commands.c:914 +msgid "converting" +msgstr "konwertowanie" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Brak za³±czników." + +#: compose.c:84 +msgid "Send" +msgstr "Wy¶lij" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Anuluj" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Do³±cz plik" + +#: compose.c:90 +msgid "Descrip" +msgstr "Opis" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Podpisz i zaszyfruj" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Zaszyfruj" + +#: compose.c:131 +msgid "Sign" +msgstr "Podpisz" + +#: compose.c:133 +msgid "Clear" +msgstr "Bez jakiegokolwiek szyfrowania" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " podpisz jako: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<domy¶lnie>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Zaszyfruj u¿ywaj±c: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP: (z)aszyfruj, podpi(s)z, podpisz j(a)ko, o(b)a, b(e)z PGP? " + +#: compose.c:166 +msgid "esabf" +msgstr "zsabe" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Podpisz jako: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME: (z)aszyfruj, (p)odpisz, (m)etoda, podp. (j)ako, (o)ba, (a)nuluj?" + +#: compose.c:228 +msgid "eswabf" +msgstr "zpmjoa" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, (a)nuluj? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345a" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ju¿ nie istnieje!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] zmieniony. Zaktualizowaæ kodowanie?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Za³±czniki" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "Ostrze¿enie: '%s' to b³êdny IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Nie mo¿esz usun±æ jedynego za³±cznika." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "B³êdny IDN w \"%s\": '%s'" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Do³±czanie wybranych listów..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Nie mo¿na do³±czyæ %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Otwórz skrzynkê w celu do³±czenia listu" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Brak listów w tej skrzynce." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Zaznacz listy do do³±czenia!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Nie mo¿na do³±czyæ!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Tylko tekstowe za³±czniki mo¿na przekodowaæ." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Bie¿±cy za³acznik nie zostanie przekonwertowany." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Bie¿±cy za³acznik zostanie przekonwertowany." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "B³êdne kodowanie." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Zapisaæ kopiê tego listu?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Zmieñ nazwê na: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Nie mo¿na ustaliæ stanu (stat) %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nowy plik: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Typ \"Content-Type\" musi byæ w postaci podstawowy/po¶ledni" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Nieznany typ \"Content-Type\" %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Nie mo¿na utworzyæ %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Mamy tu b³±d tworzenia za³±cznika" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Zachowaæ ten list do pó¼niejszej obróbki i ewentualnej wysy³ki?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Zapisz list do skrzynki" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Zapisywanie listu do %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "List zosta³ zapisany." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "Wybrano ju¿ S/MIME. Anulowaæ wybór S/MIME i kontynuowaæ? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "Wybrano ju¿ PGP. Anulowaæ wybór PGP i kontynuowaæ? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (bie¿±ca data i czas: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Wynik dzia³ania %s %s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Has³o(a) zosta³o(y) zapomniane." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Wprowad¼ has³o PGP:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Wprowad¼ has³o SMIME:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "Wstawiæ dane PGP w tre¶ci (inline) czy jako za³±cznik (MIME)?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Wywo³ywanie PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "Listy S/MIME bez wskazówek co do zawarto¶ci nie s± obs³ugiwane." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Próba skopiowania kluczy PGP...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Próba skopiowania kluczy S/MIME...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- B³±d: Niespójna struktura multipart/signed ! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- B³±d: Nieznany protokó³ multipart/signed %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Ostrze¿enie: nie mo¿na zweryfikowaæ podpisów %s/%s --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Poni¿sze dane s± podpisane --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Ostrze¿enie: Nie znaleziono ¿adnych podpisów. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Koniec podpisanych danych --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "tak" + +#: curs_lib.c:158 +msgid "no" +msgstr "nie" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Wyj¶æ z Mutta?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "nieznany b³±d" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Naci¶nij dowolny klawisz by kontynuowaæ..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " (przyci¶niêcie '?' wy¶wietla listê): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Nie otwarto ¿adnej skrzynki." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Brak listów." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Skrzynka jest tylko do odczytu." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Funkcja niedostêpna w trybie za³±czania" + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Brak widocznych listów." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Nie mo¿na zapisaæ do skrzynki oznaczonej jako 'tylko do odczytu'!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Zmiany zostan± naniesione niezw³ocznie po wyj¶ciu ze skrzynki." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Zmiany w skrzynce nie zostan± naniesione." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Wyjd¼" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Zapisz" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Wy¶lij" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Odpowiedz" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupie" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Skrzynka zosta³a zmodyfikowana z zewn±trz. Flagi mog± byæ nieaktualne." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Uwaga - w bie¿±cej skrzynce pojawi³a siê nowa poczta!" + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Skrzynka zosta³a zmodyfikowana z zewn±trz." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Brak zaznaczonych listów." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "Brak akcji do wykonania." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Skocz do listu: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Jako argument wymagany jest numer listu." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Ten list nie jest widoczny." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "B³êdny numer listu." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Usuñ listy pasuj±ce do wzorca: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Wzorzec ograniczaj±cy nie zosta³ okre¶lony." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Ograniczenie: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Ogranicz do pasuj±cych listów: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Wyj¶æ z Mutta?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Zaznacz pasuj±ce listy: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Odtwórz pasuj±ce listy: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Odznacz pasuj±ce listy: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Otwórz skrzynkê tylko do odczytu" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Otwórz skrzynkê" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s nie jest skrzynk±." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Wyj¶æ z Mutta bez zapisywania zmian?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "To jest ostatni list." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Brak odtworzonych listów." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "To jest pierwszy list." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Kontynuacja poszukiwania od pocz±tku." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Kontynuacja poszukiwania od koñca." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Brak nowych listów" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Przeczytano ju¿ wszystkie listy" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " w trybie ograniczonego przegl±dania" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Nie mo¿na zmieniæ flagi 'wa¿ne' na serwerze POP." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Nie ma wiêcej w±tków." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "To pierwszy w±tek." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "W±tkowanie nie zosta³o w³±czone." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "W±tek zawiera nieprzeczytane listy." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Nie mo¿na edytowaæ listów na serwerze POP." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\twstaw liniê zaczynaj±c± siê pojedyñczym ~\n" +"~b u¿ytkownicy\tdodaj u¿ytkowników do pola BCC:\n" +"~c u¿ytkownicy\tdodaj u¿ytkowników do pola Cc:\n" +"~f listy\tdo³±cz listy\n" +"~F listy\tto samo co ~f ale do³±cz te¿ nag³ówki\n" +"~h\t\tedytuj nag³ówki\n" +"~m listy\tdodaj i komentuj listy\n" +"~M listy\tto samo co ~m ale do³±cz te¿ nag³ówki\n" +"~p\t\tdrukuj list\n" +"~q\t\tzapisz plik i wyjd¼ z edytora\n" +"~r plik\t\twczytaj plik do edytora\n" +"~t u¿ytkownicy\tdodaj u¿ytkowników do pola To:\n" +"~u\t\todtwórz poprzedni± liniê\n" +"~v\t\tedytuj list edytorem $visual\n" +"~w plik\t\tzapisz list do pliku\n" +"~x\t\tporzuæ zmiany i wyjd¼ z edytora\n" +"~?\t\tten list\n" +".\t\tstoj±c sama w linii koñczy wpisywanie\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: b³êdny numer listu.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Zakoñcz list . (kropk±) w osobnej linii)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Brak skrzynki.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "List zawiera:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(kontynuuj)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "brak nazwy pliku.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Pusty list.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "B³êdny IDN w %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: nieznane polecenie edytora (~? wy¶wietla pomoc)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "nie mo¿na utworzyæ tymczasowej skrzynki: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "nie mo¿na zapisaæ tymczasowej skrzynki: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "nie mo¿na zmniejszyæ tymczasowej skrzynki: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Plik listu jest pusty!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "List nie zosta³ zmieniony!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Nie mo¿na otworzyæ pliku listu: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Nie mo¿na dopisaæ do skrzynki: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "B³±d. Zachowano plik tymczasowy: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Ustaw flagê" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Wyczy¶æ flagê" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[--B³±d: Nie mo¿na wy¶wietliæ ¿adnego z fragmentów Multipart/Alternative! " +"--]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Za³±cznik #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Typ: %s/%s, Kodowanie: %s, Wielko¶æ: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Podgl±d za pomoc± %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Wywo³ywanie polecenia podgl±du: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Nie mo¿na uruchomiæ %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Komunikaty b³êdów %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- B³±d: message/external-body nie ma ustawionego rodzaju dostêpu --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Ten za³±cznik typu %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(o wielko¶ci %s bajtów) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "zosta³ usuniêty --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- na %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- nazwa: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Ten za³±cznik typu %s/%s nie jest zawarty, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- a podane ¼ród³o zewnêtrzne jest --]\n" +"[-- nieaktualne. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- a podany typ dostêpu %s nie jest obs³ugiwany --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "B³±d: multipart/signed nie ma protoko³u." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "B³±d: multipart/encrypted nie ma parametru protoko³u!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Nie mo¿na otworzyæ pliku tymczasowego!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- typ %s/%s nie jest obs³ugiwany " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(u¿yj '%s' do ogl±dania tego fragmentu)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(przypisz 'view-attachments' do klawisza!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: nie mo¿na do³±czyæ pliku" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "B£¡D: zg³o¶, proszê, ten b³±d" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<NIEZNANY>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Standardowe przypisania klawiszy:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Nie przypisane klawiszom funkcje:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Pomoc dla menu %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: Nie mo¿na wykonaæ \"unhook *\" wewn±trz innego polecenia hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: nieznany typ polecenia hook: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: Nie mo¿na skasowaæ %s z wewn±trz %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "¯adna z metod uwierzytelniania nie jest dostêpna" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Uwierzytelnianie (anonymous)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Uwierzytelnianie anonymous nie powiod³o siê." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Uwierzytelnianie (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Uwierzytelnianie CRAM-MD5 nie powiod³o siê." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Uwierzytelnianie (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Uwierzytelnianie GSSAPI nie powiod³o siê." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN zosta³ wy³±czony na tym serwerze." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Logowanie..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Zalogowanie nie powiod³o siê." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "Uwierzytelnianie (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Uwierzytelnianie SASL nie powiod³o siê." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s jest b³êdn± ¶cie¿k± IMAP" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "" + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Pobieranie listy skrzynek..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Brak skrzynki" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Nazwa skrzynki: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Skrzynka musi zostaæ nazwana." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Skrzynka zosta³a utworzona." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Skrzynka zosta³a zamkniêta" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "B³±d krytyczny. Niezidentyfikowana ilo¶æ listów!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Zamykanie po³±czenia do %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Zbyt stara wersja serwera IMAP. Praca z tym serwerem nie jest mo¿liwa." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "Otrzymano nieoczekiwan± odpowied¼ od serwera: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Po³±czyæ u¿ywaj±c TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Po³±czenie TSL nie zosta³o wynegocjowane" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Wybieranie %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "B³±d otwarcia skrzynki" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Nie mo¿na dopisaæ do skrzynek IMAP na tym serwerze" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Utworzyæ %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Zamykanie po³±czenia z serwerem IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Zaznaczanie %d listów jako skasowanych..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Skasowanie nie powiod³o siê" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Zapisywanie stanu flag listów... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Kasowanie listów na serwerze... " + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: skasowanie nie powiod³o siê" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "Polecenie CLOSE nie powiod³o siê" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "B³êdna nazwa skrzynki" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Subskrybowanie %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Odsubskrybowanie %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Nie mo¿na pobraæ nag³ówków z serwera IMAP w tej wersji." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Nie mo¿na utworzyæ pliku tymczasowego %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Pobieranie nag³ówków listów... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Pobieranie listu..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "B³êdny indeks listów. Spróbuj ponownie otworzyæ skrzynkê." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "£adowanie listu ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopiowanie %d listów do %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopiowanie listu %d do %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Kontynuowaæ?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: brak adresu" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "Ostrze¿enie: b³êdny IDN '%s' w aliasie '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "nieprawid³owy nag³ówek" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: nieznana metoda sortowania" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): b³±d w wyra¿eniu regularnym: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: nieznana zmienna" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "reset: nieprawid³owy prefiks" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "reset: nieprawid³owa warto¶æ" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s ustawiony" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s nie jest ustawiony" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: nieprawid³owy typ skrzynki" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: nieprawid³owa warto¶æ" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: nieznany typ" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: nieprawid³owy typ" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Nie mo¿na ustaliæ stanu (stat) %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s nie jest zwyk³ym plikiem." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "B³±d w %s, linia %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: b³êdy w %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: wczytywanie zaniechane z powodu zbyt wielu b³êdów w %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: b³êdy w %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: zbyt wiele argumentów" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: nieznane polecenie" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "B³±d w poleceniu: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "nie mo¿na ustaliæ po³o¿enia katalogu domowego" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "nie mo¿na ustaliæ nazwy u¿ytkownika" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Wykryto pêtlê w makrze." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Klawisz nie zosta³ przypisany." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Klawisz nie zosta³ przypisany. Aby uzyskaæ pomoc przyci¶nij '%s'." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: zbyt wiele argumentów" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: nie ma takiego menu" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "pusta sekwencja klawiszy" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: zbyt wiele argumentów" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: nie ma takiej funkcji" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: pusta sekwencja klawiszy" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: zbyt wiele argumentów" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: brak argumentów" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: brak takiej funkcji" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "Wprowad¼ klucze (^G aby przerwaæ): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "Znak = %s, ósemkowo = %o, dziesiêtnie = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "pusta operacja" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "koniec wykonywania warunkowego (noop)" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "wymusza obejrzenie za³±czników poprzez plik 'mailcap'" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "obejrzyj za³±cznik jako tekst" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "prze³±cza podgl±d pod-listów listów z³o¿onych" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "przejd¼ na koniec strony" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "wy¶lij ponownie do innego u¿ytkownika" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "wybierz nowy plik w tym katalogu" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ogl±daj plik" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "wy¶wietl nazwy aktualnie wybranych plików" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "zasubskrybuj bie¿±c± skrzynkê (tylko IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "odsubskrybuj bie¿±c± skrzynkê (tylko IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "" +"zmieñ tryb przegl±dania skrzynek: wszystkie/zasubskrybowane (tylko IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "poka¿ skrzynki z now± poczt±" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "zmieñ katalog" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "szukaj nowych listów w skrzynkach" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "do³±cz plik(i) do tego listu" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "do³±cz list(y) do tego listu" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "podaj tre¶æ pola BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "podaj tre¶æ pola CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "edytuj opis za³±cznika" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "podaj sposób zakodowania za³±cznika" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "podaj nazwê pliku, do którego ma byæ skopiowany list" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "podaj nazwê pliku za³±cznika" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "podaj tre¶æ pola From:" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "edytuj tre¶æ listu i nag³ówków" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "edytuj tre¶æ listu" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "edytuj za³±cznik u¿ywaj±c pliku 'mailcap'" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "podaj tre¶æ pola Reply-To:" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "podaj tytu³ listu" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "podaj tre¶æ listy TO" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "utwórz now± skrzynkê (tylko IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "podaj rodzaj typu \"Content-Type\" za³±cznika" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "we¼ tymczasow± kopiê za³±cznika" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "sprawd¼ poprawno¶æ pisowni listu" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "utwórz nowy za³±cznik u¿ywaj±c pliku 'mailcap'" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "zdecyduj czy za³±cznik ma byæ przekodowywany" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "zapisz list aby wys³aæ go pó¼niej" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "zmieñ nazwê lub przenie¶ do³±czony plik" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "wy¶lij list" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "ustala czy wstawiaæ w tre¶ci czy jako za³±cznik" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "ustala czy usun±æ plik po wys³aniu" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "zaktualizuj informacjê o kodowaniu za³±cznika" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "zapisz list do skrzynki" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "kopiuj list do pliku/skrzynki" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "utwórz alias dla nadawcy" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "przesuñ pozycjê kursora na dó³ ekranu" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "przesuñ pozycjê kursora na ¶rodek ekranu" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "przesuñ pozycjê kursora na górê ekranu" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "utwórz rozkodowan± (text/plain) kopiê" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "utwórz rozkodowan± kopiê (text/plain) i usuñ" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "usuñ bie¿±cy list" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "usuñ bie¿±c± skrzynkê (tylko IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "usuñ wszystkie listy w podw±tku" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "usuñ wszystkie listy w w±tku" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "wy¶wietl pe³ny adres nadawcy" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "wy¶wielt list ze wszystkimi nag³ówkami" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "wy¶wietl list" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "edytuj list z nag³owkami" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "usuñ znak przed kursorem" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "przesuñ kursor jeden znak w lewo" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "przesuñ kursor do pocz±tku s³owa" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "przeskocz do pocz±tku linii" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "kr±¿ pomiêdzy skrzynkami pocztowymi" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "uzupe³nij nazwê pliku lub alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "uzupe³nij adres poprzez zapytanie" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "usuñ znak pod kursorem" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "przeskocz do koñca linii" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "przesuñ kursor o znak w prawo" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "przesuñ kursor do koñca s³owa" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "przewijaj w dó³ listê wydanych poleceñ" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "przewijaj do góry listê wydanych poleceñ" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "usuñ znaki pocz±wszy od kursora a¿ do koñca linii" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "usuñ znaki pocz±wszy od kursora a¿ do koñca s³owa" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "usuñ wszystkie znaki w linii" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "usuñ s³owo z przodu kursora" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "zacytuj nastêpny wpisany znak" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "zamieñ znak pod kursorem ze znakiem poprzednim" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "zamieñ piewsz± literê s³owa na wielk±" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "zamieñ litery s³owa na ma³e" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "zamieñ litery s³owa na wielkie" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "wprowad¼ polecenie pliku startowego (muttrc)" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "wprowad¼ wzorzec nazwy pliku" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "opu¶æ niniejsze menu" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "przefiltruj za³±cznik przez polecenie pow³oki" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "przesuñ siê do pierwszej pozycji" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "w³±cz dla listu flagê 'wa¿ne!'" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "prze¶lij dalej list opatruj±c go uwagami" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "wska¿ obecn± pozycjê" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "odpowiedz wszystkim adresatom" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "przewiñ w dó³ o pó³ strony" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "przewiñ w górê o pó³ strony" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "niniejszy ekran" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "przeskocz do konkretnej pozycji w indeksie" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "przejd¼ do ostatniej pozycji" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "opowiedz na wskazan± listê pocztow±" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "wykonaj makropolecenie" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "zredaguj nowy list" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "otwórz inn± skrzynkê" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "otwórz inn± skrzynkê w trybie tylko do odczytu" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "usuñ flagê ze statusem wiadomo¶ci" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "usuñ listy pasuj±ce do wzorca" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "wymusz± pobranie poczty z serwera IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "pobierz pocztê z serwera POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "przejd¼ do pierwszego listu" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "przejd¼ do ostatniego listu" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "poka¿ tylko listy pasuj±ce do wzorca" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "przejd¼ do nastêpnego nowego listu" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "przejd¼ do nastêpnego nowego lub nie przeczytanego listu" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "przejd¼ do nastêpnego podw±tku" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "przejd¼ do nastêpnego w±tku" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "przejd¼ do nastêpnego nieusuniêtego listu" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "przejd¼ do nastêpnego nieprzeczytanego listu" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "przejd¼ na pocz±tek w±tku" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "przejd¼ do poprzedniego w±tku" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "przejd¼ do poprzedniego podw±tku" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "przejd¼ do poprzedniego nieusuniêtego listu" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "przejd¼ do poprzedniego nowego listu" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "przejd¼ do poprzedniego nowego lub nie przeczytanego listu" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "przejd¼ do poprzedniego nieprzeczytanego listu" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "zaznacz obecny w±tek jako przeczytany" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "zaznacz obecny podw±tek jako przeczytany" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "ustaw flagê statusu listu" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "zapisz zmiany do skrzynki" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "zaznacz listy pasuj±ce do wzorca" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "odtwórz listy pasuj±ce do wzorca" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "odznacz listy pasuj±ce do wzorca" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "przejd¼ do po³owy strony" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "przejd¼ do nastêpnej pozycji" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "przewiñ w dó³ o liniê" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "przejd¼ do nastêpnej strony" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "przejd¼ na koniec listu" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "ustala sposób pokazywania zaznaczonego tekstu" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "przeskocz poza zaznaczony fragment tekstu" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "przejd¼ na pocz±tek listu" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "przekieruj list/za³±cznik do polecenia pow³oki" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "przejd¼ do poprzedniej pozycji" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "przewiñ w górê o liniê" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "przejd¼ do poprzedniej strony" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "wydrukuj obecn± pozycjê" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "zapytaj zewnêtrzny program o adres" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "dodaj rezultaty nowych poszukiwañ do obecnych" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "zapisz zmiany do skrzynki i opu¶æ program pocztowy" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "wywo³aj od³o¿ony list" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "wyczy¶æ i od¶wie¿ ekran" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{wewnêtrzne}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "odpowiedz na list" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "u¿yj bie¿±cego listu jako wzorca dla nowych wiadomo¶ci" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "zapisz list/za³±cznik do pliku" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "szukaj wyra¿enia regularnego" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "szukaj wstecz wyra¿enia regularnego" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "szukaj nastêpnego pozytywnego rezultatu" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "szukaj wstecz nastêpnego pozytywnego rezultatu" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "ustala czy szukana fraza ma byæ zaznaczona kolorem" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "wywo³aj polecenie w podpow³oce" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "uszereguj listy" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "uszereguj listy w odwrotnej kolejno¶ci" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "zaznacz bie¿±c± pozycjê" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "wykonaj nastêpne polecenie na zaznaczonych listach" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "wykonaj nastêpne polecenie TYLKO na zaznaczonych listach" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "zaznacz bie¿±cy podw±tek" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "zaznacz bie¿±cy w±tek" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "ustaw flagê listu na 'nowy'" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "ustala czy skrzynka bêdzie ponownie zapisana" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "ustala czy przegl±daæ skrzynki czy wszystkie pliki" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "przejd¼ na pocz±tek strony" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "odtwórz bie¿±c± pozycjê listy" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "odtwórz wszystkie listy z tego w±tku" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "odtwórz wszystkie listy z tego podw±tku" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "poka¿ wersjê i datê programu pocztowego Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "poka¿ za³±cznik u¿ywaj±c, je¶li to niezbêdne, pliku 'mailcap'" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "poka¿ za³±czniki MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "wy¶wietl kod wprowadzonego znaku" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "poka¿ bie¿±cy wzorzec ograniczaj±cy" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "zwiñ/rozwiñ bie¿±cy w±tek" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "zwiñ/rozwiñ wszystkie w±tki" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "do³±cz w³asny klucz publiczny PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "poka¿ opcje PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "wy¶lij w³asny klucz publiczny PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "zweryfikuj klucz publiczny PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "obejrzyj identyfikator u¿ytkownika klucza" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "u¿yj starej wersji pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Potwierd¼ skonstruowany ³añcuch" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Dodaj remailera do ³añcucha" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Wprowadz remailera do ³añcucha" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Usuñ remailera z ³añcucha" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Wybierz poprzedni element ³añcucha" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Wybierz nastepny element ³añcucha" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "przeslij list przez ³añcuch anonimowych remailerów typu mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "utwórz rozszyfrowana± kopiê i usuñ orygina³" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "utwórz rozszyfrowan± kopiê" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "wyma¿ has³o z pamiêci operacyjnej" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "kopiuj klucze publiczne" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "poka¿ opcje S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Brak pamiêci!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Aby powiadomiæ autorów, proszê pisaæ na <mutt-dev@mutt.org>.\n" +"Aby zg³osiæ b³±d u¿yj programu flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins i inni.\n" +"Program nie jest objêty ¯ADN¡ gwarancj±; szczegó³y poznasz pisz±c 'mutt -" +"vv'.\n" +"Mutt jest darmowym oprogramowaniem, jeste¶ jak najbardziej uprawniony do\n" +"jego redystrybucji pod pewnymi warunkami, szczegó³y poznasz pisz±c 'mutt -" +"vv'.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Wielu innych twórców, nie wspomnianych tutaj,\n" +"wnios³o wiele nowego kodu, poprawek i sugestii.\n" +"\n" +" Ten program jest darmowy; mo¿esz rozprowadzaæ go i/lub modyfikowaæ\n" +" zachowuj±c warunki Powszechnej Licencji Publicznej GNU (General Public\n" +" Licence), opublikowanej przez Free Software Foundation, w wersji 2\n" +" lub wy¿szej.\n" +"\n" +" Program ten jest rozprowadzany w nadziei, ¿e bêdzie przydatny,\n" +" ale BEZ ¯ADNYCH GWARANCJI, wyra¿onych wprost lub domy¶lnie nawet,\n" +" w tym gwarancji mo¿liwo¶ci SPRZEDA¯Y i PRZYDATNO¦CI DO KONKRETNYCH " +"CELÓW.\n" +" Szczegó³y znajdziesz w Powszechnej Licencji Publicznej GNU.\n" +"\n" +" W dokumentacji tego programu powinna znajdowaæ siê kopia Powszechnej\n" +" Licencji Publicznej GNU. Je¶li tak nie jest, napisz do Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"u¿ycie: mutt [ -nRyzZ ] [ -e <polec> ] [ -F <plik> ] [ -m <typ> ] [ -f " +"<plik> ]\n" +" mutt [ -nR ] [ -e <polec> ] [ -F <plik> ] -Q <pytanie> [ -Q " +"<pytanie> ] [...]\n" +" mutt [ -nR ] [ -e <polec> ] [ -F <plik> ] -A <alias> [ -A <alias> ] " +"[...]\n" +" mutt [ -nx ] [ -e <polec> ] [ -F <plik> ] [ -a <plik> ] [ -H " +"<plik> ] [ -i <plik> ] [ -s <tytu³> ] [ -b <adres> ] [ -c <adres> ] <adres> " +"[ ... ]\n" +" mutt [ -n ] [ -e <polec> ] [ -F <plik> ] -p\n" +" mutt -v[v]\n" +"\n" +"opcje:\n" +" -A <alias>\tu¿yj aliasu\n" +" -a <plik>\tdo³±cz plik do listu\n" +" -b <adres>\tpodaj adres blind carbon-copy (BCC)\n" +" -c <adres>\tpodaj adres carbon-copy (CC)\n" +" -e <polec>\tpodaj polecenie do wykonania po inicjalizacji\n" +" -f <plik>\totwórz najpierw t± skrzynkê\n" +" -F <plik>\tu¿yj alternatywnego pliku muttrc\n" +" -H <plik>\tczytaj nag³ówki z pliku\n" +" -i <plik>\twstaw ten plik w odpowiedzi\n" +" -m <typ>\tpodaj typ skrzynki\n" +" -n\t\tnie czytaj systemowego Muttrc\n" +" -p\t\tponownie edytuj zarzucony list\n" +" -Q <zmienna>\tpodaj warto¶æ zmiennej konfiguracyjnej\n" +" -R\t\totwórz skrzynkê w trybie tylko do odczytu\n" +" -s <tytu³>\tpodaj tytu³ (musi byæ w apostrofach, je¶li zawiera spacje)\n" +" -v\t\tpoka¿ wersjê i wkompilowane parametry\n" +" -x\t\tsymuluj zachowanie mailx\n" +" -y\t\twybierz skrzynkê podan± w twojej li¶cie `mailboxes'\n" +" -z\t\twyjd¼ natychmiast je¶li brak nowych listów w skrzynce\n" +" -Z\t\totwórz pierwsz± skrzynkê z nowym listem i wyjd¼ je¶li brak nowych\n" +" -h\t\tten tekst" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Parametry kompilacji:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "B³±d inicjalizacji terminala." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Diagnostyka b³êdów na poziomie %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "Diagnostyka b³êdów nie zosta³a wkompilowane. Zignorowano.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s nie istnieje. Utworzyæ?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Nie mo¿na utworzyæ %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nie wskazano adresatów listu.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: nie mo¿na do³±czyæ pliku.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Brak skrzynki z now± poczt±." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Nie zdefiniowano po³o¿enia skrzynek z now± poczt±." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Skrzynka pocztowa jest pusta." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Czytanie %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Skrzynka jest uszkodzona!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Skrzynka pocztowa zosta³a uszkodzona!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "B³±d! Nie mo¿na ponownie otworzyæ skrzynki!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Nie mo¿na zablokowaæ skrzynki pocztowej!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: skrzynka zmodyfikowana, ale ¿aden z listów nie zosta³ zmieniony! " +"(zg³o¶ ten b³±d)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Zapisywanie listów... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Wprowadzanie zmian..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Zapis niemo¿liwy! Zapisano czê¶æ skrzynki do %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Nie mo¿na ponownie otworzyæ skrzynki pocztowej!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Ponowne otwieranie skrzynki..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Przeskocz do: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Niew³a¶ciwy numer indeksu." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Brak pozycji." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Nie mo¿na ni¿ej przewin±æ." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Nie mo¿na wy¿ej przewin±æ." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "To jest ostatnia strona." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "To jest pierwsza strona." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Pokazana jest pierwsza pozycja." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Pokazana jest ostatnia pozycja." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "To jest ostatnia pozycja." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "To jest pierwsza pozycja." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Szukaj frazy: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Szukaj frazy w przeciwnym kierunku: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Nie ustalono wzorca poszukiwañ." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Nic nie znaleziono." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Brak zaznaczonych pozycji listy." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Poszukiwanie nie jest mo¿liwe w tym menu." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Przeskakiwanie nie jest mo¿liwe w oknach dialogowych." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Zaznaczanie nie jest obs³ugiwane." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Czytanie %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): nie mo¿na nadaæ plikowi daty" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Ten plik jest katalogim, zapisaæ w nim? [(t)ak, (n)ie, (w)szystkie]" + +#: muttlib.c:835 +msgid "yna" +msgstr "tnw" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Ten plik jest katalogim, zapisaæ w nim?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Plik w katalogu: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Plik istnieje: (n)adpisaæ, (d)o³±czyæ czy (a)nulowaæ?" + +#: muttlib.c:869 +msgid "oac" +msgstr "nda" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Nie mo¿na zapisaæ listu w skrzynce POP." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s nie jest skrzynk±!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Dopisaæ listy do %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Po³±czenie z %s zosta³o zakoñczone" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "Protokó³ SSL nie jest dostêpny." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Polecenie 'preconnect' nie powiod³o siê." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "B³±d komunikacji z %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "B³êdny IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Wyszukiwanie %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Host \"%s\" nie zosta³ znaleziony" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "£±czenie z %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Po³±czenie z %s (%s) nie zosta³o ustanowione." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Zgromadzenie odpowiedniej ilo¶ci entropii nie powiod³o siê" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Wype³nianie zbiornika entropii: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "Prawa dostêpu do %s mog± powodowaæ problemy z bezpieczeñstwem!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "Protokó³ SSL nie mo¿e zostaæ u¿yty ze wzglêdu na brak entropii" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "B³±d wej¶cia/wyj¶cia" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "nieznany b³±d protoko³u" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL nie powiod³o siê: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Nie mo¿na pobraæ certyfikatu z docelowego hosta" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Po³±czenie SSL przy u¿yciu %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Nieznany" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[niemo¿liwe do wyznaczenia]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[b³êdna data]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Certyfikat serwera nie uzyska³ jeszcze wa¿no¶ci" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Certyfikat serwera utraci³ wa¿no¶æ" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Ten certyfikat nale¿y do:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Ten certyfikat zosta³ wydany przez:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Ten certyfikat jest wa¿ny" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " od %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " do %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Odcisk: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "sprawdzanie certyfikatu SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(o)drzuæ, zaakceptuj (r)az, (a)kceptuj zawsze" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "ora" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(o)drzuæ, zaakceptuj (r)az" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "or" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Wyj¶cie " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Ostrze¿enie: Nie mo¿na zapisaæ certyfikatu" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certyfikat zosta³ zapisany" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Licznik blokad przekroczony, usun±æ blokadê %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Nie mo¿na za³o¿yæ blokady na %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Czas oczekiwania na blokadê typu 'fcntl' zosta³ przekroczony!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Oczekiwanie na blokadê typu 'fcntl'... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Czas oczekiwania na blokadê typu 'flock' zosta³ przekroczony!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Oczekiwanie na blokadê typu 'flock'... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Nie mo¿na zablokowaæ %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Czytanie %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Zapisywanie %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Synchronizacja skrzynki %s nie powod³a siê!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Przenie¶æ przeczytane listy do %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Usun±æ NIEODWO£ALNIE %d zaznaczony list?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Usun±æ NIEODWO£ALNIE %d zaznaczone listy?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Przenoszenie przeczytanych listów do %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Skrzynka pozosta³a niezmieniona." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d zapisano, %d przeniesiono, %d usuniêto." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d zapisano, %d usuniêto." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Naci¶nij '%s' aby zezwoliæ na zapisanie" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "U¿yj 'toggle-write' by ponownie w³±czyæ zapisanie!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Skrzynka jest oznaczona jako niezapisywalna. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Zmiany w skrzynce naniesiono." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Nie mo¿na zapisaæ listu" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Nie ma takiego polecenia w tym menu." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PoprzStr" + +#: pager.c:1447 +msgid "NextPg" +msgstr "NastStr" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Zobacz za³." + +#: pager.c:1454 +msgid "Next" +msgstr "Nastêpny" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Pokazany jest koniec listu." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Pokazany jest pocz±tek listu." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Szukaj w przeciwnym kierunku: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Szukaj: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Pomoc jest w³a¶nie wy¶wietlana." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Nie ma wiêcej cytowanego tekstu." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Brak tekstu za cytowanym fragmentem." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "wieloczê¶ciowy list nie posiada wpisu ograniczaj±cego!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "B³±d w wyra¿eniu: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Niew³a¶ciwy dzieñ miesi±ca: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Niew³a¶ciwy miesi±c: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "B³êdna data wzglêdna: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "b³±d w wyra¿eniu" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "b³±d we wzorcu: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: b³êdne polecenie" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: nie obs³ugiwane w tym trybie" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "brakuj±cy parametr" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "niesparowane nawiasy: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "pusty wzorzec" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "b³±d: nieznany op %d (zg³o¶ ten b³±d)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Kompilacja wzorca poszukiwañ..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Wykonywanie polecenia na pasuj±cych do wzorca listach..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "¯aden z listów nie spe³nia kryteriów." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Poszukiwanie dotar³o do koñca bez znalezienia frazy" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Poszukiwanie dotar³o do pocz±tku bez znalezienia frazy" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Przeszukiwanie przerwano." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Has³o PGP zosta³o zapomniane." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- B³±d: nie mo¿na utworzyæ podprocesu PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Koniec komunikatów PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- POCZ¡TEK LISTU PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- POCZ¡TEK KLUCZA PUBLICZNEGO PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- POCZ¡TEK LISTU PODPISANEGO PGP --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- KONIEC LISTU PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- KONIEC PUBLICZNEGO KLUCZA PGP --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- KONIEC LISTU PODPISANEGO PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- B³±d: nie mo¿na odnale¼æ pocz±tku listu PGP! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "B³±d wewnêtrzny. Zg³o¶ go pod adres <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- B³±d: nie mo¿na utworzyæ podprocesu PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- B³±d: uszkodzony list PGP/MIME! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- B³±d: nie mo¿na utworzyæ pliku tymczasowego! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Nastêpuj±ce dane s± zaszyfrowane PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Koniec danych zaszyfrowanych PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Nie mo¿na otworzyæ podprocesu PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "U¿yæ klucza numer \"%s\" dla %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Wprowad¼ numer klucza dla %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Nie mo¿na wywo³aæ PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Sprowadzam klucz PGP..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Wszystkie pasuj±ce klucze wygas³y, zosta³y wy³±czone lub wyprowadzone." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Wybór " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Sprawd¼ klucz " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Klucze PGP dla <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Klucze PGP dla \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Nie mo¿na otworzyæ /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Nie mo¿na utworzyæ pliku tymczasowego" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Identyfikator klucza: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Nie mo¿na u¿yæ tego klucza: wygas³, zosta³ wy³±czony lub wyprowadzony." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "Identyfikator wygas³, zosta³ wy³±czony lub wyprowadzony." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "Poziom wa¿no¶ci tego identyfikatora nie zosta³ okre¶lony." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "Nieprawid³owy identyfikator." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "Ten identyfikator jest tylko czê¶ciowo wa¿ny." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Czy naprawdê chcesz u¿yæ tego klucza?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Podaj identyfikator klucza: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Wywo³ywanie pgp..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Klucz PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Wyszukiwanie odpowiednich kluczy dla \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Polecenie TOP nie jest obs³ugiwane przez serwer." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Nie mo¿na zapisaæ nag³ówka do pliku tymczasowego!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Polecenie UIDL nie jest obs³ugiwane przez serwer." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s jest b³êdn± ¶cie¿k± POP" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Pobieranie spisu listów..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Nie mo¿na zapisaæ listu do pliku tymczasowego!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Poszukiwanie nowej poczty..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Serwer POP nie zosta³ wskazany." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Brak nowej poczty w skrzynce POP." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Usun±æ listy z serwera?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Czytanie nowych listów (%d bajtów)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "B³±d podczas zapisywania skrzynki!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [przeczytano %d spo¶ród %d listów]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Serwer zamkn±³ po³±czenie!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Uwierzytelnianie (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Uwierzytelnianie (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Uwierzytelnianie APOP nie powiod³o siê." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Polecenie USER nie jest obs³ugiwane przez serwer." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Nie mo¿na zostawiæ listów na serwerze." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "B³±d ³±czenia z serwerem: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Zamykanie po³±czenia z serwerem POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Sprawdzanie indeksów listów..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Po³±czenie z serwerem POP zosta³o zerwane. Po³±czyæ ponownie?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Od³o¿one listy" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Brak od³o¿onych listów." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Nieprawid³owy nag³ówek PGP" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Nieprawid³owy nag³ówek S/MIME" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "Odszyfrowanie nie powiod³o siê." + +#: query.c:46 +msgid "New Query" +msgstr "Nowe pytanie" + +#: query.c:47 +msgid "Make Alias" +msgstr "Utwórz alias" + +#: query.c:48 +msgid "Search" +msgstr "Szukaj" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Oczekiwanie na odpowied¼..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Pytanie nie zosta³o okre¶lone." + +#: query.c:286 +msgid "Query" +msgstr "Pytanie" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Pytanie:" + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Pytanie '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Potok" + +#: recvattach.c:53 +msgid "Print" +msgstr "Drukuj" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Zapisywanie..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Za³±cznik zosta³ zapisany." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "UWAGA! Nadpisujesz plik %s, kontynuowaæ?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Za³±cznik przefiltrowany." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Przefiltruj przez: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Wy¶lij przez potok do: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Nie wiem jak wydrukowaæ %s za³±czników!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Wydrukowaæ zaznaczony(e) za³±cznik(i)?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Wydrukowaæ za³±cznik?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Nie mo¿na odszyfrowaæ zaszyfrowanego listu!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Za³±czniki" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Brak pod-listów!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Nie mo¿na skasowaæ za³±cznika na serwerze POP." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Usuwanie za³±czników z zaszyfrowanych listów jest niemo¿liwe." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Mo¿liwe jest jedynie usuwanie za³±czników multipart." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Mo¿esz wysy³aæ kopie tylko listów zgodnych z RFC 822." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "B³±d wysy³ania kopii!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "B³±d wysy³ania kopii!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Nie mo¿na otworzyæ pliku tymczasowego %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Przes³aæ dalej jako za³±czniki?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Nie mo¿na zdekodowaæ zaznaczonych za³. Przes³aæ pozosta³e dalej (MIME)?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Przes³aæ dalej w trybie MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Nie mo¿na utworzyæ %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Nie mo¿na znale¼æ ¿adnego z zaznaczonych listów." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Nie znaleziono list pocztowych!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Nie mo¿na zdekodowaæ wszystkich wybranych za³. Za³±czyæ (MIME) pozosta³e?" + +#: remailer.c:480 +msgid "Append" +msgstr "Dodaj" + +#: remailer.c:481 +msgid "Insert" +msgstr "Wprowad¼" + +#: remailer.c:482 +msgid "Delete" +msgstr "Usuñ" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Nie mo¿na pobraæ type2.list mixmastera!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Wybierz ³añcuch remailera." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "B³±d: nie mo¿na u¿yæ %s jako finalnego remailera ³añcucha." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "£añcuchy mixmasterów mog± mieæ maks. %d elementów." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "£añcuch remailera jest pusty." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Ju¿ zdefiniowano pierwszy element ³añcucha." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Ju¿ zdefiniowano ostatni element ³añcucha." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster nie akceptuje nag³ówków Cc i Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Ustaw poprawn± warto¶æ hostname je¶li chcesz u¿ywaæ mixmastera!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "B³±d podczas wysy³ania listu, proces potomny zwróci³ %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "B³±d podczas wysy³ania listu." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "B³êdnie sformatowane pole dla typu %s w \"%s\" linii %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Brak ¶cie¿ki do pliku specjalnego 'mailcap'" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "brak wpisu w 'mailcap' dla typu %s" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: za ma³o argumentów" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: zbyt wiele argumentów" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Brak tematu, zaniechaæ wys³ania?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Brak tematu, zaniechano wys³ania listy." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Odpowiedzieæ %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Follow-up do %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "¯aden z zaznaczonych listów nie jest widoczny!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Zacytowaæ oryginalny list w odpowiedzi?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Wczytywanie cytowanego listu..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Nie mo¿na do³±czyæ wszystkich wskazanych listów!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Przes³aæ dalej jako za³±cznik?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Przygotowywanie listu do przes³ania dalej..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Wywo³aæ od³o¿ony list?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "Edytowaæ przesy³any list?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "List nie zosta³ zmieniony. Zaniechaæ wys³ania?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "List nie zosta³ zmieniony. Zaniechano wys³ania." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "List nie zosta³ wys³any." + +#: send.c:1430 +msgid "Message postponed." +msgstr "List od³o¿ono." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Nie wskazano adresatów!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Nie wskazano adresatów!" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Brak tematu, zaniechaæ wys³ania?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Brak tematu." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Wysy³anie listu..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Wys³anie listu nie powiod³o siê." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Poczta zosta³a wys³ana." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Wysy³anie w tle." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Brak parametru granicznego! (zg³o¶ ten b³±d)" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ju¿ nie istnieje!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s nie jest zwyk³ym plikiem." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Nie mo¿na otworzyæ %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "B³±d podczas wysy³ania listu, proces potomny zwróci³ %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Wynik procesu dostarczania" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "B³êdny IDN %s w trakcie przygotowywania resent-from." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Koniec pracy.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Otrzymano sygna³ %s... Koniec pracy.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Otrzymano sygna³ %d... Koniec pracy.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Zaufany " + +#: smime.c:303 +msgid "Verified " +msgstr "Zweryfikowany " + +#: smime.c:306 +msgid "Unverified" +msgstr "Niezweryfikowany" + +#: smime.c:309 +msgid "Expired " +msgstr "Wygas³y " + +#: smime.c:312 +msgid "Revoked " +msgstr "Wyprowadzony " + +#: smime.c:315 +msgid "Invalid " +msgstr "B³êdny " + +#: smime.c:318 +msgid "Unknown " +msgstr "Nieznany " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Podaj numer klucza: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Certyfikat S/MIME dla \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "Identyfikator %s nie zosta³ zweryfikowany. Mimo to u¿yæ dla %s ?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "U¿yæ nie zaufanego identyfikatora %s dla %s ?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "U¿yæ identyfikatora %s dla %s ?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Ostrze¿enie: nie oke¶lono poziomu zaufania dla %s (dow. klawisz by " +"kontynuowaæ)." + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Brak (poprawnych) certyfikatów dla %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "B³±d: nie mo¿na wywo³aæ podprocesu OpenSSL!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "brak certyfikatu" + +#: smime.c:1200 +msgid "no mbox" +msgstr "brak skrzynki" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Brak wyników dzia³ania OpenSSL..." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Ostrze¿enie: nie znaleziono certyfikatu po¶redniego CA." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "B³±d: nie mo¿na wywo³aæ podprocesu OpenSSL!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Brak wyników dzia³ania OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Koniec komunikatów OpenSSL --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- B³±d: nie mo¿na utworzyæ podprocesu OpenSSL! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- Nastêpuj±ce dane s± zaszyfrowane S/MIME --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- Poni¿sze dane s± podpisane S/MIME --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Koniec danych zaszyfrowanych S/MIME. --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Koniec danych podpisanych S/MIME. --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Sortowanie poczty w skrzynce..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Nie znaleziono funkcji sortowania! (zg³o¶ ten b³±d)" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(brak skrzynki)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "" +"Pierwszy list w±tku nie jest widoczny w trybie ograniczonego przegl±dania." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Pierwszy list tego w±tku nie jest dostêpny." diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo new file mode 100644 index 0000000000000000000000000000000000000000..6ba375e037542ad7a8f9513bcd1646a0430df2a7 GIT binary patch literal 56386 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 literal 0 HcmV?d00001 diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..9434d35 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,4566 @@ +# Mutt 0.95.6 +msgid "" +msgstr "" +"Project-Id-Version: 1.1.5i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2000-03-05 01:14-0300\n" +"Last-Translator: Marcus Brito <marcus@visaotec.com.br>\n" +"Language-Team: LIE-BR (http://lie-br.conectiva.com.br)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding:\n" + +#: account.c:144 +#, fuzzy, c-format +msgid "Username at %s: " +msgstr "Renomear para: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Senha para %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Sair" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Apagar" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Restaurar" + +#: addrbook.c:36 +msgid "Select" +msgstr "Escolher" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Ajuda" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Você não tem apelidos!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Apelidos" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Apelidar como: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Você já tem um apelido definido com aquele nome!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Endereço: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Nome pessoal:" + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s =%s] Aceita?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Salvar em arquivo:" + +#: alias.c:342 +msgid "Alias added." +msgstr "Apelido adicionado." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Não pude casar o nome, continuo?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Entrada de composição no mailcap requer %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Erro ao executar \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Erro ao abrir o arquivo para interpretar os cabeçalhos." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Erro ao abrir o arquivo para retirar cabeçalhos." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "" +"Nenhuma entrada de composição no mailcap para %s, criando entrada vazia." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Entrada de edição no mailcap requer %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "Nenhuma entrada de edição no mailcap para %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Nenhuma entrada no mailcap de acordo encontrada. Exibindo como texto." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "Tipo MIME não definido. Não é possível visualizar o anexo." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Não é possível criar o filtro." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Não foi possível criar um filtro" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Erro de gravação!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Eu não sei como imprimir isto!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Diretório" + +#: browser.c:42 +msgid "Mask" +msgstr "Máscara" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s não é um diretório." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Caixas [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "[%s] assinada, Máscara de arquivos: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Diretório [%s], Máscara de arquivos: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Não é possível anexar um diretório" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Nenhum arquivo casa com a máscara" + +#: browser.c:856 +#, fuzzy +msgid "Create is only supported for IMAP mailboxes" +msgstr "A remoção só é possível para caixar IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "A remoção só é possível para caixar IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Deseja mesmo remover a caixa \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Caixa de correio removida." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Caixa de correio não removida." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Mudar para: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Erro ao examinar diretório." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Máscara de arquivos: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ordem inversa por (d)ata, (a)lfa, (t)amanho ou (n)ão ordenar? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Ordenar por (d)ata, (a)lfa, (t)amanho ou (n)ão ordenar? " + +#: browser.c:1049 +msgid "dazn" +msgstr "datn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nome do novo arquivo: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Não é possível visualizar um diretório" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Erro ao tentar exibir arquivo" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Novas mensagens em %s" + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: o terminal não aceita cores" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: não existe tal cor" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: não existe tal objeto" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: comando válido apenas para o objeto índice" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: poucos argumentos" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Faltam argumentos." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: poucos argumentos" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: poucos argumentos" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: não existe tal atributo" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "poucos argumentos" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "muitos argumentos" + +#: color.c:721 +msgid "default colors not supported" +msgstr "cores pré-definidas não suportadas" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Verificar assinatura de PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Não foi possível criar um arquivo temporário!" + +#: commands.c:126 +#, fuzzy +msgid "Cannot create display filter" +msgstr "Não é possível criar o filtro." + +#: commands.c:146 +#, fuzzy +msgid "Could not copy message" +msgstr "Não foi possível enviar a mensagem." + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "Assinatura PGP verificada com sucesso." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "Assinatura PGP verificada com sucesso." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "Assinatura PGP verificada com sucesso." + +#: commands.c:200 +#, fuzzy +msgid "PGP signature could NOT be verified." +msgstr "Assinatura PGP verificada com sucesso." + +#: commands.c:223 +msgid "Command: " +msgstr "Comando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Repetir mensagem para: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Repetir mensagens marcadas para: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Erro ao interpretar endereço!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Repetir mensagem para %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Repetir mensagens para %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Mensagem repetida." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Mensagens repetidas." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Mensagem repetida." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Mensagens repetidas." + +#: commands.c:381 commands.c:415 commands.c:432 +#, fuzzy +msgid "Can't create filter process" +msgstr "Não foi possível criar um filtro" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Passar por cano ao comando: " + +#: commands.c:478 +#, fuzzy +msgid "No printing command has been defined." +msgstr "Nenhuma caixa de mensagem para recebimento definida." + +#: commands.c:483 +msgid "Print message?" +msgstr "Imprimir mensagem?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Imprimir mensagens marcadas?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Mensagem impressa" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Mensagens impressas" + +#: commands.c:494 +#, fuzzy +msgid "Message could not be printed" +msgstr "Mensagem impressa" + +#: commands.c:495 +#, fuzzy +msgid "Messages could not be printed" +msgstr "Mensagens impressas" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordem-Rev (d)ata/(f)rm/(r)eceb/(a)sst/(p)ara/dis(c)/de(s)ord/(t)am/r(e)fs?: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ordem (d)ata/(f)rm/(r)eceb/(a)sst/(p)ara/dis(c)/de(s)ord/(t)am/r(e)fs?: " + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrapcste" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Comando do shell: " + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s para caixa de mensagens" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s para caixa de mensagens" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s para caixa de mensagens" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s para caixa de mensagens" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s para caixa de mensagens" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s para caixa de mensagens" + +#: commands.c:706 +msgid " tagged" +msgstr " marcada" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Copiando para %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "" + +#: commands.c:910 +#, fuzzy, c-format +msgid "Content-Type changed to %s." +msgstr "Conectando a %s..." + +#: commands.c:912 +#, fuzzy, c-format +msgid "Character set changed to %s; %s." +msgstr "O conjunto de caracteres %s é desconhecido." + +#: commands.c:914 +msgid "not converting" +msgstr "" + +#: commands.c:914 +msgid "converting" +msgstr "" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Não há anexos." + +#: compose.c:84 +msgid "Send" +msgstr "Enviar" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Cancelar" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Anexar arquivo" + +#: compose.c:90 +msgid "Descrip" +msgstr "Descrição" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Assinar, Encriptar" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Encriptar" + +#: compose.c:131 +msgid "Sign" +msgstr "Assinar" + +#: compose.c:133 +msgid "Clear" +msgstr "Nada" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " assinar como: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<padrão>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Encriptar" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? " + +#: compose.c:166 +#, fuzzy +msgid "esabf" +msgstr "escamq" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Assinar como: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "escamq" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] não existe mais!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] modificado. Atualizar codificação?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Anexos" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Você não pode apagar o único anexo." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Anexando os arquivos escolhidos..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Não foi possível anexar %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Abrir caixa para anexar mensagem de" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Nenhuma mensagem naquela pasta." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Marque as mensagens que você quer anexar!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Não foi possível anexar!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "A gravação só afeta os anexos de texto." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "O anexo atual não será convertido." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "O anexo atual será convertido" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Codificação inválida" + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Salvar uma cópia desta mensagem?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Renomear para: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "Impossível consultar: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Novo arquivo: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type é da forma base/sub" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Content-Type %s desconhecido" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Não é possível criar o arquivo %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "O que temos aqui é uma falha ao criar um anexo" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Adiar esta mensagem?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Gravar mensagem na caixa" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Gravando mensagem em %s..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Mensgem gravada." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Saída do PGP a seguir (hora atual: " + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "Senha do PGP esquecida." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Entre a senha do PGP:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Entre a senha do PGP:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Criar uma mensagem application/pgp?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Executando PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Erro: Estrutura multipart/signed inconsistente! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Erro: Protocolo multipart/signed %s desconhecido! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Aviso: Não foi possível verificar %s de %s assinaturas. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Os dados a seguir estão assinados --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Aviso: Não foi possível encontrar nenhuma assinatura. --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Fim dos dados assinados --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "sim" + +#: curs_lib.c:158 +msgid "no" +msgstr "não" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Sair do Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "erro desconhecido" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Pressione qualquer tecla para continuar..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' para uma lista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Nenhuma caixa aberta." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Não há mensagens." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Esta caixa é somente para leitura." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Função não permitida no modo anexar-mensagem." + +#: curs_main.c:51 +#, fuzzy +msgid "No visible messages." +msgstr "Nenhuma mensagem nova" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Não é possível ativar escrita em uma caixa somente para leitura!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Mudanças na pasta serão escritas na saída." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Mudanças na pasta não serão escritas" + +#: curs_main.c:397 +msgid "Quit" +msgstr "Sair" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Salvar" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Msg" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Responder" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupo" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "A caixa foi modificada externamente. As marcas podem estar erradas." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Novas mensagens nesta caixa." + +#: curs_main.c:499 +#, fuzzy +msgid "Mailbox was externally modified." +msgstr "A caixa foi modificada externamente. As marcas podem estar erradas." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Nenhuma mensagem marcada." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Conectando a %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Pular para mensagem: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "O argumento deve ser um número de mensagem." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Aquela mensagem não está visível." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Número de mensagem inválido." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Apagar mensagens que casem com: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Nenhum padrão limitante está em efeito." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Limitar: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limitar a mensagens que casem com: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Sair do Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Marcar mensagens que casem com: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Restaurar mensagens que casem com: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Desmarcar mensagens que casem com: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Abrir caixa somente para leitura" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Abrir caixa de correio" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s não é uma caixa de correio." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Sair do Mutt sem salvar alterações?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Você está na última mensagem." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Nenhuma mensagem não removida." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Você está na primeira mensagem." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "A pesquisa voltou ao início." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "A pesquisa passou para o final." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Nenhuma mensagem nova" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Nenhuma mensagem não lida" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " nesta visão limitada" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "Apagando mensagens do servidor..." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Nenhuma discussão restante." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Você está na primeira discussão." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Separar discussões não está ativado." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "A discussão contém mensagens não lidas." + +#: curs_main.c:1802 +#, fuzzy +msgid "Can't edit message on POP server." +msgstr "Apagando mensagens do servidor..." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tinsere uma linha com um único ~\n" +"~b usuários\tadiciona os usuários ao campo Bcc:\n" +"~c usuários\tadiciona os usuários ao campo Cc:\n" +"~f mensagens\tinclui as mensagens\n" +"~F mensagens\to mesmo que ~f, mas também inclui os cabeçalhos\n" +"~h\t\tedita o cabeçalho da mensagem\n" +"~m mensagens\tinclui e cita as mensagens\n" +"~M mensagens\to mesmo que ~m, mas também inclui os cabeçalhos\n" +"~p\t\timprime a mensagem\n" +"~q\t\tgrava o arquivo e sai do editor\n" +"~r arquivo\tlê um arquivo no editor\n" +"~t usuários\tadiciona os usuários ao campo To:\n" +"~u\t\tvolta à linha anterior\n" +"~w arquivo\tescreve a mensagem no arquivo\n" +"~x\t\tcancela as mudanças e sai do editor\n" +"?\t\testa mensagagem\n" +".\t\tsozinho em uma linha termina a mensagem\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: número de mensagem iválido.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Termine a mensagem com um . sozinho em uma linha)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Nenhuma caixa de mensagens.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Mensagem contém:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(continuar)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "falta o nome do arquivo.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Nenhuma linha na mensagem.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: comando de editor desconhecido (~? para ajuda)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "Não foi possível criar o arquivo temporário: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Não foi possível criar a caixa temporária: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Não foi possível criar a caixa temporária: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "O arquivo de mensagens está vazio." + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Mensagem não modificada!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Não é possível abrir o arquivo de mensagens: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Não é possível anexar à pasta: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Erro. Preservando o arquivo temporário: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Atribui marca" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Limpa marca" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Erro: Não foi possível exibir nenhuma parte de Multipart/Aternative! " +"--]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Anexo No.%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tipo: %s/%s, Codificação: %s, Tamanho: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Autovisualizar usando %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Executando comando de autovisualização: %s" + +#: handler.c:1560 +#, fuzzy, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- em %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Saída de erro da autovisualização de %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Erro: message/external-body não tem nenhum parâmetro access-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Este anexo %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(tamanho %s bytes) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "foi apagado --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- em %s --]\n" + +#: handler.c:1674 +#, fuzzy, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- em %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Este anexo %s/%s " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- Este anexo %s/%s não está includído, e --]\n" +"[-- a fonte externa indicada já expirou. --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- Este anexo %s/%s não está incluído, e o --]\n" +"[-- tipo de acesso %s não é aceito. --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Erro: multipart/signed não tem protocolo." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Erro: multipart/encrypted não tem nenhum parâmetro de protocolo!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Não foi possível abrir o arquivo temporário!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s não é aceito " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(use '%s' para ver esta parte)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' precisa estar associado a uma tecla!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: não foi possível anexar o arquivo" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ERRO: por favor relate este problema" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<DESCONHECIDO>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Associações genéricas:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Funções sem associação:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Ajuda para %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "" + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: tipo de gancho desconhecido: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "" + +#: imap/auth.c:104 pop_auth.c:411 +#, fuzzy +msgid "No authenticators available" +msgstr "Autenticação GSSAPI falhou." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Autenticando (anônimo)..." + +#: imap/auth_anon.c:69 +#, fuzzy +msgid "Anonymous authentication failed." +msgstr "Autenticação anônima não é aceita." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Autenticando (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Autenticação CRAM-MD5 falhou." + +#. now begin login +#: imap/auth_gss.c:104 +#, fuzzy +msgid "Authenticating (GSSAPI)..." +msgstr "Autenticando (CRAM-MD5)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Autenticação GSSAPI falhou." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "" + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Efetuando login..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Login falhou." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Autenticando (CRAM-MD5)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +#, fuzzy +msgid "SASL authentication failed." +msgstr "Autenticação GSSAPI falhou." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Obtendo espaços de nomenclatura..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Obtendo lista de pastas..." + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s: não existe tal cor" + +#: imap/browse.c:277 +#, fuzzy +msgid "Create mailbox: " +msgstr "Abrir caixa de correio" + +#: imap/browse.c:282 +#, fuzzy +msgid "Mailbox must have a name." +msgstr "A caixa de mensagens não sofreu mudanças" + +#: imap/browse.c:290 +#, fuzzy +msgid "Mailbox created." +msgstr "Caixa de correio removida." + +#: imap/command.c:290 +#, fuzzy +msgid "Mailbox closed" +msgstr "Caixa de correio removida." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Erro fatal. O número de mensagens está fora de sincronia!" + +#: imap/imap.c:147 +#, fuzzy, c-format +msgid "Closing connection to %s..." +msgstr "Fechando a conexão com o servidor IMAP..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Este servidor IMAP é pré-histórico. Mutt não funciona com ele." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Selecionando %s..." + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "Erro ao gravar a caixa!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Não é possível anexar a caixas IMAP neste servidor" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Criar %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Fechando a conexão com o servidor IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Marcando %d mensagens como removidas..." + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "Login falhou." + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Salvando marcas de estado das mensagens... [%d de %d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Apagando mensagens do servidor..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +#, fuzzy +msgid "CLOSE failed" +msgstr "Login falhou." + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "Abrir caixa de correio" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Assinando %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Cancelando assinatura de %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Não foi possível obter cabeçalhos da versão deste servidor IMAP." + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "Não foi possível criar um arquivo temporário!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Obtendo cabeçalhos das mensagens... [%d de %d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Obtendo mensagem..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Enviando mensagem ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Copiando %d mensagens para %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Copiando mensagem %d para %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Continuar?" + +#: init.c:611 +msgid "alias: no address" +msgstr "apelido: sem endereço" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "campo de cabeçalho inválido" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: método de ordenação desconhecido" + +#: init.c:879 +#, fuzzy, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default: erro na expressão regular: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: variável desconhecida" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefixo é ilegal com reset" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "valor é ilegal com reset" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s está atribuída" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s não está atribuída" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: tipo de caixa inválido" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: valor inválido" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: tipo inválido" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: tipo inválido" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Impossível consultar: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s não é uma caixa de correio." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Erro em %s, linha %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: erros em %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: erro em %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: muitos argumentos" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: comando desconhecido" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Erro na linha de comando: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "não foi possível determinar o diretório do usuário" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "não foi possível determinar o nome do usuário" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Laço de macro detectado." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Tecla não associada." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Tecla não associada. Pressione '%s' para ajuda." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: muitos argumentos" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: não existe tal menu" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "seqüência de teclas nula" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: muitos argumentos" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: não existe tal função no mapa" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: seqüência de teclas vazia" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: muitos argumentos" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec: poucos argumentos" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s: não existe tal função no mapa" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Entre a keyID para %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "operação nula" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "forçar a visualizaçãdo do anexo usando o mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ver anexo como texto" + +#: keymap_alldefs.h:9 +#, fuzzy +msgid "Toggle display of subparts" +msgstr "troca entre mostrar texto citado ou não" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "anda até o fim da página" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "re-envia uma mensagem para outro usuário" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "escolhe um novo arquivo neste diretório" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "vê arquivo" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "mostra o nome do arquivo atualmente selecionado" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "assina à caixa de correio atual (só para IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "cancela assinatura da caixa atual (só para IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "troca ver todas as caixas/só as inscritas (só para IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Nenhuma caixa com novas mensagens." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "muda de diretório" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "verifica se há novas mensagens na caixa" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "anexa um(ns) arquivo(s) à esta mensagem" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "anexa uma(s) mensagem(ns) à esta mensagem" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "edita a lista de Cópias Escondidas (BCC)" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "edita a lista de Cópias (CC)" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "edita a descrição do anexo" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "edita o código de transferência do anexo" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "informe um arquivo no qual salvar uma cópia desta mensagem" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "edita o arquivo a ser anexado" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "edita o campo From" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "edita a mensagem e seus cabeçalhos" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "edita a mensagem" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "edita o anexo usando sua entrada no mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "edita o campo Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "edita o assunto desta mensagem" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "edita a lista de Destinatários (To)" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "cria uma nova caixa de correio (só para IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "edita o tipo de anexo" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "obtém uma cópia temporária do anexo" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "executa o ispell na mensagem" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "compõe um novo anexo usando a entrada no mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "ativa/desativa recodificação deste anexo" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "salva esta mensagem para ser enviada depois" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "renomeia/move um arquivo anexado" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "envia a mensagem" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "troca a visualização de anexos/em linha" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "troca entre apagar o arquivo após enviá-lo ou não" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "atualiza a informação de codificação de um anexo" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "grava a mensagem em uma pasta" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "copia uma mensagem para um arquivo/caixa" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "cria um apelido a partir do remetente de uma mensagem" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "move a entrada para o fundo da tela" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "move a entrada para o meio da tela" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "move a entrada para o topo da tela" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "cria uma cópia decodificada (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "cria uma cópia decodificada (text/plain) e apaga" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "apaga a entrada atual" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "apaga a caixa de correio atual (só para IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "apaga todas as mensagens na sub-discussão" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "apaga todas as mensagens na discussão" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "mostra o endereço completo do remetente" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "mostra a mensagem e ativa/desativa poda de cabeçalhos" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "mostra uma mensagem" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "edita a mensagem pura" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "apaga o caractere na frente do cursor" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "move o cursor um caractere para a esquerda" + +#: keymap_alldefs.h:66 +#, fuzzy +msgid "move the cursor to the beginning of the word" +msgstr "pula para o início da linha" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "pula para o início da linha" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "circula entre as caixas de mensagem" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "completa um nome de arquivo ou apelido" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "completa um endereço com uma pesquisa" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "apaga o caractere sob o cursor" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "pula para o final da linha" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "move o cursor um caractere para a direita" + +#: keymap_alldefs.h:74 +#, fuzzy +msgid "move the cursor to the end of the word" +msgstr "move o cursor um caractere para a direita" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "volta uma página no histórico" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "volta uma página no histórico" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "apaga os caracteres a partir do cursor até o final da linha" + +#: keymap_alldefs.h:78 +#, fuzzy +msgid "delete chars from the cursor to the end of the word" +msgstr "apaga os caracteres a partir do cursor até o final da linha" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "apaga todos os caracteres na linha" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "apaga a palavra em frente ao cursor" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "põe a próxima tecla digitada entre aspas" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "" + +#: keymap_alldefs.h:84 +#, fuzzy +msgid "convert the word to lower case" +msgstr "anda até o fim da página" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "entra um comando do muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "entra uma máscara de arquivos" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "sai deste menu" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtra o anexo através de um comando do shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "anda até a primeira entrada" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "troca a marca 'importante' da mensagem" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "encaminha uma mensagem com comentários" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "seleciona a entrada atual" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "responde a todos os destinatários" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "passa meia página" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "volta meia página" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "esta tela" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "pula para um número de índice" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "anda até a última entrada" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "responde à lista de email especificada" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "executa um macro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "compõe uma nova mensagem eletrônica" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "abre uma pasta diferente" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "abre uma pasta diferente somente para leitura" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "retira uma marca de estado de uma mensagem" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "apaga mensagens que casem com um padrão" + +#: keymap_alldefs.h:107 +#, fuzzy +msgid "force retrieval of mail from IMAP server" +msgstr "obtém mensagens do servidor POP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "obtém mensagens do servidor POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "anda até a primeira mensagem" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "anda até a última mensagem" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "mostra somente mensagens que casem com um padrão" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "pula para a próxima mensagem nova" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "pula para a próxima mensagem não lida" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "pula para a próxima sub-discussão" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "pula para a próxima discussão" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "anda até a próxima mensagem não apagada" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "pula para a próxima mensagem não lida" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "pula para a mensagem pai na discussão" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "pula para a discussão anterior" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "pula para a sub-discussão anterior" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "anda até a mensagem não apagada anterior" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "pula para a mensagem nova anterior" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "pula para a mensagem não lida anterior" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "pula para a mensagem não lida anterior" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "marca a discussão atual como lida" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "marca a sub-discussão atual como lida" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "atribui uma marca de estado em uma mensagem" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "salva as mudanças à caixa" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "marca mensagens que casem com um padrão" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "restaura mensagens que casem com um padrão" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "desmarca mensagens que casem com um padrão" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "anda até o meio da página" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "anda até a próxima entrada" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "desce uma linha" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "anda até a próxima página" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "pula para o fim da mensagem" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "troca entre mostrar texto citado ou não" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "pula para depois do texto citado" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "volta para o início da mensagem" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "passa a mensagem/anexo para um comando do shell através de um cano" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "anda até a entrada anterior" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "sobe uma linha" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "anda até a página anterior" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "imprime a entrada atual" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "executa uma busca por um endereço através de um programa externo" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "anexa os resultados da nova busca aos resultados atuais" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "salva mudanças à caixa e sai" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "edita uma mensagem adiada" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "limpa e redesenha a tela" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interno}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "responde a uma mensagem" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "usa a mensagem atual como modelo para uma nova mensagem" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "salva mensagem/anexo em um arquivo" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "procura por uma expressão regular" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "procura de trás para a frente por uma expressão regular" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "procura pelo próximo resultado" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "procura pelo próximo resultado na direção oposta" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "troca entre mostrar cores nos padrões de busca ou não" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "executa um comando em um subshell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ordena mensagens" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ordena mensagens em ordem reversa" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "marca a entrada atual" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "aplica a próxima função às mensagens marcadas" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "aplica a próxima função às mensagens marcadas" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "marca a sub-discussão atual" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "marca a discussão atual" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "troca a marca 'nova' de uma mensagem" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "troca entre reescrever a caixa ou não" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "troca entre pesquisar em caixas ou em todos os arquivos" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "anda até o topo da página" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "restaura a entrada atual" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "restaura todas as mensagens na discussão" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "restaura todas as mensagens na sub-discussão" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "mostra o número e a data da versão do Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "vê anexo usando sua entrada no mailcap se necessário" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "mostra anexos MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "mostra o padrão limitante atualmente ativado" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "abre/fecha a discussão atual" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "abre/fecha todas as discussões" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "anexa uma chave pública do PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "mostra as opções do PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "envia uma chave pública do PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "verifica uma chave pública do PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "vê a identificação de usuário da chave" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Aceita a sequência construída" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Anexa um reenviador à sequência" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Insere um reenviador à sequência" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Remove um reenviador da sequência" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Seleciona o elemento anterior da sequência" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Seleciona o próximo elemento da sequência" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "envia a mensagem através de uma sequência de reenviadores mixmaster" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "cria cópia desencriptada e apaga" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "cria cópia desencriptada" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "retira a senha do PGP da memória" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "extrai chaves públicas do PGP" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "mostra as opções do PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Acabou a memória!" + +#: main.c:46 +#, fuzzy +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Para contactar os programadores, envie uma mensagem para <mutt-dev@mutt." +"org>.\n" +"Para relatar um problema, por favor use o programa muttbug.\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2000 Michael R. Elkins e outros.\n" +"Mutt vem sem NENHUMA GARANTIA; para mais detalhes digite `mutt -vv'.\n" +"Mutt é um programa livre, e você é encorajado a redistribuí-lo\n" +"sob certas condições; digite `mutt -vv' para os detalhes.\n" +"\n" +"Tradução para a língua portuguesa:\n" +"Marcus Brito <marcus@visaotec.com.br>\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2000 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2000 Werner Kock <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"\n" +"Tradução para a Língua Portuguesa por:\n" +"Marcus Brito <marcus@visaotec.com.br>\n" +"\n" +"Muitos outros não mencionados aqui contribuíram com bastante código,\n" +"ajustes e sugestões.\n" +"\n" +" Este programa é software livre; você pode redistribuí-lo e/ou\n" +" modificá-lo sob os termos da Licença Pública Geral GNU como publicada\n" +" pela Free Software Foundation, tanto na versão 2 da Licença ou (à sua\n" +" escolha) qualquer outra versão posterior.\n" +"\n" +" Este programa é distribuído na esperança de que ele seja útil, mas\n" +" SEM NENHUMA GARANTIA, nem mesmo a garantia implícita de " +"COMERCIABILIDADE\n" +" ou FUNCIONALIDADE PARA UM DETERMINADO PROPÓSITO. Veja a Licença Pública\n" +" Geral da GNU para mais detalhes.\n" +"\n" +" Você deve ter recebido uma cópia da Licença Pública Geral da GNU junto\n" +" com este programa; caso contrário, escreva para Free Software\n" +" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02138, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"uso: mutt [ -nRzZ ] [ -e <cmd> ] [ -F <arq> ] [ -m <tipo> ] [ -f <arq> ]\n" +" mutt [ -nx ] [ -e <cmd> ] [ -a <arq> ] [ -F <arq> ] [ -H <arq> ] [ -i " +"<arq> ] [ -s <asst> ] [ -b <end> ] [ -c <end> ] <end> [ ... ]\n" +" mutt [ -n ] [ -e <cmd> ] [ -F <arq> ] -p\n" +" mutt -v[v]\n" +"\n" +"opções:\n" +" -a <arquivo>\tanexa um arquivo à mensagem\n" +" -b <endereço>\tespecifica um endereço de cópia escondica (BCC)\n" +" -c <endereço>\tespecifica um endereço de cópia (CC)\n" +" -e <comando>\tespecifica um comando a ser executado depois a " +"inicialização\n" +" -f <arquivo>\tespecifica qual caixa de mensagens abrir\n" +" -F <arquivo>\tespecifica um arquivo muttrc alternativo\n" +" -H <arquivo>\tespecifica um rascunho de onde ler cabeçalhos\n" +" -i <arquivo>\tespecifica um arquivo que o Mutt deve incluir na resposta\n" +" -m <tipo>\tespecifica o tipo padrão de caixa de mensagens\n" +" -n\t\tfaz com que o Mutt não leia o Muttrc do sistema\n" +" -p\t\tedita uma mensagem adiada\n" +" -R\t\tabre a caixa de mensagens em modo de somente leitura\n" +" -s <assunto>\tespecifica um assunto (entre aspas se tiver espaços)\n" +" -v\t\tmostra a versão e definições de compilação\n" +" -x\t\tsimula o modo de envio do mailx\n" +" -y\t\tescolhe uma caixa na sua lista `mailboxes'\n" +" -z\t\tsai imediatamente se não houverem mensagens na caixa\n" +" -Z\t\tabre a primeira pasta com novas mensagens, sai se não houver\n" +" -h\t\testa mensagem de ajuda" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Opções de compilação:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Erro ao inicializar terminal." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Depurando no nível %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG não foi definido durante a compilação. Ignorado.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s não existe. Devo criá-lo?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Não é possível criar %s: %s" + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Nenhum destinatário foi especificado.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: não foi possível anexar o arquivo.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Nenhuma caixa com novas mensagens." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Nenhuma caixa de mensagem para recebimento definida." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "A caixa de mensagens está vazia." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Lendo %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "A caixa de mensagens está corrompida!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "A caixa de mensagens foi corrompida!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Erro fatal! Não foi posssível reabrir a caixa de mensagens!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Não foi possível travar a caixa de mensagens!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox modificada, mas nenhuma mensagem modificada! (relate este " +"problema)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Gravando mensagens... %d(%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "Compilando padrão de busca..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Erro de gravação! Caixa parcial salva em %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Não foi possível reabrir a caixa de mensagens!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Reabrindo caixa de mensagens..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Pular para: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Número de índice inválido." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Nenhuma entrada." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Você não pode mais descer." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Você não pode mais subir" + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Você está na última página." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Você está na primeira página" + +#: menu.c:578 +msgid "First entry is shown." +msgstr "A primeira entrada está sendo mostrada." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "A última entrada está sendo mostrada." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Você está na última entrada." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Você está na primeira entrada." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Procurar por: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Procurar de trás para frente por: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Nenhum padrão de procura." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Não encontrado." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Nenhuma entrada marcada." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "A busca não está implementada neste menu." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "O pulo não está implementado em diálogos." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Não é possível marcar." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Lendo %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "O arquivo é um diretório, salvar lá?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "O arquivo é um diretório, salvar lá?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Arquivo no diretório: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Arquivo existe, (s)obrescreve, (a)nexa ou (c)ancela?" + +#: muttlib.c:869 +msgid "oac" +msgstr "sac" + +#: muttlib.c:1171 +#, fuzzy +msgid "Can't save message to POP mailbox." +msgstr "Gravar mensagem na caixa" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s não é uma caixa de mensagens!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Anexa mensagens a %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, fuzzy, c-format +msgid "Connection to %s closed" +msgstr "Conectando a %s..." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "" + +#: mutt_socket.c:292 +#, fuzzy +msgid "Preconnect command failed." +msgstr "comando de pré-conexão falhou" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, fuzzy, c-format +msgid "Error talking to %s (%s)" +msgstr "Conectando a %s" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, fuzzy, c-format +msgid "Looking up %s..." +msgstr "Copiando para %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, fuzzy, c-format +msgid "Could not find the host \"%s\"" +msgstr "Não foi possível encontrar o endereço do servidor %s." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Conectando a %s..." + +#: mutt_socket.c:519 +#, fuzzy, c-format +msgid "Could not connect to %s (%s)." +msgstr "Não foi possível abrir %s" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "Login falhou." + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Não foi possível obter o certificado do servidor remoto" + +#: mutt_ssl.c:341 +#, fuzzy, c-format +msgid "SSL connection using %s (%s)" +msgstr "Conexão SSL usando %s" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Desconhecido" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[impossível calcular]" + +#: mutt_ssl.c:424 +#, fuzzy +msgid "[invalid date]" +msgstr "%s: valor inválido" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "" + +#: mutt_ssl.c:506 +#, fuzzy +msgid "Server certificate has expired" +msgstr "Este certificado foi emitido por:" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Este certificado pertence a:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Este certificado foi emitido por:" + +#: mutt_ssl.c:601 +#, fuzzy +msgid "This certificate is valid" +msgstr "Este certificado foi emitido por:" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr "" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr "" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Impressão digital: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Verificação de certificado SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ejeitar, (a)ceitar uma vez, aceitar (s)empre" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "ras" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ejeitar, (a)ceitar uma vez" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ra" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Sair " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Aviso: Não foi possível salvar o certificado" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certificado salvo" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Limite de travas excedido, remover a trava para %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Não é possível travar %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Limite de tempo excedido durante uma tentativa de trava com fcntl!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Esperando pela trava fcntl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Limite de tempo excedido durante uma tentativa trava com flock!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Esperando pela tentativa de flock... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Não foi possível travar %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Lendo %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Gravando %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Não foi possível sincronizar a caixa %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Mover mensagens lidas para %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Remover %d mensagem apagada?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Remover %d mensagens apagadas?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Movendo mensagens lidas para %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "A caixa de mensagens não sofreu mudanças" + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d mantidas, %d movidas, %d apagadas." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d mantidas, %d apagadas." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Pressione '%s' para trocar entre gravar ou não" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Use 'toggle-write' para reabilitar a gravação!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "A caixa está marcada como não gravável. %s" + +#: mx.c:1181 +#, fuzzy +msgid "Mailbox checkpointed." +msgstr "Caixa de correio removida." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Não foi possível gravar a mensagem" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Não disponível neste menu." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PagAnt" + +#: pager.c:1447 +msgid "NextPg" +msgstr "ProxPag" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Ver Anexo" + +#: pager.c:1454 +msgid "Next" +msgstr "Prox" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "O fim da mensagem está sendo mostrado." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "O início da mensagem está sendo mostrado." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Busca reversa: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Busca: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "A ajuda está sendo mostrada." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Não há mais texto citado." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Não há mais texto não-citado após o texto citado." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "mensagem multiparte não tem um parâmetro de fronteiras!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Erro na expressão: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Dia do mês inválido: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Mês inválido: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, fuzzy, c-format +msgid "Invalid relative date: %s" +msgstr "Mês inválido: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "erro na expressão" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "erro no padrão em: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: comando inválido" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: não é possível neste modo" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "faltam parâmetros" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "parêntese sem um corresponente: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "padrão vazio" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "erro: operação %d desconhecida (relate este erro)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Compilando padrão de busca..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Executando comando nas mensagens que casam..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Nenhuma mensagem casa com o critério" + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "A busca chegou ao fim sem encontrar um resultado" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "A busca chegou ao início sem encontrar um resultado" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Busca interrompida." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Senha do PGP esquecida." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Erro: não foi possível criar o subprocesso do PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Fim da saída do PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- INÍCIO DE MENSAGEM DO PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- INÍCIO DE BLOCO DE CHAVE PÚBLICA DO PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- INÍCIO DE MENSAGEM ASSINADA POR PGP --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- FIM DE MENSAGEM DO PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- FIM DE BLOCO DE CHAVE PÚBLICA DO PGP --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- FIM DE MENSAGEM ASSINADA POR PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Erro: não foi possível encontrar o início da mensagem do PGP! --]\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Erro interno. Informe <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Erro: não foi possível criar um subprocesso para o PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Erro: mensagem PGP/MIME mal formada! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Erro: não foi possível criar um arquivo temporário! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Os dados a seguir estão encriptados com PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- Fim dos dados encriptados com PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Não foi possível abrir o subprocesso do PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Usar keyID = \"%s\" para %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Entre a keyID para %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Não foi possível executar o PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Obtendo chave PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Esta chave não pode ser usada: expirada/desabilitada/revogada." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Escolher " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Verificar chave " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "Chaves do PGP que casam com <%s>. " + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Chaves do PGP que casam com \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Não foi possível abrir /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Não foi possível criar um arquivo temporário" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Key ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Esta chave não pode ser usada: expirada/desabilitada/revogada." + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "Esta chave não pode ser usada: expirada/desabilitada/revogada." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Este ID não é de confiança." + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "Este ID é de baixa confiança." + +#: pgpkey.c:622 +#, fuzzy, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Você realmente quer usá-lo?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Por favor entre o key ID: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Executando PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "Chave do PGP %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Procurando por chaves que casam com \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +#, fuzzy +msgid "Command TOP is not supported by server." +msgstr "Não é possível marcar." + +#: pop.c:113 +#, fuzzy +msgid "Can't write header to temporary file!" +msgstr "Não foi possível criar um arquivo temporário" + +#: pop.c:194 pop_lib.c:199 +#, fuzzy +msgid "Command UIDL is not supported by server." +msgstr "Não é possível marcar." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +#, fuzzy +msgid "Fetching list of messages..." +msgstr "Obtendo mensagem..." + +#: pop.c:411 +#, fuzzy +msgid "Can't write message to temporary file!" +msgstr "Não foi possível criar um arquivo temporário" + +#: pop.c:513 pop.c:578 +#, fuzzy +msgid "Checking for new messages..." +msgstr "Preparando mensagem encaminhada..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Servidor POP não está definido." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Nenhuma mensagem nova no servidor POP." + +#: pop.c:613 +#, fuzzy +msgid "Delete messages from server?" +msgstr "Apagando mensagens do servidor..." + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Lendo novas mensagens (%d bytes)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Erro ao gravar a caixa!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d de %d mensagens lidas]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "O servidor fechou a conexão!" + +#: pop_auth.c:89 +#, fuzzy +msgid "Authenticating (SASL)..." +msgstr "Autenticando (CRAM-MD5)..." + +#: pop_auth.c:205 +#, fuzzy +msgid "Authenticating (APOP)..." +msgstr "Autenticando (CRAM-MD5)..." + +#: pop_auth.c:229 +#, fuzzy +msgid "APOP authentication failed." +msgstr "Autenticação GSSAPI falhou." + +#: pop_auth.c:264 +#, fuzzy +msgid "Command USER is not supported by server." +msgstr "Não é possível marcar." + +#: pop_lib.c:195 +#, fuzzy +msgid "Unable to leave messages on server." +msgstr "Apagando mensagens do servidor..." + +#: pop_lib.c:225 +#, fuzzy, c-format +msgid "Error connecting to server: %s" +msgstr "Conectando a %s" + +#: pop_lib.c:370 +#, fuzzy +msgid "Closing connection to POP server..." +msgstr "Fechando a conexão com o servidor IMAP..." + +#: pop_lib.c:536 +#, fuzzy +msgid "Verifying message indexes..." +msgstr "Gravando mensagem em %s..." + +#: pop_lib.c:560 +#, fuzzy +msgid "Connection lost. Reconnect to POP server?" +msgstr "Fechando a conexão com o servidor IMAP..." + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Mensagens Adiadas" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Nenhuma mensagem adiada." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Cabeçalho de PGP ilegal" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Cabeçalho de PGP ilegal" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Login falhou." + +#: query.c:46 +msgid "New Query" +msgstr "Nova Consulta" + +#: query.c:47 +msgid "Make Alias" +msgstr "Criar Apelido" + +#: query.c:48 +msgid "Search" +msgstr "Busca" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Agurdando pela resposta..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Comando de consulta não definido." + +#: query.c:286 +msgid "Query" +msgstr "Consulta" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Consulta: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Consulta '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Cano" + +#: recvattach.c:53 +msgid "Print" +msgstr "Imprimir" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Salvando..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Anexo salvo." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "AVISO! Você está prestes a sobrescrever %s, continuar?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Anexo filtrado." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrar através de: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Passar por cano a: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Eu não sei como imprimir anexos %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Imprimir anexo(s) marcado(s)?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Imprimir anexo?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Não foi encontrada nenhuma mensagem marcada." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Anexos" + +#: recvattach.c:987 +#, fuzzy +msgid "There are no subparts to show!" +msgstr "Não há anexos." + +#: recvattach.c:1048 +#, fuzzy +msgid "Can't delete attachment from POP server." +msgstr "obtém mensagens do servidor POP" + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Deleção de anexos de mensagens PGP não é suportada" + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Somente a deleção de anexos multiparte é suportada." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Você só pode repetir partes message/rfc822" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Erro ao enviar mensagem." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Erro ao enviar mensagem." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Não foi possível abrir o arquivo temporário %s." + +#: recvcmd.c:444 +#, fuzzy +msgid "Forward as attachments?" +msgstr "mostra anexos MIME" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Não foi possível decodificar todos os anexos marcados.\n" +"Encaminhar os demais através de MIME?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Encaminhar encapsulado em MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Não é possível criar %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Não foi encontrada nenhuma mensagem marcada." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Nenhuma lista de email encontrada!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Não foi possível decodificar todos os anexos marcados.\n" +"Encapsular os demais através de MIME?" + +#: remailer.c:480 +msgid "Append" +msgstr "Anexar" + +#: remailer.c:481 +msgid "Insert" +msgstr "Inserir" + +#: remailer.c:482 +msgid "Delete" +msgstr "Remover" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Não foi possível obter o type2.list do mixmaster!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Escolha uma sequência de reenviadores." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Erro: %s não pode ser usado como reenviador final de uma sequência." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Sequências do mixmaster são limitadas a %d elementos." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "A sequência de reenviadores já está vazia." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "O primeiro elemento da sequência já está selecionado." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "O último elemento da sequência já está selecionado." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "O mixmaster não aceita cabeçalhos Cc ou Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Por favor, defina a variável hostname para um valor adequado quando for\n" +"usar o mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Erro ao enviar mensagem, processo filho terminou com código %d\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Erro ao enviar mensagem." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Entrada mal formatada para o tipo %s em \"%s\" linha %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Nenhum caminho de mailcap especificado" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "entrada no mailcap para o tipo %s não foi encontrada." + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: poucos argumentos" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: muitos argumentos" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Sem assunto, cancelar?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Sem assunto, cancelado." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Responder para %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Responder para %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Nenhuma mensagem marcada está visível!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Incluir mensagem na resposta?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Enviando mensagem citada..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Não foi possível incluir todas as mensagens solicitadas!" + +#: send.c:762 +#, fuzzy +msgid "Forward as attachment?" +msgstr "Imprimir anexo?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Preparando mensagem encaminhada..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Editar mensagem adiada?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Preparando mensagem encaminhada..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Cancelar mensagem não modificada?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Mensagem não modificada cancelada." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Mensagem não enviada." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Mensagem adiada." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Nenhum destinatário está especificado!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Nenhum destinatário foi especificado." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Sem assunto, cancelar envio?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Nenhum assunto especificado." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Enviando mensagem..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Não foi possível enviar a mensagem." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Mensagem enviada." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Enviando em segundo plano." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Nenhum parâmetro de fronteira encontrado! [relate este erro]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s não mais existe!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s não é uma caixa de correio." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Não foi possível abrir %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Erro ao enviar a mensagem, processo filho saiu com código %d" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Saída do processo de entrega" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Saindo.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "%s recebido... Saindo.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Sinal %d recebido... Saindo.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Sair " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Mês inválido: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Desconhecido" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Entre a keyID para %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Chaves do PGP que casam com \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Usar keyID = \"%s\" para %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "Usar keyID = \"%s\" para %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Erro: não foi possível criar o subprocesso do PGP! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Não é possível criar o filtro." + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(nenhuma caixa de mensagens)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Aviso: Não foi possível salvar o certificado" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "Não foi possível abrir o subprocesso do PGP!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Fim da saída do PGP --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Erro: não foi possível criar o subprocesso do PGP! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Os dados a seguir estão encriptados com PGP/MIME --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Os dados a seguir estão assinados --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Fim dos dados encriptados com PGP/MIME --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Fim dos dados assinados --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Ordenando caixa..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "" +"Não foi possível encontrar a função de ordenação! [relate este problema]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(nenhuma caixa de mensagens)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "A mensagem pai não está visível nesta visão limitada" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "A mensagem pai não está disponível." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Executando PGP..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Repetir mensagem para %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Repetir mensagens para %s...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "escamq" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certificado salvo" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "O nível de confiança deste ID é indeterminado." + +#~ msgid "Decode-save" +#~ msgstr "Decodificar-salvar" + +#~ msgid "Decode-copy" +#~ msgstr "Decodificar-copiar" + +#~ msgid "Decrypt-save" +#~ msgstr "Desencriptar-salvar" + +#~ msgid "Decrypt-copy" +#~ msgstr "Desencriptar-copiar" + +#~ msgid "Copy" +#~ msgstr "Copiar" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Fim da saída do PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Impossível consultar: %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: não existe tal comando" + +#, fuzzy +#~ msgid "Authentication method is unknown." +#~ msgstr "Autenticação GSSAPI falhou." + +#~ msgid "MIC algorithm: " +#~ msgstr "Algoritmo MIC: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Isto não faz sentido se você não quer assinar a mensagem." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "Algoritmo MIC desconhecido, use pgp-md5, pgp-sha1 ou pgp-rmd160" + +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "Implementação de SHA1 Copyright (C) 1995-1997 Eric A. Young " +#~ "<eay@cryptsoft.com>\n" +#~ "\n" +#~ " Redistribuição e uso em forma binária ou código fonte, com ou sem\n" +#~ " modificações, são permitidas sob certas condições.\n" +#~ "\n" +#~ " A implementação de SHA1 vem COMO ESTÁ, e QUALQUER GARANTIA, EXPRESSA\n" +#~ " OU IMPLÍCITA, incluindo, mas não se limitando a, as garantias " +#~ "implícitas\n" +#~ " de comerciabilidade e funcionalidade para um determinado propósito, " +#~ "ESTÃO\n" +#~ " REVOGADAS.\n" +#~ "\n" +#~ " Você deve ter recebido uma cópia dos termos de distribuição " +#~ "completos\n" +#~ " junto com este programa; caso contrário, escreva para os " +#~ "desenvolvedores\n" +#~ " do programa.\n" + +#, fuzzy +#~ msgid "POP Username: " +#~ msgstr "Nome do usuário IMAP: " + +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Lendo nova mensagem (%d bytes)..." + +#~ msgid "Error reading message!" +#~ msgstr "Erro ao ler mensagem!" + +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d mensagem lida]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "Ainda não é possível criar caixas de correio." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Reabrindo a caixa... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Fechando caixa de mensagens..." + +#~ msgid "IMAP Username: " +#~ msgstr "Nome do usuário IMAP: " + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "Chave CRAM para %s@%s: " + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "Pulando a autenticação CRAM-MD5." + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- Erro: fim de arquivo inesperado! --]\n" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "Enviando o comando APPEND..." + +#~ msgid "%d kept." +#~ msgstr "%d mantidas." + +#~ msgid "POP Password: " +#~ msgstr "Senha POP: " + +#~ msgid "No POP username is defined." +#~ msgstr "Nenhum nome de usuário POP definido." + +#~ msgid "Could not find address for host %s." +#~ msgstr "Não foi possível encontrar o endereço do servidor %s." + +#~ msgid "Attachment saved" +#~ msgstr "Anexo salvo" + +#~ msgid "Can't open %s: %s." +#~ msgstr "Não foi possível abrir %s: %s." + +#, fuzzy +#~ msgid "Error while recoding %s. Leave it unchanged." +#~ msgstr "Erro ao gravar %s. Veja %s para recuperar seus dados." + +#~ msgid "Error while recoding %s. See %s for recovering your data." +#~ msgstr "Erro ao gravar %s. Veja %s para recuperar seus dados." + +#~ msgid "Can't change character set for non-text attachments!" +#~ msgstr "" +#~ "Não é possível mudar o conjunto de caracteres para anexos não-texto!" + +#~ msgid "Enter character set: " +#~ msgstr "Informe o conjunto de caracteres: " + +#~ msgid "Recoding successful." +#~ msgstr "Gravação bem sucedida." + +#~ msgid "change an attachment's character set" +#~ msgstr "muda o conjunto de caracteres do anexo" + +#~ msgid "recode this attachment to/from the local charset" +#~ msgstr "recodifica este anexo para/de o conjunto de caracteres local" + +#~ msgid "Compose" +#~ msgstr "Compor" + +#~ msgid "We can't currently handle utf-8 at this point." +#~ msgstr "Ainda não posso manipular UTF-8." + +#~ msgid "UTF-8 encoding attachments has not yet been implemented." +#~ msgstr "Anexos codificados como UTF-8 ainda não funcionam." + +#~ msgid "We currently can't encode to utf-8." +#~ msgstr "Ainda não é possível codificar como UTF-8" + +#~ msgid "move to the last undelete message" +#~ msgstr "anda até a última mensagem não apagada" + +#~ msgid "return to the main-menu" +#~ msgstr "retorna ao menu principal" + +#~ msgid "Sending CREATE command ..." +#~ msgstr "Enviando o comando CREATE..." + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "Não foi possível abrir seu chaveiro secreto!" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "Uma versão desconhecida do PGP foi definida para assinatura." + +#~ msgid "===== Attachments =====" +#~ msgstr "===== Anexos =====" + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_error(): resposta inesperada em %s: %s\n" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "ignorando campo de cabeçalho vazio: %s" + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "Versão \"%s\" do PGP desconhecida." + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- Erro: esta mensagem não está de acordo com a especificação PGP/MIME! " +#~ "--]\n" +#~ "\n" + +#~ msgid "reserved" +#~ msgstr "reservado" + +#~ msgid "Encrypted Session Key" +#~ msgstr "Chave de Sessão Encriptada" + +#~ msgid "Signature Packet" +#~ msgstr "Pacote de Assinatura" + +#~ msgid "Conventionally Encrypted Session Key Packet" +#~ msgstr "Pacote de Chaves de Sessão Convencionalmente Ecriptado" + +#~ msgid "One-Pass Signature Packet" +#~ msgstr "Pacote de Assinatura de Um Passo" + +#~ msgid "Secret Key Packet" +#~ msgstr "Pacote de Chave Secreta" + +#~ msgid "Public Key Packet" +#~ msgstr "Pacote de Chave Pública" + +#~ msgid "Secret Subkey Packet" +#~ msgstr "Pacote de Subchave Secreta" + +#~ msgid "Compressed Data Packet" +#~ msgstr "Pacotes de Dados Compactado" + +#~ msgid "Symmetrically Encrypted Data Packet" +#~ msgstr "Pacote de Dados Simetricamente Encriptado" + +#~ msgid "Marker Packet" +#~ msgstr "Pacote de Marcação" + +#~ msgid "Literal Data Packet" +#~ msgstr "Pacotes de Dados Literais" + +#~ msgid "Trust Packet" +#~ msgstr "Pacote de Confiança" + +#~ msgid "Name Packet" +#~ msgstr "Pacote de Nome" + +#~ msgid "Subkey Packet" +#~ msgstr "Pacote de Subchave" + +#~ msgid "Reserved" +#~ msgstr "Reservado" + +#~ msgid "Comment Packet" +#~ msgstr "Pacote de Comentário" + +#~ msgid "Message edited. Really send?" +#~ msgstr "Mensagem editada. Realmente enviar?" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "Saída do processo filho salva em %s.\n" diff --git a/po/ru.gmo b/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8c2249830504142b95c2f71885ee716a664d798d GIT binary patch literal 82433 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 literal 0 HcmV?d00001 diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..72a1ce4 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,4170 @@ +# This file was prepared by (in alphabetical order): +# +# Alexey Vyskubov (alexey@pepper.spb.ru) +# Andrew W. Nosenko (awn@bcs.zp.ua) +# Michael Sobolev (mss@transas.com) +# Vsevolod Volkov (vvv@mutt.org.ua) +# +# To contact translators, please use mutt-ru mailing list: +# http://woe.spb.ru/mailman/listinfo/mutt-ru +# +msgid "" +msgstr "" +"Project-Id-Version: mutt-1.5.5.1i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2003-11-06 12:34+0200\n" +"Last-Translator: mutt-ru@woe.spb.ru\n" +"Language-Team: RUSSIAN <mutt-ru@woe.spb.ru>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=koi8-r\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "ðÁÒÏÌØ ÄÌÑ %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "÷ÙÈÏÄ" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "õÄÁÌÉÔØ" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "÷ÏÓÓÔÁÎÏ×ÉÔØ" + +#: addrbook.c:36 +msgid "Select" +msgstr "÷ÙÂÒÁÔØ" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "ðÏÍÏÝØ" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "óÐÉÓÏË ÐÓÅ×ÄÏÎÉÍÏ× ÏÔÓÕÔÓÔ×ÕÅÔ!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "ðÓÅ×ÄÏÎÉÍÙ" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "ðÓÅ×ÄÏÎÉÍ: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "ôÁËÏÊ ÐÓÅ×ÄÏÎÉÍ ÕÖÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: üÔÏÔ ÐÓÅ×ÄÏÎÉÍ ÍÏÖÅÔ ÎÅ ÒÁÂÏÔÁÔØ. éÓÐÒÁ×ÉÔØ?" + +#: alias.c:279 +msgid "Address: " +msgstr "áÄÒÅÓ: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "ïÛÉÂËÁ: '%s' ÎÅ Ñ×ÌÑÅÔÓÑ ËÏÒÒÅËÔÎÙÍ IDN." + +#: alias.c:301 +msgid "Personal name: " +msgstr "ðÏÌÎÏÅ ÉÍÑ: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] ðÒÉÎÑÔØ?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "óÏÈÒÁÎÉÔØ × ÆÁÊÌ: " + +#: alias.c:342 +msgid "Alias added." +msgstr "ðÓÅ×ÄÏÎÉÍ ÓÏÚÄÁÎ." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "îÅ ÕÄÁÌÏÓØ ÒÁÚÏÂÒÁÔØ ÉÍÑ. ðÒÏÄÏÌÖÉÔØ?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "õËÁÚÁÎÎÙÊ × mailcap ÓÐÏÓÏ ÓÏÚÄÁÎÉÑ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "ïÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÒÁÚÂÏÒÁ ÚÁÇÏÌÏ×ËÏ×." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÕÄÁÌÅÎÉÑ ÚÁÇÏÌÏ×ËÏ×." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "÷ mailcap ÎÅ ÏÐÒÅÄÅÌÅÎ ÓÐÏÓÏ ÓÏÚÄÁÎÉÑ ÄÌÑ %s; ÓÏÚÄÁÎ ÐÕÓÔÏÊ ÆÁÊÌ." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "" +"õËÁÚÁÎÎÙÊ × mailcap ÓÐÏÓÏ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "÷ mailcap ÎÅ ÏÐÒÅÄÅÌÅÎ ÓÐÏÓÏ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÄÌÑ %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "ðÏÄÈÏÄÑÝÁÑ ÚÁÐÉÓØ × mailcap ÎÅ ÎÁÊÄÅÎÁ; ÐÒÏÓÍÏÔÒ ËÁË ÔÅËÓÔÁ." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME-ÔÉÐ ÎÅ ÏÐÒÅÄÅÌÅÎ. îÅ×ÏÚÍÏÖÎÏ ÐÒÏÓÍÏÔÒÅÔØ ×ÌÏÖÅÎÉÅ." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÉÌØÔÒ" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÉÌØÔÒ" + +#: attach.c:824 +msgid "Write fault!" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "îÅÉÚ×ÅÓÔÎÏ, ËÁË ÜÔÏ ÐÅÞÁÔÁÔØ!" + +#: browser.c:41 +msgid "Chdir" +msgstr "ðÅÒÅÊÔÉ ×: " + +#: browser.c:42 +msgid "Mask" +msgstr "íÁÓËÁ" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "ðÏÞÔÏ×ÙÅ ÑÝÉËÉ [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "ðÏÄËÌÀÞÅÎÉÅ [%s], ÍÁÓËÁ ÆÁÊÌÁ: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "ëÁÔÁÌÏÇ [%s], ÍÁÓËÁ ÆÁÊÌÁ: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "÷ÌÏÖÅÎÉÅ ËÁÔÁÌÏÇÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "îÅÔ ÆÁÊÌÏ×, ÕÄÏ×ÌÅÔ×ÏÒÑÀÝÉÈ ÄÁÎÎÏÊ ÍÁÓËÅ" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "óÏÚÄÁÎÉÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÄÌÑ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× ÎÁ IMAP-ÓÅÒ×ÅÒÁÈ" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "õÄÁÌÅÎÉÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÄÌÑ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× ÎÁ IMAP-ÓÅÒ×ÅÒÁÈ" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "õÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÕÄÁÌÅÎ." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÎÅ ÕÄÁÌÅÎ." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "ðÅÒÅÊÔÉ ×: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "ïÛÉÂËÁ ÐÒÏÓÍÏÔÒÁ ËÁÔÁÌÏÇÁ." + +#: browser.c:975 +msgid "File Mask: " +msgstr "íÁÓËÁ ÆÁÊÌÁ: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "ïÂÒÁÔÎÙÊ ÐÏÒÑÄÏË ÐÏ (d)ÄÁÔÅ, (a)ÉÍÅÎÉ, (z)ÒÁÚÍÅÒÕ ÉÌÉ (n)ÏÔÓÕÔÓÔ×ÕÅÔ?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "õÐÏÒÑÄÏÞÉÔØ ÐÏ (d)ÄÁÔÅ, (a)ÉÍÅÎÉ, (z)ÒÁÚÍÅÒÕ ÉÌÉ (n)ÏÔÓÕÔÓÔ×ÕÅÔ?" + +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "îÏ×ÏÅ ÉÍÑ ÆÁÊÌÁ: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "îÅ ÕÄÁÌÏÓØ ÐÒÏÓÍÏÔÒÅÔØ ËÁÔÁÌÏÇ" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÐÙÔËÅ ÐÒÏÓÍÏÔÒÁ ÆÁÊÌÁ" + +#: buffy.c:442 +msgid "New mail in " +msgstr "îÏ×ÁÑ ÐÏÞÔÁ × " + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: Ã×ÅÔ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÅÒÍÉÎÁÌÏÍ" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: ÎÅÔ ÔÁËÏÇÏ Ã×ÅÔÁ" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: ÎÅÔ ÔÁËÏÇÏ ÏÂßÅËÔÁ" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: ËÏÍÁÎÄÁ ÄÏÓÔÕÐÎÁ ÔÏÌØËÏ ÄÌÑ ÉÎÄÅËÓÁ" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×" + +#: color.c:563 +msgid "Missing arguments." +msgstr "îÅÏÂÈÏÄÉÍÙÅ ÁÒÇÕÍÅÎÔÙ ÏÔÓÕÔÓÔ×ÕÀÔ." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: ÎÅÔ ÔÁËÏÇÏ ÁÔÒÉÂÕÔÁ" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×" + +#: color.c:721 +msgid "default colors not supported" +msgstr "Ã×ÅÔÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "ðÒÏ×ÅÒÉÔØ PGP-ÐÏÄÐÉÓØ?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÉÌØÔÒ ÐÒÏÓÍÏÔÒÁ" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "îÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "S/MIME-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÅÎÁ." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "ïÔÐÒÁ×ÉÔÅÌØ ÓÏÏÂÝÅÎÉÑ ÎÅ Ñ×ÌÑÅÔÓÑ ×ÌÁÄÅÌØÃÅÍ S/MIME-ÓÅÒÔÉÆÉËÁÔÁ." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "S/MIME-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÉÔØ îå ÕÄÁÌÏÓØ." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÅÎÁ." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP-ÐÏÄÐÉÓØ ÐÒÏ×ÅÒÉÔØ îå ÕÄÁÌÏÓØ." + +#: commands.c:223 +msgid "Command: " +msgstr "ëÏÍÁÎÄÁ: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "ïÛÉÂËÁ ÒÁÚÂÏÒÁ ÁÄÒÅÓÁ!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN: '%s'" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "ðÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ %s" + +#: commands.c:294 recvcmd.c:192 +msgid "Message not bounced." +msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÏ." + +#: commands.c:294 recvcmd.c:192 +msgid "Messages not bounced." +msgstr "óÏÏÂÝÅÎÉÑ ÎÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "óÏÏÂÝÅÎÉÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÏ." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "óÏÏÂÝÅÎÉÑ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ ÆÉÌØÔÒÁ" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "ðÅÒÅÄÁÔØ ÐÒÏÇÒÁÍÍÅ: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "ëÏÍÁÎÄÁ ÄÌÑ ÐÅÞÁÔÉ ÎÅ ÏÐÒÅÄÅÌÅÎÁ." + +#: commands.c:483 +msgid "Print message?" +msgstr "îÁÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÅ?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "îÁÐÅÞÁÔÁÔØ ÏÔÍÅÞÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ?" + +#: commands.c:492 +msgid "Message printed" +msgstr "óÏÏÂÝÅÎÉÅ ÎÁÐÅÞÁÔÁÎÏ" + +#: commands.c:492 +msgid "Messages printed" +msgstr "óÏÏÂÝÅÎÉÑ ÎÁÐÅÞÁÔÁÎÙ" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "îÅ ÕÄÁÌÏÓØ ÎÁÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÅ" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "îÅ ÕÄÁÌÏÓØ ÎÁÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÑ" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"ïÂÒ.ÐÏÒ.:(d)ÄÁÔÁ/(f)ÏÔ/(r)ÐÏÌÕÞ/(s)ÔÅÍÁ/(o)ËÏÍÕ/(t)ÄÉÓË/(u)ÂÅÚ/(z)ÒÁÚÍ/(c)" +"ËÏÎÔ?" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"ðÏÒÑÄÏË:(d)ÄÁÔÁ/(f)ÏÔ/(r)ÐÏÌÕÞ/(s)ÔÅÍÁ/(o)ËÏÍÕ/(t)ÄÉÓË/(u)ÂÅÚ/(z)ÒÁÚÍ/(c)" +"ËÏÎÔ?" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "ðÒÏÇÒÁÍÍÁ: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "äÅËÏÄÉÒÏ×ÁÔØ É ÓÏÈÒÁÎÉÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "äÅËÏÄÉÒÏ×ÁÔØ É ËÏÐÉÒÏ×ÁÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "òÁÓÛÉÆÒÏ×ÁÔØ É ÓÏÈÒÁÎÉÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "òÁÓÛÉÆÒÏ×ÁÔØ É ËÏÐÉÒÏ×ÁÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "óÏÈÒÁÎÉÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "ëÏÐÉÒÏ×ÁÔØ%s × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: commands.c:706 +msgid " tagged" +msgstr " ÐÏÍÅÞÅÎÎÏÅ" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "ëÏÐÉÒÕÅÔÓÑ × %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "ðÅÒÅËÏÄÉÒÏ×ÁÔØ × %s ÐÒÉ ÏÔÐÒÁ×ËÅ?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "úÎÁÞÅÎÉÅ Content-Type ÉÚÍÅÎÅÎÏ ÎÁ %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "õÓÔÁÎÏ×ÌÅÎÁ ÎÏ×ÁÑ ËÏÄÉÒÏ×ËÁ: %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "ÎÅ ÐÅÒÅËÏÄÉÒÏ×ÁÔØ" + +#: commands.c:914 +msgid "converting" +msgstr "ÐÅÒÅËÏÄÉÒÏ×ÁÔØ" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "÷ÌÏÖÅÎÉÊ ÎÅÔ." + +#: compose.c:84 +msgid "Send" +msgstr "ïÔÐÒÁ×ÉÔØ" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "ðÒÅÒ×ÁÔØ" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "÷ÌÏÖÉÔØ ÆÁÊÌ" + +#: compose.c:90 +msgid "Descrip" +msgstr "ïÐÉÓÁÎÉÅ" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "ðÏÄÐÉÓÁÔØ É ÚÁÛÉÆÒÏ×ÁÔØ" + +#: compose.c:129 +msgid "Encrypt" +msgstr "úÁÛÉÆÒÏ×ÁÔØ" + +#: compose.c:131 +msgid "Sign" +msgstr "ðÏÄÐÉÓÁÔØ" + +#: compose.c:133 +msgid "Clear" +msgstr "îÅ ÐÒÉÍÅÎÑÔØ" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " ÐÏÄÐÉÓÁÔØ ËÁË: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<ÐÏ ÕÍÏÌÞÁÎÉÀ>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "úÁÛÉÆÒÏ×ÁÔØ: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP (e)ÛÉÆÒ, (s)ÐÏÄÐÉÓØ, (a)ÐÏÄÐÉÓØ ËÁË, (b)ÏÂÁ, (f)ÏÔËÁÚÁÔØÓÑ? " + +#: compose.c:166 +msgid "esabf" +msgstr "esabf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "ðÏÄÐÉÓÁÔØ ËÁË: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME (e)ÛÉÆÒ, (s)ÐÏÄÐÉÓØ, (w)ÛÉÆÒ ËÁË, (a)ÐÏÄÐÉÓØ ËÁË, (b)ÏÂÁ, (f)ÏÔËÁÚ? " + +#: compose.c:228 +msgid "eswabf" +msgstr "eswabf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, (f)ÏÔËÁÚÁÔØÓÑ? " + +#: compose.c:238 +msgid "12345f" +msgstr "12345f" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ÕÖÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] ÉÚÍÅÎÅÎ. ïÂÎÏ×ÉÔØ ËÏÄÉÒÏ×ËÕ?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- ÷ÌÏÖÅÎÉÑ" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: '%s' ÎÅ Ñ×ÌÑÅÔÓÑ ËÏÒÒÅËÔÎÙÍ IDN." + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÕÄÁÌÉÔØ ÅÄÉÎÓÔ×ÅÎÎÏÅ ×ÌÏÖÅÎÉÅ." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN × \"%s\": '%s'." + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "÷ËÌÁÄÙ×ÁÀÔÓÑ ÐÏÍÅÞÅÎÎÙÅ ÆÁÊÌÙ..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "îÅ ÕÄÁÌÏÓØ ×ÌÏÖÉÔØ %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "÷ÌÏÖÉÔØ ÓÏÏÂÝÅÎÉÅ ÉÚ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "÷ ÜÔÏÍ ÐÏÞÔÏ×ÏÍ ÑÝÉËÅ/ÆÁÊÌÅ ÎÅÔ ÓÏÏÂÝÅÎÉÊ." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "ðÏÍÅÔØÔÅ ÓÏÏÂÝÅÎÉÑ, ËÏÔÏÒÙÅ ×Ù ÈÏÔÉÔÅ ×ÌÏÖÉÔØ!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÌÏÖÅÎÉÅ!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "ðÅÒÅËÏÄÉÒÏ×ÁÎÉÅ ÄÏÐÕÓÔÉÍÏ ÔÏÌØËÏ ÄÌÑ ÔÅËÓÔÏ×ÙÈ ×ÌÏÖÅÎÉÊ." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "ôÅËÕÝÅÅ ×ÌÏÖÅÎÉÅ ÎÅ ÂÕÄÅÔ ÐÅÒÅËÏÄÉÒÏ×ÁÎÏ." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "ôÅËÕÝÅÅ ×ÌÏÖÅÎÉÅ ÂÕÄÅÔ ÐÅÒÅËÏÄÉÒÏ×ÁÎÏ." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "îÅ×ÅÒÎÁÑ ËÏÄÉÒÏ×ËÁ." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "óÏÈÒÁÎÉÔØ ËÏÐÉÀ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ ×: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "îÏ×ÙÊ ÆÁÊÌ: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "ðÏÌÅ Content-Type ÄÏÌÖÎÏ ÉÍÅÔØ ×ÉÄ ÔÉÐ/ÐÏÄÔÉÐ" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ ÐÏÌÑ Content-Type: %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÁÊÌ %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÌÏÖÅÎÉÅ" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "ïÔÌÏÖÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "úÁÐÉÓÁÔØ ÓÏÏÂÝÅÎÉÅ × ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "óÏÏÂÝÅÎÉÅ ÚÁÐÉÓÙ×ÁÅÔÓÑ × %s..." + +#: compose.c:1305 +msgid "Message written." +msgstr "óÏÏÂÝÅÎÉÅ ÚÁÐÉÓÁÎÏ." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ. ïÞÉÓÔÉÔØ É ÐÒÏÄÏÌÖÉÔØ? " + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ. ïÞÉÓÔÉÔØ É ÐÒÏÄÏÌÖÉÔØ? " + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (ÔÅËÕÝÅÅ ×ÒÅÍÑ: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- òÅÚÕÌØÔÁÔ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ %s%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "æÒÁÚÙ-ÐÁÒÏÌÉ ÕÄÁÌÅÎÙ ÉÚ ÐÁÍÑÔÉ." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "÷×ÅÄÉÔÅ PGP ÆÒÁÚÕ-ÐÁÒÏÌØ:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "÷×ÅÄÉÔÅ S/MIME ÆÒÁÚÕ-ÐÁÒÏÌØ:" + +#: crypt.c:192 +msgid "Create a traditional (inline) PGP message?" +msgstr "óÏÚÄÁÔØ PGP-ÓÏÏÂÝÅÎÉÅ × ÔÅËÓÔÏ×ÏÍ ÆÏÒÍÁÔÅ?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÁ PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "S/MIME-ÓÏÏÂÝÅÎÉÑ ÂÅÚ ÕËÁÚÁÎÉÑ ÔÉÐÁ ÓÏÄÅÒÖÉÍÏÇÏ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "ðÏÐÙÔËÁ ÉÚ×ÌÅÞØ PGP ËÌÀÞÉ...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "ðÏÐÙÔËÁ ÉÚ×ÌÅÞØ S/MIME ÓÅÒÔÉÆÉËÁÔÙ...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÎÁÒÕÛÅÎÁ ÓÔÒÕËÔÕÒÁ multipart/signed-ÓÏÏÂÝÅÎÉÑ! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÎÅÉÚ×ÅÓÔÎÙÊ multipart/signed ÐÒÏÔÏËÏÌ %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÕÄÁÌÏÓØ ÐÒÏ×ÅÒÉÔØ %s/%s ÐÏÄÐÉÓÉ. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- îÁÞÁÌÏ ÐÏÄÐÉÓÁÎÎÙÈ ÄÁÎÎÙÈ --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÎÁÊÄÅÎÏ ÎÉ ÏÄÎÏÊ ÐÏÄÐÉÓÉ. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- ëÏÎÅà ÐÏÄÐÉÓÁÎÎÙÈ ÄÁÎÎÙÈ --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "ÄÁ" + +#: curs_lib.c:158 +msgid "no" +msgstr "ÎÅÔ" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "úÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ Ó Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "þÔÏÂÙ ÐÒÏÄÏÌÖÉÔØ, ÎÁÖÍÉÔÅ ÌÀÂÕÀ ËÌÁ×ÉÛÕ..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' -- ÓÐÉÓÏË): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "îÅÔ ÏÔËÒÙÔÏÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "óÏÏÂÝÅÎÉÊ ÎÅÔ." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÎÅÍÏÄÉÆÉÃÉÒÕÅÍ." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "÷ ÒÅÖÉÍÅ \"×ÌÏÖÉÔØ ÓÏÏÂÝÅÎÉÅ\" ÆÕÎËÃÉÑ ÎÅÄÏÓÔÕÐÎÁ." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "îÅÔ ×ÉÄÉÍÙÈ ÓÏÏÂÝÅÎÉÊ." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "îÅ ÍÏÇÕ ÒÁÚÒÅÛÉÔØ ÚÁÐÉÓØ × ÐÏÞÔÏ×ÙÊ ÑÝÉË, ÏÔËÒÙÔÙÊ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "éÚÍÅÎÅÎÉÑ × ÓÏÓÔÏÑÎÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÂÕÄÕÔ ×ÎÅÓÅÎÙ ÐÒÉ ÅÇÏ ÚÁËÒÙÔÉÉ." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "éÚÍÅÎÅÎÉÑ × ÓÏÓÔÏÑÎÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÎÅ ÂÕÄÕÔ ×ÎÅÓÅÎÙ." + +#: curs_main.c:397 +msgid "Quit" +msgstr "÷ÙÈÏÄ" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "óÏÈÒÁÎÉÔØ" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "óÏÚÄÁÔØ" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "ïÔ×ÅÔÉÔØ" + +#: curs_main.c:403 +msgid "Group" +msgstr "÷ÓÅÍ" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "" +"ñÝÉË ÂÙÌ ÉÚÍÅÎÅÎ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ. úÎÁÞÅÎÉÑ ÆÌÁÇÏ× ÍÏÇÕÔ ÂÙÔØ ÎÅËÏÒÒÅËÔÎÙ." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "îÏ×ÁÑ ÐÏÞÔÁ × ÜÔÏÍ ÑÝÉËÅ." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "ñÝÉË ÂÙÌ ÉÚÍÅÎÅÎ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "îÅÔ ÏÔÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ." + +#: curs_main.c:653 menu.c:896 +msgid "Nothing to do." +msgstr "îÅÔ ÐÏÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "ðÅÒÅÊÔÉ Ë ÓÏÏÂÝÅÎÉÀ: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "áÒÇÕÍÅÎÔ ÄÏÌÖÅÎ ÂÙÔØ ÎÏÍÅÒÏÍ ÓÏÏÂÝÅÎÉÑ." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "üÔÏ ÓÏÏÂÝÅÎÉÅ ÎÅ×ÉÄÉÍÏ." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "õÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "ûÁÂÌÏÎ ÏÇÒÁÎÉÞÅÎÉÑ ÓÐÉÓËÁ ÏÔÓÕÔÓÔ×ÕÅÔ." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "ûÁÂÌÏÎ ÏÇÒÁÎÉÞÅÎÉÑ: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "ïÇÒÁÎÉÞÉÔØÓÑ ÓÏÏÂÝÅÎÉÑÍÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍÉ: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "÷ÙÊÔÉ ÉÚ Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "ðÏÍÅÔÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "÷ÏÓÓÔÁÎÏ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "óÎÑÔØ ÐÏÍÅÔËÕ Ó ÓÏÏÂÝÅÎÉÊ ÐÏ ÏÂÒÁÚÃÕ: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "ïÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "ïÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÞÔÏ×ÙÍ ÑÝÉËÏÍ." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "÷ÙÊÔÉ ÉÚ Mutt ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ÉÚÍÅÎÅÎÉÊ?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "üÔÏ ÐÏÓÌÅÄÎÅÅ ÓÏÏÂÝÅÎÉÅ." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "îÅÔ ×ÏÓÓÔÁÎÏ×ÌÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "üÔÏ ÐÅÒ×ÏÅ ÓÏÏÂÝÅÎÉÅ." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "äÏÓÔÉÇÎÕÔ ËÏÎÅÃ; ÐÒÏÄÏÌÖÁÅÍ ÐÏÉÓË Ó ÎÁÞÁÌÁ." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "äÏÓÔÉÇÎÕÔÏ ÎÁÞÁÌÏ; ÐÒÏÄÏÌÖÁÅÍ ÐÏÉÓË Ó ËÏÎÃÁ." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "îÅÔ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "îÅÔ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " ÐÒÉ ÐÒÏÓÍÏÔÒÅ Ó ÏÇÒÁÎÉÞÅÎÉÅÍ" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "éÚÍÅÎÅÎÉÅ ÆÌÁÇÁ '×ÁÖÎÏÅ' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "îÅÔ ÂÏÌØÛÅ ÄÉÓËÕÓÓÉÊ." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "üÔÏ ÐÅÒ×ÁÑ ÄÉÓËÕÓÓÉÑ" + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "çÒÕÐÐÉÒÏ×ËÁ ÐÏ ÄÉÓËÕÓÓÉÑÍ ÎÅ ×ËÌÀÞÅÎÁ." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "÷ ÄÉÓËÕÓÓÉÉ ÐÒÉÓÕÔÓÔ×ÕÀÔ ÎÅÐÒÏÞÉÔÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\t\t××ÅÓÔÉ ÓÔÒÏËÕ, ÎÁÞÉÎÁÀÝÕÀÓÑ Ó ÓÉÍ×ÏÌÁ ~\n" +"~b ÐÏÌØÚÏ×ÁÔÅÌÉ\tÏÔÐÒÁ×ÉÔØ ÄÁÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ \"ÓÌÅÐÕÀ\" ËÏÐÉÀ\n" +"~c ÐÏÌØÚÏ×ÁÔÅÌÉ\tÏÔÐÒÁ×ÉÔØ ÄÁÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ ËÏÐÉÀ\n" +"~f ÓÏÏÂÝÅÎÉÑ\t\t×ËÌÀÞÉÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ\n" +"~F ÓÏÏÂÝÅÎÉÑ\t\t×ËÌÀÞÉÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ É ÉÈ ÚÁÇÏÌÏ×ËÉ\n" +"~h\t\t\tÒÅÄÁËÔÉÒÏ×ÁÔØ ÚÁÇÏÌÏ×ËÉ ÓÏÏÂÝÅÎÉÑ\n" +"~m ÓÏÏÂÝÅÎÉÑ\t\tÐÒÏÃÉÔÉÒÏ×ÁÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ\n" +"~M ÓÏÏÂÝÅÎÉÑ\t\tÐÒÏÃÉÔÉÒÏ×ÁÔØ ÄÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ É ÉÈ ÚÁÇÏÌÏ×ËÉ\n" +"~p\t\t\tÎÁÐÅÞÁÔÁÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ\n" +"~q\t\t\tÚÁÐÉÓÁÔØ ÆÁÊÌ É ×ÙÊÔÉ ÉÚ ÒÅÄÁËÔÏÒÁ\n" +"~r ÆÁÊÌ\t\t×ËÌÀÞÉÔØ ÄÁÎÎÙÊ ÆÁÊÌ\n" +"~t ÐÏÌØÚÏ×ÁÔÅÌÉ\tÄÏÂÁ×ÉÔØ ÄÁÎÎÙÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ × ÓÐÉÓÏË ÁÄÒÅÓÁÔÏ×\n" +"~u\t\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÅÄÙÄÕÝÕÀ ÓÔÒÏËÕ\n" +"~v\t\t\tÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ ÐÒÉ ÐÏÍÏÝÉ ×ÎÅÛÎÅÇÏ ÒÅÄÁËÔÏÒÁ\n" +"~w ÆÁÊÌ\t\tÓÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ × ÆÁÊÌÅ\n" +"~x\t\t\tÏÔËÁÚÁÔØÓÑ ÏÔ ÉÚÍÅÎÅÎÉÊ É ×ÙÊÔÉ ÉÚ ÒÅÄÁËÔÏÒÁ\n" +"~?\t\t\t×Ù×ÅÓÔÉ ÜÔÏ ÓÏÏÂÝÅÎÉÅ\n" +".\t\t\tÓÔÒÏËÁ, ÓÏÄÅÒÖÁÝÁÑ ÔÏÌØËÏ ÔÏÞËÕ, ÚÁËÁÎÞÉ×ÁÅÔ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: ÎÅÄÏÐÕÓÔÉÍÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(äÌÑ ÚÁ×ÅÒÛÅÎÉÑ ××ÅÄÉÔÅ ÓÔÒÏËÕ, ÓÏÄÅÒÖÁÝÕÀ ÔÏÌØËÏ .)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "îÅÔ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "óÏÏÂÝÅÎÉÅ ÓÏÄÅÒÖÉÔ:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(ÐÒÏÄÏÌÖÉÔØ)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÉÍÑ ÆÁÊÌÁ.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "ôÅËÓÔ ÓÏÏÂÝÅÎÉÑ ÏÔÓÕÔÓÔ×ÕÅÔ.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN × %s: '%s'\n" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ ÒÅÄÁËÔÏÒÁ (××ÅÄÉÔÅ ~? ÄÌÑ ÓÐÒÁ×ËÉ)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ×Ï ×ÒÅÍÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s" + +#: editmsg.c:101 +#, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÅÞØ ×ÒÅÍÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "æÁÊÌ ÓÏÏÂÝÅÎÉÑ ÐÕÓÔ!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÉÚÍÅÎÉÌÏÓØ!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÓÏÏÂÝÅÎÉÑ: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÄÏÂÁ×ÉÔØ Ë ÐÏÞÔÏ×ÏÍÕ ÑÝÉËÕ: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "ïÛÉÂËÁ. ÷ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÏÓÔÁ×ÌÅÎ: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "õÓÔÁÎÏ×ÉÔØ ÆÌÁÇ" + +#: flags.c:332 +msgid "Clear flag" +msgstr "óÂÒÏÓÉÔØ ÆÌÁÇ" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÐÏËÁÚÁÔØ ÎÉ ÏÄÎÕ ÉÚ ÞÁÓÔÅÊ Multipart/Alternative! " +"--]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- ÷ÌÏÖÅÎÉÅ #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- ôÉÐ: %s/%s, ËÏÄÉÒÏ×ËÁ: %s, ÒÁÚÍÅÒ: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- á×ÔÏÐÒÏÓÍÏÔÒ; ÉÓÐÏÌØÚÕÅÔÓÑ %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÁ Á×ÔÏÐÒÏÓÍÏÔÒÁ: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- îÅ ÕÄÁÌÏÓØ ×ÙÐÏÌÎÉÔØ %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- á×ÔÏÐÒÏÓÍÏÔÒ ÓÔÁÎÄÁÒÔÎÏÇÏ ÐÏÔÏËÁ ÏÛÉÂÏË %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÔÉÐ message/external ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÐÁÒÁÍÅÔÒÁ access-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- üÔÏ ×ÌÏÖÅÎÉÅ ÔÉÐÁ %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(ÒÁÚÍÅÒ %s ÂÁÊÔÏ×) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "ÂÙÌÏ ÕÄÁÌÅÎÏ --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- ÉÍÑ: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- üÔÏ ×ÌÏÖÅÎÉÅ ÔÉÐÁ %s/%s ÎÅ ÂÙÌÏ ×ËÌÀÞÅÎÏ --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- × ÓÏÏÂÝÅÎÉÅ, É ÂÏÌÅÅ ÎÅ ÓÏÄÅÒÖÉÔÓÑ × ÕËÁÚÁÎÎÏÍ --]\n" +"[-- ×ÎÅÛÎÅÍ ÉÓÔÏÞÎÉËÅ. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- × ÓÏÏÂÝÅÎÉÅ, É ÚÎÁÞÅÎÉÅ access-type %s ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "ïÛÉÂËÁ: ÔÉÐ multipart/signed ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ protocol." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "ïÛÉÂËÁ: ÔÉÐ multipart/encrypted ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ protocol!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- ÔÉÐ %s/%s ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(ÉÓÐÏÌØÚÕÊÔÅ '%s' ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÜÔÏÊ ÞÁÓÔÉ)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(ÆÕÎËÃÉÑ 'view-attachments' ÎÅ ÎÁÚÎÁÞÅÎÁ ÎÉ ÏÄÎÏÊ ËÌÁ×ÉÛÅ!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: ÎÅ ÕÄÁÌÏÓØ ×ÌÏÖÉÔØ ÆÁÊÌ" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ïûéâëá: ÐÏÖÁÌÕÊÓÔÁ. ÓÏÏÂÝÉÔÅ Ï ÎÅÊ" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<îåéú÷åóôîï>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"óÔÁÎÄÁÒÔÎÙÅ ÎÁÚÎÁÞÅÎÉÑ:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"îÅÎÁÚÎÁÞÅÎÎÙÅ ÆÕÎËÃÉÉ:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "óÐÒÁ×ËÁ ÄÌÑ %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ unhook * ÉÚ ËÏÍÁÎÄÙ hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÓÏÂÙÔÉÑ: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s ÉÚ ËÏÍÁÎÄÙ %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÍÅÔÏÄÏ× ÁÕÔÅÎÔÉÆÉËÁÃÉÉ." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÁÎÏÎÉÍÎÁÑ)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "ïÛÉÂËÁ ÁÎÏÎÉÍÎÏÊ ÁÕÔÅÎÔÉÆÉËÁÃÉÉ." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "ïÛÉÂËÁ CRAM-MD5-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "ïÛÉÂËÁ GSSAPI-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "ëÏÍÁÎÄÁ LOGIN ÚÁÐÒÅÝÅÎÁ ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "òÅÇÉÓÔÒÁÃÉÑ..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "òÅÇÉÓÔÒÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ." + +#: imap/auth_sasl.c:112 +#, c-format +msgid "Authenticating (%s)..." +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (%s)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "ïÛÉÂËÁ SASL-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "îÅ×ÅÒÎÏ ÕËÁÚÁÎÏ ÉÍÑ IMAP-ÑÝÉËÁ: %s" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÐÒÏÓÔÒÁÎÓÔ× ÉÍÅÎ..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ×..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "îÅÔ ÔÁËÏÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "óÏÚÄÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÄÏÌÖÅÎ ÉÍÅÔØ ÉÍÑ." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÓÏÚÄÁÎ." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÚÁËÒÙÔ" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "ëÒÉÔÉÞÅÓËÁÑ ÏÛÉÂËÁ. óÂÏÊ ÓÉÎÈÒÏÎÉÚÁÃÉÉ ÓÞÅÔÞÉËÁ ÓÏÏÂÝÅÎÉÊ!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ %s..." + +# "mutt ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ×ÅÒÓÉÀ ÐÒÏÔÏËÏÌÁ, ÉÓÐÏÌØÚÕÅÍÙÊ ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ" +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "" +"üÔÏÔ IMAP-ÓÅÒ×ÅÒ ÉÓÐÏÌØÚÕÅÔ ÕÓÔÁÒÅ×ÛÉÊ ÐÒÏÔÏËÏÌ. Mutt ÎÅ ÓÍÏÖÅÔ ÒÁÂÏÔÁÔØ Ó " +"ÎÉÍ." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "ðÏÌÕÞÅÎ ÎÅÐÒÅÄ×ÉÄÅÎÎÙÊ ÏÔ×ÅÔ Ó ÓÅÒ×ÅÒÁ: %s" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÂÅÚÏÐÁÓÎÏÅ TLS-ÓÏÅÄÉÎÅÎÉÅ?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "îÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ TLS-ÓÏÅÄÉÎÅÎÉÅ" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "÷ÙÂÉÒÁÅÔÓÑ %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "îÅ ÕÄÁÌÏÓØ ÄÏÂÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ × IMAP-ÑÝÉË ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ!" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "óÏÚÄÁÔØ %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "%d ÓÏÏÂÝÅÎÉÊ ÐÏÍÅÞÁÀÔÓÑ ËÁË ÕÄÁÌÅÎÎÙÅ..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÞÉÓÔÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "óÏÈÒÁÎÅÎÉÅ ÆÌÁÇÏ× ÓÏÓÔÏÑÎÉÑ ÓÏÏÂÝÅÎÉÊ... [%d ÉÚ %d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "õÄÁÌÅÎÉÅ ÓÏÏÂÝÅÎÉÊ Ó ÓÅÒ×ÅÒÁ..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: ÏÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ EXPUNGE" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "ïÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ CLOSE" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "ðÏÄËÌÀÞÅÎÉÅ Ë %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "ïÔËÌÀÞÅÎÉÅ ÏÔ %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÚÁÇÏÌÏ×ËÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÜÔÉÍ IMAP-ÓÅÒ×ÅÒÏÍ." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "ðÏÌÕÞÅÎÉÅ ÚÁÇÏÌÏ×ËÏ× ÓÏÏÂÝÅÎÉÊ... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "ðÏÌÕÞÅÎÉÅ ÓÏÏÂÝÅÎÉÑ..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" +"îÕÍÅÒÁÃÉÑ ÓÏÏÂÝÅÎÉÊ ÉÚÍÅÎÉÌÁÓØ. ôÒÅÂÕÅÔÓÑ ÐÏ×ÔÏÒÎÏ ÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË." + +# ÉÌÉ "ÎÁ ÓÅÒ×ÅÒ" ÕÂÒÁÔØ?? +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "óÏÏÂÝÅÎÉÅ ÚÁÇÒÕÖÁÅÔÓÑ ÎÁ ÓÅÒ×ÅÒ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "%d ÓÏÏÂÝÅÎÉÊ ËÏÐÉÒÕÀÔÓÑ × %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "óÏÏÂÝÅÎÉÅ %d ËÏÐÉÒÕÅÔÓÑ × %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "ðÒÏÄÏÌÖÉÔØ?" + +#: init.c:611 +msgid "alias: no address" +msgstr "ÐÓÅ×ÄÏÎÉÍ: ÏÔÓÕÔÓÔ×ÕÅÔ ÁÄÒÅÓ" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅËÏÒÒÅËÔÎÙÊ IDN '%s' × ÐÓÅ×ÄÏÎÉÍÅ '%s'.\n" + +#: init.c:714 +msgid "invalid header field" +msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÐÏÌÅ × ÚÁÇÏÌÏ×ËÅ" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÍÅÔÏÄ ÓÏÒÔÉÒÏ×ËÉ" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): ÏÛÉÂËÁ × ÒÅÇÕÌÑÒÎÏÍ ×ÙÒÁÖÅÎÉÉ: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÁÑ ÐÅÒÅÍÅÎÎÁÑ" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "ÐÒÅÆÉËÓ ÎÅÄÏÐÕÓÔÉÍ ÐÒÉ ÓÂÒÏÓÅ ÚÎÁÞÅÎÉÊ" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "ÚÎÁÞÅÎÉÅ ÎÅÄÏÐÕÓÔÉÍÏ ÐÒÉ ÓÂÒÏÓÅ ÚÎÁÞÅÎÉÊ" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÕÓÔÁÎÏ×ÌÅÎÏ" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÎÅ ÏÐÒÅÄÅÌÅÎÏ" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ÔÉÐ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ" + +#: init.c:1312 +#, c-format +msgid "%s: Unknown type." +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ." + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÆÁÊÌÏÍ." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "ïÛÉÂËÁ × %s: ÓÔÒÏËÁ %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: ÏÛÉÂËÉ × %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: ÞÔÅÎÉÅ ÐÒÅÒ×ÁÎÏ ÉÚ-ÚÁ ÂÏÌØÛÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏË × %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: ÏÛÉÂËÁ × %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "ïÛÉÂËÁ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ ÄÏÍÁÛÎÉÊ ËÁÔÁÌÏÇ" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "ïÂÎÁÒÕÖÅÎ ÃÉËÌ × ÏÐÒÅÄÅÌÅÎÉÉ ÍÁËÒÏÓÁ." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "ëÌÁ×ÉÛÅ ÎÅ ÎÁÚÎÁÞÅÎÁ ÎÉËÁËÁÑ ÆÕÎËÃÉÑ." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "ëÌÁ×ÉÛÅ ÎÅ ÎÁÚÎÁÞÅÎÁ ÎÉËÁËÁÑ ÆÕÎËÃÉÑ. äÌÑ ÓÐÒÁ×ËÉ ÉÓÐÏÌØÚÕÊÔÅ '%s'." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: ÎÅÔ ÔÁËÏÇÏ ÍÅÎÀ" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÁ×ÉÛ ÐÕÓÔÁ" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: ÎÅÔ ÔÁËÏÊ ÆÕÎËÃÉÉ" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: ÐÕÓÔÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÁ×ÉÛ" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: ÎÅÔ ÁÒÇÕÍÅÎÔÏ×" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: ÎÅÔ ÔÁËÏÊ ÆÕÎËÃÉÉ" + +#: keymap.c:912 +msgid "Enter keys (^G to abort): " +msgstr "÷×ÅÄÉÔÅ ËÌÀÞÉ (^G - ÐÒÅÒÙ×ÁÎÉÅ ××ÏÄÁ): " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "óÉÍ×ÏÌ = %s, ×ÏÓØÍÉÒÉÞÎÙÊ = %o, ÄÅÓÑÔÉÞÎÙÊ = %d" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "ÐÕÓÔÁÑ ÏÐÅÒÁÃÉÑ" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "ÚÁ×ÅÒÛÅÎÉÅ ×ÙÐÏÌÎÅÎÉÑ ÐÏ ÕÓÌÏ×ÉÀ" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "ÆÏÒÓÉÒÏ×ÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÂÁÚÙ mailcap ÄÌÑ ÐÒÏÓÍÏÔÒÁ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ÐÏËÁÚÁÔØ ×ÌÏÖÅÎÉÅ ËÁË ÔÅËÓÔ" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "òÁÚÒÅÛÉÔØ/ÚÁÐÒÅÔÉÔØ ÏÔÏÂÒÁÖÅÎÉÅ ÞÁÓÔÅÊ ÄÁÊÄÖÅÓÔÁ" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ËÏÎÅà ÓÔÒÁÎÉÃÙ" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "ÐÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ ÄÒÕÇÏÍÕ ÐÏÌØÚÏ×ÁÔÅÌÀ" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "ÕËÁÚÁÔØ ÎÏ×ÙÊ ÆÁÊÌ × ÜÔÏÍ ËÁÔÁÌÏÇÅ" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ÐÒÏÓÍÏÔÒÅÔØ ÆÁÊÌ" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ÐÏËÁÚÁÔØ ÉÍÑ ÔÅËÕÝÅÇÏ ÆÁÊÌÁ" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "ÐÏÄËÌÀÞÉÔØÓÑ Ë ÔÅËÕÝÅÍÕ ÐÏÞÔÏ×ÏÍÕ ÑÝÉËÕ (ÔÏÌØËÏ IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "ÏÔËÌÀÞÉÔØÓÑ ÏÔ ÔÅËÕÝÅÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ (ÔÏÌØËÏ IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "" +"ÐÅÒÅËÌÀÞÉÔØÓÑ ÍÅÖÄÕ ÒÅÖÉÍÁÍÉ ÐÒÏÓÍÏÔÒÁ ×ÓÅÈ/ÐÏÄËÌÀÞÅÎÎÙÈ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× " +"(ÔÏÌØËÏ IMAP)" + +#: keymap_alldefs.h:18 +msgid "list mailboxes with new mail" +msgstr "ÓÐÉÓÏË ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× Ó ÎÏ×ÏÊ ÐÏÞÔÏÊ" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "ÉÚÍÅÎÉÔØ ËÁÔÁÌÏÇ" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÞÔÏ×ÙÅ ÑÝÉËÉ ÎÁ ÎÁÌÉÞÉÅ ÎÏ×ÏÊ ÐÏÞÔÙ" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "×ÌÏÖÉÔØ ÆÁÊÌÙ × ÜÔÏ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "×ÌÏÖÉÔØ ÓÏÏÂÝÅÎÉÑ × ÜÔÏ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "ÉÚÍÅÎÉÔØ ÓÐÉÓÏË 'BCC:'" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "ÉÚÍÅÎÉÔØ ÓÐÉÓÏË 'CC:'" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "ÉÚÍÅÎÉÔØ ÏÐÉÓÁÎÉÅ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "ÉÚÍÅÎÉÔØ ÔÒÁÎÓÐÏÒÔÎÕÀ ËÏÄÉÒÏ×ËÕ ÄÌÑ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "ÕËÁÖÉÔÅ ÆÁÊÌ, × ËÏÔÏÒÏÍ ÂÕÄÅÔ ÓÏÈÒÁÎÅÎÁ ËÏÐÉÑ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "ÉÚÍÅÎÉÔØ ×ÌÏÖÅÎÎÙÊ ÆÁÊÌ" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "ÉÚÍÅÎÉÔØ ÐÏÌÅ 'From:'" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ ×ÍÅÓÔÅ Ó ÚÁÇÏÌÏ×ËÁÍÉ" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ×ÌÏÖÅÎÉÅ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÚÁÐÉÓØÀ × mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "ÉÚÍÅÎÉÔØ ÐÏÌÅ 'Reply-To:'" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "ÒÅÄÁËÔÉÒÏ×ÁÔØ ÔÅÍÕ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "ÉÚÍÅÎÉÔØ ÓÐÉÓÏË 'To:'" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "ÓÏÚÄÁÔØ ÎÏ×ÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË (ÔÏÌØËÏ IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "ÉÚÍÅÎÉÔØ ÔÉÐ ×ÌÏÖÅÎÉÑ (content-type)" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÕÀ ËÏÐÉÀ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "ÐÒÏ×ÅÒÉÔØ ÐÒÁ×ÏÐÉÓÁÎÉÅ" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "ÓÏÚÄÁÔØ ÎÏ×ÏÅ ×ÌÏÖÅÎÉÅ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÚÁÐÉÓØÀ × mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "×ËÌÀÞÉÔØ/×ÙËÌÀÞÉÔØ ÐÅÒÅËÏÄÉÒÏ×ÁÎÉÅ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "ÓÏÈÒÁÎÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ ÄÌÑ ÏÔÐÒÁ×ËÉ ÐÏÚÄÎÅÅ" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "ÐÅÒÅÉÍÅÎÏ×ÁÔØ/ÐÅÒÅÍÅÓÔÉÔØ ×ÌÏÖÅÎÎÙÊ ÆÁÊÌ" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "ÏÔÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÅ disposition × inline/attachment" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "ÕÄÁÌÉÔØ/ÏÓÔÁ×ÉÔØ ÆÁÊÌ ÐÏÓÌÅ ÏÔÐÒÁ×ËÉ" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "ÏÂÎÏ×ÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ËÏÄÉÒÏ×ËÅ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "ÚÁÐÉÓÁÔØ ÓÏÏÂÝÅÎÉÅ × ÆÁÊÌ/ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "ËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ × ÆÁÊÌ/ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "ÓÏÚÄÁÔØ ÐÓÅ×ÄÏÎÉÍ ÄÌÑ ÏÔÐÒÁ×ÉÔÅÌÑ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "ÐÏÍÅÓÔÉÔØ ÚÁÐÉÓØ × ÎÉÚ ÜËÒÁÎÁ" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "ÐÏÍÅÓÔÉÔØ ÚÁÐÉÓØ × ÓÅÒÅÄÉÎÕ ÜËÒÁÎÁ" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "ÐÏÍÅÓÔÉÔØ ÚÁÐÉÓØ × ×ÅÒÈ ÜËÒÁÎÁ" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "ÓÏÚÄÁÔØ ÄÅËÏÄÉÒÏ×ÁÎÎÕÀ (text/plain) ËÏÐÉÀ" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "ÓÏÚÄÁÔØ ÄÅËÏÄÉÒÏ×ÁÎÎÕÀ (text/plain) ËÏÐÉÀ É ÕÄÁÌÉÔØ ÏÒÉÇÉÎÁÌ" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "ÕÄÁÌÉÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "ÕÄÁÌÉÔØ ÔÅËÕÝÉÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË (ÔÏÌØËÏ IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "ÕÄÁÌÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÐÏÄÄÉÓËÕÓÓÉÉ" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "ÕÄÁÌÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÄÉÓËÕÓÓÉÉ" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "ÐÏËÁÚÁÔØ ÐÏÌÎÙÊ ÁÄÒÅÓ ÏÔÐÒÁ×ÉÔÅÌÑ" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "ÐÏËÁÚÁÔØ ÓÏÏÂÝÅÎÉÅ ÓÏ ×ÓÅÍÉ ÚÁÇÏÌÏ×ËÁÍÉ" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "ÐÏËÁÚÁÔØ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "\"ÎÉÚËÏÕÒÏ×ÎÅ×ÏÅ\" ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ ×ÌÅ×Ï ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÓÌÏ×Á" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ÐÅÒÅÊÔÉ × ÎÁÞÁÌÏ ÓÔÒÏËÉ" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "ÐÅÒÅËÌÀÞÉÔØÓÑ ÍÅÖÄÕ ÐÏÞÔÏ×ÙÍÉ ÑÝÉËÁÍÉ ÓÏ ×ÈÏÄÑÝÉÍÉ ÐÉÓØÍÁÍÉ" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "ÄÏÐÉÓÁÔØ ÉÍÑ ÆÁÊÌÁ ÉÌÉ ÐÓÅ×ÄÏÎÉÍÁ" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "ÄÏÐÉÓÁÔØ ÁÄÒÅÓ, ÉÓÐÏÌØÚÕÑ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÏÄ ËÕÒÓÏÒÏÍ" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ÐÅÒÅÊÔÉ × ËÏÎÅà ÓÔÒÏËÉ" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ ×ÐÒÁ×Ï" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "ÐÅÒÅÄ×ÉÎÕÔØ ËÕÒÓÏÒ × ËÏÎÅà ÓÌÏ×Á" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "ÐÒÏËÒÕÔÉÔØ ×ÎÉÚ ÓÐÉÓÏË ÉÓÔÏÒÉÉ" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ÐÒÏËÒÕÔÉÔØ ××ÅÒÈ ÓÐÉÓÏË ÉÓÔÏÒÉÉ" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌÙ ÏÔ ËÕÒÓÏÒÁ É ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "ÕÄÁÌÉÔØ ÓÉÍ×ÏÌÙ ÏÔ ËÕÒÓÏÒÁ É ÄÏ ËÏÎÃÁ ÓÌÏ×Á" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "ÕÄÁÌÉÔØ ×ÓÅ ÓÉÍ×ÏÌÙ × ÓÔÒÏËÅ" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "ÕÄÁÌÉÔØ ÓÌÏ×Ï ÐÅÒÅÄ ËÕÒÓÏÒÏÍ" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "××ÅÓÔÉ ÓÌÅÄÕÀÝÕÀ ÎÁÖÁÔÕÀ ËÌÁ×ÉÛÕ \"ËÁË ÅÓÔØ\"" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "ÐÏÍÅÎÑÔØ ÓÉÍ×ÏÌ ÐÏÄ ËÕÒÓÏÒÏÍ Ó ÐÒÅÄÙÄÕÝÉÍ" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "" +"ÐÅÒÅ×ÅÓÔÉ ÐÅÒ×ÕÀ ÂÕË×Õ ÓÌÏ×Á × ×ÅÒÈÎÉÊ ÒÅÇÉÓÔÒ, Á ÏÓÔÁÌØÎÙÅ -- × ÎÉÖÎÉÊ" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÓÌÏ×Ï × ÎÉÖÎÉÊ ÒÅÇÉÓÔÒ" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÓÌÏ×Ï × ×ÅÒÈÎÉÊ ÒÅÇÉÓÔÒ" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "××ÅÓÔÉ ËÏÍÁÎÄÕ muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "××ÅÓÔÉ ÍÁÓËÕ ÆÁÊÌÁ" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "×ÙÊÔÉ ÉÚ ÜÔÏÇÏ ÍÅÎÀ" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "ÐÅÒÅÄÁÔØ ×ÌÏÖÅÎÉÅ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÅ" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ÐÅÒ×ÁÑ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "ÕÓÔÁÎÏ×ÉÔØ/ÓÂÒÏÓÉÔØ ÆÌÁÇ '×ÁÖÎÏÅ' ÄÌÑ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "ÐÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ Ó ËÏÍÍÅÎÔÁÒÉÑÍÉ" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "×ÙÂÒÁÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "ÏÔ×ÅÔÉÔØ ×ÓÅÍ ÁÄÒÅÓÁÔÁÍ" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "ÎÁ ÐÏÌÓÔÒÁÎÉÃÙ ×ÐÅÒÅÄ" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "ÎÁ ÐÏÌÓÔÒÁÎÉÃÙ ÎÁÚÁÄ" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "ÜÔÏÔ ÔÅËÓÔ" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ÐÅÒÅÊÔÉ ÐÏ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÍÕ ÎÏÍÅÒÕ" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ÐÏÓÌÅÄÎÑÑ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "ÏÔ×ÅÔÉÔØ × ÕËÁÚÁÎÎÙÊ ÓÐÉÓÏË ÒÁÓÓÙÌËÉ" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "×ÙÐÏÌÎÉÔØ ÍÁËÒÏÓ" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "ÓÏÚÄÁÔØ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "ÏÔËÒÙÔØ ÄÒÕÇÏÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË/ÆÁÊÌ" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "ÏÔËÒÙÔØ ÄÒÕÇÏÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË/ÆÁÊÌ × ÒÅÖÉÍÅ \"ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ\"" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "ÓÂÒÏÓÉÔØ Õ ÓÏÏÂÝÅÎÉÑ ÆÌÁÇ ÓÏÓÔÏÑÎÉÑ" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "ÕÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "ÚÁÂÒÁÔØ ÐÏÞÔÕ Ó IMAP-ÓÅÒ×ÅÒÁ" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "ÚÁÂÒÁÔØ ÐÏÞÔÕ Ó POP-ÓÅÒ×ÅÒÁ" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ÐÅÒ×ÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ÐÏÓÌÅÄÎÅÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "ÐÏËÁÚÙ×ÁÔØ ÔÏÌØËÏ ÓÏÏÂÝÅÎÉÑ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ÓÌÅÄÕÀÝÅÅ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:113 +msgid "jump to the next new or unread message" +msgstr "ÓÌÅÄÕÀÝÅÅ ÎÏ×ÏÅ ÉÌÉ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ÓÌÅÄÕÀÝÁÑ ÐÏÄÄÉÓËÕÓÓÉÑ" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ÓÌÅÄÕÀÝÁÑ ÄÉÓËÕÓÓÉÑ" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ÓÌÅÄÕÀÝÅÅ ÎÅÕÄÁÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ÓÌÅÄÕÀÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "ÐÅÒÅÊÔÉ Ë ÒÏÄÉÔÅÌØÓËÏÍÕ ÓÏÏÂÝÅÎÉÀ ÄÉÓËÕÓÓÉÉ" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ÐÒÅÄÙÄÕÝÁÑ ÄÉÓËÕÓÓÉÑ" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ÐÒÅÄÙÄÕÝÁÑ ÐÏÄÄÉÓËÕÓÓÉÑ" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÅÕÄÁÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:123 +msgid "jump to the previous new or unread message" +msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÏ×ÏÅ ÉÌÉ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ÐÒÅÄÙÄÕÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÄÉÓËÕÓÓÉÀ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÐÏÄÄÉÓËÕÓÓÉÀ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "ÕÓÔÁÎÏ×ÉÔØ ÆÌÁÇ ÓÏÓÔÏÑÎÉÑ ÄÌÑ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "ÐÏÍÅÔÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÐÏ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "ÓÎÑÔØ ÐÏÍÅÔËÕ Ó ÓÏÏÂÝÅÎÉÊ ÐÏ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ÓÅÒÅÄÉÎÁ ÓÔÒÁÎÉÃÙ" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ÓÌÅÄÕÀÝÁÑ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "×ÎÉÚ ÎÁ ÏÄÎÕ ÓÔÒÏËÕ" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ÓÌÅÄÕÀÝÁÑ ÓÔÒÁÎÉÃÁ" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ËÏÎÅà ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "ÒÁÚÒÅÛÉÔØ/ÚÁÐÒÅÔÉÔØ ÏÔÏÂÒÁÖÅÎÉÅ ÃÉÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "ÐÒÏÐÕÓÔÉÔØ ÃÉÔÉÒÕÅÍÙÊ ÔÅËÓÔ" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "× ÎÁÞÁÌÏ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "ÐÅÒÅÄÁÔØ ÓÏÏÂÝÅÎÉÅ/×ÌÏÖÅÎÉÅ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÅ" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ÐÒÅÄÙÄÕÝÁÑ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "××ÅÒÈ ÎÁ ÏÄÎÕ ÓÔÒÏËÕ" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ÐÒÅÄÙÄÕÝÁÑ ÓÔÒÁÎÉÃÁ" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "ÎÁÐÅÞÁÔÁÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "ÚÁÐÒÏÓÉÔØ ÁÄÒÅÓÁ Õ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÙ" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "ÄÏÂÁ×ÉÔØ ÒÅÚÕÌØÔÁÔÙ ÎÏ×ÏÇÏ ÚÁÐÒÏÓÁ Ë ÔÅËÕÝÉÍ ÒÅÚÕÌØÔÁÔÁÍ" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ É ×ÙÊÔÉ" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "ÐÒÏÄÏÌÖÉÔØ ÏÔÌÏÖÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "ÏÞÉÓÔÉÔØ É ÐÅÒÅÒÉÓÏ×ÁÔØ ÜËÒÁÎ" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{×ÎÕÔÒÅÎÎÉÊ}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "ÏÔ×ÅÔÉÔØ ÎÁ ÓÏÏÂÝÅÎÉÅ" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ÔÅËÕÝÅÅ ÓÏÏÂÝÅÎÉÅ × ËÁÞÅÓÔ×Å ÛÁÂÌÏÎÁ ÄÌÑ ÎÏ×ÏÇÏ" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "ÓÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ/×ÌÏÖÅÎÉÅ × ÆÁÊÌ" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "ÐÏÉÓË ÐÏ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "ÏÂÒÁÔÎÙÊ ÐÏÉÓË ÐÏ ÏÂÒÁÚÃÕ" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "ÐÏÉÓË ÓÌÅÄÕÀÝÅÇÏ ÓÏ×ÐÁÄÅÎÉÑ" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "ÐÏÉÓË ÐÒÅÄÙÄÕÝÅÇÏ ÓÏ×ÐÁÄÅÎÉÑ" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "ÕÓÔÁÎÏ×ÉÔØ/ÓÂÒÏÓÉÔØ ÒÅÖÉÍ ×ÙÄÅÌÅÎÉÑ ÏÂÒÁÚÃÁ Ã×ÅÔÏÍ" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "ÚÁÐÕÓÔÉÔØ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ÓÏÒÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ÓÏÒÔÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ × ÏÂÒÁÔÎÏÍ ÐÏÒÑÄËÅ" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "ÐÒÉÍÅÎÉÔØ ÓÌÅÄÕÀÝÕÀ ÆÕÎËÃÉÀ Ë ÐÏÍÅÞÅÎÎÙÍ ÓÏÏÂÝÅÎÉÑÍ" + +#: keymap_alldefs.h:164 +msgid "apply next function ONLY to tagged messages" +msgstr "×ÙÐÏÌÎÉÔØ ÏÐÅÒÁÃÉÀ ôïìøëï ÄÌÑ ÐÏÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÐÏÄÄÉÓËÕÓÓÉÀ" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÄÉÓËÕÓÓÉÀ" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "ÕÓÔÁÎÏ×ÉÔØ/ÓÂÒÏÓÉÔØ ÆÌÁÇ 'ÎÏ×ÏÅ' ÄÌÑ ÓÏÏÂÝÅÎÉÑ" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "ÒÁÚÒÅÛÉÔØ/ÚÁÐÒÅÔÉÔØ ÐÅÒÅÚÁÐÉÓØ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "" +"ÐÅÒÅËÌÀÞÉÔØÓÑ ÍÅÖÄÕ ÒÅÖÉÍÁÍÉ ÐÒÏÓÍÏÔÒÁ ×ÓÅÈ ÆÁÊÌÏ× É ÐÒÏÓÍÏÔÒÁ ÐÏÞÔÏ×ÙÈ " +"ÑÝÉËÏ×" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ÎÁÞÁÌÏ ÓÔÒÁÎÉÃÙ" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ÔÅËÕÝÕÀ ÚÁÐÉÓØ" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÄÉÓËÕÓÓÉÉ" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "×ÏÓÓÔÁÎÏ×ÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ × ÐÏÄÄÉÓËÕÓÓÉÉ" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ Mutt É ÄÁÔÕ" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "ÐÒÏÓÍÏÔÒÅÔØ ×ÌÏÖÅÎÉÅ, ÉÓÐÏÌØÚÕÑ ÐÒÉ ÎÅÏÂÈÏÄÉÍÏÓÔÉ mailcap" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "ÐÏËÁÚÁÔØ ×ÌÏÖÅÎÉÑ" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "ÐÏËÁÚÁÔØ ËÏÄ ÎÁÖÁÔÏÊ ËÌÁ×ÉÛÉ" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "ÐÏËÁÚÁÔØ ÔÅËÕÝÉÊ ÛÁÂÌÏÎ ÏÇÒÁÎÉÞÅÎÉÑ" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "Ó×ÅÒÎÕÔØ/ÒÁÚ×ÅÒÎÕÔØ ÔÅËÕÝÕÀ ÄÉÓËÕÓÓÉÀ" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "Ó×ÅÒÎÕÔØ/ÒÁÚ×ÅÒÎÕÔØ ×ÓÅ ÄÉÓËÕÓÓÉÉ" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "×ÌÏÖÉÔØ ÏÔËÒÙÔÙÊ PGP-ËÌÀÞ" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "×Ù×ÅÓÔÉ ÐÁÒÁÍÅÔÒÙ PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "ÏÔÐÒÁ×ÉÔØ ÏÔËÒÙÔÙÊ PGP-ËÌÀÞ" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "ÐÒÏ×ÅÒÉÔØ ÏÔËÒÙÔÙÊ PGP-ËÌÀÞ" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "ÐÏËÁÚÁÔØ ÉÄÅÎÔÉÆÉËÁÔÏÒ ×ÌÁÄÅÌØÃÁ ËÌÀÞÁ" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "ÐÒÏ×ÅÒÉÔØ PGP-ÓÏÏÂÝÅÎÉÅ × ÔÅËÓÔÏ×ÏÍ ÆÏÒÍÁÔÅ" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÓÏÚÄÁÎÎÕÀ ÃÅÐÏÞËÕ" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "äÏÂÁ×ÉÔØ remailer × ÃÅÐÏÞËÕ" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "÷ÓÔÁ×ÉÔØ remailer × ÃÅÐÏÞËÕ" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "õÄÁÌÉÔØ remailer ÉÚ ÃÅÐÏÞËÉ" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "÷ÙÂÒÁÔØ ÐÒÅÄÙÄÕÝÉÊ ÜÌÅÍÅÎÔ × ÃÅÐÏÞËÅ" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "÷ÙÂÒÁÔØ ÓÌÅÄÕÀÝÉÊ ÜÌÅÍÅÎÔ × ÃÅÐÏÞËÅ" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "ÐÏÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ ÞÅÒÅÚ ÃÅÐÏÞËÕ remailer" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "ÓÏÚÄÁÔØ ÒÁÓÛÉÆÒÏ×ÁÎÎÕÀ ËÏÐÉÀ É ÕÄÁÌÉÔØ ÏÒÉÇÉÎÁÌ" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "ÓÏÚÄÁÔØ ÒÁÓÛÉÆÒÏ×ÁÎÎÕÀ ËÏÐÉÀ" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "ÕÄÁÌÉÔØ ÆÒÁÚÙ-ÐÁÒÏÌÉ ÉÚ ÐÁÍÑÔÉ" + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "ÉÚ×ÌÅÞØ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÏÔËÒÙÔÙÅ ËÌÀÞÉ" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "×Ù×ÅÓÔÉ ÐÁÒÁÍÅÔÒÙ S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ -- ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ!" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"þÔÏÂÙ Ó×ÑÚÁÔØÓÑ Ó ÒÁÚÒÁÂÏÔÞÉËÁÍÉ, ÉÓÐÏÌØÚÕÊÔÅ ÁÄÒÅÓ <mutt-dev@mutt.org>.\n" +"þÔÏÂÙ ÓÏÏÂÝÉÔØ Ï ÏÛÉÂËÅ, ÉÓÐÏÌØÚÕÊÔÅ ÐÒÏÇÒÁÍÍÕ flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins É ÄÒÕÇÉÅ.\n" +"Mutt ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ âåú ëáëéè-ìéâï çáòáîôéê; ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ\n" +"ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ××ÅÄÉÔÅ `mutt -vv'.\n" +"Mutt Ñ×ÌÑÅÔÓÑ Ó×ÏÂÏÄÎÙÍ ÐÒÏÇÒÁÍÍÎÙÍ ÏÂÅÓÐÅÞÅÎÉÅÍ. ÷Ù ÍÏÖÅÔÅ\n" +"ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÅÇÏ ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÏÐÒÅÄÅÌÅÎÎÙÈ ÕÓÌÏ×ÉÊ; ÄÌÑ ÐÏÌÕÞÅÎÉÑ\n" +"ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ××ÅÄÉÔÅ `mutt -vv'.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"íÎÏÇÉÅ ÞÁÓÔÉ ËÏÄÁ, ÉÓÐÒÁ×ÌÅÎÉÑ É ÐÒÅÄÌÏÖÅÎÉÑ ÂÙÌÉ ÓÄÅÌÁÎÙ ÎÅÕÐÏÍÑÎÕÔÙÍÉ\n" +"ÚÄÅÓØ ÌÀÄØÍÉ.\n" +"\n" +" üÔÁ ÐÒÏÇÒÁÍÍÁ -- Ó×ÏÂÏÄÎÏÅ ÐÒÏÇÒÁÍÍÎÏÅ ÏÂÅÓÐÅÞÅÎÉÅ. ÷Ù ÍÏÖÅÔÅ\n" +" ÒÁÓÐÒÏÓÔÒÁÎÑÔØ É/ÉÌÉ ÉÚÍÅÎÑÔØ ÅÅ ÐÒÉ ÓÏÂÌÀÄÅÎÉÉ ÕÓÌÏ×ÉÊ GNU General\n" +" Piblic License, ÏÐÕÂÌÉËÏ×ÁÎÎÏÊ Free Software Foundation, ×ÅÒÓÉÉ 2 ÉÌÉ\n" +" (ÎÁ ×ÁÛÅ ÕÓÍÏÔÒÅÎÉÅ) ÌÀÂÏÊ ÂÏÌÅÅ ÐÏÚÄÎÅÊ ×ÅÒÓÉÉ.\n" +"\n" +" üÔÁ ÐÒÏÇÒÁÍÍÁ ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ Ó ÎÁÄÅÖÄÏÊ, ÞÔÏ ÏÎÁ ÏËÁÖÅÔÓÑ ÐÏÌÅÚÎÏÊ,\n" +" ÎÏ âåú ëáëéè-ìéâï çáòáîôéê. ïÓÏÂÏ ÏÔÍÅÔÉÍ, ÞÔÏ ÏÔÓÕÔÓÔ×ÕÅÔ çáòáîôéñ\n" +" ðòéçïäîïóôé äìñ ÷ùðïìîåîéñ ïðòåäåìåîîùè úáäáþ. âÏÌÅÅ ÐÏÄÒÏÂÎÕÀ\n" +" ÉÎÆÏÒÍÁÃÉÀ ×Ù ÍÏÖÅÔÅ ÎÁÊÔÉ × GNU General Public License.\n" +"\n" +" ÷Ù ÄÏÌÖÎÙ ÂÙÌÉ ÐÏÌÕÞÉÔØ ËÏÐÉÀ GNU General Public License ×ÍÅÓÔÅ Ó\n" +" ÜÔÏÊ ÐÒÏÇÒÁÍÍÏÊ. åÓÌÉ ×Ù ÅÅ ÎÅ ÐÏÌÕÞÉÌÉ, ÏÂÒÁÔÉÔÅÓØ ×Ï Free Software\n" +" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"ÚÁÐÕÓË: 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 [ -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" +"\n" +"ÐÁÒÁÍÅÔÒÙ:\n" +" -A <alias>\tÒÁÓËÒÙÔØ ÄÁÎÎÙÊ ÐÓÅ×ÄÏÎÉÍ\n" +" -a <file>\t×ÌÏÖÉÔØ ÆÁÊÌ × ÓÏÏÂÝÅÎÉÅ\n" +" -b <address>\tÕËÁÚÁÔØ blind carbon-copy (BCC) ÁÄÒÅÓ\n" +" -c <address>\tÕËÁÚÁÔØ carbon-copy (CC) ÁÄÒÅÓ\n" +" -e <command>\tÕËÁÚÁÔØ ËÏÍÁÎÄÕ, ËÏÔÏÒÁÑ ÂÕÄÅÔ ×ÙÐÏÌÎÅÎÁ ÐÏÓÌÅ " +"ÉÎÉÃÉÁÌÉÚÁÃÉÉ\n" +" -f <file>\tÕËÁÚÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÄÌÑ ÒÁÂÏÔÙ\n" +" -F <file>\tÕËÁÚÁÔØ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ muttrc\n" +" -H <file>\tÕËÁÚÁÔØ ÆÁÊÌ, ÓÏÄÅÒÖÁÝÉÊ ÛÁÂÌÏÎ ÚÁÇÏÌÏ×ËÁ\n" +" -i <file>\tÕËÁÚÁÔØ ÆÁÊÌ ÄÌÑ ×ÓÔÁ×ËÉ × ÏÔ×ÅÔ\n" +" -m <ÔÉÐ>\tÕËÁÚÁÔØ ÔÉÐ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÐÏ ÕÍÏÌÞÁÎÉÀ\n" +" -n\t\tÚÁÐÒÅÔÉÔØ ÞÔÅÎÉÅ ÓÉÓÔÅÍÎÏÇÏ Muttrc\n" +" -p\t\tÐÒÏÄÏÌÖÉÔØ ÏÔÌÏÖÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ\n" +" -Q <ÉÍÑ>\t×Ù×ÅÓÔÉ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ ËÏÎÆÉÇÕÒÁÃÉÉ\n" +" -R\t\tÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË × ÒÅÖÉÍÅ \"ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ\"\n" +" -s <ÔÅÍÁ>\tÕËÁÚÁÔØ ÔÅÍÕ ÓÏÏÂÝÅÎÉÑ (ÄÏÌÖÎÁ ÂÙÔØ × ËÁ×ÙÞËÁÈ, ÅÓÌÉ " +"ÐÒÉÓÕÔÓÔ×ÕÀÔ ÐÒÏÂÅÌÙ)\n" +" -v\t\t×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ É ÐÁÒÁÍÅÔÒÙ ËÏÍÐÉÌÑÃÉÉ\n" +" -x\t\tÜÍÕÌÉÒÏ×ÁÔØ ÒÅÖÉÍ ÐÏÓÙÌËÉ ËÏÍÁÎÄÙ mailx\n" +" -y\t\t×ÙÂÒÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÉÚ ÓÐÉÓËÁ `mailboxes'\n" +" -z\t\t×ÙÊÔÉ ÎÅÍÅÄÌÅÎÎÏ ÅÓÌÉ × ÐÏÞÔÏ×ÏÍ ÑÝÉËÅ ÏÔÓÕÔÓÔ×ÕÅÔ ÎÏ×ÁÑ ÐÏÞÔÁ\n" +" -Z\t\tÏÔËÒÙÔØ ÐÅÒ×ÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË Ó ÎÏ×ÏÊ ÐÏÞÔÏÊ, ×ÙÊÔÉ ÎÅÍÅÄÌÅÎÎÏ ÅÓÌÉ " +"ÔÁËÏ×ÁÑ ÏÔÓÕÔÓÔ×ÕÅÔ\n" +" -h\t\tÔÅËÓÔ ÜÔÏÊ ÐÏÄÓËÁÚËÉ" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"ðÁÒÁÍÅÔÒÙ ËÏÍÐÉÌÑÃÉÉ:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "ïÛÉÂËÁ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÔÅÒÍÉÎÁÌÁ." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "ïÔÌÁÄËÁ ÎÁ ÕÒÏ×ÎÅ %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "óÉÍ×ÏÌ DEBUG ÎÅ ÂÙÌ ÏÐÒÅÄÅÌÅÎ ÐÒÉ ËÏÍÐÉÌÑÃÉÉ. éÇÎÏÒÉÒÕÅÔÓÑ.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "ëÁÔÁÌÏÇ %s ÎÅ ÓÕÝÅÓÔ×ÕÅÔ. óÏÚÄÁÔØ?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ %s: %s" + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "áÄÒÅÓÁÔÙ ÎÅ ÕËÁÚÁÎÙ.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: ÎÅ ÕÄÁÌÏÓØ ×ÌÏÖÉÔØ ÆÁÊÌ.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "îÅÔ ÐÏÞÔÏ×ÙÈ ÑÝÉËÏ× Ó ÎÏ×ÏÊ ÐÏÞÔÏÊ." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "îÅ ÏÐÒÅÄÅÌÅÎÏ ÎÉ ÏÄÎÏÇÏ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ ÓÏ ×ÈÏÄÑÝÉÍÉ ÐÉÓØÍÁÍÉ." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÐÕÓÔ." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "þÉÔÁÅÔÓÑ %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÐÏ×ÒÅÖÄÅÎ!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÂÙÌ ÐÏ×ÒÅÖÄÅÎ!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "ëÒÉÔÉÞÅÓËÁÑ ÏÛÉÂËÁ! îÅ ÕÄÁÌÏÓØ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: ÐÏÞÔÏ×ÙÊ ÑÝÉË ÉÚÍÅÎÅÎ, ÎÏ ÉÚÍÅÎÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ ÏÔÓÕÔÓÔ×ÕÀÔ!" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "úÁÐÉÓØ... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "óÏÈÒÁÎÅÎÉÅ ÉÚÍÅÎÅÎÉÊ..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "úÁÐÉÓØ ÎÅ ÕÄÁÌÁÓØ! îÅÐÏÌÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÓÏÈÒÁÎÅÎ × %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "ðÏ×ÔÏÒÎÏÅ ÏÔËÒÙÔÉÅ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "ðÅÒÅÊÔÉ Ë: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "îÅ×ÅÒÎÙÊ ÉÎÄÅËÓ." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "úÁÐÉÓÉ ÏÔÓÕÔÓÔ×ÕÀÔ." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "äÁÌØÎÅÊÛÁÑ ÐÒÏËÒÕÔËÁ ÎÅ×ÏÚÍÏÖÎÁ." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "äÁÌØÎÅÊÛÁÑ ÐÒÏËÒÕÔËÁ ÎÅ×ÏÚÍÏÖÎÁ." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "÷Ù ÕÖÅ ÎÁ ÐÏÓÌÅÄÎÅÊ ÓÔÒÁÎÉÃÅ." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "÷Ù ÕÖÅ ÎÁ ÐÅÒ×ÏÊ ÓÔÒÁÎÉÃÅ." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "ðÅÒ×ÁÑ ÚÁÐÉÓØ ÕÖÅ ÎÁ ÜËÒÁÎÅ." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "ðÏÓÌÅÄÎÑÑ ÚÁÐÉÓØ ÕÖÅ ÎÁ ÜËÒÁÎÅ." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "÷Ù ÕÖÅ ÎÁ ÐÏÓÌÅÄÎÅÊ ÚÁÐÉÓÉ." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "÷Ù ÕÖÅ ÎÁ ÐÅÒ×ÏÊ ÚÁÐÉÓÉ." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "ðÏÉÓË: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "îÅÔ ÏÂÒÁÚÃÁ ÐÏÉÓËÁ." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "îÅ ÎÁÊÄÅÎÏ." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "îÅÔ ÏÔÍÅÞÅÎÎÙÈ ÚÁÐÉÓÅÊ." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "÷ ÜÔÏÍ ÍÅÎÀ ÐÏÉÓË ÎÅ ÒÅÁÌÉÚÏ×ÁÎ." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "äÌÑ ÄÉÁÌÏÇÏ× ÐÅÒÅÈÏÄ ÐÏ ÎÏÍÅÒÕ ÓÏÏÂÝÅÎÉÑ ÎÅ ÒÅÁÌÉÚÏ×ÁÎ." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "÷ÏÚÍÏÖÎÏÓÔØ ÐÏÍÅÔËÉ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "þÉÔÁÅÔÓÑ %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "maildir_commit_message(): ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ×ÒÅÍÑ ÆÁÊÌÁ" + +#: muttlib.c:835 +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "õËÁÚÁÎÎÙÊ ÆÁÊÌ -- ÜÔÏ ËÁÔÁÌÏÇ. óÏÈÒÁÎÉÔØ × ÎÅÍ?[(y)ÄÁ, (n)ÎÅÔ, (a)×ÓÅ]" + +#: muttlib.c:835 +msgid "yna" +msgstr "yna" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "õËÁÚÁÎÎÙÊ ÆÁÊÌ -- ÜÔÏ ËÁÔÁÌÏÇ. óÏÈÒÁÎÉÔØ × ÎÅÍ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "éÍÑ ÆÁÊÌÁ × ËÁÔÁÌÏÇÅ: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ, (o)ÐÅÒÅÐÉÓÁÔØ, (a)ÄÏÂÁ×ÉÔØ, (Ó)ÏÔËÁÚ?" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "úÁÐÉÓØ ÓÏÏÂÝÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÞÔÏ×ÙÍ ÑÝÉËÏÍ!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "äÏÂÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ Ë %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "óÏÅÄÉÎÅÎÉÅ Ó %s ÚÁËÒÙÔÏ" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL-ÐÒÏÔÏËÏÌ ÎÅÄÏÓÔÕÐÅÎ." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "ëÏÍÁÎÄÁ, ÐÒÅÄÛÅÓÔ×ÕÀÝÁÑ ÓÏÅÄÉÎÅÎÉÀ, ÚÁ×ÅÒÛÉÌÁÓØ Ó ÏÛÉÂËÏÊ." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "ïÛÉÂËÁ ÐÒÉ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÉ Ó %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN \"%s\"." + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "ïÐÒÅÄÅÌÑÅÔÓÑ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÓÏÅÄÉÎÅÎÉÅ Ó %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "îÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ Ó %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÜÎÔÒÏÐÉÉ" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "îÁËÏÐÌÅÎÉÅ ÜÎÔÒÏÐÉÉ: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s ÉÍÅÅÔ ÎÅÂÅÚÏÐÁÓÎÙÊ ÒÅÖÉÍ ÄÏÓÔÕÐÁ!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ SSL-ÐÒÏÔÏËÏÌÁ ÎÅ×ÏÚÍÏÖÎÏ ÉÚ-ÚÁ ÎÅÄÏÓÔÁÔËÁ ÜÎÔÒÏÐÉÉ" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "ÏÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ÏÛÉÂËÁ ÐÒÏÔÏËÏÌÁ" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ SSL-ÓÏÅÄÉÎÅÎÉÅ: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÓÅÒÔÉÆÉËÁÔ ÓÅÒ×ÅÒÁ" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "SSL-ÓÏÅÄÉÎÅÎÉÅ ÕÓÔÁÎÏ×ÌÅÎÏ; ÁÌÇÏÒÉÔÍ ÛÉÆÒÏ×ÁÎÉÑ %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "îÅÉÚ×ÅÓÔÎÏ" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[ÏÛÉÂËÁ ×ÙÞÉÓÌÅÎÉÊ]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ÎÅÄÏÐÕÓÔÉÍÁÑ ÄÁÔÁ]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "óÅÒÔÉÆÉËÁÔ ×ÓÅ ÅÝÅ ÎÅÄÅÊÓÔ×ÉÔÅÌÅÎ" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "óÒÏË ÄÅÊÓÔ×ÉÑ ÓÅÒÔÉÆÉËÁÔÁ ÉÓÔÅË" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "äÁÎÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÐÒÉÎÁÄÌÅÖÉÔ:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "äÁÎÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÂÙÌ ×ÙÄÁÎ:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "äÁÎÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÄÅÊÓÔ×ÉÔÅÌÅÎ" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " Ó %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " ÐÏ %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "ïÔÐÅÞÁÔÏË ÐÁÌØÃÁ: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "ðÒÏ×ÅÒËÁ SSL-ÓÅÒÔÉÆÉËÁÔÁ" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ÏÔ×ÅÒÇÎÕÔØ, (o)ÐÒÉÎÑÔØ, (a)ÐÒÉÎÑÔØ É ÓÏÈÒÁÎÉÔØ" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "roa" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ÏÔ×ÅÒÇÎÕÔØ, (o)ÐÒÉÎÑÔØ" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "ro" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "÷ÙÈÏÄ " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÕÄÁÌÏÓØ ÓÏÈÒÁÎÉÔØ ÓÅÒÔÉÆÉËÁÔ" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "óÅÒÔÉÆÉËÁÔ ÓÏÈÒÁÎÅÎ" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÆÁÊÌ, ÕÄÁÌÉÔØ ÆÁÊÌ ÂÌÏËÉÒÏ×ËÉ ÄÌÑ %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "dotlock: ÎÅ ÕÄÁÌÏÓØ ÚÁÂÌÏËÉÒÏ×ÁÔØ %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "ôÁÊÍ-ÁÕÔ fcntl-ÂÌÏËÉÒÏ×ËÉ!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "ðÏÐÙÔËÁ fcntl-ÂÌÏËÉÒÏ×ËÉ ÆÁÊÌÁ... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "ôÁÊÍ-ÁÕÔ flock-ÂÌÏËÉÒÏ×ËÉ!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "ðÏÐÙÔËÁ flock-ÂÌÏËÉÒÏ×ËÉ ÆÁÊÌÁ... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÂÌÏËÉÒÏ×ÁÔØ %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "þÉÔÁÅÔÓÑ %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "ðÉÛÅÔÓÑ %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÉÎÈÒÏÎÉÚÉÒÏ×ÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "ðÅÒÅÍÅÓÔÉÔØ ÐÒÏÞÉÔÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ × %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "÷ÙÞÉÓÔÉÔØ %d ÕÄÁÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "÷ÙÞÉÓÔÉÔØ %d ÕÄÁÌÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "ðÒÏÞÉÔÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ ÐÅÒÅÍÅÝÁÀÔÓÑ × %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÎÅ ÉÚÍÅÎÉÌÓÑ." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "ïÓÔÁ×ÌÅÎÏ: %d, ÐÅÒÅÍÅÝÅÎÏ: %d, ÕÄÁÌÅÎÏ: %d." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "ïÓÔÁ×ÌÅÎÏ: %d, ÕÄÁÌÅÎÏ: %d." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " éÓÐÏÌØÚÕÊÔÅ '%s' ÄÌÑ ÒÁÚÒÅÛÅÎÉÑ/ÚÁÐÒÅÝÅÎÉÑ ÚÁÐÉÓÉ" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "éÓÐÏÌØÚÕÊÔÅ ËÏÍÁÎÄÕ 'toggle-write' ÄÌÑ ÒÁÚÒÅÛÅÎÉÑ ÚÁÐÉÓÉ!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÓÔÁÌ ÄÏÓÔÕÐÅÎ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÏÂÎÏ×ÌÅÎ." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÓÏÏÂÝÅÎÉÑ" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ -- ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ." + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "÷ ÜÔÏÍ ÍÅÎÀ ÎÅÄÏÓÔÕÐÎÏ." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "îÁÚÁÄ" + +#: pager.c:1447 +msgid "NextPg" +msgstr "÷ÐÅÒÅÄ" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "÷ÌÏÖÅÎÉÑ" + +#: pager.c:1454 +msgid "Next" +msgstr "óÌÅÄÕÀÝÉÊ" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "ðÏÓÌÅÄÎÑÑ ÓÔÒÏËÁ ÓÏÏÂÝÅÎÉÑ ÕÖÅ ÎÁ ÜËÒÁÎÅ." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "ðÅÒ×ÁÑ ÓÔÒÏËÁ ÓÏÏÂÝÅÎÉÑ ÕÖÅ ÎÁ ÜËÒÁÎÅ." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË: " + +#: pager.c:1955 +msgid "Search: " +msgstr "ðÏÉÓË: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "ðÏÄÓËÁÚËÁ ÕÖÅ ÐÅÒÅÄ ×ÁÍÉ." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "îÅÔ ÂÏÌØÛÅ ÃÉÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "úÁ ÃÉÔÉÒÕÅÍÙÍ ÔÅËÓÔÏÍ ÂÏÌØÛÅ ÎÅÔ ÏÓÎÏ×ÎÏÇÏ ÔÅËÓÔÁ." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "óÏÓÔÁ×ÎÏÅ ÓÏÏÂÝÅÎÉÅ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ ÐÁÒÁÍÅÔÒÁ boundary!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "ïÛÉÂËÁ × ×ÙÒÁÖÅÎÉÉ: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "îÅ×ÅÒÎÙÊ ÄÅÎØ ÍÅÓÑÃÁ: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "îÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "îÅ×ÅÒÎÏ ÕËÁÚÁÎÁ ÏÔÎÏÓÉÔÅÌØÎÁÑ ÄÁÔÁ: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "ÏÛÉÂËÁ × ×ÙÒÁÖÅÎÉÉ" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "ÏÛÉÂËÁ × ÏÂÒÁÚÃÅ: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: ÎÅÄÏÐÕÓÔÉÍÁÑ ËÏÍÁÎÄÁ" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: × ÜÔÏÍ ÒÅÖÉÍÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "ÐÒÏÐÕÝÅÎ ÐÁÒÁÍÅÔÒ" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "ÐÒÏÐÕÝÅÎÁ ÓËÏÂËÁ: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "ÐÕÓÔÏÊ ÏÂÒÁÚÅÃ" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "ÏÛÉÂËÁ: ÎÅÉÚ×ÅÓÔÎÁÑ ÏÐÅÒÁÃÉÑ %d (ÓÏÏÂÝÉÔÅ Ï ÜÔÏÊ ÏÛÉÂËÅ)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "ïÂÒÁÚÅà ÐÏÉÓËÁ ËÏÍÐÉÌÉÒÕÅÔÓÑ..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "éÓÐÏÌÎÑÅÔÓÑ ËÏÍÁÎÄÁ ÄÌÑ ÐÏÄÈÏÄÑÝÉÈ ÓÏÏÂÝÅÎÉÊ..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "îÉ ÏÄÎÏ ÓÏÏÂÝÅÎÉÅ ÎÅ ÐÏÄÈÏÄÉÔ ÐÏÄ ËÒÉÔÅÒÉÊ." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "ðÏÉÓË ÄÏÛÅÌ ÄÏ ËÏÎÃÁ, ÎÅ ÎÁÊÄÑ ÎÉÞÅÇÏ ÐÏÄÈÏÄÑÝÅÇÏ" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "ðÏÉÓË ÄÏÛÅÌ ÄÏ ÎÁÞÁÌÁ, ÎÅ ÎÁÊÄÑ ÎÉÞÅÇÏ ÐÏÄÈÏÄÑÝÅÇÏ" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "ðÏÉÓË ÐÒÅÒ×ÁÎ." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP ÆÒÁÚÁ-ÐÁÒÏÌØ ÕÄÁÌÅÎÁ ÉÚ ÐÁÍÑÔÉ." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ PGP-ÐÏÄÐÒÏÃÅÓÓ! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- ëÏÎÅà ×Ù×ÏÄÁ ÐÒÏÇÒÁÍÍÙ PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- îÁÞÁÌÏ PGP-ÓÏÏÂÝÅÎÉÑ --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- îÁÞÁÌÏ ÂÌÏËÁ ÏÔËÒÙÔÏÇÏ PGP-ËÌÀÞÁ --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- îÁÞÁÌÏ ÓÏÏÂÝÅÎÉÑ, ÐÏÄÐÉÓÁÎÎÏÇÏ PGP --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- ëÏÎÅà PGP-ÓÏÏÂÝÅÎÉÑ --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ëÏÎÅà ÂÌÏËÁ ÏÔËÒÙÔÏÇÏ PGP-ËÌÀÞÁ --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- ëÏÎÅà ÓÏÏÂÝÅÎÉÑ, ÐÏÄÐÉÓÁÎÎÏÇÏ PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÎÁÊÔÉ ÎÁÞÁÌÏ PGP-ÓÏÏÂÝÅÎÉÑ! --]\n" +"\n" + +#: pgp.c:662 +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "" +"÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ. óÏÏÂÝÉÔÅ Ï ÎÅÊ ÐÏ ÁÄÒÅÓÕ <roessler@does-not-exist.org>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ PGP-ÐÏÄÐÒÏÃÅÓÓ! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ïÛÉÂËÁ: ÆÏÒÍÁÔ ÓÏÏÂÝÅÎÉÑ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÓÔÁÎÄÁÒÔÕ PGP/MIME --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- îÁÞÁÌÏ ÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- ëÏÎÅà ÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ PGP-ÐÏÄÐÒÏÃÅÓÓ!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞ \"%s\" ÄÌÑ %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ ÄÌÑ %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ÐÒÏÇÒÁÍÍÕ PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "ðÏÌÕÞÅÎÉÅ PGP-ËÌÀÞÁ..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" +"÷ÓÅ ÐÏÄÈÏÄÑÝÉÅ ËÌÀÞÉ ÐÏÍÅÞÅÎÙ ËÁË ÐÒÏÓÒÏÞÅÎÎÙÅ, ÏÔÏÚ×ÁÎÎÙÅ ÉÌÉ ÚÁÐÒÅÝ£ÎÎÙÅ." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "÷ÙÂÒÁÔØ " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "ôÅÓÔ ËÌÀÞÁ " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP-ËÌÀÞÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP-ËÌÀÞÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "éÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "üÔÏÔ ËÌÀÞ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ: ÐÒÏÓÒÏÞÅÎ, ÚÁÐÒÅÝÅÎ ÉÌÉ ÏÔÏÚ×ÁÎ." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID ÐÒÏÓÒÏÞÅÎ, ÚÁÐÒÅÝÅÎ ÉÌÉ ÏÔÏÚ×ÁÎ." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "óÔÅÐÅÎØ ÄÏ×ÅÒÉÑ ÄÌÑ ID ÎÅ ÏÐÒÅÄÅÌÅÎÁ." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID ÎÅÄÅÊÓÔ×ÉÔÅÌÅÎ." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID ÄÅÊÓÔ×ÉÔÅÌÅÎ ÔÏÌØËÏ ÞÁÓÔÉÞÎÏ." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s éÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "÷×ÅÄÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÒÏÇÒÁÍÍÁ PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP-ËÌÀÞ %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "ðÏÉÓË ËÌÀÞÅÊ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "ëÏÍÁÎÄÁ TOP ÓÅÒ×ÅÒÏÍ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÚÁÇÏÌÏ×ËÁ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "ëÏÍÁÎÄÁ UIDL ÓÅÒ×ÅÒÏÍ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "îÅ×ÅÒÎÏ ÕËÁÚÁÎÏ ÉÍÑ POP-ÑÝÉËÁ: %s" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "ðÏÌÕÞÅÎÉÅ ÓÐÉÓËÁ ÓÏÏÂÝÅÎÉÊ..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÓÏÏÂÝÅÎÉÑ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "ðÒÏ×ÅÒËÁ ÎÁÌÉÞÉÑ ÎÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP-ÓÅÒ×ÅÒ ÎÅ ÏÐÒÅÄÅÌÅÎ." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "îÅÔ ÎÏ×ÏÊ ÐÏÞÔÙ × POP-ÑÝÉËÅ." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "õÄÁÌÉÔØ ÓÏÏÂÝÅÎÉÑ Ó ÓÅÒ×ÅÒÁ?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "þÉÔÁÀÔÓÑ ÎÏ×ÙÅ ÓÏÏÂÝÅÎÉÑ (ÂÁÊÔÏ×: %d)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [ÓÏÏÂÝÅÎÉÊ ÐÒÏÞÉÔÁÎÏ: %d ÉÚ %d]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "óÅÒ×ÅÒ ÚÁËÒÙÌ ÓÏÅÄÉÎÅÎÉÅ!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ (ÍÅÔÏÄ APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "ïÛÉÂËÁ APOP-ÁÕÔÅÎÔÉÆÉËÁÃÉÉ." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "ëÏÍÁÎÄÁ USER ÓÅÒ×ÅÒÏÍ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÓÔÁ×ÉÔØ ÓÏÏÂÝÅÎÉÑ ÎÁ ÓÅÒ×ÅÒÅ." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "ïÛÉÂËÁ ÐÒÉ ÕÓÔÁÎÏ×ÌÅÎÉÉ ÓÏÅÄÉÎÅÎÉÑ: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó POP-ÓÅÒ×ÅÒÏÍ..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "ðÒÏ×ÅÒËÁ ÎÏÍÅÒÏ× ÓÏÏÂÝÅÎÉÊ..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "óÏÅÄÉÎÅÎÉÅ ÐÏÔÅÒÑÎÏ. õÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ ÐÏ×ÔÏÒÎÏ?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "ïÔÌÏÖÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "îÅÔ ÏÔÌÏÖÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "îÅ×ÅÒÎÙÊ PGP-ÚÁÇÏÌÏ×ÏË" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "îÅ×ÅÒÎÙÊ S/MIME-ÚÁÇÏÌÏ×ÏË" + +#: postpone.c:554 +msgid "Decryption failed." +msgstr "òÁÓÛÉÆÒÏ×ÁÔØ ÎÅ ÕÄÁÌÁÓØ." + +#: query.c:46 +msgid "New Query" +msgstr "îÏ×ÙÊ ÚÁÐÒÏÓ" + +#: query.c:47 +msgid "Make Alias" +msgstr "óÏÚÄÁÔØ ÐÓÅ×ÄÏÎÉÍ" + +#: query.c:48 +msgid "Search" +msgstr "éÓËÁÔØ" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "ïÖÉÄÁÅÔÓÑ ÏÔ×ÅÔ..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "ëÏÍÁÎÄÁ ÚÁÐÒÏÓÁ ÎÅ ÏÐÒÅÄÅÌÅÎÁ." + +#: query.c:286 +msgid "Query" +msgstr "úÁÐÒÏÓ" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "úÁÐÒÏÓ: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "úÁÐÒÏÓ '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "ðÅÒÅÄÁÔØ ÐÒÏÇÒÁÍÍÅ" + +#: recvattach.c:53 +msgid "Print" +msgstr "îÁÐÅÞÁÔÁÔØ" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "óÏÈÒÁÎÑÅÔÓÑ..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "÷ÌÏÖÅÎÉÅ ÓÏÈÒÁÎÅÎÏ." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ðòåäõðòåöäåîéå: ×Ù ÓÏÂÉÒÁÅÔÅÓØ ÐÅÒÅÚÁÐÉÓÁÔØ %s. ðÒÏÄÏÌÖÉÔØ?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "÷ÌÏÖÅÎÉÅ ÏÂÒÁÂÏÔÁÎÏ." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "ðÒÏÐÕÓÔÉÔØ ÞÅÒÅÚ: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "ðÅÒÅÄÁÔØ ÐÒÏÇÒÁÍÍÅ: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "îÅÉÚ×ÅÓÔÎÏ ËÁË ÐÅÞÁÔÁÔØ %s ×ÌÏÖÅÎÉÑ!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "îÁÐÅÞÁÔÁÔØ ÏÔÍÅÞÅÎÎÙÅ ×ÌÏÖÅÎÉÑ?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "îÁÐÅÞÁÔÁÔØ ×ÌÏÖÅÎÉÅ?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "îÅ ÕÄÁÌÏÓØ ÒÁÓÛÉÆÒÏ×ÁÔØ ÚÁÛÉÆÒÏ×ÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ!" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "÷ÌÏÖÅÎÉÑ" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "äÁÊÄÖÅÓÔ ÎÅ ÓÏÄÅÒÖÉÔ ÎÉ ÏÄÎÏÊ ÞÁÓÔÉ!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "õÄÁÌÅÎÉÅ ×ÌÏÖÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ POP-ÓÅÒ×ÅÒÏÍ." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "õÄÁÌÅÎÉÅ ×ÌÏÖÅÎÉÊ ÉÚ ÚÁÛÉÆÒÏ×ÁÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "äÌÑ ÓÏÓÔÁ×ÎÙÈ ×ÌÏÖÅÎÉÊ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÕÄÁÌÅÎÉÅ." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "÷Ù ÍÏÖÅÔÅ ÐÅÒÅÎÁÐÒÁ×ÌÑÔØ ÔÏÌØËÏ ÞÁÓÔÉ ÔÉÐÁ message/rfc822." + +#: recvcmd.c:213 +msgid "Error bouncing message!" +msgstr "ïÛÉÂËÁ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ÓÏÏÂÝÅÎÉÑ!" + +#: recvcmd.c:213 +msgid "Error bouncing messages!" +msgstr "ïÛÉÂËÁ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ÓÏÏÂÝÅÎÉÊ!" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "ðÅÒÅÓÌÁÔØ ËÁË ×ÌÏÖÅÎÉÑ?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"õÄÁÌÏÓØ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÎÅ ×ÓÅ ×ÌÏÖÅÎÉÑ. ðÅÒÅÓÌÁÔØ ÏÓÔÁÌØÎÙÅ × ×ÉÄÅ MIME?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "ðÅÒÅÓÌÁÔØ ÉÎËÁÐÓÕÌÉÒÏ×ÁÎÎÙÍ × MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "ðÏÍÅÞÅÎÎÙÅ ÓÏÏÂÝÅÎÉÑ ÏÔÓÕÔÓÔ×ÕÀÔ." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "óÐÉÓËÏ× ÒÁÓÓÙÌËÉ ÎÅ ÎÁÊÄÅÎÏ!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"õÄÁÌÏÓØ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÎÅ ×ÓÅ ×ÌÏÖÅÎÉÑ. éÎËÁÐÓÕÌÉÒÏ×ÁÔØ ÏÓÔÁÌØÎÙÅ × MIME?" + +#: remailer.c:480 +msgid "Append" +msgstr "äÏÂÁ×ÉÔØ" + +#: remailer.c:481 +msgid "Insert" +msgstr "÷ÓÔÁ×ÉÔØ" + +#: remailer.c:482 +msgid "Delete" +msgstr "õÄÁÌÉÔØ" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ type2.list mixmaster!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "÷ÙÂÒÁÔØ ÃÅÐÏÞËÕ remailer" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "ïÛÉÂËÁ: %s ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ ËÁË ÐÏÓÌÅÄÎÉÊ remailer" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "ãÅÐÏÞËÉ mixmaster ÉÍÅÀÔ ÏÇÒÁÎÉÞÅÎÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÜÌÅÍÅÎÔÏ×: %d" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "ãÅÐÏÞËÁ remailer ÕÖÅ ÐÕÓÔÁÑ." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "÷Ù ÕÖÅ ÐÏÍÅÔÉÌÉ ÐÅÒ×ÙÊ ÜÌÅÍÅÎÔ ÃÅÐÏÞËÉ." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "÷Ù ÕÖÅ ÐÏÍÅÔÉÌÉ ÐÏÓÌÅÄÎÉÊ ÜÌÅÍÅÎÔ ÃÅÐÏÞËÉ." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster ÎÅ ÐÏÚ×ÏÌÑÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÚÁÇÏÌÏ×ËÉ Cc É Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "õÓÔÁÎÏ×ÉÔÅ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ hostname ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÉÔØ ÎÅ ÕÄÁÌÏÓØ, ÐÒÏÃÅÓÓ-ÐÏÔÏÍÏË ×ÅÒÎÕÌ %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "ïÛÉÂËÁ ÏÔÐÒÁ×ËÉ ÓÏÏÂÝÅÎÉÑ." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "îÅËÏÒÒÅËÔÎÏ ÏÔÆÏÒÍÁÔÉÒÏ×ÁÎÎÁÑ ÚÁÐÉÓØ ÄÌÑ ÔÉÐÁ %s × \"%s\", ÓÔÒÏËÁ %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "ðÕÔØ Ë ÆÁÊÌÕ mailcap ÎÅ ÕËÁÚÁÎ" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "ÄÌÑ ÔÉÐÁ %s ÎÅ ÎÁÊÄÅÎÏ ÚÁÐÉÓÉ × ÆÁÊÌÅ mailcap" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: ÓÌÉÛËÏÍ ÍÁÌÏ ÁÒÇÕÍÅÎÔÏ×" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "îÅÔ ÔÅÍÙ ÐÉÓØÍÁ, ÏÔËÁÚÁÔØÓÑ?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "îÅÔ ÔÅÍÙ ÐÉÓØÍÁ, ÏÔËÁÚ." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "ïÔ×ÅÞÁÔØ ÐÏ %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "ïÔ×ÅÞÁÔØ ÐÏ %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "îÉ ÏÄÎÏ ÉÚ ÐÏÍÅÞÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ ÎÅ Ñ×ÌÑÅÔÓÑ ×ÉÄÉÍÙÍ!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "÷ÓÔÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ × ÏÔ×ÅÔ?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "÷ËÌÀÞÁÅÔÓÑ ÃÉÔÉÒÕÅÍÏÅ ÓÏÏÂÝÅÎÉÅ..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "îÅ ÕÄÁÌÏÓØ ×ÓÔÁ×ÉÔØ ×ÓÅ ÚÁÔÒÅÂÏ×ÁÎÎÙÅ ÓÏÏÂÝÅÎÉÑ!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "ðÅÒÅÓÌÁÔØ ËÁË ×ÌÏÖÅÎÉÅ?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "ðÏÄÇÏÔÏ×ËÁ ÐÅÒÅÓÙÌÁÅÍÏÇÏ ÓÏÏÂÝÅÎÉÑ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "ðÒÏÄÏÌÖÉÔØ ÏÔÌÏÖÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ?" + +#: send.c:1336 +msgid "Edit forwarded message?" +msgstr "òÅÄÁËÔÉÒÏ×ÁÔØ ÐÅÒÅÓÙÌÁÅÍÏÅ ÓÏÏÂÝÅÎÉÅ?" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "ïÔËÁÚÁÔØÓÑ ÏÔ ÎÅÉÚÍÅÎÅÎÎÏÇÏ ÓÏÏÂÝÅÎÉÑ?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÉÚÍÅÎÉÌÏÓØ, ÏÔËÁÚ." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "ðÉÓØÍÏ ÎÅ ÏÔÐÒÁ×ÌÅÎÏ." + +#: send.c:1430 +msgid "Message postponed." +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÌÏÖÅÎÏ." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "îÅ ÕËÁÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁÔÁ!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "îÅ ÂÙÌÏ ÕËÁÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁÔÁ." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "îÅÔ ÔÅÍÙ ÓÏÏÂÝÅÎÉÑ, ÐÒÅÒ×ÁÔØ ÏÔÐÒÁ×ËÕ?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "ôÅÍÁ ÓÏÏÂÝÅÎÉÑ ÎÅ ÕËÁÚÁÎÁ." + +#: send.c:1526 +msgid "Sending message..." +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÌÑÅÔÓÑ..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÉÔØ ÎÅ ÕÄÁÌÏÓØ." + +#: send.c:1672 +msgid "Mail sent." +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÌÅÎÏ." + +#: send.c:1672 +msgid "Sending in background." +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÌÑÅÔÓÑ × ÆÏÎÏ×ÏÍ ÒÅÖÉÍÅ." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "ðÁÒÁÍÅÔÒ boundary ÎÅ ÎÁÊÄÅÎ! (óÏÏÂÝÉÔÅ Ï ÜÔÏÊ ÏÛÉÂËÅ)" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ÂÏÌØÛÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÆÁÊÌÏÍ." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "óÏÏÂÝÅÎÉÅ ÏÔÐÒÁ×ÉÔØ ÎÅ ÕÄÁÌÏÓØ, ÐÒÏÃÅÓÓ-ÐÏÔÏÍÏË ×ÅÒÎÕÌ %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "òÅÚÕÌØÔÁÔ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ ÄÏÓÔÁ×ËÉ ÐÏÞÔÙ" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "îÅËÏÒÒÅËÔÎÙÊ IDN %s ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ Resent-From." + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... úÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "ðÏÌÕÞÅÎ ÓÉÇÎÁÌ %s... úÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "ðÏÌÕÞÅÎ ÓÉÇÎÁÌ %d... úÁ×ÅÒÛÅÎÉÅ ÒÁÂÏÔÙ.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "äÏ×ÅÒÅÎÎÙÊ " + +#: smime.c:303 +msgid "Verified " +msgstr "ðÒÏ×ÅÒÅÎÎÙÊ " + +#: smime.c:306 +msgid "Unverified" +msgstr "îÅÐÒÏ×ÅÒÅÎÎÙÊ" + +#: smime.c:309 +msgid "Expired " +msgstr "ðÒÏÓÒÏÞÅÎÎÙÊ " + +#: smime.c:312 +msgid "Revoked " +msgstr "ïÔÏÚ×ÁÎÎÙÊ " + +#: smime.c:315 +msgid "Invalid " +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ " + +#: smime.c:318 +msgid "Unknown " +msgstr "îÅÉÚ×ÅÓÔÎÙÊ " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "÷×ÅÄÉÔÅ ÉÄÅÎÔÉÆÉËÁÔÏÒ ËÌÀÞÁ: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME-ÓÅÒÔÉÆÉËÁÔÙ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ëÌÀÞ %s ÎÅ ÐÒÏ×ÅÒÅÎ. ÷Ù ÖÅÌÁÅÔÅ ÅÇÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ %s?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ (ÎÅÄÏ×ÅÒÅÎÎÙÊ!) ËÌÀÞ %s ÄÌÑ %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞ %s ÄÌÑ %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÷Ù ÅÝ£ ÎÅ ÒÅÛÉÌÉ, ÄÏ×ÅÒÑÔØ ÌÉ ËÌÀÞÕ %s. (ðÒÏÄÏÌÖÉÔØ)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "îÅ ÎÁÊÄÅÎÏ (ÐÒÁ×ÉÌØÎÏÇÏ) ÓÅÒÔÉÆÉËÁÔÁ ÄÌÑ %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ OpenSSL-ÐÏÄÐÒÏÃÅÓÓ!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "ÎÅÔ ÆÁÊÌÁ ÓÅÒÔÉÆÉËÁÔÁ" + +#: smime.c:1200 +msgid "no mbox" +msgstr "ÎÅÔ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "îÅÔ ×Ù×ÏÄÁ ÏÔ ÐÒÏÇÒÁÍÍÙ OpenSSL.." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÐÒÏÍÅÖÕÔÏÞÎÙÊ ÓÅÒÔÉÆÉËÁÔ ÎÅ ÎÁÊÄÅÎ." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ OpenSSL-ÐÏÄÐÒÏÃÅÓÓ!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "îÅÔ ×Ù×ÏÄÁ ÏÔ ÐÒÏÇÒÁÍÍÙ OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- ëÏÎÅà ×Ù×ÏÄÁ ÐÒÏÇÒÁÍÍÙ OpenSSL --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ïÛÉÂËÁ: ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ OpenSSL-ÐÏÄÐÒÏÃÅÓÓ! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "[-- îÁÞÁÌÏ ÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "[-- îÁÞÁÌÏ ÄÁÎÎÙÈ, ÐÏÄÐÉÓÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- ëÏÎÅà ÄÁÎÎÙÈ, ÚÁÛÉÆÒÏ×ÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- ëÏÎÅà ÄÁÎÎÙÈ, ÐÏÄÐÉÓÁÎÎÙÈ × ÆÏÒÍÁÔÅ S/MIME --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË ÓÏÒÔÉÒÕÅÔÓÑ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "îÅ ÕÄÁÌÏÓØ ÎÁÊÔÉ ÆÕÎËÃÉÀ ÓÏÒÔÉÒÏ×ËÉ! (ÓÏÏÂÝÉÔÅ Ï ÜÔÏÊ ÏÛÉÂËÅ)" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(ÎÅÔ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "òÏÄÉÔÅÌØÓËÏÅ ÓÏÏÂÝÅÎÉÅ ÎÅ ×ÉÄÉÍÏ ÐÒÉ ÐÒÏÓÍÏÔÒÅ Ó ÏÇÒÁÎÉÞÅÎÉÅÍ." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "òÏÄÉÔÅÌØÓËÏÅ ÓÏÏÂÝÅÎÉÅ ÎÅÄÏÓÔÕÐÎÏ." diff --git a/po/sk.gmo b/po/sk.gmo new file mode 100644 index 0000000000000000000000000000000000000000..628e1c8b20f2cb448ffa8b1bbb60bd19bbe14468 GIT binary patch literal 44407 zcmb`w37lO;ng4xcPb0FgvYZZtB#`b-5Re2Uge(xULKZd=ZudQ%zPZb}+@+IlBp@m} zf{GySGq{0+qcWp|ntwDdDB?b&BQB`eDw?Pf2T&oJzwh_=RGo9rz1@wzpZC3=RR2!x zRZl(j)KgE@Ir-^f``jJyJ8Q2XI3E1cp+WFRo=YbyGzc!}3j%_I1>h0j8t_PP$cJwM zUyT0_AN~=r3;!3v{lRa7hlAe(PXu>@D(8UN&VK@^dd~w@<(1%Z;Emu>;5$I2f579H zz$y5D2p$Oj!iPTzo`ip&IYBTTJOw-kTn?)J5vX==^8Po1YWF?hA>cOfFz_3o(mf6y z3;q#Qx`WSf{Wu+*iGMz*b{0V8e+{U1-VL4(ei&5y9tG8&pMx(1yI$hb9}TMCGeGrc zvBy>5zWA>MRsXf1>L2m(cY`YD9#C}t2q-##3KYFQ2Tlba1y%oZpxU+XnT`&}feN1m zs@!wHBfz!b;a~w&|8E2pe;0TJ_yDN*FZu8vfQR9K2GqFif0j#kIw-na0IEG#`|uig z8vfUTM}r>+#SdQtA#t!1JQaNL*{=T=g6iMJpxV2}hhOW%Bk&Z$tDxw2H>mdB1FD_d zeEhdTjn6Y+2=4pRAYdqhQ$da6mEfV^t3lEGZcybs0Ct042i1;UAYBcf1&;=M&Iy9O z!Ns8ZyA;$o<iQiblE*jr@P7r5B>dmOBfy8jW5CBi<$nfLxd+d6d@&t73jZQd?Yi3g zo8EsrDE_$*gml3};0*9NQ2m-ZkGTLY2loRn1&;-<0M(xwsQ%puithJ#d>9nJ?gCE- zk383n?*dSCjX;gZ2*{KRUhCsO397w60!8ot1=ZiZ&U5`c1{7bv1XR1`f-2{HP<(I+ zsQFs})sKGy#a|x>)xR%;YX4tA(e22WxpC_SRnG;W=(pa7SHOeu-wd7r-r>VP28v%k z4{9EL&4+&<RKItE8lOYYcl13KRQiRW+O+~a2psnK8W52d+zBe*7eV#!`{0YfAA_Rz zZ$Z)TPoVg%Yrf;h<3Y9mWggdnqGJJ6zi$Rr&L_c>z%PTE-%o%l_kasreTRdh`!S&C zHq+yIpy;p)RQ$D|>aTkLEuhlh1&Y4+fhT~U2i5PNg37-GRDI8aO1Jj{SMLd+_-iUC zewYbrT(1I;2M56u!B>Oo=lem?;nSeX`39(Q_!X%BJ`F10%nM!o5>VrM9e4(~8GJGL zZ=l-w6;O140#yHYgBqs;7rJz3f@=S2P;|WxRQa1g)&Evd<$Mej9limoosWaZfq(Sj zhb(g8Cxc2i7u0wx2i2bvsPb?2@oxu3uMdM~f)9e~=WjsK<Imv9;8Ba+_|5~>o~5Ap zdjM3wUJ0uGZvpoK-v?^^?gKSGp9Yohi=gWNF{t)E4XU5}Epg*>GPp1P(?I2)4T`TW z1VztFLFF%lD(^L*`u{JW@@)mxpU?U5uYr<xPk?IIE+79CsQIx6)OZ|tksH6`L6v(Z zDE?Rps()93DnAC*o+h{)e2tI)Z&2m@3Y-i68B~39E_VGp8&tkE;Hh9gD7yR;xF2{I zD7wE3oDO~nJO%tVsBwD+oB<xN)U|I8C^{?y4*>f?l~eTo8mRHO0aQC~14ZvUK=tnf zpz?hdRJw;jrF#^d0zL+cK2LyD9Xt)r0nfX{l~V!5@2>*Y&Ub<;cRQ%@`~k>P5&RJh z!QN#qeihh*zu@uhp!n#^pvwO#sBu38;+_po1y#?Lp!o56P~&h1sCwS!<39na{;z|Y z7f*nq^It%fKXru*KNnQLE(Om3uLV`kouKB)1EA{rHmLdVYw$Gi_?2#aE&^5FTJRvS z465E6K+Vs)LG|Mkp!oF(AO3<>j!#blRo^`Czufz4pvrkOsCL{Bs=Tj);=f;m;)}n6 zGr?0<J36fdmG3%G<2wq9PHzM?FFpdQ9bW-8kADG91^2(yt*fVjieC;c0f)esfDeGP z!C!!L!6Pn17Xw#<h_2uUQ1RQrGr%W7)i-sGOZPJHMff*@hk_&E>ELak#^qC>==@VK z1pfqfgGaA*^qmVHhW|29^ol^W`xa2`y%!XnzTm^hK#j{j>s<T^pxQIn<62PT7=t1B zE^r#S4HUh`K=FUD-qp9S$EjdQ@O)6?aUG~}*aE6O_krrqSHTec1E_W!dbtZf4V;4i zQc!fb8dQB{Q0=)LRDV7Ns{h{wHBNs7mHyZ(oLo5_JR1Lb-oF+!x`2lhev1!(8>n`E z2n@k5gW}U)fhzAAuov9#N+&<g0+oL`sPeA^#b2AjgTeQM8pn_O@Gp4$EhzdQd6lE% zS>TcQuLh3*uLsr7TS1k3FL)gIS?~V=sQ&)J<6&1jI-CirU#mf-FN4bedQkPf7YxDA zgQC+IsCxE&xtj;4csw6ed#(VLt^z9EouK;nAE5gEm=Avv)Ofz=8duL8Q1xF5iVsVm z=ywyS_PhmDdG~vK1bi|6UxO-t?^n3-?E#hU3Q+krfyaVx29E;o2af?i51t7A(1$+@ zs{IFF>)JI9RC_K4m45(KeK&%dm+u7k0v`s|&aZ+Rx5vP}!QX(Y|M#HUx8HTHeY3&i z@m~!pelw`{+yP3i-|zk30#*O7!4TXl=klEliar;B%D)CY2`qvqfVY8a@BKdhAuz=M z7}yQ|6;%2Y`(3@~gGzrnXnf@HR#5f4+vCT;srbJDsz1L3RnChB9Nl_B$(u#s$zT;! zzupQS0)7+}y|;s+^G|&E)8NVY_sKiHp5bvNsQxuT&8OQz<$o6_KH3VZz25{yr=Not zfO|l->-@;o^9oS?Yk(U6H-QI&_kybTKS0s#dmf(#RnMV=Zk%U>efX~dHILs2YP>%K ziay^0MVB#9<GRlV=kEs9jz!=pU>;OE{|QuoJ_u?&KJMfH2NZuj2ddvk4ms=rCHEJD zQ@~+R{kR!ayWbA(4L%5Vfm^|NFZSc$i7#MHEqXpFIl2`=(f=mzzZ+CL?gv%g*Fm*! zC#d@V42s?_C_B0w35uR)g5rafpxV6|6n)+bs{IdvqR(TX^8eoZ_o_HKcO)n}P6O4S zmx3CPm0&Me169xaK#lV@Q04v?sPcAz)4;!i;<Kr-OLs0PI<NLv1T~(wf@;sbU=R3d zP~-J0Q047ib@`75`|!^K4+38fo&|0M)!z4lO8;?i2KX>2Iz0*Q3qA)P0R9bByAHVC z)!z*&`~pz@Sqi=ge1#7$`|x2fB>Xn;h2Td((RVAT_I?lCAAHJ(?*>)RQ8h=OK2ZLP zz!1C+6dhmX<KGR69-r{x-vOuN|DE?AQFrmZpvqa{aS)t~|0eI>3W~qK1NMSXd4G4q z^=komDB-KY!@+(~{T~Jo25$m2FW&6K{}WWZJ_{<}kHHZ9J$M*+aMRT{71VfK2x>jw z3@ZKupxX0EQ2g{LDE`<5ijId5J3T7|6~7kT2P}f(`zk29z6n%2-Uf!?gP_{|C@6Y7 z4vL=7dOU2COFs)#KbL`$2iJm1cMB+fd=IE`{FL{97wpFWd+=r8A)B54vJ%w1YJ&TL z_kgPZK2YU60E#ca2CAJu03~<-42o}09&zKb20Ro0EuiMrr$DvuF;Mh>5<Ca|8z{P+ zGwSGg1*rHUsQPXIMaQ>+qR(eQ@%fiP(e-QKap3noJ_U-N2i@T0%<14f{0l(w?<+y2 ze<!H+{3m!6_=v~HefXb1&5y2Ey8avsYMd_yHQ%lV6(4~|gAMQu@ODsi`JBg}f=a&! z6rb*YqvNl$LDhRPcpi8ycs%$XQ2pEL<39%;iT_cLzXOlJzt<KwZ;l3EjDJ3O40ttY z?E%&A+d+-jSHM%j?|~Yxzk;IQjGJ72XMxA!KNl4LuLD)@29Gy-ybDyi`@R1mQ0@64 z7=phC#eWCi?AEz6K+)}dQ1x93o&>%ER6n<X;<ML)7l5~c8vk#ACxSl))$YH5;@7FK za`h|%RZj$}y{`usgYN<*Pksifo&#=i`DTFU;=cqu0lXEQ3Vsk2{k{UKzrO%yfX{*5 z;M7;U_AdfO*UQ1FU<{rN-s%0H1Vxu0f*RMSeR$Vv+_?0B#}U57`*WbiVH8xk_j%k7 zD*vOP*3(_!9Pn9C{C3)FUHj*Pv+-XJioUN0)!%n}+y;s+kAcd!3p^0~E2#PoxYg-J zA*goG0X2@xK+*p?Q2nfe`+;|Pd>5#4-v=H7egag#z67eA$3gM&bD-#a)azXSGeOmV zE*OFrfs!jjKK^=8e7YG_x?4fD`%X~f@;*@f{V7oG`!DbR8K`oe16BWCuSe#C$Ad~& z2G!mh!6o3E!TrETLACoQpy>B3D0zP1KRLRe4JzFN@Br{)Q1kavk2iyA&jVl&_y`z+ ze*!fQN58@4dnvd-{tLh<;KiW&c^RnkuLD*822kaVf}-nP9zO`G{s%$LpY1;U>)=xS zKL!_rr{3n|SqT*VZw5~R{~1(!z6feOeh!`u2DiKRz7!N4t^j9%b&u}>Mb9sTXMm4` zqT^w2baMR^Q2DL|HBTGhzTjP;>VGFFKKmr7dcOs#pT7fVfqw&)Z`PY!_%iSy{I38{ z152Rty&Vj}2SLf}M?v-HH{eUat~a}U=Ywj`a!}*G!TUFXD(6m6_5M33e)<V0et+8g z54gkmPXyKPmw+0N72ZDxN>1GD@jamG`!pyze-~8w&w?s{+FM+`=Yj|0zY;tPEPyA2 z_xSjSz|--Mf$H}`ce?fW98h%Z2Q|JofwRFcgMHwiK=uFByIj7jK=H$CLB)R?JO}(6 zco=xjTV41v@J0A<05v{u05$IK_xN=m{tOrr{=&N*_JC^7N>KeNg6hW&U^jRVsPX&) zD7yR%RQkVwqW>{(b8_u$Q0Z5IijP6{>vm9d{46*f{5jYQcD>!{NpnG!e?F*u*MKT# z6cj(a2UNb#fRbCk1T~KPzr&4VH>i0y4^;au1T`P80o9)kpvv0>o(jGbJQDmosP;b! zYJ8soMbGYcy7_P>sB}xb|K;E@_$%Py;Ojuq``w`U=fj}d|1kJM@E70_;2%Ko!M^Wu z{yCu9wFFf8>p_ic3Di7!4|pi}VNm`3jE{fZ<H7HC^~?vA?&aXIU<DMNUk|F>kAlko z5GXqS3RJrN-sAWq^mq;!622Nd4!j;b9=si#2Hp><+;4;8r)NNwbHYEnd@lt>$16aM z<1i>X-wi6?XTTnC3>5ti{ukG-8KBBv=Ka@$ihrxekAkA}!{G7Yk3g08XOG9<<HmIX zsD2KB;@ew6mGfcn#o$Ar`t>+?61W>Y5j^g_E_^O{0{*ogYoO-q9iZB`&EpuT{QJMp z>0i^qz47;hqQ@Y32zav(e+zgN{<}ey^AS+({0<m`e*}*Pk9xoBUoR-SEd$k$8mRcU z`S6eV@b7`5%X6UmchCpie3}WWpI3m&R|iFh+rVz{gP_{~FgO+b6{vns`Jlt;pz<#U z#Xr}1|FHMJ1q=!Q5U6%O0;;?xLAB@LdtJLv236lhpz1Gx;_F*L)q4l1@;~A6tDwqz z+~a=tx%u7$sy*vK&9f?~`fdU>PwxT6{~rg{k1v52fj<XT&uJfW^{)U`&LF7qconGf z-T^Azhrkg08aNI7Ehzpt^k1D^m<`Use+?);elw_YKI`#+K=J2qLFGH(e%Jr$pxV0> zR6PYy^tc@qJ?;fh20sB#2fq)BZhr$ce%&8-I2XJC|D~YXeJ6Md_&!kOJq+#(J`PR+ zp8#LC7vloH0RKz)^9xYF$9aAs?rNT2ip$|%Oxh0<rm~*_^*a_kg7A0p%ydtGujc6? z;@*j?<35Yi@Au%>aL1Ep75?*ZH{wE^e&-VRAK+U-{oae4N!r74vk5!WhpYYH!s+)2 zZlOJ4+ams-aT;&^4)*EwJc}~^87#=-e{Uy#7&m~s$%p+C)c77o`garlN8D7Nzf0J1 zp7mRbJB4SKNc$b+!{zxC&&T8TaZ$ndz%SwdU-18e9|PY9cK+59a53Rqz{@l7U*!4Q zgss8Vc>WToUpH;~Dfm0wsf16#|1O>{$L)u^4EF>s``du$b-2?>doy@D?i8N&D^rFZ z4*<V~`zG!M1RMzJcM<OMxI+m$1Si|xI{aF@vcLU&`WwMxaBsqWmIUX3e+9n+zJ&ZG zpXpQJj|lr7PQNPdlepXP@4?-R3w_+(gg0>dy@0U&asS411fJ~E{0{sKVgCXCFYZ8| zPX`|dH-ldU@4<E9D)?Ux{v3P<sNeOtF8umkihGrRmj6PY7iIi!BkWY%*L~O_;9w?R z>-R@-zs4OzpY@YWTVhY{&o}+^HQ+I%86y7(&j<SSivCaBV#5C$Tnk>{>-YoyU+}yQ z{5E(kxYEb{3Y5OE8rQ?~{@~%@*T6S|@4|f$w-4?UxF6zvhSP5d_coq?3;s$0{`WD$ zw07+P4@d&RWw-}$C(!0+!IQydzN~(a1P5=zZN&dta5icFjprBP_TYa%?oQkz_~(MJ z1?S_==UKlqdHxrieha}{z&pYJ!p-M-8~AZ>Ic^@${|7t=w~6N$QrAa#PJUMr_9r}F z0QK91ldRS6c-(H>UAS4e1IRlQY>@V15OEn?&GSxhD)<{vzgO}+jkL+{Is6~M^HDJS zTZw0mPq&%p&k=tiDBa*R+z;^IihCi?`}=ggzKmHOi3-;6+?A<MVL!+HKo9)>h#Rvf z<UVOH!(D>^8c@H(z)yhdz}NUNi{MW^c>uMB>Gw&}oI!negWtjbKHRCk{;%+S1mWMu zCBOdU0sMv!f5PKE;HwDVm;BOA^g9`MF#h#E&3nPuTMT^c!~W{ANcb4fXZre;><aw7 z-v94BKZ!ew@RM-&@%$d#bmCtMUW@w)PQSA~9tu8+`-Te+{!4NGS@25S-rj!+>2Bru z4L<LSC^y32#QhIpAHe;d=bwUApXUAGzv5;Seicr?SKwam<KMvZlM3YbFStJw{@*_C z8T{LEMf`68li%xn{CQv{3H10fk6!?%<4&ZF=acTYK98cmjvK)3^kJv-d<yQ3xJ9@} zaW@n97x3M<b8+|L{vCI;r}b{1_cp>F;Q7b6XMNa@2)mu<)wpT6-{3AFOuu8v|7H9$ zaKFT9@wpy64g4|Q0?%8)kAQQ)laz+v2JkNbd?ab7y5RKh7UGV^J&d~vw-0GX!KX;^ zRov%rf5ETc!?<7j=Oy4`3&qv|ehB{`a65R`9pnYzJMh=Q9{G7b3-=)I4mrY;-%<G2 z<5`gec<jme|J6S)CGByPcNqTv!}D|CPjH|1@p}=rH|{ey{k{rbiR&ZJ;rK^!SKvbY zXAr)T=Rf20n~6UU=D}eLK}P~l#2tf+3I8<i1|KIl8utpqlHZ$oj=kqnA3g`X4tErF z>i0L?eYo!sb|yFvx67w}n&%sMehj=4H-kJQK5o0mx!@0p`!eono=@`S=6pQC_WQs5 z{dgwq1Rwq~!d}Dk8Q#Aa`Dgg&t;9XV^9rBuLp)FS&;JSj4R@ONe;528pYQcNzr;U( z5WFA%2|nGMefTQ;-8`4TLGU<*^L#(>ecb1H)^Bg$pBLlr_F>0?yIgc|3(v2{J%)P< z_ZFOfZ^wPgKg<6!{oyx-uqJLl%H0?LbqeHn5n;VxS)Q(iak*M3MPXcR6yi#KUeI+> zREcVZfv~?&$rmac>hrp~g06Ly{<vAmhl9<^fJ;bdIAi+!>EU2p3rmH1W9Gat2v^sl zdOe&ztv)?$#QfW^fwDK%3LI>Qg-X~MD%43_#-9&|3(=+^tQR&^!dzXM8@UY|qI@uI zU><3QbEQH)9Ei*1T*ZY|;zn3+R;zJMxs%e$aXt#B<-=lBZOjUJ$Va7!1ifv6<#;&C zcSg6WDbwoQhA6Bw%l%QUw=0-d53fFXTK<}l;tPWXiVN3O^SMS8MwJ1ADjVjv(p2KG z6jwGxwJ_QYA?n?VqN8eXF3cBd(Lf`vjnJY@a5+~f^~amr)B3<9Wj$*6Jk5%Ko~W*Q zkg3Edv=gX*By2>rG6g8!$QU}J#+A~D4I3jIZ4Tr9jWp2GC1m&Q2pc0+h)V%U1O+r* z2o0$>2Zq92qfsmLHyL21OG2$dZ6OKgXyD4ZYFk`6sx;dIGEHj4aX1)l3Ujp$P0}^$ zmatjL^}|{481?69#vn{Qd5n$dys%j*R^m;Sgd9G-3ybmv1}TXOXKa~oBpQlJ)tTal zR_;0s2m^%Ws4*17nwhASUP(>ExmrOj4Q4E6_9Se!snCFMVQ(12`pkz)6f#<cMm;JG zQrV1wxIzuhNY9lBW}mLP(&M^nM3^4B`3M1u(Mb19(#4R~SPD<QFdBt$TmMKSs?Q9A z8O?f>&PtW#W@0s0Ys?JJTeouA%2k)IJU=)u9}VW3rN;Tef_^&b{zA265+og%?_y}! z__*F+K|U`jz>Ho{D&*>6E}z$Q^qw?4ss{_I)u=_5x`uOFox=T4hvjCy5%x#WD50F6 zpuvL7sJmy8MO*;STWyxW0_!>EKJ}*|_29y|(TK}oJeU^Dbgd7;8@<FK<DxXe+B80p z-nA$6txrOoEK5pJBsmu5D$^U`KrNCW5y#Tqae;K8J**Lxk$Jfqb5>053dzTfQan(k z0C?L4m2(XyLL~=ZlA}Z&vtVb(N%MW07=nj=`DnPW(kzv-fvYcC&4li+*5UyMuiHl% zuViGHf+c2JeelgyU{>5a)~2U<lQyZeTbOHZ7;325y}e<$cymEh$+}?SS`Bg~#CT`) zP!0iWG#-pgc|`4|La8L)(BjgdQ%ofvgAi`?1`8+7p?0=%DH-zF{q<us6hT%dRmgai zq8yR>8xEFo8+eTCn);Bng3M&a6wfYQu>jgdwPBWyUW#<WR^x4pt1{Fng2AaWg`--< zrE*0OX)NZ$=t`q!En-&-2>jU?f>YvJIqc8Xqdo?RLaQSxGLx%W%A4@_qtebW3}u`o z7)0WSiTp|=a(8%jEz+v$ghGFF!!?;Kg~~vwnP(0{?pkzxGpcL#_484Dk``{fC5BEz zYLSJt20x9dYu>AGz93O8X=Ht*GB8w&E0SS8EBr!DZr(^jELwcwx{Jb12p5efQVS8v z%HOQH!I4Un)9AorOE*+vNrbLoQAF1^C`GOjmZIUv_)Os?Ic81LnmY9|mq^MWE{f^{ zwL&#ml&s_7)zj+N%nFxi{+4s~;ylgb#g|>S>auxZ6<$HqcF;3eTp6g1R2v|}A8M*q zbM<<4s7B&>J`|Q)y2#cXtti3bT8-t1#d2DGmRlmG<y}olM6#%B{ZLF-D^Ik!DiI6? z+Oja&(5gm_dr%DuOtoI0iKW0e8)2=S-9ETJz<gKwj27csrV&&`I)E;?QA?Q9M2AT% z7qe+d1k-f2Y>E0~k@FDsrA9&PQ6CDHXvKIA+4zQtq(+QF0nKVA+-kmc*<2DF<FnAa z&Cx*9YD~z*oJ~eIX}p9HDGLk`f0+0NE1Hc4VunS&iQ<_XrrGmbF?y^vE5=XBYzPNy ztST)@u!K%FYo?~yL@<%hycMyda0uZT)#|;$WXbAiR@H2>2BI<2@OOt{Yrb^OvL(4R z9sIw7(UfXCz_Qjbp+avEEShEA!IH@Fc|wV_Hl*{_)AD_&z~j=0SjPM-jQQPjWSZ}+ za7H{6F=!e;p4?1Z;b(=g@{EC*ITqH^e3t?7mRVP3iNF!+ghYFx;nO&8%6iNS>eUQt zARkySETD#tfY4-lY^~u-;@YNMEg!B}x?-_3_FT2z)Pk6w&y~ZtSq&~mt+PLV!ntP( z7--gNl!k)bABj)BQm`~+9b@g5t{9>xNcvWhHj<gSMt5NG6GfwhA@k8tO>HA#sT6Hs z7$pN70|ZOUaCkMUIi(!lgpXZ^w6&5-$>f$Km^!UKH4z2DQZJW1?<pRsQyQ61j8pUT zxe?QFPywJ6GAfBkwlKYEh}#Gx%2kpsDSBLZw#2w7GSMBe1v#BR*KEWl0Q{`8`Y&mg zt0J5)m(lYfJS}6vUAkyqID0b<m4~sgwOZTG-ti$}cB?5mNm1_&mggqmhUMCDW-4wI z?-pszTP}UdO_ONz0BW~(jI~HxNA`EbsT!?5%h}ed(}jxqj1SrmGS#JJ8pqj~WmYDp zq1T(7K9w>A>2m`$Z6D(*%UA=Q!U~}<VhSZA0g@Jd#=NaZwvHmvKwPUet1zIVeHhAL zgUx0pq@1f2VX9_D^HST9Ua><af%LQ<DQa!m(1T5hQn!5ZT5^4zQNC5Hf}_n+ZBP?N zGMnab32Kw*t@(uTXPcZBhB}9cxyH(7hK7sTfqBN4qQP=o52yKdDjrs<#>h=KH#(9O zqtG@OlvXbWiO|y~X}~C&O2JAaSHRBEm8PN0Mm1*fpkY3h&1@_YiQns(X#zG@9R=5& zG*F%b>n_ZZ?pMhr4ibqI&QEtb#3=0qapJ6%?9(o7Mzs-pvc*H%J+nnI^83fKSOq3D z^NKuhg0gRJ*q_xKf|aq`FlrZ(E~79sldD7hv-RZ~We}YU5$hArs?1LtQ`@XDQhpR^ z1|5nu-Bw&lQ=-8^nA!45Kd~@B?@`6b<eRDFS{p585@!433Vl>SHl~$zJVUtI$(BcI zqNr-~z*?Rbp<LSNXXGmk=3ApkIx!U1tI>cNeUccJCKFfPQ_O`YD<^HVa%~MVk}}`d zv&l9#V5}Jj*8<00Mhh()l%}mrdz|SeOjdMG=2Ic(Vo_nk>zlEbhE{P3WF>^L+#r<| z(5z(Ag}Fg3mzfYNE+MT3YW1qs$yl`Fd_&dGbb6%BYss)_6{-bTg!PSDQ<8NnPbM;r za6^}g*~CV@mCp+8*d?hbc0969btZJ7v%;M06lh$gi_Xtv@KF;4F)CJ>-=Sx@ymQm8 zo(&i31tg~Rt0Ufuk&a>p$9DQOD{YgSmT9<cEn6k?n`P4eQ8tJ~_syybni#3Ivo~0! zjk}*8Z61xGsxt8{$s4stv)(!dBx#>1slh6z1(sRfY9rl2`<8^3);3@w(X<qQ3?U-b zp6rqqtY!zZDMrb16Ym1swX8;=jkSaKf@*aE1ET(D`Av0!Bn0ub+HIH^1^84OLhZbz z2=H!<lgnPJIhLHC2BX|1T<VO@xyp!Twu+q9Lqe3uVFci6DQoU;hRPIYN}QKWiPw*F zOL3b~pV<-TbD#~ZZq`t*r=^DHgwB)4kjaU4`)hVN7m!e>ozRvFf?V2UgQ7p7b|&+K z%NTWu7_+6c`)JO%fN;jN{IqE^2_Mj2e%!oPff_YNipnmtt-Ff%Oeb1iCI!>|)p$;; zOB=c@8tz%6SvVs<6Wz6M#^B6axo<{oW;8I|2jQ5ieGRq+eKQ&}O<48KXwIz22+>zB z%ov@CRfDYoqHDfY%kF_S-b(^lYg}M9K-FS7bv4_5qf{Nrv6--fwd=^oGb%Gt+*RNF zkQWh$Bm2YVV*o>nGqJ$hDF-NpI_H;Hyha4aYhk^SYcyE~q}4!?bdThciAHP8(&IsM zgZ8?xaEPJncb3OwTPcH#BQmQ=HeCaS@Ocx#&MejFeo|a~1%8Sau>M8bZ?IZuayqpD z8+)2?Q!U5FjI~5+flQ$j#n6N#*!oaH4pWnWEwX!P@!uL`FoEqx0i%cPV&MRmGb(Hu z&bmpANR(A=4Z3?N;eA!bUf%w=b0K+Wg^3B}|2I~%g8ttz4?NT{Bi80p3rO3pLg5+n zRy`bvo7k(gUrgk2cR(Vyk8qMTBkk8pJMb)-2wuMs^#*Hoh?cQADgirdEylej8en=9 zE(vSobJ5s{J+(60nk1XBbYN74wlykApe}k&LLjjA!C-3(<w$0bWMdRMYmQVtb{onu zIKZyi_DOW?@29p6mHv<#R-e!kzpi!2;|>a-o%P#`BsvM1jJuu9CCKEkJyv%nWKgD# z#J=GyHI_9?NeLgB4KvxSp}xXwac0ozw6w01GC*dh5+ozo#u@AU8Pq~Xfe~}IUX;*v z49dj3w60o;oup4VLULvuQgXVpxc8X3#ZFvnQI8ulcj!ukN#-nzFLU+-w_48+)}vew zj+h<7jP4B#RfOtnXo1_G_6C<PxNPOpl^0=cx)S!yp$(yL!3B&1TN-EOVHL<8GhCi? z_B~b8VhM>#mZY{wBdlkj3F6uPu`8=b>g(m24x6x;Nj48jZxqYhp4*$($~iWGIZo5k zt#xp@6llLMrw5YjdF_2<15Fk+^#s}{Nzuc)y(b|x3H;z&L`&W&j|l_6GFVBWwYELR z)`@BPWcf8pmNfB3Tz}MRJ10xb*tYwz{ehO_?jWJP4jXhDP)IFay%WdzwoejU#TqzC zl-o><i!7x^m5HM!tIzVas*@=hnS?bxM%?Fh5Ie|lFrKd1_V{MCJ=Vs)g76frA`H|b zOBuU@Q%cQzFY?%NQ;Q8;(Mo3#Zr`3v%)Z*-z&U4}VO+r$3cG&zGWg+|aKXR;*9qna zSNHVb?;{+B;|xB%ePA(uo-m6;?h3e|#O_sZu(PX4u93N?=bEne=%(2SvQZZ<zG&%6 zn~p0MuUWI;qQ#cWWoyN)UU%X0r3=Gli?0kXT)t}IvR2WpG;5Y#v~uyHaC|X~S1z&& zCNE?$r!q8Iy8-5Tm8q_#yGAUQ;dx%x@SHEyIc6MT-kDK>tsr?<B%7JO1v1rE*ozNG z-K}=|Vz9HdA6n&{C~BQRj<0%Lo(}Q*JeAnNSAWEEYo{5$kDhT|>)Lu*&Xtg0Wh4f) z=rg0<^CWg6pf9n2_4LO!xwQs|IasM)?=h2L%kq+PgeOPqK7&8Q(-35iV_RKYD-pm1 zip{*hm6V)#Gi_z-^rSU%rZ6}*ZcU8P7*Z#VGJeA1refLE76r@-*Kq!(r&iSnpu}sl z(5`#<1EW9+CEO#^!u7IQu_?vo4o@H$y-__0Qd+ja73h^-C{i*OK<@t}ld~SU#v<rN zjB2yL#H}ROvR1fsbaoh)S4xo|q9lR$PLx8Io92;E(jD$ijdg*uc&5i)*uMzUiEvBj z(9)JzP=WzF9L{Ao22Qs~?<^!qAP(n{wVdu=u)$%Rqe{TBR*A!js1G}(f3%ZUZ`PSG zKB1;dqa>P_<L}AHUTR{|50O&@ZE(os<3vK+_0cICREv_CHJ5fWrE6k=Rqr#L<b;_B zG$8w$>|m6_<|?IuMu_#Ay84pU)bn||`q|N0D}zirQ7sr4fxuy|jNKSR2ld;M>nxlM zO+GhT3H+s%&<N3?N)zcwpbf?l$8NeOAo|NFnT_<kVzxQvou_RkcQ!$LtSi^r&(N^Z zRBtsGkTTh7(h|!4a2b+#qiNC-wM@mys6&A)ER<n^R`9rFGCn!8iL1FSfji0a<KcUv zvdm~RSp|c1pwS#12vXsmj(!p{$juR5>d`r|+UJKViT2I)r)XShV!z0&*5FTPbWmvm zGr?vUDDRHgbz(m*u2IWX>Vr`Yz1Cg48<%1t_Olw)k_#6uG}EoirI2v}X4U9ft1W+2 z%C{1(UDc6OUC`L-Mw027nETU;Z2UV)@FU(z<OAGH^yj~=*u>UpW1bOb&XAq33iFFG zce4qpgbBVag!a{?CQoeNfU(l#WvocG0j7<+Vu`u}>%teU%L73gmKgVQ4Ld5c@Yanu zHgHmKv$q~B#mwFyvh#N}r>v7M{1`!O--Usq89-9&O{%sNXGgnasAtUr0aBM+Svo(H z2!KQx{%PX?rL@D}mM}4mTK$Al^<V>bha6_~<W^N;2WsCw=<-27B06+4C-0WQf<Iez zW9K=Bz*yUlgp?v8&2RQw4}y*U*pu?J=d5WsS2czUF;=CP+)1*eQC{LC;o{>qZAJkm zYuZwzx7-w+Fk?1_mr@hvw&mH@Ij7#F?Nw@v9N*qFYJ&D!mUfdvTajsBC#y3}@H~ac zZ01E~(qH4ddHys=*5$fxF>x#y_?QW_04-7sVTaz)w!%5fnm?S^9>lEslnE!~BSaN4 zZ-&ll`p}UJm6<R{b)-Go7_Ti2SDih-r78Vgn6})RFqH317OXuQf<!||2M9x&9THG# zM-n$st@uLSRwo*dvdVNBis}WfBTcIZWq+_KDJUt<fld;X>a_t2HP++tx`-X3QyhAs z1Zc{bUJYuGE*J87B(0VfrzN#V`!UYO`A%!?<s{dZ&>X9dt;C8eMS~66Cd;lP&!j19 z1+FLhq-dn1ZZ%duZD-q}Gu!bA!c!)+x?O>-?Q~lP3!W%_iyRX+z~+^awyih|9@knw z2@{z%QFZAw8((G`HLl#uymN8ME-(>0$z?8W!1HaV(A_~L4s;vUPH)o5X(756!v+$y zAkGa0W^&V|A<mY?n@l;KpH3DoF>D4-+xgqcSXC!czSDh~1q7b#TyN;>V8QNKaM9GR z?AR)T(!-_v<myjrsySj+n{}?*OdwF)mMGaE>Pp)N?y{K-@tRar5A2xMc+Q4NTSmRt zFcNTTsv{fJ#pJF+(g~uxtn$6m^vWTQu&RVy`mT{cleN#7KV9J{SJRkCZN#ki2`jXM zsIhfi+e(_A=!U9Ui?NQziPvobW|+0dv>_cGdc$n3$>K*&%Jd3&QlBX+Zr5ddMP=vu zLNH0V$vZBGG+cto#?pFcMR;AqU4o;h(pE#=1*-*hZnCh&9WSji5gpq@gidO_n$suC z5#k^lDDh(pu@A(I)tQc<2~s6`kLEagS-mjg2<wl+`f~$CsWrNTAoZ^nZQx3qUO9nN z?W$+sQ~o3I#$YDtv$<NKnmaMC+SFx3br<k73!OGk?OLNnW2G|+r<e4SH0npP4!Ox; zlvi*%^rnbqj?}~(sn!<g>Ro82m)1<JyHG96{*5IU;A?`Jk^2~&Af4`fB|5Ve<-~wf zW?CkB%__>rQsqig1MTLgKMU~h1i5t<wh8J*E@k#dBQboGxmXdfq@-syG&AdSl1K%z zs?{X2>Twfw7OljTZmioZux(+s5zPcnAX9XMlPj>g^_9G!F)QRv99f-`fP~id?soN@ zo6s|Z2@f1H^icfxVeAY|l?*E{o8Bvd#vgvQ_OA$}gUpU_I>(g|i?cD_CDU=>L}}o+ z_Sj^%iIR{V1fSQ>gk;xZmH{MHQuL-FUfn@Js<B?)uq8t_v9qg1I!)ndW?W+QmRh`t zA@o@ycE2*3lx!x{CrIx%-8NC&O&rYuiA?0zc(F6V7`N<#x*e!1+en9)L;BWyn<$AS zzwNYTAV>`$e%^K1I3`WvhcAs!vrk~ZNE2np-%b1ERVZWifJ?{|9dl*4uIb*hOV=uG z+F+Ap`_Eh&j01ZQO@_}27H8&}PPWFW?;Uq9rSnQZ4?4r!c9YJ05*7v#c{1dpy0{Fs z!dO;ynN^xLitJ$_ABcmTs_AJK+7j#4m650(++fG|T$H&n*s^8H6i#C!q(|~DnC#Tz z64N+POn64rZt2?6Z&lQ%pfk896|DL%96%J9^`UFaz+{OQw$h|8KGmt)z2K1yZ`YP3 zsnnQKM|TjRwhYc<rO}}X3}25K1eeL%FuJx3O_`FKLXu9q$gVBrR(VN2?OL3=)2enw zD_L4?IjuIynbugHGNq-4`BJ*JTt8)sqrRJTRt*b*+7{Qkws0uPsx@Vb>4n~g!caIO zCW#u85pXSg8&Bk>$}p`=<WCi2E&W|vhCMM7LiiKCC_IHj{H8AP`{uYsG-+~@oaU&N zU0XI!nc^<ECHj#gTc$trr%cHzI9<I{rq~*)cC_9pgo)7`3Kb4?y14Na>qcGA(tOW) zcihdb>)yF%^`2emTD@v*&q8P;mAhvVtKGctjM=l#?3sN=&+IwjoVoMPIP>(`b7s#b zVGs9yxEhzHn=^Or+@9Gl?Kxv^ID7WI*|S}`<s2RMtd$85l}l#o6@^;N^KiHx%T*kn zH!Qe7*G%ih^ShSwmRA#%s%LGKE6)qpl;YuBF+8tcyr5L*<xbl9UD5|y?Vi&+n>UzS z2k9tt>5ltcXYh?0FDumJo^#GQYi`dOt;C5{aj~~5&I`}!=`TQ@u9Y+y16rk!3yb#t z))-eScrSYW)+p|e1}Zzl;a`sSkJxL`E1^MdG)EXOQx%mieJvW62uI^lq_Djhy{1vh z?La8ltI-v74)p8_FQ$-atO`>E;V^T#%+SaE96OCh72YHnjr(gk9(M(3{`u;ztzoXH z%UPky-4RuG+Pl&fl=xhuvWGHv6?3CW7#ZRk^dllEy8N_zSDIZ!t`ytr(8D8TbzslH z5HB5LvTnslt!&anq9#bm*^jGsXSicmy@Xy}t&I(jU=)~^ygJ>_!9+NU_@<$~;euiV z&M%D8qHSUE>AYH2;Ko6kyt$ns?KP6-Mozs6CqCSW_>rY~j6>p9P@NaV#wx{JHdzv; zWaO&&VT4A`&pyZvtc6e;LpRV-rT9mS>{uym?AA2Q)%u(2sS%TQQ5Y|I8J$&$Cw!sb z29z1b`_zu)dV{&>UaC&VhYcMT4Qu&`735>aSkm+C*>V;*EJHvgu5Y8>%Gky{e|%!^ zvsU@EoSF4EAH?L;A{{}+G0%@K6#+YutrhhoA#hufd+Z%>-&}fEDr^nQV~n0R?7&8r zzP_95wiHs1x1(bseXH@t!Zu$NJ&UWxg)TU>)W#5EmeI;snPXzlqEN9t$cx0Ly?Cv; zQyHsbGs!po%hxWo^v1^1d91hWHK9zwbufv{k}(OREV>R2XRIs6l^t4`ja8c=%NXlS z46U0OdGbYoiOH4gd{MQ|sK&)wZio2Q`5HA|Alw+0CwdzjTGV)(3qe2;#nRX?b4PDw zZ>Kau65b?aIC`+C!G$Y%J3AiM+u7B)xm^v*2!~M&AL9Q;v=Khs0ZSBkQ+ws&t5$wt z#g)9Ny|s})A5k9Fnp+uxs|-X^n{K;(7rFiHL&jW4j*gac;V8*rE4`}C)XE`IR@Vx7 z)}^|H&RD(CtPXHl@GAF|^HRrq3oh|CKjXQ`L0`D+n!KE+x3+iDw{7i$LAhWT#}#;X zmEs}a9EOPXu3^H8M!AHdWqyp)ZCYFio27WW#E8#060BiL#>J!!OvOZ2?y)Ps^>U=* zd?TB#kz|g>M_BJW!nvPq7lX1H5}BLSnU^G9>F2`mNMksz6{ydq2phL?G3sJe8y}vJ z8C~X$<xHbTF#)JJmLgeSb$cEGwv`hq8>Fq=%X?ZAdTeyKIg8aHVO0&eo1U?6QR{8* z&KOBGd)-@xZZ5c|^EwjuZA%1i8j*I=b%pEitsK?L?rm-<(+u$Z&f5qzmZ@lCC<#gU zj$Q2Y3P|^>cq5K)6EMbhdpTUj)ZA63mq`Tl;Mym0c$&Qm-in98M_ABCVF<)te>1;3 z9L-gC)memRp@u(+EX6dyhXZysxaM?Kd-4i1IFrG}!{2U&$tn3$iI4U&z-tg1aHbRy zmaPYO@8Ig|`jH(rIy`9c+$O2Uf?TBWjo~rb^|-pW5$S}e$zIgtnk|>vV0~6;ie6^g zg-Mj*k)a23`LW^Lz^-t3G`82s*Hp(gswk-Gh{P+>Elo$O4~8B@>gZUpl*{)qn3P!E zRkH$(eN|gBMCsVIv0H1<Sz8cFCRSM%n|}Rh@^TP-KUUUuMhhaN*5BmqpmgB9tRLPQ zHHwJ$csnorv$F5>v!qo)!j74#F<Oa-n_&{+d8XOQg88YGPT^KpM&s5S;%<(+HMI$u zx)~GC_pSHD8Fk(sw(E6jn-rx&OSdcZx_88_*>K=;$#I4bcHNB(sT9P5FlIToU4Jy* zPS-)?pklE`<u>k?Er(YV#E09QR2{2vIb83F>xh;ylw4@qLCV65ue@-9w1~LAi*Hbj zBQI>UwJ^vy@<7>;ey}z++T`LR<j_=|mqzfyxOmcOANB&qLIx<u{Ll>^EoI0^|K4~K z<Cfrf7*X%mIyH)KNVtq~IJ`$Xr)#N&iCXMO2khN(l;J|EB(X-gY)X=2H@k;d_H8op zN=YlmX8o>YUhzg#D@qo|sFbVh@-%IWtC<{9oDnaRjTw(p&sgq~p!S@T)R}!P9IJsp zEUQH2v2b{#T0*OW1Jc!sVQ9p~xCGx>v$DA*f-sd^)+Ajo9EMC_u9m$vBTjLu8LG1D zM-FwG$%oV`L<1fW98Lq-=Io1@5dE@N$j#@S9Yhua-@V#lg2k#xSuJ#y^k#Nar&Gu2 zWe74G16YL}R$)gWDz;|LxU_Me_shqi2E3k0&)ef;C3-ZVvF{F(nLgQEZA;!8u8wzL z)U`$@>U+m@t?bbp9gfkFprET5$zfUOTlz*tD~&~2zgM)TQp~a#tg(J4Dy_YI-h(n> zvyep*orX8iS;tBU0KI?SBgLn%ZNATl2=$VGmW>4D9}b_2%Srrj5?!FKC0;|>77j#` z-j}pgjxnkl<`1jH_9E=PI%ea<ayZNe0uepN3^p@1%$Ru*eNC}h<qHg?F2@7zFXh-L zVJt|JKUZwl#u{F?L9lB$u{mKC$+3Axrn9M})zXtBHWg(tKAfqJmNjB>ai!a?vDYx( zKqMha$Ya#SSm0W!IhFRrnxjn%y6Ujq9?!@WscH0=+THkQB6@kquFluC2dVoMd9iG; zsz64Q{<dq{+1doES3b<`C2b#taOnuPig-miE!-7rrLL*&-ntEjqEnh7E$(sRPIFZ6 zq+_})46qx5&|brKxr?#rNFvu6@fJb!iKj%!CNHO(cF&Y&-oQc50D#)MY~t{+ZRf86 zPIflE9X!Np7v)>j=go4RVKh;hZEHPlxoN$*?q=QSSh*Mvt82v?)3CB<798RhETUKl z9Cz7^Y%oFH6oq<D<YFupqS2>Uqot7{>;t^Gtj{Ni0eoLuOK5MH3I?-LKs=_KX+2JD z*LRe((?C&TrxDgm%^k2DoRBNl#Kx#>TVeXGDEPKK=U^T!_u7@LQGfm3AQS5M{I>6A zE!7T&mx!{VER*cEC?FH))%G#&08})<UIn!`;Irx4HPlQQzVB{lrPd{d+g1u2OJ_?g z+$Rr5hvQ1IiC}apBJajOvz_fGyCYtTRzE9H!xuRs;df22Ui+^WAJ}mNf}^L&aH3u@ zZ1!6GRkGC#Gh{5xiR_sy?Ydgr&k$jM$?3g+6p}U~!x(;Flp%lIU(XFu8L!H>4~T8W zI)=%KBJ}yTv|ce!(((-e?d3AHv7xiFeN3yAg+qJ#O|42+YB9}fnrVWS5^NX~Ez|AR z#Mn`Nw_BJeN?=Q8jHHemW22B@Wjt(l5i|&|ohiug#F+T&{qDQ&M%<=5Dy!rpeA^p* zJNMw$UG{g4UbOc*K+@ufyC{6%r&3@lGD0(wn-4RkQxBEcTes`fACsv7laj3>_92G4 z*>%_(peAqJ9hxnHErr@T5?FE_5hEkS1a9My%+y@5v1_<ODSqfG*e>00CdHWUCwtvW zC&x@b&{XX(S@gP^kc<i6>x%90o^rv-rChl%E(xVt^O*n7&!h|_OM>K--#9TNn8K(7 z>SS8(@T4=s6#((Kx_9;wfLg#fsX?%~OWRDHbZ~Yiz1Ik8^qqwk&C$2lui=?_<fW6h zy=fwA<rwqpEY@Zg8_y?xPbz^?_a+!dz>lj<c3pbsorwzfCc+|zL_2GRW*KSdhTuu@ zQ#fGbiH_=C^!M2nN2=k{SWyzrLPtWEgOjOj9`?g3WXxXc^!;kFEiyReXD(=@?IT4p zosuTUd7J7<uxlqhYqICTDD7ye`Me9O*Z`lhFeSw1_~c2%aoUez(|Mj^eE+l;wq;A( zW35eE{K@R|Y9|-vF$tyw@%~w6;?knz_ZPA>`!drcP1JZ+{YfIUI;O-)Z9nPk^mH9f zO!2AepUlAF0%ttYgIc33EhqopXz$naR^fRq(&?5t4X?Dzuoe^d1}p*2BrSH|Y1S1h zLmYylWsJxi)feYX1?2ky+7%}w-|X;qm}fd-A!b<Q@CGvuDk%mOop%*vt?;@Zk~CuR z=GAB^8M*Q=8(4UjFq3nwJ*zi7Vy(_|rof7DF&RW4`v8Te41LPz7krROrwR-f0^$PO z+O9XlxRcmO=hf+=wM~iy421?-+pQ0rn1zMSb~cUE<yN~*_o&}kw^X}em6#olF*Aov z)+W2M_8AZ)x}3A{TI*8No4C_dsVL8Ku+}tlStFc^?#6*4(~zW&G$7><mzFO%jgN9t zL=Cge8|~%LX0(leCX7tklUTR-IdC5zSnUopY*|D^jUNn`7=rp8ZFVC&KX?SIUYTK1 z_cPBlt;3tV18Leh+~WmI%UsQvVz7g$rHfPDRXp?66K_;=3y|#uS2@eeD1>k(7*pPD zHzzZYY(HzNzijlHL93VV1B^BFVS=6*Lm8hY*rg8>Xsej-EAnZAa#J5C=&429^lgHk z3Lh~To!Nt>zE7LRdhuyp6ALbu3=+%#vY`*|Sp`hKL^QQRlEVp`qz|(6tNLacJMCzN z4Jm6BTUA#9M*)ojzRFCyK9@%vVJ0w6^uRW$T4*Mki0uUCCsDF}B$~@QSpiv=oKmPA zj@cyr&U%EgNw?NMsfNq-$wSgdF+c?a$tW8<w<j`Ndw(?Q?Hs5xqnx#jxO|<-hxyVa zBKrA~Bf@QNo9>JfXw9&49Pg!HFmUosQlNpE#tyNxxf9KiKg!|epOoTJsDV^u-#A%< zP)#G=^_uRkl1S$K#G~1E`2aLzbll8N9t$Mm#jI2iSM)aqTw|a644b35;hJpn-r&nF zJf{)R(<7esbBn06iv@*e08uaJ3$iGhOF_MH1uRS{-rqI_CNR!n^YVE6MCUkmn!b zM{hA{<4P-~01dL!Q1o+D!4OS%vgS}DDoU=CSs3S8Lv~_U8qk+EwSwffbvw#yl*Myy z@M)w!xrQ^=qQ<xqGCOX+vJ%VPpg3z{*D3=2YkT~c5YSbzu~uXmp~@UeN^TqcAuUQL z?OrABSZRF%X9Z5$gvH7Zpw^F6Yg;)g<IqNP0|qD;-9dg;h8zwN?X`Cqxh6}<M-X>% zO5vt13H4=IM<g{rbC8wnvD4+Y==<tbaeBs4sNEWH*1-ZRar@z{%t9_?bQjycZHf7Z z;qo$t>r$h1a%t-$wq|*8nOyg<WhJBDDlai8b{r_ILYvu+SmtlisZPe=P?94B-o(nD zXJ8pxm49A#%DcUtn}hbI{p#f06ak?Fs2;mZF<n%F6E$FT%-yfx6GuwCjc*HilezyM zf@F)9i&eTdwoUdUQ>_X*(u_y3Ycr2AqBVo{3ocu=e!<G6i@U=W&un)*>`aa1Z$E;2 zgcEoh8)tWkxoxelV@L*TO-y1lyyJMGGl82>PfAcHqd1%#Z?v0RIIG1X?kzXn;hJQx zhM>jd!LGj%?_hK3j#0<le%ag86Z%|br)XJoo*(lOjvI7EMMvLGEVlf9Fj$DN5vrXX zQMT@&qWEtQ`6Fb`-owToU3SrGUk<s9VOG*q|6_V!+CfZcB>8^KM#h9iu_#+fHq@#g z7bvrKds6DKol_>Mv$joCavIZFdMhHSfl+y8I}J(>2%ki7ZiKoeH-#pM8$yq^(Ueu# zw%Q}iet+g358L!|++|wbHY5TUMzx$HFF~1loh2kW;id&*M%l0Int+V0`r@nqxIx=z z4T`$KCmERiw81#ByT`p7&cbD9^vSmkTBkNGODcqA0+}gwS2)9c^kAlVA$`Gp0an)} ziG;9CS!8lH%~cB?S-N2Ds%7Dt)t7x?{gpNeTd%LDv3&7h*}8E3;>#9avhu4JuL_sl z`=dt|q>1f)_B3r$(yB$Pzqw|?%Egz2YtoeNP5))9n9B?G8HK-Bs8f157?T;I*-?x? zG)m^Dlimmt8{4Lagmdw~`&9&AO2y0S)+|Q^w2tVFs;>2uWoVbitzqa$?~Z#%QGRUG zW}I#xgUNmi!RPTNPLAQE{p8et`y#>wNfXvfUUYF^LZDX@9=&Bhjgaz7M?;^F5;o%K zTbRwUkMVY>-50??q2p7pIr=p@X>*2x346N_BP3r#&~ZSY<oUAXikd=Zh3nn59eG+r zMLH#3KZDt{c>9^{MRI}Db7V2&-rycJmBX&Mx<~gQWTE0pNN(fSUFE<g#x}F)pzgct zgmxh*-4?n*N=jt8iZ)^;vO5WMPvLF{Yir4jk(pMyZVx#*mPue*Y#*P?%Wf;8z<m@! z>mB#M*!>`T-7zV|3}n!Tt^I+SUW0HKBRHSPn2uW3C5}LY<oLnuN$i3mD}2#u>hKa* zsr><k#5~6q?D?s~P88zdVlx=c_2(Y!tHq;0=<gUf6Igo`=FTRkmfk)V2fDY%Q24HN zUS-S2)snyFp_RzCy>T;e!Q80f5XG&>{^Zb)EzL1&CM~4LyAfrwAtsyG&Pb;<IC%$i z@}LDwpRBRZB=j^zL9S~^8oLp)TS~6tzI5qL`9Em{!bE2xIyJ|7;t#C&-oi++#8Bw! zD2CZYKjcwFU_X{0-IcM}x(_E{#MZlbd6pFsOvcHK?#+l}mf{rCUG31o>EeyMGtd#~ z&0<7TfLm!NOTn?FwC^a1cjclYany;m&xinP4J0@5l5}1~wds;}SEkrjl=vtqD=sIQ zjq7NducQ@`B*50hX>EJneEKbfRH$1c#0R>U3m;(0-R-6X_gFHc;!~J<!-1@4&SWO1 zx_{7QPhxw;SlXM|mE+npG`%G&!8R_|r4|FHYicqKEgnlMaCUBe4IwSv2W3LY9)*{2 z6g$G#5IWPXU6qC)X=H5BO&Vj@R)h+eu6O^Yr(vFCNkg2MMkmM6<wBZN<j0ts6-pxk zvdT^bWC{+3nM3G0Wlpf@xJ(~NCLd^C+meyUG=Eu6FdWzoO2<A)T4=`|tk8V{AsA@C z`jYWer*u#|BeqnnYpeEZDz6tvxn*EGu1L-7MYO@j%paY2LQOn6VouE%L2~8MECqH< z?^=aQ<!uG@y-?Y$TOp3&w4_OeGB&YM-zDME8f~oIc0T5bjNVvoCg~6sSm=#g)Y>BF zHi6#~I-Oy+w=}upM*`bAIMd>oTk;SOx@bN|k&<OtcimM2iE(yYG{w`^#DD~aY4@%- zwqp20cJ~<sJL{Je^r0I5fuXVds6Y7gk|dryiAj=de5%lRDb*?*@^cl(??^Kx`tWh- zxh&3F&GoO{PS|@kZWZVcWD<FoZH3G0RFZK`Y(=uVI}3lhgtSU;qXh}mbtYR+XQD|< zOUdGAf&cJ<n_4WrENh%N>sGQeYzM}(>H68J3Xood-Kl|44hv#4NVp^AOW1;G=<bnl z-^kx-Z@M$-eB{O4?)J|mnAtP<M-uVclv}D=sS^dz^Yo+<Wc3<IV8WTHmP+e%WbH<c zJ8vGJ%8hR}iB9;&y!tshrel}lh!-I4OuL|4yQz-BdDwtI?8erRTub9setk$mb8&*Z z_|VfIgnOj|MO3Cwj$abpNrJN@k*vksVb8NvY579IvPAAgy;YEGq?r`0Z7BCAY#kkb zkZT7lcgc#~s>v<kVXRGSnp#U-+)6`Jtp+>4a4qmc3j?3jK+~*DS88SA+$o9k6EW?b zk8*o+DP<F9P2xMVw}>)HgKVBlicVOrk9B!r{e<SORoS^7yHmb&u6HEG+Y)}0R@aeg zl4@Ji-Ru;4VKF@u<SLHa#o4AT<+sVMDg;PPdS&-&ph2gcNMf`Yax*mNKGWbY;BvZC z*oyqL)5vC!*bCc(JC7bmIfOCQ%I&sgsd9@7>%G1Qgx(Ah^koK2rG7y|4PhGd!3Zso zY^D5>o1e)UV%pak{G93(YPKgs6VLIUBb%~{EVOLB^_d3ShS|mk-3&`Iaxy!zb=4Qq zQ71f`>1x<<ycM`Rlt@X=DjgqkuXfxLt^WB#us$A>8!y`2>E^1_xDr#l9ea76ZiSi3 zzQ^vT+R1!5XvIO$>|F`#rn?M5hn-HS9v~rD&WUKU;b?uxfnAGTRMm7$x?rDm2xMB6 zrb5&0?TK^;(-x7re1PrT=|o9ZR~~&fd#gs?`r1t5GbgjiZNCU1ZHv#OpK_Q)Ui$Aj zOfvF`@lIwtWS2hIkjR20ii2f$ms)9pBviJ%zn4L2+A~xWGQ00QJk2prpz|!Fw~lA* z%MLqhm52ec%h=izabn&4d&!b`cPoSmR2*qc6vj3!uI6^g@~UfJkz3WIWO()>fjd?3 zyZu7vx|f+#P8aYj$h2^WU!6Ptgk9LHrF$p0+p(*$tx!95;7n9jrdFs#7MFG1rKZk1 zPw3WMHP~j7#M;qu6qW80lbY?sgYOw@Th+ueY$kPf3^}`ft@-B_F?W$hQpMfI3G8GS zE_c;*cr#?hWR}bC3P$t1Ys>$>YWoXFz!^s-NW1A)NR~O1&r!0uaUXd|HuN^V(4e^g z%TCKIO&oAA<@6?vYZM=Pm|#1S4&bB&LO`>+OBEj{H#;I^#C4neIFqN%{-VoAsSY6{ zm>tg`Pwh-P%s*3#c;QWF-w7!@lT3#j$Lu7>TC7FLmC?2p^7o!3#B^KA)&_eM$=Ne( zTA3tw^C&GOX-LX#DqZgo!2_w_@-@!l{DhX9k(-fsrWHOfV3*3hal{0bX;W6aFWz!` z{mFWvX=8Q*z41U}TFPB!#C@=>PnqDvG|U@Sj8Q%=v)(4wxS%~!s|PhTx3fKzjR@)A zX3FtAkTup!k|H(MB=OJ3KE9H1?328SY14qVcs6^!qWT$qdZ|x6)YMVQ<<XqqDC}Z1 zoT0?O@0n2rP;c5)0nVd!s@J(y5hG;I_Dp@ZZ$WfOCk+^<h7;QFbO&EG!|9waj|_1L z%=K4Sa0H{sI?<9~96M%4giJ%a&miNitekcqAX!jZ_)KLQ2}XLx_%@dRR>V&CsR&s+ zlGO-BZ&yXTW$o+Hxhvd$U^BrxoEYnn?(T~bjt#i_tM4W7LQ$q6>_Vhq#jHB|f`olL z;vY-Sw<Nl@@PRf-=8>de=hFuyd^m3&^N|iZs@E0t4GD=YwPGx!9f|qCz8+x)q9h1q z&kEMJBYaWTZ@bu--iYtovLcCXuc+)Qa#^zV@XZLMJ?fgv*R=0Ni2Pf90E>dtO43g> zaA{5>Ib{mMk$X-$-Amt9wwSIhd@tf3BO2e2=-R@UBb>Q}fygTT1wX3x`3Of1>$)s_ z?t2l8sQ-XO*OpC5vofuZ)i!IBH;&mCB=pXUSIfqAPM?pEsJ5#M`gnwUA$pA4dU@<S SELqMl;)uc(V{HJsg8v7@Sol}~ literal 0 HcmV?d00001 diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..292dd7a --- /dev/null +++ b/po/sk.po @@ -0,0 +1,4533 @@ +# MUTT +# Copyright (C) 1998 Free Software Foundation, Inc. +# Miroslav Vasko <vasko@ies.sk>, 1998. +# +msgid "" +msgstr "" +"Project-Id-Version: 0.95.6i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 1999-07-29 00:00+0100\n" +"Last-Translator: Miroslav Vasko <vasko@ies.sk>\n" +"Language-Team: Slovak <sk@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: account.c:144 +#, fuzzy, c-format +msgid "Username at %s: " +msgstr "Premenova» na: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Heslo pre %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Koniec" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Zma¾" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Odma¾" + +#: addrbook.c:36 +msgid "Select" +msgstr "Oznaèi»" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Pomoc" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Nemáte ¾iadnych zástupcov!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Zástupci" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Zástupca ako: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Zástupcu s týmto menom u¾ máte definovaného!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Adresa: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Vlastné meno: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Akceptova»?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Ulo¾i» do súboru: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Pridal som zástupcu." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Nena¹iel som ¹ablónu názvu, pokraèova»?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Zostavovacia polo¾ka mailcap-u vy¾aduje %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, fuzzy, c-format +msgid "Error running \"%s\"!" +msgstr "Chyba pri analýze adresy!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Nemo¾no otvori» súbor na analýzu hlavièiek." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Nemo¾no otvori» súbor na odstránenie hlavièiek." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "®iadna zostavovacia polo¾ka mailcap-u pre %s, vytváram prázdny súbor." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Vstupná polo¾ka mailcap-u vy¾aduje %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "®iadna vstupná polo¾ka mailcap-u pre %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "®iadna polo¾ka mailcap-u nebola nájdená. Prezerám ako text." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME typ nie je definovaný. Nemo¾no zobrazi» pripojené dáta." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Nemo¾no vytvori» filter." + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Nemo¾no vytvori» filter" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Chyba zápisu!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Neviem, ako vytlaèi» dáta!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Zmena adresára" + +#: browser.c:42 +msgid "Mask" +msgstr "Maska" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s nie je adresár." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Schránky [%d]" + +#: browser.c:504 +#, fuzzy, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Adresár [%s], maska súboru: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Adresár [%s], maska súboru: %s" + +#: browser.c:520 +#, fuzzy +msgid "Can't attach a directory!" +msgstr "Nemo¾no prezera» adresár" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Maske nevyhovujú ¾iadne súbory" + +#: browser.c:856 +#, fuzzy +msgid "Create is only supported for IMAP mailboxes" +msgstr "Táto operácia nie je podporovaná pre PGP správy." + +#: browser.c:876 +#, fuzzy +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Táto operácia nie je podporovaná pre PGP správy." + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "" + +#: browser.c:898 +#, fuzzy +msgid "Mailbox deleted." +msgstr "Bola zistená sluèka v makre." + +#: browser.c:904 +#, fuzzy +msgid "Mailbox not deleted." +msgstr "Po¹ta nebola odoslaná." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Zmeò adresár na: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Chyba pri èítaní adresára." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Maska súborov: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Spätné triedenie podµa (d)átumu, zn(a)kov, (z)-veµkosti, (n)etriedi»? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Triedenie podµa (d)átumu, zn(a)kov, (z)-veµkosti, alebo (n)etriedi»? " + +#: browser.c:1049 +msgid "dazn" +msgstr "dazn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nové meno súboru: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Nemo¾no prezera» adresár" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Chyba pri prezeraní súboru" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Nová po¹ta v %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: terminál túto farbu nepodporuje" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: nenájdená farba" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: nenájdený objekt" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: príkaz je platný iba pre indexovaný objekt" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: príli¹ málo parametrov" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Chýbajúce parametre." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "farba: príli¹ málo parametrov" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: príli¹ málo parametrov" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: vlastnos» nenájdená" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "príli¹ málo argumentov" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "príli¹ veµa argumentov" + +#: color.c:721 +msgid "default colors not supported" +msgstr "¹tandardné farby nepodporované" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Overi» PGP podpis?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Nemo¾no vytvori» doèasný súbor!" + +#: commands.c:126 +#, fuzzy +msgid "Cannot create display filter" +msgstr "Nemo¾no vytvori» filter." + +#: commands.c:146 +#, fuzzy +msgid "Could not copy message" +msgstr "Nemo¾no posla» správu." + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "" + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "" + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "" + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "" + +#: commands.c:223 +msgid "Command: " +msgstr "Príkaz: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Presmerova» správu do: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Presmerova» oznaèené správy do: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Chyba pri analýze adresy!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Presmerova» správu do %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Presmerova» správy do %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Správa bola presmerovaná." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Správy boli presmerované." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Správa bola presmerovaná." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Správy boli presmerované." + +#: commands.c:381 commands.c:415 commands.c:432 +#, fuzzy +msgid "Can't create filter process" +msgstr "Nemo¾no vytvori» filter" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Po¹li do rúry príkazu: " + +#: commands.c:478 +#, fuzzy +msgid "No printing command has been defined." +msgstr "cykluj medzi schránkami s príchodzími správami" + +#: commands.c:483 +msgid "Print message?" +msgstr "Vytlaèi» správu?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Vytlaèi» oznaèené správy?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Správa bola vytlaèené" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Správy boli vytlaèené" + +#: commands.c:494 +#, fuzzy +msgid "Message could not be printed" +msgstr "Správa bola vytlaèené" + +#: commands.c:495 +#, fuzzy +msgid "Messages could not be printed" +msgstr "Správy boli vytlaèené" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Spät.tried.(d)át/(f)-od/p(r)í/(s)-pred/k(o)mu/(t)-re»/(u)-ne/(z)-veµ/(c)-" +"skóre: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Tried. (d)át/(f)-od/p(r)í/(s)-pred/k(o)mu/(t)-re»/(u)-ne/(z)-veµ/(c)-skó:" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfrsotuzc" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Príkaz shell-u: " + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s do schránky" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s do schránky" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s do schránky" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s do schránky" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s do schránky" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s do schránky" + +#: commands.c:706 +msgid " tagged" +msgstr " oznaèené" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopírujem do %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "" + +#: commands.c:910 +#, fuzzy, c-format +msgid "Content-Type changed to %s." +msgstr "Spájam sa s %s..." + +#: commands.c:912 +#, fuzzy, c-format +msgid "Character set changed to %s; %s." +msgstr "Spájam sa s %s..." + +#: commands.c:914 +msgid "not converting" +msgstr "" + +#: commands.c:914 +msgid "converting" +msgstr "" + +#: compose.c:42 +#, fuzzy +msgid "There are no attachments." +msgstr "Vlákno obsahuje neèítané správy." + +#: compose.c:84 +msgid "Send" +msgstr "Posla»" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Preru¹i»" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Pripoj súbor" + +#: compose.c:90 +msgid "Descrip" +msgstr "Popísa»" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Podpí¹, za¹ifruj" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Za¹ifruj" + +#: compose.c:131 +msgid "Sign" +msgstr "Podpísa»" + +#: compose.c:133 +msgid "Clear" +msgstr "Vyèisti»" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " podpí¹ ako: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<¹td>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Za¹ifruj" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(e)-¹ifr, (s)-podp, podp (a)ko, o(b)e, oznaè alg. mi(c), alebo (f)-zabudnú» " +"na to? " + +#: compose.c:166 +#, fuzzy +msgid "esabf" +msgstr "esabmf" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Podpí¹ ako: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(e)-¹ifr, (s)-podp, podp (a)ko, o(b)e, oznaè alg. mi(c), alebo (f)-zabudnú» " +"na to? " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "esabmf" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] u¾ neexistuje!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] bolo zmenené. Aktualizova» kódovanie?" + +#: compose.c:402 +#, fuzzy +msgid "-- Attachments" +msgstr "Prílohy" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Nemô¾ete zmaza» jediné pridané dáta." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "" + +#: compose.c:814 +#, fuzzy, c-format +msgid "Unable to attach %s!" +msgstr "Nemo¾no pripoji»!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Otvor schránku, z ktorej sa bude pridáva» správa" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "V tejto zlo¾ke nie sú správy." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Oznaète správy, ktoré chcete prida»!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Nemo¾no pripoji»!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "" + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Neplatné kódovanie." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Ulo¾i» kópiu tejto správy?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Premenova» na: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "Nemo¾no zisti» stav: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Nový súbor: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type je formy základ/pod" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Neznáme Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Nemo¾no vytvori» súbor %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Nemo¾no vytvori» pripojené dáta" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Odlo¾i» túto správu?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Zapísa» správu do schránky" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Zapisujem správu do %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Správa bola zapísaná." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- Nasleduje výstup PGP (aktuálny èas: " + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "Fráza hesla PGP bola zabudnutá." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Zadajte frázu hesla PGP:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "Zadajte frázu hesla PGP:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "vytvori» zástupcu z odosielateµa správy" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Spú¹»am PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +#, fuzzy +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "Chyba: multipart/signed nemá protokol." + +#: crypt.c:860 +#, fuzzy, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "Chyba: multipart/signed nemá protokol." + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Nasledujúce dáta sú podpísané s PGP/MIME --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Koniec dát s podpisom PGP/MIME --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "y-áno" + +#: curs_lib.c:158 +msgid "no" +msgstr "nie" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Opusti» Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "neznáma chyba" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Stlaète kláves pre pokraèovanie..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' pre zoznam): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Nie je otvorená ¾iadna schránka." + +#: curs_main.c:48 +#, fuzzy +msgid "There are no messages." +msgstr "Vlákno obsahuje neèítané správy." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Schránka je iba na èítanie." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +#, fuzzy +msgid "Function not permitted in attach-message mode." +msgstr "%c: nepodporovaný v tomto móde" + +#: curs_main.c:51 +#, fuzzy +msgid "No visible messages." +msgstr "®iadne nové správy" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Nemo¾no prepnú» zápis na schránke urèenej iba na èítanie!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Zmeny v zlo¾ke budú zapísané, keï ho opustíte." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Zmeny v zlo¾ke nebudú zapísané." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Koniec" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Ulo¾i»" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Napí¹" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Odpovedz" + +#: curs_main.c:403 +msgid "Group" +msgstr "Skupina" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Schránka bola zmenená zvonku. Príznaky mô¾u by» nesprávne." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "V tejto schránke je nová po¹ta." + +#: curs_main.c:499 +#, fuzzy +msgid "Mailbox was externally modified." +msgstr "Schránka bola zmenená zvonku. Príznaky mô¾u by» nesprávne." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "®iadne oznaèené správy." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Spájam sa s %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Skoèi» na správu: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Parameter musí by» èíslo správy." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Táto správa nie je viditeµná." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Neplatné èíslo správy." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Zmaza» správy zodpovedajúce: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "®iadny limitovací vzor nie je aktívny." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Limit: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Limituj správy zodpovedajúce: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Ukonèi» Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Oznaè správy zodpovedajúce: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Odma¾ správy zodpovedajúce: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Odznaè správy zodpovedajúce: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Otvor schránku iba na èítanie" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Otvor schránku" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s nie je schránka" + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Ukonèi» Mutt bey ulo¾enia?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Ste na poslednej správe." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "®iadne odmazané správy." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Ste na prvej správe." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Vyhµadávanie pokraèuje z vrchu." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Vyhµadávanie pokraèuje zo spodu." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "®iadne nové správy" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "®iadne neèítané správy" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " v tomto obmedzenom zobrazení" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "Vymazávam správy zo serveru..." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "®iadne ïaµ¹ie vlákna." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Ste na prvom vlákne." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Vláknenie nie je povolené." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Vlákno obsahuje neèítané správy." + +#: curs_main.c:1802 +#, fuzzy +msgid "Can't edit message on POP server." +msgstr "Vymazávam správy zo serveru..." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tvlo¾ riadok zaèínajúci s jednoduchým znakom ~\n" +"~b u¾ívatelia\tpridaj pou¾ívateµov do poµa Bcc:\n" +"~c u¾ívatelia\tpridaj pou¾ívateµov do poµa Cc:\n" +"~f správy\tpridaj správy\n" +"~F správy\ttak isto ako ~f, ale pridá aj hlavièky\n" +"~h\t\tuprav hlavièku správy\n" +"~m správy\tvlo¾ a cituj správy\n" +"~M správy\ttak isto ako ~m, ale vlo¾ aj hlavièky\n" +"~p\t\tvytlaè správu\n" +"~q\t\tzapí¹ správu a ukonèi editor\n" +"~r súbor\t\tnaèítaj do editoru súbor\n" +"~t u¾ívatelia\tpridaj pou¾ívateµov do poµa To:\n" +"~u\t\tvyvolaj predchádzajúci riadok\n" +"~v\t\tuprav správu s editorom $visual\n" +"~w súbor\t\tzapí¹ správo do súboru súbor\n" +"~x\t\tzru¹ zmeny a ukonèi editor\n" +"~?\t\ttáto pomoc\n" +".\t\tsamotná bodka na riadku ukonèí vstup\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: neplatné èíslo správy.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Ukonèite správu so samotnou bodkou na riadku)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "®iadna schránka.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Správa obsahuje:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(pokraèova»)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "chýbajúci názov súboru.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Správa neobsahuje ¾iadne riadky.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: neznámy príkaz editoru (~? pre nápovedu)\n" + +#: editmsg.c:74 +#, fuzzy, c-format +msgid "could not create temporary folder: %s" +msgstr "Nemo¾no vytvori» doèasný súbor!" + +#: editmsg.c:84 +#, fuzzy, c-format +msgid "could not write temporary mail folder: %s" +msgstr "Nemo¾no vytvori» doèasný súbor!" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "Nemo¾no vytvori» doèasný súbor!" + +#: editmsg.c:116 +#, fuzzy +msgid "Message file is empty!" +msgstr "Schránka je prázdna." + +#: editmsg.c:123 +#, fuzzy +msgid "Message not modified!" +msgstr "Správa bola vytlaèené" + +#: editmsg.c:131 +#, fuzzy, c-format +msgid "Can't open message file: %s" +msgstr "Nemo¾no vytvori» súbor %s" + +#: editmsg.c:138 editmsg.c:165 +#, fuzzy, c-format +msgid "Can't append to folder: %s" +msgstr "Nemo¾no vytvori» súbor %s" + +#: editmsg.c:196 +#, fuzzy, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Nemo¾no vytvori» doèasný súbor" + +#: flags.c:332 +msgid "Set flag" +msgstr "Nastavi» príznak" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Vymaza» príznak" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- Chyba: Nemo¾no zobrazi» ¾iadnu èas» z Multipart/Alternative! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Príloha #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Typ: %s/%s, Kódovanie: %s, Veµkos»: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Autoprezeranie pou¾itím %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Vyvolávam príkaz na automatické prezeranie: %s" + +#: handler.c:1560 +#, fuzzy, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- na %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Chyba pri automatickom prezeraní (stderr) %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- Chyba: message/external-body nemá vyplnený parameter access-type --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Príloha %s/%s " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(veµkos» %s bytov) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "bola zmazaná --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- na %s --]\n" + +#: handler.c:1674 +#, fuzzy, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- na %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Príloha %s/%s " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- Príloha %s/%s nie je vlo¾ená v správe, --]\n" +"[-- a oznaèenému externému zdroju --]\n" +"[-- vypr¹ala platnos». --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- Príloha %s/%s nie je vlo¾ená v správe, --]\n" +"[-- a oznaèený typ prístupu %s nie je podporovaný --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Chyba: multipart/signed nemá protokol." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Chyba: multipart/encrypted nemá vyplnený parameter protokolu!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Nemo¾no otvori» doèasný súbor!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s nie je podporovaný " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(pou¾ite '%s' na prezeranie tejto èasti)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(potrebujem 'view-attachments' priradené na klávesu!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: súbor nemo¾no pripoji»" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "CHYBA: prosím oznámte túto chybu" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<NEZNÁMY>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"V¹eobecné väzby:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Neviazané funkcie:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Pomoc pre %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "" + +#: hook.c:254 +#, fuzzy, c-format +msgid "unhook: unknown hook type: %s" +msgstr "%s: neznáma hodnota" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "" + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "" + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "" + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "" + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "" + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "" + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "" + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "" + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Prihlasujem sa..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Prihlasovanie zlyhalo." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Vyberám %s..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "" + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +#, fuzzy +msgid "Getting namespaces..." +msgstr "Vyvolávam správu..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "" + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s: nenájdená farba" + +#: imap/browse.c:277 +#, fuzzy +msgid "Create mailbox: " +msgstr "Otvor schránku" + +#: imap/browse.c:282 +#, fuzzy +msgid "Mailbox must have a name." +msgstr "Schránka nie je zmenená." + +#: imap/browse.c:290 +#, fuzzy +msgid "Mailbox created." +msgstr "Bola zistená sluèka v makre." + +#: imap/command.c:290 +#, fuzzy +msgid "Mailbox closed" +msgstr "Bola zistená sluèka v makre." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Fatálna chyba. Poèet správ nie je zosynchronizovaný!" + +#: imap/imap.c:147 +#, fuzzy, c-format +msgid "Closing connection to %s..." +msgstr "Zatváram spojenie s IMAP serverom..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Tento IMAP server je starý. Mutt s ním nevie pracova»." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Vyberám %s..." + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "Chyba pri zapisovaní do schránky!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Nemo¾no pridáva» k IMAP schránkam na tomto serveri" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Vytvori» %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Zatváram spojenie s IMAP serverom..." + +#: imap/imap.c:952 pop.c:461 +#, fuzzy, c-format +msgid "Marking %d messages deleted..." +msgstr "Èítam %d nových správ (%d bytov)..." + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "Prihlasovanie zlyhalo." + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Ukladám stavové príznaky správy... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Vymazávam správy zo serveru..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +#, fuzzy +msgid "CLOSE failed" +msgstr "Prihlasovanie zlyhalo." + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "Otvor schránku" + +#: imap/imap.c:1354 +#, fuzzy, c-format +msgid "Subscribing to %s..." +msgstr "Kopírujem do %s..." + +#: imap/imap.c:1356 +#, fuzzy, c-format +msgid "Unsubscribing to %s..." +msgstr "Spájam sa s %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Nemo¾no získa» hlavièky z tejto verzie IMAP serveru." + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "Nemo¾no vytvori» doèasný súbor!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Vyvolávam hlavièky správ... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Vyvolávam správu..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Odsúvam správu ..." + +#: imap/message.c:576 +#, fuzzy, c-format +msgid "Copying %d messages to %s..." +msgstr "Presúvam preèítané správy do %s..." + +#: imap/message.c:580 +#, fuzzy, c-format +msgid "Copying message %d to %s..." +msgstr "Zapisujem správu do %s ..." + +#: imap/util.c:239 +#, fuzzy +msgid "Continue?" +msgstr "(pokraèova»)\n" + +#: init.c:611 +msgid "alias: no address" +msgstr "zástupca: ¾iadna adresa" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "neplatná polo¾ka hlavièky" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: neznáma metóda triedenia" + +#: init.c:879 +#, fuzzy, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default: chyba v regvýr: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: neznáma premenná" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefix je neplatný s vynulovaním" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "hodnota je neplatná s vynulovaním" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s je nastavené" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s je nenastavené" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: neplatný typ schránky" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: neplatná hodnota" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: neznáma hodnota" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: neznáma hodnota" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Nemo¾no zisti» stav: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s nie je schránka" + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Chyba v %s, riadok %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "zdroj: chyby v %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "zdroj: chyba na %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "zdroj: príli¹ veµa argumentov" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: neznámy príkaz" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Chyba v príkazovom riadku: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "nemo¾no urèi» domáci adresár" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "nemo¾no urèi» meno pou¾ívateµa" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Bola zistená sluèka v makre." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Klávesa nie je viazaná." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Klávesa nie je viazaná. Stlaète '%s' pre nápovedu." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: príli¹ veµa parametrov" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: také menu neexistuje" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "prázdna postupnos» kláves" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: príli¹ veµa parametrov" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: v tabuµke neexistuje taká funkcia" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: prázdna postupnos» kláves" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "makro: príli¹ veµa parametrov" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec: príli¹ málo parametrov" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s: v tabuµke neexistuje taká funkcia" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Zadajte ID kµúèa pre %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "prázdna operácia" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "prinúti» zobrazovanie príloh pou¾íva» mailcap-u" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "prezri prílohu ako text" + +#: keymap_alldefs.h:9 +#, fuzzy +msgid "Toggle display of subparts" +msgstr "prepnú» zobrazovanie citovaného textu" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "presunú» na vrch stránky" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "znovu po¹li správu inému pou¾ívateµovi" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "oznaè nový súbor v tomto adresári" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "prezrie» súbor" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "zobraz meno aktuálne oznaèeného súboru" + +#: keymap_alldefs.h:15 +#, fuzzy +msgid "subscribe to current mailbox (IMAP only)" +msgstr "zmaza» " + +#: keymap_alldefs.h:16 +#, fuzzy +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "zmaza» " + +#: keymap_alldefs.h:17 +#, fuzzy +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "zmaza» " + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "®iadna schránka s novými správami." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "zmeni» adresáre" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "skontroluj nové správy v schránkach" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "prilo¾i» súbor(y) k tejto správe" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "prilo¾i» správu/y k tejto správe" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "upravi» zoznam BCC" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "upravi» zoznam CC" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "upravi» popis prílohy" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "upravi» kódovanie dát prílohy" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "vlo¾te súbor na ulo¾enie kópie tejto správy" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "upravi» prikladaný súbor" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "upravi» pole 'from'" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "upravi» správu s hlavièkami" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "upravi» správu" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "upravi» prílohu s pou¾itím polo¾ky mailcap-u" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "upravi» pole Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "upravi» predmet tejto správy" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "upravi» zoznam TO" + +#: keymap_alldefs.h:36 +#, fuzzy +msgid "create a new mailbox (IMAP only)" +msgstr "zmaza» " + +#: keymap_alldefs.h:37 +#, fuzzy +msgid "edit attachment content type" +msgstr "upravi» typ prílohy" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "získa» doèasnú kópiu prílohy" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "spusti na správu ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "zostavi» novú prílohu pou¾ijúc polo¾ku mailcap-u" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "ulo¾i» túto správu a posla» neskôr" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "premenova»/presunú» prilo¾ený súbor" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "posla» správu" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "prepnú» príznak, èi zmaza» správu po odoslaní" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "obnovi» informáciu o zakódovaní prílohy" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "zapísa» správu do zlo¾ky" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "skopírova» správu do súboru/schránky" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "vytvori» zástupcu z odosielateµa správy" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "presunú» polo¾ku na spodok obrazovky" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "presunú» polo¾ku do stredu obrazovky" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "preunú» polo¾ku na vrch obrazovky" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "urobi» dekódovanú (text/plain) kópiu" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "urobi» dekódovanú (text/plain) kópiu a zmaza»" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "zmaza» " + +#: keymap_alldefs.h:57 +#, fuzzy +msgid "delete the current mailbox (IMAP only)" +msgstr "zmaza» " + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "zmaza» v¹etky polo¾ky v podvlákne" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "zmaza» v¹etky polo¾ky vo vlákne" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "zobrazi» plnú adresu odosielateµa" + +#: keymap_alldefs.h:61 +#, fuzzy +msgid "display message and toggle header weeding" +msgstr "zobrazi» správu so v¹etkými hlavièkami" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "zobrazi» správu" + +#: keymap_alldefs.h:63 +#, fuzzy +msgid "edit the raw message" +msgstr "upravi» správu" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "zmaza» znak pred kurzorom" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "zmaza» jeden znak vµavo od kurzoru" + +#: keymap_alldefs.h:66 +#, fuzzy +msgid "move the cursor to the beginning of the word" +msgstr "skoèi» na zaèiatok riadku" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "skoèi» na zaèiatok riadku" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "cykluj medzi schránkami s príchodzími správami" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "doplò názov súboru alebo zástupcu" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "doplò adresu s otázkou" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "zmaza» znak pod kurzorom" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "skoèi» na koniec riadku" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "presunú» kurzor o jeden znak vpravo" + +#: keymap_alldefs.h:74 +#, fuzzy +msgid "move the cursor to the end of the word" +msgstr "presunú» kurzor o jeden znak vpravo" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "rolova» hore po zozname histórie" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "rolova» hore po zozname histórie" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "zmaza» znaky od kurzoru do konca riadku" + +#: keymap_alldefs.h:78 +#, fuzzy +msgid "delete chars from the cursor to the end of the word" +msgstr "zmaza» znaky od kurzoru do konca riadku" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "zmaza» v¹etky znaky v riadku" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "zmaza» slovo pred kurzorom" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "uvies» nasledujúcu stlaèenú klávesu" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "" + +#: keymap_alldefs.h:84 +#, fuzzy +msgid "convert the word to lower case" +msgstr "presunú» na vrch stránky" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "vlo¾te príkaz muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "vlo¾te masku súborov" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "ukonèi» toto menu" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrova» prílohy príkazom shell-u" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "presunú» sa na prvú polo¾ku" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "prepnú» príznak dôle¾itosti správy" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "posunú» správu inému pou¾ívateµovi s poznámkami" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "oznaèi» aktuálnu polo¾ku" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "odpoveda» v¹etkým príjemcom" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "rolova» dolu o 1/2 stránky" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "rolova» hore o 1/2 stránky" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "táto obrazovka" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "skoèi» na index èíslo" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "presunú» sa na poslednú polo¾ku" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "odpoveda» do ¹pecifikovaného po¹tového zoznamu" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "vykona» makro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "zostavi» novú po¹tovú správu" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "otvori» odli¹nú zlo¾ku" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "otvori» odli¹nú zlo¾ku iba na èítanie" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "vymaza» stavový príznak zo správy" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "zmaza» správy zodpovedajúce vzorke" + +#: keymap_alldefs.h:107 +#, fuzzy +msgid "force retrieval of mail from IMAP server" +msgstr "vybra» po¹tu z POP serveru" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "vybra» po¹tu z POP serveru" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "presunú» sa na prvú správu" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "presunú» sa na poslednú správu" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "ukáza» iba správy zodpovedajúce vzorke" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "skoèi» na nasledovnú novú správu" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "skoèi» na nasledujúcu neèítanú správu" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "skoèi» na ïaµ¹ie podvlákno" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "skoèi» na nasledujúce vlákno" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "presunú» sa na nasledujúcu odmazanú správu" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "skoèi» na nasledujúcu neèítanú správu" + +#: keymap_alldefs.h:118 +#, fuzzy +msgid "jump to parent message in thread" +msgstr "odmaza» v¹etky správy vo vlákne" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "skoèi» na predchádzajúce vlákno" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "skoèi» na predchádzajúce podvlákno" + +#: keymap_alldefs.h:121 +#, fuzzy +msgid "move to the previous undeleted message" +msgstr "presunú» sa na nasledujúcu odmazanú správu" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "skoèi» na predchádzajúcu novú správo" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "skoèi» na predchádzajúcu neèítanú správu" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "skoèi» na predchádzajúcu neèítanú správu" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "oznaèi» aktuálne vlákno ako èítané" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "oznaèi» aktuálne podvlákno ako èítané" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "nastavi» stavový príznak na správe" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "ulo¾i» zmeny do schránky" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "oznaèi» správy zodpovedajúce vzoru" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "odmaza» správy zodpovedajúce vzoru" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "odznaèi» správy zodpovedajúce vzoru" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "presunú» do stredu stránky" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "presunú» sa na ïaµ¹iu polo¾ku" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "rolova» o riadok dolu" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "presunú» sa na ïaµ¹iu stránku" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "skoèi» na koniec správy" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "prepnú» zobrazovanie citovaného textu" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "preskoèi» za citovaný text" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "skoèi» na zaèiatok správy" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "zre»azi» výstup do príkazu shell-u" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "presunú» sa na predchádzajúcu polo¾ku" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "rolova» o riadok hore" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "presunú» sa na predchádzajúcu stránku" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "tlaèi» aktuálnu polo¾ku" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "opýta» sa externého programu na adresy" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "prida» nové výsledky opýtania k teraj¹ím" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "ulo¾i» zmeny v schránke a ukonèi»" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "vyvola» odlo¾enú správu" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "vymaza» a prekresli» obrazovku" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{interné}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "odpoveda» na správu" + +#: keymap_alldefs.h:152 +#, fuzzy +msgid "use the current message as a template for a new one" +msgstr "upravi» správu na znovu-odoslanie" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "ulo¾i» správu/prílohu do súboru" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "hµada» podµa regulérneho výrazu" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "hµada» podµa regulérneho výrazu dozadu" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "hµada» ïaµ¹í výskyt" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "hµada» ïaµ¹í výskyt v opaènom smere" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "prepnú» farby hµadaného výrazu" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "vyvola» príkaz v podriadenom shell-e" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "triedi» správy" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "triedi» správy v opaènom poradí" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "oznaèi» aktuálnu polo¾ku" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "oznaèi» aktuálne podvlákno" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "oznaèi» akuálne vlákno" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "prepnú» príznak 'nová' na správe" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "prepnú» príznak mo¾nosti prepísania schránky" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "prepnú», èi prezera» schránky alebo v¹etky súbory" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "presunú» sa na zaèiatok stránky" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "odmaza» aktuálnu polo¾ku" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "odmaza» v¹etky správy vo vlákne" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "odmaza» v¹etky správy v podvlákne" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "zobrazi» verziu a dátum vytvorenia Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "zobrazi» prílohu pou¾ijúc polo¾ku mailcap-u, ak je to nevyhnutné" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "zobrazi» prílohy MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "zobrazi» práve aktívny limitovací vzor" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "zabaµ/rozbaµ aktuálne vlákno" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "zabaµ/rozbaµ v¹etky vlákna" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "prida» verejný kµúè PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "zobrazi» mo¾nosti PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "posla» verejný kµúè PGP po¹tou" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "overi» verejný kµúè PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "zobrazi» ID pou¾ívateµa tohoto kµúèu" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "" + +#: keymap_alldefs.h:188 +#, fuzzy +msgid "Append a remailer to the chain" +msgstr "zmaza» v¹etky znaky v riadku" + +#: keymap_alldefs.h:189 +#, fuzzy +msgid "Insert a remailer into the chain" +msgstr "zmaza» v¹etky znaky v riadku" + +#: keymap_alldefs.h:190 +#, fuzzy +msgid "Delete a remailer from the chain" +msgstr "zmaza» v¹etky znaky v riadku" + +#: keymap_alldefs.h:191 +#, fuzzy +msgid "Select the previous element of the chain" +msgstr "zmaza» v¹etky znaky v riadku" + +#: keymap_alldefs.h:192 +#, fuzzy +msgid "Select the next element of the chain" +msgstr "zmaza» v¹etky znaky v riadku" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "urobi» de¹ifrovanú kópiu a vymaza»" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "urobi» de¹ifrovanú kópiu" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "vyma¾ frázu hesla PGP z pamäte" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "extrahuj verejné kµúèe PGP" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "zobrazi» mo¾nosti PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Nedostatok pamäte!" + +#: main.c:46 +#, fuzzy +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "Ak chcete kontaktova» vývojárov, napí¹te na <mutt-dev@mutt.org>.\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-8 Michael R. Elkins a ostatní.\n" +"Mutt neprichádza so ®IADNOU ZÁRUKOU; pre detaily napí¹te `mutt -vv'.\n" +"Mutt je voµný program, a ste vítaný ¹íri» ho\n" +"za urèitých podmienok; napí¹te `mutt -vv' pre detaily.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-8 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1997-8 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1998 Ruslan Ermilov <ru@ucb.crimea.ua>\n" +"\n" +"Veµa ostatných tu nespomenutých prispelo mno¾stvom kódu,\n" +"opráv, a nápadov.\n" +"\n" +" Tento program je voµný, mô¾ete ho ¹íri» a/alebo upravova»\n" +" podµa podmienok licencie GNU General Public License, ako bola\n" +" publikovaná nadáciou Free Software Foundation; pod verziou 2,\n" +" alebo (podµa Vá¹ho výberu) pod akoukoµvek neskor¹ou verziou.\n" +"\n" +" Tento program je ¹írený v nádeji, ¾e bude u¾itoèný,\n" +" ale BEZ AKEJKO¥VEK ZÁRUKY; dokonca bez implicitnej OBCHODNEJ\n" +" záruky alebo VHODNOSTI PRE URÈITÝ CIE¥. Viï GNU General Public\n" +" License pre viac podrobností.\n" +"\n" +" Mali by ste obdr¾a» kópiu GNU General Public License spolu s týmto\n" +" programom; ak nie, napí¹te do Free Software Foundation, Inc.,\n" +" 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"pou¾itie: mutt [ -nRzZ ] [ -e <prík> ] [ -F <súb> ] [ -m <typ> ] [ -f " +"<súb> ]\n" +" mutt [ -nx ] [ -e <prík> ] [ -a <súb> ] [ -F <súb> ] [ -H <súb> ] [ -" +"i <súb> ] [ -s <predm> ] [ -b <adr> ] [ -c <adr> ] <adr> [ ... ]\n" +" mutt [ -n ] [ -e <prík> ] [ -F <súb> ] -p\n" +" mutt -v[v]\n" +"\n" +"prepínaèe:\n" +" -a <súbor>\tpripoji» súbor do správy\n" +" -b <adresa>\tuvies» adresy pre slepé kópie (BCC)\n" +" -c <adresa>\tuvies» adresy pre kópie (CC)\n" +" -e <príkaz>\tuvies» príkaz, ktorý sa vykoná po inicializácii\n" +" -f <súbor>\tuvies», ktorá schránka sa bude èíta»\n" +" -F <súbor>\tuvies» alternatívny súbor muttrc\n" +" -H <súbor>\tuvies» súbor s návrhom, z ktorého sa preèíta hlavièka\n" +" -i <súbor>\tuvies» súbor, ktorý má Mutt vlo¾i» do odpovede\n" +" -m <typ>\tuvies» ¹tandardný typ schránky\n" +" -n\t\tspôsobuje, ¾e Mutt neèíta systémový súbor Muttrc\n" +" -p\t\tvyvola» a odlo¾enú správu\n" +" -R\t\totvori» schránku len na èítanie\n" +" -s <predm>\tuvies» predmet (musí by» v úvodzovkách, ak obsahuje medzery)\n" +" -v\t\tzobrazi» verziu a definície z èasu kompilácie\n" +" -x\t\tsimulova» mód posielania typický pre mailx\n" +" -y\t\tvybra» schránku uvedenú vo Va¹om zozname 'mailbox'\n" +" -z\t\tukonèi» okam¾ite, ak v schránke nie sú ¾iadne správy\n" +" -Z\t\totvori» prvú zlo¾ku s novými správami, okam¾ite skonèi», ak ¾iadne " +"nie sú\n" +" -h\t\ttáto pomoc" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Nastavenia kompilácie:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Chyba pri inicializácii terminálu." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Ladenie na úrovni %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG nebol definovaný pri kompilácii. Ignorované.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "" + +#: main.c:710 +#, fuzzy, c-format +msgid "Can't create %s: %s." +msgstr "Nemo¾no vytvori» súbor %s" + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Neboli uvedení ¾iadni príjemcovia.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: neschopný pripoji» súbor.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "®iadna schránka s novými správami." + +#: main.c:870 +#, fuzzy +msgid "No incoming mailboxes defined." +msgstr "cykluj medzi schránkami s príchodzími správami" + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Schránka je prázdna." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Èítam %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Schránka je poru¹ená!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Schránka bola poru¹ená!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fatálna chyba! Nemo¾no znovu otvori» schránku!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Nemo¾no uzamknú» schránku!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: schránka zmenená, ale ¾iadne zmenené správy! (oznámte túto chybu)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Zapisujem správy... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "Kompilujem vyhµadávací vzor..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Zápis zlyhal! Schránka bola èiastoène ulo¾ená do %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Nemo¾no znovu otvori» schránku!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Znovuotváram schránku..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Skoè do: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Neplatné èíslo indexu." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "®iadne polo¾ky." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Nemô¾te rolova» ïalej dolu." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Nemô¾te rolova» ïalej hore." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Ste na poslednej stránke." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Ste na prvej stránke." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Je zobrazená prvá polo¾ka." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Je zobrazená posledná polo¾ka." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Ste na poslednej polo¾ke." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Ste na prvej polo¾ke." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Hµada»: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Hµada» spätne: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "®iadny vzor pre hµadanie." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Nenájdené." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "®iadne oznaèené polo¾ky." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Hµadanie nie je implementované pre toto menu." + +#: menu.c:995 +#, fuzzy +msgid "Jumping is not implemented for dialogs." +msgstr "Hµadanie nie je implementované pre toto menu." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Oznaèovanie nie je podporované." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Èítam %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Súbor je adresár, ulo¾i» v òom?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Súbor je adresár, ulo¾i» v òom?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Súbor v adresári: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Súbor existuje, (o)-prepísa», prid(a)» alebo (c)-zru¹i»?" + +#: muttlib.c:869 +msgid "oac" +msgstr "oac" + +#: muttlib.c:1171 +#, fuzzy +msgid "Can't save message to POP mailbox." +msgstr "Zapísa» správu do schránky" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s nie je schránka!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Prida» správy do %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, fuzzy, c-format +msgid "Connection to %s closed" +msgstr "Spájam sa s %s..." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "" + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, fuzzy, c-format +msgid "Error talking to %s (%s)" +msgstr "Pripájam sa na %s" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, fuzzy, c-format +msgid "Looking up %s..." +msgstr "Kopírujem do %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, fuzzy, c-format +msgid "Could not find the host \"%s\"" +msgstr "Nemo¾no nájs» adresu pre hostiteµa %s." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Spájam sa s %s..." + +#: mutt_socket.c:519 +#, fuzzy, c-format +msgid "Could not connect to %s (%s)." +msgstr "Nemo¾no otvori» %s" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "Prihlasovanie zlyhalo." + +#: mutt_ssl.c:333 +#, fuzzy +msgid "Unable to get certificate from peer" +msgstr "nemo¾no urèi» domáci adresár" + +#: mutt_ssl.c:341 +#, fuzzy, c-format +msgid "SSL connection using %s (%s)" +msgstr "Pripájam sa na %s" + +#: mutt_ssl.c:381 +#, fuzzy +msgid "Unknown" +msgstr "neznáma chyba" + +#: mutt_ssl.c:406 +#, fuzzy +msgid "[unable to calculate]" +msgstr "%s: súbor nemo¾no pripoji»" + +#: mutt_ssl.c:424 +#, fuzzy +msgid "[invalid date]" +msgstr "%s: neplatná hodnota" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr "" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr "" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "" + +#: mutt_ssl.c:616 +#, fuzzy +msgid "roa" +msgstr "oac" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Koniec " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Poèet zámkov prekroèený, vymaza» zámok pre %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Nemo¾no zisti» stav: %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Vypr¹al èas na uzamknutie pomocou fcntl!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Èakám na zámok od fcntl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Vypr¹al èas na uzamknutie celého súboru!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Èakám na uzamknutie súboru... %d" + +#: mx.c:591 +#, fuzzy, c-format +msgid "Couldn't lock %s\n" +msgstr "Nemo¾no zisti» stav: %s.\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Èítam %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Zapisujem %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Nemo¾no zosynchronizova» schránku %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Presunú» preèítané správy do %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Odstráni» %d zmazané správy?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Odstráni» %d zmazaných správ?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Presúvam preèítané správy do %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Schránka nie je zmenená." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d ostalo, %d presunutých, %d vymazaných." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d ostalo, %d vymazaných." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Stlaète '%s' na prepnutie zápisu" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Pou¾ite 'prepnú»-zápis' na povolenie zápisu!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Schránka je oznaèená len na èítanie. %s" + +#: mx.c:1181 +#, fuzzy +msgid "Mailbox checkpointed." +msgstr "Bola zistená sluèka v makre." + +#: mx.c:1490 +#, fuzzy +msgid "Can't write message" +msgstr "upravi» správu" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +#, fuzzy +msgid "Not available in this menu." +msgstr "V tejto schránke je nová po¹ta." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "PredSt" + +#: pager.c:1447 +msgid "NextPg" +msgstr "Ïaµ¹St" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Pozri prílohu" + +#: pager.c:1454 +msgid "Next" +msgstr "Ïaµ¹í" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Spodok správy je zobrazený." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Vrch správy je zobrazený." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Spätné hµadanie: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Hµada»: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Pomoc sa akurát zobrazuje." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "Nie je ïaµ¹í citovaný text." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "®iadny ïaµ¹í necitovaný text za citátom." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "viaczlo¾ková správa nemá parameter ohranièenia (boundary)!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Chyba vo výraze: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Neplatný deò v mesiaci: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Neplatný mesiac: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, fuzzy, c-format +msgid "Invalid relative date: %s" +msgstr "Neplatný mesiac: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "chyba vo výraze" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "chyba vo vzore na: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: neplatný príkaz" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: nepodporovaný v tomto móde" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "chýbajúci parameter" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "nespárované zátvorky: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "prázdny vzor" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "chyba: neznámy operand %d (oznámte túto chybu)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Kompilujem vyhµadávací vzor..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Vykonávam príkaz na nájdených správach..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "®iadne správy nesplnili kritérium." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Hµadanie narazilo na spodok bez nájdenia zhody" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Hµadanie narazilo na vrchol bez nájdenia zhody" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Hµadanie bolo preru¹ené." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Fráza hesla PGP bola zabudnutá." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Koniec výstupu PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- ZAÈIATOK SPRÁVY PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ZAÈIATOK BLOKU VEREJNÉHO K¥ÚÈA PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- ZAÈIATOK SPRÁVY PODPÍSANEJ S PGP --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- KONIEC SPRÁVY PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- KONIEC BLOKU VEREJNÉHO K¥ÚÈA PGP --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- KONIEC SPRÁVY PODPÍSANEJ S PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Chyba: nemo¾no nájs» zaèiatok správy PGP! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Interná chyba. Informujte <roessler@guug.de>" + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Chyba: poru¹ení správa PGP/MIME! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Chyba: nemo¾no vytvori» doèasný súbor! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Nasledujúce dáta sú ¹ifrované pomocou PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- Koniec dát ¹ifrovaných pomocou PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Nemo¾no otvori» podproces PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Pou¾i» ID kµúèa = \"%s\" pre %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Zadajte ID kµúèa pre %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "" + +#: pgpinvoke.c:303 +#, fuzzy +msgid "Fetching PGP key..." +msgstr "Vyvolávam správu..." + +#: pgpkey.c:486 +msgid "All matching keys are expired, revoked, or disabled." +msgstr "" + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Oznaèi» " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Skontrolova» kµúè " + +#: pgpkey.c:528 +#, fuzzy, c-format +msgid "PGP keys matching <%s>." +msgstr "Kµúèe PGP zhodujúce sa " + +#: pgpkey.c:530 +#, fuzzy, c-format +msgid "PGP keys matching \"%s\"." +msgstr "Kµúèe PGP zhodujúce sa " + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Nemo¾no otvori» /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Nemo¾no vytvori» doèasný súbor" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "ID kµúèa: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "" + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Toto ID nie je dôveryhodné." + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "Toto ID je dôveryhodné iba nepatrne." + +#: pgpkey.c:622 +#, fuzzy, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Chcete to naozaj pou¾i»?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Prosím zadajte ID kµúèa: " + +#: pgpkey.c:748 +#, fuzzy +msgid "Invoking pgp..." +msgstr "Spú¹»am PGP..." + +#: pgpkey.c:773 +#, fuzzy, c-format +msgid "PGP Key %s." +msgstr "PGP kµúè 0x%s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "" + +#: pop.c:86 pop_lib.c:197 +#, fuzzy +msgid "Command TOP is not supported by server." +msgstr "Oznaèovanie nie je podporované." + +#: pop.c:113 +#, fuzzy +msgid "Can't write header to temporary file!" +msgstr "Nemo¾no vytvori» doèasný súbor" + +#: pop.c:194 pop_lib.c:199 +#, fuzzy +msgid "Command UIDL is not supported by server." +msgstr "Oznaèovanie nie je podporované." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +#, fuzzy +msgid "Fetching list of messages..." +msgstr "Vyvolávam správu..." + +#: pop.c:411 +#, fuzzy +msgid "Can't write message to temporary file!" +msgstr "Nemo¾no vytvori» doèasný súbor" + +#: pop.c:513 pop.c:578 +#, fuzzy +msgid "Checking for new messages..." +msgstr "Odsúvam správu ..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Hostiteµ POP nie je definovaný." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "®iadna nová po¹ta v schránke POP." + +#: pop.c:613 +#, fuzzy +msgid "Delete messages from server?" +msgstr "Vymazávam správy zo serveru..." + +#: pop.c:615 +#, fuzzy, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Èítam %d nových správ (%d bytov)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Chyba pri zapisovaní do schránky!" + +#: pop.c:661 +#, fuzzy, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [preèítaných správ: %d]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Server uzavrel spojenie!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "" + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "" + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "" + +#: pop_auth.c:264 +#, fuzzy +msgid "Command USER is not supported by server." +msgstr "Oznaèovanie nie je podporované." + +#: pop_lib.c:195 +#, fuzzy +msgid "Unable to leave messages on server." +msgstr "Vymazávam správy zo serveru..." + +#: pop_lib.c:225 +#, fuzzy, c-format +msgid "Error connecting to server: %s" +msgstr "Pripájam sa na %s" + +#: pop_lib.c:370 +#, fuzzy +msgid "Closing connection to POP server..." +msgstr "Zatváram spojenie s IMAP serverom..." + +#: pop_lib.c:536 +#, fuzzy +msgid "Verifying message indexes..." +msgstr "Zapisujem správu do %s ..." + +#: pop_lib.c:560 +#, fuzzy +msgid "Connection lost. Reconnect to POP server?" +msgstr "Zatváram spojenie s IMAP serverom..." + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Odlo¾ené správy" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "®iadne odlo¾ené správy." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Neplatná hlavièka PGP" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Neplatná hlavièka PGP" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Prihlasovanie zlyhalo." + +#: query.c:46 +msgid "New Query" +msgstr "Nová otázka" + +#: query.c:47 +msgid "Make Alias" +msgstr "Urobi» alias" + +#: query.c:48 +msgid "Search" +msgstr "Hµada»" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Èakám na odpoveï..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Príkaz otázky nie je definovaný." + +#: query.c:286 +msgid "Query" +msgstr "Otázka" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Otázka: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Otázka '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Presmerova»" + +#: recvattach.c:53 +msgid "Print" +msgstr "Tlaèi»" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Ukladám..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Pripojené dáta boli ulo¾ené." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "VAROVANIE! Mô¾ete prepísa» %s, pokraèova»?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Príloha bola prefiltrovaná." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrova» cez: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Presmerova» do: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Neviem ako tlaèi» prílohy %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Vytlaèi» oznaèené prílohy?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Vytlaèi» prílohu?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Prílohy" + +#: recvattach.c:987 +#, fuzzy +msgid "There are no subparts to show!" +msgstr "Vlákno obsahuje neèítané správy." + +#: recvattach.c:1048 +#, fuzzy +msgid "Can't delete attachment from POP server." +msgstr "vybra» po¹tu z POP serveru" + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Mazanie príloh z PGP správ nie je podporované." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "je podporované iba mazanie viaczlo¾kových príloh." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Presmerova» mô¾ete iba èasti message/rfc822." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Chyba pri posielaní správy." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Chyba pri posielaní správy." + +#: recvcmd.c:413 +#, fuzzy, c-format +msgid "Can't open temporary file %s." +msgstr "Nemo¾no vytvori» doèasný súbor" + +#: recvcmd.c:444 +#, fuzzy +msgid "Forward as attachments?" +msgstr "zobrazi» prílohy MIME" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Posunú» vo formáte MIME encapsulated?" + +#: recvcmd.c:591 recvcmd.c:841 +#, fuzzy, c-format +msgid "Can't create %s." +msgstr "Nemo¾no vytvori» súbor %s" + +#: recvcmd.c:724 +#, fuzzy +msgid "Can't find any tagged messages." +msgstr "pou¾i» ïaµ¹iu funkciu na oznaèené správy" + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Nenájdené ¾iadne po¹tové zoznamy!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" + +#: remailer.c:480 +#, fuzzy +msgid "Append" +msgstr "Posla»" + +#: remailer.c:481 +msgid "Insert" +msgstr "" + +#: remailer.c:482 +#, fuzzy +msgid "Delete" +msgstr "Oznaèi»" + +#: remailer.c:484 +msgid "OK" +msgstr "" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "" + +#: remailer.c:538 +#, fuzzy +msgid "Select a remailer chain." +msgstr "zmaza» v¹etky znaky v riadku" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "" + +#: remailer.c:661 +#, fuzzy +msgid "You already have the first chain element selected." +msgstr "Ste na prvej správe." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "" + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "" + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" + +#: remailer.c:768 +#, fuzzy, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Chyba pri posielaní správy, dcérsky proces vrátil %d (%s).\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Chyba pri posielaní správy." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Nesprávne formátovaná polo¾ka pre typ %s v \"%s\", riadok %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Ne¹pecifikovaná cesta k mailcap" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "polo¾ka mailcap-u pre typ %s nenájdená" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: príli¹ málo parametrov" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: príli¹ veµa parametrov" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "®iadny predmet, ukonèi»?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "®iadny predmet, ukonèujem." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Odpoveda» na adresu %s%s?" + +#: send.c:517 +#, fuzzy, c-format +msgid "Follow-up to %s%s?" +msgstr "Odpoveda» na adresu %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "®iadna z oznaèených správ nie je viditeµná!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Prilo¾i» správu do odpovede?" + +#: send.c:738 +#, fuzzy +msgid "Including quoted message..." +msgstr "Posielam správu..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Nemo¾no pripoji» v¹etky po¾adované správy!" + +#: send.c:762 +#, fuzzy +msgid "Forward as attachment?" +msgstr "Vytlaèi» prílohu?" + +#: send.c:766 +#, fuzzy +msgid "Preparing forwarded message..." +msgstr "Odsúvam správu ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Vyvola» odlo¾enú správu?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Odsúvam správu ..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Zru¹i» nezmenenú správu?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Nezmenená správa bola zru¹ená." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Po¹ta nebola odoslaná." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Správa bola odlo¾ená." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Nie sú uvedení ¾iadni príjemcovia!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Neboli uvedení ¾iadni príjemcovia!" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "®iadny predmet, zru¹i» posielanie?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Nebol uvedený predmet." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Posielam správu..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Nemo¾no posla» správu." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Správa bola odoslaná." + +#: send.c:1672 +msgid "Sending in background." +msgstr "" + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Nenájdený parameter ohranièenia (boundary)! [ohláste túto chybu]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s u¾ viac neexistuje!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s nie je schránka" + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Nemo¾no otvori» %s" + +#: sendlib.c:2053 +#, fuzzy, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Chyba pri posielaní správy, dcérsky proces vrátil %d (%s).\n" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, fuzzy, c-format +msgid "%s... Exiting.\n" +msgstr "Zachytené %s... Konèím.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Zachytené %s... Konèím.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Zachytený signál %d... Konèím.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Koniec " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Neplatný mesiac: %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "neznáma chyba" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "Zadajte ID kµúèa pre %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "Kµúèe PGP zhodujúce sa " + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Pou¾i» ID kµúèa = \"%s\" pre %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "Pou¾i» ID kµúèa = \"%s\" pre %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Nemo¾no vytvori» filter." + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(¾iadna schránka)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "Nemo¾no otvori» podproces PGP!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Koniec výstupu PGP --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Chyba: nemo¾no vytvori» podproces PGP! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Nasledujúce dáta sú ¹ifrované pomocou PGP/MIME --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Nasledujúce dáta sú podpísané s PGP/MIME --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Koniec dát ¹ifrovaných pomocou PGP/MIME --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Koniec dát s podpisom PGP/MIME --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Triedim schránku..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Nemo¾no nájs» triediacu funkciu! [oznámte túto chybu]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(¾iadna schránka)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "Táto správa nie je viditeµná." + +#: thread.c:1087 +#, fuzzy +msgid "Parent message is not available." +msgstr "Táto správa nie je viditeµná." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Spú¹»am PGP..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Presmerova» správu do %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Presmerova» správy do %s...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "esabmf" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Táto úroveò dôvery identifikaèného kµúèa je nedefinovaná." + +#~ msgid "Decode-save" +#~ msgstr "Dekóduj-ulo¾" + +#~ msgid "Decode-copy" +#~ msgstr "Dekóduj-kopíruj" + +#~ msgid "Decrypt-save" +#~ msgstr "De¹ifr-ulo¾" + +#~ msgid "Decrypt-copy" +#~ msgstr "De¹ifr-kopíruj" + +#~ msgid "Copy" +#~ msgstr "Kopírova»" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Koniec výstupu PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Nemo¾no zisti» stav: %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: príkaz nenájdený" + +#~ msgid "MIC algorithm: " +#~ msgstr "Algoritmus MIC: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Toto nemá zmysel ak nechcete podpísa» správu." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "Neznámy algoritmus MIC, platné sú: pgp-md5, pgp-sha1, pgp-rmd160" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "SHA1 implementácia Copyright (C) 1995-7 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribúcia a pou¾itie v zdrojovej a binárnej forme, s alebo bez\n" +#~ " modifikácie, sú umo¾nené pod urèenými podmienkami.\n" +#~ "\n" +#~ " Implementácia SHA1 prichádza AKO JE, a HOCIAKÉ VYJADRENÉ ALEBO " +#~ "IMPLICITNÉ\n" +#~ " ZÁRUKY, vrátane, ale nie limitované na, implicitnú obchodnú záruku\n" +#~ " a vhodnos» pre urèitý cieµ SÚ ODMIETNUTÉ.\n" +#~ "\n" +#~ " Mali by ste obdr¾a» kópiu plných distribuèných podmienok\n" +#~ " spolu s týmto programom; ak nie, napí¹te vývojárom programu.\n" + +#, fuzzy +#~ msgid "POP Username: " +#~ msgstr "Meno pou¾ívateµa IMAPu:" + +#, fuzzy +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Èítam %d nové správy (%d bytov)..." + +#~ msgid "Error reading message!" +#~ msgstr "Chyba pri èítaní správy!" + +#, fuzzy +#~ msgid "%s [%d message read]" +#~ msgstr "%s [preèítaných správ: %d]" + +#, fuzzy +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "Oznaèovanie nie je podporované." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Znovuotváram schránku... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Zatváram schránku..." + +#~ msgid "IMAP Username: " +#~ msgstr "Meno pou¾ívateµa IMAPu:" + +#, fuzzy +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "Zadajte ID kµúèa pre %s: " + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- Chyba: neoèakávaný koniec súboru! --]\n" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "Posielam príkaz APPEND..." + +#~ msgid "POP Password: " +#~ msgstr "Heslo POP: " + +#~ msgid "No POP username is defined." +#~ msgstr "Meno pou¾ívateµa POP nie je definované." + +#~ msgid "Could not find address for host %s." +#~ msgstr "Nemo¾no nájs» adresu pre hostiteµa %s." + +#~ msgid "Attachment saved" +#~ msgstr "Príloha bola ulo¾ená" + +#, fuzzy +#~ msgid "Can't open %s: %s." +#~ msgstr "Nemo¾no zisti» stav: %s" + +#~ msgid "Compose" +#~ msgstr "Zlo¾i»" + +#~ msgid "move to the last undelete message" +#~ msgstr "presunú» sa na poslednú odmazanú správu" + +#~ msgid "return to the main-menu" +#~ msgstr "vráti» sa do hlavného menu" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "ignorujem prázdnu polo¾ku hlavièky: %s" + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "Imap_error(): neoèakávaná odpoveï v %s: %s\n" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "Pre podpis bol definovaný podpis PGP neznámej verzie." + +#~ msgid "Message edited. Really send?" +#~ msgstr "Správa bola upravená. Naozaj posla»?" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "Nemo¾no otvori» Vá¹ kruh tajného kµúèa!" + +#~ msgid "===== Attachments =====" +#~ msgstr "===== Prídavné dáta =====" + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "Neznáma verzia PGP\"%s\"." + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- Chyba: táto správa nespåòa ¹pecifikáciu PGP/MIME! --]\n" +#~ "\n" + +#~ msgid "reserved" +#~ msgstr "rezervované" + +#~ msgid "Encrypted Session Key" +#~ msgstr "Zakódovaný kµúè sedenia" + +#~ msgid "Signature Packet" +#~ msgstr "Blok podpisu" + +#~ msgid "Conventionally Encrypted Session Key Packet" +#~ msgstr "Blok konvenène zakódovaného kµúèa sedenia" + +#~ msgid "One-Pass Signature Packet" +#~ msgstr "Jednoprechodový blok podpisu" + +#~ msgid "Secret Key Packet" +#~ msgstr "Blok tajného kµúèa" + +#~ msgid "Public Key Packet" +#~ msgstr "Blok verejného kµúèa" + +#~ msgid "Secret Subkey Packet" +#~ msgstr "Blok tajného podkµúèa" + +#~ msgid "Compressed Data Packet" +#~ msgstr "Blok komprimovaných dát" + +#~ msgid "Symmetrically Encrypted Data Packet" +#~ msgstr "Blok symetricky ¹ifrovaných dát" + +#~ msgid "Marker Packet" +#~ msgstr "Znaèkovací blok" + +#~ msgid "Literal Data Packet" +#~ msgstr "Blok literálnych dát" + +#~ msgid "Trust Packet" +#~ msgstr "Blok dôveryhodnosti" + +#~ msgid "Name Packet" +#~ msgstr "Blok mena" + +#~ msgid "Subkey Packet" +#~ msgstr "Blok podkµúèa" + +#~ msgid "Reserved" +#~ msgstr "Rezervované" + +#~ msgid "Comment Packet" +#~ msgstr "Blok komentára" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "Výstup dcérskeho procesu bol ulo¾ený do %s.\n" + +#~ msgid "Display message using mailcap?" +#~ msgstr "Zobrazi» správu pou¾itím mailcap-u?" + +#~ msgid "Please report this program error in the function mutt_mktime." +#~ msgstr "Prosím, oznámte túto chybu vo funkcii mutt_mktime." + +#~ msgid "%s is a boolean var!" +#~ msgstr "%s je logická premenná!" diff --git a/po/sv.gmo b/po/sv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..119d0d063d4f3ad99f2af08859e78022807cb7a5 GIT binary patch literal 70324 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%0D@3~*aENbtWr>a{_A?Wuft%`|+= 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 L{G`&J?o59GS-Iv4 literal 0 HcmV?d00001 diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..8189c3b --- /dev/null +++ b/po/sv.po @@ -0,0 +1,4311 @@ +# $Id: sv.po,v 3.11 2003/11/05 20:09:36 roessler Exp $ +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.5.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2002-05-02 21:18+02:00\n" +"Last-Translator: Jörgen Tegnér <jorgen.tegner@telia.se>\n" +"Language-Team: Swedish <mutt-po@mutt.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "Användarnamn på %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "Lösenord för %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Avsluta" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Ta bort" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Återställ" + +#: addrbook.c:36 +msgid "Select" +msgstr "Välj" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Hjälp" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Du saknar alias!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Alias" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Alias: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Du har redan definierat ett alias med det namnet!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Adress: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Namn: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] Godkänn?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Spara i fil: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Lade till alias." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "Kan inte para ihop namnmall, fortsätt?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "'compose' i 'mailcap' kräver %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Ett fel uppstod när \"%s\" kördes!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Kunde inte öppna fil för att tolka brevhuvuden." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Kunde inte öppna fil för att ta bort brevhuvuden." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "Saknar 'compose' i mailcap för %s, skapar en tom fil." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "'edit' i 'mailcap' kräver %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "'mailcap' saknar 'edit' för %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Hittade ingen passande beskrivning i 'mailcap'. Visar som text." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME-typ är inte definierad. Kan inte visa bilaga." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Kan inte skapa filter" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Kan inte skapa filter" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Ett fel uppstod vid skrivning!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Jag vet inte hur det här ska skrivas ut!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Ändra katalog" + +#: browser.c:42 +msgid "Mask" +msgstr "Mask" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s är inte en katalog." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "Brevlådor [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Prenumererar på [%s], filmask: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Katalog [%s], filmask: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Kan inte bifoga en katalog!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Ingen fil passar med filmasken" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Endast brevlådor av IMAP-typ kan skapas" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Endast brevlådor av IMAP-typ kan tas bort" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Ta bort brevlådan '%s'?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "Brevlådan har tagits bort." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "Brevlådan togs inte bort." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Ändra katalog till: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Ett fel uppstod när katalogen skulle läsas." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Filmask: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sortera omvänt efter (d)atum, (a)lpha, (s)torlek eller i(n)te alls? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "Sortera efter (d)atum, (a)lpha, (s)torlek eller i(n)te alls? " + +#: browser.c:1049 +msgid "dazn" +msgstr "dasn" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Nytt filnamn: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Kan inte visa katalogen" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Ett fel uppstod när filen skulle visas" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "Nytt brev i %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: färgen stöds inte av terminalen" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: färgen saknas" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: objektet finns inte" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: kommandot är endast giltigt för index-objekt" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: för få argument" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Saknar argument." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: för få argument" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: för få argument" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: attributet finns inte" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "för få argument" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "för många argument" + +#: color.c:721 +msgid "default colors not supported" +msgstr "standardfärgerna stöds inte" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "Verifiera PGP-signatur?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Kunde inte skapa tillfällig fil!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Kan inte skapa filter för visning" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Kunde inte kopiera meddelandet" + +#: commands.c:182 +msgid "S/MIME signature successfully verified." +msgstr "Signaturen för S/MIME verifierades framgångsrikt." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "Ägarens certifikat (S/MIME) matchar inte avsändarens." + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +msgid "S/MIME signature could NOT be verified." +msgstr "Signaturen för S/MIME kunde INTE verifieras." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP-signaturen verifierades framgångsrikt." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP-signaturen kunde INTE verifieras." + +#: commands.c:223 +msgid "Command: " +msgstr "Kommando: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Återsänd meddelandet till: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Återsänd märkta meddelanden till: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Ett fel uppstod när adressen skulle nycklas upp!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Återsänd meddelande till %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Återsänd meddelanden till %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Meddelande har återsänts." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Meddelanden har återsänts." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Meddelande har återsänts." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Meddelanden har återsänts." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Kan inte skapa filterprocess" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Öppna rör till kommando: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Inget utskriftskommando är definierat." + +#: commands.c:483 +msgid "Print message?" +msgstr "Skriv ut meddelande?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Skriv ut märkta meddelanden?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Meddelande har skrivits ut" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Meddelanden har skrivits ut" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Meddelandet kunde inte skrivas ut" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Meddelanden kunde inte skrivas ut" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Omvänt (d)atum/(f)rån/(m)ot./(ä)re./(t)ill/t(r)åd/(o)sor./(s)tor./(p)oäng?:" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sortera (d)atum/(f)rån/(m)ot./(ä)re./(t)ill/t(r)åd/(o)sor./(s)tor./(p)oäng?:" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "dfmätrosp" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Skalkommando: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "Avkoda-spara%s i brevlåda" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "Avkoda-kopiera%s till brevlåda" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "Dekryptera-spara%s i brevlåda" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "Dekryptera-kopiera%s till brevlåda" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "Spara%s i brevlåda" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "Kopiera%s till brevlåda" + +#: commands.c:706 +msgid " tagged" +msgstr " märkt" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "Kopierar till %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Konvertera till %s vid sändning?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Ändrade 'Content-Type' till %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Teckenuppsättningen ändrad till %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "konverterar inte" + +#: commands.c:914 +msgid "converting" +msgstr "konverterar" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Det finns inga bilagor." + +#: compose.c:84 +msgid "Send" +msgstr "Skicka" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Avbryt" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Bifoga fil" + +#: compose.c:90 +msgid "Descrip" +msgstr "Beskriv" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Signera, Kryptera" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Kryptera" + +#: compose.c:131 +msgid "Sign" +msgstr "Signera" + +#: compose.c:133 +msgid "Clear" +msgstr "Klartext" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " signera som: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<standard>" + +#: compose.c:149 +msgid "Encrypt with: " +msgstr "Kryptera med: " + +#: compose.c:165 +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "PGP: (k)ryptera, (s)ignera, signera s(o)m, (b)åda, eller sk(i)ppa det?" + +#: compose.c:166 +msgid "esabf" +msgstr "ksobi" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Signera som: " + +#: compose.c:227 +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"S/MIME: (k)ryptera, (s)ignera, signera s(o)m, (b)åda, eller sk(i)ppa det?" + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "ksobi" + +#: compose.c:236 +#, fuzzy +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128 eller (g)löm det?" + +#: compose.c:238 +msgid "12345f" +msgstr "12345g" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] finns inte mer!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] har modifierats. Uppdatera kodning?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Bilagor" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Du kan inte ta bort den sista bilagan." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Bifogar valda filer..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "Kunde inte bifoga %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Öppna brevlåda att bifoga meddelande från" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Inga meddelanden i den foldern." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Märk de meddelanden som du vill bifoga!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Kunde inte bifoga!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Kodar endast om berörda textbilagor." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Den aktiva bilagan kommer inte att bli konverterad." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Den aktiva bilagan kommer att bli konverterad." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Ogiltig kodning." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Spara en kopia av meddelandet?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Byt namn till: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "Kan inte ta status på %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Ny fil: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "'Content-Type' har formen bas/undertyp" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Okänd 'Content-Type' %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Kan inte skapa filen %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Vad vi har här är en oförmåga att skapa en bilaga" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Skjut upp meddelandet?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Skriv meddelandet till brevlåda" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Skriver meddelandet till %s ..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Meddelandet skrevs." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "S/MIME har redan valts. Rensa och fortsätt?" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "PGP har redan valts. Rensa och fortsätt?" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr " (aktuell tid: %c)" + +#: crypt.c:71 +#, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- %s utdata följer%s --]\n" + +#: crypt.c:86 +msgid "Passphrase(s) forgotten." +msgstr "Lösenfrasen är glömd." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "Mata in lösenfras för PGP:" + +#: crypt.c:147 +msgid "Enter SMIME passphrase:" +msgstr "Mata in lösenfras för S/MIME:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "Skapa ett infogat PGP-meddelande?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Startar PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "S/MIME-meddelanden utan ledtrådar på sammanhanget stöds inte." + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "Försöker extrahera PGP-nycklar...\n" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "Försöker extrahera S/MIME-certifikat...\n" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Fel: Inkonsistent struktur på multipart/signed! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Fel: Okänt 'multipart/signed' protokoll %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Varning: Signaturer %s/%s kan inte verifieras. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Följande data är signerat --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[--Varning: Kan inte hitta några signaturer. --]\n" +"\n" + +#: crypt.c:924 +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Slut på signerat data --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "ja" + +#: curs_lib.c:158 +msgid "no" +msgstr "nej" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Avsluta Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "okänt fel" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Tryck på valfri tangent för att fortsätta..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' för lista): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Ingen brevlåda är öppen." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Inga meddelanden." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "Brevlådan kan endast läsas." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Otillåten funktion i läget 'bifoga-meddelande'." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Inga synliga meddelanden." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Kan inte växla till skrivläge för en brevlåda utan skrivrättigheter!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Ändringar i brevlådan skrivs när den lämnas." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Ändringar i brevlådan kommer inte att skrivas." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Avsluta" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Spara" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Brev" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Svara" + +#: curs_main.c:403 +msgid "Group" +msgstr "Grupp" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Brevlådan har ändrats utanför programmet. Flaggor kan vara felaktiga." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Nya brev i den här brevlådan." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Brevlådan har ändrats utanför programmet." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Inga märkta meddelanden." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "Ansluter till %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Gå till meddelande: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argumentet måste vara ett meddelandes nummer." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Det meddelandet är inte synligt." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Otillåtet meddelandenummer." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Radera meddelanden som passar: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Inget begränsande mönster är aktivt." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Gräns: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Begränsa till meddelanden som passar: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Avsluta Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Märk meddelanden som passar: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Återställ meddelanden som passar : " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Avmarkera meddelanden som passar: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Öppna brevlåda i läsläge" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "Öppna brevlåda" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s är inte en brevlåda." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Avsluta Mutt utan att spara?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Det här är det sista meddelandet i listan." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Inga återställda meddelanden." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Det här är första meddelandet i listan." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Sökning fortsatte i början." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Sökning fortsatte i slutet." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Inga nya meddelanden" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Inga olästa meddelanden" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " i den här begränsade vyn" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "Kan inte ändra flaggan 'viktigt' på POP-servern." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Inga fler trådar." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Du ser den första tråden." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Trådning är inte aktiverad." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Tråden har olästa meddelanden." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Kan inte ändra meddelande på POP-servern." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tinfoga en rad som börjar med en ~\n" +"~b adresser\tlägg till adresser till Bcc-listan\n" +"~c adresser\tlägg till adresser till Cc-listan\n" +"~f meddelande\tbifoga meddelande\n" +"~F meddelande\tsom ~f, samt inkludera alla brevhuvuden\n" +"~h\t\tändra i brevhuvuden\n" +"~m meddelande\tinkludera och citera meddelande\n" +"~M meddelande\tsom ~m, samt inkludera alla brevhuvuden\n" +"~p\t\tskriv ut meddelandet\n" +"~q\t\tskriv ut meddelandet och avsluta\n" +"~r fil\tskicka en fil till editorn\n" +"~t adresser\tlägg till adresser till To-listan\n" +"~u\t\thämta föregående rad\n" +"~v\t\tändra i meddelande med editorn ($visual)\n" +"~w file\tskriv meddelande till fil\n" +"~x\t\tavbryt ändring och avsluta editorn\n" +"~?\t\tdet här meddelandet\n" +".\t\tensam på en rad avslutar inmatning\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: otillåtet meddelandenummer.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Avsluta meddelande med en '.' på en egen rad)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Ingen brevlåda.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Meddelande innehåller:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(fortsätt)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "saknar filnamn.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Ingen text i meddelande.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: okänt kommando i editorn (~? för hjälp)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "kunde inte skapa tillfällig katalog: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "kunde inte skapa tillfällig brevlåda: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "kunde inte skapa tillfällig brevlåda: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Filen för meddelandet är tom!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Meddelandet är inte ändrat!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Kan inte öppna meddelandefil: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "Kan inte lägga till brevlådan: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Fel. Sparar tillfällig fil: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "Sätt flagga" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Ta bort flagga" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- Fel : Kan inte visa någon del av 'Multipart/Alternative'! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Bilaga #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Typ: %s/%s, Kodning: %s, Storlek: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- Automatisk visning med %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Startar kommando för automatisk visning: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- Kan inte köra %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- Automatisk visning av standard fel gällande %s --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- Fel: 'message/external-body' har ingen parameter för åtkomst --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Den här %s/%s bilagan " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(storlek %s byte)" + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "har raderats --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- på %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- namn: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Den här %s/%s bilagan är inte inkluderad, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- och den angivna externa källan är --]\n" +"[-- utgången. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- och den angivna åtkomsttypen %s stöds inte --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Fel: 'multipart/signed' saknar protokoll." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Fel: 'multipart/encrypted' saknar parameter för protokoll!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Kunde inte öppna tillfällig fil!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s stöds inte " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(använd '%s' för att visa den här delen)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "('view-attachments' måste knytas till tangent!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: kan inte bifoga fil" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "FEL: var vänlig rapportera det här felet!" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<OKÄND>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"Allmänna knytningar:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"Oknutna funktioner:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "Hjälp för %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "'unhook': Kan inte göra 'unhook *'inifrån en 'hook'." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "'unhook': okänd sorts 'hook': %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "'unhook': Kan inte ta bort en %s inifrån en %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Ingen verifieringsmetod tillgänglig" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Verifierar (anonym)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonym verifiering misslyckades." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Verifierar (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "Verifiering med CRAM-MD5 misslyckades." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Verifierar (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "Verifiering med GSSAPI misslyckades." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN är inte aktiverad på den här servern." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Ansluter..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Anslutning misslyckades." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Verifierar (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "Verifiering med SASL misslyckades." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s är en ogiltig IMAP-sökväg" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Hämtar namnmängder..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Hämtar lista med brevlådor..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "Foldern saknas" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Skapa brevlåda: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Brevlådan måste ha ett namn." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Brevlådan har skapats." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Brevlådan har stängts." + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Fatalt fel. Meddelanderäknaren är inte synkroniserad!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Stänger förbindelse till %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "" +"Den här versionen av IMAP är uråldrig. Mutt fungerar inte tillsammans med " +"den." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "Säker förbindelse med TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "Kunde inte förhandla fram en TLS-förbindelse" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Väljer %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "Fel när brevlådan öppnades" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Kunde inte skriva till brevlådor i den här IMAP-servern" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "Skapa %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "Stänger förbindelse till IMAP-server..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "Märker %d meddelanden som slängda..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "Radering misslyckades" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Sparar statusflagga för meddelanden... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Tar bort meddelanden från server..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: EXPUNGE misslyckades" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE misslyckades." + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "Ogiltigt namn på brevlådan" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "Prenumerera på %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "Avslutar prenumeration på %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Kunde inte hämta brevhuvuden från den versionen av IMAP-servern." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "Kunde inte skapa tillfällig fil %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Hämtar brevhuvuden för meddelanden... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Hämtar meddelande..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Brevets index är fel. Försök att öppna brevlådan igen." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Skickar meddelande ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "Kopierar %d meddelanden till %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "Kopierar meddelande %d till %s...<" + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Fortsätt?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: ingen adress" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "ogiltigt fält i brevhuvud" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: okänd metod för sortering" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): fel i mönster: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: okänd variabel" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "prefix är inte tillåtet med 'reset'" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "värde är inte tillåtet med 'reset'" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s är satt" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s är inte satt" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: ogiltig typ av brevlåda" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: ogiltigt värde" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: okänd typ" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: okänd typ" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Kan inte ta status på %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s är inte en normal fil." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "Fel i %s, rad %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: fel i %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: läsningen avbruten pga för många fel i %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: fel vid %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: för många parametrar" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: okänt kommando" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Fel i kommandorad: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "kan inte avgöra var hemkatalogen är" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "kan inte avgöra användarnamn" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "Har upptäckt en oändlig slinga i ett macro." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Tangent är inte knuten." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Tangent är inte knuten. Tryck '%s' för hjälp." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: för många parametrar" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: meny saknas" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "tom sekvens av tangenttryckningar" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: för många parametrar" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: ingen sån funktion finns i tabellen" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: tom sekvens av tangenttryckningar" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: för många parametrar" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: parametrar saknas" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s: funktionen saknas" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "Ange nyckel-ID för %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "operation utan effekt" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "tvinga visning av bilagor med hjälp av 'mailcap'" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "visa bilaga som text" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Toggla visning av delar" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "flytta till slutet av sidan" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "återsänd ett meddelande till en annan användare" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "välj en ny fil i den här katalogen" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "visa fil" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "visa namnet på vald fil" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "prenumerera på vald brevlåda (endast IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "avsluta prenumereration på vald brevlåda (endast IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "toggla vy av all prenumererade brevlådor (endast IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Ingen brevlåda har nya brev." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "byt katalog" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "sök efter nya brev i brevlådorna" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "bifoga en eller flera filer till det här meddelandet" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "bifoga meddelande(n) till det här meddelandet" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "ändra i BCC-listan" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "ändra i CC-listan" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "ändra beskrivning av bilaga" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "ändra transportkodning för bilagan" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "ange filnamn att kopiera det här meddelandet till" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "ändra i filen som ska bifogas" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "ändra avsändarfältet" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "ändra i meddelandet, även brevhuvud" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "ändra i meddelandet" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "ändra i bilaga med hjälp av informationen i 'mailcap'" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "ändra fältet Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "ändra meddelandets ärende" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "ändra mottagares addresser" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "Skapa ny brevlåda (endast IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "ändra typ för bilaga" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "hämta en tillfällig kopia av en bilaga" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "låt 'ispell' kontrollera meddelandet stavning" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "skapa ny bilaga med hjälp av informationen i 'mailcap'" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "toggla omkodning av den här bilagan" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "spara meddelandet för att skicka det senare" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "byt namn på/flytta bifogad fil" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "skicka meddelandet" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "skifta status mellan integrerat och bifogat" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "toggla huruvida fil ska tas bort efter att den har sänts" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "uppdatera bilagans kodningsinformation" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "skriv meddelandet till en mapp" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "kopiera ett meddelande till en fil/brevlåda" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "skapa ett alias från ett meddelandes avsändare" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "flytta brev till slutet av skärmen" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "flytta brev till mitten av skärmen" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "flytta brev till början av skärmen" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "skapa avkodad kopia (text/plain)" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "skapa avkodad kopia (text/plain) och släng" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "släng bort aktivt meddelande" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "ta bort aktiv brevlåda (endast för IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "släng bort alla meddelanden i undertråd" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "släng bort alla meddelanden i tråd" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "visa fullständing avsändaradress" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "visa meddelande och toggla rensning av brevhuvud" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "visa ett meddelande" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "ändra i meddelandet" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "ta bort tecknet före markören" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "flytta markören ett tecken till vänster" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "flytta markören till början av ordet" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "gå till början av raden" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "rotera bland brevlådor" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "komplettera filnamn eller alias" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "komplettera adress med fråga" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "ta bort tecknet under markören" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "gå till radens slut" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "flytta markören ett tecken åt höger" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "flytta markören till slutet av ordet" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "rulla ner genom historielistan" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "rulla upp genom historielistan" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "ta bort tecknen mellan markören och radens slut" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "ta bort tecknen mellan markören och ordets slut" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "ta bort alla tecken på raden" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "ta bort ordet framför markören" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "skriv efterföljande tangentkombination i klartext" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "byt tecken under markören mot föregående tecken" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "skriv ordet med stor begynnelsebokstav" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "ändra ordet till gemener" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "ändra ordet till versaler" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "ge ett kommando med syntax som i muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "ge en mask för filnamn" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "avsluta menyn" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "filtrera bilagan genom ett skalkommando" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "gå till första meddelandet" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "toggla ett meddelandes flagga för betydelse" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "vidarebefordra ett meddelande med kommentarer" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "välj det aktiva meddelandet" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "svara till alla mottagare" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "rulla ner en halv sida" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "rulla upp en halv sida" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "den här skärmen" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "gå till index" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "gå till sista meddelandet" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "svara till angiven sändlista" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "kör ett makro" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "skapa ett nytt brev" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "öppna en annan brevlåda" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "öppna en annan brevlåda utan skrivåtkomst" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "rensa en statusflagga från ett meddelande" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "släng bort meddelanden som passar ett mönster" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "tvinga hämtning av brev från en IMAP-server" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "hämta brev från en POP-server" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "flytta till första meddelandet" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "flytta till sista meddelandet" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "visa endast meddelanden som passar ett mönster" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "hoppa till nästa nya meddelande" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "hoppa till nästa olästa meddelande" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "hoppa till nästa undertråd" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "hoppa till nästa tråd" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "hoppa till nästa icke slängda meddelande" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "hoppa till nästa olästa meddelande" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "gå till första meddelande i tråden" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "hoppa till föregående tråd" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "hoppa till föregående undertråd" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "hoppa till föregående icke borttagna meddelande" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "hoppa till föregående nya meddelande" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "hoppa till föregående olästa meddelande" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "hoppa till föregående olästa meddelande" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "märk aktiv tråd som läst" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "märk aktiv undertråd som läst" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "sätt en statusflagga för ett meddelande" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "spara ändringar i brevlåda" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "märk meddelanden som passar ett mönster" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "återställ meddelanden som passar ett mönster" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "avmarkera meddelanden som passar ett mönster" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "gå till mitten av sidan" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "gå till nästa brev" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "rulla ner en rad" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "gå till nästa sida" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "hoppa till slutet av meddelandet" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "toggla huruvida citerad text ska visas" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "hoppa över citerad text" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "hoppa till början av meddelandet" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "skicka meddelandet/bilagan till ett skalkommando" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "gå till föregående brev" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "rulla upp en rad" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "gå till föregående sida" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "skriv ut aktivt meddelande" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "fråga ett externt program efter adresser" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "lägg till resultat av ny fråga till aktivt resultat" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "spara ändringar till brevlåda och avsluta" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "återkalla ett uppskjutet meddelande" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "rensa och rita om skärmen" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{internt}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "svara på ett meddelande" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "använd aktivt meddelande som mall för ett nytt" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "spara meddelande/bilaga till fil" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "leta efter ett reguljärt uttryck" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "leta bakåt efter ett reguljärt uttryck" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "leta efter nästa passning" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "leta efter nästa passning i omvänd ordning" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "toggla färg på sökmönster" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "starta ett kommando i ett underskal" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "sortera meddelanden" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "sortera meddelanden i omvänd ordning" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "märk aktivt meddelande" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "använd nästa funktion på ett märkta meddelanden" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "använd nästa funktion på ett märkta meddelanden" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "märk aktiv undertråd" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "märk aktiv tråd" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "toggla 'ny' för ett meddelande" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "toggla huruvida en brevlåda ska skrivas om" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "välj om alla filer skall visas eller bara brevlådor" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "gå till början av sidan" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "ta inte bort det aktuella meddelandet" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "återställ all meddelanden i en tråd" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "återställ alla meddelanden i en undertråd" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "visa Mutts versionsnummer och datum" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "visa bilaga med hjälp av informationen i 'mailcap' om nödvändigt" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "visa MIME-bilagor" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "visa aktivt begränsande mönster" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "komprimera/expandera aktiv tråd" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "komprimera/expandera alla trådar" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "bifoga an öppen nyckel (PGP)" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "visa val för PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "skicka en öppen nyckel (PGP)" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "verifiera en öppen nyckel (PGP)" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "visa nyckelns användaridentitet" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "leta efter klassisk pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "Godkänn den konstruerade kedjan" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "Lägg till en 'remailer' till kedjan" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "Lägg in en 'remailer' i kedjan" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "Ta bort en 'remailer' från kedjan" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "Välj föregående brev i kedjan" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "Välj nästa brev i kedjan" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "skicka meddelandet genom en återpostarkedja (mixmaster)" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "skapa avkodad kopia och ta bort" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "skapa avkrypterad kopia" + +#: keymap_alldefs.h:196 +msgid "wipe passphrase(s) from memory" +msgstr "rensa lösenfrasen från minnet." + +#: keymap_alldefs.h:197 +msgid "extract supported public keys" +msgstr "extrahera stödda öppna nycklar" + +#: keymap_alldefs.h:198 +msgid "show S/MIME options" +msgstr "visa val för S/MIME" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Slut på minne!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"För att kontakta utvecklarna, var vänlig skicka ett brev till <mutt-dev@mutt." +"org>.\n" +"För att rapportera ett fel, var vänlig använd programmet flea(1).\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Upphovsrätt (C) 1996-2001 Michael R. Elkins med flera.\n" +"Mutt levereras HELT UTAN GARANTI; för detaljer kör `mutt -vv'.\n" +"Mutt är ett fritt program, och du är välkommen att sprida det vidare\n" +"under vissa villkor; kör `mutt -vv' för detaljer.\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Upphovsrätt (C) 1996-2001 Michael R. Elkins <me@cs.hmc.edu>\n" +"Upphovsrätt (C) 1996-2001 Brandon Long <blong@fiction.net>\n" +"Upphovsrätt (C) 1997-2001 Thomas Roessler <roessler@guug.de>\n" +"Upphovsrätt (C) 1998-2001 Werner Koch <wk@isil.d.shuttle.de>\n" +"Upphovsrätt (C) 1999-2001 Brendan Cully <brendan@kublai.com>\n" +"Upphovsrätt (C) 1999-2001 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"Upphovsrätt (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"Många ej nämnda personer har bidragit med kod, fixar och förslag.\n" +"\n" +" Följande text är en informell översättning som enbart tillhandahålls i\n" +" informativt syfte. För alla juridiska tolkningar gäller den engelska\n" +" originaltexten.\n" +"\n" +" Detta program är fri programvara. Du kan distribuera det och/eller\n" +" modifiera det under villkoren i GNU General Public License, publicerad\n" +" av Free Software Foundation, antingen version 2 eller (om du så vill)\n" +" någon senare version.\n" +"\n" +" Detta program distribueras i hopp om att det ska vara användbart, men\n" +" UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti om\n" +" SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU\n" +" General Public License för ytterligare information.\n" +" Du bör ha fått en kopia av GNU General Public License\n" +" tillsammans med detta program. Om inte, skriv till Free Software \n" +" Foundation,Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, " +"USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"användning: mutt [ -nRyzZ ] [ -e <kommando> ] [ -F <fil> ] [ -m <typ> ] [ -f " +"<fil> ]\n" +" mutt [ -nR ] [ -e <kommando> ] [ -F <fil> ] -Q <variabel> [ -Q " +"<variabel> ]\n" +" mutt [ -nx ] [ -e <kommando> ] [ -a <fil> ] [ -F <fil> ] [ -H " +"<fil> ] [\n" +" -i <fil> ] [ -s <ärende> ] [ -b <adress> ] [ -c <adress> ] " +"<adress> [ ... ]\n" +" mutt [ -n ] [ -e <kommando> ] [ -F <fil> ] -p\n" +" mutt -v[v]\n" +"\n" +"options:\n" +" -a <fil>\tbifoga en fil till meddelandet\n" +" -b <adress>\tange en adress för 'blind carbon-copy' (BCC)\n" +" -c <adress>\tange en adress för 'carbon-copy' (CC)\n" +" -e <kommando>\tange ett kommando att köra efter initiering\n" +" -f <fil>\tange en brevlåda att läsa\n" +" -F <fil>\tange en alternativ muttrc-fil\n" +" -H <fil>\tange en fil som mall att läsa brevhuvud från\n" +" -i <fil>\tange en fil som Mutt skall inkludera i svaret\n" +" -m <typ>\tange typen för den normala brevlådan\n" +" -n\t\thindrar Mutt att läsa systemets Muttrc\n" +" -p\t\tåterkalla ett uppskjutet meddelande\n" +" -Q <variabel>\tbegär värdet av en konfigurationsvariabel\n" +" -R\t\töppna brevlåda med endast läsmöjligheter\n" +" -s <ärende>\tange ett ärende (måste ha citationstecken om det innehåller " +"blanksteg)\n" +" -v\t\tvisa version och definitioner för kompileringen\n" +" -x\t\tsimulera mailx's sändläge\n" +" -y\t\tvälj en från listan med brevlådor\n" +" -z\t\tavsluta omedelbart om det inte finns några nya meddelanden i " +"brevlådan\n" +" -Z\t\töppna den första brevlådan med ett nytt meddelande, avsluta " +"omedelbart om inget nytt finns\n" +" -h\t\tvisa den här hjälptexten" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Inkompilerade val:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Fel vid initiering av terminalen." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "Avlusningsnivån är %d.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG var inte valt vid kompilering. Ignoreras.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s finns inte. Vill du skapa den?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "Kan inte skapa %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Inga mottagare angivna.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: kan inte bifoga fil.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Ingen brevlåda har nya brev." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Inga brevlådor för inkommande post är definierade." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Brevlådan är tom." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "Läser %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Brevlådan är trasig!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Brevlådan skadades!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Fatalt fel! Kunde inte återöppna brevlåda!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Kan inte låsa brevlåda!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" +"sync: mbox är ändrad, men inga meddelanden är ändrade. [Var vänlig " +"rapportera det här felet]." + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Skriver meddelanden... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "Skriver ändringar..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Skrivning misslyckades! Sparade del av brevlåda i %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Kunde inte återöppna brevlådan!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Återöppnar brevlådan..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Hoppa till: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Ogiltigt index." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Inga brev." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Du kan inte rulla längre ner." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Du kan inte rulla längre upp." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Du är på sista sidan." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Du är på första sidan." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Första meddelandet visas." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "Sista meddelandet visas." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Du är på sista meddelandet." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Du är på första meddelandet." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Leta efter: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Leta efter i omvänd ordning: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Inget mönster för sökning." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Hittades inte." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Inga märkta brev." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Sökning kan inte göras från den här menyn." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Hopp stöds inte för dialoger." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Märkning stöds inte." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "Läser %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Filen är en katalog, spar i den?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Filen är en katalog, spar i den?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Fil i katalog: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Filen finns, skriv (ö)ver, (l)ägg till, eller (a)vbryt?" + +#: muttlib.c:869 +msgid "oac" +msgstr "öla" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Kan inte spara meddelandet till POP-brevlådan." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s är inte en brevlåda!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Lägg till meddelanden till %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "Anslutning till %s stängd." + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL finns inte." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Kommandot preconnect misslyckades." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "Ett fel uppstod med förbindelsen till %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "Slår upp %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Kunde inte hitta servern \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "Ansluter till %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "Kunde inte öppna förbindelse med %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "Kunde inte hitta tillräckligt bra slumptal" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "Fyller på i slumptalsreserven: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "Rättigheterna för %s är inte säkra!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL avstängd på grund av brist på bra slumptal" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "I/O-fel" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ospecificerat protokollfel" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "SSL misslyckades: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "Kan inte hämta certifikat från 'peer'" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "Ansluter (SSL) med hjälp av %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Okänd" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[kan inte beräkna]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ogiltigt datum]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Certifikatet är inte giltigt än" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Certifikatet är inte längre giltigt" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Certifikatet tillhör:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Certifikatet utfärdat av:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Certifikatet är giltigt" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " från %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " till %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Fingeravtryck: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "Kontroll av SSL-certifikat" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(f)örkasta, (g)odkänn den här gången, godkänn (v)arje gång" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "fgv" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(f)örkasta, (g)odkänn den här gången" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "fg" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Avsluta " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Varning: kunde inte spara certifikat" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Certifikat sparat" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Antal låsningar är för många, ta bort låsning av %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "Kan inte köra 'dotlock' på %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "Tiden löpte ut när låsning med 'fcntl' provades!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Väntar på lås (fcntl)... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "Tiden löpte ut när låsning med 'flock' provades!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Väntar på låsningsförsök (flock)... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "Kunde inte låsa %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "Läser %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "Skriver %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Kunde inte synkronisera brevlådan %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Flytta lästa meddelanden till %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Rensa %d slängt meddelande?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Rensa %d slängda meddelanden?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Flyttar lästa meddelanden till %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "Brevlådan är oförändrad." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d behölls, %d flyttades, %d slängdes." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d behölls, %d slängdes." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Tryck '%s' för att toggla skrivning" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "Använd 'toggle-write' för att ge åtkomst för skrivning!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "Brevlådan är märkt som ej skrivbar. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Brevlådan är synkroniserad." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Kan inte skriva meddelandet" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Finns inte i den här menyn." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "Föreg. sida" + +#: pager.c:1447 +msgid "NextPg" +msgstr "Nästa sida" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Visa bilaga" + +#: pager.c:1454 +msgid "Next" +msgstr "Nästa" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Slutet av meddelande visas." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Början av meddelande visas." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Sök i omvänd ordning: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Sök: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Hjälp visas just nu." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "ingen mer citerad text." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "Ingen mer ociterad text efter citerad text." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "Avgränsande parameter saknas för flerpartsmeddelande!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Fel i uttryck: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Ogiltig dag i månaden: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Ogiltig månad: %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Ogiltigt relativt datum: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "fel i uttryck" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "fel i mönster vid: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: ogiltigt kommando" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c: stöds inte i det här läget" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "parameter saknas" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "parentes kan inte paras ihop: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "tomt mönster" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "fel: okänd operation %d (var vänlig rappportera felet)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Kompilerar sökmönster..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "Kör kommando på passande meddelanden..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Inga meddelanden passade kriteriet." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "Sökningen nådde slutet utan att hitta något" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "Sökningen nådde början utan att hitta något" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Sökningen avbröts." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "Har glömt lösenfras för PGP." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Fel: kunde inte starta PGP-process! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- Slut på utdata från PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- MEDDELANDE KRYPTERAT MED PGP BÖRJAR --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- BLOCK MED PGP-NYCKEL BÖRJAR --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- MEDDELANDE SIGNERAT MED PGP BÖRJAR --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- SLUT PÅ MEDDELANDE KRYPTERAT MED PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- SLUT PÅ BLOCK MED PGP-NYCKEL --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- SLUT PÅ MEDDELANDE SIGNERAT MED PGP --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Fel: kunde inte hitta början av PGP-meddelande! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Internt fel. Informera <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Fel: kunde inte starta PGP-process! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Fel: missformat PGP/MIME-meddelande! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Fel: kunde inte skapa tillfällig fil! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Följande data är krypterad enligt PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- Slut på data krypterad enligt PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "Kan inte starta PGP-process!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "Använd nyckel med ID = \"%s\" för %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "Ange nyckel-ID för %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "Kan inte starta PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "Hämtar nyckel för PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Alla passande nycklar är markerade som utgångna/återkallade." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Välj " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Kontrollera nyckel " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP-nycklar som passar <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP-nycklar som passar \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "Kan inte öppna /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Kan inte skapa tillfällig fil" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Nyckel-ID: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Den här nyckeln kan inte användas: utgången/spärrad/återkallad." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID:t är utgånget/spärrat/återkallat." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ID:t har odefinierad giltighet." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID:t är inte giltigt." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID:t är endast marginellt betrott." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Vill du verkligen använda nyckeln?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Ange nyckel-ID: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Startar PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP-nyckel %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "Letar efter nycklar som passar \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "Kommandot TOP stöds inte av servern." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Kan inte skriva brevhuvud till den tillfälliga filen!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "Kommandot UIDL stöds inte av servern." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s är en ogilitig POP-sökväg" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Hämtar lista över meddelanden..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "Kan inte skriva meddelande till den tillfälliga filen!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Söker efter nya brev..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "Server för POP är inte angiven." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "Inga nya brev i brevlådan på POP-servern." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Ta bort meddelanden från server?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Läser nya meddelanden (%d byte)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Fel när brevlådan skrevs!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d utav %d meddelanden lästa]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Servern stängde förbindelsen!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Verifierar (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Verifierar (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "Verifiering med APOP misslyckades." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Kommandot USER stöds inte av servern." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Kunde inte lämna meddelanden på server." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "Ett fel uppstod när förbindelse till servern %s försöktes." + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "Stänger förbindelse till POP-servern..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Verifierar meddelandeindex..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Förbindelse tappades. Kontakta POP-servern igen?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Uppskjutna meddelanden" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Inga uppskjutna meddelanden." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Otillåtet brevhuvud för PGP" + +#: postpone.c:479 +msgid "Illegal S/MIME header" +msgstr "Otillåtet brevhuvud för S/MIME" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Anslutning misslyckades." + +#: query.c:46 +msgid "New Query" +msgstr "Ny sökning" + +#: query.c:47 +msgid "Make Alias" +msgstr "Skapa alias" + +#: query.c:48 +msgid "Search" +msgstr "Sök" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Väntar på svar..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Sökkommando är inte definierat." + +#: query.c:286 +msgid "Query" +msgstr "Sökning" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Sökning: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Sökning '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Rör" + +#: recvattach.c:53 +msgid "Print" +msgstr "Skriv ut" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Sparar..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Bilaga sparad." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "VARNING! Du kommer att skriva över %s. Fortsätt?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Bilaga filtrerad." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtrera genom: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Skicka genom rör till: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "Vet inte hur en bilaga av typ %s ska skrivas ut!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Skriv ut märkta bilagor?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Skriv ut bilaga?" + +#: recvattach.c:938 +msgid "Can't decrypt encrypted message!" +msgstr "Kan inte avkryptera de krypterade meddelandena." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Bilagor" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Det finns inga delar att visa!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Kan inte ta bort meddelanden från POP-servern." + +#: recvattach.c:1056 +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "Stöd saknas att ta bort bilagor från krypterade meddelanden." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Endast multipart-bilagor kan tas bort." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Du kan bara återsända 'message/rfc822 parts'" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Fel när meddelande sändes." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Fel när meddelande sändes." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Kan inte skapa tillfällig fil %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Vidarebefordra som bilagor?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Kan inte avkoda alla märkta bilagor. Vidarebefordra övriga som MIME-bilagor?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Vidarebefordra som MIME-bilaga?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "Kan inte skapa %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Kan inte hitta några märkta meddelanden." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Inga sändlistor hittades!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "Kan inte avkoda alla märkta bilagor. 'MIME-encapsulate' de övriga?" + +#: remailer.c:480 +msgid "Append" +msgstr "Skicka" + +#: remailer.c:481 +msgid "Insert" +msgstr "Lägg in" + +#: remailer.c:482 +msgid "Delete" +msgstr "Ta bort" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "Kan inte hämta mixmasters type2.list!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "Välj en återpostarkedja." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "Fel: %s kan inte användas som en kedjas sista återpostare." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster-kedjor kan bara ha %d länkar." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "Återpostarkedjan är redan tom." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "Det har redan valt den första länken i kedjan." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "Det har redan valt den sista länken i kedjan." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster accepterar inte Cc eller Bcc i brevhuvudet." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"Sätt variabeln 'hostname' till ett passande värde vid användande av " +"mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Fel vid sändning av meddelande, delprocess returnerade %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Fel när meddelande sändes." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "Felaktigt formatterad del för type %s i \"%s\", rad %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "Ingen 'mailcap' angiven" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "Hittade ingen beskrivning av %s i 'mailcap'" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: för få parametrar" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: för många parametrar" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Inget ärende, avbryt?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Inget ärende, avbryter." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Svara till %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "Svara till %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Inga märkta meddelanden syns!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Citera meddelande i svar?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Inkluderar citerat meddelande..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Kunde inte inkludera alla begärda meddelanden!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Vidarebefordra som bilaga?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Förbereder vidarebefordrat meddelande..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Återkalla uppskjutet meddelande?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Förbereder vidarebefordrat meddelande..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Meddelandet har inte ändrats. Avbryt?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Meddelandet har inte ändrats. Avbröt." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "Brevet skickades inte." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Meddelande uppskjutet." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Inga mottagare angivna!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Inga mottagare angavs." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Ärende saknas, avbryt sändning?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Ärende saknas." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Skickar meddelande..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Kunde inte skicka meddelandet." + +#: send.c:1672 +msgid "Mail sent." +msgstr "Brevet har skickats." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Skickar i bakgrunden." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Ingen begränsningsparameter funnen! [Rapportera det här felet]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s finns inte längre!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s är inte en normal fil." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "Kunde inte öppna %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Fel vid sändning av meddelande, delprocess returnerade %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Utdata från sändprogrammet" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Avslutar.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "Fångade %s... Avslutar.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Fångade signal %d... Avslutar.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "Betrodd " + +#: smime.c:303 +msgid "Verified " +msgstr "Verifierad " + +#: smime.c:306 +msgid "Unverified" +msgstr "Overifierad " + +#: smime.c:309 +msgid "Expired " +msgstr "Utgången " + +#: smime.c:312 +msgid "Revoked " +msgstr "Återkallad " + +#: smime.c:315 +msgid "Invalid " +msgstr "Ogiltig " + +#: smime.c:318 +msgid "Unknown " +msgstr "Okänd " + +#: smime.c:347 +msgid "Enter keyID: " +msgstr "Ange nyckel-ID: " + +#: smime.c:370 +#, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "S/MIME-nycklar som passar \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "ID %s är overifierad. Vill du använda det till %s?" + +#: smime.c:523 smime.c:592 +#, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "Använd ID (som vi inte litar på) %s till %s?" + +#: smime.c:526 smime.c:595 +#, c-format +msgid "Use ID %s for %s ?" +msgstr "Använd ID %s till %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" +"Varning: du har ännu inte valt att lita på ID %s. (forstätt med valfri " +"tangent)" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "Inga (giltiga) certifikat hittades för %s." + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "Fel: kunde inte skapa S/MIME-process!" + +#: smime.c:1197 +msgid "no certfile" +msgstr "ingen certifikatfil" + +#: smime.c:1200 +msgid "no mbox" +msgstr "ingen mbox" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "Inget resultat från OpenSSL..." + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "Varning: temporärt certifikat kunde inte hittas." + +#: smime.c:1426 +msgid "Can't open OpenSSL subprocess!" +msgstr "Kan inte starta S/MIME-process!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "Inget resultat från OpenSSL..." + +#: smime.c:1629 smime.c:1751 +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- Slut på utdata från S/MIME --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Fel: kunde inte starta S/MIME-process! --]\n" + +#: smime.c:1755 +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Följande data är krypterad enligt S/MIME --]\n" +"\n" + +#: smime.c:1758 +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Följande data är signerat enlift S/MIME --]\n" +"\n" + +#: smime.c:1822 +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- Slut på data krypterad enligt S/MIME --]\n" + +#: smime.c:1824 +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Slut på signerat data enligt S/MIME --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Sorterar brevlåda..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "" +"Kunde inte hitta sorteringsfunktion! [Var vänlig rapportera det här felet]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(ingen brevlåda)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "Första meddelandet är inte synligt med begränsad vy" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Första meddelandet är inte tillgängligt." + +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Startar OpenSSL..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Återsänd meddelande till %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Återsänd meddelanden till %s...?" + +#~ msgid "ewsabf" +#~ msgstr "ksobi" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Certifikat sparat" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Förtroendenivån för det här ID'et är odefinierat." + +#~ msgid "Decode-save" +#~ msgstr "Avkoda och spara" + +#~ msgid "Decode-copy" +#~ msgstr "Avkoda och kopiera" + +#~ msgid "Decrypt-save" +#~ msgstr "Avkryptera och spara" + +#~ msgid "Decrypt-copy" +#~ msgstr "Avkryptera och kopiera" + +#~ msgid "Copy" +#~ msgstr "Kopiera" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- Slut på utdata från PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Kan inte ta status på filen %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: kommandot saknas" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Metod för verifiering är okänd." + +#~ msgid "MIC algorithm: " +#~ msgstr "MIC-algoritm: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Det här saknar relevans om du inte vill signera meddelandet." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "" +#~ "Okänd MIC-algoritm, följande är kända: pgp-md5, pgp-sha1 och pgp-rmd160" + +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "SHA1 implementering, upphovsrätt (C) 1995-1997 Eric A. Young " +#~ "<eay@cryptsoft.com>\n" +#~ "\n" +#~ " Följande text är en informell översättning som enbart tillhandahålls " +#~ "i\n" +#~ " informativt syfte. För alla juridiska tolkningar gäller den engelska\n" +#~ " originaltexten.\n" +#~ "\n" +#~ " Spridning och användning av källkod och binära former, med eller " +#~ "utan\n" +#~ " modifieringar, är tillåtna under vissa villkor.\n" +#~ "\n" +#~ " Implementeringen av SHA1 distribueras i hopp om att det ska vara \n" +#~ " användbart, men UTAN NÅGON SOM HELST GARANTI, även utan " +#~ "underförstådd \n" +#~ " garanti om SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL.\n" +#~ "\n" +#~ " Du skall ha fått en kopia av de fullständiga villkoren för " +#~ "distribution\n" +#~ " tillsammans med programmet; om inte, skriv till programmets " +#~ "utvecklare.\n" + +#~ msgid "POP Username: " +#~ msgstr "Användarnamn för POP: " + +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "Läser nytt meddelande (%d byte)..." + +#~ msgid "Error reading message!" +#~ msgstr "Fel när meddelande lästes!" + +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d meddelanden lästa]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "Skapande av brevlådor stöds inte än." + +#~ msgid "IMAP Username: " +#~ msgstr "Användarnamn för IMAP: " + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "Ange CRAM-nyckel för %s@%s: " + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "Hoppar över verifiering med CRAM-MD5." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "Öppnar brevlåda en gång till... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "Stänger brevlåda..." diff --git a/po/tr.gmo b/po/tr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..440b4b91e627adb5f15057d92a9eef7bea1b7f64 GIT binary patch literal 55890 zcmb`Q2b^71wf_%AAVZN3Qcr*(8OY2ep$8<S5r$M!C?evWnL9I=nYnkkC1C;v1q)V` zq9Q7y*s&mX><E^p&-(0wzNg0W)Y!0P^8Vl7T6>>+?#zVe`+WZQlQX}w``&A>z4qE` z@3ZsR!F%4B@OyOkBsm6Ld3cgMxJQ!QFh{;ga?!a-auC=9wt-g$90>l`f=A<jGk6$y z52$z_0`~?#10Di?5j+n35qK#0&)`1rJTJE!Y{!2kcp_K@j{;u}9t}PK9t(aIJO=y? zNL7=4p6>Y_AMkW=2L3(ZzTo=ce>Hd@?mBop_yTYi_*U>p@T;KO`3q3(_*-xvaK4wH zf=YiLcrdsMRJ><{PXjlBs^=>~wfBCo1N;oAcKjMt`ll@P`W_CRiu+Vh^}Gz+59|Yv z0LQ@D;4PriJpiiRp92p79|zUW-v#^|sPcEefHJ`2K-KFcQ2ytGivJ8y<@AH<r)xp= z(+yw>J|El*d@CsW-VdGtJ`Ad!zW|lrA3^ow0gIe&CxQw;0~9?MfvWE_K(&8!@V^Z_ z7WcbB<?|&_`TQId-TncJt_Ljk@RLB*_X6;Ea22ThMnSdj7EttgGpKwX4ERM*`TZDF zIe!Sa|B@u(HR%9F-w|*ocqgd*KLRSh?}Ezjm!Qg<0F}>?OTGT5gD2o#2Z~M&Q2hHc zQ00CAJQ;ix6disGD!;a6NpcE!Jg9!Y7(5Q_1;u~Q1LuLagG&Dhn1cTeJ_X$WLhrXj zK+*d+Q2Cz%DtvheUj?eZmxCvPb?`*+E>L{`Nl@+odB6jfJAa%7D%~Pb?YIgQA72Zq zzITW42SMfgHBfx@=it8+RDF)R$n!Z16g}62>i2$7^tuU5!Mniu;KxCu6R7gqdYrze zgQCl2p!&N6s(v?v>bHAB_-8@!^S8iL!N)+A+jeo1oDLohs{U)iJ-{JwFK`4@{2Hk8 z?*Y}{p8)p;zYD6~j|ZFx{ztEHK0Ogszn%lCA6J9o|4~r+ybx5m_kzm*W1!mq9Z>ZB zEvR<wwlYcPfJcL~!HYn}yB1V_w}6UwFQ|MT0!9DtfoFgdpwgYTDoOSPp9!jc1yJdR zz&7wEP;`4acry6DfZqXU;hq3b1>0A9{VoAjUJ(@k+!XxZ2JVad<KSHI(GdPuQ1w1~ zjnjWV_*C3WK#lA5pyX!>RJ<EN(dTxs3w$>ydjBAV{|!{Sr>=GWZU@!AQ$dwK7Zlyk z12ulH1VxAIL6vhKDEfQ^6disGihuUL#OZS)DEgiPiqDpSDsLmGdJPBvn?a?&6MQQ8 zK2Y`iba4L|JP7x1!5QHHfTHJ&buPc=feJq#l>b^#^}Y@i|GWkio$m*g{!5_R@hxzF za7Vzl_1=F+f(PQi0PF@=fTGLw-~r%sLG|~opxX1g;QxM5={_Cs>);`{e+sI8e*sf) z?+u=AcEIyNwSNP6C|Cy7e>a0E_&QK@eh5_ge*o1V$wnW?DX97^0d1Uss_!VM`c%P# z!J9$R;nkq>e-Jzj{4%KUpMawOpFpMC<5I8pp`iNXWKjM~LB-z)il2u-)&CAq@!kuH z&R+qQ-*-UO?-!ur{Q*?{_Pxyc<Umk-a|AdSJPj28^@FPK7^rr=JmCGH>iut^(HB&{ ze*yOcpL)5|>lje!*MSPJfJcBY2IqtKf-3jhpz6IHRQnFN!u^j2RsVCr!@(6`JJ<^< z-&??^fo}zkUqR93$Dr!B9h98f>lyAp6O{ky!F@5Pe!L1)JDvlooL7bLcYufDeh5@O zzYdCy{|)XA{uMkO{0FFZcV8LCD=2w#B`AKmG5Eg%6kXo~iVhzO_zm!BxPJwn1n%)n z$JyYKxL1KGH~^|XF9JoE*MsWE`$6&d1EBi-VNm&f6}$-C2C7|iuW~vp2am%23{d^r z0FMFh03}x+05#u!6jZ*S0@aSMgGYmpgUauppvpP;S)Sh<(B^4SbXpbsF9$W>)Iinu z`VjtHP~-olp!)qTP;_}0DE;GepvwC>sB(6@+Ua*RC_2mnRo;1^>bDqVsz@#g;co<$ z?}Oku;O9Z*w-Xc}9QAB(_gql@zY0|S3ZUpQ04m>`LCq((fuirnK+)-8Q2qX8Q0c!5 zO0N9|RDBOEIGwt{eQ+-WRsL#F>8}a?*MjQLEuhMO2`KvB3W}fK1|A1~3>05|4^;j; zK;?UQuctpARQhgE^*kLEea{Ck0#}0bz&k<Z`vp+>{s0s`{|<`&2lP4roeZj+6`<%* z1UtZ+z*E5c!3E%VLB%_`-|IaGRK82Vv%y|a>F)*=@1x-H;5R|l=Z|0to>cVkW#Aa@ zt3mPU*FlYg-++q0=YZGuOz<GwE5I|stH2Y%J3zJLqoC^Xb?_<R??Kh$FQEAG;6aaf z6exPn2UWiwQ2fyco(ztID*sKO_~~OI{L7&7`w1vIPk@qZ`wn@&=YuEUz7#wi90x_W z_k!Y^?}N(s7ogJr52*6@FS$IM1**NvK=IAy;D0+Px;y}?{I3M}uY!BeYdoKspy+%q zcr17&sD2&?XMwK(JHQWvqT^3MmH$Uj{ITD#)9-jt<(&_z9#?>(a|2ZS?gB->Pk=MQ zZ-I*U7w|&xpb;N`mxJo3+rZPnFM)Hxi4fj3>U!c3xETLCL4|)06kTVOy&mU*b8ue< zc7o3bMc)sAYR5M40Pybt_o;Y)9sw%66Fe1M2#QaJ!4$k1RQ>M*)h~~N8rP45qQ{>= z@x@*+r|5nRsP>-&s=dzyMepl^|7$_z^H2!?HYhr754i8O&JQPp;?qk4j)85sZv|8E zbznRA5UBq8Y4G2->i%;;rC$f`30@1TewzZ`4yL%@4~h@I0jmFh52_!IsChe9fa3Qu zn1XkLs{e<B|JMRO0nWhx*t*km7O3*i0Z#!h2UY&fpy=`@P;~tSD86|NJP6#q;p6F0 zQ2o#z+)oFUel>UqI2`<M1Xcf6f`@|d1yk^0aDVV;pz{4A*ahyn$@%g$Q2AU8s+?zm zk_Vf>r-C<t;+L0!qVL_{Z19ob{vD`(J#w?t`)u$q+|L44k2<LKzZg6Md<U3<p8?h1 zKMnpnK+)mQ>m1JnMW4$-wYLr`{;R+v!23a!`*|=0e+G(vPZ{^}IzWxrivsq7s@Dym z;@t+S-5&;3zb}L0*I$9kcfT!O-W>2?+{;1H?-`)V9|4u_`2pVos=l8CMW@F=_4hv4 z`*=JJ6#qOMRJs>|%I9t1)4)%GhlAe(j|6`YD&9Ufxc@9r^*<j}JvV?yftx|4zYSFW z_k%}+-vZUozXx{*k9&^y<4jQPm>b-S!98$a0;)b6LDhd0RQ+EQ{67b(UOxa&0{;Z6 z{3EwI{Z9jr!My<#y{-k7-}6Dy^Y!4d;3q)U=Lew5{V}Ne{}fdGe}XA^$c@eir-Mp= zDX8){fr@`CDE@k9z)yiH_gevf0g6t42SvAIp6haLKB)eG7O4Dg0uKc529E>p2NnO{ zK>7a^lzjPPz$2gM<LP`*@mGR24nfuDMsOZ@2PpbH3TnLk6jZ)#H+lV2Q2o6C+!wqA zRK2bOMW^S1bHRH+$@8y+-QWbM{_DKi+q)1v0rxsk^lt?BZQ${^KLn~C{{c!4YzNh^ zJHgYyj^{hwuL{@zCBI${s(!BlRiF2Qdw^d7+rY1bmEDu%hu~?up=Z3v^SSXBPyd>L z_kyC+yTOydFN3P*??KUbzZZLc$AY5YY*67(2Su-EfHT1{Q2E>jioOp7{4Y@LI_xDb zw@(CB?-iiv)(fhCZUr?i-U2G0PlGD|u@L@ya6jC8ywvG?Ab1My6F|{v6)1jr9w<J0 z9VmW%Prye&^}~-r@n`Zfug6iK+A|MS{MEsK095;)1D+1v4l3RkLFNB*Q1$*B*a7bM za_5sXLHRER<$ozCK6x&v_B;Td2!0OSAN&QlANc2hyS>84*8!m9d^f21?hH`rt^)T0 zp9dZQ-U6y$UIXp}-VdhWhrm6-?||a3AA+jS6JQ&d-s<f+6%;)#0#)x`P~n?E_0#h} zrGG6b`aT%^zY^U41*+e6fa3cjU+L{S1yp`#gG#p&R6UEJ_-qR(dfx+ze?9^p2!0<_ zxxWTQ|J`2Y>5c$Zk2wLCgO}s(1vUO30%wCi1y!H6+dSRL0nY{1&b6TW@tS}y0+sGQ zQ1$#OsQi8b9t7@pyUXq4K#kXBptS=OUu*$2{@xeDzZ$}S3!aAm?svGHKNFPvFM^`) z%Ru$}Ye2R0K2Y`gIJh_XUGS;k<DlC8d$1d9yVJ+b0<a7BASnM=gW{7%LGi)wK;`#W z@KEs3SGykD0j9Y70zMy9z1|9{y<Y*vXODqu*Y2-zOhM&yKB)Sv2af>Dpy>TVuoHYU zC^~)})Oh<9D7x?WTIbi3LHVBnD!<D?_5UcS@^1}zFL);I2f@R^UxN$5-R^Sx%py?o zZgarv!P9Zy2&$hx2&!J+21U>9pxW~{P~{!|I`=;tJPh{*py+ogD7tM8csKYo+#dy1 z-*1A-e;ardxcA-8FDHO1?;>z1*bgoM-w8^d{R~vPJzgK=ASgPo07d@_sQ!F4DE@l{ zRQrAdN)G%URQ$hys_)a@;N^FNr{cai;3jYm?l*&?^Vh&5!9Rj($G&g$^4dYsdnLFp z_$=@&@ETC{cr$n$_zh6}v>iME{5yCAxX(Qvo`T2VUKsG1pvKcUsPf+os@z9F(d%(g z`TYZw9NXhfJ|5aYg&zh=KFkH@fg3^5{YBt8;Ojw^_Z?8}{1YfSm)`5~+CkNC0eCdH z4pjTg;DO+aK$Y`aP;`6{JRbZKC_eiYD7l=x+39`&cm~cxLDl18P;|Q*oDW_Lsy_FD zD)+OX^7}rhasGGk0&vf__`I<URJoUflE-CGbbT#27koP?x_l2*d5?n!gMS8(1^2$s z%V`JIuBU^l_ocyq6jc5%0G0pUpxXNgsPsPp)jvByrJway55E9ZJFW!J1Fr+s&JTgg z=L-S<0E%CZew*{rEbu9~SA&vQ8v^!&hv2S*s{bvZ>UB4$d>;VS9}k0S|F=QK`!7)K zc>+}W{on5KXM&P1r-3uULcp6rrGG1^d_M?Eu09GX|8Ie+-_O7q;IBc^;m_bg@ZfiN zKdl4B?^l7M!wsO?eHW;DJPfMb?}8_Se-Hl0zSHeQ^T3nvzXlZF-3p5C?*<oukAiB~ zZtwE`I}#K<=7R0ug`nCo0xI71U<%#_iVq$H#a~|x_!Cg={TrzIwY}TRKMqv+OF)gg zt3jn32Rp!5fr|eSsPexS+&>3Z?%zS>d*J;}mlMD}ad(0};CxX1bOR`Q-3p!sz86%w zUj+ZZfujEr?{Rw04!8_dIlZ9jHx8!Y?V#xOK~U+w2CAMv0rvy{45}Wxz1Qiq7q}1Z z!$9@dao`2uxuEjD0TkVC2i5L(fEt(I1XJ*jpwb`mJ|Az#fTGihpy+ZgsQ$hrU=8fT zeP_VWgL~ut6L<jlPcQ}B-tXh%RB#X6XMvU<sCbuvqSLcMjlU`=zIiD)2Yf#${`@g` zAox#E_1NzL=i@F={d+n%2(AU&z>k9Jmxn=(-|v7ac*qBw&ZmQ?;$97ku3Nypz*m5? z!8<{f_bE{A{2KUFa3`pC9Ppr*e=w-@M}ng39PnW9Qt%+K1Zuop4~pK;1C{>X;Qv-o z`Mw)e`454j`{zK>=?CD+;C4{;I^u&)rwc&w!4;s&832|3I#BuD82oPq`*Gh3iZA#2 zkn_j+py+xfDE=4+Q}C6b=>7mG{(B5O1pGUA0=WN&eSFRZm*Bn>+#h@$D7wD`RK5>_ zXM*1V#gF@Z#M{*lD&MDr=Yp4mqRSni`u~IA9pG0%$${RFdjH-6D!=<c(f5bozToe` zZtx#q3ZC*Y&u;~IB<^8Qba_6g@%d6v^?VojH1I=U3Vsb#dD}s?_wbLqzIqDSiThdL z5#Y<fqrm$>rT;W2KK?#<Huy_W>1RIVbT|W4|E&i_uPvbH^(j#4zXGbiei7VHfTG8N zpYU{ZLG|xt0ZRd|5BTzc_XK<(;KSfd()|ahcKsDR6g>8m?w$|M#eF%b{(3Q}`n(-f zeLf3{-@XAJ1O5X%3OwRdUa$G!iMX!-j|QI;{O<yf!~GfX67X?Q{WI^=uCEk8@z>qp zDc~1D)#Fc~$~);ZtSP`%pu%qlHU2&Y9uEE%oCogtSs%Y=f(q{iMW<JR>W{a88owV1 z_;A2)gG&E%Q1w3Ib3V>a3)lmypRWeRXPZIg_YzS3dKV~ucn>Ig{SZvSzks6C;SYPh zr-7>P8t`~<Am9tZV{yL?JPZ6hsB}Am|I<G2<(&nJZWn^0=O%C#cqb^jd=eDBei_0K zdc^00x!_Fv&j6M0Wnc={L6v(asQNz$if%sz)s6!n_5M8t6kV2qYJUNgT&sgh|3+{I z_=ynyD5&~<KZO4+;Nf5J{7wf|pEaQBeJywx_<B(M_yJJme*si|e;V9710MNB=g0Y= z%3lnMuFnQl&&{Cfb33Sf-T-PGek6o%2gL{beaX`u3+{#cbWrU(7gYbQ22TR70%wCa zf#-nl2379QLCqI?eA)Bs233y>z!SmCK=H@*pz3iesCK>+6kmQCR6V`{D&Btv_Y<Jn zvG>1ux)VXAdpekc>p}5j9Ta_D1}gnKLDBD%pyb>)LDlm&py)m0D;|C-DE_+uJOz9< zcry6X5dHyBboc@&x%2~2_4y^JeE0mS_v5jk+-HMo-z5Qu1HK^OJ)r9MF;H~<DkypK zqu~DU;QlA5cJBM{jx#~g^DI#HUk!?GW1#AH6R7sx2`c{wL5+_ufKLJc3aXq5aDQ<B zuX((q!98$ygDUSdQ1s{lB?n5N%Do#Doj(AIPG1H)z`uZVz~jH}{wqP{vl$c}UJi<$ zZwECF{vF&M{4J<*w}UD8XRs4I>>Iu=UjoYiI&c<v7bv=a7F0cc462;JfNKA~-}HJO z2ddxC0M(9*LB+oY6d&FMicW6>MW@e$2Y}xT{@Xysf6BK!|6@U=I}KDlE(4YSjUoIF zQ1p2hsP=vqya4=Ra3Aw+mm_C_%C`ur9nT5wyTE;LKLDznkAtGuW8gCIDgWVgSphD^ zJr1hAp8^j8zY2=3kAup0C#Z3H)OVbI3&F#1KO1~1xCuNTd?9!i_z0-<6QJmF%y&Ki z1z<bw9`FdT0`3XE2o(Rk4EzWk`8sen+;8Ri3@>lPZxwhdZqfg7o=bW3tK(k)Ukna_ zSAl=$c?-`d>6U@|{oWyYHuxg^KOX$)n&fQU_w($-a{&GuL)bw9mGmj$UG&m#BXLjn z*JL&CZwc=Q^8QTXUeB`xziV)RhxcQ6Uc-C*jfM9w;QyaIm-4)Vz?D2(d4B|4$n#sC z`M4hiujN_Cqu=#B$A>)LN%#iyWxVhnf1l%Jx19TVyq|{OO(EU4<qq#Z3i19z_{(^I z0nY%>PjGh==hY$nb+})`Q{wp`kA9c%ydvbYH~1!b@_RYYYeTv(1w0Vk&a;{4dBlAq zar$@;3h8g+eS~K-?gv2e)fb7|$MZt`{(*Y|@6P~N@yy`q!2Jy{|GSj9e+?e*COrPc z=lX5q`6d2C;0HtaJ4o{)-VeqP(UH6k_c^#P<h{tdewyd*=Sgud<@pTn3yE`7$V2m( zevjb(70+jR-oaBQ?o}ZVg}*oVzKHNo@(kmDuin8I^E{0>%Xlv0nT>xpkABzTelG7n z=KTjeck_NX_+SX<H7WDnL%cnBp9@MJT!!CnynijkdpdqM@ID&cIFs-5ydL+f!EPRn z?|pIa&9hbI;{F-$xAXjn_bzZPI6&B+z?Hav2Qnolzvq29cn6Q<`A2!KCf?rQUOXQr z{7#+%ey`_w70)Yq^!q9PPXWhxO1w}09T(z7|0*w+1-~B<zY+o#^L`%B{)D|G<nsvc zd-8mRIK#p39U=b1xR2%8iu(+nKl1eB{sYe*q?y5^-#MW6v=DLjdp_@V-kuFUjc0!z z{jTF##508ZP|}p;$!`tsfA?4W`yhXhAkGe+KlA*A=VLtMJSX$~56=g9^jkpMJ9xj6 z_ostx!Czq=gdK<b6LRpIa7gYCalQwhi{FVn@8@0m#ear44}~~2^3d;(xX<)g`}+d^ z-pg|?{`0|4h4?QI@xO=PUikeF_&4yS;IV|A2kQ4Co^RrR1<#Qo&Cl?AR(O8~{&n6< z!CfQlHTca7Zk%Sv687N#9=-6pg6CG;GkNs;9eAR`d8AKhjyZ|v&pfZ<(eGl1<Z$A2 z@%|jjxP|vmf)|7OeF!`P_bb39JYVPeZ~RB_dnNdKp6Btr8h89%LYxoaeiir&JYNUC z5%&op!oj%XZxjCWg5xQ?>-Su+6TCnUeisq{?3jkIukwBk{_o@cVjlf&38?oKJb%y& zzf17H2%Hzv-^Kfzd4DtbYw+oWH+X+7PnGwd<M$BwRPc-V-3IE1SMnU*KW#3zZM;3a zpGDw$Mc{Xb-ofoWui=@=(@DCS_#Yqgs_;IJ|L))qgWtz+zm4~M@Y8QC_$ja#znAko z5#s&SLYd<T|5oq|UddkgeFVQ3gE#Oz#`{Ad@Hp^4csAgF9sa%Ge+cnA1g!C#&hu8D zjrcv4@W*+-jQ7KNPkGnxEbuO#2G0xK%l@_zN5A)jpXX^O{Ij^<#&dZHJ5&+)4dZ?j z;qT=A$`JM#??>_eDV}QxI|*C?eh9pQu+M@=;$F(5-}8As&-+2(v%odriNw+G-QcnQ zYJZ=_-<RR{TAnWi|2KrVR|LEz7ypgqcN^~8d5#X@3hv_lR`6SL@Ovrl7liP)f?vb$ zmprGE{!O^|13!X$ckuJzw|VrNz^&h%#Q6*FJKUKp!TnC23qttS0Y4DJx8XjI@ci$k z_&p!LEy4dV+z;@6F3+PpSBJ<a@V=PmgFO0unCH91-2~17f6ViK-UkW46P(L)YKXfI z{3y>^_{HB*@dbP)VSAANL%h!b@5NmJAK+QedmqoWJfk7a(cmiy)9)AHnLIZW{%G)f zA=rsqzc!wmd5ZX5$ur3NjfBnSIiKgfAr0Qib9lai`&Z!l;D5W~@&4~T9}Rvh@moxs z`+|EN_-owyoy>Cr?ln9`-d7M;zi0CN#@<^0+)DVFJU8OKg*12b{xse{9nu{D&cZzh zybt^@;=Bx;{JR|g)p)K7>0<az`2RPLesAFUH{O3}E_5mIUAPYeFAsk2!<~lr$*?D3 z7m$BHPlfl%zr%yaX7EAce1zvW#9IWO%yS{nGkCsA_`7(%%X0+J_lfgQP``Z%|J<a! zPsi`C_??vVAIrV}&66hA;<r5b9~k@^q}A`^%9rP1xrwvPe4Bp`4)Nsk3Etbme-Lkw z=eIncksr?)A>PgS>GvMoZx4PK;`f&DzJ;)#TMX9Z_>bfNUfd(R&*%Ld-tP%{923&K z1pEYk`-XIawYWF%e4O{AL;U@C{}Ru`JpaV+MxIl6*RRU^p*&CUehAOU$n)*E^?M)B zCf+|C+}DS4d+^_>2;sMr@FBuxh43%qe;@B(!G9l~g}i^5=ig(3fX9IQ;lDq)I+XDS z@Xh%B7k=*o58-(>&!0m0yYat==PvvX<I(R7!fp%ib9tYoxNS=+qhqC!Vp<uimn!Aj zf+W?iUP;?)dL5`%M(uU>tcA1Efl4(UDb?y73(_QATP@aV>8$qJEJd$Z1_#MzbG1}2 zCTXdh)`v<pB9G$kPdAl{o0GIw8Z4)UniAIwgM-EXq`hweaW@r4O8seHWpuPqcE56^ zp4J*;W0k5>$J|CM{l%ocKOHWP)#s$V^cP2pMCfYq9Ib3B_D>FO7Bfn%3xmb9+!*aG zR=e7g_FB5Ml8#pzX|-4w85vJE7s_=tsZlG^iXz30FI226Pi*hMDy0&off9wL8^`(! z^<r8q_u*9@%*82J(veDeuvkrt*Fmn@OiNCMD+8)_s6tHz_Ftv2{z|cys?ip|D_uee zS(oaT=}@5t4Qj={MzxrZ6|1AAT1}m0*+OL{ETsLVYO$|gsg6Sq;z#e%LTRM8a$RfO z;2C4qiuI7DK{56|T@$*xy3%ynb)`D3HNq{R(?;Nl*6!*ZPwP~Y92IVzntB&k%8*w~ zR4VruuS+Yv*HB}N7nvYbEUk}^(bZ%S1IVD^KGdw%=o?B4^?J3`+ko8^FZx=AT6_i? z<v#JY*l4sc))F>aEH_#_a#gBVD(OIRb6ThlHi%cRS;R)U&<mf#9+Y388Uu`;U55lR zHOj-~%I0z;M~Lr!#r_h#7K75+TNfIMhKeI&9pcUfX-r*XI6!*%r#@6+pyYxwdd0Y# z3e}Qon#^8S&NwdJT&hF3v@3-i1x9DNn9^INdaXDzKw-1{DrHJ&6!i{8LvM5>v#T9N z_0^oT(AUT4OJ`R)%6()$z5kqacA>)~7DhG~#%sy!T4_r$g)e)@>&03}n#|Vdio!$U z!3D-xp<3@qIy=)vMqQ`-c^g-+SiR=5)#oSY^%n;Ujgk8K$)dGu)~1C9<C7Zq6|92? zV0B4@MZFNp|3bSsVB@e`=pn`aX~Ia`-!Hj_j9N5OV%!z_`z=d%Wd6lkvZ!1skB?Rw z#MwnP#>R@svqc86^qN?wy+$PhTcx9oT0QM8(jSvVQ{psm4)b^QK7B<`P<?S;jWHSG ziB|Gs>{*R70;aVB5-}f*%IB&~p0h>H4$Es&z>;-~R&}mgdd9SY%h#`8w6<s3p!JK^ zubeiZ5Xokti!1dyGYoPuHXgxM8)B?<C5tPJ++r4Bberl)Pqju26pp?=)5Kg9NQxyZ z*Q{TbI=>{biM#5@C57@V1gv)>wHT<3^cSlO=*1)ixg^Mm;F%$$&*gY~t!uJ}l27tf ze>O7>Nxef`Q@dX}R;~2Gs;y!5;wZCbp^BW9VDbv~7n!2qu#u54@dn{#!wZ?ds%O=* zPUf+~SgkRliAU33g+EmoHD;lyHkZy-1C7F3vAT(wG(?m*i`15wnHpmN>7N$L%o3&q z#K;*r5c!qiV!C$u+K^?1ag=uV7dLg68zUomPvS5c^ae^qs$2ZXPa;FEuPm&UNV%TS zNQw2)Kvm_lxzY(?vMSfrp*p7cq(e;T%=)BkEh5&;V}+`<q>R;_KB*?yz!3eV+So|J zx|flzJaU0eZjonRCv%A}g~KM{&?wcbF*sBg30f!j;4hV}FoM!DIk?DFG$6rSbn%ib z87iRh*x>U4!ej%#A=uRDIz0$8gb=ixI{Y$y3e~)s%A!>Z2)rtc1{Ew(zewC(JJ-8z z2-Sz&_=~qj_fWBKSZZ4u-X%7rc9fZB0-;TCE*U8nNU6W+z(`?`*Gf&1nFq@VS!oSc zkR;>uVLhuBWg}phk#b`|ae_{?0p<#7T2t3$I?l#Zh_|t4>B@gC;`(Ll{*{O#k*WPY zofN95F=MDR#cJ6a8X6BBnvHJ~1QOM|(shUwqmkk?+lRPl#<bLF9|=(P@rMcOog2{X zT6<9x$%R1@rUOYJx@<J<E!2wLjB$%3-NcGO;Fyk%M$s6fmuk$kv_@fL<7!r3&Ca#L z1LI&L(v+~AM`NVlRNGujDQ|XrtwU9AhK`L#uF8A6=$|47vUDZ}qe>T*)S2m()uNU? zt`7A!2CvHHX-PzxA^IRap}lrOF0fSY8)*b7UoBqSDAuGTM0RJSXC;@5gOz$oLwCc< z^*LV8MKLj{2`)=iExK5Z%ZX-)Xm9-$%E}X`HeT)<s#eO<{-SQ*&cek~Yg!$tFjU)X zZAn=2NHq$tVgxN1nu9}Q*alq4sz?Q$%)tZBUb<}Y#^tQxeEoyIh?2`nu~GGLt<|n+ zi%fexgXM~JrM6^g5lRm#Mu937Hx*6f$$vx-GhYA=um8PLo+P8aPnABb7siZY$3T{P z-w;Ks?!{VPwKSG2jZ3-o%J$k-bJ7c?8H^Tc!#0sETeoh_x&`SNVhbI561ybJ%6--G zu{tP`sR?qdP^*m%Rf)VH_#zs6mYPJ=8X{R%t=a;_Wu6avudSD7!K|LzYjb?f(B9t~ z5LbCxP$;A=WJ#Lhbz{<}k)$n2SVOYt-y(`r&CwE*Ojk(662N3InzvHU4Bpj7xvc2o z`si2dWA>A0Ztd%h3GyIz!5kz`iP5Zy2X0{8`zZd`BEullMvOJC7e<DyC7P2g=McYM zHCcp6F|ENgGS6u<)$y583A5SQ0=vw#f>LF9w&-(B8ZKbnFj6mRz0{57rY@&pvJ|jx zLm#SFSP9eh)dH)<Vl_}KpGs5v)FiYC8rdIaPrawB8uhxZ94ig1G6hv@VKYRpV~w&6 zo{Xo>Y!v1(X1og#8nRtL2ooYAgdFN>gqbN#sDHbPR%4+*mX8L()1tU?W|}tT&}0d9 zVIhkr9T#4b-KURLMcsxmtzn{(gqoRLSoA??1BT(Dc`);n$t$-+G1Vap3~kP;hZ=Qd zdw(~kqGkpmj%BK*ud<<>*sz8ru@JFhu5>V|nSyA`XIpN}Ng0^4`#K6Nghm#60whpQ z{hVX!7fV^`ow65MrtZu}1!Ej<$%8t=7=_O~WS|;DEY^*yE-Y1PB{MWj2Z{)5unQ|A zBbCjajWM4nC7my<R5ur@Xz<h{TVw9RThXKWMS7hXuTV71rst_UBLQXI>q>k{xvQnv z@?zaAAVH5*$B3xWy9~3}#tN*8%$KH)B^O~wu|GlH`8zGdnpUN`OfbDgjkM6>9*l9C zm}Hz`p2aSq@dTBiU7<cRvGD1F8Tw6nAhvo&Mv8+lszk7}c+xY<$b<%N1w-&d2&cGa zHra3_K#-aea#7SKJz-*xgd!ZFKY~%xLsa=|8x>`iW3(PDd00Vuf_1f@C4*MkXj=4s zdo2ry=F6_k$BlErKAQQ)(x>=O$+24049h}F=FwPI#Uv!OP|r{)cVjuJm}m?$NNen| z!7;_YxG`$%7is|S2A}Yz_S2u@uhJ;9qE@xgLL}{HmZ=OPT2`<a=vlfToqHWkmm?(T zMH*llnc|b?&D+XJ=D4n8<(lO^tI4${(;DX7VCD{zE?HTaW(cj64P0Cl>R-#x_!elb zUMWS$g;VjmzG4xx(;WI))@)ajR11y2l~~%X$z>4-7yJ+{Un?t4SH(q&HH$Ki^7tNu z5p8R}L~DO%JrOYIOUTQxu=M3_HqN_}RmgJtV+3cOWhEy+so>!ib2IZTYp}5j<3^?@ zMKE7q3uI1H-g4oYK|jXOIIUExjWI@E&W}m4j-5N_Gg_z)(<6<tB&d3)OH7`Nprvo8 zRJWF72q#}qHhs+=HzY$qA(cRBhB$%3mP5>1nr5hCvA<bKc^9uk<f7Ry+@le)nc1!) zr0IpMMAdT=Oe~(+NXSwZ*@e)|qQbG(q|0P%aS0-oAGNWTwug2roMAP_>TCKa*jUWQ zNp4jeo$Z+bVMiitt-xZMt&&w?`qY5wvo6i%({jDQ?!<z&EDl^8R!%g)WGCytn1Rjx zbgOkC^a|OCwvk9pUn*Z`d6zG5a(=<OKs7xlOw5z2sQ%e?g=)<jYFh<ak{SHTvveJ5 zw<b>Q(3ly}&Du-)G&3*m>&xc-WR*s$xU4zQ8T1;lgec!>!ZadRW0bh0QLK*Jn~_Is zhj3Gf+~IXpqm03BJ8N<<qLlo)y8T%@n5<@3qG`XaRGE=B5zqDk2s2?P(_p3+A|#Q2 zlNOz(SzV>f#91XKQ@yJqL7v!R&nl`li2_-BR#4(IO_rEZk|@}=0V&l?3=+MxqBt;s zg~hVgvcddDy$jK|NfcVB=u#RjX7sat4729YynIMA=~VW20m@Q9Qb(0F7PN+CStylR zFnv&Yl2{uB(ukq7HdgGjO~4qU+@y@u0zutBsFbR-<!ic?Q5^YtDSIADhMcI=g<gZm z!q&?yMP1Kn4YTzkqK=g!j9DspC<|FBcd(y#S0s)|-D1UrvKAJKQcbf_mT|7-X(LTl zjLSQ%E_#bt^74JlrekTW1i4@~>X4CUrgF{&W&z$sxsc6lSTxgF(KRe`Iir-a!UUup zsL2uCmwhSi`83Ty%>*H6VJ?s0MboUXV1~{!`y|V>wQN(VR$^YUc1;SmY@~DB+|WwJ zM!99&s~RDvmUwJ1#G%?8<Lpi<Yw>}pDQi|FYh)3zf@GYOMi-ZXdF@k!CNrCKC2M3r z4`Zjrp`uhhn;0d3i><*3FxP2gUCoq{tnsDODB4MNe5RaZ?jze2l|%WHlnMJ2Qh=pk zp>HI5pGGm6#{azb+W8*8X}^FDRZLgd5k17L({-&ZUBa(kvq5tvrTZ4WW!sFzwy`!$ z2G~Rx&qu-zYX&ulme+xjwJ<b#e~?O1Wz71CI$&AZTwyKba^eEBrmSVxq#~nvkm74g zY-Q_@biho{jXucswQk6vDCQYa5CWO98bf6Fj#fWq%5J)E?kdNE=**fzTkH+=1vW%E zxu9V?8Yi!r$=WcFk`0Xv4O*Ca_os34OgPmM&7E=BN9B?rCJyCHbF~CS2t|p_Jm%*? zw6CN3TU&iIS(6-ro0y>1Y9Zx+bL>h*Y=PCRm#?>cd#JgnnqBLNQ6~*Ryc<;(_h>Ma z2H~zln3#RqwZFC(?H;j{TA9IO(OZ`^Fpubu*+mv6>li+wiEGm>E~?WS?1rcQ_V$j< zKQD_h9rcF|a?y;u#Hik&IDAc!SE+s4&6^^*6=E!68zJk=W^23<)CJ3ywIk8^t6pla zNkv&#+|;>V5_EQd2dlR3*#jNb(Qa+;_igHi?ugm$Iwp$l+4T;aWx8iKI?A$Mch^d@ zw{&2l$4tQ_v=9=J8DjvM?ou3Xnc|uEP_b-#c*$n_7#SNXVA!yXrDye5W|uoyldHUi zX`;R5yrLsX7@2fEK}&L*Q??FC<Qv#pk$rr$2V0#285NxDh!VIfS&#m2e;8kVY$-_6 zwvHXe5dDIJhSTWm(`s6)7wVi0(58~@tVNTMM^o>vH{t})h=L^UhfqcmXw4(NH~LM# zzzucMJP{&pu4<>+Ha2=~bA7sydWFTTC$M7eWKoVlreCo+u#iYPZ4dy9pu3w4zg|Zi z^haLICcTBe;Xw>9T2)8yoRC;=d&OyAu7{*mU?pblqKvea+!7pw@;EZk4iRN>Y$=)R z)tQ7aQ)(M;J*)MRIE>XmOr7?}PoK#-Cyj>k|8Hz>8U5cF8GfELI@dRPwFl5k4^C(M zkHJc1gIBDyp`bHCX5MVB_-VHMHE(2LI^-5lx4BrIsYq^4a0bh14I8j`#k6tq3#toc zl5en}<s^Bw=L;{<k;cHgifL9hX6s2&LuKJ59TB7VwYI=g$66uXfL7sFUTeRa7UY`h zgBnoaDMy{fPdBuNL{eA-nh8)Ync7fcp{eYEkVO+^ZgW>P!3rxyx63W!*_k~wfMGvb zrCn`HnCI`_qRs-^!IP<h<my~KC7J94EJzzLLhtwjPpOHOEe|9ibmIUO+c06|bVr+1 zHxn(VCm4MjOiqiuwmwI`Nz;oRiZ136Y}|U^GjqtSMTis?lA&&ke>izT8_+Q@Q-@tA z(OtwkZ<Nh}P9j{OmoC(^^Sjze9(JV)Df?<!qIjTk0EK7vypFU{FO8J2<FrwrogR&6 z8)TLbJwnh}&i1Zu2!`5?&69Z9(VW)JK^W78w%g~DTnaz2qn*gfo_U`E?Fz&dzVG6h zz|Hf8raI=7u3SbmkGUbTnyiG;K-etI_B{jl=8M!)cgo?BjaphzKvV^$8S5MUgdvgq zRN)f(4_@`{_Vyb7P}C$#i|E)$FHbK#Hja%{T(gNIQle%f)A}qwSJG*F6|=+z)gq^d z#5;cem-Y}1W@VG{>2Aw*1$m(Yu!y0;(lw?nUn*UF+>GRzqP{S3U)3}gZsGt_1a;8L zIi3&fN-kTpZgtP<<?IAqfpn7qU@6FIglb`s@eLJ<V%ZNx{QSUW1v|oOT00gq3{176 zGQO-()o$Vf-&4{stEnS%gE_fOGI29|RthkYBe`JON7&#REnrtGaJ(|JnI@NMr5-dC z>M6~kUp5%+fkp|Y`qE7?DvP?A!4WAygt&xLED^_b&gjZTM76O7g?J&vG?8}geVPht z^cs;+829$5)^^S@?wXq#pluIZ%gjt7h2dz)g@NXlQP=cgq2OJFj<FxNiy${;ObHyx z4D8bf?W#OW*DOxk#;mFt4s36sU2-yafbO6_J=@lBOyw=1*7uraM5`hqL}VGoT<eQR zJ0~ad*g1hF8+g`=X8~@djQrhQ9q2oI{(R#KL^D%ABZs~JbdlK`7baJ7CbqrSjXw;> zDedfVyoD^vm@Vayx_iZ~m0F#x!K!2^i90*5YHJP7bm1&$@iJ|4Xr;bt83#O<FSAsh ztQod;<KmS)OVSm~u1FWJT(e|FGwWuY^*zg1FIzfIHcM<0V@qEw+)TM_^-?Q$*Lg4F zs0l4m<rw6$I;h%Sw`JN9UXb4rj`N8Yr9Qutc2zW(bT87DXxa9vX67p4*|4{UT)?Jh zCV(uBgcPHfE$K#|EDxTrr2<g|XO<b3NR}wumS^6XTJNTj+6<Hk5toY1<Bk79nn}lv zrnIVAh@B<sEu#C`35r0}Fo341-e_S2AwEjmA%3^*8a+v5pP{<r4oGKj#e|IX3_C(z zt99CTC%wXKAj3z-exVy1+4LUBp+1*Z;8vwvhi#B3vVCgFL^d4@8Y5XPo2Mh1tYX@h z52xk;O>JQ4e3~}o7;3ggux~r$F(+NmDJH!&>)M<#jG>LDVzz853*7Dek;T4@NyQQ{ zL235$noOU_tw{Mok-nKTejcH%)~k{$b3`kQ^x0Y7s}hq__Ju?^Qj>(U%(6XPtDOfX za1Q>u`Wuz{;FUOi0yB;^dPhoqn%bNGS^#4q&;(}6QQ(RgAvmXt(aWU1fOMMJAX>KX zl3*=o6OZ#jvT37KU}8&rpDsJ;!?pxoI_D|Xq7MOIqhjnB2j4JN7G;qS2R~6+lRk8_ zDviml&t0#}PT$8U2pU$T)q*}uz?1<K7Rw1|YDPFDUF>EPEWG-uYPY;k8y*SjQ<|bk zN=^N`1alk8wa!@k!6#o*SpSeHgo)UuKhY@bR}0b>ADfkQr|IRf2b4-d3dpf}unt0w zY*&I@Y`vC|TfND_55{F5bKJDS%s`WZ8GgjXSdtM_*`OU!>F%hzG$l|N*Ex~ZJXqh1 zwb_)XW+ZE&?~B;Jc_u7l^R>@B+cb2|vmHr{5S1G{o7Ai!+t$pFN#8iEkrp@~Au|S) zlPt-YDCsY3DJQ5!`uHTZE}XPnCeS-ihKC`}HTmHH_U_r-$_IwdvHdQ@S>TFX>U@OO zP|w%u4^v?b6M3n=X2g6kxp?B;W?Z>K{A^t9YE41Eg$=t{d&`Ta$;?9~u#8h~vw$hl zumQm!yNKY2Z+v6AC1nT*q;KiTP}NxVUDjg&+SD6c`jTw^k7`!tqdkCZpwW!L1u;RW zbT}W>^2N<8I-V&jv0cL4sM7L6s)DAqDS`cduu})hr-aq3g>r46Sk(s@HrY&xG2MW* z;#JMXOP1Kyqo<P36c4lYc5aZZvN+P;jJRRVq?8({;wh{P-ZD&bSwY5klX8fXCW{n2 zTy}+nea$Q+O{XMb5ZK0^F%uJa7C~n`G9HAqFq6v?#wFX%Ek0D*)@svRYvGhEy6hCy zKE|+rZHj8lID(^_2UU~IFYZ_u{D@qUV?P5)@j5=ll$fR(EFf^}c#rR^lp6^&w3;?G zat5)^+>xM`w@W5WOnlx{EozS)BalXu3pagpn=>(lh&qWQp+vMC+qLk9VrpYXbqj`Q zTf(WakgJvqVj(T$%nQ-9-MU`Q?eqGErs-x;)d=6XI49t#Z*@d=|Iiak(oRebYHD&# zIJ!mt`BP<?KkA>xOsp)4gT#vo$1rD=^o?CpR89$+lte?IMX!~IiN~1IVq_nl$rX7n zA0sCyr=%{U*ygv<vj!<M3!GZtENGhgT9Q@+T}zf38ElgCuAM%@lVpO?KT7P_UgKbl zh&I$@U99QD0e#sSLZ(s9j7NQKl2Zreo2e6~bH(F~S{2*=HF?4+e2W$iD~tK2^TT=) zxA6$Zwkpa+Eh?j{4o=8+F*S<Qw;5iljp~TK+gxC`p(4vV(;e(XYKBzQs<1>xuWVtG zpc3#=(NulSPUevv>a#><#!o?2Yz-bQ_4gxNHPg5z*%}<WCLb0Wty!J}P^MG(S5OqD zu#w_Gow{ig%E`0KnAH+rcuk2KvY9ecOxd2CZ-|^561iwzpC$oRAK6+$ksh406;0!x z@uRgTG%&OEv?MT7&UEpcB%ZbcHpHyETCy|mDYXsb(G`x&X5Nx88<JD=%z~!mn}tX> za@jgvQ*tBKvtZ7;ngto(i5IU9TBtr?VC2T>t6Cgn1`}7eCFKhLq^6oqFRfhPP1?46 zHonbAHhudTCaDzq5;HyPXgMddOf0*Wy(@oBnzo~0<}5oqGNw}wp+VibNecFvJo(w- zqR6^dn$vNtQR95_G-AgWs?ngJLl1+P4ouR71yiw>uuY_Gaa7lMa4=Sfpdh$H{WNF` zkO`xowo<A@kY3kqte?$?2n`7b0>gHBHnZluD3OB0DX6A@cH${j$(p)#M2v8o@F5hw zzW8i@KbN3TR4au<rZGPB)HY@?wnjd2lXUabN#(+lC)tI+2~$pn);+?mI>#DmS>)I7 zqLDP?R38OblNuXw7(k|q!d$?ll{^wHGqKL=mVFbskoS~qv*|T>Vr-op53gxrA>~c0 z(qKpV(#01}-&%I+z-M9;{>ikyV&Mw6jMQYG_pc?Sp}W2h7iqQ?Wfafol6_GT<EZpF zH8}$tz2u#BnCV=3g9AO<WFzfnrDjfR4wzbEzGmh0ds*DWN804wAF(@WF=cuz6>i_` zU|rJIRJiKIr&T&KVW!A*E{e*#d{8SPlNBd?==4ehH8n~a+qP--vz2VS^6`k031W6T zk;nMy=TuTQo=sj&PLYK+EkM#BZ5v!H7zrF$y=6_P?W?JsFxfZL8j{H&K^e2&r9>Hd z!e`T27qQ}-#fJruiHl*l1V<+fri%l&w1)cG`H>NQzUr-ED)Hf3<m^e#MiH{(@D^?H zHFIoi{EE6-lqG~EW-L34jPg;fY^KASd7E_z;R5g0h|kJTCZOyhlW7Rvv>f)!9E<sb zVO3$HuF3M#MUmvR<#3$P%p4Y2f0B)3mr+6=WZ_f$Gu~=q?2~Bw<6mSC>es>^p=MGJ zeH|pp=97qxb_7iljIvWyT<^~2x{f?_ayK!56QK5{+M`OtH6l)0>Q90Rt0@ywn-IhF zI!+f|Z%2MOH29ok>(&`FblDF>G~Uo6BfUnHt>u_Vc}FH~ZQI&wMbu_60s5OVR{0!E zUqJ7(+Hc$1x2s4?nsKu0H)@papApACY}<Na6lJv;HQTzarCSH)uwb^EU<xBOJO6Fp z9)}fw+t#5OGp5)CJg{x+XfwZ9m^6O-geePZ+qx=yZx%b66&q7#C63LQ(bOqI<=eJi zJ7b1Z-^92VqfaL6&YiZceD==}nK8rkm|$F>E1ZZiQhiqh+`zgZ5V@f|O!pA^Gc`{$ zTie!6ff$kb!nSHLJ&EHq4OafKB%f_!m1A_Oqgu9Yy>7+~Kj!SVa2-ey*>de!IAcbB z{%-4<F~cSs)kA0O{H7n-05vw*K5OIXWku$f&Yu3xOMSl3N1}Z3Ij`&VQrp@!8#<Rj z9a*kAmoiosr1R&_J-u`8{LZ=a(s}1Bn1A}IbLY*SOT<o&{c%J(A8%gg+%r4p%}?je zUvT<ar_Lp1+e)<h&J8koG4f;x=PS+9P`b1@%Iyv34HtR~BZc7$2F)mDG3-nU$;yKb zbcfCj#lq-<bVGwLR%%1(d3?b=TI^&ajx>7p*mj>u)|z=;bGhcMc^m=_hGE;yEgGfr zxo)g2)}LOgRXWc;`;2os&uK=EmN|}!g>9g-drQ!)ZE3Mwtm{iN)T3>@509{s6Yfsq zLNsnbOVPw<^&_p**|mu(jT&WFY8!fl?olg^(;Efp?@4+^VN0PG^{|?b7sgm2r=`9L zVksBJnHZU<CY+*4YZK*(>IgkPQJokWo!Cj>@Wjq~A<^da@W=$;zHOlxWm(#ZS*1Qw zO1WPxU62k^MHGQ8>2QUPEx0E+)^{+$vmR%QllqrOOXHPl($4j2g^~UVyFjfbwY9(0 z)#_U>?3|z)Q)1*wf?ew+=^bqE)h1Y0x7X6;#p<@=FcX+sQz#dP>V@h=I?T$XP_}m4 zcQ&lQ5q4X0m#Os^x0iO-OI5z#E_J1k6^FT2gxVIzOX+yAOiAM<BuXilV!SfUb!YQV z;$x|_{j`(#*i_Y_Gt&0?(Un$)nQt0)`x^1P=m(ZU6C;p09i6bu26t>y{`3r;yOTnO z3d1ARxr_)d4Dm&>YDT3X8s9|_tzRFsyDubjKQ41X^`n^_2W@zmUB#yO(}a<m1!KRi z)*B<Ejh(zGuiyb2(f4(D0>A#kP=Sl<)L1*(@r8+D*o9tnf-hiIQsy2M>vb;MsTKz4 zH<mV&ySxUIgjlr#_8IBB{l#Gn-F)-JGPPQA)-^`rsy=IRuD3%w_!_-LO>zMcs8~&U zpBQJlQiBWQ>>f~I%4^qkYG5<aDodbc!8QXsfc=FuOIzB>y$nk11j(lyeWJXh8PbyJ zPHbA9C*IpAxv)ig&<>U<_65MmXlbVv*k7rQ7se-28wv;`8w<3>{G%^&+DJ>`8X52) zJQYWkwWjGUnf?S{VH)*o6S~)J7G!_|{S%|C?drN@P1MR|l}U<>l(|6sCdZeilFaTA zcQYDhbs<?8>ZM_ZzQ|pJp%EFpGkkQV8|U;`G8gN5Z)HAc<hQ)_&nj}u8@sj62n<!( z8%8F!i|rB54Q8vl-TO9u%#_4K9mVPvI2GDt33@Bz9M+)Adkf=r-T!8HzcDZ+4SJs# z*?}xYqPZwE5n$KAEt6#8m>_I)-r}B>J*!vsT(M>y7s2rfM2-GJc7(g&`YYS3Y<ROZ zFhNF0z=_(#mXsYujz;&4v75~88c~q&;Yw+zONF$gFwMXtlxlM1e~Tx9xJY+XEZ~FR zVSO;BO3L>_m&D9q_|ntbH}E*f4ZAQ7DUwxmN;TEk#CntVLMvtf%Q{wUQD9v4EhNcF zSlTHOx}}2Mpr0?omWrD#F^8hJ!IaL&)WUNVd+UH$le|(fm~@R0YDx&92gmu&!(?yt zQ)eu7YL_K#a<|8|ddG{^?54NYpxn)ItpPgQKTUirHRaN%1sH+Qhf}_?X{3WsXxgBK zYLOF<p<uKVi83EK7G%V2i4kW@BdJR}i|m)gwenK)vbg>y;Wyaa<^pM5)`LNyET-c; z07ZRlyvP(};fN8FI41gyZ(!`vLjQ!O5y?ttCUJZ4_72VkD7IblP?Z$3JS^&H@I)y< zUt!AhY0kou<?u#d;EhSCu3(<U1m(0*^>%toY%HeRp4hTO*@@_y*rm{*HWbR@Flk@2 zB=UELxta;1Il3Zana!(FZuBuP+N@;CM#$4U%I}qG#<A(sRRMG^jv~RQJ+b$OCi+b1 zSuaZF`zK=CkX@QDMNlzolHDUWYa%Ud3pA3YrNDJ6PNTxM7+beEXq?$BfM9{I;I1rL zo_>?U0xwz<T12ghQ6E!Iza+;Mk(+(~SzOpD!7Bw$-K1e}6=7(Pqcy6_M?(#z3`MWR zNPy4u=>lubOqTo5!G>x>Ukc_lj5CQZ)<dRF=}wKRRj8$Hssq_)>Z}#DC2%$TK?&j* zu1LwND(g$-aYQhhr((eLlf(UEkzvh0Q5YpF*avum!@d=m&iO*q9s;zQZbJ=1G0tM6 z&<ryHc0E~|n6swzEILC4eU&+!$*BetWb;RV$p&TT`E)v$HKFwtMeN)wa(_{#;<EO@ z3d+36_cK?ZQpTA_%K>TeuCpPIH^BZ|GzS<{m$Xr9?!|@eG_x-Lqg5FDnn`@0IF6Bm zJ`FUI^u{EU;x~sKT=c(1)(v%;0>dz6u<lxq<ZyTo7uEeA;;;7{H|pBDm<%4w)YE#& zrTPlfp+r(F{+MlGFjP|Xd9A_9aV`rhCQ+(Mo{VyIaIYx?sd_+bfhHwr8A_57EWZGl zg;3iSg%GwqrfQ{9)zmK%fq4!=09b@hi$G5nN4gn1+lo6`uOk_?vO<C}mAX=vQ$UtK zp_4NuF0{}|KUJe24R<H&wH+h19VjU~Sf7MdjUpg>nN1{q!|?jwLZ?mQU&Gm|Gte+j zHYNj+C!rLMFiZ02+MQiZAAF0IEqbN5BfJ_TP+202+XgsMUP$>)4Ru8#<EkWZf?azP zVp>y@9%gr~@ya@EpN$($_+bX%OC9d8i`<Tg9&WfANDt8~Cd$3sWLe8nj5*iXAQvM_ z`$4C_*7v3gwWRYYK)u+kf`%n3Nakbf-7wR}1?3f*c;Vi#!m@Fj6P{XF`YJ19e=&Az zrO|gR*9GC0yV*$EL6HJJa^gsR>3|QbZk(VKD4%5%A0d_SW68oyt~CrtnCTX5k77e4 zd6o})I62xh&kT~+uG;v7ZX`Z3efSdLUu{WG$d#iU5+quP+LRx)+YK7leAYBhK(hu! zF<FW&Xkyd_Z1^zFRUjP&q7k;BylByeMXaY9EY$1Lf<|`K2jCoIG%2>_<gwBKw-fO> zHuF6@{76ch^|X#EFA%?&i6$5)GW!KGDbSDW+^9{fq_JUY94+~xKnQAXgom!@Li=EH zvl_Z2lOJXTx<%0xz!y+zeJ)`xIxRs76#-g{3ab#N30SK&Xl7zVsj2*UQfUyOrZOzd z4D?ibj7t(XSv#Ws632o|qb!&!6oR@$)6`vI9c4>RtrqymMAu|mr%M&diL@ulBufs9 zK50@Z##&Afvj*6S^)Fv_E83Spkj`0H^LpCYUd43P8hM%lwq*)2FQS{I=QhP1eMZ@= zwj>OL-jXO<{)WBg$#XmTKa36_PD7PIJ)Jovdj2Z`;xg8y#G)zbL3Plc-YoW@GQ|e* zM7yQ#WM-=@PK&RR(pEMtV^1qU8%2S`CfvL=VGLy^IcX?S+ucQ623mERxQn*K_3G)F zX^Y&I2+JgIRAIBoU8z--0ivb7%!B+vedh)PY3Na-%4w28LD$Z@bhN1<8ai3Sa=}Ou zzopMh%!P#2b7A`gW8J097A)Twj5MBiU>m9LK;dKJ!q!pjK<89X)v)i*9_x@XLH0vW zrvYaRzB$1-$f&V_AN9>B{9-p)WR0z6EZGn)G!31XwFM{k7MFNEBg4|du`0AkY6gd7 z87$w2axoT1UuNNmYcS*=DsGUru_{j**ke|>k}ZnRVPu<O-|>n59q1)Uukk_+m3abP zJKW><WUFLToNdp3O3&43(fE!nMOKk$dilOt!GDgSHYLobC?T{|QzCB@!6)4*>+&Re zEN05#*e=#|bsHx1LLc2bieNQ^on~5FrGzG_R9P7EDd0z?X-R=ZaLc;5(->|01d@0D zNwpI+2?WuP1zIljz|@S=HpggaV6^wngR!VnU}f(zCI_?SHT$f_ej}gCP%V$q%UVmz zAN8PH(VJ?oR8OgAUOPTH8{AReVN*)xnOmIej<d`^vq5Io`(~K;`!oTR(3*So3FfO3 z$HTGX`hA0tNNeY9(2&J=R8-e+`#%wfGck=+9c@6H8iS9;)!M-^lEfu^NEN3QTXZof zsJljL2^F{^5$3b_(8Lx9Jc!WVnPR<1zowYc9izi&&{EW8xn~M>nG)vua6#aP#!j<U zqfwi^ot4>SpVax!iwcT{nKZR$Q=Ztue_z0!P0(~wzc)}zv5^USx{JdSEd8b#xYH>? zFp}^6(8%?Ab6T&E#u<aOEo7!oCOF@{3A#*Nz?gp8s&Fl*{GE)4v1WI;7o6N;J~ds! zS6#?GQ_zAa7O_ov@MXP5W8P`UT5SE(s(+?Y#zd(V%|5>JNrGM+bq`m=CwWfQ%+UpW zogK}UEqZ%c2eT|_nU5qrw4Ro&EtC-UYD_tuT1szaOGA4Q+^E}<e{V%wHIp-OgNT%b zoKb|b#M_gKL+A&?%H&L%%SxxjMJ$C{5|{0?7}mW>X5f}c-ucrlY1E{!)ik+PxuRJ& zOlop#V7gcWDOwEcHu*CEkx<rj+eB=wP_nAvhlcwR^<`VJ*qC5F4I>S52vK$$TL%5> zG2J9@z1my`TVIYAnd+p`#5&5VDII8))(}DZnuya*V{{`!OWRA_Zs>Y~PaljJEoFmW zzpU-rcBt%(OUN8)Sa?L=IO{jFkJ<H?n)y33T5(K7VRp`v$SbDGRU+?AX3K_aNV~Ap z#VE~RWysxyEZ_@vdtp;MLe=ukozWt~YYi5@+&T<)#V}wSzsMp}aCRLd%62n#ak^~K zwq@M%Wu#*FYZUz@=Mx=)KM-0*GIqDtqj*CK-oics2h*h*`kt&dXGLn3r7j{}4n{S* z#pn>$h0W#Qh*|ZF&8|uon=m$w+f}!)u#5uFD^57G4Qh{V=u!<jJzH6;i(0GUGBeK3 zqtM(cYZH(4Z>A)u;I`zV(l*Tst%F-OjA2jM<s@?|F}7NV6M2{fTGk?$JZHv}vHobm zM;si4Eh3CIqRbKVx^+29L^r@pPB>+#k~oREn)ZsVCr6SfGNOW>>yl)nmijSms7o`v zD_v#UPEc{;RAJ^mO|H!JSb(8m$+S_mGs&jUK}p1>|5ELg4-~er8LAZ{%BAfOVBTyY zp_b%YokU-YWo(?~m8=Lh=;jWh$1=4NnnpurjtUYp{C83leR*!dbEbQWoAV@t5iD}6 zzh{y+fLggLv<cQsZL!Rc&^bZzmq};JE@v~+zZT|n58ExiA!J?Vq>P-K7p<WK2H7hb z9^HY4fRT)09XD(;l46+WumfWWbt~U#k}#%zH9gt0sIvC*xipsn?4UycFayoDL9kf% zM#*Sonancl!+y4mEV}JMtYF*Da<bUoN!fYrKhBnB_h)UXwT_dZm19_JY>PbZiUa*o zYtH2g?hzxh7_&^Yz2FT(8|L&7t&q>;TnR}QbNpM8IdRJDGN-eH=F2jy{<NJctx=F) zr6BKG7s;FnF)I*)+f=sP3R;4zE71*$y9`w9Xd&ai368JWPP)8x(1`kkrCl@<=R#b6 z9EZX&j=CXlZ_jb8q~?kz0!iF7BIC{lQSf*rm>?c23=xd=g!5m?Vr(yoThp|Uq5qD{ z{OkZ!t4_~^m5n=MHLvsyizc%NjiYSnE*3UDG3WG$)_FCth1yIpf_{_RZwr(8c+pQE zO_2*sTFG~GS27Id_URVsFiFQY9?@x(!0ba5rsH05G7Y-~^-PJ;JW+>j$=hzl(L}ji z^W+sKiQ;B`rYppG+X|ZM+cGL=Yr^eNq^4!5b=>CFjhOR#(P<hLD_98GMm04o+8O?@ z(Or>9)<=cHZ)|KjrxCn1BggpkJ$AIF6|KcW2DjO!W^)~rbJ74fG9N)rn%&;s-rwOf zGJ`l+%wsZwxwuPbU8G@N%2z2I8RK|K>p-{5k+dv^GTAw{DV!t?AhYl->K8vp{gOsa zn(i~>T60zB29rrPAz30b<H80E1uP}QIYq757Np$tsKtBt?7<F`I>mA~|EnV`**$x> zgITBBmuIs}9f-#6VJ?ScV(sqVq1zyRpP_qpZ-<WkbYmB56l6KKa#(QjDqamcTT)cz z6-x9gAO{M)&~$iC$U|G+%+8!GLPvs(?8|br+p9c2G0H`Sx)gGXxd}lP4*}_#M;)u? zYFM_Cb1~JovQ`H@jk*k{iadE!sR47?O_J1nCyVc(dLq8064a%W7#~O~YjoOnnMofP z6<G(Hf{EBNZ<+UcOjF_iC_*!dGbmEslTng$Wg0D(R-Wt`fm;_<3)&hbBmN>}niIMP zKyz-SWrRM7EyTigd2Ncyj@cEh#k?fYwFlY1!+a=6n{G4~yAo$4b=+*y?kT5^bn*zR zHN>@9E><=y@fTJ5wP8t@##O%0u1<;;KgLhkAI!Q>RAu{U2Zyk9E~1XyWTiMwG(RJW z5r`cz-@&&7n<2m0!`Q#sM5<@n2@7eIh%moo8l5`I&e+CtUfGFT_huS`xW2)ZZGZlM z7)uN<+qRoDoEH9{#!GXgOqLiPl1(&=diAlD-#yu~5;A+7tphoPP85`;vWA4@Tc&qM z4NenC#>x;*1|ORoP^J1=PdB&tvRM3wd$!)sR74UW=YsAP&&q@`2G>Xtw6&_4F6rH% zzU4N{v!filj*>s{;k>842h<zZCT@1@N_Qn;neR*yVk<i6q<(I0)MiJmFg!<7)R%{? zRMYm*4^8<D5oc<Uww&a!v#Q0~Feje1rK3$vHzrD}GK1)7fo1yoD9>y-FvIjBHM9ZV z*ttM?W&=icPz?bcILH#g_RIpdm~AErmc6)W)j6~+3vxrPUg~x`X7`{=a7>yyw8Lo8 z!b<aBUTHTYwz$N@O{`$4M7CwNP!yH|st$(_C3Vojv{W69ySLNaFd6p@V8Wm_2YFHM zYFmupm2Ev7FF+ahuuL-vw%Y6t%5gVOxSY1b=o4ha3M}g(DcPa(qzAG*ENn9xgwus4 z@3FgPv0Rdg{K5V^T=L${Dfv>tk+aB9^desv_@OUG82W&G&@34%Xq*~6e%@^|qv(XT z9VC&88TYwtzr;_w1r8LO#k!=uO!Mp*#t1FU4Y|TWhOBUgPX3Hw+zp%=7Hzv2`Y<6Y zItKn?rm660fxp_BY2yk$?Dw-X%n@vmKqM0^GSd$fxj!N|!%Zh&q*wc7Y3h@tvk`NA zN48c&GEKUy5_)I*kEY%>?Xvb(4(IR9SQ3YVZ+OJ3EaP5FRC{CPgFlOW)(_Msw;+nk zpqRuf>VihfoF65XAhoWBBb?!qo)wFp!HtnAWr)jm)Z)&gMhQk!&3|R~7N;B`GL?_z zOP&-x!y3ui=+D#(W3#Me_5&D-Y%4aZQn;kZ*m%+!x!%y~g3;?Myr^4E+2VEm$0Xbi z)g3+0h#fv%@H~`jjh$U1hE~T-vlS%}U#f#8i)$b!8@^H;r-qm?)siK|&nfAQMJ*hq zsL&oipY40P?59tRqKHs6RV8evGVSOq6b+xSGHvmp=LR5-WJZWHEa8{=tdF}pSt|L! zd-@6`<Sd`oe9TD2%z#Q%+$MQ7WwUB&VGznRv?-4IxT{zfg_E#qW-n?I(+`I|U0B;8 zU6f}G4q^>X*xAy9d6a4~pSYF8Y6^wv|8*BG(Y=&$whCt#N8AL%MU`}KxT$hQ0o$FO zAD8^&8?yYRl{7o|m66}H7kNG2SgDR>c=BHtPTCT5PHEn{7a~TXY{g~Q2Wr^$tX#IC zXMIn)c+q1$mdx+pQ_#9)>sR%pi&ihXXv3m)>EiFK{L!i(HRIV0fR@9mXDnK|h_4ME z^URu2JS(cu+?HgD#A47=gK3Ldzh?Eu)@YhSgYm|Xvp26Oyolk!WtP+4R@v+hNrj<c zH4ft~lEwGba`z;9j{1w~c*^CJwjW%|U;OCtb5eUsns}_G0T)b7DLTT=(NqOLvD0R> z8l4&$X3nM=j~S<^DJ@XG#-SQXHu0H-$95TXB0AUOElnn!-&+|HPmRd*UMmb1Tdu9F zW%Q-5^c7fsKhvh{W|w+#E$wc$1s=&Y1&M?ebFh@=YZaFd+L&TJlWPdk{gTKqY-=UI ztg>WRest@0%Ey|g?e)J$$!oDz-+FCU(I<h-T+4dKk7k<Arjr}FLOrgR>uVkMJK|gx z^oLw@H_hb>v#BwZO$YmF1UnMIU6owJQ{Wp+?1z%q*)^2~eOV)!m6#<y+ds1LvCY&b z+ts%P9c$Hw{KB^`67HftIbb3P)3<-qmGp*{gKQ4XuVZq)F7!m-#4o1Q=VERs4*O`y zFdG{z7??$Npk>gtTM|F86U{M+HYLzsxQEjBTc}!+o7h72^Lq@YX)t|+BjSlwLws%K z02IjV6nJr1$Mo2RvqRxpZ7LtBK|x#KgA&r&RHTA}clV&3AvgLn0a|eUZYG53(>sE= z<RQOpm{?c%l$mvd)*l+g%$bSP5x%BYHd*+LlZ9I|)hB@hVchwU$Tp3Lz|73xLa}xo z%Jh$BVxOqeu=CXHgvJ1BimL%A3=$yKW?<GswpANKo5!fN9YHsT-BtA{@7A92LU*pi z(3-WSW2dW=D5G@XKYU5!;>-_Zgy4|c_rj)&*KAo+<Kf#-6OVj(*F06*k@(t$^SyNP zI2&O)>}S+bbzP0|o$g$ft?P+|b|ULak;*1)L=GkFs!HW#$k~UXQkPn%<-`sw^<xBw zv&2e#g~>XJDGKvsf+!DKP8Mz*nnif>Q1$UPouczoQ5v}-Ejk7lT&Yeig=MjQ$l2h3 zlIXN=`m@7{Wkgfh9fFF~T*Y{UVh{}zsanF~Xdzqv`%Y_r^vaQ1Ybu3J>b010R%RwQ zM92CdMOC)+j<xV#7{al`sWGFBm4s>d*?Pb&Y0jux@@pd<77K~P+<@ev&wO=7U>r9w zR3B+^mRf^$a!|{eFwL%$V=z!A?bpIl(rDRvi<!j>DNWJMe8Z)bt)AJ%luqVcd0|11 zikdC<CsoGmC_ZAF4T<E_aHijK85*ln{aDNBZZ4Z`zse7yBv@X{vO`E?&n1ep1^J5E zt@~q!+CMiov~G3Lh<Qkd)8lSeHV2v7!Uzr);^s<BJApPBV#91_w{BVT?Y=IqoV?AU zvE6cVJoE6`cL<$JCs!E>1H*mJbauI4rogINzI$qiiIc!6E)%^t37>`t<e!Qm`*YSR zo78liKa332OXDuSMkQhkzf2YLp)iPy5s3TLB_RSk)2yrq0@G3yl~A`BNkU?gGYDU$ zY1-Yn|AcjAJz?0%2$AVjlH{(8c=rc(u{@CmojM9L4B0$42p?>2=ttZmYM;hSk|JSk z-btF051k{_*}n*Tf(<|fi)E@MqQ?)umdt%zC{ml4rLmqG76c_VcJZ9|K){Ud*kWSM zCKcz`SaKFNrSvQ$SA$$$lWcfsOe#H8dYXc)iPI;_nvrW-xLVQ%496-t(^@XUCfpR} zpXj&hT<U{qbUGjD3EF1MxfWteUN=vXB=)K5=#HJv7D4xD_0&2(Our~qlF`N=Xha$1 z8gAI6y5TrV+@{H*8Yy=jO~a67muxHCM6$&-23NOSR!Ed%cWl+bYMf~u>g+9|<xJ7e zLQ_pEj7*^uTH<2Szyow^mGSA+pwJ~2;8T_{ye3HUGd+*ori2u>O9O0%gc*98+*;>u zOJf!fGgkZjFUBfGtBdoQoOwoO0H|Il-o}P<wgk%-qa3rAI<saxo=cnKajS?MQQ+(> zvP%kmB-K(#;Qf}YjO$yoaW4}#Q?kffo*xN_^y%+)oGjF}h-*uR5IWVQsm0o<nxu6g zwVVaQK+3*LQY#|&3p?5Nqy^zi1lJoU`J(B-^1jo}$zJshGhp{LGXkXJe_Yi!Dw8IL zICP9w(vo%DzMlBKj#HOZrr}5xwPD<>P9xam*`o++4|Mx7qbJ(0bp?*|fwWa$2gSKK z`Zu%7jI-1`#ttIH8mA67+JtLBVw^%hswoZVj>9Ko3qOR<{z>AxGNaoLCUO<BeRH9Z ztS`ttOpf6k99tL7X!(;dD57y9bwz$8sdBGnZOFR<Ssbo~jCuf~%W0KgXWFvGPIi-< zEl%Ut(P%EdTivS0%HYa5@Lk2$Vw0sus6)mOQjLsYaW6a5a0p?b(pyesSu@RC9ZMgx z^8oy(ep>fwb<@0;1y<2nfvKzl$8vLujiZzeX~d95x_ZrLPxoWBlaJ`u(n&Fcr&>f7 z^t~7`_KXgZnTgd}oRbYjqG14HR$x&-oxjc`q~kg)L3@aUUS+F5<p_s18B9CkD%orp zd0`eAH?XGKW?n7!fWTFWovsf<(-vVtZ!-H6G%&p^S^-cV>}H?oS4ttJZ8fs1jyU8- z9s1mCHO&=93maIGVe^;~;=Ey=Mh6c`;;oRAl+mf))YjD0))4JFz?4m9&^&5)7%@R1 z8_+t?sqzONvJ#tVqWLCLd@}3D{p?B0xEMW1vMDouPC1wo7PNuPA6BsW*r}xMob?1- zdLyM-O*>DvtJu=*Y@U>f<vFP<vS=oEx?|<-ymm{=*rnkj1eYRBbHKJqt!zo64+)~^ zGs}uLxREefnSqOPi2|4LEfqF9K7w;;Xkx*N#sD#S*Hk^jcxMo>tvQ@DJ1Y7hw-H5y z6We_JWD6+Y1WhtwZYTAkko9e>tW$Dk3>!kmnZ7NV)7QPWQzA_2`j8BRZM^hJY?zJU z95qbv#&2%IcINgH`<X-fPn;(icUlC1&tfJctU5j+K2e22QRnn_o5Y(&BMyeyxO_tb z``2PYVGTn(E-ZsH+DLVvT^F(GjIwWcTEB-_Rv|JJWBRdc+kZ>=e<ADKUAZkL9`)-h zwY{XMTg?)IFqFe&GzT$tlt@BLw^!PpT(LSMpbQzD>R>Y}DC<!q7t`5T6*@w?zFnl- z5te?LBqv!j)qqP<*kDGpyJacS1((rh#?}FCR`wRl?5$$_9p=7UhHl_XRX%)6%DEzI zT#4k|b?H53!CaJuJtABcqRTF`yyFXdXcQ}1nyCP~?J@?>AkCl-a{P<MbMd7mrGH%6 znxIbHdl`E=oFe0zD!Y+PlM@r4?!L4b&4?b(4qRbd+t&JYL}q5Qn-?Hrj>z7d+<+<7 zJajWGz&Givz3ukPSik&zm-Mvm2ns4&+t$soIx(`>KWY|s`{g7}CWw9hV_;VKt&QU% dO#02T(j}NyE4nOlW|t|(x|Tv$qtS`U{{u;ngckq+ literal 0 HcmV?d00001 diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..1295376 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,4274 @@ +# Turkish translation of mutt. +# (C) 2001 the Free Software Foundation. +# Fatih Demir <kabalak@gtranslator.org>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: mutt 1.4i\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2001-06-12 12:47+0200\n" +"Last-Translator: Fatih Demir <kabalak@gtranslator.org>\n" +"Language-Team: Turkish <gnome-turk@gnome.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-9\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "%s'deki kullanýcý adý: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s için parola: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "Çýk" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "Sil" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "Kurtar" + +#: addrbook.c:36 +msgid "Select" +msgstr "Seç" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "Yardým" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "Hýc bir lakabýn yok!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "Lakaplar" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "Farklý lakap yarat: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "Bu isimli bir lakap zaten tanýmlanmýþ!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "Adres:" + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "Þahsi isim: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[ %s = %s] Kabul ediliyor mu?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "Dosyaya kaydet: " + +#: alias.c:342 +msgid "Alias added." +msgstr "Lakap eklendi." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap düzenleme birimi %%s gerektiriyor" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "\"%s\" çalýþtýrýlýrken bir hata oluþtu!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "Dosyayý baþlýklarýný taramak için açamadým." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "Dosyayý baþlýklarýný ayýrmak için açamadým." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "%s için mailcap yazma birimi yok, boþ dosya yaratýlýyor." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "Mailcap düzenleme birimi %%s gerektiriyor" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "%s için mailcap düzenleme birimi yok" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "Uyan mailcap birimi bulunamadý. Metin olarak gösteriliyor." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME tipi belirlenmemiþ. Eklenti gösterilemiyor." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "Filtrayý yaratamadým" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "Filtrayý yaratamadým" + +#: attach.c:824 +msgid "Write fault!" +msgstr "Yazma hatasý!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "Bunu nasýl yazdýracaðýmý bilinmiyor!" + +#: browser.c:41 +msgid "Chdir" +msgstr "Dizine geç" + +#: browser.c:42 +msgid "Mask" +msgstr "Maske" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s bir dizin deðil." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "%d eposta kutusu " + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "Abone [%s], Dosya maskesi: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Dizin [%s], Dosya maskesi: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "Bir dizini topyekun ekleyenmiyor!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "Dosya maskesine uyan dosya yok" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "Yaratma sadece IMAP eposta kutularý için destekleniyor" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Silme sadece IMAP eposta kutularý için destekleniyor" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "Vallahi mi eposta kutusu \"%s\"'yi sileyim mi?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "eposta kutusu silindi." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "eposta kutusu silinmedi." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "Dizine geç: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "Dizin taranýrken hata oldu." + +#: browser.c:975 +msgid "File Mask: " +msgstr "Dosya aðý: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "(t)arih, (a)lfabetik,(b)oyuta yada (h)iç mi terse sýralayým?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "(t)arih, (a)lfabetik,(b)oyuta yada (h)iç mi sýralayým? " + +#: browser.c:1049 +msgid "dazn" +msgstr "tabh" + +#: browser.c:1115 +msgid "New file name: " +msgstr "Yeni dosya ismi: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "Bir dizini gösterilmiyor" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "Dosyayý göstermeye uðraþýrken hata oldu" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "%s'de yeni eposta var." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s : renk komuta tarafýndan desteklenmiyor" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s : böyle bir renk yok" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s : böyle bir þey yok" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s : komuta sadece indeks nesneleri için geçerlidir" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s : çok az argüman verilmiþ" + +#: color.c:563 +msgid "Missing arguments." +msgstr "Eksik argümanlar." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "renkli : eksik argüman" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "siyah-beyaz : eksik argüman" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "böyle bir ayar yok : %s" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "çok az seçenek" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "çok fazla seçenek" + +#: color.c:721 +msgid "default colors not supported" +msgstr "varsayýlan renkler desteklenmiyor" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "PGP imzasý doðrulansýn mý?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "Geçici dosyayý yaratamadým!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "Gösterim filtrasýný yaratamadým" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "Iletiyi kopyalamayadým." + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "PGP imzasý baþarýyla doðrulandý." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "PGP imzasý doðrulanamadý." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP imzasý baþarýyla doðrulandý." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP imzasý doðrulanamadý." + +#: commands.c:223 +msgid "Command: " +msgstr "Komuta: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Iletiyi ilet:" + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "Iþaretli iletileri ilet:" + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "Adresi tararken hata oldu!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "Iletiyi %s'e ilet" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "Iletileri %s'e ilet" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "Ileti iletildi." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "Iletiler iletildi." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "Ileti iletildi." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "Iletiler iletildi." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "Filtra iþlemi yaratýlamadý" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "Komutaya ver: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "Yazdýrma komutasý belirlenmemiþ." + +#: commands.c:483 +msgid "Print message?" +msgstr "Ileti yazdýrýlsýn mý?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "Iþaretli iletiler yazdýrýlsýn mý?" + +#: commands.c:492 +msgid "Message printed" +msgstr "Ileti yazdýrýldi" + +#: commands.c:492 +msgid "Messages printed" +msgstr "Iletiler yazdýrýldi" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "Ileti yazdýrýlýmadý" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "Iletiler yazdýrýlýmadý" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Ters sýralama tipi: (t)arih/(g)önderen/(a)lan/(k)onu/gönder(i)len/k(o)num/dü" +"(z)enmemiþ/(b)oyut/(p)uan: " + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"Sýralama tipi: (t)arih/(g)önderen/(a)lan/(k)onu/gönder(i)len/k(o)num/dü(z)" +"enlenmemiþ/(b)oyut/(p)uan?" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "tgakiozbp" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Komuta komutasý: " + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "eposta kutusuna %s%s" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "eposta kutusuna %s%s" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "eposta kutusuna %s%s" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "eposta kutusuna %s%s" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "eposta kutusuna %s%s" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "eposta kutusuna %s%s" + +#: commands.c:706 +msgid " tagged" +msgstr " iþaretli " + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "%s'e kopyalanýyor..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "Gönderirken %s'ye dönüþtürülsün mü?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Içerik tipi %s iye deðiþtirildi." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "Karakter kümesi deðiþtirildi: %s -> %s" + +#: commands.c:914 +msgid "not converting" +msgstr "dönüþtürülmüyor" + +#: commands.c:914 +msgid "converting" +msgstr "dönüþtürülüyor" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "Eklemler yok." + +#: compose.c:84 +msgid "Send" +msgstr "Gönder" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "Iptal" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "Dosya ekle" + +#: compose.c:90 +msgid "Descrip" +msgstr "Anlatým" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Imzala ve þifrele" + +#: compose.c:129 +msgid "Encrypt" +msgstr "Þifrele" + +#: compose.c:131 +msgid "Sign" +msgstr "Imzala" + +#: compose.c:133 +msgid "Clear" +msgstr "Temizle" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " farklý imzala: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<varsayýlan>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "Þifrele" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"þ(i)frele, i(m)zala, (f)arklý imzala, i(k)isi de, mi(c) algoritmini seç " +"yoksa i(p)talmý? " + +#: compose.c:166 +msgid "esabf" +msgstr "imfkcp" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Farklý imzala: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"þ(i)frele, i(m)zala, (f)arklý imzala, i(k)isi de, mi(c) algoritmini seç " +"yoksa i(p)talmý? " + +#: compose.c:228 +#, fuzzy +msgid "eswabf" +msgstr "imfkcp" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] yok!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] deðiþtirildi. Þekillenmeyi yenileyim mi?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- Eklentiler" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Geriye kalan tek eklentii silemezsin." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "Seçili dosyalar ekleniyor..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "%s'yi ekleyemedim!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "Iletiye eklenecek iletiyi seçilecek eposta kutusunu seç" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Bu klasörde ileti yok." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Eklemek istediðin iletiler iþaretlenecektir!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "Eklenemedi!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Geçerli eklenti dönüþtürülmeyecektir." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Geçerli eklenti dönüþtürülecektir." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "Geçersiz þekillendirme." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "Bu iletinin bir kopyasýný kaydedeyim mi?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "Adýný deðiþtir: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "Stat edemedim : %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "Yeni dosya: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Içerik-tipi temel/altçeþit þeklindedir" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "Bilinmeyen içerik tipi %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "Dosya %s yaratýlamadý" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "Eklenti yaparak burada bir hata oluþtu" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "Iletiyi kaydediyem mi?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "Iletiye eposta kutuma yaz" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "Ileti %s iye yazýlýyor..." + +#: compose.c:1305 +msgid "Message written." +msgstr "Ileti yazýldý." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- PGP geri verisi (geçerli zaman: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "PGP parolasý unutuldu." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "PGP parolasýný verin:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "PGP parolasýný verin:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "application/pgp iletisi yaratýlsýn mý?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "PGP'yi çaðýrýlýyor..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- Hata: Hatalý multipart/signed þekili! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- Hata: Bilinmeyen multipart/signed protokolu %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- Ikaz: %s/%s imzalarý doðrulanamýyor. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- Bu bilgi imzalanmýþtýr --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- Ikaz: Hiç bir imza bulunmamýþtýr. --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Imzalanmýþ bilginin sonu --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "evet" + +#: curs_lib.c:158 +msgid "no" +msgstr "hayýr" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "Mutt'tan çýkýlsýn mý?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "bilinmeyen hata" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "Devam etmek için bir tuþa bas..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " (sýralama için '?' iye bas): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "Hiç bir eposta kutusu açýk deðil." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "Ileti yok." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "eposta kutusu salt-okunur." + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "Iþlev ileti eklentie mödüsünde yasaktýr." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "Görünebilir ileti yok." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "Salt-okunur bir eposta kutusu yazýlabilir yapýlamaz!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "Klasöre olan deðiþiklikler çýkýþta kaydedilecektir." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "Klasöre olan deðiþiklikler kaydedilmeyecektir." + +#: curs_main.c:397 +msgid "Quit" +msgstr "Çýk" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "Kaydet" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Gönder" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "Cevap" + +#: curs_main.c:403 +msgid "Group" +msgstr "K. Cevap" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "Eposta kutusu deðiþtirilmiþ. Bazý iþaretlet hatalý olabilir." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Yeni eposta var!" + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "Eposta kutusu deðiþtirilmiþ." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "Iþaretli ileti yok." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "%s'e baðlanýlýyor..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Iletiye geç: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "Argüman bir ileti numarasý olmak zorunda." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Bu ileti görünemez." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "Geçersiz ileti numarasý." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "Tabire uyan iletileri sil: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "Sýnýrlandýrma tabiri kullanýmda deðildir." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "Sýnýr : %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "Tabire uyan iletilere sýnýrla: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "Mutt'tan çýkýlsýn mý?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "Tabire uyan iletileri iþaretle: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "Tabire uyan iletileri kurtar: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "Tabire uyan iletilerden iþareti sil: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "Eposta kutusunu salt-okunur aç" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "eposta kutusunu aç" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s bir eposta kutusu deðildir!" + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "Mutt'tan kaydedilmeden çýkýlsýn mý?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "Son iletidesiniz." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "Kurtarýlan ileti yok." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "Ilk iletidesiniz." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "Arama baþa döndü." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "Arama sona ulaþtý." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "Yeni ileti yok" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "Okunmamýþ ileti yok" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " bu sýnýrlandýrýlmýþ bakýþta" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "Ileti POP sunucusunda deðiþtirilenemedi." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "Daha fazla konum yok." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "Ilk konumdasýnýz." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "Konumlaþtýrma kapalýdýr." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "Konum okunmamýþ ileti içeriyor." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "Ileti POP sunucusunda deðiþtirilenemedi." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\ttek bir ~ içeren bir satýrý baþa ekle\n" +"~b isimler\tisimleri görünmez kopya listesine (BCC) ekle\n" +"~c isimler\tisimleri görünür kopya listesine (CC) ekle\n" +"~f iletiler\tiletileri içer\n" +"~F iletiler\t~f'ye benzer fakat bu seçenek baþlýklarý da içerir\n" +"~h\t\tileti baþlýðýný deðiþtir\n" +"~m iletiler\tiletileri içer ve cevap ver\n" +"~M iletiler\t~m gibi fakat bu seçenek baþlýklarý da içerir\n" +"~p\t\tiletiyi yazdýrýr\n" +"~q\t\tdosyayý kaydedip editörden çýk\n" +"~r dosya\t\tdosyayý editörle aç\n" +"~t isimler\tisimleri gönderilenler listesine ekle\n" +"~u\t\tson satýrý tekrar et\n" +"~v\t\tiletiyi $visual editörüyle düzenle\n" +"~w dosya\t\tiletiyi dosyaya kaydet\n" +"~x\t\tdeðiþiklikleri iptal et ve editörden çýk\n" +"~?\t\tbu ileti\n" +".\t\tsatýrda tek bir . iþlevi bitirir\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d : geçersiz ileti numarasý.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(Iletiyi '.' içerikli bir satýrla bitir)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "Eposta kutusu yok.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Ileti içeriði:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(devam et)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "eksik dosya ismi.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "Iletide satýr yok.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s : bilinmeyen editör komutasý (~?'le yardým iste)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "geçici dizini yaratamadým : %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "geçici eposta dizinini yaratamadým : %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "geçici eposta dizinini yaratamadým : %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "Ileti dosyasý boþ!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "Ileti deðiþtirilmedi!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "Ileti dosyasý %s'yi açamadým" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "%s dizinine eklenemiyor" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "Hata. Geçici dosya %s korunmaya alýndý" + +#: flags.c:332 +msgid "Set flag" +msgstr "Iþareti otur" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Iþareti temizle" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- Hata: Multipart/Alternative bölümlerinin hiç bir bölümü gösterilemiyor! " +"--]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- Eklenti #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- Tip: %s/%s, Þekillendirme: %s, Boyut: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- %s ile gösteriliyor --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Otomatik gösterme komuatasý: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- %s çalýþtýrýlamadý --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- %s ile otomatik gösterme hatasý --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- Hata: message/external-bods hiç bir eriþim tipi belirlemiyor --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- Bu %s/%s eklentisi" + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(boyut %s bayt) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "silinmiþtir --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s'de --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- isim: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- Bu %s/%s eklentisi" + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- Bu %s/%s eklentisi içerilmiyor, --]\n" +"[-- ve ima edilen kaynaðýn geçerliliði --]\n" +"[-- de bitti. --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- Bu %s/%s eklentisi içerilmiyor, --]\n" +"[-- ve ima edilen eriþme tipi %s de desteklenmiyor --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "Hata: multipart/signed protokolu yok." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "Hata: multipart/encrypted protokol verisi yok!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "Geçici dosyayý açamadým!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s desteklenmiyor " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "('%s' ile bu bölüme bakabilirsiniz)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: dosyayý eklenemiyor" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "HATA: bu hatayý lütfen rapor edin" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<BILINMIYOR>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "%s yardýmý" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "" + +#: hook.c:254 +#, fuzzy, c-format +msgid "unhook: unknown hook type: %s" +msgstr "%s: bilinmeyen tip" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "" + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "Doðrulamacýlar eriþilir deðil" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "Doðrulanýyor (anonim)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "Anonim doðrulama baþarýsýz oldu." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "Doðrulanýyor (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 doðrulamasý baþarýsýz oldu." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "Doðrulanýyor (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI doðrulamasý baþarýsýz oldu." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "Bu sunucuda LOGIN kapalýdýr." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "Giriþ yapýlýyor..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "Giriþ baþarýsýz oldu." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "Doðrulanýyor (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL doðrulamasý baþarasýz oldu." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "Isim yüzeyleri alýnýyor..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "Dizin listesi alýnýyor..." + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s : böyle bir renk yok" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "Eposta kutusunu yarat:" + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "Her eposta kutusunun ismi olmak zorunda." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "Eposta kutusu yaratýldý." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "Eposta kutusu kapatýldý" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "Aðýr hata. Ileti sayýlarý karýþtý!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "Baðlantý %s kapatýlýyor..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Bu IMAP sunucusu çok eski. Mutt bu sunucuyla çalýþmaz." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "TLS ile güvenli baðlanýlsýn mý?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "TLS baðlantýsý kurulamadý" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "%s seçiliyor..." + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "Eposta kutusunu yazarken hata oldu!" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "Bu sunucudaki IMAP eposta kutularýna ileti eklenemiyor" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "%s yaratýlsýn mý?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "IMAP sunucusuna varolan baðlantý kapatýlýyor..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "%d ileti silinmek için iþaretlenmiþ..." + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "CLOSE baþarýsýz oldu" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "Ileti durum iþaretleri kaydediliyor... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "Iletileri sunucudan sil..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE baþarýsýz oldu" + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "Eposta kutusunu yarat:" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "%s'e abone olunuyor..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "%s'deki abonelik feshediliyor..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "Bu IMAP sunucu neslinden baþlýklarý alýnamýyor." + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "Geçici dosyayý yaratamadým!" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "Ileti baþlýklarýný alýnýyor... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "Ileti alýnýyor..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "Ileti sayýsý yanlýþtýr. Eposta kutusu yeniden açilmasý denenebilir." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "Ileti yükleniyor..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "%d ileti %s'e kopyalanýyor..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "%d ileti %s'e kopyalanýyor..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "Devam edilsin mi?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: adres yok" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "geçersiz baþlýk birimi" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: bilinmeyen sýralama tipi" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): tabirde hata var: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: bilinmeyen veri" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s oturtulmuþtur" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s oturtulamamýþtýr" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: geçersiz eposta tipi" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: geçersiz deðer" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: bilinmeyen tip" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: bilinmeyen tip" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "Stat edemedim : %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s bir eposta kutusu deðildir!" + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "%s'de hata var, satýr %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: %s'de hatalar var" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: %s'de oluþan çok fazla hatadan dolayý okuma iptal edildi" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: %s'de hata var" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: çok fazla argüman" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: bilinmeyen komuta" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Komuta satrýnda hata: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "baþlangýç dizini belirlenemedi" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "kullanýcý adý belirlenemedi" + +#: keymap.c:455 +#, fuzzy +msgid "Macro loop detected." +msgstr "eposta kutusu silindi." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Tuþ ayarlanmamýþ." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Tuþ ayarlanmamýþ. Yardým için lütfen '%s' basýnýz." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: çok fazla argüman" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s: böyle bir mönü yoktur" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "boþ tuþ metni" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: çok fazla argüman" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s: haritada öyle bir iþlev yoktur" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: boþ tuþ metni" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: çok fazla argüman" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec: yetersiz argüman sayýsý" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s: haritada öyle bir iþlev yoktur" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "%s için anahtar numarasýný belirleyin: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "belirlenmemiþ iþlem" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "mailcap birimlerini kullanarak eklentiyi zarureten göster" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "eklentiyi metin olarak göster" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "Altbölümlerin gösterilmesini aç/kapat" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "sayfanýn sonuna geç" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "iletiyi baþka bir kullanýcýya yeniden gönder" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "bu dizinde yeni bir dosya seç" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "dosyayý göster" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "seçili dosyanýn ismini göster" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "geçerli eposta kutusuna abone ol (sadece IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "geçerli eposta kutusuna varolan aboneliði fehset (sadece IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "yekin/abone olunan eposta kutusu bakýþlarý arasýnda geç (sadece IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "Yeni epostalý eposta kutusu yoktur." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "dizin deðiþtir" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "eposta kutularýný yeni eposta için kontrol et" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "bu iletiye dosya ekle" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "bu iletiye ileti ekle" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "BCC listesini düzenle" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "CC listesini düzenle" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "eklenti anlatýmýný düzenle" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "eklenti þekillendirmesini düzenle" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "bu iletinin bir kopyasý kaydedilecek olan dosyayý belirt" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "eklenecek dosyayý düzenle" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "gönderen birimini düzenle" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "iletiyi baþlýklarýyla düzenle" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "iletiyi düzenle" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "eklentiyi mailcap birimi sayesinde düzenle" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "Reply-To birimini düzenle" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "bu iletini konusunu düzenle" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "gönderilen listesini düzenle" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "yeni bir eposta kutusu yarat (sadece IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "eklenti içerik tipini düzenle" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "bir eklentinin geçici bir kopyasýný elde et" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "iletiye ispell komutasýný uygula" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "mailcap birimlerini kullanarak yeni bir eklenti düzenle" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "bu iletiyi sonra göndermek üzere kaydet" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "eklenmiþ bir dosyayý yeniden adlandýr/taþý" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "iletiyi gönder" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "" + +#: keymap_alldefs.h:46 +#, fuzzy +msgid "toggle whether to delete file after sending it" +msgstr "sadece eposta kutularýný mý yoksa yekin dosyalarý gezmesini aç/kapat" + +#: keymap_alldefs.h:47 +#, fuzzy +msgid "update an attachment's encoding info" +msgstr "eklenti þekillendirmesini düzenle" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "iletiyi bir klasöre yaz" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "bir iletiyi bir dosyaya/eposta kutusuna kopyala" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "gönderenden yola çýkarak bir lakap yarat" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "birimi ekran sonuna taþý" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "birimi ekran ortasýna taþý" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "birimi ekran baþýna taþý" + +#: keymap_alldefs.h:54 +#, fuzzy +msgid "make decoded (text/plain) copy" +msgstr "çözülmüþ kopya yarat" + +#: keymap_alldefs.h:55 +#, fuzzy +msgid "make decoded copy (text/plain) and delete" +msgstr "çözülmüþ kopyasýný yarat ve sil" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "geçerli birimi sil" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "geçerli eposta kutusunu sil (sadece IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "altkonumdaki yekin iletileri sil" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "konumdaki yekin iletileri sil" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "gönderenin tam adresini göster" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "bir iletiyi göster" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "kaynak iletiyi düzenle" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "imleçin önündeki harfi sil" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "imleçi bir harf sola taþý" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "imleçi kelime baþýna taþý" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "satýr baþýna geç" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "eposta kutularý arasýnda gezin" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "dosya adýný yada lakabý tamamla" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "adresi bir sorgulamayla tamamla" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "imleçin altýndaki harfi sil" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "satýr sonuna geç" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "imleçi bir harf saða taþý" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "imleçi kelime sonuna taþý" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "geçmiþler listesinde yukarý çýk" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "geçmiþler listesinde yukarý çýk" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "imleçten satýr sonuna kadar olan harfleri sil" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "imleçten kelime sonuna kadar olan harfleri sil" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "satýrdaki yekin harfleri sil" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "imleçin önündeki kelimeyi sil" + +#: keymap_alldefs.h:81 +#, fuzzy +msgid "quote the next typed key" +msgstr "önümüzdeki konuma geç" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "kelimeyi büyük yaz" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "kelimeyi ufak yazýlýma geçir" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "kelimeyi büyük yazýlýma geçir" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "bir muttrc komutasý belirle" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "bir dosya maskesi belirle" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "bu mönüden çýk" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "eklentii bir komuta yoluyla filtrala" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ilk birime geç" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "iletinin 'önemli' durumunu aç/kapat" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "bir iletiyi anlatýmlarla ilet" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "geçerli iletiye geç" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "yekin alýcýlara cevap ver" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "yarým sayfa aþaða geç" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "yarým sayfa yukarý geç" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "bu ekran" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "endeks sayýsýna geç" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "son birime geç" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "belirlenmiþ eposta listesine cevap ver" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "bir macro çalýþtýr" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "yeni bir eposta iletisi yarat" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "baþka bir dizin yarat" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "baþka bir dizini salt okunur aç" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "iletinin durumunu temizle" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "tabire uyan iletileri sil" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "IMAP sunucularýndan eposta alýmýný zorla" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "POP sunucusundan epostalarý al" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ilk iletiye geç" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "son iletiye geç" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "sadece tabire uyan iletileri göster" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "önümüzdeki yeni iletiye geç" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "önümüzdeki okunmamýþ iletiye geç" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "önümüzdeki alt-konuma geç" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "önümüzdeki konuma geç" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "önümüzdeki silinmemiþ iletiye geç" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "önümüzdeki okunmamýþ iletiye geç" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "konumdaki ana iletiye geç" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "önceki konuma geç" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "önceki alt-konuma geç" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "önceki silinmemiþ iletiye geç" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "önceki yeni iletiye geç" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "önceki okunmamýþ iletiye geç" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "önceki okunmamýþ iletiye geç" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "geçerli konumu okunmuþ olarak iþaretle" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "geçerli alt-konumu okunmuþ olarak iþaretle" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "bir iletinin durumunu belirle" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "eposta kutusuna yapýlan deðiþiklikleri kaydet" + +#: keymap_alldefs.h:129 +#, fuzzy +msgid "tag messages matching a pattern" +msgstr "tabire uyan iletileri sil" + +#: keymap_alldefs.h:130 +#, fuzzy +msgid "undelete messages matching a pattern" +msgstr "tabire uyan iletileri sil" + +#: keymap_alldefs.h:131 +#, fuzzy +msgid "untag messages matching a pattern" +msgstr "tabire uyan iletileri sil" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "sayfanýn ortasýna geç" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "önümüzdeki birime geç" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "bir satýr aþaða in" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "önümüzdeki sayfaya geç" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "iletinin sonuna geç" + +#: keymap_alldefs.h:137 +#, fuzzy +msgid "toggle display of quoted text" +msgstr "Altbölümlerin gösterilmesini aç/kapat" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "iletinin baþýna geç" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "ileti/eklentii bir komutaya boru yoluyla filtrala" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "önceki birime geç" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "bir satýr yukarý çýk" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "önceki sayfaya geç" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "geçerli birimi yazdýrt" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "adresler için baþka bir uygulamayý sorgula" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "yeni sorgulama sonuçlarýný geçerli sonuçlara ekle" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "eposta kutusuna yapýlan deðiþiklikleri kaydet ve çýk" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "kenara býrakýlmýþ iletiyi yeniden düzenle" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "ekraný tamizle ve yeniden göster" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{iç kullaným}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "bir iletiye cevap ver" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "geçerli iletiyi yeni bir ileti için örnek olarak kullan" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "iletiyi/eklentiyi dosyaya kaydet" + +#: keymap_alldefs.h:154 +#, fuzzy +msgid "search for a regular expression" +msgstr "tabirde hata var" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "önümüzdeki eþleþimi ara" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "önümüzdeki eþleþimi ters yönden ara" + +#: keymap_alldefs.h:158 +#, fuzzy +msgid "toggle search pattern coloring" +msgstr "Arama tabiri yok." + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "bir alt-kabukta bir komuta çalýþtýr" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "iletileri sýralandýr" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "iletileri ters sýrala" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "geçerli birimi iþaretle" + +#: keymap_alldefs.h:163 +#, fuzzy +msgid "apply next function to tagged messages" +msgstr "Iþaretli hýc bir ileti yok." + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "Iþaretli hýc bir ileti yok." + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "geçerli alt-konumu iþaretle" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "geçerli konumu iþaretle" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "bir iletinin 'yeni' iþaretini aç/kapat" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "eposta kutusunun yeniden yazýlmasýný aç/kapat" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "sadece eposta kutularýný mý yoksa yekin dosyalarý gezmesini aç/kapat" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "sayfanýn baþýna geç" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "geçerli birimi kurtar" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "konumdaki yekin iletileri kurtar" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "alt-konumdaki yekin iletileri kurtar" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "Mutt sürümünü ve tarihini göster ve çýk" + +#: keymap_alldefs.h:175 +#, fuzzy +msgid "view attachment using mailcap entry if necessary" +msgstr "eklentiyi mailcap birimi sayesinde düzenle" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "MIME eklentileri göster" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +#, fuzzy +msgid "show currently active limit pattern" +msgstr "sadece tabire uyan iletileri göster" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "geçerli konumu göster/gizle" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "yekin konumlarý göster/gizle" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "bir PGP resmi anahtarý ekle" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "PGP ayarlarýný göster" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "bir PGP resmi anahtarý gönder" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "bir PGP resmi anahtarý doðrula" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "anahtarýn kullanýcý numarasýný göster" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "klasik pgp için ara" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "" + +#: keymap_alldefs.h:190 +#, fuzzy +msgid "Delete a remailer from the chain" +msgstr "satýrdaki yekin harfleri sil" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "çözülmüþ kopyasýný yarat ve sil" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "çözülmüþ kopya yarat" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "PGP parolasý unutuldu." + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "PGP resmi anahtarlarý çýkar" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "PGP ayarlarýný göster" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "Bellek iflasý ,-)" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"Yazarlara ulaþmak içim lütfen <mutt-dev@mutt.org> listesine eposta " +"gönderin.\n" +"Bir hata raporunu göndermek için lütfen flea(1) uygulamasýný kullanýn.\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Telif hakký (C) 1996-2001 Michal R. Elkins ve baþkalarý.\n" +"Mutt hiçbir garantiyle gelmez; daha fazla bilgi için 'mutt -vv' çalýþtýr.\n" +"Mutt GPL lisansý altýnda yayýnlanmýþtýr ve daha fazla\n" +"bilgi için 'mutt -vv' çalýþtýrabilirsiniz.\n" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"yardým:mutt [ -nRyzZ ] [ -e <komuta> ] [ -F <dosya> ] [ -m <tip> ] [ -f " +"<dosya ]\n" +"\tmutt [ -nx ] [ -e <komuta> ] [ -a <dosya> ] [ -F <dosya> ] [ -H <dosya> ] " +"[-i <dosya> ] [ -s <konu> ] [ -b <adres> ] [ -c <adres> ] <adres> [ ... ]\n" +"\tmutt [ -n ] [ -e <komuta> ] [ -F <dosya> ] -p\n" +"\tmutt -v[v]\n" +"\n" +"seçenekler:\n" +" -a <dosya>\tiletiye bir dosya ekle\n" +" -b <adres>\tbir görünmez kopya adresi (BCC) belirler\n" +" -c <adres>\tbir kopya adresi (CC) belirler\n" +" -e <komuta>\tbaþlangýçta çalýþtýrýlacak bir komuta belirler\n" +" -f <dosya>\tokunacak eposta kutusunu belirler\n" +" -F <dosya>\tvarsayýlan muttrc dosyasýna rakip bir dosya belirler\n" +" -H <dosya>\tbaþlýðýn okunacak olduðu örnek bir dosya\n" +" -i <dosya>\ther cevapta içerilecek bir eklentiyi belirler\n" +" -m <tip>\teposta kutularýnýn varsayýlan tipini belirler\n" +" -n\t\tMutt'ý sistemdeki Muttrc dosyasýný okumasýndan men eder\n" +" -p\t\tbir kaydedilmiþ/býrakýlmýþ iletiyi belirtler\n" +" -R\t\teposta kutusunu salt-okunur açar\n" +" -s <konu>\tkonuyu belirler\n" +" -v\t\tnesil ve denetleme bilgilerini gösterir\n" +" -x\t\tmailx gönderme modüsünü taklit et\n" +" -y\t\t'mailboxes' listesinde belirtilen bir eposta kutusunu belirler\n" +" -z\t\teposta kutusunda ileti yoksa, hemen çýk\n" +" -Z\t\tyeni ileti içeren ilk klasörü göster, yeni ileti yoksa hemen çýk\n" +" -h\t\tbu yardým iletisini göster" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"Denetleme seçenekleri:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "Komutayý baþlatýrken hata oldu." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "%d seviyesinde bilgilendirme iletileri gösteriliyor.\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG (bilgilendir iletileri) derleme sýrasýnda belirlenmemiþ.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s yok. Yaratýlsýn mý?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "%s: %s yaratýlanamadý." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "Alýcýlar belirlenmedi.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: dosya eklenemedi.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "Yeni epostalý eposta kutusu yoktur." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "Gelen kutularý belirlenmedi." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "Eposta kutusu boþtur." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "%s okunuyor... %d (%%%d)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "Eposta kutusu bozuktur!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "Eposta kutusu bozulmuþtur!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "Aðýr hata! Eposta kutusunu yeniden açamadým!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "Eposta kutusunu kilitleyemedim!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "Iletiler yazýlýyor... %d (%%%d)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "Arama tabiri denetleniyor..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "Yazma baþarýsýz oldu! Eposta kutusunun bir bölümü %s'ye yazýlmýþtýr" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "Eposta kutusu yeniden açýlanamadý!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "Eposta kutusu yeniden açýlýyor..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "Geç: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "Geçersiz sýralama numarasý." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "Birim yok." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "Daha alta geçmek mümkün deðildir." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "Daga yukarýya geçmek mümkün deðildir." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "Son sayfadasýnýz." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "Ilk sayfadasýnýz." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "Ilk birim gösteriliyor." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "son birim gösteriliyor." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "Son birimdesiniz." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "Ilk birimdesiniz." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "Ara: " + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "Ters ara: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "Arama tabiri yok." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "Bulunmadý." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "Iþaretlenmiþ birim yok." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Bu mönüde arama þimdilik mümkün deðildir." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "Diyaloklar için hýzlý geçiþ þimdilik mümkün deðildir." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "Iþaretleme desteklenmiyor." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "%s okunuyor... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "Dosya bir dizin, dizin altýnda kaydedilsin mi?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "Dosya bir dizin, dizin altýnda kaydedilsin mi?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "Dosyayý dizin altýnda kaydet: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "Dosya zaten var, ü(s)tüne yaz, (e)kle yoksa i(p)tal mý?" + +#: muttlib.c:869 +msgid "oac" +msgstr "sep" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "Ileti POP eposta kutusuna kaydedilmiyor." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s bir eposta kutusu deðil!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "Iletiler %s'e eklensin mi?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "%s'ye varolan baðlantý kapatýldý" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL eriþilir deðil." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "Önceden baðlanma komutasý baþarýsýz oldu." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "%s'le konuþurken hata oldu (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "%s aranýyor..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "Sunucu \"%s\" bulunamýyor." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "%s'e baðlanýlýyor..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "%s (%s)'e baðlanýlýnamadý." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s güvenilir eriþim haklarýna sahip deðildir" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "CLOSE baþarýsýz oldu" + +#: mutt_ssl.c:333 +#, fuzzy +msgid "Unable to get certificate from peer" +msgstr "baþlangýç dizini belirlenemedi" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "%s (%s) kullanarak SSL baðlantýsý kuruluyor" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "Bilinmiyor" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[hesaplanamýyor]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[geçersiz tarih]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "Sunucu sertifikasý daha geçerli deðildir" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "Sunucu sertifikasýnýn süresi bitmiþtir" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "Sertifikanýn sahibi kuruluþ:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "Sertifikayý veren kuruluþ:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "Bu sertifika geçerlidir" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " %s'den" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " %s'e" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "Parmak izi: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL sertifika doðrulamasý" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ed'et, (s)adece bu defa , (h)erzaman kabul et" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "rsh" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ed'et, (s)adece bu defalýðýna kabul et" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "rs" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "Çýk " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "Ikaz: Sertifika kaydedilemedi" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "Sertifika kaydedildi" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Kilit sýnýrlandýrmasý aþýldý, %s için varolan kilit silinsin mi?" + +#: mx.c:128 +#, fuzzy, c-format +msgid "Can't dotlock %s.\n" +msgstr "%s kilitlenemedi\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "" + +#: mx.c:192 +#, fuzzy, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "Cevap bekleniyor..." + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "" + +#: mx.c:227 +#, fuzzy, c-format +msgid "Waiting for flock attempt... %d" +msgstr "Cevap bekleniyor..." + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "%s kilitlenemedi\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "%s okunuyor..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "%s yazýlýyor..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "Eposta kutusu %s'yi eþitlenemedi!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "Okunan iletiler %s'e taþýnsýn mý?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Silmek için iþaretlenmiþ %d ileti silinsin mi?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Silmek için iþaretlenmiþ %d ileti silinsin mi?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "Okunan iletiler %s'e taþýnýyor..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "eposta kutusu deðiþtirilmedi." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d kaldý, %d taþýndý, %d silindi." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d kaldý, %d silindi." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Yazabilir yapmak icýn '%s'e basýlýr" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "'toggle-write' ile yeniden yazýlabilir yapabilinir!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "eposta kutusu yazýlamayabilir yapýldý. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "Eposta kutusu kontrol edildi." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "Iletiyi yazamadým" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "Bu mönüde yoktur." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "Sa. Geri" + +#: pager.c:1447 +msgid "NextPg" +msgstr "Sa. Ileri" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "Eklenti göster" + +#: pager.c:1454 +msgid "Next" +msgstr "Ileri" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "Iletinin sonu gösteriliyor." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "Iletinin baþý gösteriliyor." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "Geriye dönük ara: " + +#: pager.c:1955 +msgid "Search: " +msgstr "Ara: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "Yardým þu an gösteriliyor." + +#: pager.c:2104 +#, fuzzy +msgid "No more quoted text." +msgstr "Daha fazla konum yok." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "" + +#: parse.c:597 +#, fuzzy +msgid "multipart message has no boundary parameter!" +msgstr "Hata: multipart/encrypted protokol verisi yok!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "Tabirde hata var: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "Geçersiz ay günü: %s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "Geçersiz ay : %s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "Geçersiz rölatif tarih: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "tabirde hata var" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "tabirde %s'de hata var" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c : geçersiz komuta" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c : bu türde desteklenmiyor" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "eksik argüman" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "hatalý parantez : %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "boþ tabir" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "Arama tabiri denetleniyor..." + +#: pattern.c:1134 +#, fuzzy +msgid "Executing command on matching messages..." +msgstr "Yeni ileti için bakýlýyor..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "Tabire uygun ileti yok." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "Arama iptal edildi." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "PGP parolasý unutuldu." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- Hata: PGP altiþlemi yaratýlamadý! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP geri verisi sonu --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP ILETISI BAÞI --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP RESMI ANAHTAR BÖLÜMÜ BAÞI --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP IMZALANMIÞ ILETI BAÞI --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP ILETI SONU --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP RESMI ANAHTAR BÖLÜMÜ SONU --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP IMZALANMIÞ ILETI SONU --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- Hata: PGP iletisinin baþýný bulamadým! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "Iç hata. Thomas R. <roessler@guug.de>'ye haber ver." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- Hata: PGP altiþlemini yaratamadým! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- Hata: Hatalý PGP/MIME iletisi! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- Hata: geçici dosya yaratýlamýyor! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- Bu bilgi PGP/MIME ile þifrelenmiþtir --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- PGP/MIME ile þifrelenmiþ bilgi sonu --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "PGP altiþlemi açýlamýyor!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "%s için anahtar numara = \"%s\" kullanýlsýn mý?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "%s için anahtar numarasýný belirleyin: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "PGP çalýþtýrýlamýyor" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "PGP anahtarý alýnýyor..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Yekin uyan anahtarlarýn süresi bitti yada geri alýndý." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Seç " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "Anahtarý kontrol et " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "<%s>'e uyan PGP anahtarlarý." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "\"%s\"'e uyan PGP anahtarlarý." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "/dev/null'ý açamadým" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "Geçici dosyayý yaratamadým" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Anahtar numara: 0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Bu anahtar kullanýlamaz: süresi bitti/kapalý/geriye alýndý." + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "Bu anahtarýn süresi bitti/kapalý/geriye alýndý." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Bu anahtar numarasýna güvenilmiyor." + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "Bu anahtar numarasýna çok az güveniliyor." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s Gerçekten bu anahtarý kullanmak ister misiniz?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "Anahtar numarasýný belirle: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Pgp çalýþtýrýlýyor...." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP anahtarý %s." + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "\"%s\" tabirine uyan anahtarlar aranýyor..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "TOP komutasý sunucu tarafýndan desteklenmiyor." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "Baþlýðý geçici bir dosyaya yazamadým!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "UIDL komutasý sunucu tarafýndan desteklenmiyor." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "Ileti listesi alýnýyor..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "iletiyi geçici bir dosyaya yazýlamadý!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "Yeni ileti için bakýlýyor..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP sunucusu belirlenmedi." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "POP eposta kutusunda yeni eposta yok." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "Iletiler sunucudan silinsin mi?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "Yeni iletileri okunuyor (%d bayt)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "Eposta kutusunu yazarken hata oldu!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%1$s [ %3$d iletiden %2$d ileti okundu]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "Sunucu baðlantýyý kesti!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "Doðrulanýyor (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "Doðrulanýyor (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP doðrulamasý baþarýsýz oldu." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "Sunucu USER komutasýný desteklentiiyor." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "Iletiler sunucuda býrakýlamýyor." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "%s'e baðlanýlýrken hata oldu" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "POP sunucuya varolan baðlantý kapatýlýyor..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "Ileti sayýsýný doðrula..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "Baðlantý kayboldu. Yeniden POP sunucusuna baðlanýlsýn mý?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "Kaydedilmiþ iletiler" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "Kaydedilmiþ ileti yok." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "Geçersiz PGP baþlýðý" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "Geçersiz PGP baþlýðý" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "Giriþ baþarýsýz oldu." + +#: query.c:46 +msgid "New Query" +msgstr "Yeni sorgulama" + +#: query.c:47 +msgid "Make Alias" +msgstr "Lakap yarat" + +#: query.c:48 +msgid "Search" +msgstr "Ara" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "Cevap bekleniyor..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "Sorgulama komutasý belirlenmedi." + +#: query.c:286 +msgid "Query" +msgstr "Sorgula" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "Sorgulama: " + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "Sorgulama '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "Boru" + +#: recvattach.c:53 +msgid "Print" +msgstr "Yazdýr" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "Kaydediliyor..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "Eklenti kaydedildi." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "IKAZ! %s'nin üstüne yazmak üzeresin, devam edilsin mi?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "Eklentiler filtra edildi." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "Filtra: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "Borula: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "%s eklentilerinin nasýl yazdýrýlacaðý bilinmiyor!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "Iþaretli ileti(leri) yazýlsýn mý?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "Eklenti yazdýrýlsýn mý?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Iþaretli hýc bir ileti yok." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "Eklentiler" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "Gösterilecek altbölümler yok!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "Eklenti POP sunucusundan silinemiyor." + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "PGP iletilerinin eklentilerinin silinmesi desteklenmiyor." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "" +"Sadece birden fazla bölümden oluþan eklentilerin silinmesi destekleniyor." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "Sadece ileti yada RFC822 bölümleri iletilebilir." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "Iletiyi gönderirken hata oldu." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "Iletiyi gönderirken hata oldu." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "Geçici dosya %s'yi açamadým." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "Eklenti olarak iletilsin mi?" + +#: recvcmd.c:458 +#, fuzzy +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" +"Yekin iþaretlenmiþ eklentiler çözülemiyor. Geriye kalanlar MIME'yle " +"þekillendirilsin mi?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "%s yaratýlamadý." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "Iþaretli hýc bir ileti yok." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "Eposta listesi bulunamadý!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" +"Yekin iþaretlenmiþ eklentiler çözülemiyor. Geriye kalanlar MIME'yle " +"þekillendirilsin mi?" + +#: remailer.c:480 +msgid "Append" +msgstr "Ekle" + +#: remailer.c:481 +msgid "Insert" +msgstr "Içer" + +#: remailer.c:482 +msgid "Delete" +msgstr "Sil" + +#: remailer.c:484 +msgid "OK" +msgstr "Oldu" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "" + +#: remailer.c:661 +#, fuzzy +msgid "You already have the first chain element selected." +msgstr "Ilk iletidesiniz." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "" + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster Cc yada Bcc baþlýklarý kabul etmez." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "Mixmaster kullanýrken yerel makina adý doðru belirtilmesi lazým!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "Iletiyi gönderirken hata oldu, altiþlem %d ile bitirildi.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "Iletiyi gönderirken hata oldu." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "\"%2$s\"'de satýr %3$d'de tip %1$s için hatalý birim vardýr" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "mailcap dizini belirlenmedi" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "%s için mailcap birimi bulunamadý" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "puan: yeterinden az argüman" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "puan: çok fazla argüman" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "Konu yok, iptal edilsin mi?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "Konu yok, iptal ediliyor." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "%s%s iye cevap verilsin mi?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "%s%s iye cevap gönderilsin mi?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "Hiç bir iþaretlenmiþ ileti gözükmüyor ki!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "Ileti cevap da içerilsin mi?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "Esas metin cevap bazý olarak kullanýlýyor..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "Istenilen her ileti içerilenemedi!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "Eklenti olarak iletilsin mi?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "Iletilmiþ ileti hazýrlanýyor..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Kaydedilmiþ ileti açýlsýn mý?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "Iletilmiþ ileti hazýrlanýyor..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "Deðiþtirilmemiþ ileti iptal edilsin mi?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "Deðiþtirilmemiþ ileti iptal edildi." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "eposta gönderilmedi." + +#: send.c:1430 +msgid "Message postponed." +msgstr "Ileti kaydedildi." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "Alýcý belirlenmemiþ!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "Alýcýlar belirlenmemiþ." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "Konu yok, gönderme iptal edilsin mi?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "Konu belirlenmemiþ." + +#: send.c:1526 +msgid "Sending message..." +msgstr "Ileti gönderiliyor..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "Ileti gönderilemedi." + +#: send.c:1672 +msgid "Mail sent." +msgstr "eposta gönderildi." + +#: send.c:1672 +msgid "Sending in background." +msgstr "Ardalanda gönderiliyor." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "Sýnýrlandýrma verisi bulunamadý! [bu hata rapor edilmesi gerek]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s daha yok!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s bir eposta kutusu deðildir!" + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "%s açýlanamadý" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "Ileti gönderilirken hata oldu, altiþlem %d ile iptal bitirildi (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Gönderme iþleminin geri verisi" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... Çýkýlýyor.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "%s yakalýnýyor... Çýkýlýyor.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "Sinyal %d alýndý... Çýkýlýyor.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "Çýk " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "Geçersiz ay : %s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "Bilinmiyor" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "%s için anahtar numarasýný belirleyin: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "\"%s\"'e uyan PGP anahtarlarý." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "%s için anahtar numara = \"%s\" kullanýlsýn mý?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "%s için anahtar numara = \"%s\" kullanýlsýn mý?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- Hata: PGP altiþlemi yaratýlamadý! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "Filtrayý yaratamadým" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(eposta kutusu yok)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "Ikaz: Sertifika kaydedilemedi" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "PGP altiþlemi açýlamýyor!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- PGP geri verisi sonu --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- Hata: PGP altiþlemi yaratýlamadý! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- Bu bilgi PGP/MIME ile þifrelenmiþtir --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- Bu bilgi imzalanmýþtýr --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- PGP/MIME ile þifrelenmiþ bilgi sonu --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Imzalanmýþ bilginin sonu --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "Eposta kutusu sýralanýyor..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "Sýralama iþlevi bulunamadý! [hata raporu yaz]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(eposta kutusu yok)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "Sýnýrlandýrýlmýþ bakýþta ana ileti görünemez." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Kök iletisi yok." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Pgp çalýþtýrýlýyor...." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "Ileti %s'e iletilsin mi...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "Iletiler %s'e iletilsin mi...?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "imfkcp" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "Sertifika kaydedildi" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Bu anahtar numarasýna olan güven belirlenmemiþ." + +#~ msgid "Decode-save" +#~ msgstr "Çöz-kaydet" + +#~ msgid "Decode-copy" +#~ msgstr "Çöz-kopyala" + +#~ msgid "Decrypt-save" +#~ msgstr "Deþifre et-kaydet" + +#~ msgid "Decrypt-copy" +#~ msgstr "Deþifre et-kopyala" + +#~ msgid "Copy" +#~ msgstr "Kopyala" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s [%s]\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- PGP geri veri sonu --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "Stat edemedim : %s" + +#~ msgid "%s: no such command" +#~ msgstr "%s: böyle bir komuta yoktur" + +#~ msgid "Authentication method is unknown." +#~ msgstr "Doðrulama metodu bilinmiyor." diff --git a/po/uk.gmo b/po/uk.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9b4f91fa71326d3542e3b4cf36770c1ed956ccba GIT binary patch literal 64513 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 literal 0 HcmV?d00001 diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..d60d185 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,4336 @@ +# Ukrainian translation for Mutt. +# Copyright (C) 1998 Free Software Foundation, Inc. +# Andrej N. Gritsenko <andrej@lucky.net>, 1998-2001. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.3.27/1.4\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2002-01-23 15:14+0200\n" +"Last-Translator: Andrej N. Gritsenko <andrej@lucky.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=koi8-u\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "ëÏÒÉÓÔÕ×ÁÞ Õ %s: " + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "ðÁÒÏÌØ ÄÌÑ %s@%s: " + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "÷ÉȦÄ" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "÷ÉÄ." + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "÷¦ÄÎ." + +#: addrbook.c:36 +msgid "Select" +msgstr "÷ɦÒ" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "ð¦ÄËÁÚËÁ" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "÷É ÎÅ ÍÁ¤ÔÅ ÖÏÄÎÏÇÏ ÐÓÅ×ÄÏΦÍÕ!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "ðÓÅ×ÄÏΦÍÉ" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "ðÓÅ×ÄÏÎ¦Í ÑË: " + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "÷É ×ÖÅ ÍÁ¤ÔÅ ÐÓÅ×ÄÏÎ¦Í ÎÁ ÃÅ ¦Í'Ñ!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "áÄÒÅÓÁ: " + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "ðÏ×ÎÅ ¦Í'Ñ: " + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] ÷¦ÒÎÏ?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "÷ÎÅÓÔÉ ÄÏ ÆÁÊÌÕ: " + +#: alias.c:342 +msgid "Alias added." +msgstr "ðÓÅ×ÄÏÎ¦Í ÄÏÄÁÎÏ." + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "îÅÍÁ¤ צÄÐÏצÄÎÏÇÏ ¦ÍÅΦ, ÄÁ̦?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "ëÏÍÐÏÎÕ×ÁÎÎÑ, ×ËÁÚÁÎÅ Õ mailcap, ÐÏÔÒÅÂÕ¤ %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "ðÏÍÉÌËÁ ×ÉËÏÎÁÎÎÑ \"%s\"!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "îÅ ×ÉÊÛÌÏ ×¦ÄËÒÉÔÉ ÆÁÊÌ ÄÌÑ ÒÏÚÂÏÒÕ ÚÁÇÏÌÏ×ËÕ." + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "îÅ ×ÉÊÛÌÏ ×¦ÄËÒÉÔÉ ÆÁÊÌ ÄÌÑ ÕÒ¦ÚÁÎÎÑ ÚÁÇÏÌÏ×ËÕ." + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "÷ mailcap ÎÅ ×ÉÚÎÁÞÅÎÏ ËÏÍÐÏÎÕ×ÁÎÎÑ %s, ÓÔ×ÏÒÅÎÏ ÐÏÒÏÖÎ¦Ê ÆÁÊÌ." + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "òÅÄÁÇÕ×ÁÎÎÑ, ×ËÁÚÁÎÅ Õ mailcap, ÐÏÔÒÅÂÕ¤ %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "÷ mailcap ÎÅ ×ÉÚÎÁÞÅÎÏ ÒÅÄÁÇÕ×ÁÎÎÑ %s" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "îÅ ÚÎÁÊÄÅÎÏ ×¦ÄÏÍÏÓÔÅÊ Õ mailcap. ðÏËÁÚÁÎÏ ÑË ÔÅËÓÔ." + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "ôÉÐ MIME ÎÅ ×ÉÚÎÁÞÅÎÏ. îÅÍÏÖÌÉ×Ï ÐÏÂÁÞÉÔÉ ÄÏÄÁÔÏË." + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Æ¦ÌØÔÒ" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Æ¦ÌØÔÒ" + +#: attach.c:824 +msgid "Write fault!" +msgstr "úÂ¦Ê ÚÁÐÉÓÕ!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "îÅ ÚÎÁÀ, ÑË ÃÅ ÄÒÕËÕ×ÁÔÉ!" + +#: browser.c:41 +msgid "Chdir" +msgstr "ëÁÔÁÌÏÇ" + +#: browser.c:42 +msgid "Mask" +msgstr "íÁÓËÁ" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ÎÅ ¤ ËÁÔÁÌÏÇÏÍ." + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "ðÏÛÔÏצ ÓËÒÉÎØËÉ [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "ð¦ÄÐÉÓÁΦ [%s] Ú ÍÁÓËÏÀ: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "ëÁÔÁÌÏÇ [%s] Ú ÍÁÓËÏÀ: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ËÁÔÁÌÏÇ!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "îÅÍÁ¤ ÆÁÊ̦×, ÝÏ ×¦ÄÐÏצÄÁÀÔØ ÍÁÓæ" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "óÔ×ÏÒÅÎÎÑ Ð¦ÄÔÒÉÍÕ¤ÔØÓÑ ÌÉÛÅ ÄÌÑ ÓËÒÉÎØÏË IMAP" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "÷ÉÄÁÌÅÎÎÑ Ð¦ÄÔÒÉÍÕ¤ÔØÓÑ ÌÉÛÅ ÄÌÑ ÓËÒÉÎØÏË IMAP" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "÷ÐÅ×ÎÅΦ Õ ×ÉÄÁÌÅÎΦ ÓËÒÉÎØËÉ \"%s\"?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ×ÉÄÁÌÅÎÏ." + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÎÅ ×ÉÄÁÌÅÎÏ." + +#: browser.c:923 +msgid "Chdir to: " +msgstr "ðÅÒÅÊÔÉ ÄÏ: " + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "ëÁÔÁÌÏÇ ÎÅ ÓËÁÎÕ¤ÔØÓÑ." + +#: browser.c:975 +msgid "File Mask: " +msgstr "íÁÓËÁ: " + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "ú×ÏÒÏÔÎØÏ ÓÏÒÔÕ×ÁÔÉ ÚÁ ÄÁÔÏÀ(d), ̦ÔÅÒÏÀ(a), ÒÏÚͦÒÏÍ(s), ÞÉ Î¦(n)?" + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "óÏÒÔÕ×ÁÔÉ ÚÁ ÄÁÔÏÀ(d), ̦ÔÅÒÏÀ(a), ÒÏÚͦÒÏÍ(s), ÞÉ Î¦(n)?" + +#: browser.c:1049 +msgid "dazn" +msgstr "" + +#: browser.c:1115 +msgid "New file name: " +msgstr "¶Í'Ñ ÎÏ×ÏÇÏ ÆÁÊÌÕ: " + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "îÅÍÏÖÌÉ×Ï ÐÏÂÁÞÉÔÉ ËÁÔÁÌÏÇ" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "îÅÍÏÖÌÉ×Ï ÐÏÂÁÞÉÔÉ ÆÁÊÌ" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "îÏ×Á ÐÏÛÔÁ × %s." + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s: ËÏÌ¦Ò ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ term" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s: ÔÁËÏÇÏ ËÏÌØÏÒÕ ÎÅÍÁ¤" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s: ÔÁËÏÇÏ ÏÂ'¤ËÔÕ ÎÅÍÁ¤" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s: ËÏÍÁÎÄÁ ÍÏÖÌÉ×Á Ô¦ÌØËÉ Õ ÓÐÉÓËÏצ ÌÉÓÔ¦×" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×" + +#: color.c:563 +msgid "Missing arguments." +msgstr "îÅÄÏÓÔÁÔÎØÏ ÁÒÇÕÍÅÎÔ¦×." + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "color: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "mono: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s: ÔÁËÏÇÏ ÁÔÒ¦ÂÕÔÕ ÎÅÍÁ¤" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×" + +#: color.c:721 +msgid "default colors not supported" +msgstr "ËÏÌ¦Ò default ΊЦÄÔÒÉÍÕ¤ÔØÓÑ" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "ðÅÒÅצÒÉÔÉ Ð¦ÄÐÉÓ PGP?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "îÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Æ¦ÌØÔÒ ×¦ÄÏÂÒÁÖÅÎÎÑ" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "îÅ ×ÉÊÛÌÏ ÓËÏЦÀ×ÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÅÎÏ." + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÉÔÉ ÎÅÍÏÖÌÉ×Ï." + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÅÎÏ." + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "ð¦ÄÐÉÓ PGP ÐÅÒÅצÒÉÔÉ ÎÅÍÏÖÌÉ×Ï." + +#: commands.c:223 +msgid "Command: " +msgstr "ëÏÍÁÎÄÁ: " + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "îÁĦÓÌÁÔÉ ËÏЦÀ ÌÉÓÔÁ: " + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "îÁĦÓÌÁÔÉ ËÏЦ§ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×: " + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "ðÏÍÉÌËÁ ÒÏÚÂÏÒÕ ÁÄÒÅÓÉ!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "îÁĦÓÌÁÔÉ ËÏЦÀ ÌÉÓÔÁ %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "îÁĦÓÌÁÔÉ ËÏЦ§ ÌÉÓÔ¦× %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "ëÏЦÀ ÌÉÓÔÁ ÐÅÒÅÓÌÁÎÏ." + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "ëÏЦ§ ÌÉÓÔ¦× ÐÅÒÅÓÌÁÎÏ." + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "ëÏЦÀ ÌÉÓÔÁ ÐÅÒÅÓÌÁÎÏ." + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "ëÏЦ§ ÌÉÓÔ¦× ÐÅÒÅÓÌÁÎÏ." + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ÐÒÏÃÅÓ Æ¦ÌØÔÒÕ" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "ðÅÒÅÄÁÔÉ ÄÏ ÐÒÏÇÒÁÍÉ: " + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "ëÏÍÁÎÄÕ ÄÌÑ ÄÒÕËÕ ÎÅ ×ÉÚÎÁÞÅÎÏ." + +#: commands.c:483 +msgid "Print message?" +msgstr "äÒÕËÕ×ÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "äÒÕËÕ×ÁÔÉ ×ÉĦÌÅΦ ÐÏצÄÏÍÌÅÎÎÑ?" + +#: commands.c:492 +msgid "Message printed" +msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÁÄÒÕËÏ×ÁÎÏ" + +#: commands.c:492 +msgid "Messages printed" +msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÁÄÒÕËÏ×ÁÎÏ" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÅ ÍÏÖÅ ÂÕÔÉ ÎÁÄÒÕËÏ×ÁÎÏ" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÅ ÍÏÖÕÔØ ÂÕÔÉ ÎÁÄÒÕËÏ×ÁΦ" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "" + +#: commands.c:559 +msgid "Shell command: " +msgstr "ëÏÍÁÎÄÁ ÓÉÓÔÅÍÉ: " + +#: commands.c:701 +#, c-format +msgid "Decode-save%s to mailbox" +msgstr "òÏÚËÏÄÕ×ÁÔÉ-ÐÅÒÅÎÅÓÔÉ%s ÄÏ ÓËÒÉÎØËÉ" + +#: commands.c:702 +#, c-format +msgid "Decode-copy%s to mailbox" +msgstr "òÏÚËÏÄÕ×ÁÔÉ-ËÏЦÀ×ÁÔÉ%s ÄÏ ÓËÒÉÎØËÉ" + +#: commands.c:703 +#, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "òÏÚÛÉÆÒÕ×ÁÔÉ-ÐÅÒÅÎÅÓÔÉ%s ÄÏ ÓËÒÉÎØËÉ" + +#: commands.c:704 +#, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "òÏÚÛÉÆÒÕ×ÁÔÉ-ËÏЦÀ×ÁÔÉ%s ÄÏ ÓËÒÉÎØËÉ" + +#: commands.c:705 +#, c-format +msgid "Save%s to mailbox" +msgstr "ðÅÒÅÎÅÓÔÉ%s ÄÏ ÓËÒÉÎØËÉ" + +#: commands.c:705 +#, c-format +msgid "Copy%s to mailbox" +msgstr "ëÏЦÀ×ÁÔÉ%s ÄÏ ÓËÒÉÎØËÉ" + +#: commands.c:706 +msgid " tagged" +msgstr " ×ÉĦÌÅΦ" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "ëÏЦÀ×ÁÎÎÑ ÄÏ %s..." + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "ðÅÒÅÔ×ÏÒÉÔÉ ÎÁ %s ÐÒÉ ÎÁÄÓÉÌÁÎΦ?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "ôÉÐ ÄÏÄÁÔËÕ ÚͦÎÅÎÏ ÎÁ %s." + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "ëÏÄÕ×ÁÎÎÑ ÚͦÎÅÎÏ ÎÁ %s; %s." + +#: commands.c:914 +msgid "not converting" +msgstr "ÎÅ ÐÅÒÅÔ×ÏÒÅÎÏ" + +#: commands.c:914 +msgid "converting" +msgstr "ÐÅÒÅÔ×ÏÒÅÎÏ" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "äÏÄÁÔË¦× ÎÅÍÁ¤." + +#: compose.c:84 +msgid "Send" +msgstr "óÌÁÔÉ" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "÷¦ÄͦÎÁ" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "äÏÄÁÔÉ ÆÁÊÌ" + +#: compose.c:90 +msgid "Descrip" +msgstr "ðÏÑÓÎ." + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "ð¦ÄÐÉÓ, ÛÉÆÒÕ×ÁÎÎÑ" + +#: compose.c:129 +msgid "Encrypt" +msgstr "ûÉÆÒÕ×ÁÎÎÑ" + +#: compose.c:131 +msgid "Sign" +msgstr "ð¦ÄÐÉÓ" + +#: compose.c:133 +msgid "Clear" +msgstr "îÅ ÚÁÓÔÏÓÏ×Õ×ÁÔÉ" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " ЦÄÐÉÓ ÑË:" + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<ÚÁ ÚÍÏ×ÞÁÎÎÑÍ>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "ûÉÆÒÕ×ÁÎÎÑ" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "ÛÉÆÒ.(e), ЦÄÐ.(s), ЦÄÐ. ÑË(a), ÕÓÅ(b) ÞÉ ×¦ÄͦÎÁ(f)? " + +#: compose.c:166 +msgid "esabf" +msgstr "" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "ð¦ÄÐÉÓ ÑË: " + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "ÛÉÆÒ.(e), ЦÄÐ.(s), ЦÄÐ. ÑË(a), ÕÓÅ(b) ÞÉ ×¦ÄͦÎÁ(f)? " + +#: compose.c:228 +msgid "eswabf" +msgstr "" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ¦ÌØÛÅ ÎÅ ¦ÓÎÕ¤!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] ÚͦÎÅÎÏ. úͦÎÉÔÉ ËÏÄÕ×ÁÎÎÑ?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- äÏÄÁÔËÉ" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "ãÅ ¤ÄÉÎÁ ÞÁÓÔÉÎÁ ÌÉÓÔÁ, §§ ÎÅ ÍÏÖÎÁ ×ÉÄÁÌÑÔÉ." + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "äÏÄÁ×ÁÎÎÑ ×ÉÂÒÁÎÉÈ ÆÁÊ̦×..." + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "óËÒÉÎØËÁ, Ú ÑËϧ ÄÏÄÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "ãÑ ÓËÒÉÎØËÁ ÚÏ×Ó¦Í ÐÏÒÏÖÎÑ." + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "÷ÉĦ̦ÔØ ÐÏצÄÏÍÌÅÎÎÑ, ÝÏ ÄÏÄÁ¤ÔÅ!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "ðÅÒÅËÏÄÕ×ÁÎÎÑ ÍÏÖÅ ÂÕÔÉ ÚÁÓÔÏÓÏ×ÁÎÅ Ô¦ÌØËÉ ÄÏ ÔÅËÓÔÏ×ÉÈ ÄÏÄÁÔ˦×." + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "ðÏÔÏÞÎÉÊ ÄÏÄÁÔÏË ÎÅ ÂÕÄÅ ÐÅÒÅÔ×ÏÒÅÎÏ." + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "ðÏÔÏÞÎÉÊ ÄÏÄÁÔÏË ÂÕÄÅ ÐÅÒÅÔ×ÏÒÅÎÏ." + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "îÅצÒÎÅ ËÏÄÕ×ÁÎÎÑ." + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "úÂÅÒÅÇÔÉ ËÏЦÀ ÃØÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "ðÅÒÅÊÍÅÎÕ×ÁÔÉ Õ: " + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, c-format +msgid "Can't stat %s: %s" +msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÄÁΦ %s: %s" + +#: compose.c:1141 +msgid "New file: " +msgstr "îÏ×ÉÊ ÆÁÊÌ: " + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type ÐÏ ÆÏÒͦ base/sub" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "îÅצÄÏÍÉÊ Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ÆÁÊÌ %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "îÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÄÏÄÁÔÏË" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "úÁÌÉÛÉÔÉ ÌÉÓÔ ÄÏ ÐÏÄÁÌØÛÏÇÏ ÒÅÄÁÇÕ×ÁÎÎÑ ÔÁ צÄÐÒÁ×ËÉ?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "úÁÐÉÓÁÔÉ ÌÉÓÔ ÄÏ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "úÁÐÉÓ ÌÉÓÔÁ ÄÏ %s..." + +#: compose.c:1305 +msgid "Message written." +msgstr "ìÉÓÔ ÚÁÐÉÓÁÎÏ." + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- ÔÅËÓÔ ÎÁ ×ÉÈÏĦ PGP (ÞÁÓ: %c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "ëÏÄÏ×Õ ÆÒÁÚÕ PGP ÚÁÂÕÔÏ." + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "÷×ÅĦÔØ ËÏÄÏ×Õ ÆÒÁÚÕ PGP:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "÷×ÅĦÔØ ËÏÄÏ×Õ ÆÒÁÚÕ PGP:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "óÔ×ÏÒÉÔÉ application/pgp ÌÉÓÔ?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "÷ÉËÌÉË PGP..." + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- ðÏÍÉÌËÁ: ÎÅÓÕͦÓÎÁ ÓÔÒÕËÔÕÒÁ multipart/signed! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- ðÏÍÉÌËÁ: ÎÅצÄÏÍÉÊ ÐÒÏÔÏËÏÌ multipart/signed %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÐÅÒÅצÒÑÔÉ %s/%s ЦÄÐÉÓÉ. --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- îÁÓÔÕÐΦ ÄÁΦ ЦÄÐÉÓÁÎÏ --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÚÎÁÊÔÉ ÖÏÄÎÏÇÏ Ð¦ÄÐÉÓÕ. --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "[-- ë¦ÎÅÃØ Ð¦ÄÐÉÓÁÎÉÈ ÄÁÎÉÈ --]\n" + +#: curs_lib.c:157 +msgid "yes" +msgstr "" + +#: curs_lib.c:158 +msgid "no" +msgstr "" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "ðÏËÉÎÕÔÉ Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "ÎÅצÄÏÍÁ ÐÏÍÉÌËÁ" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "îÁÔÉÓΦÔØ ÂÕÄØ-ÑËÕ ËÌÁצÛÕ..." + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " ('?' - ÐÅÒÅ̦Ë): " + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "îÅÍÁ¤ צÄËÒÉÔϧ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ." + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "öÏÄÎÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ ÎÅÍÁ¤." + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ צÄËÒÉÔÁ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ" + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "æÕÎËæÀ ÎÅ ÄÏÚ×ÏÌÅÎÏ × ÒÅÖÉͦ ÄÏÄÁ×ÁÎÎÑ ÐÏצÄÏÍÌÅÎÎÑ." + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "öÏÄÎÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ ÎÅ ×ÉÄÎÏ." + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "÷צÍËÎÕÔÉ ÚÁÐÉÓ ÓËÒÉÎØËÉ, ÝÏ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ, ÎÅÍÏÖÌÉ×Ï!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "úͦÎÉ Õ ÓËÒÉÎØæ ÂÕÄÅ ÚÁÐÉÓÁÎÏ ÐÏ ×ÉÈÏÄÕ Ú Îŧ." + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "úͦÎÉ Õ ÓËÒÉÎØæ ÎÅ ÂÕÄÅ ÚÁÐÉÓÁÎÏ." + +#: curs_main.c:397 +msgid "Quit" +msgstr "÷ÉÊÔÉ" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "úÂÅÒ." + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "ìÉÓÔ" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "÷¦ÄÐ." + +#: curs_main.c:403 +msgid "Group" +msgstr "÷Ó¦Í" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚͦÎÉÌÁ ÚÏ×ΦÛÎÑ ÐÒÏÇÒÁÍÁ. æÌÁÇÉ ÍÏÖÕÔØ ÂÕÔÉ ÚͦÎÅΦ." + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "îÏ×Á ÐÏÛÔÁ Õ Ã¦Ê ÐÏÛÔÏ×¦Ê ÓËÒÉÎØæ." + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚͦÎÉÌÁ ÚÏ×ΦÛÎÑ ÐÒÏÇÒÁÍÁ." + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "öÏÄÎÏÇÏ ÌÉÓÔÁ ÎÅ ×ÉĦÌÅÎÏ." + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "ú'¤ÄÎÁÎÎÑ Ú %s..." + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "ðÅÒÅÊÔÉ ÄÏ ÌÉÓÔÁ: " + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "áÒÇÕÍÅÎÔ ÐÏ×ÉÎÅÎ ÂÕÔÉ ÎÏÍÅÒÏÍ ÌÉÓÔÁ." + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "ãÅÊ ÌÉÓÔ ÎÅ ÍÏÖÎÁ ÐÏÂÁÞÉÔÉ." + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "îÅצÒÎÉÊ ÎÏÍÅÒ ÌÉÓÔÁ." + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "÷ÉÄÁÌÉÔÉ ÌÉÓÔÉ ÚÁ ÛÁÂÌÏÎÏÍ: " + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "îÅ ×ÓÔÁÎÏ×ÌÅÎÏ ÏÂÍÅÖÅÎØ." + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "ïÂÍÅÖÅÎÎÑ: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "ïÂÍÅÖÉÔÉÓØ ÐÏצÄÏÍÌÅÎÎÑÍÉ ÚÁ ÛÁÂÌÏÎÏÍ: " + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "÷ÉÊÔÉ Ú Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "÷ÉĦÌÉÔÉ ÌÉÓÔÉ ÚÁ ÛÁÂÌÏÎÏÍ: " + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "÷¦ÄÎÏ×ÉÔÉ ÌÉÓÔÉ ÚÁ ÛÁÂÌÏÎÏÍ: " + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "úÎÑÔÉ ×ÉĦÌÅÎÎÑ Ú ÌÉÓÔ¦× ÚÁ ÛÁÂÌÏÎÏÍ: " + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "÷¦ÄËÒÉÔÉ ÓËÒÉÎØËÕ ÌÉÛÅ ÄÌÑ ÞÉÔÁÎÎÑ" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "÷¦ÄËÒÉÔÉ ÓËÒÉÎØËÕ" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ÎÅ ¤ ÐÏÛÔÏ×ÏÀ ÓËÒÉÎØËÏÀ." + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "ðÏËÉÎÕÔÉ Mutt ÂÅÚ ÚÂÅÒÅÖÅÎÎÑ ÚͦÎ?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "ãÅ ÏÓÔÁÎÎ¦Ê ÌÉÓÔ." + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "÷Ó¦ ÌÉÓÔÉ ×ÉÄÁÌÅÎÏ." + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "ãÅ ÐÅÒÛÉÊ ÌÉÓÔ." + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "äÏÓÑÇÎÕÔÏ Ë¦ÎÅÃØ. ðÏÛÕË ÐÅÒÅÎÅÓÅÎÏ ÎÁ ÐÏÞÁÔÏË." + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "äÏÓÑÇÎÕÔÏ ÐÏÞÁÔÏË. ðÏÛÕË ÐÅÒÅÎÅÓÅÎÏ ÎÁ ˦ÎÅÃØ." + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "îÅÍÁ¤ ÎÏ×ÉÈ ÌÉÓÔ¦×" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "îÅÍÁ¤ ÎÅÞÉÔÁÎÉÈ ÌÉÓÔ¦×" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " Õ ÃÉÈ ÍÅÖÁÈ ÏÇÌÑÄÕ" + +#: curs_main.c:1405 pager.c:2337 +msgid "Can't change 'important' flag on POP server." +msgstr "îÅÍÏÖÌÉ×Ï ÚͦÎÉÔÉ ÆÌÁÇ '×ÁÖÌÉ×Å' ÎÁ POP ÓÅÒ×ÅÒ¦." + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "âÅÓ¦Ä Â¦ÌØÛ ÎÅÍÁ." + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "ãÅ ÐÅÒÛÁ ÂÅÓ¦ÄÁ." + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "óÛÉ×ÁÎÎÑ ÎÅÄÏÓÔÕÐÎÅ." + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "âÅÓ¦ÄÁ ÍÁ¤ ÎÅÞÉÔÁΦ ÌÉÓÔÉ." + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "îÅÍÏÖÌÉ×Ï ÒÅÄÁÇÕ×ÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ ÎÁ POP ÓÅÒ×ÅÒ¦." + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\tÄÏÄÁÔÉ ÒÑÄÏË, ÝÏ ÐÏÞÉÎÁ¤ÔØÓÑ Ú ¤ÄÉÎϧ ~\n" +"~b ÁÄÒÅÓÉ\tÄÏÄÁÔÉ ÁÄÒÅÓÉ ÄÏ Bcc:\n" +"~c ÁÄÒÅÓÉ\tÄÏÄÁÔÉ ÁÄÒÅÓÉ ÄÏ Cc:\n" +"~f ÌÉÓÔÉ\tÄÏÄÁÔÉ ÌÉÓÔÉ\n" +"~F ÌÉÓÔÉ\tÔÅ Ö ÓÁÍÅ, ÝÏ Ê ~f, ÚÁ ×ÉÎÑÔËÏÍ ÚÁÇÏÌÏ×˦×\n" +"~h\t\tÒÅÄÁÇÕ×ÁÔÉ ÚÁÇÏÌÏ×ÏË ÌÉÓÔÁ\n" +"~m ÌÉÓÔÉ\tÄÏÄÁÔÉ ÌÉÓÔÉ, ÑË ÃÉÔÕ×ÁÎÎÑ\n" +"~M ÌÉÓÔÉ\tÔÅ Ö ÓÁÍÅ, ÝÏ Ê ~m, ÚÁ ×ÉÎÑÔËÏÍ ÚÁÇÏÌÏ×˦×\n" +"~p\t\tÄÒÕËÕ×ÁÔÉ ÌÉÓÔ\n" +"~q\t\tÚÁÐÉÓÁÔÉ ÆÁÊÌ ÔÁ ×ÉÊÔÉ Ú ÒÅÄÁËÔÏÒÁ\n" +"~r ÆÁÊÌ\t\tÄÏÄÁÔÉ ÔÅËÓÔ Ú ÆÁÊÌÕ × ÌÉÓÔ\n" +"~t ÁÄÒÅÓÉ\tÄÏÄÁÔÉ ÁÄÒÅÓÉ ÄÏ To:\n" +"~u\t\tÐÏ×ÔÏÒÉÔÉ ÐÏÐÅÒÅÄÎ¦Ê ÒÑÄÏË\n" +"~v\t\tÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ ÒÅÄÁËÔÏÒÏÍ $visual\n" +"~w ÆÁÊÌ\t\tÚÁÐÉÓÁÔÉ ÌÉÓÔ ÄÏ ÆÁÊÌÕ\n" +"~x\t\tצÄͦÎÉÔÉ ÚͦÎÉ ÔÁ ×ÉÊÔÉ Ú ÒÅÄÁËÔÏÒÁ\n" +"~?\t\tÃÅ ÐÏצÄÏÍÌÅÎÎÑ\n" +".\t\tÒÑÄÏË Ú ÏÄΦ¤§ ËÒÁÐËÉ - ÐÒÉÚÎÁË Ë¦ÎÃÑ ××ÏÄÕ\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d: ÎÅצÒÎÉÊ ÎÏÍÅÒ ÌÉÓÔÁ.\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(úÁ˦ÎÞ¦ÔØ ÌÉÓÔ ÒÑÄËÏÍ, ÝÏ ÓËÌÁÄÁ¤ÔØÓÑ Ú ÏÄΦ¤§ . )\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "îÅ ÐÏÛÔÏ×Á ÓËÒÉÎØËÁ.\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "ìÉÓÔ Í¦ÓÔÉÔØ:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(ÄÁ̦)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "ÎÅÍÁ¤ ¦ÍÅΦ ÆÁÊÌÕ.\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "÷ ÌÉÓÔ¦ - ÖÏÄÎÏÇÏ ÒÑÄËÕ.\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s: ÎÅצÄÏÍÁ ËÏÍÁÎÄÁ ÒÅÄÁËÔÏÒÁ (~? - ЦÄËÁÚËÁ)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "ÎÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×Õ ÓËÒÉÎØËÕ: %s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "ÎÅ ×ÉÊÛÌÏ ÚÁÐÉÓÁÔÉ ÔÉÍÞÁÓÏ×Õ ÓËÒÉÎØËÕ: %s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "ÎÅ ×ÉÊÛÌÏ ÚÁÐÉÓÁÔÉ ÔÉÍÞÁÓÏ×Õ ÓËÒÉÎØËÕ: %s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "æÁÊÌ ÐÏצÄÏÍÌÅÎØ ÐÏÒÏÖΦÊ!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "ðÏצÄÏÍÌÅÎÎÑ ÎÅ ÚͦÎÅÎÏ!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ÆÁÊÌ ÐÏצÄÏÍÌÅÎÎÑ: %s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ÄÏ ÓËÒÉÎØËÉ: %s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "ðÏÍÉÌËÁ. òÅÚÅÒ×Õ×ÁÎÎÑ ÔÉÍÞÁÓÏ×ÏÇÏ ÆÁÊÌÕ: %s" + +#: flags.c:332 +msgid "Set flag" +msgstr "÷ÓÔÁÎÏ×ÉÔÉ ÆÌÁÇ" + +#: flags.c:332 +msgid "Clear flag" +msgstr "úÎÑÔÉ ÆÌÁÇ" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "" +"[-- ðÏÍÉÌËÁ: ÖÏÄÎÕ ÞÁÓÔÉÎÕ Multipart/Alternative ÎÅ ×ÉÊÛÌÏ ÐÏÂÁÞÉÔÉ! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- äÏÄÁÔÏË ÎÏÍÅÒ %d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- ôÉÐ: %s/%s, ËÏÄÕ×ÁÎÎÑ: %s, ÒÏÚͦÒ: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- á×ÔÏÐÒÏÇÌÑÄÁÎÎÑ ÚÁ ÄÏÐÏÍÏÇÏÀ %s --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "÷ÉËÌÉË ËÏÍÁÎÄÉ Á×ÔÏÍÁÔÉÞÎÏÇÏ ÐÒÏÇÌÑÄÁÎÎÑ: %s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- îÅÍÏÖÌÉ×Ï ×ÉËÏÎÁÔÉ %s. --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- ðÒÏÇÒÁÍÍÁ ÐÒÏÇÌÑÄÁÎÎÑ %s ÐÏצÄÏÍÉÌÁ ÐÏÍÉÌËÕ --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- ðÏÍÉÌËÁ: message/external-body ÎÅ ÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÔÉÐÕ ÄÏÓÔÕÐÕ --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- ãÅÊ %s/%s ÄÏÄÁÔÏË " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(ÒÏÚÍ. %s ÂÁÊÔ) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "ÂÕÌÏ ×ÉÄÁÌÅÎÏ --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- ¦Í'Ñ: %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- ãÅÊ %s/%s ÄÏÄÁÔÏË ÎÅ ×ËÌÀÞÅÎÏ, --]\n" + +#: handler.c:1689 +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "[-- צÄÐÏצÄÎÅ ÚÏ×ΦÛΤ ÄÖÅÒÅÌÏ ×ÉÄÁÌÅÎÏ ÚÁ ÄÁ×ΦÓÔÀ. --]\n" + +#: handler.c:1707 +#, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "[-- צÄÐÏצÄÎÉÊ ÔÉÐ ÄÏÓÔÕÐÕ %s ΊЦÄÔÒÉÍÕ¤ÔØÓÑ --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "ðÏÍÉÌËÁ: ÎÅÍÁ¤ ÐÒÏÔÏËÏÌÕ ÄÌÑ multipart/signed." + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "ðÏÍÉÌËÁ: ÎÅÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÐÒÏÔÏËÏÌÕ ÄÌÑ multipart/encrypted!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s ΊЦÄÔÒÉÍÕ¤ÔØÓÑ " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(×ÉËÏÒÉÓÔÏ×ÕÊÔÅ '%s' ÄÌÑ Ã¦¤§ ÞÁÓÔÉÎÉ)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(ÔÒÅÂÁ ÐÒÉÚÎÁÞÉÔÉ ËÌÁצÛÕ ÄÏ 'view-attachments'!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s: ÎÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ÆÁÊÌ" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "ðïíéìëá: ÂÕÄØ ÌÁÓËÁ, ÐÏצÄÏÍÔÅ ÐÒÏ ÃÅÊ ÎÅÄÏ̦Ë" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"âÁÚÏצ ÐÒÉÚÎÁÞÅÎÎÑ:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"îÅ ÐÒÉÚÎÁÞÅΦ ÆÕÎËæ§:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "ð¦ÄËÁÚËÁ ÄÏ %s" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: îÅÍÏÖÌÉ×Ï ÚÒÏÂÉÔÉ unhook * Ú hook." + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook: ÎÅצÄÏÍÉÊ ÔÉÐ hook: %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook: îÅÍÏÖÌÉ×Ï ×ÉÄÁÌÉÔÉ %s Ú %s." + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "áÕÔÅÎÔÉƦËÁÔÏÒ¦× ÎÅÍÁ¤." + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "áÕÔÅÎÔÉƦËÁÃ¦Ñ (anonymous)..." + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "ðÏÍÉÌËÁ ÁÎÏΦÍÎϧ ÁÕÔÅÎÔÉƦËÁæ§." + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "áÕÔÅÎÔÉƦËÁÃ¦Ñ (CRAM-MD5)..." + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁæ§ CRAM-MD5." + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "áÕÔÅÎÔÉƦËÁÃ¦Ñ (GSSAPI)..." + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁæ§ GSSAPI." + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "LOGIN ÎÅÄÏÓÔÕÐÅÎ ÎÁ ÃØÏÍÕ ÓÅÒ×ÅÒ¦." + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "òŤÓÔÒÁæÑ..." + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "ðÏÍÉÌËÁ ÒŤÓÔÒÁæ§." + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "áÕÔÅÎÔÉƦËÁÃ¦Ñ (APOP)..." + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁæ§ SASL." + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "%s - ÎÅÐÒÉÐÕÓÔÉÍÉÊ ÛÌÑÈ IMAP" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "ïÔÒÉÍÁÎÎÑ ÐÒÏÓÔÏÒÕ ¦ÍÅÎ..." + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "ïÔÒÉÍÁÎÎÑ ÐÅÒÅ̦ËÕ ÓËÒÉÎØÏË..." + +#: imap/browse.c:219 +msgid "No such folder" +msgstr "ôÁËϧ ÓËÒÉÎØËÉ ÎÅÍÁ¤" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "óÔ×ÏÒÉÔÉ ÓËÒÉÎØËÕ: " + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ÍÕÓÉÔØ ÍÁÔÉ ¦Í'Ñ." + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÓÔ×ÏÒÅÎÏ." + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚÁËÒÉÔÏ" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "æÁÔÁÌØÎÁ ÐÏÍÉÌËÁ. ì¦ÞÉÌØÎÉË ÌÉÓÔ¦× ÎÅÍÏÖÌÉ×Ï Ó¦ÎÈÒÏΦÚÕ×ÁÔÉ!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "úÁËÒÉÔÔÑ Ú'¤ÄÎÁÎÎÑ Ú %s..." + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "ãÅÊ ÓÅÒ×ÅÒ IMAP ÎÁÄÔÏ ÄÁ×ΦÊ. Mutt ÎÅ ÍÏÖÅ ÐÒÁÃÀ×ÁÔÉ Ú ÎÉÍ." + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "ëÏÄÏ×ÁÎÅ Ú'¤ÄÎÁÎÎÑ Ú TLS?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "îÅ ×ÉÊÛÌÏ ÄÏÍÏ×ÉÔÉÓØ ÐÒÏ TLS Ú'¤ÄÎÁÎÎÑ" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "÷ÉÂ¦Ò %s..." + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "ðÏÍÉÌËÁ צÄËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "îÅÍÏÖÌÉ×Ï ÄÏÄÁ×ÁÔÉ ÄÏ ÓËÒÉÎØÏË IMAP ÎÁ ÃØÏÍÕ ÓÅÒ×ÅÒ¦" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "óÔ×ÏÒÉÔÉ %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "úÁËÒÉÔÔÑ Ú'¤ÄÎÁÎÎÑ Ú ÓÅÒ×ÅÒÏÍ IMAP..." + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "íÁÒËÕ×ÁÎÎÑ %d ÎÏ×ÉÈ ÐÏצÄÏÍÌÅÎØ ×ÉÄÁÌÅÎÉÍÉ..." + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "ðÏÍÉÌËÁ ×ÉÄÁÌÅÎÎÑ" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "úÂÅÒÅÖÅÎÎÑ ÆÌÁÇ¦× ÓÔÁÔÕÓÕ ÌÉÓÔÁ... [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "÷ÉÄÁÌÅÎÎÑ ÐÏצÄÏÍÌÅÎØ Ú ÓÅÒ×ÅÒÕ..." + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "imap_sync_mailbox: ÐÏÍÉÌËÁ EXPUNGE" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "ðÏÍÉÌËÁ CLOSE" + +#: imap/imap.c:1342 +msgid "Bad mailbox name" +msgstr "ðÏÇÁÎÅ ¦Í'Ñ ÄÌÑ ÓËÒÉÎØËÉ" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "ð¦ÄÐÉÓÕ×ÁÎÎÑ ÄÏ %s..." + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "÷¦ÄÐÉÓÕ×ÁÎÎÑ ×¦Ä %s..." + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "ú ÓÅÒ×ÅÒÕ IMAP 椧 ×ÅÒÓ¦§ ÏÔÒÉÍÁÔÉ ÚÁÇÏÌÏ×ËÉ ÎÅÍÏÖÌÉ×Ï." + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "îÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "ïÔÒÉÍÁÎÎÑ ÚÁÇÏÌÏ×Ë¦× ÌÉÓÔ¦×... [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "ïÔÒÉÍÁÎÎÑ ÌÉÓÔÁ..." + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "îÅËÏÒÅËÔÎÉÊ ÎÏÍÅÒ ÐÏצÄÏÍÌÅÎÎÑ. óÐÒÏÂÕÊÔŠצÄËÒÉÔÉ ÓËÒÉÎØËÕ ÝÅ ÒÁÚ." + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "÷¦ÄÐÒÁ×ÌÅÎÎÑ ÌÉÓÔÁ..." + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "ëÏЦÀ×ÁÎÎÑ %d ÌÉÓÔ¦× ÄÏ %s..." + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "ëÏЦÀ×ÁÎÎÑ %d ÌÉÓÔÁ ÄÏ %s..." + +#: imap/util.c:239 +msgid "Continue?" +msgstr "äÁ̦?" + +#: init.c:611 +msgid "alias: no address" +msgstr "alias: ÁÄÒÅÓÉ ÎÅÍÁ¤" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "ÎÅצÒÎÅ ÐÏÌÅ ÚÁÇÏÌÏ×ËÕ" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s: ÎÅצÄÏÍÉÊ ÍÅÔÏÄ ÓÏÒÔÕ×ÁÎÎÑ" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_default(%s): ÐÏÍÉÌËÁ ×ÉÒÁÚÕ: %s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s: ÎÅצÄÏÍÁ ÚͦÎÎÁ" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "ÐÒÅƦËÓ ÎÅÐÒÉÐÕÓÔÉÍÉÊ ÄÌÑ ÓËÉÄÁÎÎÑ" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "ÚÎÁÞÅÎÎÑ ÎÅÐÒÉÐÕÓÔÉÍÅ ÄÌÑ ÓËÉÄÁÎÎÑ" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s ×ÓÔÁÎÏ×ÌÅÎÏ" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s ÎÅ ×ÓÔÁÎÏ×ÌÅÎÏ" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s: ÎÅצÒÎÉÊ ÔÉÐ ÓËÒÉÎØËÉ" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s: ÎÅצÒÎÅ ÚÎÁÞÅÎÎÑ" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s: ÎÅצÄÏÍÉÊ ÔÉÐ" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s: ÎÅצÄÏÍÉÊ ÔÉÐ" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÄÁΦ %s: %s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ÎÅ ¤ Ú×ÉÞÁÊÎÉÍ ÆÁÊÌÏÍ." + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "ðÏÍÉÌËÁ × %s, ÒÑÄÏË %d: %s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source: ÐÏÍÉÌËÉ × %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: ÞÉÔÁÎÎÑ ÚÁ×ÅÒÛÅÎÏ, ÄÕÖÅ ÂÁÇÁÔÏ ÐÏÍÉÌÏË Õ %s" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source: ÐÏÍÉÌËÁ × %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s: ÎÅצÄÏÍÁ ËÏÍÁÎÄÁ" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "ðÏÍÉÌËÁ ËÏÍÁÎÄÎÏÇÏ ÒÑÄËÕ: %s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "ÎÅÍÏÖÌÉ×Ï Ú'ÑÓÕ×ÁÔÉ ÄÏÍÁÛÎ¦Ê ËÁÔÁÌÏÇ" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "ÎÅÍÏÖÌÉ×Ï Ú'ÑÓÕ×ÁÔÉ ¦Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "úÎÁÊÄÅÎÏ ÚÁÃÉËÌÅÎÎÑ ÍÁËÒÏÓÕ." + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "ëÌÁצÛÕ ÎÅ ÐÒÉÚÎÁÞÅÎÏ." + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "ëÌÁצÛÕ ÎÅ ÐÒÉÚÎÁÞÅÎÏ. îÁÔÉÓΦÔØ '%s' ÄÌÑ Ð¦ÄËÁÚËÉ." + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "ÍÅÎÀ '%s' ÎÅ ¦ÓÎÕ¤" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "ÐÏÒÏÖÎÑ ÐÏÓ̦ÄÏ×ΦÓÔØ ËÌÁצÛ" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "ÆÕÎËÃ¦Ñ '%s' ÎÅ ¦ÓÎÕ¤ × ËÁÒÔ¦" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro: ÐÏÒÏÖÎÑ ÐÏÓ̦ÄÏ×ΦÓÔØ ËÌÁצÛ" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec: ÎÅÍÁ¤ ÁÒÇÕÍÅÎÔ¦×" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "ÆÕÎËÃ¦Ñ '%s' ÎÅ ¦ÓÎÕ¤" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "÷×ÅĦÔØ keyID ÄÌÑ %s: " + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "ÐÏÒÏÖÎÑ ÏÐÅÒÁæÑ" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "ÐÒÉÍÕÓÏ×Å ÐÒÏÇÌÑÄ. Ú ×ÉËÏÒÉÓÔÁÎÎÑÍ mailcap" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ÄÉ×ÉÔÉÓØ ÄÏÄÁÔÏË ÑË ÔÅËÓÔ" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "×ÉÍË./×צÍËÎ. צÄÏÂÒÁÖÅÎÎÑ Ð¦ÄÞÁÓÔÉÎ" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ÐÅÒÅÊÔÉ ÄÏ Ë¦ÎÃÑ ÓÔÏÒ¦ÎËÉ" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "ÎÁĦÓÌÁÔÉ ËÏЦÀ ÌÉÓÔÁ ¦ÎÛÏÍÕ ÁÄÒÅÓÁÔÕ" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "×ÉÂÒÁÔÉ ÎÏ×ÉÊ ÆÁÊÌ × ÃØÏÍÕ ËÁÔÁÌÏÚ¦" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ÐÒÏÇÌÑÎÕÔÉ ÆÁÊÌ" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ÐÏËÁÚÁÔÉ ¦Í'Ñ ×ÉÂÒÁÎÏÇÏ ÆÁÊÌÕ" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "ЦÄÐÉÓÁÔÉÓØ ÄÏ Ã¦¤§ ÓËÒÉÎØËÉ (ÌÉÛÅ IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "צÄÐÉÓÁÔÉÓØ ×¦Ä Ã¦¤§ ÓËÒÉÎØËÉ (ÌÉÛÅ IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "×ÉÂÒÁÔÉ: ÐÅÒÅÌ¦Ë ×Ó¦È/ЦÄÐÉÓÁÎÉÈ (ÌÉÛÅ IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "îÅÍÁ¤ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ Ú ÎÏ×ÏÀ ÐÏÛÔÏÀ." + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "ÚͦÎÉÔÉ ËÁÔÁÌÏÇ" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "ÐÅÒÅצÒÉÔÉ ÎÁÑ×ΦÓÔØ ÎÏ×ϧ ÐÏÛÔÉ Õ ÓËÒÉÎØËÁÈ" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "ÐÒɤÄÎÁÔÉ ÆÁÊÌ(É) ÄÏ ÃØÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "ÐÒɤÄÎÁÔÉ ÌÉÓÔ(É) ÄÏ ÃØÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "ÚͦÎÉÔÉ ÐÅÒÅÌ¦Ë Bcc" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "ÚͦÎÉÔÉ ÐÅÒÅÌ¦Ë Cc" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "ÚͦÎÉÔÉ ÐÏÑÓÎÅÎÎÑ ÄÏ ÄÏÄÁÔËÕ" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "ÚͦÎÉÔÉ ÓÐÏӦ ËÏÄÕ×ÁÎÎÑ ÄÏÄÁÔËÕ" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "××ÅÓÔÉ ¦Í'Ñ ÆÁÊÌÕ, ËÕÄÉ ÄÏÄÁÔÉ ËÏЦÀ ÌÉÓÔÁ" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÆÁÊÌ, ÝÏ ÐÒɤÄÎÕ¤ÔØÓÑ" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "ÚͦÎÉÔÉ ÐÏÌÅ From" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ Ú ÚÁÇÏÌÏ×ËÏÍ" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÄÏÄÁÔÏË, ×ÉËÏÒÉÓÔÏ×ÕÀÞÉ mailcap" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "ÚͦÎÉÔÉ ÐÏÌÅ Reply-To" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÔÅÍÕ ÃØÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "ÚͦÎÉÔÉ ÐÅÒÅÌ¦Ë To" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "ÓÔ×ÏÒÉÔÉ ÎÏ×Õ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ (ÌÉÛÅ IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "ÚͦÎÉÔÉ ÔÉÐ ÄÏÄÁÔËÕ" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "ÏÔÒÉÍÁÔÉ ÔÉÍÞÁÓÏ×Õ ËÏЦÀ ÄÏÄÁÔËÕ" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "ÐÅÒÅצÒÉÔÉ ÇÒÁÍÁÔÉËÕ Õ ÌÉÓÔ¦" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "ËÏÍÐÏÎÕ×ÁÔÉ ÎÏ×ÉÊ ÄÏÄÁÔÏË, ×ÉËÏÒÉÓÔ. mailcap" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "×ÉÍËÎÕÔÉ/×צÍËÎÕÔÉ ÐÅÒÅËÏÄÏ×Õ×ÁÎÎÑ ÄÏÄÁÔËÕ" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "ÚÂÅÒÅÇÔÉ ÃÅÊ ÌÉÓÔ, ÁÂÉ ×¦Ä¦ÓÌÁÔÉ Ð¦ÚΦÛÅ" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "ÐÅÒÅÊÍÅÎÕ×ÁÔÉ ÐÒɤÄÎÁÎÉÊ ÆÁÊÌ" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "צĦÓÌÁÔÉ ÌÉÓÔ" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "ÚͦÎÉÔÉ inline ÎÁ attachment ÁÂÏ ÎÁ×ÐÁËÉ" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "×ÉÂÒÁÔÉ, ÞÉ ÔÒÅÂÁ ×ÉÄÁÌÑÔÉ ÆÁÊÌ Ð¦ÓÌÑ ×¦ÄÐÒ." + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "ÏÂÎÏ×ÉÔÉ ×¦ÄÏÍÏÓÔ¦ ÐÒÏ ËÏÄÕ×ÁÎÎÑ ÄÏÄÁÔËÕ" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "ÄÏÄÁÔÉ ÌÉÓÔ ÄÏ ÓËÒÉÎØËÉ" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "ËÏЦÀ×ÁÔÉ ÌÉÓÔ ÄÏ ÆÁÊÌÕ/ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "ÓÔ×ÏÒÉÔÉ Á̦ÁÓ ÎÁ צÄÐÒÁ×ÉÔÅÌÑ ÌÉÓÔÁ" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÚÉæÀ ÄÏÎÉÚÕ ÅËÒÁÎÕ" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÚÉæÀ ÄÏÓÅÒÅÄÉÎÉ ÅËÒÁÎÕ" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÚÉæÀ ÄÏÇÏÒÉ ÅËÒÁÎÕ" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "ÚÒÏÂÉÔÉ ÄÅËÏÄÏ×ÁÎÕ (ÐÒÏÓÔÉÊ ÔÅËÓÔ) ËÏЦÀ" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "ÚÒÏÂÉÔÉ ÄÅËÏÄÏ×ÁÎÕ (ÔÅËÓÔ) ËÏЦÀ ÔÁ ×ÉÄÁÌÉÔÉ" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "×ÉÄÁÌÉÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "×ÉÄÁÌÉÔÉ ÐÏÔÏÞÎÕ ÓËÒÉÎØËÕ (ÌÉÛÅ IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "×ÉÄÁÌÉÔÉ ×Ó¦ ÌÉÓÔÉ Ð¦ÄÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "×ÉÄÁÌÉÔÉ ×Ó¦ ÌÉÓÔÉ ÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "ÐÏËÁÚÁÔÉ ÐÏ×ÎÕ ÁÄÒÅÓÕ ×¦ÄÐÒÁ×ÉÔÅÌÑ" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "ÐÏËÁÚÁÔÉ ÌÉÓÔ Ê ×ÉÍËÎ./×צÍËÎ. ÕÖÉÍÁÎÎÑ ÚÁÇ." + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "ÐÏËÁÚÁÔÉ ÌÉÓÔ" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "ÒÅÄÁÇÕ×ÁÔÉ ÌÉÓÔ" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "×ÉÄÁÌÉÔÉ ÓÉÍ×ÏÌ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ ×̦×Ï" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÄÏ ÐÏÞÁÔËÕ ÓÌÏ×Á" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÞÁÔËÕ ÒÑÄËÕ" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "ÐÅÒÅÊÔÉ ÐÏ ×ȦÄÎÉÈ ÐÏÛÔÏ×ÉÈ ÓËÒÉÎØËÁÈ" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "ÄÏÐÏ×ÎÉÔÉ ¦Í'Ñ ÆÁÊÌÕ ÞÉ Á̦ÁÓ" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "ÐÏÓ̦ÄÏ×ÎÏ ÄÏÐÏ×ÎÉÔÉ ÁÄÒÅÓÕ" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "×ÉÄÁÌÉÔÉ ÓÉÍ×ÏÌ ÎÁ ͦÓæ ËÕÒÓÏÒÕ" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "ÐÅÒÅÊÔÉ ÄÏ Ë¦ÎÃÑ ÒÑÄËÕ" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ ×ÐÒÁ×Ï" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ËÕÒÓÏÒ ÄÏ Ë¦ÎÃÑ ÓÌÏ×Á" + +#: keymap_alldefs.h:75 +msgid "scroll down through the history list" +msgstr "ÐÒÏÇÏÒÎÕÔÉ ¦ÓÔÏÒ¦À ××ÏÄÕ ÄÏÎÉÚÕ" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ÐÒÏÇÏÒÎÕÔÉ ¦ÓÔÏÒ¦À ××ÏÄÕ ÎÁÇÏÒÕ" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "×ÉÄÁÌÉÔÉ ×¦Ä ËÕÒÓÏÒÕ ÄÏ Ë¦ÎÃÑ ÒÑÄËÕ" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "×ÉÄÁÌÉÔÉ ×¦Ä ËÕÒÓÏÒÕ ÄÏ Ë¦ÎÃÑ ÓÌÏ×Á" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "ÓÐÏÒÏÖÎÉÔÉ ÒÑÄÏË" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "×ÉÄÁÌÉÔÉ ÓÌÏ×Ï ÐÅÒÅÄ ËÕÒÓÏÒÏÍ" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "ÓÐÒÉÊÎÑÔÉ ÎÁÓÔÕÐÎÉÊ ÓÉÍ×ÏÌ, ÑË ¤" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "ÐÅÒÅÓÕÎÕÔÉ ÐÏÔÏÞÎÉÊ ÓÉÍ×ÏÌ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "ÎÁÐÉÓÁÔÉ ÓÌÏ×Ï Ú ×ÅÌÉËϧ ̦ÔÅÒÉ" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "ÐÅÒÅÔ×ÏÒÉÔÉ Ì¦ÔÅÒÉ ÓÌÏ×Á ÄÏ ÓÔÒÏËÏ×ÉÈ" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "ÐÅÒÅÔ×ÏÒÉÔÉ Ì¦ÔÅÒÉ ÓÌÏ×Á ÄÏ ÚÁÇÏÌÏ×ÎÉÈ" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "××ÅÓÔÉ ËÏÍÁÎÄÕ muttrc" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "××ÅÓÔÉ ÍÁÓËÕ ÆÁÊ̦×" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "×ÉÊÔÉ Ú ÃØÏÇÏ ÍÅÎÀ" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "ƦÌØÔÒÕ×ÁÔÉ ÄÏÄÁÔÏË ÞÅÒÅÚ ËÏÍÁÎÄÕ shell" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÅÒÛϧ ÐÏÚÉæ§" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "ÚͦÎÉÔÉ ÆÌÁÇ ×ÁÖÌÉ×ÏÓÔ¦ ÌÉÓÔÁ" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "ÐÅÒÅÓÌÁÔÉ ÌÉÓÔ Ú ËÏÍÅÎÔÁÒÅÍ" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "×ÉÂÒÁÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "צÄÐÏצÓÔÉ ×Ó¦Í ÁÄÒÅÓÁÔÁÍ" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ Ц×ÓÔÏÒ¦ÎËÉ ÄÏÎÉÚÕ" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ Ц×ÓÔÏÒ¦ÎËÉ ÄÏÇÏÒÉ" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "ÃÅÊ ÅËÒÁÎ" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÚÉæ§ Ú ÎÏÍÅÒÏÍ" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÏÓÔÁÎÎØϧ ÐÏÚÉæ§" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "צÄÐÏצÓÔÉ ÄÏ ×ËÁÚÁÎϧ ÒÏÚÓÉÌËÉ" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "×ÉËÏÎÁÔÉ ÍÁËÒÏÓ" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "ËÏÍÐÏÎÕ×ÁÔÉ ÎÏ×ÉÊ ÌÉÓÔ" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "צÄËÒÉÔÉ ¦ÎÛÕ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "צÄËÒÉÔÉ ¦ÎÛÕ ÓËÒÉÎØËÕ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "ÓËÉÎÕÔÉ ÆÌÁÇ ÓÔÁÔÕÓÕ ÌÉÓÔÁ" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "×ÉÄÁÌÉÔÉ ÌÉÓÔÉ, ÝÏ Í¦ÓÔÑÔØ ×ÉÒÁÚ" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "ÐÒÉÍÕÓÏ×Ï ÏÔÒÉÍÁÔÉ ÐÏÛÔÕ Ú ÓÅÒ×ÅÒÁ IMAP" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "ÏÔÒÉÍÁÔÉ ÐÏÛÔÕ Ú ÓÅÒ×ÅÒÁ POP" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÅÒÛÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÏÓÔÁÎÎØÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "ÐÏËÁÚÁÔÉ ÌÉÛÅ ÌÉÓÔÉ, ÝÏ Í¦ÓÔÑÔØ ×ÉÒÁÚ" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÏ×ÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ЦÄÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅ×ÉÄÁÌÅÎÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "ÐÅÒÅÊÔÉ ÄÏ \"ÂÁÔØ˦×ÓØËÏÇÏ\" ÌÉÓÔÁ Õ ÂÅӦĦ" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ЦÄÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎÏÇÏ ÎÅ×ÉÄÁÌÅÎÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ ÎÏ×ÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØÏÇÏ ÎÅÞÉÔÁÎÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "צÄͦÔÉÔÉ ÐÏÔÏÞÎÕ ÂÅÓ¦ÄÕ ÑË ÞÉÔÁÎÕ" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "צÄͦÔÉÔÉ ÐÏÔÏÞÎÕ Ð¦ÄÂÅÓ¦ÄÕ ÑË ÞÉÔÁÎÕ" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "×ÓÔÁÎÏ×ÉÔÉ ÆÌÁÇ ÓÔÁÔÕÓÕ ÌÉÓÔÁ" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "ÚÁÐÉÓÁÔÉ ÚͦÎÉ ÄÏ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "×ÉĦÌÉÔÉ ÌÉÓÔÉ, ÝÏ Í¦ÓÔÑÔØ ×ÉÒÁÚ" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "צÄÎÏ×ÉÔÉ ÌÉÓÔÉ, ÝÏ Í¦ÓÔÑÔØ ×ÉÒÁÚ" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "ÚÎÑÔÉ ×ÉĦÌÅÎÎÑ Ú ÌÉÓÔ¦×, ÝÏ Í¦ÓÔÑÔØ ×ÉÒÁÚ" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÓÅÒÅÄÉÎÉ ÓÔÏÒ¦ÎËÉ" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ÐÏÚÉæ§" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ ÒÑÄÏË ÄÏÎÉÚÕ" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÎÁÓÔÕÐÎϧ ÓÔÏÒ¦ÎËÉ" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ Ë¦ÎÃÑ ÌÉÓÔÁ" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "×ÉÍË./×צÍËÎ. צÄÏÂÒÁÖÅÎÎÑ ÃÉÔÏ×ÁÎÏÇÏ ÔÅËÓÔÕ" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "ÐÒÏÐÕÓÔÉÔÉ ÃÉÔÏ×ÁÎÉÊ ÔÅËÓÔ Ã¦ÌËÏÍ" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÞÁÔËÕ ÌÉÓÔÁ" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "צÄÄÁÔÉ ÌÉÓÔ/ÄÏÄÁÔÏË Õ ËÏÎ×Å¤Ò ËÏÍÁÎĦ shell" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ÐÏÚÉç§" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "ÐÒÏÇÏÒÎÕÔÉ ÎÁ ÒÑÄÏË ÄÏÇÏÒÉ" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÐÅÒÅÄÎØϧ ÓÔÏÒ¦ÎËÉ" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "ÄÒÕËÕ×ÁÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "ÚÁÐÉÔ ÚÏ×ΦÛÎØϧ ÐÒÏÇÒÁÍÉ ÐÏ ÁÄÒÅÓÉ" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "ÄÏÄÁÔÉ ÒÅÚÕÌØÔÁÔÉ ÎÏ×ÏÇÏ ÚÁÐÉÔÕ ÄÏ ÐÏÔÏÞÎÉÈ" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "ÚÂÅÒÅÇÔÉ ÚͦÎÉ ÓËÒÉÎØËÉ ÔÁ ×ÉÊÔÉ" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "×ÉËÌÉËÁÔÉ ÚÁÌÉÛÅÎÉÊ ÌÉÓÔ" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "ÏÞÉÓÔÉÔÉ ÔÁ ÐÅÒÅÍÁÌÀ×ÁÔÉ ÅËÒÁÎ" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{×ÎÕÔÒ¦ÛÎÑ}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "צÄÐÏצÓÔÉ ÎÁ ÌÉÓÔ" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "×ÚÑÔÉ ÃÅÊ ÌÉÓÔ × ÑËÏÓÔ¦ ÛÁÂÌÏÎÕ ÄÌÑ ÎÏ×ÏÇÏ" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "ÚÂÅÒÅÇÔÉ ÌÉÓÔ/ÄÏÄÁÔÏË Õ ÆÁÊ̦" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "ÐÏÛÕË ×ÉÒÁÚÕ × ÎÁÐÒÑÍËÕ ÕÐÅÒÅÄ" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "ÐÏÛÕË ×ÉÒÁÚÕ × ÎÁÐÒÑÍËÕ ÎÁÚÁÄ" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "ÐÏÛÕË ÎÁÓÔÕÐÎϧ צÄÐÏצÄÎÏÓÔ¦" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "ÐÏÛÕË ÎÁÓÔÕÐÎÏÇÏ × Ú×ÏÒÏÔÎØÏÍÕ ÎÁÐÒÑÍËÕ" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "×ÉÍË./×צÍËÎÕÔÉ ×ÉĦÌÅÎÎÑ ×ÉÒÁÚÕ ÐÏÛÕËÕ" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "×ÉËÌÉËÁÔÉ ËÏÍÁÎÄÕ × shell" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ÓÏÒÔÕ×ÁÔÉ ÌÉÓÔÉ" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ÓÏÒÔÕ×ÁÔÉ ÌÉÓÔÉ × Ú×ÏÒÏÔÎØÏÍÕ ÎÁÐÒÑÍËÕ" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "×ÉĦÌÉÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "×ÉËÏÒÉÓÔÁÔÉ ÎÁÓÔÕÐÎÕ ÆÕÎËæÀ ÄÏ ×ÉĦÌÅÎÏÇÏ" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "×ÉËÏÒÉÓÔÁÔÉ ÎÁÓÔÕÐÎÕ ÆÕÎËæÀ ÄÏ ×ÉĦÌÅÎÏÇÏ" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "×ÉĦÌÉÔÉ ÐÏÔÏÞÎÕ Ð¦ÄÂÅÓ¦ÄÕ" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "×ÉĦÌÉÔÉ ÐÏÔÏÞÎÕ ÂÅÓ¦ÄÕ" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "ÚͦÎÉÔÉ ÆÌÁÇ ÎÏ×ÏÇÏ ÌÉÓÔÁ" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "×ÉÍËÎÕÔÉ/×צÍËÎÕÔÉ ÐÅÒÅÚÁÐÉÓÕ×ÁÎÎÑ ÓËÒÉÎØËÉ" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "×ÉÂ¦Ò ÐÒÏÇÌÑÄÁÎÎÑ ÓËÒÉÎØÏË/×Ó¦È ÆÁÊ̦×" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ÐÅÒÅÊÔÉ ÄÏ ÐÏÞÁÔËÕ ÓÔÏÒ¦ÎËÉ" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "צÄÎÏ×ÉÔÉ ÐÏÔÏÞÎÕ ÐÏÚÉæÀ" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "צÄÎÏ×ÉÔÉ ×Ó¦ ÌÉÓÔÉ ÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "צÄÎÏ×ÉÔÉ ×Ó¦ ÌÉÓÔÉ Ð¦ÄÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "ÐÏËÁÚÁÔÉ ×ÅÒÓ¦À ÔÁ ÄÁÔÕ Mutt" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "ÐÒÏÇÌÑÎÕÔÉ ÚÁ ÄÏÐÏÍÏÇÏÀ mailcap ÐÒÉ ÐÏÔÒŦ" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "ÐÏËÁÚÁÔÉ ÄÏÄÁÔËÉ MIME" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "ÐÏËÁÚÁÔÉ ÐÏÔÏÞÎÉÊ ×ÉÒÁÚ ÏÂÍÅÖÅÎÎÑ" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "ÚÇÏÒÎÕÔÉ/ÒÏÚÇÏÒÎÕÔÉ ÐÏÔÏÞÎÕ ÂÅÓ¦ÄÕ" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "ÚÇÏÒÎÕÔÉ/ÒÏÚÇÏÒÎÕÔÉ ×Ó¦ ÂÅÓ¦ÄÉ" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "ÐÒɤÄÎÁÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "ÐÏËÁÚÁÔÉ ÐÁÒÁÍÅÔÒÉ PGP" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "צĦÓÌÁÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "ÐÅÒÅצÒÉÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "ÐÏÂÁÞÉÔÉ ¦ÄÅÎԦƦËÁÔÏÒ ËÏÒÉÓÔÕ×ÁÞÁ ËÌÀÞÁ" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "ÐÅÒÅצÒËÁ ÎÁ ËÌÁÓÉÞÎÅ pgp" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "ðÒÉÊÎÑÔÉ ÓËÏÓÔÒÕÊÏ×ÁÎÉÊ ÌÁÎÃÀÖÏË" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "äÏÄÁÔÉ remailer ÄÏ ÌÁÎÃÀÖËÕ" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "÷ÓÔÁ×ÉÔÉ remailer × ÌÁÎÃÀÖÏË" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "÷ÉÄÁÌÉÔÉ remailer Ú ÌÁÎÃÀÖËÕ" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "÷ÉÂÒÁÔÉ ÐÏÐÅÒÅÄÎ¦Ê ÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "÷ÉÂÒÁÔÉ ÎÁÓÔÕÐÎÉÊ ÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "צĦÓÌÁÔÉ ÌÉÓÔ ÞÅÒÅÚ ÌÁÎËÕ mixmaster remailer" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "ÚÒÏÂÉÔÉ ÒÏÚÛÉÆÒÏ×ÁÎÕ ËÏЦÀ ÔÁ ×ÉÄÁÌÉÔÉ" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "ÚÒÏÂÉÔÉ ÒÏÚÛÉÆÒÏ×ÁÎÕ ËÏЦÀ" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "ÚÎÉÝÉÔÉ ÐÁÒÏÌØ PGP Õ ÐÁÍ'ÑÔ¦" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "ÒÏÚÐÁËÕ×ÁÔÉ ÚÁÇÁÌØÎÉÊ ËÌÀÞ PGP" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "ÐÏËÁÚÁÔÉ ÐÁÒÁÍÅÔÒÉ PGP" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "îÅ ×ÉÓÔÁÞÁ¤ ÐÁÍ'ÑÔ¦!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"äÌÑ Ú×'ÑÚËÕ Ú ÒÏÚÒÏÂÎÉËÁÍÉ, Û̦ÔØ ÌÉÓÔ ÄÏ <mutt-dev@mutt.org>.\n" +"äÌÑ ÐÏצÄÏÍÌÅÎÎÑ ÐÒÏ ×ÁÄÕ, ×ÉËÏÒÉÓÔÏ×ÕÊÔÅ ÐÒÏÇÒÁÍÕ flea(1).\n" + +#: main.c:50 +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" + +#: main.c:56 +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"×ÉËÏÒÉÓÔÁÎÎÑ: mutt [ -nRyzZ ] [ -e <ËÍÄ> ] [ -F <ÆÁÊÌ> ] [ -m <ÔÉÐ> ] [ -f " +"<ÆÁÊÌ> ]\n" +" mutt [ -nx ] [ -e <ËÍÄ> ] [ -a <ÆÁÊÌ> ] [ -F <ÆÁÊÌ> ] [ -H <ÆÁÊÌ> ] " +"[ -i <ÆÁÊÌ> ] [ -s <ÔÅÍÁ> ] [ -b <ÁÄÒ> ] [ -c <ÁÄÒ> ] <ÁÄÒ> [ ... ]\n" +" mutt [ -n ] [ -e <ËÍÄ> ] [ -F <ÆÁÊÌ> ] -p\n" +" mutt -v[v]\n" +"\n" +"ÐÁÒÁÍÅÔÒÉ:\n" +" -a <ÆÁÊÌ>\tÐÒɤÄÎÁÔÉ ÆÁÊÌ ÄÏ ÌÉÓÔÁ\n" +" -b <ÁÄÒÅÓÉ>\t×ËÁÚÁÔÉ ÁÄÒÅÓÉ ÏÔÒÉÍÕ×ÁÞ¦× ÎÅÐÏͦÔÎÉÈ ËÏÐ¦Ê (Bcc)\n" +" -c <ÁÄÒÅÓÉ>\t×ËÁÚÁÔÉ ÁÄÒÅÓÉ ÏÔÒÉÍÕ×ÁÞ¦× ËÏÐ¦Ê (Cc)\n" +" -e <ËÏÍÁÎÄÁ>\t×ËÁÚÁÔÉ ËÏÍÁÎÄÕ, ÝÏ §§ ×ÉËÏÎÁÔÉ Ð¦ÓÌÑ ¦Î¦Ã¦Á̦ÚÁæ§\n" +" -f <ÆÁÊÌ>\t×ËÁÚÁÔÉ, ÑËÕ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÞÉÔÁÔÉ\n" +" -F <ÆÁÊÌ>\t×ËÁÚÁÔÉ ÁÌØÔÅÒÎÁÔÉ×ÎÉÊ ÆÁÊÌ muttrc\n" +" -H <ÆÁÊÌ>\t×ËÁÚÁÔÉ ÆÁÊÌ, ÝÏ Í¦ÓÔÉÔØ ÛÁÂÌÏÎ ÚÁÇÏÌÏ×ËÕ\n" +" -i <ÆÁÊÌ>\t×ËÁÚÁÔÉ ÆÁÊÌ, ÝÏ ÊÏÇÏ ÔÒÅÂÁ ×ËÌÀÞÉÔÉ Õ ×¦ÄÐÏצÄØ\n" +" -m <ÔÉÐ>\t×ËÁÚÁÔÉ ÔÉÐ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ\n" +" -n\t\t×ËÁÚÕ¤ Mutt ÎÅ ÞÉÔÁÔÉ ÓÉÓÔÅÍÎÉÊ Muttrc\n" +" -p\t\t×ÉËÌÉËÁÔÉ ÚÁÌÉÛÅÎÉÊ ÌÉÓÔ\n" +" -R\t\tצÄËÒÉÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ Ô¦ÌØËÉ ÄÌÑ ÞÉÔÁÎÎÑ\n" +" -s <ÔÅÍÁ>\t×ËÁÚÁÔÉ ÔÅÍÕ (× ÐÏÄצÊÎÉÈ ÌÁÐËÁÈ, ÑËÝÏ Í¦ÓÔÉÔØ ÐÒϦÌÉ)\n" +" -v\t\tÐÏËÁÚÁÔÉ ×ÅÒÓ¦À ÔÁ ÐÁÒÁÍÅÔÒÉ ËÏÍЦÌÑæ§\n" +" -x\t\tÓÉÍÕÌÀ×ÁÔÉ ×¦ÄÐÒÁ×ËÕ mailx\n" +" -y\t\t×ÉÂÒÁÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ Ú-ÐÏÍ¦Ö ×ËÁÚÁÎÉÈ Õ `mailboxes'\n" +" -z\t\tÏÄÒÁÚÕ ×ÉÊÔÉ, ÑËÝÏ × ÐÏÛÔÏ×¦Ê ÓËÒÉÎØæ ÎÅÍÁ¤ ÖÏÄÎÏÇÏ ÌÉÓÔÁ\n" +" -Z\t\tצÄËÒÉÔÉ ÐÅÒÛÕ ÓËÒÉÎØËÕ Ú ÎÏ×ÉÍ ÌÉÓÔÏÍ, ÑËÝÏ ÎÅÍÁ¤ - ÏÄÒÁÚÕ ×ÉÊÔÉ\n" +" -h\t\tÃÑ Ð¦ÄËÁÚËÁ" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"ðÁÒÁÍÅÔÒÉ ËÏÍЦÌÑæ§:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "ðÏÍÉÌËÁ ¦Î¦Ã¦Á̦ÚÁæ§ ÔÅÒͦÎÁÌÕ." + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "DEBUG ÎÅ ×ËÁÚÁÎÏ Ð¦Ä ÞÁÓ ËÏÍЦÌÑæ§. ¶ÇÎÏÒÕ¤ÔØÓÑ.\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s ÎÅ ¦ÓÎÕ¤. óÔ×ÏÒÉÔÉ ÊÏÇÏ?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "ïÔÒÉÍÕ×ÁÞ¦× ÎÅ ×ËÁÚÁÎÏ.\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s: ÎÅÍÏÖÌÉ×Ï ÄÏÄÁÔÉ ÆÁÊÌ.\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "îÅÍÁ¤ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ Ú ÎÏ×ÏÀ ÐÏÛÔÏÀ." + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "÷ȦÄÎÉÈ ÐÏÛÔÏ×ÉÈ ÓËÒÉÎØÏË ÎÅ ×ËÁÚÁÎÏ." + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ÐÏÒÏÖÎÑ." + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "þÉÔÁÎÎÑ %s... %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ Ú¦ÐÓÏ×ÁÎÏ!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÂÕÌÏ Ú¦ÐÓÏ×ÁÎÏ!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "æÁÔÁÌØÎÁ ÐÏÍÉÌËÁ! îÅ ×ÉÊÛÌÏ ×¦ÄËÒÉÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚÎÏ×Õ!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "ðÏÛÔÏ×Á ÓËÒÉÎØËÁ ÎÅ ÂÌÏËÕ¤ÔØÓÑ!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "sync: ÓËÒÉÎØËÕ ÚͦÎÅÎÏ, ÁÌÅ ÎÅÍÁ¤ ÚͦÎÅÎÉÈ ÌÉÓÔ¦×! (ÐÏצÄÏÍØÔÅ ÐÒÏ ÃÅ)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "úÁÐÉÓ ÌÉÓÔ¦×... %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "÷ÎÅÓÅÎÎÑ ÚͦÎ..." + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "úÂ¦Ê ÚÁÐÉÓÕ! þÁÓÔËÏ×Õ ÓËÒÉÎØËÕ ÚÂÅÒÅÖÅÎÏ Õ %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "îÅ ×ÉÊÛÌÏ ×¦ÄËÒÉÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÚÎÏ×Õ!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "ðÏ×ÔÏÒΊצÄËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ..." + +#: menu.c:413 +msgid "Jump to: " +msgstr "ðÅÒÅÊÔÉ ÄÏ: " + +#: menu.c:422 +msgid "Invalid index number." +msgstr "îÅצÒÎÉÊ ÎÏÍÅÒ ÐÅÒÅ̦ËÕ." + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "öÏÄÎϧ ÐÏÚÉç§." + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "äÁ̦ ÎÉÖÞÅ ÐÒÏËÒÕÞÕ×ÁÔÉ ÎÅ ÍÏÖÎÁ." + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "äÁ̦ ×ÉÝÅ ÐÒÏËÒÕÞÕ×ÁÔÉ ÎÅ ÍÏÖÎÁ." + +#: menu.c:477 +msgid "You are on the last page." +msgstr "ãÅ ÏÓÔÁÎÎÑ ÓÔÏÒ¦ÎËÁ." + +#: menu.c:499 +msgid "You are on the first page." +msgstr "ãÅ ÐÅÒÛÁ ÓÔÏÒ¦ÎËÁ." + +#: menu.c:578 +msgid "First entry is shown." +msgstr "÷É ÂÁÞÉÔÅ ÐÅÒÛÕ ÐÏÚÉæÀ." + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "÷É ÂÁÞÉÔÅ ÏÓÔÁÎÎÀ ÐÏÚÉæÀ." + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "ãÅ ÏÓÔÁÎÎÑ ÐÏÚÉæÑ." + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "ãÅ ÐÅÒÛÁ ÐÏÚÉæÑ." + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "ûÕËÁÔÉ ×ÉÒÁÚ:" + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "ú×ÏÒÏÔÎ¦Ê ÐÏÛÕË ×ÉÒÁÚÕ: " + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "îÅÍÁ¤ ×ÉÒÁÚÕ ÐÏÛÕËÕ." + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "îÅ ÚÎÁÊÄÅÎÏ." + +#: menu.c:885 +msgid "No tagged entries." +msgstr "öÏÄÎϧ ÐÏÚÉæ§ ÎÅ ×ÉÂÒÁÎÏ." + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "ðÏÛÕË Õ ÃØÏÍÕ ÍÅÎÀ ΊЦÄÔÒÉÍÕ¤ÔØÓÑ." + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "ðÅÒÅÈ¦Ä Õ ÃØÏÍÕ Ä¦ÁÌÏÚ¦ ΊЦÄÒÉÍÕ¤ÔØÓÑ." + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "÷ÉĦÌÅÎÎÑ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ." + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "þÉÔÁÎÎÑ %s... %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "æÁÊÌ ¤ ËÁÔÁÌÏÇÏÍ, ÚÂÅÒÅÇÔÉ Õ ÎØÏÍÕ?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "æÁÊÌ ¤ ËÁÔÁÌÏÇÏÍ, ÚÂÅÒÅÇÔÉ Õ ÎØÏÍÕ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "æÁÊÌ Õ ËÁÔÁÌÏÚ¦: " + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "æÁÊÌ ¦ÓÎÕ¤, (o)ÐÅÒÅÐÉÓÁÔÉ, (a)ÄÏÄÁÔÉ ÄÏ ÎØÏÇÏ ÞÉ (c)צÄÍÏ×ÉÔÉ?" + +#: muttlib.c:869 +msgid "oac" +msgstr "" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÌÉÓÔ ÄÏ ÓËÒÉÎØËÉ POP." + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ÎÅ ¤ ÐÏÛÔÏ×ÏÀ ÓËÒÉÎØËÏÀ!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "äÏÄÁÔÉ ÌÉÓÔÉ ÄÏ %s?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "ú'¤ÄÎÁÎÎÑ Ú %s ÚÁËÒÉÔÏ" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "SSL ÎÅÄÏÓÑÖÎÅ." + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "ðÏÍÉÌËÁ ËÏÍÁÎÄÉ, ÐÏÐÅÒÅÄÎØϧ Ú'¤ÄÎÁÎÎÀ." + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "ðÏÍÉÌËÁ Õ Ú'¤ÄÎÁÎΦ Ú ÓÅÒ×ÅÒÏÍ %s (%s)" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "ðÏÛÕË %s..." + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "îÅ ×ÉÊÛÌÏ ÚÎÁÊÔÉ ÁÄÒÅÓÕ \"%s\"." + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "ú'¤ÄÎÁÎÎÑ Ú %s..." + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "îÅ ×ÉÊÛÌÏ Ú'¤ÄÎÁÔÉÓÑ Ú %s (%s)." + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "îÅ ×ÄÁÌÏÓÑ ÚÎÁÊÔÉ ÄÏÓÔÑÔÎØÏ ÅÎÔÒÏЦ§ ÎÁ ×ÁÛ¦Ê ÓÉÓÔÅͦ" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "úÁÐÏ×ÎÅÎÎÑ ÐÕÌÕ ÅÎÔÒÏЦ§: %s...\n" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s ÍÁ¤ ÎÅÓÅËÒÅÔΦ ÐÒÁ×Á ÄÏÓÔÕÐÕ!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "SSL ÎÅÄÏÓÑÖÎÅ ÚÁ×ÄÑËÉ ×ÔÒÁÔ¦ ÅÎÔÒÏЦ§" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "ÐÏÍÉÌËÁ ××ÏÄÕ-×É×ÏÄÕ" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "ÎÅ×ÉÚÎÁÞÅÎÁ ÐÏÍÉÌËÁ ÐÒÏÔÏËÏÌÕ" + +#: mutt_ssl.c:324 +#, c-format +msgid "SSL failed: %s" +msgstr "ðÏÍÉÌËÁ SSL: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÓÅÒÔÉƦËÁÔ" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "ú'¤ÄÎÁÎÎÑ SSL Ú ×ÉËÏÒÉÓÔÁÎÎÑÍ %s (%s)" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "îÅצÄÏÍÅ" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "[ÎÅÍÏÖÌÉ×Ï ÏÂÞÉÓÌÉÔÉ]" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "[ÐÏÍÉÌËÏ×Á ÄÁÔÁ]" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "óÅÒÔÉƦËÁÔ ÓÅÒ×ÅÒÕ ÝŠΊĦÊÓÎÉÊ" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "óÅÒÔÉƦËÁÔ ÓÅÒ×ÅÒÕ ×ÉÄÁÌÅÎÏ ÚÁ ÄÁ×ΦÓÔÀ" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "ãÅÊ ÓÅÒÔÉƦËÁÔ ÎÁÌÅÖÉÔØ:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "ãÅÊ ÓÅÒÔÉƦËÁÔ ×ÉÄÁÎÏ:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "ãÅÊ ÓÅÒÔÉƦËÁÔ Ä¦ÊÓÎÉÊ" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " ×¦Ä %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " ÄÏ %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "÷¦ÄÂÉÔÏË: %s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "ðÅÒÅצÒËÁ ÓÅÒÔÉƦËÁÔÕ SSL" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(r)ÎÅ ÐÒÉÊÍÁÔÉ, ÐÒÉÊÎÑÔÉ (o)ÏÄÎÏÒÁÚÏ×Ï ÁÂÏ (a)ÚÁ×ÖÄÉ" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(r)ÎÅ ÐÒÉÊÍÁÔÉ, (o)ÐÒÉÊÎÑÔÉ ÏÄÎÏÒÁÚÏ×Ï" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "÷ÉÈ¦Ä " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÚÂÅÒÅÇÔÉ ÓÅÒÔÉƦËÁÔ" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "óÅÒÔÉƦËÁÔ ÚÂÅÒÅÖÅÎÏ" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "÷Ó¦ ÓÐÒÏÂÉ ÂÌÏËÕ×ÁÎÎÑ ×ÉÞÅÒÐÁÎÏ, ÚÎÁÔÉ ÂÌÏËÕ×ÁÎÎÑ Ú %s?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "îÅ ×ÉÊÛÌÏ ÚÁÂÌÏËÕ×ÁÔÉ %s.\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "÷ÉÞÅÒÐÁÎÏ ÞÁÓ ÓÐÒÏÂÉ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ fctnl!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "þÅËÁÎÎÑ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ fctnl... %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "÷ÉÞÅÒÐÁÎÏ ÞÁÓ ÓÐÒÏÂÉ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ flock" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "þÅËÁÎÎÑ ÂÌÏËÕ×ÁÎÎÑ ÞÅÒÅÚ flock... %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "îÅ ×ÉÊÛÌÏ ÚÁÂÌÏËÕ×ÁÔÉ %s\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "þÉÔÁÎÎÑ %s..." + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "úÁÐÉÓ %s..." + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "îÅ ×ÉÊÛÌÏ Ó¦ÎÈÒÏΦÚÕ×ÁÔÉ ÐÏÛÔÏ×Õ ÓËÒÉÎØËÕ %s!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "ðÅÒÅÎÅÓÔÉ ÞÉÔÁΦ ÌÉÓÔÉ ÄÏ %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "úÎÉÝÉÔÉ %d ×ÉÄÁÌÅÎÉÊ ÌÉÓÔ?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "úÎÉÝÉÔÉ %d ×ÉÄÁÌÅÎÉÈ ÌÉÓÔ¦×?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "ðÅÒÅÎÏÓ ÞÉÔÁÎÉÈ ÌÉÓÔ¦× ÄÏ %s..." + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÎÅ ÚͦÎÅÎÏ." + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d ÚÂÅÒÅÖÅÎÏ, %d ÐÅÒÅÎÅÓÅÎÏ, %d ÚÎÉÝÅÎÏ." + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d ÚÂÅÒÅÖÅÎÏ, %d ÚÎÉÝÅÎÏ." + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr "îÁÔÉÓΦÔØ '%s' ÄÌÑ ÚͦÎÉ ÍÏÖÌÉ×ÏÓÔ¦ ÚÁÐÉÓÕ" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "úÒϦÔØ 'toggle-write' ÄÌÑ ×צÍËÎÅÎÎÑ ÚÁÐÉÓÕ!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "óËÒÉÎØËÕ ÐÏͦÞÅÎÏ ÎÅÚͦÎÀ×ÁÎÏÀ. %s" + +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "ðÏÛÔÏ×Õ ÓËÒÉÎØËÕ ÐÅÒÅצÒÅÎÏ." + +#: mx.c:1490 +msgid "Can't write message" +msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÌÉÓÔ" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "îÅÍÏÖÌÉ×Ï Õ ÃØÏÍÕ ÍÅÎÀ." + +#: pager.c:1446 +msgid "PrevPg" +msgstr "ðÏÐóÔ" + +#: pager.c:1447 +msgid "NextPg" +msgstr "îÁÓÔóÔ" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "äÏÄÁÔËÉ" + +#: pager.c:1454 +msgid "Next" +msgstr "îÁÓÔ" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "÷É ÂÁÞÉÔŠ˦ÎÅÃØ ÌÉÓÔÁ." + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "÷É ÂÁÞÉÔÅ ÐÏÞÁÔÏË ÌÉÓÔÁ." + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "ú×ÏÒÏÔÎ¦Ê ÐÏÛÕË: " + +#: pager.c:1955 +msgid "Search: " +msgstr "ðÏÛÕË: " + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "ð¦ÄËÁÚËÕ ÚÁÒÁÚ ÐÏËÁÚÁÎÏ." + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "ãÉÔÏ×ÁÎÏÇÏ ÔÅËÓÔÕ Â¦ÌØÛ ÎÅÍÁ¤." + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "ð¦ÓÌÑ ÃÉÔÏ×ÁÎÏÇÏ ÔÅËÓÔÕ Î¦ÞÏÇÏ ÎÅÍÁ¤." + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "âÁÇÁÔÏÞÁÓÔÉÎÎÉÊ ÌÉÓÔ ÎÅ ÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÍÅÖ¦!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "ðÏÍÉÌËÁ Õ ×ÉÒÁÚÕ: %s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "äÅÎØ '%s' × Í¦ÓÑæ ÎÅ ¦ÓÎÕ¤" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "í¦ÓÑÃØ '%s' ÎÅ ¦ÓÎÕ¤" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "îÅÍÏÖÌÉ×Á צÄÎÏÓÎÁ ÄÁÔÁ: %s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "ÐÏÍÉÌËÁ Õ ×ÉÒÁÚÕ" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "ÐÏÍÉÌËÁ Õ ×ÉÒÁÚÕ: %s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c: ÎÅצÒÎÁ ËÏÍÁÎÄÁ" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "× ÃØÏÍÕ ÒÅÖÉÍÏצ '%c' ΊЦÄÔÒÉÍÕ¤ÔØÓÑ" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "צÄÓÕÔÎ¦Ê ÐÁÒÁÍÅÔÒ" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "צÄÓÕÔÎÑ ÄÕÖËÁ: %s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "ÐÏÒÏÖÎ¦Ê ×ÉÒÁÚ" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "ÐÏÍÉÌËÁ: ÎÅצÄÏÍÅ op %d (ÐÏצÄÏÍØÔÅ ÃÀ ÐÏÍÉÌËÕ)." + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "ëÏÍЦÌÑÃ¦Ñ ×ÉÒÁÚÕ ÐÏÛÕËÕ..." + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "÷ÉËÏÎÁÎÎÑ ËÏÍÁÎÄÉ ÄÏ ×¦ÄÐÏצÄÎÉÈ ÌÉÓÔ¦×..." + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "ìÉÓÔ¦×, ÝÏ ×¦ÄÐÏצÄÁÀÔØ ËÒÉÔÅÒ¦À, ÎÅ ÚÎÁÊÄÅÎÏ." + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "ðÏÛÕË Ä¦ÊÛÏ× ÄÏ Ë¦ÎÃÑ, ÁÌÅ ÎÅ ÚÎÁÊÄÅÎÏ Î¦ÞÏÇÏ" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "ðÏÛÕË Ä¦ÊÛÏ× ÄÏ ÐÏÞÁÔËÕ, ÁÌÅ ÎÅ ÚÎÁÊÄÅÎÏ Î¦ÞÏÇÏ" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "ðÏÛÕË ÐÅÒÅÒ×ÁÎÏ." + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "ëÏÄÏ×Õ ÆÒÁÚÕ PGP ÚÁÂÕÔÏ." + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ðÏÍÉÌËÁ: ÎÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Ð¦ÄÐÒÏÃÅÓ PGP! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- ë¦ÎÅÃØ ÔÅËÓÔÕ ÎÁ ×ÉÈÏĦ PGP --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- ðÏÞÁÔÏË ÐÏצÄÏÍÌÅÎÎÑ PGP --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ðÏÞÁÔÏË ÂÌÏËÕ ×¦ÄËÒÉÔÏÇÏ ËÌÀÞÁ PGP --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- ðÏÞÁÔÏË ÐÏצÄÏÍÌÅÎÎÑ Ú PGP ЦÄÐÉÓÏÍ --]\n" +"\n" + +#: pgp.c:381 +msgid "[-- END PGP MESSAGE --]\n" +msgstr "[-- ë¦ÎÅÃØ ÐÏצÄÏÍÌÅÎÎÑ PGP --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- ë¦ÎÅÃØ ÂÌÏËÕ ×¦ÄËÒÉÔÏÇÏ ËÌÀÞÁ PGP --]\n" + +#: pgp.c:385 +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "[-- ë¦ÎÅÃØ ÐÏצÄÏÍÌÅÎÎÑ Ú PGP ЦÄÐÉÓÏÍ --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ðÏÍÉÌËÁ: ÎÅ ×ÉÊÛÌÏ ÚÎÁÊÔÉ ÐÏÞÁÔÏË ÐÏצÄÏÍÌÅÎÎÑ PGP! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "÷ÎÕÔÒ¦ÛÎÑ ÐÏÍÉÌËÁ. ðÏצÄÏÍØÔÅ <roessler@guug.de>." + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- ðÏÍÉÌËÁ: ÎÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ Ð¦ÄÐÒÏÃÅÓ PGP! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ðÏÍÉÌËÁ: ÎÅÓÆÏÒÍÏ×ÁÎÉÊ ÌÉÓÔ PGP/MIME! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ðÏÍÉÌËÁ: ÎÅ ×ÉÊÛÌÏ ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- îÁÓÔÕÐΦ ÄÁΦ ÚÁÛÉÆÒÏ×ÁÎÏ PGP/MIME --]\n" +"\n" + +#: pgp.c:863 +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "[-- ë¦ÎÅÃØ ÄÁÎÉÈ, ÚÁÛÉÆÒÏ×ÁÎÉÈ PGP/MIME --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ Ð¦ÄÐÒÏÃÅÓÓ PGP!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ keyID = \"%s\" ÄÌÑ %s?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "÷×ÅĦÔØ keyID ÄÌÑ %s: " + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "îÅ ×ÉÊÛÌÏ ×ÉËÌÉËÁÔÉ PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "ïÔÒÉÍÁÎÎÑ ËÌÀÞÁ PGP..." + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "÷Ó¦ צÄÐÏצÄΦ ËÌÀÞ¦ ÄÁ×Φ/ÚÁͦÎÅΦ." + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "÷ÉÂ¦Ò " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "ðÅÒÅצÒËÁ " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP ËÌÀÞ¦, ÝÏ ×¦ÄÐÏצÄÁÀÔØ <%s>." + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP ËÌÀÞ¦, ÝÏ ×¦ÄÐÏצÄÁÀÔØ \"%s\"." + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "ãÅÊ ËÌÀÞ ÎÅÍÏÖÌÉ×Ï ×ÉËÏÒÉÓÔÁÔÉ: ÄÁ×ΦÊ/×ÉÍËÎÅÎÉÊ/ÚÁͦÎÅÎÉÊ." + +#: pgpkey.c:608 +msgid "ID is expired/disabled/revoked." +msgstr "ID ÄÁ×ΦÊ/×ÉÍËÎÅÎÉÊ/ÚÁͦÎÅÎÉÊ." + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "ä¦ÊÓΦÓÔØ ID ÎÅ ×ÉÚÎÁÞÅÎÁ." + +#: pgpkey.c:615 +msgid "ID is not valid." +msgstr "ID ÎÅĦÊÓÎÉÊ." + +#: pgpkey.c:618 +msgid "ID is only marginally valid." +msgstr "ID ĦÊÓÎÉÊ ÌÉÛÅ ÞÁÓÔËÏ×Ï." + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ÷É ÓÐÒÁ×Ħ ÂÁÖÁ¤ÔÅ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ ËÌÀÞ?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "âÕÄØ ÌÁÓËÁ, ××ÅĦÔØ ID ËÌÀÞÁ: " + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "÷ÉËÌÉË PGP..." + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "" + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "ðÏÛÕË ËÌÀÞ¦×, ÝÏ ×¦ÄÐÏצÄÁÀÔØ \"%s\"..." + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "ëÏÍÁÎÄÁ TOP ΊЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ." + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÚÁÇÏÌÏ×ÏË ÄÏ ÔÉÍÞÁÓÏ×ÏÇÏ ÆÁÊÌÕ!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "ëÏÍÁÎÄÁ UIDL ΊЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ." + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "%s - ÎÅÐÒÉÐÕÓÔÉÍÉÊ ÛÌÑÈ POP" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "ïÔÒÉÍÁÎÎÑ ÐÅÒÅ̦ËÕ ÐÏצÄÏÍÌÅÎØ..." + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "îÅÍÏÖÌÉ×Ï ÚÁÐÉÓÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ ÄÏ ÔÉÍÞÁÓÏ×ÏÇÏ ÆÁÊÌÕ!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "ðÅÒÅצÒËÁ ÎÁÑ×ÎÏÓÔ¦ ÎÏ×ÉÈ ÐÏצÄÏÍÌÅÎØ..." + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP host ÎÅ ×ÉÚÎÁÞÅÎÏ." + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "÷ ÐÏÛÔÏ×¦Ê ÓËÒÉÎØæ POP ÎÅÍÁ¤ ÎÏ×ÉÈ ÌÉÓÔ¦×." + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "÷ÉÄÁÌÉÔÉ ÐÏצÄÏÍÌÅÎÎÑ Ú ÓÅÒ×ÅÒÕ?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "þÉÔÁÎÎÑ ÎÏ×ÉÈ ÐÏצÄÏÍÌÅÎØ (%d ÂÁÊÔ)..." + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "ðÏÍÉÌËÁ Ð¦Ä ÞÁÓ ÚÁÐÉÓÕ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [%d Ú %d ÌÉÓÔ¦× ÐÒÏÞÉÔÁÎÏ]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "óÅÒ×ÅÒ ÚÁËÒÉ× Ú'¤ÄÎÁÎÎÑ!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "áÕÔÅÎÔÉƦËÁÃ¦Ñ (SASL)..." + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "áÕÔÅÎÔÉƦËÁÃ¦Ñ (APOP)..." + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "ðÏÍÉÌËÁ ÁÕÔÅÎÔÉƦËÁæ§ APOP." + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "ëÏÍÁÎÄÁ USER ΊЦÄÔÒÉÍÕ¤ÔØÓÑ ÓÅÒ×ÅÒÏÍ." + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "îÅÍÏÖÌÉ×Ï ÚÁÌÉÛÉÔÉ ÐÏצÄÏÍÌÅÎÎÑ ÎÁ ÓÅÒ×ÅÒ¦." + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "ðÏÍÉÌËÁ Ú'¤ÄÎÁÎÎÑ Ú ÓÅÒ×ÅÒÏÍ: %s" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "úÁËÒÉÔÔÑ Ú'¤ÄÎÁÎÎÑ Ú ÓÅÒ×ÅÒÏÍ POP..." + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "ðÅÒÅצÒËÁ ¦ÎÄÅËÓ¦× ÐÏצÄÏÍÌÅÎØ..." + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "ú'¤ÄÎÁÎÎÑ ÚÁÇÕÂÌÅÎÏ. ÷¦ÄÎÏ×ÉÔÉ Ú×'ÑÚÏË Ú ÓÅÒ×ÅÒÏÍ POP?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "úÁÌÉÛÅΦ ÌÉÓÔÉ" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "öÏÄÎÏÇÏ ÌÉÓÔÁ ÎÅ ÚÁÌÉÛÅÎÏ." + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "îÅצÒÎÉÊ ÚÁÇÏÌÏ×ÏË PGP" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "îÅצÒÎÉÊ ÚÁÇÏÌÏ×ÏË PGP" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "ðÏÍÉÌËÁ ÒŤÓÔÒÁæ§." + +#: query.c:46 +msgid "New Query" +msgstr "îÏ×ÉÊ ÚÁÐÉÔ" + +#: query.c:47 +msgid "Make Alias" +msgstr "óÔ×ÏÒÉÔÉ Á̦ÁÓ" + +#: query.c:48 +msgid "Search" +msgstr "ðÏÛÕË" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "þÅËÁÊÔŠצÄÐÏצĦ..." + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "ëÏÍÁÎÄÕ ÚÁÐÉÔÕ ÎÅ ×ÉÚÎÁÞÅÎÏ." + +#: query.c:286 +msgid "Query" +msgstr "úÁÐÉÔ" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "úÁÐÉÔ:" + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "úÁÐÉÔ '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "ëÏÎ×." + +#: recvattach.c:53 +msgid "Print" +msgstr "äÒÕË" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "úÂÅÒÅÖÅÎÎÑ..." + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "äÏÄÁÔÏË ÚÁÐÉÓÁÎÏ." + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "ïâåòåöîï! ÷É ÚÎÉÝÉÔÅ ¦ÓÎÕÀÞÉÊ %s ÐÒÉ ÚÁÐÉÓÕ. ÷É ÐÅ×Φ?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "äÏÄÁÔÏË ÏÔƦÌØÔÒÏ×ÁÎÏ." + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "æ¦ÌØÔÒÕ×ÁÔÉ ÞÅÒÅÚ: " + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "ðÅÒÅÄÁÔÉ Õ ËÏÎ×Å¤Ò ËÏÍÁÎĦ: " + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "ñ ÎÅ ÚÎÁÀ, ÑË ÄÒÕËÕ×ÁÔÉ ÄÏÄÁÔËÉ ÔÉÐÕ %s!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "äÒÕËÕ×ÁÔÉ ×ÉĦÌÅΦ ÄÏÄÁÔËÉ?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "äÒÕËÕ×ÁÔÉ ÄÏÄÁÔÏË?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "îÅ ÚÎÁÊÄÅÎÏ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×." + +#: recvattach.c:951 +msgid "Attachments" +msgstr "äÏÄÁÔËÉ" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "îÅÍÁ¤ ЦÄÞÁÓÔÉÎ ÄÌÑ ÐÒÏÇÌÑÄÁÎÎÑ!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "îÅÍÏÖÌÉ×Ï ×ÉÄÁÌÉÔÉ ÄÏÄÁÔÏË Ú ÓÅÒ×ÅÒÁ POP." + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "÷ÉÄÁÌÅÎÎÑ ÄÏÄÁÔË¦× Ú ÌÉÓÔ¦× Ú PGP ΊЦÄÔÒÉÍÕ¤ÔØÓÑ." + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "ð¦ÄÔÒÉÍÕ¤ÔØÓÑ Ô¦ÌØËÉ ×ÉÄÁÌÅÎÎÑ × ÂÁÇÁÔÏÞÁÓÔÉÎÎÉÈ ÌÉÓÔÁÈ." + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "÷É ÍÏÖÅÔÅ ÎÁÄÓÉÌÁÔÉ Ô¦ÌØËÉ ËÏЦ§ ÞÁÓÔÉÎ message/rfc822." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "ðÏÍÉÌËÁ ÐÒÉ ×¦ÄÐÒÁ×æ." + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "ðÏÍÉÌËÁ ÐÒÉ ×¦ÄÐÒÁ×æ." + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ ÔÉÍÞÁÓÏ×ÉÊ ÆÁÊÌ %s." + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "ðÅÒÅÓÌÁÔÉ ÑË ÄÏÄÁÔËÉ?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "îÅÍÏÖÌÉ×Ï ÄÅËÏÄÕ×ÁÔÉ ×Ó¦ ×ÉĦÌÅΦ ÄÏÄÁÔËÉ. ðÅÒÅÓÉÌÁÔÉ §È MIME?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "ðÅÒÅÓÌÁÔÉ ÅÎËÁÐÓÕÌØÏ×ÁÎÉÍ Õ ×¦ÄÐÏצÄÎÏÓÔ¦ ÄÏ MIME?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "îÅ ÚÎÁÊÄÅÎÏ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×." + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "îÅ ÚÎÁÊÄÅÎÏ ÓÐÉÓË¦× ÒÏÚÓÉÌËÉ!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "îÅÍÏÖÌÉ×Ï ÄÅËÏÄÕ×ÁÔÉ ×Ó¦ ×ÉĦÌÅΦ ÄÏÄÁÔËÉ. ëÁÐÓÕÌÀ×ÁÔÉ §È Õ MIME?" + +#: remailer.c:480 +msgid "Append" +msgstr "äÏÄÁÔÉ" + +#: remailer.c:481 +msgid "Insert" +msgstr "÷ÓÔÁ×." + +#: remailer.c:482 +msgid "Delete" +msgstr "÷ÉÄÁÌ." + +#: remailer.c:484 +msgid "OK" +msgstr "" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ type2.list mixmaster'Á!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "÷ÅÂÅÒ¦ÔØ ÌÁÎÃÀÖÏË remailer." + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "ðÏÍÉÌËÁ: %s ÎÅÍÏÖÌÉ×Ï ×ÉËÏÒÉÓÔÁÔÉ ÑË ÏÓÔÁÎÎ¦Ê remailer ÌÁÎÃÀÖËÕ." + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "ìÁÎÃÀÖÏË ÎÅ ÍÏÖÅ ÂÕÔÉ Â¦ÌØÛÉÍ ÚÁ %d ÅÌÅÍÅÎÔ¦×." + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "ìÁÎÃÀÖÏË remailer'Á ×ÖÅ ÐÏÒÏÖΦÊ." + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "ðÅÒÛÉÊ ÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ ×ÖÅ ×ÉÂÒÁÎÏ." + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "ïÓÔÁÎÎ¦Ê ÅÌÅÍÅÎÔ ÌÁÎÃÀÖËÕ ×ÖÅ ×ÉÂÒÁÎÏ." + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster ÎÅ ÐÒÉÊÍÁ¤ ÚÁÇÏÌÏ×ËÉ Cc ÔÁ Bcc." + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" +"ôÒÅÂÁ ×ÓÔÁÎÏ×ÉÔÉ ×¦ÄÐÏצÄÎÅ ÚÎÁÞÅÎÎÑ hostname ÄÌÑ ×ÉËÏÒÉÓÔÁÎÎÑ mixmaster!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "ðÏÍÉÌËÁ צÄÐÒÁ×ËÉ, ËÏÄ ÐÏ×ÅÒÎÅÎÎÑ %d.\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "ðÏÍÉÌËÁ ÐÒÉ ×¦ÄÐÒÁ×æ." + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "îÅצÒÎÏ ÆÏÒÍÁÔÏ×ÁÎÉÊ ÚÁÐÉÓ ÄÌÑ ÔÉÐÕ %s × \"%s\", ÒÑÄÏË %d" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "ûÌÑÈ ÄÏ mailcap ÎÅ ×ËÁÚÁÎÏ" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "ÚÁÐÉÓÕ ÄÌÑ ÔÉÐÕ %s × mailcap ÎÅ ÚÎÁÊÄÅÎÏ" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "score: ÄÕÖÅ ÍÁÌÏ ÁÒÇÕÍÅÎÔ¦×" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "score: ÄÕÖÅ ÂÁÇÁÔÏ ÁÒÇÕÍÅÎÔ¦×" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "ôÅÍÉ ÎÅÍÁ¤, צÄͦÎÉÔÉ?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "ôÅÍÉ ÎÅÍÁ¤, צÄͦÎÅÎÏ." + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "÷¦ÄÐÏצÓÔÉ %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "ðÅÒÅÓÌÁÔÉ %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "îÅ ×ÉÄÎÏ ×ÉĦÌÅÎÉÈ ÌÉÓÔ¦×!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "äÏÄÁÔÉ ÌÉÓÔ ÄÏ ×¦ÄÐÏצĦ?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "ãÉÔÕ¤ÔØÓÑ ÐÏצÄÏÍÌÅÎÎÑ..." + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "îÅ ×ÉÊÛÌÏ ÄÏÄÁÔÉ ×Ó¦ ÂÁÖÁΦ ÌÉÓÔÉ!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "ðÅÒÅÓÌÁÔÉ ÑË ÄÏÄÁÔÏË?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "ð¦ÄÇÏÔÕ×ÁÎÎÑ ÌÉÓÔÁ ÄÌÑ ÐÅÒÅÓÉÌÁÎÎÑ..." + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "÷ÉËÌÉËÁÔÉ ÚÁÌÉÛÅÎÉÊ ÌÉÓÔ?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "ð¦ÄÇÏÔÕ×ÁÎÎÑ ÌÉÓÔÁ ÄÌÑ ÐÅÒÅÓÉÌÁÎÎÑ..." + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "÷¦ÄͦÎÉÔÉ ×¦ÄÐÒÁ×ËÕ ÎÅ ÚͦÎÅÎÏÇÏ ÌÉÓÔÁ?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "ìÉÓÔ ÎÅ ÚͦÎÅÎÏ, ÔÏÍÕ ×¦ÄÐÒÁ×ËÕ ×¦ÄͦÎÅÎÏ." + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "ìÉÓÔ ÎŠצÄÐÒÁ×ÌÅÎÏ." + +#: send.c:1430 +msgid "Message postponed." +msgstr "ìÉÓÔ ÚÁÌÉÛÅÎÏ ÄÌÑ ÐÏÄÁÌØÛϧ צÄÐÒÁ×ËÉ.." + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "îÅ ×ËÁÚÁÎÏ ÏÔÒÉÍÕ×ÁÞ¦×!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "ïÔÒÉÍÕ×ÁÞ¦× ÎÅ ÂÕÌÏ ×ËÁÚÁÎÏ." + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "ôÅÍÉ ÎÅÍÁ¤, צÄͦÎÉÔÉ ×¦ÄÐÒÁ×ËÕ?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "ôÅÍÉ ÎÅ ×ËÁÚÁÎÏ." + +#: send.c:1526 +msgid "Sending message..." +msgstr "ìÉÓÔ ×¦ÄÐÒÁ×ÌѤÔØÓÑ..." + +#: send.c:1667 +msgid "Could not send the message." +msgstr "îÅ ×ÉÊÛÌÏ ×¦ÄÐÒÁ×ÉÔÉ ÌÉÓÔ." + +#: send.c:1672 +msgid "Mail sent." +msgstr "ìÉÓÔ ÐÏÓÌÁÎÏ." + +#: send.c:1672 +msgid "Sending in background." +msgstr "æÏÎÏ×Á צÄÐÒÁ×ËÁ." + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "îÅÍÁ¤ ÐÁÒÁÍÅÔÒÕ ÍÅÖ¦! [ÓÐÏצÓÔ¦ÔØ ÐÒÏ ÃÀ ÐÏÍÉÌËÕ]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ¦ÌØÛÅ ÎÅ ¦ÓÎÕ¤!" + +#: sendlib.c:916 +#, c-format +msgid "%s isn't a regular file." +msgstr "%s ÎÅ ¤ Ú×ÉÞÁÊÎÉÍ ÆÁÊÌÏÍ." + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "îÅ ×ÉÊÛÌÏ ×¦ÄËÒÉÔÉ %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "ðÏÍÉÌËÁ צÄÐÒÁ×ËÉ, ËÏÄ ÐÏ×ÅÒÎÅÎÎÑ %d (%s)." + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "÷ÉÈ¦Ä ÐÒÏÃÅÓÕ ÄÏÓÔÁ×ËÉ" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s... ÷ÉÈÏÄÖÕ.\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "ïÔÒÉÍÁÎÏ %s... ÷ÉÈÏÄÖÕ.\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "ïÔÒÉÍÁÎÏ ÓÉÇÎÁÌ %d... ÷ÉÈÏÄÖÕ.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "÷ÉÈ¦Ä " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "í¦ÓÑÃØ '%s' ÎÅ ¦ÓÎÕ¤" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "îÅצÄÏÍÅ" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "÷×ÅĦÔØ keyID ÄÌÑ %s: " + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "PGP ËÌÀÞ¦, ÝÏ ×¦ÄÐÏצÄÁÀÔØ \"%s\"." + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ keyID = \"%s\" ÄÌÑ %s?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "÷ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ keyID = \"%s\" ÄÌÑ %s?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- ðÏÍÉÌËÁ: ÎÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Ð¦ÄÐÒÏÃÅÓ PGP! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Æ¦ÌØÔÒ" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(ÓËÒÉÎØËÉ ÎÅÍÁ¤)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "ðÏÐÅÒÅÄÖÅÎÎÑ: ÎÅÍÏÖÌÉ×Ï ÚÂÅÒÅÇÔÉ ÓÅÒÔÉƦËÁÔ" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "îÅÍÏÖÌÉ×Ï ×¦ÄËÒÉÔÉ Ð¦ÄÐÒÏÃÅÓÓ PGP!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- ë¦ÎÅÃØ ÔÅËÓÔÕ ÎÁ ×ÉÈÏĦ PGP --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ðÏÍÉÌËÁ: ÎÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ Ð¦ÄÐÒÏÃÅÓ PGP! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- îÁÓÔÕÐΦ ÄÁΦ ÚÁÛÉÆÒÏ×ÁÎÏ PGP/MIME --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- îÁÓÔÕÐΦ ÄÁΦ ЦÄÐÉÓÁÎÏ --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "[-- ë¦ÎÅÃØ ÄÁÎÉÈ, ÚÁÛÉÆÒÏ×ÁÎÉÈ PGP/MIME --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "[-- ë¦ÎÅÃØ Ð¦ÄÐÉÓÁÎÉÈ ÄÁÎÉÈ --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "óÏÒÔÕ×ÁÎÎÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ..." + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "îÅ ÚÎÁÊÄÅÎÏ ÆÕÎËæÀ ÓÏÒÔÕ×ÁÎÎÑ! [ÓÐÏצÓÔÉÔØ ÐÒÏ ÃÅ]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(ÓËÒÉÎØËÉ ÎÅÍÁ¤)" + +#: thread.c:1081 +msgid "Parent message is not visible in this limited view." +msgstr "\"âÁÔØ˦×ÓØËÉÊ\" ÌÉÓÔ ÎÅ ÍÏÖÎÁ ÐÏÂÁÞÉÔÉ ÐÒÉ ÃØÏÍÕ ÏÂÍÅÖÅÎΦ." + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "\"âÁÔØ˦×ÓØËÉÊ\" ÌÉÓÔ ÎÅ ÍÏÖÎÁ ÐÏÂÁÞÉÔÉ." + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "÷ÉËÌÉË PGP..." + +#~ msgid "Bounce message to %s...?" +#~ msgstr "îÁĦÓÌÁÔÉ ËÏЦÀ ÐÏצÄÏÍÌÅÎÎÑ %s...?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "îÁĦÓÌÁÔÉ ËÏЦ§ ÐÏצÄÏÍÌÅÎØ %s...?" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "óÅÒÔÉƦËÁÔ ÚÂÅÒÅÖÅÎÏ" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "ò¦×ÅÎØ ÄÏצÒÉ ÄÏ ÃØÏÇÏ ID ÎÅ ×ÉÚÎÁÞÅÎÏ." + +#~ msgid "Decode-save" +#~ msgstr "òÏÚËÏÄ. Ê ÚÎÉÝ." + +#~ msgid "Decode-copy" +#~ msgstr "òÏÚËÏÄÕ×ÁÔÉ" + +#~ msgid "Decrypt-save" +#~ msgstr "òÏÚÛÉÆÒ. Ê ÚÎÉÝ." + +#~ msgid "Decrypt-copy" +#~ msgstr "òÏÚÛÉÆÒÕ×ÁÔÉ" + +#~ msgid "Copy" +#~ msgstr "ëÏÐ." + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- ë¦ÎÅÃØ ÔÅËÓÔÕ ÎÁ ×ÉÈÏĦ PGP --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "îÅÍÏÖÌÉ×Ï ÏÔÒÉÍÁÔÉ ÄÁΦ: %s" + +#~ msgid "%s: no such command" +#~ msgstr "ËÏÍÁÎÄÁ '%s' ÎÅ ¦ÓÎÕ¤" + +#~ msgid "Authentication method is unknown." +#~ msgstr "îÅצÄÏÍÉÊ ÍÅÔÏÄ ÁÕÔÅÎÔÉƦËÁæ§." + +#~ msgid "MIC algorithm: " +#~ msgstr "áÌÇÏÒ¦ÔÍ MIC: " + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "îÅÍÁ¤ ÓÅÎÓÕ ÃÅ ÒÏÂÉÔÉ, ÑËÝÏ ×É ÎŠЦÄÐÉÓÕ¤ÔÅ ÐÏצÄÏÍÌÅÎÎÑ." + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "îÅצÄÏÍÉÊ ÁÌÇÏÒ¦ÔÍ MIC, ÍÏÖÌÉצ ÌÉÛÅ: pgp-md5, pgp-sha1, pgp-rmd160" + +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "þÉÔÁÎÎÑ ÎÏ×ÏÇÏ ÐÏצÄÏÍÌÅÎÎÑ (%d ÂÁÊÔ)..." + +#~ msgid "Error reading message!" +#~ msgstr "ðÏÍÉÌËÁ ÞÉÔÁÎÎÑ ÌÉÓÔÁ!" + +#~ msgid "%s [%d message read]" +#~ msgstr "%s [%d ÌÉÓÔ ÐÒÏÞÉÔÁÎÏ]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "óÔ×ÏÒÅÎÎÑ ÐÏÛÔÏ×ÉÈ ÓËÒÉÎØÏË ÐÏËÉ ÝÏ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ." + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "ðÏ×ÔÏÒΊצÄËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ... %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "úÁËÒÉÔÔÑ ÐÏÛÔÏ×ϧ ÓËÒÉÎØËÉ..." + +#~ msgid "IMAP Username: " +#~ msgstr "¶Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ IMAP: " + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "CRAM key ÄÌÑ %s@%s: " + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "áÕÔÅÎÔÉƦËÁæÀ CRAM-MD5 ÐÒÏÐÕÝÅÎÏ." + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- ðÏÍÉÌËÁ: ˦ÎÅÃØ ÆÁÊÌÕ ÎÅ ÚÎÁÊÄÅÎÏ! --]\n" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "îÁÄÓÉÌÁÎÎÑ ËÏÍÁÎÄÉ APPEND..." + +#~ msgid "%d kept." +#~ msgstr "%d ÚÂÅÒÅÖÅÎÏ." + +#~ msgid "POP Password: " +#~ msgstr "ðÁÒÏÌØ POP: " + +#~ msgid "No POP username is defined." +#~ msgstr "¶Í'Ñ ËÏÒÉÓÔÕ×ÁÞÁ POP ÎÅ ×ÉÚÎÁÞÅÎÏ." + +#~ msgid "Could not find address for host %s." +#~ msgstr "îÅ ×ÉÊÛÌÏ ÚÎÁÊÔÉ ÁÄÒÅÓÕ ÄÌÑ %s." + +#~ msgid "Attachment saved" +#~ msgstr "äÏÄÁÔÏË ÚÂÅÒÅÖÅÎÏ" + +#~ msgid "Can't open %s: %s." +#~ msgstr "îÅ ×ÉÊÛÌÏ ×¦ÄËÒÉÔÉ %s: %s" + +#~ msgid "Error while recoding %s. Leave it unchanged." +#~ msgstr "ðÏÍÉÌËÁ ÐÒÉ ÒÅËÏÄÕ×ÁÎΦ %s. úÁÌÉÛÅÎÏ ÂÅÚ ÚͦÎ." + +#~ msgid "Error while recoding %s. See %s for recovering your data." +#~ msgstr "ðÏÍÉÌËÁ ÐÒÉ ÒÅËÏÄÕ×ÁÎΦ %s. äÉצÔØÓÑ %s ÄÌÑ ×¦ÄÎÏ×ÌÅÎÎÑ." + +#~ msgid "Can't change character set for non-text attachments!" +#~ msgstr "îÅ ÍÏÖÎÁ ÚͦÎÉÔÉ ËÏÄÕ×ÁÎÎÑ ÄÌÑ ÎÅÔÅËÓÔÏ×ÉÈ ÄÏÄÁÔ˦×!" + +#~ msgid "Enter character set: " +#~ msgstr "÷×ÅĦÔØ ÎÁÚ×Õ ËÏÄÕ×ÁÎÎÑ: " + +#~ msgid "Recoding successful." +#~ msgstr "ðÅÒÅËÏÄÕ×ÁÎÎÑ ×ÉËÏÎÁÎÏ." + +#~ msgid "change an attachment's character set" +#~ msgstr "×ÉÂÒÁÔÉ ËÏÄÕ×ÁÎÎÑ ÄÏÄÁÔËÕ" + +#~ msgid "recode this attachment to/from the local charset" +#~ msgstr "ÐÅÒÅËÏÄÕ×ÁÔÉ ÄÏÄÁÔÏË ÄÏ/Ú ÌÏËÁÌØÎÏÇÏ ËÏÄÕ×ÁÎÎÑ" + +#~ msgid "Compose" +#~ msgstr "ëÏÍÐÏÎÕ×ÁÎÎÑ" + +#~ msgid "We can't currently handle utf-8 at this point." +#~ msgstr "õ ÃØÏÍÕ Í¦Óæ utf-8 ÐÏËÉ ÝÏ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ." + +#~ msgid "UTF-8 encoding attachments has not yet been implemented." +#~ msgstr "ëÏÄÕ×ÁÎÎÑ ÄÏÄÁÔË¦× ÄÏ UTF-8 ÐÏËÉ ÝÏ ÎŠЦÄÔÒÉÍÕ¤ÔØÓÑ." + +#~ msgid "We currently can't encode to utf-8." +#~ msgstr "ëÏÄÕ×ÁÎÎÑ ÄÏ utf-8 ÐÏËÉ ÝÏ ÎÅÍÏÖÌÉ×Å." + +#~ msgid "move to the last undelete message" +#~ msgstr "ÐÅÒÅÓÕÎÕÔÉ ÄÏ ÏÓÔÁÎÎØÏÇÏ ÎÅ×ÉÄÁÌÅÎÏÇÏ ÌÉÓÔÁ" + +#~ msgid "return to the main-menu" +#~ msgstr "ÐÏ×ÅÒÎÅÎÎÑ ÄÏ ÏÓÎÏ×ÎÏÇÏ ÍÅÎÀ" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "ÐÏÒÏÖΤ ÐÏÌÅ ÚÁÇÏÌÏ×ËÕ '%s' ¦ÇÎÏÒÏ×ÁÎÏ" + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_error(): ÎÅÖÄÁÎÁ צÄÐÏצÄØ × %s: %s\n" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "÷ËÁÚÁÎÁ ×ÅÒÓ¦Ñ PGP ÄÌÑ Ð¦ÄÐÉÓÕ ÎÅצÄÏÍÁ." + +#~ msgid "Message edited. Really send?" +#~ msgstr "ìÉÓÔ ÚͦÎÅÎÏ. óÐÒÁ×Ħ צÄÓÉÌÁÔÉ?" + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "îÅצÄÏÍÁ ×ÅÒÓ¦Ñ PGP \"%s\"." + +#~ msgid "Display message using mailcap?" +#~ msgstr "÷¦ÄÏÂÒÁÚÉÔÉ ÌÉÓÔ Ú ×ÉËÏÒÉÓÔÁÎÎÑÍ mailcap?" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "îŠצÄËÒÉ×Á¤ÔÓÑ ÓÅËÒÅÔÎÉÊ ËÌÀÞ!" + +#~ msgid "%s is a boolean var!" +#~ msgstr "%s - ÌÏǦÞÎÁ ÚͦÎÎÁ!" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "÷É×ÏÄ ÐÏÒÏÄÖÅÎÏÇÏ ÐÒÏÃÅÓÕ ÚÂÅÒÅÖÅÎÏ × %s.\n" + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- ðÏÍÉÌËÁ: ÃÅÊ ÌÉÓÔ ÎŠצÄÐÏצÄÁ¤ ÓÐÅÃÉƦËÁç§ PGP/MIME --]\n" +#~ "\n" + +#~ msgid "This encoding is deprecated. Really use it?" +#~ msgstr "ãÅ ËÏÄÕ×ÁÎÎÑ ÚÁÓÔÁÒ¦ÌÅ. ä¦ÊÓÎÏ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ?" + +#~ msgid "Deleting non-multipart messages not yet supported" +#~ msgstr "÷ÉÄÁÌÅÎÎÑ ÌÉÓÔÁ, ÝÏ ÍÁ¤ ÏÄÎÕ ÞÁÓÔÉÎÕ, ΊЦÄÔÒÉÍÕ¤ÔØÓÑ" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo new file mode 100644 index 0000000000000000000000000000000000000000..810c0286327274cb3beb73098068b8f3a4260cc0 GIT binary patch literal 43046 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ℜi9*q~6d)i)+yB82x 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 literal 0 HcmV?d00001 diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..6c554ff --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,4568 @@ +# Translation for mutt in Traditional Chinese, Big5 encoding. +# +# Copyright Cd Chen <cdchen@mail.cynix.com.tw>, Weichung Chau <weichung@mail.cynix.com.tw>, Anthony Wong <ypwong@debian.org> +# +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.1.2\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 1999-12-20 20:41+0800\n" +"Last-Translator: Anthony Wong <ypwong@debian.org>\n" +"Language-Team: Chinese <zh@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=gb2312\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, fuzzy, c-format +msgid "Username at %s: " +msgstr "¸ü¸ÄÃû³ÆΪ£º" + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s µÄÃÜÂ룺" + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "À뿪" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "ɾ³ý" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "·´É¾³ý" + +#: addrbook.c:36 +msgid "Select" +msgstr "Ñ¡Ôñ" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "°ïÖú" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "ÄúûÓбðÃû×ÊÁÏ£¡" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "±ðÃû" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "È¡±ðÃûΪ£º" + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "ÄúÒѾ­ÎªÕâ¸öÃû×Ö¶¨ÒåÁ˱ðÃûÀ²£¡" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "µØÖ·£º" + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "¸öÈËÐÕÃû£º" + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] ½ÓÊÜ?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "´æµ½Îļþ£º" + +#: alias.c:342 +msgid "Alias added." +msgstr "±ðÃûÒѾ­Ôö¼Ó¡£" + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "ÎÞ·¨Æ¥ÅäÃû³ÆÄ£°å£¬¼ÌÐø£¿" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap ±à¼­ÏîÄ¿ÐèÒª %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "Ö´ÐÐ \"%s\" ʱ·¢Éú´íÎó£¡" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "´ò¿ªÎļþÀ´·ÖÎöÎļþͷʧ°Ü¡£" + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "´ò¿ªÎļþʱȥ³ýÎļþ±êͷʧ°Ü¡£" + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "ûÓÐ %s µÄ mailcap ×é³ÉµÇ¼£¬ÕýÔÚ½¨Á¢¿ÕµÄÎļþ¡£" + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "±à¼­ Mailcap ÏîĿʱÐèÒª %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "ûÓÐ %s µÄ mailcap ±à¼­µÇ¼" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "ûÓз¢ÏÖÅäºÏ mailcap µÄµÇ¼¡£½«ÒÔÎÄ×Öµµ·½Ê½ä¯ÀÀ¡£" + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME ÐÎʽδ±»¶¨Òå. ÎÞ·¨ÏÔʾ¸½¼þÄÚÈÝ¡£" + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "ÎÞ·¨½¨Á¢¹ýÂËÆ÷" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "ÎÞ·¨½¨Á¢¹ýÂË" + +#: attach.c:824 +msgid "Write fault!" +msgstr "дÈëʧ°Ü£¡" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "ÎÒ²»ÖªµÀÒªÈçºÎ´òÓ¡Ëü£¡" + +#: browser.c:41 +msgid "Chdir" +msgstr "¸Ä±äĿ¼" + +#: browser.c:42 +msgid "Mask" +msgstr "ÕÚÕÖ" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s ²»ÊÇÒ»¸öĿ¼" + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "ÐÅÏä [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "ÒѶ©ÔÄ [%s], ÎļþÕÚÕÖ: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "Ŀ¼ [%s], ÎļþÕÚÕÖ: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "ÎÞ·¨¸½´øĿ¼£¡" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "ûÓÐÎļþÓëÎļþÕÚÕÖÏà·û" + +#: browser.c:856 +#, fuzzy +msgid "Create is only supported for IMAP mailboxes" +msgstr "Ö»ÓÐ IMAP ÓÊÏä²ÅÖ§³Öɾ³ý" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "Ö»ÓÐ IMAP ÓÊÏä²ÅÖ§³Öɾ³ý" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "ÕæµÄҪɾ³ý \"%s\" ÓÊÏ䣿" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "ÓÊÏäÒÑɾ³ý¡£" + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "ÓÊÏäδ±»É¾³ý¡£" + +#: browser.c:923 +msgid "Chdir to: " +msgstr "¸Ä±äĿ¼µ½£º" + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "ÎÞ·¨É¨ÃèĿ¼¡£" + +#: browser.c:975 +msgid "File Mask: " +msgstr "ÎļþÕÚÕÖ£º" + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "·´ÏòÅÅÐò (d)ÈÕÆÚ, (a)×ÖÔª, (z)´óС »ò (n)²»ÅÅÐò ? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "ÒÀÕÕ (d)ÈÕÆÚ (a)×ÖÔª (z)´óС À´ÅÅÐò£¬»ò(n)²»ÅÅÐò ? " + +#: browser.c:1049 +msgid "dazn" +msgstr "" + +#: browser.c:1115 +msgid "New file name: " +msgstr "еµÃû£º" + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "ÎÞ·¨ÏÔʾĿ¼" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "ÎÞ·¨ÊÔÖøÏÔʾÎļþ" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "ÔÚ %s ÓÐÐÂÐżþ¡£" + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s£ºÖն˻úÎÞ·¨ÏÔʾɫ²Ê" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s£ºÃ»ÓÐÕâÖÖÑÕÉ«" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s£ºÃ»ÓÐÕâ¸öÎï¼þ" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s£ºÃüÁîÖ»ÌṩË÷ÒýÎï¼þ" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s£ºÌ«ÉÙ²ÎÊý" + +#: color.c:563 +msgid "Missing arguments." +msgstr "ȱÉÙ²ÎÊý¡£" + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "É«²Ê£ºÌ«ÉÙ²ÎÊý" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "µ¥É«£ºÌ«ÉÙ²ÎÊý" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s£ºÃ»ÓÐÕâ¸öÊôÐÔ" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "Ì«ÉÙ²ÎÊý" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "Ì«¶à²ÎÊý" + +#: color.c:721 +msgid "default colors not supported" +msgstr "²»Ö§³ÖÔ¤ÉèµÄÉ«²Ê" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "¼ì²é PGP Ç©Ãû?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡" + +#: commands.c:126 +#, fuzzy +msgid "Cannot create display filter" +msgstr "ÎÞ·¨½¨Á¢¹ýÂËÆ÷" + +#: commands.c:146 +#, fuzzy +msgid "Could not copy message" +msgstr "ÎÞ·¨¼Ä³öÐżþ¡£" + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£" + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£" + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£" + +#: commands.c:200 +#, fuzzy +msgid "PGP signature could NOT be verified." +msgstr "PGP Ç©ÃûÑéÖ¤³É¹¦¡£" + +#: commands.c:223 +msgid "Command: " +msgstr "Ö¸Á" + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "Ö±½Ó´«ËÍÓʼþµ½£º" + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "ÎÞ·¨´«ËÍÒѱê¼ÇµÄÓʼþÖÁ£º" + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "ÎÞ·¨·ÖÎöλַ£¡" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "ÓʼþÒѱ»´«ËÍ¡£" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "ÓʼþÒÑ´«ËÍ¡£" + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "ÓʼþÒѱ»´«ËÍ¡£" + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "ÓʼþÒÑ´«ËÍ¡£" + +#: commands.c:381 commands.c:415 commands.c:432 +#, fuzzy +msgid "Can't create filter process" +msgstr "ÎÞ·¨½¨Á¢¹ýÂË" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "ÓùܵÀÊä³öÖÁÃüÁ" + +#: commands.c:478 +#, fuzzy +msgid "No printing command has been defined." +msgstr "Ȧѡ½øÈëµÄÓÊͲ" + +#: commands.c:483 +msgid "Print message?" +msgstr "´òÓ¡Ðżþ£¿" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "´òÓ¡Òѱê¼ÇµÄÐżþ£¿" + +#: commands.c:492 +msgid "Message printed" +msgstr "ÐżþÒÑÓ¡³ö" + +#: commands.c:492 +msgid "Messages printed" +msgstr "ÐżþÒÑÓ¡³ö" + +#: commands.c:494 +#, fuzzy +msgid "Message could not be printed" +msgstr "ÐżþÒÑÓ¡³ö" + +#: commands.c:495 +#, fuzzy +msgid "Messages could not be printed" +msgstr "ÐżþÒÑÓ¡³ö" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"·´·½Ïò d)ÈÕÆÚ,f)·¢ÐÅÈË,r)ÊÕÐÅʱ¼ä,s)±êÌâ,o)ÊÕÐÅÈË,t)ÐòÁÐ,u)²»ÅÅ,z)´óС,c)·Ö" +"Êý:" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"ÅÅÐò d)ÈÕÆÚ,f)·¢ÐÅÈË,r)ÊÕÐÅʱ¼ä,s)±êÌâ,o)ÊÕÐÅÈË,t)ÐòÁÐ,u)²»ÅÅÐò,z)´óС,c)·Ö" +"Êý:" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Shell Ö¸Á" + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s µ½ÐÅÏä" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s µ½ÐÅÏä" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s µ½ÐÅÏä" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s µ½ÐÅÏä" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s µ½ÐÅÏä" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s µ½ÐÅÏä" + +#: commands.c:706 +msgid " tagged" +msgstr " Òѱê¼Ç" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "¿½±´µ½ %s¡­" + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "" + +#: commands.c:910 +#, fuzzy, c-format +msgid "Content-Type changed to %s." +msgstr "ÕýÁ¬½Óµ½ %s¡­" + +#: commands.c:912 +#, fuzzy, c-format +msgid "Character set changed to %s; %s." +msgstr "²»Ã÷µÄ×Ö·û¼¯ %s¡£" + +#: commands.c:914 +msgid "not converting" +msgstr "" + +#: commands.c:914 +msgid "converting" +msgstr "" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "ûÓи½¼þ¡£" + +#: compose.c:84 +msgid "Send" +msgstr "¼Ä³ö" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "ÖжÏ" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "¸½¼ÓÎļþ" + +#: compose.c:90 +msgid "Descrip" +msgstr "ÐðÊö" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "Ç©Ãû£¬¼ÓÃÜ" + +#: compose.c:129 +msgid "Encrypt" +msgstr "¼ÓÃÜ" + +#: compose.c:131 +msgid "Sign" +msgstr "Ç©Ãû" + +#: compose.c:133 +msgid "Clear" +msgstr "Çå³ý" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " Ç©ÃûµÄÉí·ÝÊÇ£º " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<Ô¤ÉèÖµ>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "¼ÓÃÜ" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(e)¼ÓÃÜ, (s)Ç©Ãû, (a)ÓñðµÄÉí·ÝÇ©, (b)Á½Õß½ÔÒª, Ñ¡Ôñ (m)ic ÑÝËã·¨ »ò (f)·Å" +"Æú£¿" + +#: compose.c:166 +msgid "esabf" +msgstr "" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "Ç©ÃûµÄÉí·ÝÊÇ£º" + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "" +"(e)¼ÓÃÜ, (s)Ç©Ãû, (a)ÓñðµÄÉí·ÝÇ©, (b)Á½Õß½ÔÒª, Ñ¡Ôñ (m)ic ÑÝËã·¨ »ò (f)·Å" +"Æú£¿" + +#: compose.c:228 +msgid "eswabf" +msgstr "" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] ÒѲ»´æÔÚ!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] ÒÑÐ޸ġ£¸üбàÂ룿" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- ¸½¼þ" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "Äú²»¿ÉÒÔɾ³ýΨһµÄ¸½¼þ¡£" + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "ÕýÔÚ¸½¼ÓÑ¡È¡Á˵ÄÎļþ¡­" + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "ÎÞ·¨¸½¼Ó %s£¡" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "´ò¿ªÐÅÏä²¢´ÓËüÑ¡Ôñ¸½¼ÓµÄÐżþ" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "Îļþ¼ÐÖÐûÓÐÐżþ¡£" + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "Çë±ê¼ÇÄúÒª¸½¼ÓµÄÐżþ£¡" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "ÎÞ·¨¸½¼Ó£¡" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "Ö»ÖØбàÂëÊÜÓ°ÏìµÄÎÄ×Ö¸½¼þ" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "Õâ¸ö¸½¼þ²»»á±»×ª»»¡£" + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "Õâ¸ö¸½¼þ»á±»×ª»»¡£" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "ÎÞЧµÄ±àÂë¡£" + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "´¢´æÕâ·âÐżþµÄ¿½±´Âð£¿" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "¸ü¸ÄÃû³ÆΪ£º" + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "ÎÞ·¨¶ÁÈ¡£º%s" + +#: compose.c:1141 +msgid "New file: " +msgstr "½¨Á¢Ðµµ£º" + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type µÄ¸ñʽÊÇ base/sub" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "²»Ã÷µÄ Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "ÎÞ·¨½¨Á¢Îļþ %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "ÎÒÃÇÎÞ·¨¼ÓÉϸ½¼þ" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "ÑӳټijöÕâ·âÐżþ£¿" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "½«ÐżþдÈëµ½ÐÅÏä" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "дÈëÐżþµ½ %s ¡­" + +#: compose.c:1305 +msgid "Message written." +msgstr "ÐżþÒÑдÈë¡£" + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- ÒÔÏÂΪ PGP Êä³öµÄ×ÊÁÏ£¨ÏÖÔÚʱ¼ä£º " + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "ÒÑÍü¼Ç PGP ͨÐÐÃÜÂë¡£" + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "ÇëÊäÈë PGP ͨÐÐÃÜÂ룺" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "ÇëÊäÈë PGP ͨÐÐÃÜÂ룺" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "½¨Á¢Ò»·â application/pgp µÄÐżþ£¿" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "Æô¶¯ PGP¡­" + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +#, fuzzy +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- ´íÎ󣺲»Ò»Ö嵀 multipart/signed ½á¹¹£¡ --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- ´íÎ󣺲»Ã÷µÄ multipart/signed Э¶¨ %s£¡ --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- ¾¯¸æ£ºÎÒÃDz»ÄÜ֤ʵ %s/%s Ç©Ãû¡£ --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- ÒÔϵÄ×ÊÁÏÒѱ»Ç©Êð --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- ¾¯¸æ£ºÕÒ²»µ½ÈκεÄÇ©Ãû¡£ --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- Ç©ÊðµÄ×ÊÁϽáÊø --]\n" + +# Don't translate this!! +#: curs_lib.c:157 +msgid "yes" +msgstr "" + +# Don't translate this!! +#: curs_lib.c:158 +msgid "no" +msgstr "" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "À뿪 Mutt£¿" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "²»Ã÷µÄ´íÎó" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "°´ÏÂÈκÎÒ»¸ö¼ü¼ÌÐø¡­" + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " (Óà '?' ÏÔʾÁбí)£º" + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "ûÓÐÒÑ´ò¿ªÐÅÏä¡£" + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "ûÓÐÐżþ¡£" + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "ÐÅÏäÊÇÖ»¶ÁµÄ¡£" + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "¹¦ÄÜÔÚ attach-message ģʽϲ»±»Ö§³Ö¡£" + +#: curs_main.c:51 +#, fuzzy +msgid "No visible messages." +msgstr "ûÓÐÐÂÐżþ" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "ÎÞ·¨Ð´Èëµ½Ò»¸öÖ»¶ÁµÄÐÅÏ䣡" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "ÔÚÀ뿪֮ºó½«»á°Ñ¸Ä±äдÈë×ÊÁϼС£" + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "½«²»»á°Ñ¸Ä±äдÈë×ÊÁϼС£" + +#: curs_main.c:397 +msgid "Quit" +msgstr "À뿪" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "´¢´æ" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "Ðżþ" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "»Ø¸²" + +#: curs_main.c:403 +msgid "Group" +msgstr "Ⱥ×é" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "ÐÅÏäÒѱ»ÆäËû;¾¶¸Ä±ä¹ý¡£Æì±ê¿ÉÄÜÓдíÎó¡£" + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "Õâ¸öÐÅÏäÖÐÓÐÐÂÐżþ¡£" + +#: curs_main.c:499 +#, fuzzy +msgid "Mailbox was externally modified." +msgstr "ÐÅÏäÒѱ»ÆäËû;¾¶¸Ä±ä¹ý¡£Æì±ê¿ÉÄÜÓдíÎó¡£" + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "ûÓбê¼ÇÁ˵ÄÐżþ¡£" + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "ÕýÁ¬½Óµ½ %s¡­" + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "Ìøµ½Ðżþ£º" + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "ÐèÒªÒ»¸öÐżþ±àºÅµÄ²ÎÊý¡£" + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "Õâ·âÐżþÎÞ·¨ÏÔʾ¡£" + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "ÎÞЧµÄÐżþ±àºÅ¡£" + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "ɾ³ý·ûºÏÕâÑùʽµÄÐżþ£º" + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "ûÓÐÏÞÖÆÑùʽÊÇÓÐЧµÄ¡£" + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "ÏÞÖÆ: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "ÏÞÖÆÖ»·ûºÏÕâÑùʽµÄÐżþ£º" + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "À뿪 Mutt£¿" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "±ê¼ÇÐżþµÄÌõ¼þ£º" + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "·´É¾³ýÐżþµÄÌõ¼þ£º" + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "·´±ê¼ÇÐżþµÄÌõ¼þ£º" + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "ÓÃÖ»¶Áģʽ´ò¿ªÐÅÏä" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "´ò¿ªÐÅÏä" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s ²»ÊÇÐÅÏä¡£" + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "²»´¢´æ±ãÀ뿪 Mutt Âð£¿" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "ÄúÒѾ­ÔÚ×îºóÒ»·âÐÅÁË¡£" + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "ûÓÐÒª·´É¾³ýµÄÐżþ¡£" + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "ÄúÒѾ­ÔÚµÚÒ»·âÐÅÁË¡£" + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "ËÑÑ°ÖÁ¿ªÍ·¡£" + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "ËÑÑ°ÖÁ½áβ¡£" + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "ûÓÐÐÂÐżþ" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "ûÓÐÉÐδ¶ÁÈ¡µÄÐżþ" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " ÔÚÕâÏÞ¶¨µÄä¯ÀÀÖÐ" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­" + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "ûÓиü¶àµÄÐòÁÐ" + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "ÄúÒѾ­ÔÚµÚÒ»¸öÐòÁÐÉÏ¡£" + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "ÐòÁй¦ÄÜÉÐδÆô¶¯¡£" + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "ÐòÁÐÖÐÓÐÉÐδ¶ÁÈ¡µÄÐżþ¡£" + +#: curs_main.c:1802 +#, fuzzy +msgid "Can't edit message on POP server." +msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­" + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\t²åÈëÒÔ ~ ·ûºÅ¿ªÍ·µÄÒ»ÐÐ\n" +"~b »§¿Ú\tÐÂÔö»§¿Úµ½ Bcc: À¸Î»\n" +"~c »§¿Ú\tÐÂÔö»§¿Úµ½ Cc: À¸Î»\n" +"~f Ðżþ\t°üº¬Ðżþ\n" +"~F ѶϢ\tÀàËÆ ~f, ²»°üÀ¨Ðżþ±êÍ·\n" +"~h\t\t±à¼­ÐżþµÄ±êÍ·\n" +"~m ѶϢ\t°üÀ¨ÒýÑÔ\n" +"~M ѶϢ\tÀàËÆ ~m, ²»°üÀ¨Ðżþ±êÍ·\n" +"~p\t\t´òÓ¡Õâ·âÐżþ\n" +"~q\t\t´æµµ²¢ÇÒÀ뿪±à¼­Æ÷\n" +"~r Îļþ\t\t½«Îļþ¶ÁÈë±à¼­Æ÷\n" +"~t »§¿Ú\tÐÂÔö»§¿Úµ½ To: À¸Î»\n" +"~u\t\t»½»Ø֮ǰÄÇÒ»ÐÐ\n" +"~v\t\tʹÓà $visual ±à¼­Æ÷±à¼­Ñ¶Ï¢\n" +"~w Îļþ\t\t½«Ñ¶Ï¢Ð´ÈëÎļþ\n" +"~x\t\tÍ£Ö¹Ð޸IJ¢À뿪±à¼­Æ÷\n" +"~?\t\tÕâѶϢ\n" +".\t\tÈç¹ûÊÇÒ»ÐÐÀïµÄΨһ×Ö·û£¬Ôò´ú±í½áÊøÊäÈë\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d£ºÎÞЧµÄÐżþºÅÂë¡£\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "£¨ÔÚÒ»ÐÐÀïÊäÈëÒ»¸ö . ·ûºÅÀ´½áÊøÐżþ£©\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "ûÓÐÐÅÏä¡£\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "Ðżþ°üº¬£º\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "£¨¼ÌÐø£©\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "ÒÅʧÁ˵µÃû¡£\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "ÎÄÕÂÖÐûÓÐÎÄ×Ö¡£\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s£º²»Ã÷µÄ±à¼­Æ÷Ö¸Á~? ÇóÖú£©\n" + +#: editmsg.c:74 +#, fuzzy, c-format +msgid "could not create temporary folder: %s" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡" + +#: editmsg.c:84 +#, fuzzy, c-format +msgid "could not write temporary mail folder: %s" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡" + +#: editmsg.c:116 +#, fuzzy +msgid "Message file is empty!" +msgstr "ÐÅÏäÄÚ¿ÕÎÞÒ»Îï¡£" + +#: editmsg.c:123 +#, fuzzy +msgid "Message not modified!" +msgstr "ÐżþÒÑÓ¡³ö" + +#: editmsg.c:131 +#, fuzzy, c-format +msgid "Can't open message file: %s" +msgstr "ÎÞ·¨½¨Á¢Îļþ %s" + +#: editmsg.c:138 editmsg.c:165 +#, fuzzy, c-format +msgid "Can't append to folder: %s" +msgstr "ÎÞ·¨½¨Á¢Îļþ %s" + +#: editmsg.c:196 +#, fuzzy, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ" + +#: flags.c:332 +msgid "Set flag" +msgstr "É趨Æì±ê" + +#: flags.c:332 +msgid "Clear flag" +msgstr "Çå³ýÆì±ê" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- ´íÎó£º ÎÞ·¨ÏÔʾ Multipart/Alternative£¡ --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- ¸½¼þ #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- ÐÎ̬: %s%s, ±àÂë: %s, ´óС: %s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- ʹÓà %s ×Ô¶¯ÏÔʾ --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "Ö´ÐÐ×Ô¶¯ÏÔʾָÁ%s" + +#: handler.c:1560 +#, fuzzy, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- ÔÚ %s --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- ×Ô¶¯ÏÔʾµÄ %s µÄ stderr ÄÚÈÝ --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "[-- ´íÎó: message/external-body ûÓдæÈ¡ÀàÐ͵IJÎÊý --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- %s/%s ¸½¼þ " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(%s λԪ×é) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "ÒѾ­±»É¾³ýÁË --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- ÔÚ %s --]\n" + +#: handler.c:1674 +#, fuzzy, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- ÔÚ %s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- %s/%s ¸½¼þ " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- %s/%s ¸½¼þÎÞ·¨±»¸½ÉÏ, --]\n" +"[-- ²¢ÇÒ±»Ö¸Ê¾µÄÍⲿԭʼµµÒÑ --]\n" +"[-- ¹ýÆÚ¡£ --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- %s/%s ¸½¼þÎÞ·¨±»¸½ÉÏ, --]\n" +"[-- ²¢ÇÒ±»Ö¸Ê¾µÄ´æÈ¡ÀàÐÍ %s ²»±»Ö§³Ö --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "´íÎó£ºmultipart/signed ûÓÐͨѶЭ¶¨¡£" + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "´íÎó£ºmultipart/encrypted ûÓÐÈκÎͨѶЭ¶¨²ÎÊý£¡" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "ÎÞ·¨´ò¿ªÔÝ´æµµ£¡" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s ÉÐδ֧³Ö " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "£¨Ê¹Óà '%s' À´ÏÔʾÕⲿ·Ý£©" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "£¨ÐèÒª¶¨ÒåÒ»¸ö¼ü¸ø 'view-attachments' lä¯ÀÀ¸½¼þ)£¡)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s£ºÎÞ·¨¸½´øÎļþ" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "´íÎó£ºÇë»Ø±¨Õâ¸öÎÊÌâ" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<²»Ã÷µÄ>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"±ê×¼¹¦Äܶ¨Ò壺\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"δ±»¶¨ÒåµÄ¹¦ÄÜ£º\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "%s µÄÇóÖú" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "" + +#: hook.c:254 +#, fuzzy, c-format +msgid "unhook: unknown hook type: %s" +msgstr "%s£º²»Ã÷µÄÖÖÀà" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "" + +#: imap/auth.c:104 pop_auth.c:411 +#, fuzzy +msgid "No authenticators available" +msgstr "GSSAPI Ñé֤ʧ°Ü¡£" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "ÑéÖ¤ÖÐ (ÄäÃû)¡­" + +#: imap/auth_anon.c:69 +#, fuzzy +msgid "Anonymous authentication failed." +msgstr "²»Ö§³ÖÄäÃûÑéÖ¤¡£" + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "ÑéÖ¤ÖÐ (CRAM-MD5)¡­" + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 Ñé֤ʧ°Ü¡£" + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "ÑéÖ¤ÖÐ (GSSAPI)¡­" + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI Ñé֤ʧ°Ü¡£" + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "" + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "µÇÈëÖС­" + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "µÇÈëʧ°Ü¡£" + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "ÑéÖ¤ÖÐ (GSSAPI)¡­" + +#: imap/auth_sasl.c:199 pop_auth.c:172 +#, fuzzy +msgid "SASL authentication failed." +msgstr "GSSAPI Ñé֤ʧ°Ü¡£" + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +#, fuzzy +msgid "Getting namespaces..." +msgstr "¼Ä³öÐżþÖС­" + +#: imap/browse.c:90 +#, fuzzy +msgid "Getting folder list..." +msgstr "ÒѽӴ¥ËÅ·þÆ÷£¬ÕýÄÃȡĿ¼±í¡­" + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s£ºÃ»ÓÐÕâÖÖÑÕÉ«" + +#: imap/browse.c:277 +#, fuzzy +msgid "Create mailbox: " +msgstr "´ò¿ªÐÅÏä" + +#: imap/browse.c:282 +#, fuzzy +msgid "Mailbox must have a name." +msgstr "ÐÅÏäûÓиı䡣" + +#: imap/browse.c:290 +#, fuzzy +msgid "Mailbox created." +msgstr "ÓÊÏäÒÑɾ³ý¡£" + +#: imap/command.c:290 +#, fuzzy +msgid "Mailbox closed" +msgstr "ÓÊÏäÒÑɾ³ý¡£" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "ÑÏÖØ´íÎó¡£ÐżþÊýÁ¿²»Ð­µ÷£¡" + +#: imap/imap.c:147 +#, fuzzy, c-format +msgid "Closing connection to %s..." +msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­" + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "Õâ¸ö IMAP ËÅ·þÆ÷Òѹýʱ£¬Mutt ÎÞ·¨Ê¹ÓÃËü¡£" + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "Ñ¡Ôñ %s ÖС­" + +#: imap/imap.c:690 +#, fuzzy +msgid "Error opening mailbox" +msgstr "дÈëÐÅÏäʱ·¢Éú´íÎó£¡" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "ÎÞ·¨¸½¼ÓÔÚÕâ¸öËÅ·þÆ÷É쵀 IMAP ÐÅÏä" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "½¨Á¢ %s£¿" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­" + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "±êÇ©Á赀 %d ·âÐżþɾȥÁË¡­" + +#: imap/imap.c:961 +#, fuzzy +msgid "Expunge failed" +msgstr "µÇÈëʧ°Ü¡£" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "ÕýÔÚ´¢´æÐżþ״̬Æì±ê¡­ [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­" + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +#, fuzzy +msgid "CLOSE failed" +msgstr "µÇÈëʧ°Ü¡£" + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "´ò¿ªÐÅÏä" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "¶©ÔÄ %s¡­" + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "È¡Ïû¶©ÔÄ %s¡­" + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "ÎÞ·¨È¡»ØʹÓÃÕâ¸ö IMAP ËÅ·þÆ÷°æ±¾µÄÓʼþµÄ±êÍ·¡£" + +#: imap/message.c:84 +#, fuzzy, c-format +msgid "Could not create temporary file %s" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ£¡" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "ÕýÔÚÈ¡»ØÐżþ±êÍ·¡­ [%d/%d]" + +#: imap/message.c:250 pop.c:340 +#, fuzzy +msgid "Fetching message..." +msgstr "¼Ä³öÐżþÖС­" + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "" + +#: imap/message.c:466 +#, fuzzy +msgid "Uploading message ..." +msgstr "¼Ä³öÐżþÖС­" + +#: imap/message.c:576 +#, fuzzy, c-format +msgid "Copying %d messages to %s..." +msgstr "ÕýÔÚ°áÒÆÒѾ­¶ÁÈ¡µÄÐżþµ½ %s ¡­" + +#: imap/message.c:580 +#, fuzzy, c-format +msgid "Copying message %d to %s..." +msgstr "дÈëÐżþµ½ %s ¡­" + +#: imap/util.c:239 +#, fuzzy +msgid "Continue?" +msgstr "£¨¼ÌÐø£©\n" + +#: init.c:611 +msgid "alias: no address" +msgstr "±ðÃû£ºÃ»Óеç×ÓÓʼþλַ" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "ÎÞЧµÄ±êÍ·À¸Î»" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s£º²»Ã÷µÄÅÅÐò·½Ê½" + +#: init.c:879 +#, fuzzy, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_defualt£º´íÎóµÄÕý¹æ±íʾʽ£º%s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s£º²»Ã÷µÄ±äÁ¿" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "ÖØÐÂÉèÖúó×ÖÊ×ÈÔ²»ºÏ¹æ¶¨" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "ÖØÐÂÉèÖúóÖµÈÔ²»ºÏ¹æ¶¨" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s Òѱ»É趨" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s ûÓб»É趨" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s£ºÎÞЧµÄÐÅÏäÖÖÀà" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s£ºÎÞЧµÄÖµ" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s£º²»Ã÷µÄÖÖÀà" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s£º²»Ã÷µÄÖÖÀà" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "ÎÞ·¨¶ÁÈ¡£º%s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s ²»ÊÇÐÅÏä¡£" + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "%s ·¢Éú´íÎó£¬ÐкŠ%d£º%s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source£º´íÎó·¢ÉúÔÚ %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source£º´íÎó·¢ÉúÔÚ %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source£ºÌ«¶à²ÎÊý" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s£º²»Ã÷µÄÖ¸Áî" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "Ö¸ÁîÐÐÓÐ´í£º%s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "ÎÞ·¨¾ö¶¨ home Ŀ¼" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "ÎÞ·¨¾ö¶¨Ê¹ÓÃÕßÃû³Æ" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "¼ì²âµ½¾Þ¼¯ÖÐÓлØȦ¡£" + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "Õâ¸ö¼ü»¹Î´±»¶¨Ò幦ÄÜ¡£" + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "Õâ¸ö¼ü»¹Î´±»¶¨Ò幦ÄÜ¡£ °´ '%s' ÒÔÈ¡µÃ˵Ã÷¡£" + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push£ºÌ«¶à²ÎÊý" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s£ºÃ»ÓÐÕâ¸öÑ¡µ¥" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "¿ÕµÄ¼üÖµÐòÁÐ" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind£ºÌ«¶à²ÎÊý" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s£ºÔÚ¶ÔÓ³±íÖÐûÓÐÕâÑùµÄº¯Êý" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro£º¿ÕµÄ¼üÖµÐòÁÐ" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro£º²ÎÊýÌ«¶à" + +#: keymap.c:871 +#, fuzzy +msgid "exec: no arguments" +msgstr "exec£º²ÎÊýÌ«ÉÙ" + +#: keymap.c:891 +#, fuzzy, c-format +msgid "%s: no such function" +msgstr "%s£ºÔÚ¶ÔÓ³±íÖÐûÓÐÕâÑùµÄº¯Êý" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "ÇëÊäÈë %s µÄÔ¿³× ID£º" + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "¿ÕµÄÔËËã" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "Ç¿ÆÈʹÓà mailcap ä¯ÀÀ¼Ðµµ" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "ÓÃÎÄ×Ö·½Ê½ÏÔʾ¸½¼þÄÚÈÝ" + +#: keymap_alldefs.h:9 +#, fuzzy +msgid "Toggle display of subparts" +msgstr "Çл»ÒýÑÔÏÔʾ" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "ÒƵ½±¾Ò³µÄ×îºóÃæ" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "ÖØмÄПøÁíÍâÒ»¸öʹÓÃÕß" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "ÇëÑ¡Ôñ±¾Ä¿Â¼ÖÐÒ»¸öеÄÎļþ" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "ÏÔʾÎļþ" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "ÏÔʾËùÑ¡ÔñµÄÎļþ" + +#: keymap_alldefs.h:15 +#, fuzzy +msgid "subscribe to current mailbox (IMAP only)" +msgstr "¶©ÔÄÕâ¸öÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)" + +#: keymap_alldefs.h:16 +#, fuzzy +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "È¡Ïû¶©ÔÄÕâ¸öÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)" + +#: keymap_alldefs.h:17 +#, fuzzy +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "Çл»ÏÔʾ È«²¿/ÒѶ©ÔÄ µÄÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "ûÓÐÐÅÏäÓÐÐÂÐżþ¡£" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "¸Ä±äĿ¼" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "¼ì²éÐÅÏäÊÇ·ñÓÐÐÂÐżþ" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "ÔÚÕâ·âÐżþÖмдøÎļþ" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "ÔÚÕâ·âÐżþÖмдøÐżþ" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "±à¼­ BCC Áбí" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "±à¼­ CC Áбí" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "±à¼­¼ÐµµµÄ˵Ã÷" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "±à¼­¼ÐµµµÄ´«Êä±àÂë·¨Ôò" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "ÇëÊäÈëÓÃÀ´´¢´æÕâ·âÐżþ¿½±´µÄÎļþÃû³Æ" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "±à¼­Òª±»¼Ð´øµÄÎļþÃû³Æ" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "±à¼­·¢ÐÅÈËÀ¸Î»" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "±à¼­ÐżþµÄ±êÍ·" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "±à¼­ÐżþÄÚÈÝ" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "ʹÓà mailcap ±à¼­¼Ðµµ" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "±à¼­ Reply-To À¸Î»" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "±à¼­ÐżþµÄ±êÌâ" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "±à¼­ TO Áбí" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "ÖÆÔìÐÂÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)" + +#: keymap_alldefs.h:37 +#, fuzzy +msgid "edit attachment content type" +msgstr "±à¼­¸½¼þµÄµÄ content type" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "È¡µÃ¸½¼þµÄÔݴ濽±´" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "Õâ·âÐżþÖ´ÐÐ ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "ʹÓà mailcap À´×éºÏеļеµ" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "Çл»ÊÇ·ñÔÙΪ¸½¼þÖØбàÂë" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "´¢´æÐżþÒÔ±ãÉÔºó¼Ä³ö" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "¸ü¸ÄµµÃû/ÒƳý Ò»¸ö¼Ð´øµÄÎļþ" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "¼Ä³öÐżþ" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "¼Ä³öºóÇл»ÖÁÊÇ·ñɾ³ýÎļþ" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "¸üи½¼þµÄ±àÂë×ÊѶ" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "´æÈëÒ»·âÐżþµ½Ä³¸öÎļþ¼Ð" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "¿½±´Ò»·âÐżþµ½Ä³¸öÎļþ»òÐÅÏä" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "½¨Á¢Ä³·âÐżþ¼ÄÐÅÈ˵ıðÃû" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "ÒÆÖÁÓ©Ä»½áβ" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "ÒÆÖÁÓ©Ä»ÖÐÑë" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "ÒÆÖÁÓ©Ä»¿ªÍ·" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "ÖÆ×÷¿É½âÂëµÄ (text/plain) ¿½±´" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "ÖÆ×÷¿É½âÂëµÄ¿½±´ (text/plain) ²¢ÇÒɾ³ýÖ®" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "ɾ³ýËùÔÚµÄÐżþ×ÊÁÏ" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "ɾ³ýÕâ¸öÓÊÏä (Ö»ÊÊÓÃÓÚ IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "ɾ³ýËùÓÐÔÚ×ÓÐòÁÐÖеÄÐżþ" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "ɾ³ýËùÓÐÔÚÐòÁÐÖеÄÐżþ" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "ÏÔʾ¼ÄÐÅÈ˵ÄÍêÕûλַ" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "ÏÔʾÐżþ²¢Çл»Ñ¹ÒÖ±êÍ·×ÊÁÏÏÔʾ" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "ÏÔʾһ·âÐżþ" + +#: keymap_alldefs.h:63 +#, fuzzy +msgid "edit the raw message" +msgstr "±à¼­ÐżþÄÚÈÝ" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "ɾ³ýÓαêËùÔÚλÖÃ֮ǰµÄ×Öĸ" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "Ïò×óÒƶ¯Ò»¸ö×ÖÔª" + +#: keymap_alldefs.h:66 +#, fuzzy +msgid "move the cursor to the beginning of the word" +msgstr "Ìøµ½ÐÐÊ×" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "Ìøµ½ÐÐÊ×" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "Ȧѡ½øÈëµÄÓÊͲ" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "ÍêÕûµÄµµÃû»ò±ðÃû" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "¸½ÉÏÍêÕûµÄλַ²éѯ" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "ɾ³ýÓαêËùÔÚµÄ×Öĸ" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "Ìøµ½ÐÐβ" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "ÏòÓαêÏòÓÒÒƶ¯Ò»¸ö×ÖÔª" + +#: keymap_alldefs.h:74 +#, fuzzy +msgid "move the cursor to the end of the word" +msgstr "ÏòÓαêÏòÓÒÒƶ¯Ò»¸ö×ÖÔª" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "ÏòÉÏ¾í¶¯Ê¹ÓüͼÇåµ¥" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "ÏòÉÏ¾í¶¯Ê¹ÓüͼÇåµ¥" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "ÓÉÓαêËùÔÚλÖÃɾ³ýÖÁÐÐβËùÓеÄ×ÖÔª" + +#: keymap_alldefs.h:78 +#, fuzzy +msgid "delete chars from the cursor to the end of the word" +msgstr "ÓÉÓαêËùÔÚλÖÃɾ³ýÖÁÐÐβËùÓеÄ×ÖÔª" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "ɾ³ýÓαê֮ǰµÄ×Ö" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "ÓÃÏÂÒ»¸öÊäÈëµÄ¼üÖµ×÷ÒýÑÔ" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "" + +#: keymap_alldefs.h:84 +#, fuzzy +msgid "convert the word to lower case" +msgstr "ÒƵ½±¾Ò³µÄ×îºóÃæ" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "ÊäÈë muttrc Ö¸Áî" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "ÊäÈëÎļþÕÚÕÖ" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "À뿪Õâ¸öÑ¡µ¥" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "͸¹ý shell Ö¸ÁîÀ´¹ýÂ˸½¼þ" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "ÒƵ½µÚÒ»Ïî×ÊÁÏ" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "Çл»Ä³·âÐżþµÄ 'ÖØÒª' Æì±ê" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "ת¼ÄѶϢ²¢¼ÓÉ϶îÍâÎÄ×Ö" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "Ñ¡ÔñËùÔÚµÄ×ÊÁϼǼ" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "»Ø¸²¸øËùÓÐÊÕ¼þÈË" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "ÏòÏÂ¾í¶¯°ëÒ³" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "ÏòÉÏ¾í¶¯°ëÒ³" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "Õâ¸öÆÁÄ»" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "Ìøµ½Ä³Ò»¸öË÷ÒýºÅÂë" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "Òƶ¯µ½×îºóÒ»Ïî×ÊÁÏ" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "»Ø¸²¸øijһ¸öÖ¸¶¨µÄÓʼþÁбí" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "Ö´ÐÐÒ»¸ö¾Þ¼¯" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "׫дһ·âеÄÐżþ" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "´ò¿ªÁíÒ»¸öÎļþ¼Ð" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "ÓÃÖ»¶Áģʽ´ò¿ªÁíÒ»¸öÎļþ¼Ð" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "Çå³ýij·âÐżþÉϵÄ״̬Æì±ê" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "ɾ³ý·ûºÏij¸ö¸ñʽµÄÐżþ" + +#: keymap_alldefs.h:107 +#, fuzzy +msgid "force retrieval of mail from IMAP server" +msgstr "È¡»Ø POP ËÅ·þÆ÷ÉϵÄÐżþ" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "È¡»Ø POP ËÅ·þÆ÷ÉϵÄÐżþ" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "Òƶ¯µ½µÚÒ»·âÐżþ" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "Òƶ¯µ½×îºóÒ»·âÐżþ" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "Ö»ÏÔʾ·ûºÏij¸ö¸ñʽµÄÐżþ" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "Ìøµ½ÏÂÒ»·âеÄÐżþ" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "Ìøµ½ÏÂÒ»¸öδ¶ÁÈ¡µÄÐżþ" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "Ìøµ½ÏÂÒ»¸ö×ÓÐòÁÐ" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "Ìøµ½ÏÂÒ»¸öÐòÁÐ" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "Òƶ¯µ½ÏÂÒ»¸öδɾ³ýµÄÐżþ" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "Ìøµ½ÏÂÒ»¸öδ¶ÁÈ¡µÄÐżþ" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "Ìøµ½Õâ¸öÐòÁеÄÖ÷Ðżþ" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "Ìøµ½ÉÏÒ»¸öÐòÁÐ" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "Ìøµ½ÉÏÒ»¸ö×ÓÐòÁÐ" + +#: keymap_alldefs.h:121 +#, fuzzy +msgid "move to the previous undeleted message" +msgstr "Òƶ¯µ½ÏÂÒ»¸öδɾ³ýµÄÐżþ" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "Ìøµ½ÉÏÒ»¸öеÄÐżþ" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "Ìøµ½ÉÏÒ»¸öδ¶ÁÈ¡µÄÐżþ" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "Ìøµ½ÉÏÒ»¸öδ¶ÁÈ¡µÄÐżþ" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "±ê¼ÇÏÖÔÚµÄÐòÁÐΪÒѶÁÈ¡" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "±ê¼ÇÏÖÔÚµÄ×ÓÐòÁÐΪÒѶÁÈ¡" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "É趨ijһ·âÐżþµÄ״̬Æì±ê" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "´¢´æ±ä¶¯µ½ÐÅÏä" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "±ê¼Ç·ûºÏij¸ö¸ñʽµÄÐżþ" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "·´É¾³ý·ûºÏij¸ö¸ñʽµÄÐżþ" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "·´±ê¼Ç·ûºÏij¸ö¸ñʽµÄÐżþ" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "Òƶ¯µ½±¾Ò³µÄÖмä" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "Òƶ¯µ½ÏÂÒ»Ïî×ÊÁÏ" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "ÏòÏÂ¾í¶¯Ò»ÐÐ" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "ÒƵ½ÏÂÒ»Ò³" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "Ìøµ½ÐżþµÄ×îºóÃæ" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "Çл»ÒýÑÔÏÔʾ" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "Ìø¹ýÒýÑÔ" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "Ìøµ½ÐżþµÄ×îÉÏÃæ" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "Êä³öµ¼Ïò ѶϢ/¸½¼þ ÖÁÃüÁî½âÒëÆ÷" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "ÒƵ½ÉÏÒ»Ïî×ÊÁÏ" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "ÏòÉÏ¾í¶¯Ò»ÐÐ" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "ÒƵ½ÉÏÒ»Ò³" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "´òÓ¡ÏÖÔÚµÄ×ÊÁÏ" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "ÀûÓÃÍⲿӦÓóÌÐò²éѯµØÖ·" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "¸½¼ÓеIJéѯ½á¹ûÖÁÏÖ½ñµÄ²éѯ½á¹û" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "´¢´æ±ä¶¯¹ýµÄ×ÊÁϵ½ÐÅÏä²¢ÇÒÀ뿪" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "ÖØнгöÒ»·â±»ÑӳټijöµÄÐżþ" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "Çå³ý²¢ÖØлæÖÆÆÁÄ»" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{ÄÚ²¿µÄ}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "»Ø¸²Ò»·âÐżþ" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "ÓÃÕâ·âÐżþ×÷ΪÐÂÐżþµÄÄ£°å" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "´¢´æÐżþ/¸½¼þµ½Ä³¸öÎļþ" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "ÓÃÕý¹æ±íʾʽѰÕÒ" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "ÏòºóËÑÑ°Ò»¸öÕý¹æ±íʾʽ" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "Ñ°ÕÒÏÂÒ»¸ö·ûºÏµÄ×ÊÁÏ" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "·µ·½ÏòËÑÑ°ÏÂÒ»¸ö·ûºÏµÄ×ÊÁÏ" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "Çл»ËÑÑ°¸ñʽµÄÑÕÉ«" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "ÔÚ×Ó shell Ö´ÐÐÖ¸Áî" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "ÐżþÅÅÐò" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "ÒÔÏà·´µÄ´ÎÐòÀ´×öѶϢÅÅÐò" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "±ê¼ÇÏÖÔڵļǼ" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "±ê¼ÇÄ¿Ç°µÄ×ÓÐòÁÐ" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "±ê¼ÇÄ¿Ç°µÄÐòÁÐ" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "Çл»½«Ñ¶Ï¢Çл»Îª 'new' Æì±ê" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "Çл»ÊÇ·ñÖØÐÂдÈëÓÊͲÖÐ" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "Çл»ÊÇ·ñä¯ÀÀÓÊͲ»òËùÓеÄÎļþ" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "ÒƵ½Ò³Ê×" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "·´É¾³ýÏÖÔڵļǼ" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "·´É¾³ýÕâ¸öÐòÁÐÖеÄËùÓÐÐżþ" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "·´É¾³ýÕâ¸ö×ÓÐòÁÐÖеÄËùÓÐÐżþ" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "ÏÔʾ Mutt µÄ°æ±¾ºÅÂëÓëÈÕÆÚ" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "Èç¹ûÐèÒªµÄ»°Ê¹Óà mailcap ä¯ÀÀ¸½¼þ" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "ÏÔʾ MIME ¸½¼þ" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "ÏÔʾĿǰÓÐ×÷ÓõÄÏÞÖÆÑùʽ" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "´ò¿ª/¹Ø±Õ Ä¿Ç°µÄÐòÁÐ" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "´ò¿ª/¹Ø±Õ ËùÓеÄÐòÁÐ" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "¸½´øÒ»°Ñ PGP ¹«¹²Ô¿³×" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "ÏÔʾ PGP Ñ¡Ïî" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "¼Ä³ö PGP ¹«¹²Ô¿³×" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "¼ìÑé PGP ¹«¹²Ô¿³×" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "¼ìÔÄÕâ°ÑÔ¿³×µÄʹÓÃÕß id" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "" + +#: keymap_alldefs.h:188 +#, fuzzy +msgid "Append a remailer to the chain" +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: keymap_alldefs.h:189 +#, fuzzy +msgid "Insert a remailer into the chain" +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: keymap_alldefs.h:190 +#, fuzzy +msgid "Delete a remailer from the chain" +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: keymap_alldefs.h:191 +#, fuzzy +msgid "Select the previous element of the chain" +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: keymap_alldefs.h:192 +#, fuzzy +msgid "Select the next element of the chain" +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "ÖÆ×÷½âÃܵĿ½±´²¢ÇÒɾ³ýÖ®" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "ÖÆ×÷Ò»·Ý½âÃܵĿ½±´" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "Çå³ý¼ÇÒäÌåÖÐµÄ PGP ͨÐÐÃÜÂë" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "ߢȡ PGP ¹«¹²Ô¿³×" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "ÏÔʾ PGP Ñ¡Ïî" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "¼ÇÒäÌå²»×㣡" + +#: main.c:46 +#, fuzzy +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "ÒªÓëÑз¢ÈËÔ±Á¬Â磬Çë¼ÄПø <mutt-dev@mutt.org>¡£\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"Copyright (C) 1996-2000 Michael R. Elkins and others.\n" +"Mutt ²»ÌṩÈκα£Ö¤£ºÐèÒª¸üÏêϸµÄ×ÊÁÏ£¬Çë¼üÈë `mutt -vv'¡£\n" +"Mutt ÊÇÒ»¸ö×ÔÓÉÈí¼þ, »¶Ó­ÄúÔÚijЩȷ¶¨µÄÌõ¼þÉÏ£¬ÖØеķ¢ÐÐËü\n" +"ÈôÐèÒª¸üÏêϸµÄ×ÊÁÏ, Çë¼üÈë `mutt -vv'\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n" +"Copyright (C) 1996-2000 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n" +"Copyright (C) 1998-2000 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n" +"Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"\n" +"»¹ÓÐÐí¶àÔÚÕâÀïûÓÐÌá¼°µ½µÄÈËÊË£¬ËûÃÇÔøÌṩ³ÌÐòÂ룬ÐÞÕý£¬ºÍÒâ¼û¡£\n" +"\n" +" Õâ¸öÓ¦ÓóÌÐòÊÇ×ÔÓÉÈí¼þ£»Äú¿ÉÒÔÔÚ×ÔÓÉÈí¼þ»ù½ð»áµÄ GNU Ò»°ã¹«¹²\n" +" ÊÚȨÊ飨°æ±¾ 2£¬»òiËæÄãϲºÃʹÓÃÒÔºóµÄ°æ±¾£©ÏÂÖظ´É¢²¼²¢/»òÐÞ\n" +" ÕýËü¡£\n" +"\n" +" ·¢²¼Õâ¸öÓ¦ÓóÌÐòµÄÄ¿µÄÊÇÏ£ÍûËü»á¶ÔÄãÓÐÓ㬵«¾ø²»°üÀ¨Èκα£Ö¤£»\n" +" ¾ÍÁ¬ÏúÊÛÐÔºÍÊÊÓÚÌض¨Ä¿µÄÖ®°µÊ¾µ£±£ÒàÈ»¡£ÔÚ GNU Ò»°ã¹«¹²ÊÚȨÊé\n" +" Öн«»á»ñµÃ¸ü¶à×ÊÁÏ¡£\n" +"\n" +" ÄúÓ¦ÒÑÁ¬Í¬Ó¦ÓóÌÐòÊÕµ½Ò»·Ý GNU Ò»°ã¹«¹²ÊÚȨÊ飻Èç¹ûûÓУ¬ÇëдÐÅ\n" +" ÖÁ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, " +"MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"Ó÷¨: mutt [ -nRzZ ] [ -e <ÃüÁî> ] [ -F <Îļþ> ] [ -m <ÀàÐÍ> ] [ -f <Îļþ" +"> ]\n" +" mutt [ -nx ] [ -e <ÃüÁî> ] [ -a <Îļþ> ] [ -F <Îļþ> ] [ -H <Îļþ> ] " +"[ -i <Îļþ> ] [ -s <Ö÷Ìâ> ] [ -b <µØÖ·> ] [ -c <µØÖ·> ] <µØÖ·> [ ... ]\n" +" mutt [ -n ] [ -e <ÃüÁî> ] [ -F <Îļþ> ] -p\n" +" mutt -v[v]\n" +"\n" +"²ÎÊý£º\n" +" -a <Îļþ> ½«Îļþ¸½ÔÚÐżþÖÐ\n" +" -b <µØÖ·> Ö¸¶¨Ò»¸ö ÃØÃܸ´ÖÆ (BCC) µÄµØÖ·\n" +" -c <µØÖ·> Ö¸¶¨Ò»¸ö ¸´ÖÆ (CC) µÄµØÖ·\n" +" -e <ÃüÁî> Ö¸¶¨Ò»¸ö³õʼ»¯ºóÒª±»Ö´ÐеÄÃüÁî\n" +" -f <Îļþ> Ö¸¶¨ÒªÔĶÁÄÇÒ»¸öÓÊͲ\n" +" -F <Îļþ> Ö¸¶¨ÁíÒ»¸ö muttrc Îļþ\n" +" -H <Îļþ> Ö¸¶¨Ò»¸öÄ£°åÎļþÒÔ¶ÁÈ¡±êÌâÀ´Ô´\n" +" -i <Îļþ> Ö¸¶¨Ò»¸ö°üÀ¨Ôڻظ²ÖеÄÎļþ\n" +" -m <ÀàÐÍ> Ö¸¶¨Ò»¸öÔ¤ÉèµÄÓÊͲÀàÐÍ\n" +" -n ʹ Mutt ²»È¥¶ÁȡϵͳµÄ Muttrc µµ\n" +" -p ½Ð»ØÒ»¸öÑÓºó¼ÄË͵ÄÐżþ\n" +" -R ÒÔÖ»¶Áģʽ´ò¿ªÓÊͲ\n" +" -s <Ö÷Ìâ> Ö¸¶¨Ò»¸öÖ÷Ìâ (Èç¹ûÓпհ׵Ļ°±ØÐë±»°üÀ¨ÔÚÒýÑÔÖÐ)\n" +" -v ÏÔʾ°æ±¾ºÍ±àÒëʱËù¶¨ÒåµÄ²ÎÊý\n" +" -x Ä£Äâ mailx ¼ÄËÍģʽ\n" +" -y Ñ¡ÔñÒ»¸ö±»Ö¸¶¨ÔÚÄúÓÊͲÇåµ¥ÖеÄÓÊͲ\n" +" -z Èç¹ûûÓÐѶϢÔÚÓÊͲÖеĻ°£¬Á¢¼´À뿪\n" +" -Z ´ò¿ªµÚÒ»¸ö¸½ÓÐÐÂÓʼþµÄ×ÊÁϼУ¬Èç¹ûûÓеĻ°Á¢¼´À뿪\n" +" -h Õâ¸ö˵Ã÷ѶϢ" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"±àÒëÑ¡Ï" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "ÎÞ·¨³õʼ»¯Öն˻ú¡£" + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "³ý´íģʽÔÚµÚ %d ²ã¡£\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "ÔÚ±àÒëʱºòûÓж¨Òå DEBUG¡£·ÅÆúÖ´ÐС£\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s ²»´æÔÚ¡£ÖÆÔìÂð£¿" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "ÎÞ·¨½¨Á¢ %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "ûÓÐÖ¸¶¨½ÓÊÜÕß¡£\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s£ºÎÞ·¨¸½´øÎļþ¡£\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "ûÓÐÐÅÏäÓÐÐÂÐżþ¡£" + +#: main.c:870 +#, fuzzy +msgid "No incoming mailboxes defined." +msgstr "Ȧѡ½øÈëµÄÓÊͲ" + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "ÐÅÏäÄÚ¿ÕÎÞÒ»Îï¡£" + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "¶ÁÈ¡ %s ÖС­ %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "ÐÅÏäÒÑËð»µÁË£¡" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "ÐÅÏäÒÑËð»µ!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "ÑÏÖØ´íÎó£¡ÎÞ·¨ÖØдò¿ªÐÅÏ䣡" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "ÎÞ·¨ËøסÐÅÏ䣡" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "ͬ²½£ºÐÅÏäÒѱ»Ð޸ģ¬µ«Ã»Óб»Ð޸ĹýµÄÐżþ£¡£¨Çë»Ø±¨Õâ¸ö´íÎó£©" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "дÈëÐżþÖС­ %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +#, fuzzy +msgid "Committing changes..." +msgstr "±àÒëËÑÑ°ÑùʽÖС­" + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "дÈëʧ°Ü£¡ÒѰѲ¿·ÖµÄÐÅÏä´¢´æÖÁ %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "ÎÞ·¨ÖØ¿ªÐÅÏ䣡" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "ÖØдò¿ªÐÅÏäÖС­" + +#: menu.c:413 +msgid "Jump to: " +msgstr "Ìøµ½£º" + +#: menu.c:422 +msgid "Invalid index number." +msgstr "ÎÞЧµÄË÷Òý±àºÅ¡£" + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "ûÓÐ×ÊÁÏ¡£" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "ÄúÎÞ·¨ÔÙÏòÏÂ¾í¶¯ÁË¡£" + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "ÄúÎÞ·¨ÔÙÏòÉÏ¾í¶¯ÁË¡£" + +#: menu.c:477 +msgid "You are on the last page." +msgstr "ÄúÏÖÔÚÔÚ×îºóÒ»Ò³¡£" + +#: menu.c:499 +msgid "You are on the first page." +msgstr "ÄúÏÖÔÚÔÚµÚÒ»Ò³¡£" + +#: menu.c:578 +msgid "First entry is shown." +msgstr "ÕýÔÚÏÔʾµÚÒ»Ïî¡£" + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "ÕýÔÚÏÔʾ×îºóÒ»Ïî¡£" + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "ÄúÏÖÔÚÔÚ×îºóÒ»Ïî¡£" + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "ÄúÏÖÔÚÔÚµÚÒ»Ïî¡£" + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "ËÑÑ°£º" + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "·µÏòËÑÑ°£º" + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "ûÓÐËÑÑ°¸ñʽ¡£" + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "ûÓÐÕÒµ½¡£" + +#: menu.c:885 +msgid "No tagged entries." +msgstr "ûÓÐÒѱê¼ÇµÄ¼Ç¼¡£" + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "Õâ¸öÑ¡µ¥ÖÐûÓÐËÑÑ°¹¦ÄÜ¡£" + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "¶Ô»°Ä£Ê½Öв»Ö§³ÖÌøÔ¾¹¦ÄÜ¡£" + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£" + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "¶ÁÈ¡ %s¡­ %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "ÎļþÊÇÒ»¸öĿ¼, ´¢´æÔÚËüÏÂÃæ ?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "ÎļþÊÇÒ»¸öĿ¼, ´¢´æÔÚËüÏÂÃæ ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "ÔÚĿ¼µ×ϵÄÎļþ£º" + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "ÎļþÒѾ­´æÔÚ, (o)¸²¸Ç, (a)¸½¼Ó, »òÊÇ (c)È¡Ïû ?" + +#: muttlib.c:869 +msgid "oac" +msgstr "" + +#: muttlib.c:1171 +#, fuzzy +msgid "Can't save message to POP mailbox." +msgstr "½«ÐżþдÈëµ½ÐÅÏä" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s ²»ÊÇÐÅÏ䣡" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "¸½¼ÓÐżþµ½ %s ?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, fuzzy, c-format +msgid "Connection to %s closed" +msgstr "ÕýÁ¬½Óµ½ %s¡­" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "" + +#: mutt_socket.c:292 +#, fuzzy +msgid "Preconnect command failed." +msgstr "Ô¤ÏÈÁ¬½ÓÖ¸Áîʧ°Ü" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, fuzzy, c-format +msgid "Error talking to %s (%s)" +msgstr "ÕýÁ¬Ïßµ½ %s" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, fuzzy, c-format +msgid "Looking up %s..." +msgstr "¿½±´µ½ %s¡­" + +#: mutt_socket.c:434 mutt_socket.c:487 +#, fuzzy, c-format +msgid "Could not find the host \"%s\"" +msgstr "ÕÒ²»µ½Ö÷»ú %s µÄλַ¡£" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "ÕýÁ¬½Óµ½ %s¡­" + +#: mutt_socket.c:519 +#, fuzzy, c-format +msgid "Could not connect to %s (%s)." +msgstr "ÎÞ·¨´ò¿ª %s" + +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "µÇÈëʧ°Ü¡£" + +#: mutt_ssl.c:333 +#, fuzzy +msgid "Unable to get certificate from peer" +msgstr "ÎÞ·¨¾ö¶¨ home Ŀ¼" + +#: mutt_ssl.c:341 +#, fuzzy, c-format +msgid "SSL connection using %s (%s)" +msgstr "ÕýÁ¬Ïßµ½ %s" + +#: mutt_ssl.c:381 +#, fuzzy +msgid "Unknown" +msgstr "²»Ã÷µÄ´íÎó" + +#: mutt_ssl.c:406 +#, fuzzy +msgid "[unable to calculate]" +msgstr "%s£ºÎÞ·¨¸½´øÎļþ" + +#: mutt_ssl.c:424 +#, fuzzy +msgid "[invalid date]" +msgstr "%s£ºÎÞЧµÄÖµ" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr "" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr "" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "À뿪 " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "Ëø½øÊýÁ¿³¬¹ýÏ޶½« %s µÄËøÒƳý£¿" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "ÎÞ·¨Óà dotlock Ëøס %s¡£\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "³¢ÊÔ fcntl µÄËø¶¨Ê±³¬¹ýʱ¼ä!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "ÕýÔڵȴý fcntl µÄËø¶¨¡­ %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "³¢ÊÔ flock ʱ³¬¹ýʱ¼ä£¡" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "ÕýÔڵȴý flock Ö´Ðгɹ¦¡­ %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "ÎÞ·¨Ëøס %s¡£\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "¶ÁÈ¡ %s ÖС­" + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "дÈë %s ÖС­" + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "ÎÞ·¨Óë %s ÐÅÏäͬ²½£¡" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "°áÒÆÒѶÁÈ¡µÄÐżþµ½ %s£¿" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "Çå³ý %d ·âÒѾ­±»É¾³ýµÄÐżþ£¿" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "Çå³ý %d ·âÒѱ»É¾³ýµÄÐżþ£¿" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "ÕýÔÚ°áÒÆÒѾ­¶ÁÈ¡µÄÐżþµ½ %s ¡­" + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "ÐÅÏäûÓиı䡣" + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d ·âÐżþ±»±£Áô, %d ·âÐżþ±»°áÒÆ, %d ·âÐżþ±»É¾³ý¡£" + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d ·âÐżþ±»±£Áô, %d ·âÐżþ±»É¾³ý¡£" + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " Çë°´Ï '%s' À´Çл»Ð´Èëģʽ" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "ÇëʹÓà 'toggle-write' À´ÖØÐÂÆô¶¯Ð´È빦ÄÜ!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "ÐÅÏä±»±ê¼Ç³ÉΪÎÞ·¨Ð´ÈëµÄ. %s" + +#: mx.c:1181 +#, fuzzy +msgid "Mailbox checkpointed." +msgstr "ÓÊÏäÒÑɾ³ý¡£" + +#: mx.c:1490 +#, fuzzy +msgid "Can't write message" +msgstr "±à¼­ÐżþÄÚÈÝ" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "ÔÚÕâ¸ö²Ëµ¥ÖÐûÓÐÕâ¸ö¹¦ÄÜ¡£" + +#: pager.c:1446 +msgid "PrevPg" +msgstr "ÉÏÒ»Ò³" + +#: pager.c:1447 +msgid "NextPg" +msgstr "ÏÂÒ»Ò³" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "ÏÔʾ¸½¼þ¡£" + +#: pager.c:1454 +msgid "Next" +msgstr "ÏÂÒ»¸ö" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "ÏÖÕýÏÔʾ×îÏÂÃæµÄÐżþ¡£" + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "ÏÖÕýÏÔʾ×îÉÏÃæµÄÐżþ¡£" + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "·´ÏòËÑÑ°£º" + +#: pager.c:1955 +msgid "Search: " +msgstr "ËÑÑ°£º" + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "ÏÖÕýÏÔʾ˵Ã÷Îļþ¡£" + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "²»ÄÜÓÐÔÙ¶àµÄÒýÑÔ¡£" + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "ÔÚÒýÑÔºóÓйý¶àµÄ·ÇÒýÑÔÎÄ×Ö¡£" + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "¶à²¿·ÝÓʼþûÓзָôµÄ²ÎÊý!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "±í´ïʽÓдíÎó£º%s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "ÎÞЧµÄÈÕ×Ó£º%s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "ÎÞЧµÄÔ·ݣº%s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, fuzzy, c-format +msgid "Invalid relative date: %s" +msgstr "ÎÞЧµÄÔ·ݣº%s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "±í´ïʽÓдíÎó" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "ÔÚÑùʽÉÏÓдíÎó£º%s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c£ºÎÞЧµÄÖ¸Áî" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c£ºÔÚÕâ¸öģʽ²»Ö§³Ö" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "´íʧ²ÎÊý" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "²»¶Ô³ÆµÄÀ¨»¡£º%s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "¿ÕµÄ¸ñʽ" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "´íÎ󣺲»Ã÷µÄ op %d (Çë»Ø±¨Õâ¸ö´íÎó)¡£" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "±àÒëËÑÑ°ÑùʽÖС­" + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "ÕýÔÚ¶Ô·ûºÏµÄÓʼþÖ´ÐÐÃüÁî¡­" + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "ûÓÐÓʼþ·ûºÏÒªÇó¡£" + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "ÒÑËÑÑ°ÖÁ½á⣬²¢Ã»Óз¢ÏÖÈκηûºÏ" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "ÒÑËÑÑ°ÖÁ¿ªÍ·£¬²¢Ã»Óз¢ÏÖÈκηûºÏ" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "ËÑÑ°Òѱ»Öжϡ£" + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "ÒÑÍü¼Ç PGP ͨÐÐÃÜÂë¡£" + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP Êä³ö²¿·Ý½áÊø --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP Ðżþ¿ªÊ¼ --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP ¹«¹²Ô¿³×Çø¶Î¿ªÊ¼ --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP Ç©ÃûµÄÐżþ¿ªÊ¼ --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP Ðżþ½áÊø --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP ¹«¹²Ô¿³×Çø¶Î½áÊø --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP Ç©ÃûµÄÐżþ½áÊø --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- ´íÎó£ºÕÒ²»µ½ PGP ÐżþµÄ¿ªÍ·£¡ --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "ÄÚ²¿´íÎó¡£ÁªÂç <rosessler@guug.de>¡£" + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- ´íÎ󣺲»ÕýÈ·µÄ PGP/MIME Ðżþ£¡ --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ÔÝ´æµµ£¡ --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- ÏÂÃæÊÇ PGP/MIME ¼ÓÃÜ×ÊÁÏ --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- PGP/MIME ¼ÓÃÜ×ÊÁϽáÊø --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "ÎÞ·¨´ò¿ª PGP ×Ó³ÌÐò£¡" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "ҪΪ %2$s ʹÓÃÔ¿³× ID = \"%1$s\"£¿" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "ÇëÊäÈë %s µÄÔ¿³× ID£º" + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "²»ÄÜÖ´ÐÐ PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "ÄÃÈ¡ PGP Ô¿³×ÖС­" + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "Õâ¸öÔ¿³×²»ÄÜʹÓ㺹ýÆÚ/ÎÞЧ/ÒÑÈ¡Ïû¡£" + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "Ñ¡Ôñ " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "¼ì²éÔ¿³× " + +#: pgpkey.c:528 +#, fuzzy, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP Ô¿³×·ûºÏ \"%s\"¡£" + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP Ô¿³×·ûºÏ \"%s\"¡£" + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "ÎÞ·¨´ò¿ª /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "Ô¿³× ID£º0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "Õâ¸öÔ¿³×²»ÄÜʹÓ㺹ýÆÚ/ÎÞЧ/ÒÑÈ¡Ïû¡£" + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "Õâ¸öÔ¿³×²»ÄÜʹÓ㺹ýÆÚ/ÎÞЧ/ÒÑÈ¡Ïû¡£" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "Õâ¸ö ID ²»±»ÐÅÈΡ£" + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "´Ë ID Ö»ÊÇÃãÇ¿±»ÐÅÈΡ£" + +#: pgpkey.c:622 +#, fuzzy, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s ÄúÕæµÄҪʹÓÃËü£¿" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "ÇëÊäÈëÕâ°ÑÔ¿³×µÄ ID£º" + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "Æô¶¯ pgp¡­" + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP Ô¿³× %s¡£" + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "ÕýÑ°ÕÒÆ¥Åä \"%s\" µÄÔ¿³×¡­" + +#: pop.c:86 pop_lib.c:197 +#, fuzzy +msgid "Command TOP is not supported by server." +msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£" + +#: pop.c:113 +#, fuzzy +msgid "Can't write header to temporary file!" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ" + +#: pop.c:194 pop_lib.c:199 +#, fuzzy +msgid "Command UIDL is not supported by server." +msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£" + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +#, fuzzy +msgid "Fetching list of messages..." +msgstr "¼Ä³öÐżþÖС­" + +#: pop.c:411 +#, fuzzy +msgid "Can't write message to temporary file!" +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ" + +#: pop.c:513 pop.c:578 +#, fuzzy +msgid "Checking for new messages..." +msgstr "×¼±¸×ª¼ÄÐżþ¡­" + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP Ö÷»úûÓỶ¨Òå¡£" + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "POP ÐÅÏäÖÐûÓÐеÄÐżþ" + +#: pop.c:613 +#, fuzzy +msgid "Delete messages from server?" +msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­" + +#: pop.c:615 +#, fuzzy, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "¶ÁÈ¡ÐÂÐżþ (%d λԪ×é)¡­" + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "дÈëÐÅÏäʱ·¢Éú´íÎó£¡" + +#: pop.c:661 +#, fuzzy, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [ÒÑÔĶÁ %2d ·âÐżþÖÐµÄ %1d ·â]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "ÓëËÅ·þÆ÷µÄÁª½áÖжÏÁË!" + +#: pop_auth.c:89 +#, fuzzy +msgid "Authenticating (SASL)..." +msgstr "ÑéÖ¤ÖÐ (GSSAPI)¡­" + +#: pop_auth.c:205 +#, fuzzy +msgid "Authenticating (APOP)..." +msgstr "ÑéÖ¤ÖÐ (GSSAPI)¡­" + +#: pop_auth.c:229 +#, fuzzy +msgid "APOP authentication failed." +msgstr "GSSAPI Ñé֤ʧ°Ü¡£" + +#: pop_auth.c:264 +#, fuzzy +msgid "Command USER is not supported by server." +msgstr "²»Ö§³Ö±ê¼Ç¹¦ÄÜ¡£" + +#: pop_lib.c:195 +#, fuzzy +msgid "Unable to leave messages on server." +msgstr "ÕýÔÚɾ³ýËÅ·þÆ÷ÉϵÄÐżþ¡­" + +#: pop_lib.c:225 +#, fuzzy, c-format +msgid "Error connecting to server: %s" +msgstr "ÕýÁ¬Ïßµ½ %s" + +#: pop_lib.c:370 +#, fuzzy +msgid "Closing connection to POP server..." +msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­" + +#: pop_lib.c:536 +#, fuzzy +msgid "Verifying message indexes..." +msgstr "дÈëÐżþµ½ %s ¡­" + +#: pop_lib.c:560 +#, fuzzy +msgid "Connection lost. Reconnect to POP server?" +msgstr "ÕýÔڹرÕÓë IMAP ËÅ·þÆ÷µÄÁ¬Ïß¡­" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "ÐżþÒѾ­±»Ñӳټijö" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "ûÓб»ÑӳټijöµÄÐżþ¡£" + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "²»ºÏ¹æ¶¨µÄ PGP ±êÍ·" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "²»ºÏ¹æ¶¨µÄ PGP ±êÍ·" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "µÇÈëʧ°Ü¡£" + +#: query.c:46 +msgid "New Query" +msgstr "еIJéѯ" + +#: query.c:47 +msgid "Make Alias" +msgstr "ÖÆ×÷±ðÃû" + +#: query.c:48 +msgid "Search" +msgstr "ËÑÑ°" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "µÈ´ý»ØÓ¦ÖС­" + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "²éѯָÁîÉÐ䶨Òå¡£" + +#: query.c:286 +msgid "Query" +msgstr "²éѯ" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "²éѯ£º" + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "²éѯ '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "¹ÜÏß" + +#: recvattach.c:53 +msgid "Print" +msgstr "ÏÔʾ" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "´¢´æÖС­" + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "¸½¼þÒѱ»´¢´æ¡£" + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "¾¯¸æ! ÄúÕýÔÚ¸²¸Ç %s, ÊÇ·ñÒª¼ÌÐø?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "¸½¼þ±»¹ýÂ˵ô¡£" + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "¾­¹ý¹ýÂË£º" + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "µ¼ÒýÖÁ£º" + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "ÎÒ²»ÖªµÀÒªÔõô´òÓ¡ %s ¸½¼þ!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "ÊÇ·ñÒª´òÓ¡±ê¼ÇÆðÀ´µÄ¸½¼þ?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "ÊÇ·ñÒª´òÓ¡¸½¼þ?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "¸½¼þ" + +#: recvattach.c:987 +#, fuzzy +msgid "There are no subparts to show!" +msgstr "ûÓи½¼þ¡£" + +#: recvattach.c:1048 +#, fuzzy +msgid "Can't delete attachment from POP server." +msgstr "È¡»Ø POP ËÅ·þÆ÷ÉϵÄÐżþ" + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "δ֧³Öɾ³ý PGP ÐżþËù¸½´øµÄ¸½¼þ¡£" + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "Ö»Ö§³Öɾ³ý¶àÖظ½¼þ" + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "ÄúÖ»ÄÜÖ±½Ó´«ËÍ message/rfc822 µÄ²¿·Ö¡£" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "¼ÄÐÅ;Öз¢Éú´íÎó¡£" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "¼ÄÐÅ;Öз¢Éú´íÎó¡£" + +#: recvcmd.c:413 +#, fuzzy, c-format +msgid "Can't open temporary file %s." +msgstr "ÎÞ·¨½¨Á¢ÔÝ´æµµ" + +#: recvcmd.c:444 +#, fuzzy +msgid "Forward as attachments?" +msgstr "ÏÔʾ MIME ¸½¼þ" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "Óà MIME µÄ·½Ê½À´×ª¼Ä£¿" + +#: recvcmd.c:591 recvcmd.c:841 +#, fuzzy, c-format +msgid "Can't create %s." +msgstr "ÎÞ·¨½¨Á¢ %s: %s." + +#: recvcmd.c:724 +#, fuzzy +msgid "Can't find any tagged messages." +msgstr "Ó¦ÓÃÏÂÒ»¸ö¹¦Äܵ½Òѱê¼ÇµÄѶϢ" + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "ûÓÐÕÒµ½ÓʼÄÂÛ̳£¡" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "" + +#: remailer.c:480 +#, fuzzy +msgid "Append" +msgstr "¼Ä³ö" + +#: remailer.c:481 +msgid "Insert" +msgstr "" + +#: remailer.c:482 +#, fuzzy +msgid "Delete" +msgstr "Ñ¡Ôñ" + +#: remailer.c:484 +msgid "OK" +msgstr "" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "" + +#: remailer.c:538 +#, fuzzy +msgid "Select a remailer chain." +msgstr "ɾ³ýijÐÐÉÏËùÓеÄ×Öĸ" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "" + +#: remailer.c:661 +#, fuzzy +msgid "You already have the first chain element selected." +msgstr "ÄúÒѾ­ÔÚµÚÒ»·âÐÅÁË¡£" + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "" + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "" + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "" + +#: remailer.c:768 +#, fuzzy, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "¼ÄËÍѶϢ³öÏÖ´íÎó£¬×Ó³ÌÐòÒѽáÊø %d (%s)¡£" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "¼ÄÐÅ;Öз¢Éú´íÎó¡£" + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "ÔÚ \"%2$s\" µÄµÚ %3$d Ðз¢ÏÖÀà±ð %1$s Ϊ´íÎóµÄ¸ñʽ¼Í¼" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "ûÓÐÖ¸¶¨ mailcap ·¾¶" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "ûÓз¢ÏÖÀàÐÍ %s µÄ mailcap ¼Í¼" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "·ÖÊý£ºÌ«ÉٵIJÎÊý" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "·ÖÊý£ºÌ«¶àµÄ²ÎÊý" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "ûÓбêÌ⣬Ҫ²»ÒªÖжϣ¿" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "ûÓбêÌ⣬ÕýÔÚÖжÏÖС£" + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "Òª»Ø¸²¸ø %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "ÒÔºóµÄ»Ø¸²¶¼¼ÄÖÁ %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "ûÓб»±ê¼ÇÁ˵ÄÐżþÔÚÏÔʾ£¡" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "»ØÐÅʱÊÇ·ñÒª°üº¬Ô­±¾µÄÐżþÄÚÈÝ£¿" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "ÕýÒýÈëÒýÑÔ²¿·Ö¡­" + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "ÎÞ·¨°üº¬ËùÓÐÒªÇóµÄÐżþ£¡" + +#: send.c:762 +#, fuzzy +msgid "Forward as attachment?" +msgstr "ÊÇ·ñÒª´òÓ¡¸½¼þ?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "×¼±¸×ª¼ÄÐżþ¡­" + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "Òª½Ð³ö±»ÑÓ³ÙµÄÐżþ?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "×¼±¸×ª¼ÄÐżþ¡­" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "ÊÇ·ñÒªÖжÏδÐ޸ĹýµÄÐżþ?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "ÖжÏûÓÐÐ޸ĹýµÄÐżþ" + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "ÐżþûÓмijö¡£" + +#: send.c:1430 +msgid "Message postponed." +msgstr "Ðżþ±»Ñӳټijö¡£" + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "ûÓÐÖ¸¶¨½ÓÊÜÕߣ¡" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "ûÓÐÖ¸¶¨½ÓÊÜÕß¡£" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "ûÓÐÐżþ±êÌ⣬ҪÖжϼÄÐŵŤ×÷?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "ûÓÐÖ¸¶¨±êÌâ¡£" + +#: send.c:1526 +msgid "Sending message..." +msgstr "¼Ä³öÐżþÖС­" + +#: send.c:1667 +msgid "Could not send the message." +msgstr "ÎÞ·¨¼Ä³öÐżþ¡£" + +#: send.c:1672 +msgid "Mail sent." +msgstr "ÐżþÒѾ­¼Ä³ö¡£" + +#: send.c:1672 +msgid "Sending in background." +msgstr "ÕýÔÚºǫ́´«ËÍ¡£" + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "ûÓз¢ÏÖ·Ö½ç±äÁ¿£¡[»Ø±¨´íÎó]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s ÒѾ­²»´æÔÚ£¡" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s ²»ÊÇÐÅÏä¡£" + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "ÎÞ·¨´ò¿ª %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "¼ÄËÍѶϢ³öÏÖ´íÎó£¬×Ó³ÌÐòÒѽáÊø %d (%s)¡£" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Delivery process µÄÊä³ö" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s¡­ ÕýÔÚÀ뿪¡£\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "²¶×¥µ½ %s¡­ ÕýÔÚÀ뿪¡£\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "²¶×¥µ½ signal %d¡­ ÕýÔÚÀ뿪.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "À뿪 " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "ÎÞЧµÄÔ·ݣº%s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "²»Ã÷µÄ´íÎó" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "ÇëÊäÈë %s µÄÔ¿³× ID£º" + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "PGP Ô¿³×·ûºÏ \"%s\"¡£" + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "ҪΪ %2$s ʹÓÃÔ¿³× ID = \"%1$s\"£¿" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "ҪΪ %2$s ʹÓÃÔ¿³× ID = \"%1$s\"£¿" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "ÎÞ·¨½¨Á¢¹ýÂËÆ÷" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "£¨Ã»ÓÐÐÅÏ䣩" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +msgid "Warning: Intermediate certificate not found." +msgstr "" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "ÎÞ·¨´ò¿ª PGP ×Ó³ÌÐò£¡" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- PGP Êä³ö²¿·Ý½áÊø --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- ´íÎó£ºÎÞ·¨½¨Á¢ PGP ×Ó³ÌÐò£¡ --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- ÏÂÃæÊÇ PGP/MIME ¼ÓÃÜ×ÊÁÏ --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- ÒÔϵÄ×ÊÁÏÒѱ»Ç©Êð --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- PGP/MIME ¼ÓÃÜ×ÊÁϽáÊø --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- Ç©ÊðµÄ×ÊÁϽáÊø --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "ÐÅÏäÅÅÐòÖС­" + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "ÕÒ²»µ½ÅÅÐòµÄº¯Êý£¡[Çë»Ø±¨Õâ¸öÎÊÌâ]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "£¨Ã»ÓÐÐÅÏ䣩" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "ÔÚÏÞÖÆÔÄÀÀģʽÏÂÎÞ·¨ÏÔʾÖ÷Ðżþ¡£" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "Ö÷Ðżþ²»´æÔÚ¡£" + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "Æô¶¯ pgp¡­" + +#~ msgid "Bounce message to %s...?" +#~ msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s¡­£¿" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "°ÑÓʼþÖ±½Ó´«ËÍÖÁ %s¡­£¿" + +#, fuzzy +#~ msgid "This ID's validity level is undefined." +#~ msgstr "Õâ¸ö ID µÄÐÅÈνײãûÓж¨Òå¡£" + +#~ msgid "Decode-save" +#~ msgstr "½âÂë²¢´¢´æ" + +#~ msgid "Decode-copy" +#~ msgstr "½âÂë²¢¿½±´" + +#~ msgid "Decrypt-save" +#~ msgstr "½âÃܲ¢´¢´æ" + +#~ msgid "Decrypt-copy" +#~ msgstr "½âÃܲ¢¿½±´" + +#~ msgid "Copy" +#~ msgstr "¿½±´" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- PGP Êä³öµÄ×ÊÁϽáÊø --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "ÎÞ·¨¶ÁÈ¡£º%s" + +#~ msgid "%s: no such command" +#~ msgstr "%s£ºÎÞ´ËÖ¸Áî" + +#, fuzzy +#~ msgid "Authentication method is unknown." +#~ msgstr "GSSAPI Ñé֤ʧ°Ü¡£" + +#~ msgid "MIC algorithm: " +#~ msgstr "MIC ÑÝËã·¨£º" + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "Èç¹ûÄú²»Ïë°ÑÐżþÇ©Ãû£¬ÕâÑù×ö¾ÍûÓÐʲôÒâ˼À²¡£" + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "²»Ã÷µÄ MIC ÑÝËã·¨¡£ÓÐЧµÄÈçÏÂ: pgp-md5, pgp-sha1, pgp-rmd160" + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "SHA1 implementation Copyrigt (C) 1995-7 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Öظ´É¢²¼²¢Ê¹ÓÃԭʼ³ÌÐòÂëºÍ±àÒë¹ýµÄ³ÌÐòÂ룬²»¹ÜÓзñ¾­¹ýÐ޸ģ¬\n" +#~ " ÔÚijЩÌõ¼þÏÂÊÇÐí¿ÉµÄ¡£\n" +#~ "\n" +#~ " SHA1 ³ÌÐò²»¸½´øÈκε£±££¬²»ÂÛϵÃ÷ʾ»¹ÊÇ°µÊ¾£¬°üÀ¨µ«²»ÏÞÓÚÏúÊÛÐÔ\n" +#~ " ºÍÊÊÓÚÌض¨Ä¿µÄÖ®°µÊ¾µ£±£¡£\n" +#~ "\n" +#~ " ÄúÓ¦¸ÃÊÕµ½Ò»·Ý´ËÓ¦ÓóÌÐòµÄÍêÕûµÄÉ¢²¼ÌõÎÄ£»Èç¹ûûÓУ¬ÇëдПø\n" +#~ " Ó¦ÓóÌÐòµÄ·¢Õ¹ÈËÔ±.\n" + +#, fuzzy +#~ msgid "POP Username: " +#~ msgstr "IMAP Óû§Ãû³Æ£º" + +#, fuzzy +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "¶ÁÈ¡ÐÂÐżþ (%d λԪ×é)¡­" + +#~ msgid "Error reading message!" +#~ msgstr "¶ÁÈ¡Ðżþʱ·¢Éú´íÎó£¡" + +#, fuzzy +#~ msgid "%s [%d message read]" +#~ msgstr "%s [ÒÑÔĶÁ %d ·âÐżþ]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "δ֧³ÖÖÆÔìÓÊÏä¡£" + +#~ msgid "We can't currently handle utf-8 at this point." +#~ msgstr "ÎÒÃÇ»¹Î´ÄÜ´¦Àí utf-8¡£" + +#~ msgid "Can't open %s: %s." +#~ msgstr "ÎÞ·¨´ò¿ª %s£º%s." + +#, fuzzy +#~ msgid "Error while recoding %s. Leave it unchanged." +#~ msgstr "µ±×ª»»±àÂë %s ·¢Éú´íÎ󡣿´ %s À´ÐÞ¸´ÄãµÄ×ÊÁÏ¡£" + +#~ msgid "Error while recoding %s. See %s for recovering your data." +#~ msgstr "µ±×ª»»±àÂë %s ·¢Éú´íÎ󡣿´ %s À´ÐÞ¸´ÄãµÄ×ÊÁÏ¡£" + +#~ msgid "Can't change character set for non-text attachments!" +#~ msgstr "·ÇÎÄ×ֵĸ½¼þÊDz»Äܸıä×Ö·û¼¯µÄ£¡" + +#~ msgid "Enter character set: " +#~ msgstr "ÇëÊäÈë×Ö·û¼¯£º" + +#~ msgid "UTF-8 encoding attachments has not yet been implemented." +#~ msgstr "»¹Î´Ö§³Ö UTF-8 ±àÂëµÄ¸½¼þ¡£" + +#~ msgid "Compose" +#~ msgstr "дÐÅ" + +#~ msgid "We currently can't encode to utf-8." +#~ msgstr "ÎÒÃÇÏÖÔÚ»¹Î´ÄÜÖØбàÂëÖÁ utf-8¡£" + +#~ msgid "Recoding successful." +#~ msgstr "ÖØбàÂë³É¹¦¡£" + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- ´íÎó£ºÍ»·¢µÄµµÎ²£¡ --]\n" + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "%s@%s µÄ CRAM Ô¿³×" + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "ÂÓ¹ý CRAM-MD5 ÑéÖ¤" + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "ÖØдò¿ªÐÅÏäÖС­ %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "¹Ø±ÕÐÅÏäÖС­" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "ÕýÔÚËͳö APPEND ÃüÁî¡­" + +#~ msgid "change an attachment's character set" +#~ msgstr "¸Ä±ä¸½¼þµÄ×Ö·û¼¯" + +#~ msgid "recode this attachment to/from the local charset" +#~ msgstr "ÖØн«¸½¼þ±àÂëÖÁ±¾µØ×Ö·û¼¯£¬»òÓɱ¾µØ×Ö·û¼¯ÖØбàÂë" + +#~ msgid "%d kept." +#~ msgstr "%d ±£ÁôÁË¡£" + +#~ msgid "POP Password: " +#~ msgstr "POP ÃÜÂ룺" + +#~ msgid "No POP username is defined." +#~ msgstr "ûÓỶ¨ÒåµÄ POP ʹÓÃÕßÃû³Æ¡£" + +#~ msgid "Attachment saved" +#~ msgstr "¸½¼þÒѱ»´¢´æ¡£" + +#~ msgid "move to the last undelete message" +#~ msgstr "Òƶ¯µ½×îºóÒ»·âδɾ³ýµÄÐżþ" + +#~ msgid "return to the main-menu" +#~ msgstr "»Øµ½Ö÷Ñ¡µ¥" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "²»Àí»á¿ÕµÄ±êÍ·À¸Î»£º%s" + +#, fuzzy +#~ msgid "Recoding only affetcs text attachments." +#~ msgstr "Ö»ÖØбàÂëÊÜÓ°ÏìµÄÎÄ×Ö¸½¼þ" + +#, fuzzy +#~ msgid "display message with full headers" +#~ msgstr "±à¼­ÐżþµÄ±êÍ·" + +#, fuzzy +#~ msgid "PGP keys matching " +#~ msgstr "PGP Ô¿³×·ûºÏ <%s>¡£" + +#, fuzzy +#~ msgid "This operation is not currently supported for PGP messages." +#~ msgstr "Ôݲ»Ö§³Öä¯ÀÀ IMAP Ŀ¼" + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_error()£º%s µÄÒâÍâ»ØÓ¦£º%s\n" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "ÎÞ·¨´ò¿ªÄúµÄÃØÃÜÔ¿³×»·£¡" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "¶¨ÒåÁËÒ»¸ö²»Ã÷µÄ PGP °æ±¾À´Ç©Ãû" + +#~ msgid "===== Attachments =====" +#~ msgstr "===== ¸½¼þ =====" + +#~ msgid "Sending CREATE command ..." +#~ msgstr "ÕýÔÚËͳö CREATE ÃüÁî¡­" + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "²»Ã÷µÄ PGP °æ±¾ \"%s\"¡£" + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- ´íÎó£ºÕâ·âÐżþ²»·ûºÏ PGP/MIME µÄ¹æ¸ñ£¡ --]\n" +#~ "\n" + +#~ msgid "reserved" +#~ msgstr "±£ÁôµÄ" + +#~ msgid "Encrypted Session Key" +#~ msgstr "¼ÓÃܵÄÔ¿³×" + +#~ msgid "Signature Packet" +#~ msgstr "Ç©Ãû·â°ü" + +#~ msgid "Conventionally Encrypted Session Key Packet" +#~ msgstr "Ò»°ã¼ÓÃÜÔ¿³×·â°ü" + +#~ msgid "One-Pass Signature Packet" +#~ msgstr "µ¥Ò»Í¨µÀµÄÇ©Ãû·â°ü" + +#~ msgid "Secret Key Packet" +#~ msgstr "ÃØÃÜÔ¿³×·â°ü" + +#~ msgid "Public Key Packet" +#~ msgstr "¹«¹²Ô¿³×·â°ü" + +#~ msgid "Secret Subkey Packet" +#~ msgstr "ÃØÃÜ´ÎÔ¿³×·â°ü" + +#~ msgid "Compressed Data Packet" +#~ msgstr "ѹËõ×ÊÁÏ·â°ü" + +#~ msgid "Symmetrically Encrypted Data Packet" +#~ msgstr "¶Ô³Æ¼ÓÃÜ×ÊÁÏ·â°ü" + +#~ msgid "Marker Packet" +#~ msgstr "¼ÇºÅ·â°ü" + +#~ msgid "Literal Data Packet" +#~ msgstr "ÎÄ×Ö×ÊÁÏ·â°ü" + +#~ msgid "Trust Packet" +#~ msgstr "±»ÐÅÍзâ°ü" + +#~ msgid "Name Packet" +#~ msgstr "Ãû³Æ·â°ü" + +#~ msgid "Subkey Packet" +#~ msgstr "´ÎÔ¿³× (subkey) ·â°ü" + +#~ msgid "Reserved" +#~ msgstr "±£ÁôµÄ" + +#~ msgid "Comment Packet" +#~ msgstr "×¢½â·â°ü" + +#~ msgid "Message edited. Really send?" +#~ msgstr "ÐżþÒѾ­±à¼­¹ý¡£È·¶¨Òª¼Ä³ö£¿" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "Êä³ö×Ó³ÌÐò´¢´æÖÁ %s.\n" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo new file mode 100644 index 0000000000000000000000000000000000000000..2e285dc19121acdda8a521d7b6c1bb917493a68c GIT binary patch literal 61346 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 literal 0 HcmV?d00001 diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..14bf015 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,4493 @@ +# Translation for mutt in Traditional Chinese, Big5 encoding. +# +# Copyright Cd Chen <cdchen@mail.cynix.com.tw>, Weichung Chau <weichung@mail.cynix.com.tw>, Anthony Wong <ypwong@debian.org> +# +msgid "" +msgstr "" +"Project-Id-Version: Mutt 1.3.22.1\n" +"POT-Creation-Date: 2004-02-01 19:24+0100\n" +"PO-Revision-Date: 2001-09-06 18:25+0800\n" +"Last-Translator: Anthony Wong <ypwong@debian.org>\n" +"Language-Team: Chinese <zh@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: account.c:144 +#, c-format +msgid "Username at %s: " +msgstr "用戶名在 %s:" + +#: account.c:172 +#, c-format +msgid "Password for %s@%s: " +msgstr "%s@%s 的密碼:" + +#: addrbook.c:33 browser.c:40 pager.c:1445 postpone.c:39 query.c:44 +#: recvattach.c:50 +msgid "Exit" +msgstr "離開" + +#: addrbook.c:34 curs_main.c:398 pager.c:1452 postpone.c:40 +msgid "Del" +msgstr "刪除" + +#: addrbook.c:35 curs_main.c:399 postpone.c:41 +msgid "Undel" +msgstr "反刪除" + +#: addrbook.c:36 +msgid "Select" +msgstr "選擇" + +#. __STRCAT_CHECKED__ +#: addrbook.c:37 browser.c:43 compose.c:91 curs_main.c:404 mutt_ssl.c:627 +#: pager.c:1544 pgpkey.c:517 postpone.c:42 query.c:49 recvattach.c:54 +#: smime.c:415 +msgid "Help" +msgstr "求助" + +#: addrbook.c:141 +msgid "You have no aliases!" +msgstr "您沒有別名資料!" + +#: addrbook.c:152 +msgid "Aliases" +msgstr "別名" + +#. add a new alias +#: alias.c:242 +msgid "Alias as: " +msgstr "取別名為:" + +#: alias.c:248 +msgid "You already have an alias defined with that name!" +msgstr "您已經為這個名字定義了別名啦!" + +#: alias.c:254 +msgid "Warning: This alias name may not work. Fix it?" +msgstr "" + +#: alias.c:279 +msgid "Address: " +msgstr "地址:" + +#: alias.c:289 send.c:201 +#, c-format +msgid "Error: '%s' is a bad IDN." +msgstr "" + +#: alias.c:301 +msgid "Personal name: " +msgstr "個人姓名:" + +#: alias.c:310 +#, c-format +msgid "[%s = %s] Accept?" +msgstr "[%s = %s] 接受?" + +#: alias.c:327 recvattach.c:390 recvattach.c:413 recvattach.c:426 +#: recvattach.c:439 recvattach.c:467 +msgid "Save to file: " +msgstr "存到檔案:" + +#: alias.c:342 +msgid "Alias added." +msgstr "別名已經增加。" + +#: attach.c:108 attach.c:235 attach.c:462 attach.c:952 +msgid "Can't match nametemplate, continue?" +msgstr "無法配合二個同樣名稱,繼續?" + +#. For now, editing requires a file, no piping +#: attach.c:120 +#, c-format +msgid "Mailcap compose entry requires %%s" +msgstr "Mailcap 編輯項目需要 %%s" + +#: attach.c:128 attach.c:253 commands.c:216 compose.c:1275 curs_lib.c:149 +#: curs_lib.c:395 +#, c-format +msgid "Error running \"%s\"!" +msgstr "執行 \"%s\" 時發生錯誤!" + +#: attach.c:138 +msgid "Failure to open file to parse headers." +msgstr "開啟檔案來分析檔頭失敗。" + +#: attach.c:169 +msgid "Failure to open file to strip headers." +msgstr "開啟檔案時去除檔案標頭失敗。" + +#: attach.c:187 +#, c-format +msgid "No mailcap compose entry for %s, creating empty file." +msgstr "沒有 %s 的 mailcap 組成登錄,正在建立空的檔案。" + +#. For now, editing requires a file, no piping +#: attach.c:247 +#, c-format +msgid "Mailcap Edit entry requires %%s" +msgstr "編輯 Mailcap 項目時需要 %%s" + +#: attach.c:265 +#, c-format +msgid "No mailcap edit entry for %s" +msgstr "沒有 %s 的 mailcap 編輯登錄" + +#: attach.c:428 +msgid "No matching mailcap entry found. Viewing as text." +msgstr "沒有發現配合 mailcap 的登錄。將以文字檔方式瀏覽。" + +#: attach.c:441 +msgid "MIME type not defined. Cannot view attachment." +msgstr "MIME 形式未被定義. 無法顯示附件內容。" + +#: attach.c:531 +msgid "Cannot create filter" +msgstr "無法建立過濾器" + +#: attach.c:660 attach.c:692 attach.c:985 attach.c:1043 handler.c:1556 +#: pgpkey.c:566 pgpkey.c:755 +msgid "Can't create filter" +msgstr "無法建立過濾" + +#: attach.c:824 +msgid "Write fault!" +msgstr "寫入失敗!" + +#: attach.c:1066 +msgid "I don't know how to print that!" +msgstr "我不知道要如何列印它!" + +#: browser.c:41 +msgid "Chdir" +msgstr "改變目錄" + +#: browser.c:42 +msgid "Mask" +msgstr "遮罩" + +#: browser.c:377 browser.c:964 +#, c-format +msgid "%s is not a directory." +msgstr "%s 不是一個目錄" + +#: browser.c:497 +#, c-format +msgid "Mailboxes [%d]" +msgstr "ä¿¡ç®± [%d]" + +#: browser.c:504 +#, c-format +msgid "Subscribed [%s], File mask: %s" +msgstr "已訂閱 [%s], 檔案遮罩: %s" + +#: browser.c:508 +#, c-format +msgid "Directory [%s], File mask: %s" +msgstr "目錄 [%s], 檔案遮罩: %s" + +#: browser.c:520 +msgid "Can't attach a directory!" +msgstr "無法附帶目錄!" + +#: browser.c:651 browser.c:1031 browser.c:1128 +msgid "No files match the file mask" +msgstr "沒有檔案與檔案遮罩相符" + +#: browser.c:856 +msgid "Create is only supported for IMAP mailboxes" +msgstr "只有 IMAP 郵箱才支援製造功能" + +#: browser.c:876 +msgid "Delete is only supported for IMAP mailboxes" +msgstr "只有 IMAP 郵箱才支援刪除功能" + +#: browser.c:884 +#, c-format +msgid "Really delete mailbox \"%s\"?" +msgstr "真的要刪除 \"%s\" 郵箱?" + +#: browser.c:898 +msgid "Mailbox deleted." +msgstr "郵箱已刪除。" + +#: browser.c:904 +msgid "Mailbox not deleted." +msgstr "郵箱未被刪除。" + +#: browser.c:923 +msgid "Chdir to: " +msgstr "改變目錄到:" + +#: browser.c:957 browser.c:1024 +msgid "Error scanning directory." +msgstr "無法掃描目錄。" + +#: browser.c:975 +msgid "File Mask: " +msgstr "檔案遮罩:" + +#: browser.c:1047 +msgid "Reverse sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "反向排序 (1)日期, (2)字元, (3)大小 或 (4)不排序 ? " + +#: browser.c:1048 +msgid "Sort by (d)ate, (a)lpha, si(z)e or do(n)'t sort? " +msgstr "依照 (1)日期 (2)字元 (3)大小 來排序,或(4)不排序 ? " + +#: browser.c:1049 +msgid "dazn" +msgstr "1234" + +#: browser.c:1115 +msgid "New file name: " +msgstr "新檔名:" + +#: browser.c:1146 +msgid "Can't view a directory" +msgstr "無法顯示目錄" + +#: browser.c:1163 +msgid "Error trying to view file" +msgstr "無法試著顯示檔案" + +#: buffy.c:442 +#, fuzzy +msgid "New mail in " +msgstr "在 %s 有新信件。" + +#: color.c:322 +#, c-format +msgid "%s: color not supported by term" +msgstr "%s:終端機無法顯示色彩" + +#: color.c:328 +#, c-format +msgid "%s: no such color" +msgstr "%s:沒有這種顏色" + +#: color.c:374 color.c:575 color.c:586 +#, c-format +msgid "%s: no such object" +msgstr "%s:沒有這個物件" + +#: color.c:381 +#, c-format +msgid "%s: command valid only for index object" +msgstr "%s:命令只提供索引物件" + +#: color.c:389 +#, c-format +msgid "%s: too few arguments" +msgstr "%s:太少參數" + +#: color.c:563 +msgid "Missing arguments." +msgstr "缺少參數。" + +#: color.c:602 color.c:613 +msgid "color: too few arguments" +msgstr "色彩:太少引數" + +#: color.c:636 +msgid "mono: too few arguments" +msgstr "單色:太少引數" + +#: color.c:656 +#, c-format +msgid "%s: no such attribute" +msgstr "%s:沒有這個屬性" + +#: color.c:696 hook.c:65 hook.c:73 keymap.c:721 +msgid "too few arguments" +msgstr "太少參數" + +#: color.c:705 hook.c:79 +msgid "too many arguments" +msgstr "太多參數" + +#: color.c:721 +msgid "default colors not supported" +msgstr "不支援預設的色彩" + +#. find out whether or not the verify signature +#: commands.c:88 +msgid "Verify PGP signature?" +msgstr "檢查 PGP 簽名?" + +#: commands.c:113 mbox.c:733 +msgid "Could not create temporary file!" +msgstr "無法建立暫存檔!" + +#: commands.c:126 +msgid "Cannot create display filter" +msgstr "無法建立顯示過濾器" + +#: commands.c:146 +msgid "Could not copy message" +msgstr "無法複制信件" + +#: commands.c:182 +#, fuzzy +msgid "S/MIME signature successfully verified." +msgstr "PGP 簽名驗證成功。" + +#: commands.c:184 +msgid "S/MIME certificate owner does not match sender." +msgstr "" + +#: commands.c:187 commands.c:198 +msgid "Warning: Part of this message has not been signed." +msgstr "" + +#: commands.c:189 +#, fuzzy +msgid "S/MIME signature could NOT be verified." +msgstr "PGP 簽名無法驗證。" + +#: commands.c:196 +msgid "PGP signature successfully verified." +msgstr "PGP 簽名驗證成功。" + +#: commands.c:200 +msgid "PGP signature could NOT be verified." +msgstr "PGP 簽名無法驗證。" + +#: commands.c:223 +msgid "Command: " +msgstr "指令:" + +#: commands.c:242 recvcmd.c:143 +msgid "Bounce message to: " +msgstr "直接傳送郵件到:" + +#: commands.c:244 recvcmd.c:145 +msgid "Bounce tagged messages to: " +msgstr "無法傳送已標記的郵件至:" + +#: commands.c:259 recvcmd.c:154 +msgid "Error parsing address!" +msgstr "無法分析位址!" + +#: commands.c:267 recvcmd.c:162 +#, c-format +msgid "Bad IDN: '%s'" +msgstr "" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce message to %s" +msgstr "把郵件直接傳送至 %s" + +#: commands.c:278 recvcmd.c:176 +#, c-format +msgid "Bounce messages to %s" +msgstr "把郵件直接傳送至 %s" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Message not bounced." +msgstr "郵件已被傳送。" + +#: commands.c:294 recvcmd.c:192 +#, fuzzy +msgid "Messages not bounced." +msgstr "郵件已傳送。" + +#: commands.c:304 recvcmd.c:211 +msgid "Message bounced." +msgstr "郵件已被傳送。" + +#: commands.c:304 recvcmd.c:211 +msgid "Messages bounced." +msgstr "郵件已傳送。" + +#: commands.c:381 commands.c:415 commands.c:432 +msgid "Can't create filter process" +msgstr "無法啟動過濾程序" + +#: commands.c:461 +msgid "Pipe to command: " +msgstr "用管道輸出至命令:" + +#: commands.c:478 +msgid "No printing command has been defined." +msgstr "沒有定義列印指令。" + +#: commands.c:483 +msgid "Print message?" +msgstr "列印信件?" + +#: commands.c:483 +msgid "Print tagged messages?" +msgstr "列印已標記的信件?" + +#: commands.c:492 +msgid "Message printed" +msgstr "信件已印出" + +#: commands.c:492 +msgid "Messages printed" +msgstr "信件已印出" + +#: commands.c:494 +msgid "Message could not be printed" +msgstr "信件未能列印出來" + +#: commands.c:495 +msgid "Messages could not be printed" +msgstr "信件未能列印出來" + +#: commands.c:504 +msgid "" +"Rev-Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"反方向 1)日期 2)發信人 3)收信時間 4)標題 5)收信人 6)序列 7)不排 8)大小 9)分" +"數:" + +#: commands.c:505 +msgid "" +"Sort (d)ate/(f)rm/(r)ecv/(s)ubj/t(o)/(t)hread/(u)nsort/si(z)e/s(c)ore?: " +msgstr "" +"排序 1)日期 2)發信人 3)收信時間 4)標題 5)收信人 6)序列 7)不排序 8)大小 9)分" +"數:" + +#: commands.c:506 +msgid "dfrsotuzc" +msgstr "123456789" + +#: commands.c:559 +msgid "Shell command: " +msgstr "Shell 指令:" + +#: commands.c:701 +#, fuzzy, c-format +msgid "Decode-save%s to mailbox" +msgstr "%s%s 到信箱" + +#: commands.c:702 +#, fuzzy, c-format +msgid "Decode-copy%s to mailbox" +msgstr "%s%s 到信箱" + +#: commands.c:703 +#, fuzzy, c-format +msgid "Decrypt-save%s to mailbox" +msgstr "%s%s 到信箱" + +#: commands.c:704 +#, fuzzy, c-format +msgid "Decrypt-copy%s to mailbox" +msgstr "%s%s 到信箱" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Save%s to mailbox" +msgstr "%s%s 到信箱" + +#: commands.c:705 +#, fuzzy, c-format +msgid "Copy%s to mailbox" +msgstr "%s%s 到信箱" + +#: commands.c:706 +msgid " tagged" +msgstr " 已標記" + +#: commands.c:779 +#, c-format +msgid "Copying to %s..." +msgstr "拷貝到 %s…" + +#: commands.c:901 +#, c-format +msgid "Convert to %s upon sending?" +msgstr "送出的時候轉換字符集為 %s ?" + +#: commands.c:910 +#, c-format +msgid "Content-Type changed to %s." +msgstr "Content-Type 被改為 %s。" + +#: commands.c:912 +#, c-format +msgid "Character set changed to %s; %s." +msgstr "字符集已換為 %s; %s。" + +#: commands.c:914 +msgid "not converting" +msgstr "沒有轉換" + +#: commands.c:914 +msgid "converting" +msgstr "轉換中" + +#: compose.c:42 +msgid "There are no attachments." +msgstr "沒有附件。" + +#: compose.c:84 +msgid "Send" +msgstr "寄出" + +#: compose.c:85 remailer.c:483 +msgid "Abort" +msgstr "中斷" + +#: compose.c:89 compose.c:787 +msgid "Attach file" +msgstr "附加檔案" + +#: compose.c:90 +msgid "Descrip" +msgstr "敘述" + +#: compose.c:127 +msgid "Sign, Encrypt" +msgstr "簽名,加密" + +#: compose.c:129 +msgid "Encrypt" +msgstr "加密" + +#: compose.c:131 +msgid "Sign" +msgstr "簽名" + +#: compose.c:133 +msgid "Clear" +msgstr "清除" + +#: compose.c:140 compose.c:144 +msgid " sign as: " +msgstr " 簽名的身份是: " + +#: compose.c:140 compose.c:144 +msgid "<default>" +msgstr "<預設值>" + +#: compose.c:149 +#, fuzzy +msgid "Encrypt with: " +msgstr "加密" + +#: compose.c:165 +#, fuzzy +msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " +msgstr "(1)加密, (2)簽名, (3)用別的身份簽, (4)兩者皆要, 或 (5)放棄?" + +#: compose.c:166 +msgid "esabf" +msgstr "12345" + +#. sign (a)s +#: compose.c:179 compose.c:269 +msgid "Sign as: " +msgstr "簽名的身份是:" + +#: compose.c:227 +#, fuzzy +msgid "" +"S/MIME (e)ncrypt, (s)ign, encrypt (w)ith, sign (a)s, (b)oth, or (f)orget it? " +msgstr "(1)加密, (2)簽名, (3)用別的身份簽, (4)兩者皆要, 或 (5)放棄?" + +#: compose.c:228 +msgid "eswabf" +msgstr "12345" + +#: compose.c:236 +msgid "" +"1: DES, 2: Triple-DES, 3: RC2-40, 4: RC2-64, 5: RC2-128, or (f)orget it? " +msgstr "" + +#: compose.c:238 +msgid "12345f" +msgstr "" + +#: compose.c:351 +#, c-format +msgid "%s [#%d] no longer exists!" +msgstr "%s [#%d] 已不存在!" + +#: compose.c:359 +#, c-format +msgid "%s [#%d] modified. Update encoding?" +msgstr "%s [#%d] 已修改。更新編碼?" + +#: compose.c:402 +msgid "-- Attachments" +msgstr "-- 附件" + +#: compose.c:432 +#, c-format +msgid "Warning: '%s' is a bad IDN." +msgstr "" + +#: compose.c:455 +msgid "You may not delete the only attachment." +msgstr "您不可以刪除唯一的附件。" + +#: compose.c:722 send.c:1451 +#, c-format +msgid "Bad IDN in \"%s\": '%s'" +msgstr "" + +#: compose.c:803 +msgid "Attaching selected files..." +msgstr "正在附加選取了的檔案…" + +#: compose.c:814 +#, c-format +msgid "Unable to attach %s!" +msgstr "無法附加 %s!" + +#: compose.c:832 +msgid "Open mailbox to attach message from" +msgstr "開啟信箱並從它選擇附加的信件" + +#: compose.c:870 +msgid "No messages in that folder." +msgstr "檔案夾中沒有信件。" + +#: compose.c:879 +msgid "Tag the messages you want to attach!" +msgstr "請標記您要附加的信件!" + +#: compose.c:911 +msgid "Unable to attach!" +msgstr "無法附加!" + +#: compose.c:958 +msgid "Recoding only affects text attachments." +msgstr "只重新編碼受影響的文字附件" + +#: compose.c:963 +msgid "The current attachment won't be converted." +msgstr "這個附件不會被轉換。" + +#: compose.c:965 +msgid "The current attachment will be converted." +msgstr "這個附件會被轉換。" + +#: compose.c:1036 +msgid "Invalid encoding." +msgstr "無效的編碼。" + +#: compose.c:1057 +msgid "Save a copy of this message?" +msgstr "儲存這封信件的拷貝嗎?" + +#: compose.c:1110 +msgid "Rename to: " +msgstr "更改名稱為:" + +#: compose.c:1115 editmsg.c:110 sendlib.c:910 +#, fuzzy, c-format +msgid "Can't stat %s: %s" +msgstr "無法讀取:%s" + +#: compose.c:1141 +msgid "New file: " +msgstr "建立新檔:" + +#: compose.c:1154 +msgid "Content-Type is of the form base/sub" +msgstr "Content-Type 的格式是 base/sub" + +#: compose.c:1160 +#, c-format +msgid "Unknown Content-Type %s" +msgstr "不明的 Content-Type %s" + +#: compose.c:1173 +#, c-format +msgid "Can't create file %s" +msgstr "無法建立檔案 %s" + +#: compose.c:1181 +msgid "What we have here is a failure to make an attachment" +msgstr "我們無法加上附件" + +#: compose.c:1236 +msgid "Postpone this message?" +msgstr "延遲寄出這封信件?" + +#: compose.c:1293 +msgid "Write message to mailbox" +msgstr "將信件寫入到信箱" + +#: compose.c:1296 +#, c-format +msgid "Writing message to %s ..." +msgstr "寫入信件到 %s …" + +#: compose.c:1305 +msgid "Message written." +msgstr "信件已寫入。" + +#: compose.c:1317 +msgid "S/MIME already selected. Clear & continue ? " +msgstr "" + +#: compose.c:1342 +msgid "PGP already selected. Clear & continue ? " +msgstr "" + +#: crypt.c:65 +#, c-format +msgid " (current time: %c)" +msgstr "" + +#: crypt.c:71 +#, fuzzy, c-format +msgid "[-- %s output follows%s --]\n" +msgstr "[-- 以下為 PGP 輸出的資料(現在時間:%c) --]\n" + +#: crypt.c:86 +#, fuzzy +msgid "Passphrase(s) forgotten." +msgstr "已忘記 PGP 通行密碼。" + +#: crypt.c:129 +msgid "Enter PGP passphrase:" +msgstr "請輸入 PGP 通行密碼:" + +#: crypt.c:147 +#, fuzzy +msgid "Enter SMIME passphrase:" +msgstr "請輸入 PGP 通行密碼:" + +#: crypt.c:192 +#, fuzzy +msgid "Create a traditional (inline) PGP message?" +msgstr "建立一封 application/pgp 的信件?" + +#: crypt.c:200 pgpkey.c:559 postpone.c:547 +msgid "Invoking PGP..." +msgstr "啟動 PGP…" + +#: crypt.c:434 +msgid "S/MIME messages with no hints on content are unsupported." +msgstr "" + +#: crypt.c:653 crypt.c:697 +msgid "Trying to extract PGP keys...\n" +msgstr "" + +#: crypt.c:677 crypt.c:717 +msgid "Trying to extract S/MIME certificates...\n" +msgstr "" + +#: crypt.c:838 +msgid "" +"[-- Error: Inconsistent multipart/signed structure! --]\n" +"\n" +msgstr "" +"[-- 錯誤:不一致的 multipart/signed 結構! --]\n" +"\n" + +#: crypt.c:860 +#, c-format +msgid "" +"[-- Error: Unknown multipart/signed protocol %s! --]\n" +"\n" +msgstr "" +"[-- 錯誤:不明的 multipart/signed 協定 %s! --]\n" +"\n" + +#: crypt.c:900 +#, c-format +msgid "" +"[-- Warning: We can't verify %s/%s signatures. --]\n" +"\n" +msgstr "" +"[-- 警告:我們不能證實 %s/%s 簽名。 --]\n" +"\n" + +#. Now display the signed body +#: crypt.c:912 +#, fuzzy +msgid "" +"[-- The following data is signed --]\n" +"\n" +msgstr "" +"[-- 以下的資料已被簽署 --]\n" +"\n" + +#: crypt.c:918 +msgid "" +"[-- Warning: Can't find any signatures. --]\n" +"\n" +msgstr "" +"[-- 警告:找不到任何的簽名。 --]\n" +"\n" + +#: crypt.c:924 +#, fuzzy +msgid "" +"\n" +"[-- End of signed data --]\n" +msgstr "" +"\n" +"[-- 簽署的資料結束 --]\n" + +# Don't translate this!! +#: curs_lib.c:157 +msgid "yes" +msgstr "" + +# Don't translate this!! +#: curs_lib.c:158 +msgid "no" +msgstr "" + +#. restore blocking operation +#: curs_lib.c:254 +msgid "Exit Mutt?" +msgstr "離開 Mutt?" + +#: curs_lib.c:347 mutt_socket.c:520 mutt_ssl.c:321 +msgid "unknown error" +msgstr "不明的錯誤" + +#: curs_lib.c:367 +msgid "Press any key to continue..." +msgstr "按下任何鍵繼續…" + +#: curs_lib.c:411 +msgid " ('?' for list): " +msgstr " (用 '?' 顯示列表):" + +#: curs_main.c:47 curs_main.c:611 curs_main.c:641 +msgid "No mailbox is open." +msgstr "沒有已開啟信箱。" + +#: curs_main.c:48 +msgid "There are no messages." +msgstr "沒有信件。" + +#: curs_main.c:49 mx.c:1131 pager.c:54 recvattach.c:40 +msgid "Mailbox is read-only." +msgstr "信箱是唯讀的。" + +#: curs_main.c:50 pager.c:55 recvattach.c:869 +msgid "Function not permitted in attach-message mode." +msgstr "功能在 attach-message 模式下不被支援。" + +#: curs_main.c:51 +msgid "No visible messages." +msgstr "沒有要被顯示的信件。" + +#: curs_main.c:244 +msgid "Cannot toggle write on a readonly mailbox!" +msgstr "無法寫入到一個唯讀的信箱!" + +#: curs_main.c:251 +msgid "Changes to folder will be written on folder exit." +msgstr "在離開之後將會把改變寫入資料夾。" + +#: curs_main.c:256 +msgid "Changes to folder will not be written." +msgstr "將不會把改變寫入資料夾。" + +#: curs_main.c:397 +msgid "Quit" +msgstr "離開" + +#: curs_main.c:400 recvattach.c:51 +msgid "Save" +msgstr "儲存" + +#: curs_main.c:401 query.c:45 +msgid "Mail" +msgstr "信件" + +#: curs_main.c:402 pager.c:1453 +msgid "Reply" +msgstr "回覆" + +#: curs_main.c:403 +msgid "Group" +msgstr "群組" + +#: curs_main.c:492 +msgid "Mailbox was externally modified. Flags may be wrong." +msgstr "信箱已被其他途徑改變過。旗標可能有錯誤。" + +#: curs_main.c:495 +msgid "New mail in this mailbox." +msgstr "這個信箱中有新信件。" + +#: curs_main.c:499 +msgid "Mailbox was externally modified." +msgstr "信箱已被其他途徑更改過。" + +#: curs_main.c:617 +msgid "No tagged messages." +msgstr "沒有標記了的信件。" + +#: curs_main.c:653 menu.c:896 +#, fuzzy +msgid "Nothing to do." +msgstr "正連接到 %s…" + +#: curs_main.c:739 +msgid "Jump to message: " +msgstr "跳到信件:" + +#: curs_main.c:745 +msgid "Argument must be a message number." +msgstr "需要一個信件編號的參數。" + +#: curs_main.c:778 +msgid "That message is not visible." +msgstr "這封信件無法顯示。" + +#: curs_main.c:781 +msgid "Invalid message number." +msgstr "無效的信件編號。" + +#: curs_main.c:800 +msgid "Delete messages matching: " +msgstr "刪除符合這樣式的信件:" + +#: curs_main.c:822 +msgid "No limit pattern is in effect." +msgstr "沒有限制樣式是有效的。" + +#. i18n: ask for a limit to apply +#: curs_main.c:827 +#, c-format +msgid "Limit: %s" +msgstr "限制: %s" + +#: curs_main.c:837 +msgid "Limit to messages matching: " +msgstr "限制只符合這樣式的信件:" + +#: curs_main.c:869 +msgid "Quit Mutt?" +msgstr "離開 Mutt?" + +#: curs_main.c:948 +msgid "Tag messages matching: " +msgstr "標記信件的條件:" + +#: curs_main.c:962 +msgid "Undelete messages matching: " +msgstr "反刪除信件的條件:" + +#: curs_main.c:970 +msgid "Untag messages matching: " +msgstr "反標記信件的條件:" + +#: curs_main.c:1046 +msgid "Open mailbox in read-only mode" +msgstr "用唯讀模式開啟信箱" + +#: curs_main.c:1048 +msgid "Open mailbox" +msgstr "開啟信箱" + +#: curs_main.c:1064 mx.c:508 mx.c:654 +#, c-format +msgid "%s is not a mailbox." +msgstr "%s 不是信箱。" + +#: curs_main.c:1156 +msgid "Exit Mutt without saving?" +msgstr "不儲存便離開 Mutt 嗎?" + +#: curs_main.c:1190 curs_main.c:1215 +msgid "You are on the last message." +msgstr "您已經在最後一封信了。" + +#: curs_main.c:1197 curs_main.c:1241 +msgid "No undeleted messages." +msgstr "沒有要反刪除的信件。" + +#: curs_main.c:1234 curs_main.c:1258 +msgid "You are on the first message." +msgstr "您已經在第一封信了。" + +#: curs_main.c:1333 pattern.c:1286 +msgid "Search wrapped to top." +msgstr "搜尋至開頭。" + +#: curs_main.c:1342 pattern.c:1297 +msgid "Search wrapped to bottom." +msgstr "搜尋至結尾。" + +#: curs_main.c:1383 +msgid "No new messages" +msgstr "沒有新信件" + +#: curs_main.c:1383 +msgid "No unread messages" +msgstr "沒有尚未讀取的信件" + +#: curs_main.c:1384 +msgid " in this limited view" +msgstr " 在這限定的瀏覽中" + +#: curs_main.c:1405 pager.c:2337 +#, fuzzy +msgid "Can't change 'important' flag on POP server." +msgstr "無法編輯 POP 伺服器上的信件。" + +#: curs_main.c:1529 +msgid "No more threads." +msgstr "沒有更多的序列" + +#: curs_main.c:1531 +msgid "You are on the first thread." +msgstr "您已經在第一個序列上。" + +#: curs_main.c:1597 curs_main.c:1629 flags.c:289 thread.c:1014 thread.c:1069 +#: thread.c:1124 +msgid "Threading is not enabled." +msgstr "序列功能尚未啟動。" + +#: curs_main.c:1615 +msgid "Thread contains unread messages." +msgstr "序列中有尚未讀取的信件。" + +#: curs_main.c:1802 +msgid "Can't edit message on POP server." +msgstr "無法編輯 POP 伺服器上的信件。" + +#. +#. * SLcurses_waddnstr() can't take a "const char *", so this is only +#. * declared "static" (sigh) +#. +#: edit.c:37 +msgid "" +"~~\t\tinsert a line begining with a single ~\n" +"~b users\tadd users to the Bcc: field\n" +"~c users\tadd users to the Cc: field\n" +"~f messages\tinclude messages\n" +"~F messages\tsame as ~f, except also include headers\n" +"~h\t\tedit the message header\n" +"~m messages\tinclude and quote messages\n" +"~M messages\tsame as ~m, except include headers\n" +"~p\t\tprint the message\n" +"~q\t\twrite file and quit editor\n" +"~r file\t\tread a file into the editor\n" +"~t users\tadd users to the To: field\n" +"~u\t\trecall the previous line\n" +"~v\t\tedit message with the $visual editor\n" +"~w file\t\twrite message to file\n" +"~x\t\tabort changes and quit editor\n" +"~?\t\tthis message\n" +".\t\ton a line by itself ends input\n" +msgstr "" +"~~\t\t插入以 ~ 符號開頭的一行\n" +"~b 戶口\t新增戶口到 Bcc: 欄位\n" +"~c 戶口\t新增戶口到 Cc: 欄位\n" +"~f 信件\t包含信件\n" +"~F 訊息\t類似 ~f, 不包括信件標頭\n" +"~h\t\t編輯信件的標頭\n" +"~m 訊息\t包括引言\n" +"~M 訊息\t類似 ~m, 不包括信件標頭\n" +"~p\t\t列印這封信件\n" +"~q\t\t存檔並且離開編輯器\n" +"~r 檔案\t\t將檔案讀入編輯器\n" +"~t 戶口\t新增戶口到 To: 欄位\n" +"~u\t\t喚回之前那一行\n" +"~v\t\t使用 $visual 編輯器編輯訊息\n" +"~w 檔案\t\t將訊息寫入檔案\n" +"~x\t\t停止修改並離開編輯器\n" +"~?\t\t這訊息\n" +".\t\t如果是一行裏的唯一字符,則代表結束輸入\n" + +#: edit.c:182 +#, c-format +msgid "%d: invalid message number.\n" +msgstr "%d:無效的信件號碼。\n" + +#: edit.c:324 +msgid "(End message with a . on a line by itself)\n" +msgstr "(在一行裏輸入一個 . 符號來結束信件)\n" + +#: edit.c:382 +msgid "No mailbox.\n" +msgstr "沒有信箱。\n" + +#: edit.c:386 +msgid "Message contains:\n" +msgstr "信件包含:\n" + +#: edit.c:390 edit.c:447 +msgid "(continue)\n" +msgstr "(繼續)\n" + +#: edit.c:403 +msgid "missing filename.\n" +msgstr "遺失了檔名。\n" + +#: edit.c:423 +msgid "No lines in message.\n" +msgstr "文章中沒有文字。\n" + +#: edit.c:440 +#, c-format +msgid "Bad IDN in %s: '%s'\n" +msgstr "" + +#: edit.c:458 +#, c-format +msgid "%s: unknown editor command (~? for help)\n" +msgstr "%s:不明的編輯器指令(~? 求助)\n" + +#: editmsg.c:74 +#, c-format +msgid "could not create temporary folder: %s" +msgstr "無法建立暫存檔:%s" + +#: editmsg.c:84 +#, c-format +msgid "could not write temporary mail folder: %s" +msgstr "無法寫入暫存檔:%s" + +#: editmsg.c:101 +#, fuzzy, c-format +msgid "could not truncate temporary mail folder: %s" +msgstr "無法寫入暫存檔:%s" + +#: editmsg.c:116 +msgid "Message file is empty!" +msgstr "信件檔案是空的!" + +#: editmsg.c:123 +msgid "Message not modified!" +msgstr "沒有改動信件!" + +#: editmsg.c:131 +#, c-format +msgid "Can't open message file: %s" +msgstr "無法開啟信件檔案:%s" + +#: editmsg.c:138 editmsg.c:165 +#, c-format +msgid "Can't append to folder: %s" +msgstr "無法把資料加到檔案夾:%s" + +#: editmsg.c:196 +#, c-format +msgid "Error. Preserving temporary file: %s" +msgstr "發生錯誤,保留暫存檔:%s" + +#: flags.c:332 +msgid "Set flag" +msgstr "設定旗標" + +#: flags.c:332 +msgid "Clear flag" +msgstr "清除旗標" + +#: handler.c:1345 +msgid "[-- Error: Could not display any parts of Multipart/Alternative! --]\n" +msgstr "[-- 錯誤: 無法顯示 Multipart/Alternative! --]\n" + +#: handler.c:1455 +#, c-format +msgid "[-- Attachment #%d" +msgstr "[-- 附件 #%d" + +#: handler.c:1467 +#, c-format +msgid "[-- Type: %s/%s, Encoding: %s, Size: %s --]\n" +msgstr "[-- 種類:%s%s,編碼:%s,大小:%s --]\n" + +#: handler.c:1527 +#, c-format +msgid "[-- Autoview using %s --]\n" +msgstr "[-- 使用 %s 自動顯示 --]\n" + +#: handler.c:1528 +#, c-format +msgid "Invoking autoview command: %s" +msgstr "執行自動顯示指令:%s" + +#: handler.c:1560 +#, c-format +msgid "[-- Can't run %s. --]\n" +msgstr "[-- 不能執行 %s 。 --]\n" + +#: handler.c:1578 handler.c:1599 +#, c-format +msgid "[-- Autoview stderr of %s --]\n" +msgstr "[-- 自動顯示 %s 的 stderr 內容 --]\n" + +#: handler.c:1636 +msgid "[-- Error: message/external-body has no access-type parameter --]\n" +msgstr "" +"[-- 錯誤:message/external-body 沒有存取類型 (access-type) 的參數 --]\n" + +#: handler.c:1655 +#, c-format +msgid "[-- This %s/%s attachment " +msgstr "[-- 這個 %s/%s 附件 " + +#: handler.c:1662 +#, c-format +msgid "(size %s bytes) " +msgstr "(%s 個位元組) " + +#: handler.c:1664 +msgid "has been deleted --]\n" +msgstr "已經被刪除了 --]\n" + +#: handler.c:1669 +#, c-format +msgid "[-- on %s --]\n" +msgstr "[-- 在 %s --]\n" + +#: handler.c:1674 +#, c-format +msgid "[-- name: %s --]\n" +msgstr "[-- 名稱:%s --]\n" + +#: handler.c:1687 handler.c:1703 +#, fuzzy, c-format +msgid "[-- This %s/%s attachment is not included, --]\n" +msgstr "[-- 這個 %s/%s 附件 " + +#: handler.c:1689 +#, fuzzy +msgid "" +"[-- and the indicated external source has --]\n" +"[-- expired. --]\n" +msgstr "" +"[-- 這個 %s/%s 附件無法被附上, --]\n" +"[-- 並且被指示的外部原始檔已 --]\n" +"[-- 過期。 --]\n" + +#: handler.c:1707 +#, fuzzy, c-format +msgid "[-- and the indicated access-type %s is unsupported --]\n" +msgstr "" +"[-- 這個 %s/%s 附件無法被附上, --]\n" +"[-- 並且被指示的存取類型 (access-type) %s 不被支援 --]\n" + +#: handler.c:1815 +msgid "Error: multipart/signed has no protocol." +msgstr "錯誤:multipart/signed 沒有通訊協定。" + +#: handler.c:1825 +msgid "Error: multipart/encrypted has no protocol parameter!" +msgstr "錯誤:multipart/encrypted 沒有任何通訊協定參數!" + +#: handler.c:1865 +msgid "Unable to open temporary file!" +msgstr "無法開啟暫存檔!" + +#: handler.c:1925 +#, c-format +msgid "[-- %s/%s is unsupported " +msgstr "[-- %s/%s 尚未支援 " + +#: handler.c:1930 +#, c-format +msgid "(use '%s' to view this part)" +msgstr "(按 '%s' 來顯示這部份)" + +#: handler.c:1932 +msgid "(need 'view-attachments' bound to key!)" +msgstr "(需要定義一個鍵給 'view-attachments' 來瀏覽附件!)" + +#: headers.c:173 +#, c-format +msgid "%s: unable to attach file" +msgstr "%s:無法附帶檔案" + +#: help.c:278 +msgid "ERROR: please report this bug" +msgstr "錯誤:請回報這個問題" + +#: help.c:320 +msgid "<UNKNOWN>" +msgstr "<不明的>" + +#: help.c:332 +msgid "" +"\n" +"Generic bindings:\n" +"\n" +msgstr "" +"\n" +"標準功能定義:\n" +"\n" + +#: help.c:336 +msgid "" +"\n" +"Unbound functions:\n" +"\n" +msgstr "" +"\n" +"未被定義的功能:\n" +"\n" + +#: help.c:344 +#, c-format +msgid "Help for %s" +msgstr "%s 的求助" + +#: hook.c:242 +msgid "unhook: Can't do unhook * from within a hook." +msgstr "unhook: 在 hook 裡面不能做 unhook *" + +#: hook.c:254 +#, c-format +msgid "unhook: unknown hook type: %s" +msgstr "unhook:不明的 hook type %s" + +#: hook.c:260 +#, c-format +msgid "unhook: Can't delete a %s from within a %s." +msgstr "unhook:不能從 %2$s 刪除 %1s$。" + +#: imap/auth.c:104 pop_auth.c:411 +msgid "No authenticators available" +msgstr "沒有認證方式" + +#: imap/auth_anon.c:39 +msgid "Authenticating (anonymous)..." +msgstr "驗證中 (匿名)…" + +#: imap/auth_anon.c:69 +msgid "Anonymous authentication failed." +msgstr "匿名驗證失敗。" + +#: imap/auth_cram.c:44 +msgid "Authenticating (CRAM-MD5)..." +msgstr "驗證中 (CRAM-MD5)…" + +#: imap/auth_cram.c:124 +msgid "CRAM-MD5 authentication failed." +msgstr "CRAM-MD5 驗證失敗。" + +#. now begin login +#: imap/auth_gss.c:104 +msgid "Authenticating (GSSAPI)..." +msgstr "驗證中 (GSSAPI)…" + +#: imap/auth_gss.c:267 +msgid "GSSAPI authentication failed." +msgstr "GSSAPI 驗證失敗。" + +#: imap/auth_login.c:34 +msgid "LOGIN disabled on this server." +msgstr "伺服器禁止了登入。" + +#: imap/auth_login.c:43 pop_auth.c:244 +msgid "Logging in..." +msgstr "登入中…" + +#: imap/auth_login.c:63 pop_auth.c:287 +msgid "Login failed." +msgstr "登入失敗。" + +#: imap/auth_sasl.c:112 +#, fuzzy, c-format +msgid "Authenticating (%s)..." +msgstr "驗證中 (APOP)…" + +#: imap/auth_sasl.c:199 pop_auth.c:172 +msgid "SASL authentication failed." +msgstr "SASL 驗證失敗。" + +#: imap/browse.c:64 imap/imap.c:533 +#, c-format +msgid "%s is an invalid IMAP path" +msgstr "" + +#: imap/browse.c:81 +msgid "Getting namespaces..." +msgstr "拿取 namespace 中…" + +#: imap/browse.c:90 +msgid "Getting folder list..." +msgstr "拿取目錄表中…" + +#: imap/browse.c:219 +#, fuzzy +msgid "No such folder" +msgstr "%s:沒有這種顏色" + +#: imap/browse.c:277 +msgid "Create mailbox: " +msgstr "製作信箱:" + +#: imap/browse.c:282 +msgid "Mailbox must have a name." +msgstr "信箱一定要有名字。" + +#: imap/browse.c:290 +msgid "Mailbox created." +msgstr "已完成製造郵箱。" + +#: imap/command.c:290 +msgid "Mailbox closed" +msgstr "郵箱已經關掉" + +#. something is wrong because the server reported fewer messages +#. * than we previously saw +#. +#: imap/command.c:332 +msgid "Fatal error. Message count is out of sync!" +msgstr "嚴重錯誤。信件數量不協調!" + +#: imap/imap.c:147 +#, c-format +msgid "Closing connection to %s..." +msgstr "正在關閉與 %s 的連線…" + +#: imap/imap.c:307 +msgid "This IMAP server is ancient. Mutt does not work with it." +msgstr "這個 IMAP 伺服器已過時,Mutt 無法使用它。" + +#: imap/imap.c:398 +#, c-format +msgid "Unexpected response received from server: %s" +msgstr "" + +#: imap/imap.c:418 pop_lib.c:280 +msgid "Secure connection with TLS?" +msgstr "利用 TSL 來進行安全連接?" + +#: imap/imap.c:427 pop_lib.c:300 +msgid "Could not negotiate TLS connection" +msgstr "未能" + +#: imap/imap.c:564 +#, c-format +msgid "Selecting %s..." +msgstr "正在選擇 %s …" + +#: imap/imap.c:690 +msgid "Error opening mailbox" +msgstr "開啟信箱時發生錯誤" + +#. STATUS not supported +#: imap/imap.c:744 +msgid "Unable to append to IMAP mailboxes at this server" +msgstr "無法附加在這個伺服器上的 IMAP ä¿¡ç®±" + +#. command failed cause folder doesn't exist +#: imap/imap.c:753 imap/message.c:600 muttlib.c:1206 +#, c-format +msgid "Create %s?" +msgstr "建立 %s?" + +#: imap/imap.c:789 +msgid "Closing connection to IMAP server..." +msgstr "正在關閉與 IMAP 伺服器的連線…" + +#: imap/imap.c:952 pop.c:461 +#, c-format +msgid "Marking %d messages deleted..." +msgstr "標簽了的 %d 封信件刪去了…" + +#: imap/imap.c:961 +msgid "Expunge failed" +msgstr "刪除 (expunge) 失敗" + +#: imap/imap.c:976 +#, c-format +msgid "Saving message status flags... [%d/%d]" +msgstr "正在儲存信件狀態旗標… [%d/%d]" + +#: imap/imap.c:1060 +msgid "Expunging messages from server..." +msgstr "正在刪除伺服器上的信件…" + +#: imap/imap.c:1065 +msgid "imap_sync_mailbox: EXPUNGE failed" +msgstr "" + +#: imap/imap.c:1099 +msgid "CLOSE failed" +msgstr "CLOSE 失敗" + +#: imap/imap.c:1342 +#, fuzzy +msgid "Bad mailbox name" +msgstr "製作信箱:" + +#: imap/imap.c:1354 +#, c-format +msgid "Subscribing to %s..." +msgstr "訂閱 %s…" + +#: imap/imap.c:1356 +#, c-format +msgid "Unsubscribing to %s..." +msgstr "取消訂閱 %s…" + +#. Unable to fetch headers for lower versions +#: imap/message.c:74 +msgid "Unable to fetch headers from this IMAP server version." +msgstr "無法取回使用這個 IMAP 伺服器版本的郵件的標頭。" + +#: imap/message.c:84 +#, c-format +msgid "Could not create temporary file %s" +msgstr "無法建立暫存檔 %s" + +#: imap/message.c:101 pop.c:206 +#, c-format +msgid "Fetching message headers... [%d/%d]" +msgstr "正在取回信件標頭… [%d/%d]" + +#: imap/message.c:250 pop.c:340 +msgid "Fetching message..." +msgstr "拿取信件中…" + +#: imap/message.c:293 pop.c:377 +msgid "The message index is incorrect. Try reopening the mailbox." +msgstr "信件的索引不正確。請再重新開啟信箱。" + +#: imap/message.c:466 +msgid "Uploading message ..." +msgstr "正在上傳信件…" + +#: imap/message.c:576 +#, c-format +msgid "Copying %d messages to %s..." +msgstr "正在複制 %d 封信件到 %s …" + +#: imap/message.c:580 +#, c-format +msgid "Copying message %d to %s..." +msgstr "正在複制 信件 %d 到 %s …" + +#: imap/util.c:239 +msgid "Continue?" +msgstr "繼續?" + +#: init.c:611 +msgid "alias: no address" +msgstr "別名:沒有電子郵件位址" + +#: init.c:651 +#, c-format +msgid "Warning: Bad IDN '%s' in alias '%s'.\n" +msgstr "" + +#: init.c:714 +msgid "invalid header field" +msgstr "無效的標頭欄位" + +#: init.c:767 +#, c-format +msgid "%s: unknown sorting method" +msgstr "%s:不明的排序方式" + +#: init.c:879 +#, c-format +msgid "mutt_restore_default(%s): error in regexp: %s\n" +msgstr "mutt_restore_defualt(%s):錯誤的正規表示式:%s\n" + +#: init.c:944 +#, c-format +msgid "%s: unknown variable" +msgstr "%s:不明的變數" + +#: init.c:953 +msgid "prefix is illegal with reset" +msgstr "重新設置後字首仍不合規定" + +#: init.c:959 +msgid "value is illegal with reset" +msgstr "重新設置後值仍不合規定" + +#: init.c:998 +#, c-format +msgid "%s is set" +msgstr "%s 已被設定" + +#: init.c:998 +#, c-format +msgid "%s is unset" +msgstr "%s 沒有被設定" + +#: init.c:1201 +#, c-format +msgid "%s: invalid mailbox type" +msgstr "%s:無效的信箱種類" + +#: init.c:1226 init.c:1271 +#, c-format +msgid "%s: invalid value" +msgstr "%s:無效的值" + +#: init.c:1312 +#, fuzzy, c-format +msgid "%s: Unknown type." +msgstr "%s:不明的種類" + +#: init.c:1338 +#, c-format +msgid "%s: unknown type" +msgstr "%s:不明的種類" + +#: init.c:1375 +#, fuzzy, c-format +msgid "%s: stat: %s" +msgstr "無法讀取:%s" + +#: init.c:1380 +#, fuzzy, c-format +msgid "%s: not a regular file" +msgstr "%s 不是信箱。" + +#: init.c:1395 +#, c-format +msgid "Error in %s, line %d: %s" +msgstr "%s 發生錯誤,行號 %d:%s" + +#. the muttrc source keyword +#: init.c:1411 +#, c-format +msgid "source: errors in %s" +msgstr "source:錯誤發生在 %s" + +#: init.c:1412 +#, c-format +msgid "source: reading aborted due too many errors in %s" +msgstr "source: 因 %s 發生太多錯誤,因此閱讀終止。" + +#: init.c:1426 +#, c-format +msgid "source: error at %s" +msgstr "source:錯誤發生在 %s" + +#: init.c:1431 +msgid "source: too many arguments" +msgstr "source:太多引數" + +#: init.c:1482 +#, c-format +msgid "%s: unknown command" +msgstr "%s:不明的指令" + +#: init.c:1871 +#, c-format +msgid "Error in command line: %s\n" +msgstr "指令行有錯:%s\n" + +#: init.c:1920 +msgid "unable to determine home directory" +msgstr "無法決定 home 目錄" + +#: init.c:1928 +msgid "unable to determine username" +msgstr "無法決定使用者名稱" + +#: keymap.c:455 +msgid "Macro loop detected." +msgstr "檢測到巨集中有迴圈。" + +#: keymap.c:660 keymap.c:668 +msgid "Key is not bound." +msgstr "這個鍵還未被定義功能。" + +#: keymap.c:672 +#, c-format +msgid "Key is not bound. Press '%s' for help." +msgstr "這個鍵還未被定義功能。 按 '%s' 以取得說明。" + +#: keymap.c:683 +msgid "push: too many arguments" +msgstr "push:太多引數" + +#: keymap.c:704 +#, c-format +msgid "%s: no such menu" +msgstr "%s:沒有這個選單" + +#: keymap.c:713 +msgid "null key sequence" +msgstr "空的鍵值序列" + +#: keymap.c:792 +msgid "bind: too many arguments" +msgstr "bind:太多引數" + +#: keymap.c:807 +#, c-format +msgid "%s: no such function in map" +msgstr "%s:在對映表中沒有這樣的功能" + +#: keymap.c:830 +msgid "macro: empty key sequence" +msgstr "macro:空的鍵值序列" + +#: keymap.c:841 +msgid "macro: too many arguments" +msgstr "macro:引數太多" + +#: keymap.c:871 +msgid "exec: no arguments" +msgstr "exec:沒有引數" + +#: keymap.c:891 +#, c-format +msgid "%s: no such function" +msgstr "%s:沒有這個功能" + +#: keymap.c:912 +#, fuzzy +msgid "Enter keys (^G to abort): " +msgstr "請輸入 %s 的鑰匙 ID:" + +#: keymap.c:917 +#, c-format +msgid "Char = %s, Octal = %o, Decimal = %d" +msgstr "" + +#: keymap_alldefs.h:5 +msgid "null operation" +msgstr "空的運算" + +#: keymap_alldefs.h:6 +msgid "end of conditional execution (noop)" +msgstr "" + +#: keymap_alldefs.h:7 +msgid "force viewing of attachment using mailcap" +msgstr "強迫使用 mailcap 瀏覽夾檔" + +#: keymap_alldefs.h:8 +msgid "view attachment as text" +msgstr "用文字方式顯示附件內容" + +#: keymap_alldefs.h:9 +msgid "Toggle display of subparts" +msgstr "切換部件顯示" + +#: keymap_alldefs.h:10 +msgid "move to the bottom of the page" +msgstr "移到本頁的最後面" + +#: keymap_alldefs.h:11 +msgid "remail a message to another user" +msgstr "重新寄信給另外一個使用者" + +#: keymap_alldefs.h:12 +msgid "select a new file in this directory" +msgstr "請選擇本目錄中一個新的檔案" + +#: keymap_alldefs.h:13 +msgid "view file" +msgstr "顯示檔案" + +#: keymap_alldefs.h:14 +msgid "display the currently selected file's name" +msgstr "顯示所選擇的檔案" + +#: keymap_alldefs.h:15 +msgid "subscribe to current mailbox (IMAP only)" +msgstr "訂閱現在這個郵箱 (只適用於 IMAP)" + +#: keymap_alldefs.h:16 +msgid "unsubscribe to current mailbox (IMAP only)" +msgstr "取消訂閱現在這個郵箱 (只適用於 IMAP)" + +#: keymap_alldefs.h:17 +msgid "toggle view all/subscribed mailboxes (IMAP only)" +msgstr "切換顯示 全部/已訂閱 的郵箱 (只適用於 IMAP)" + +#: keymap_alldefs.h:18 +#, fuzzy +msgid "list mailboxes with new mail" +msgstr "沒有信箱有新信件。" + +#: keymap_alldefs.h:19 +msgid "change directories" +msgstr "改變目錄" + +#: keymap_alldefs.h:20 +msgid "check mailboxes for new mail" +msgstr "檢查信箱是否有新信件" + +#: keymap_alldefs.h:21 +msgid "attach a file(s) to this message" +msgstr "在這封信件中夾帶檔案" + +#: keymap_alldefs.h:22 +msgid "attach message(s) to this message" +msgstr "在這封信件中夾帶信件" + +#: keymap_alldefs.h:23 +msgid "edit the BCC list" +msgstr "編輯 BCC 列表" + +#: keymap_alldefs.h:24 +msgid "edit the CC list" +msgstr "編輯 CC 列表" + +#: keymap_alldefs.h:25 +msgid "edit attachment description" +msgstr "編輯附件的說明" + +#: keymap_alldefs.h:26 +msgid "edit attachment transfer-encoding" +msgstr "編輯附件的傳輸編碼" + +#: keymap_alldefs.h:27 +msgid "enter a file to save a copy of this message in" +msgstr "輸入用來儲存這封信件拷貝的檔案名稱" + +#: keymap_alldefs.h:28 +msgid "edit the file to be attached" +msgstr "編輯附件的檔案名稱" + +#: keymap_alldefs.h:29 +msgid "edit the from field" +msgstr "編輯發信人欄位" + +#: keymap_alldefs.h:30 +msgid "edit the message with headers" +msgstr "編輯信件與標頭" + +#: keymap_alldefs.h:31 +msgid "edit the message" +msgstr "編輯信件內容" + +#: keymap_alldefs.h:32 +msgid "edit attachment using mailcap entry" +msgstr "使用 mailcap 編輯附件" + +#: keymap_alldefs.h:33 +msgid "edit the Reply-To field" +msgstr "編輯 Reply-To 欄位" + +#: keymap_alldefs.h:34 +msgid "edit the subject of this message" +msgstr "編輯信件的標題" + +#: keymap_alldefs.h:35 +msgid "edit the TO list" +msgstr "編輯 TO 列表" + +#: keymap_alldefs.h:36 +msgid "create a new mailbox (IMAP only)" +msgstr "製造新郵箱 (只適用於 IMAP)" + +#: keymap_alldefs.h:37 +msgid "edit attachment content type" +msgstr "編輯附件的 content type" + +#: keymap_alldefs.h:38 +msgid "get a temporary copy of an attachment" +msgstr "取得附件的暫存拷貝" + +#: keymap_alldefs.h:39 +msgid "run ispell on the message" +msgstr "於信件執行 ispell" + +#: keymap_alldefs.h:40 +msgid "compose new attachment using mailcap entry" +msgstr "使用 mailcap 來組合新的附件" + +#: keymap_alldefs.h:41 +msgid "toggle recoding of this attachment" +msgstr "切換是否再為附件重新編碼" + +#: keymap_alldefs.h:42 +msgid "save this message to send later" +msgstr "儲存信件以便稍後寄出" + +#: keymap_alldefs.h:43 +msgid "rename/move an attached file" +msgstr "更改檔名∕移動 已被附帶的檔案" + +#: keymap_alldefs.h:44 +msgid "send the message" +msgstr "寄出信件" + +#: keymap_alldefs.h:45 +msgid "toggle disposition between inline/attachment" +msgstr "切換 合拼∕附件式 觀看模式" + +#: keymap_alldefs.h:46 +msgid "toggle whether to delete file after sending it" +msgstr "切換寄出後是否刪除檔案" + +#: keymap_alldefs.h:47 +msgid "update an attachment's encoding info" +msgstr "更新附件的編碼資訊" + +#: keymap_alldefs.h:48 +msgid "write the message to a folder" +msgstr "存入一封信件到某個檔案夾" + +#: keymap_alldefs.h:49 +msgid "copy a message to a file/mailbox" +msgstr "拷貝一封信件到某個檔案或信箱" + +#: keymap_alldefs.h:50 +msgid "create an alias from a message sender" +msgstr "建立某封信件寄信人的別名" + +#: keymap_alldefs.h:51 +msgid "move entry to bottom of screen" +msgstr "移至螢幕結尾" + +#: keymap_alldefs.h:52 +msgid "move entry to middle of screen" +msgstr "移至螢幕中央" + +#: keymap_alldefs.h:53 +msgid "move entry to top of screen" +msgstr "移至螢幕開頭" + +#: keymap_alldefs.h:54 +msgid "make decoded (text/plain) copy" +msgstr "製作解碼的 (text/plain) 拷貝" + +#: keymap_alldefs.h:55 +msgid "make decoded copy (text/plain) and delete" +msgstr "製作解碼的拷貝 (text/plain) 並且刪除之" + +#: keymap_alldefs.h:56 +msgid "delete the current entry" +msgstr "刪除所在的資料" + +#: keymap_alldefs.h:57 +msgid "delete the current mailbox (IMAP only)" +msgstr "刪除所在的郵箱 (只適用於 IMAP)" + +#: keymap_alldefs.h:58 +msgid "delete all messages in subthread" +msgstr "刪除所有在子序列中的信件" + +#: keymap_alldefs.h:59 +msgid "delete all messages in thread" +msgstr "刪除所有在序列中的信件" + +#: keymap_alldefs.h:60 +msgid "display full address of sender" +msgstr "顯示寄信人的完整位址" + +#: keymap_alldefs.h:61 +msgid "display message and toggle header weeding" +msgstr "顯示信件並切換是否顯示所有標頭資料" + +#: keymap_alldefs.h:62 +msgid "display a message" +msgstr "顯示信件" + +#: keymap_alldefs.h:63 +msgid "edit the raw message" +msgstr "編輯信件的真正內容" + +#: keymap_alldefs.h:64 +msgid "delete the char in front of the cursor" +msgstr "刪除游標所在位置之前的字母" + +#: keymap_alldefs.h:65 +msgid "move the cursor one character to the left" +msgstr "向左移動一個字元" + +#: keymap_alldefs.h:66 +msgid "move the cursor to the beginning of the word" +msgstr "移動至字的開頭" + +#: keymap_alldefs.h:67 +msgid "jump to the beginning of the line" +msgstr "跳到行首" + +#: keymap_alldefs.h:68 +msgid "cycle among incoming mailboxes" +msgstr "圈選進入的郵筒" + +#: keymap_alldefs.h:69 +msgid "complete filename or alias" +msgstr "完整的檔名或別名" + +#: keymap_alldefs.h:70 +msgid "complete address with query" +msgstr "附上完整的位址查詢" + +#: keymap_alldefs.h:71 +msgid "delete the char under the cursor" +msgstr "刪除游標所在的字母" + +#: keymap_alldefs.h:72 +msgid "jump to the end of the line" +msgstr "跳到行尾" + +#: keymap_alldefs.h:73 +msgid "move the cursor one character to the right" +msgstr "向游標向右移動一個字元" + +#: keymap_alldefs.h:74 +msgid "move the cursor to the end of the word" +msgstr "移動至字的最後" + +#: keymap_alldefs.h:75 +#, fuzzy +msgid "scroll down through the history list" +msgstr "向上捲動使用紀錄清單" + +#: keymap_alldefs.h:76 +msgid "scroll up through the history list" +msgstr "向上捲動使用紀錄清單" + +#: keymap_alldefs.h:77 +msgid "delete chars from cursor to end of line" +msgstr "由游標所在位置刪除至行尾所有的字元" + +#: keymap_alldefs.h:78 +msgid "delete chars from the cursor to the end of the word" +msgstr "由游標所在位置刪除至字尾所有的字元" + +#: keymap_alldefs.h:79 +msgid "delete all chars on the line" +msgstr "刪除某行上所有的字母" + +#: keymap_alldefs.h:80 +msgid "delete the word in front of the cursor" +msgstr "刪除游標之前的字" + +#: keymap_alldefs.h:81 +msgid "quote the next typed key" +msgstr "用下一個輸入的鍵值作引言" + +#: keymap_alldefs.h:82 +msgid "transpose character under cursor with previous" +msgstr "把遊標上的字母與前一個字交換" + +#: keymap_alldefs.h:83 +msgid "capitalize the word" +msgstr "把字的第一個字母轉成大寫" + +#: keymap_alldefs.h:84 +msgid "convert the word to lower case" +msgstr "把字串轉成小寫" + +#: keymap_alldefs.h:85 +msgid "convert the word to upper case" +msgstr "把字串轉成大寫" + +#: keymap_alldefs.h:86 +msgid "enter a muttrc command" +msgstr "輸入 muttrc 指令" + +#: keymap_alldefs.h:87 +msgid "enter a file mask" +msgstr "輸入檔案遮罩" + +#: keymap_alldefs.h:88 +msgid "exit this menu" +msgstr "離開這個選單" + +#: keymap_alldefs.h:89 +msgid "filter attachment through a shell command" +msgstr "透過 shell 指令來過濾附件" + +#: keymap_alldefs.h:90 +msgid "move to the first entry" +msgstr "移到第一項資料" + +#: keymap_alldefs.h:91 +msgid "toggle a message's 'important' flag" +msgstr "切換信件的 '重要' 旗標" + +#: keymap_alldefs.h:92 +msgid "forward a message with comments" +msgstr "轉寄訊息並加上額外文字" + +#: keymap_alldefs.h:93 +msgid "select the current entry" +msgstr "選擇所在的資料記錄" + +#: keymap_alldefs.h:94 +msgid "reply to all recipients" +msgstr "回覆給所有收件人" + +#: keymap_alldefs.h:95 +msgid "scroll down 1/2 page" +msgstr "向下捲動半頁" + +#: keymap_alldefs.h:96 +msgid "scroll up 1/2 page" +msgstr "向上捲動半頁" + +#: keymap_alldefs.h:97 +msgid "this screen" +msgstr "這個畫面" + +#: keymap_alldefs.h:98 +msgid "jump to an index number" +msgstr "跳到某一個索引號碼" + +#: keymap_alldefs.h:99 +msgid "move to the last entry" +msgstr "移動到最後一項資料" + +#: keymap_alldefs.h:100 +msgid "reply to specified mailing list" +msgstr "回覆給某一個指定的郵件列表" + +#: keymap_alldefs.h:101 +msgid "execute a macro" +msgstr "執行一個巨集" + +#: keymap_alldefs.h:102 +msgid "compose a new mail message" +msgstr "撰寫一封新的信件" + +#: keymap_alldefs.h:103 +msgid "open a different folder" +msgstr "開啟另一個檔案夾" + +#: keymap_alldefs.h:104 +msgid "open a different folder in read only mode" +msgstr "用唯讀模式開啟另一個檔案夾" + +#: keymap_alldefs.h:105 +msgid "clear a status flag from a message" +msgstr "清除某封信件上的狀態旗標" + +#: keymap_alldefs.h:106 +msgid "delete messages matching a pattern" +msgstr "刪除符合某個格式的信件" + +#: keymap_alldefs.h:107 +msgid "force retrieval of mail from IMAP server" +msgstr "強行取回 IMAP 伺服器上的信件" + +#: keymap_alldefs.h:108 +msgid "retrieve mail from POP server" +msgstr "取回 POP 伺服器上的信件" + +#: keymap_alldefs.h:109 +msgid "move to the first message" +msgstr "移動到第一封信件" + +#: keymap_alldefs.h:110 +msgid "move to the last message" +msgstr "移動到最後一封信件" + +#: keymap_alldefs.h:111 +msgid "show only messages matching a pattern" +msgstr "只顯示符合某個格式的信件" + +#: keymap_alldefs.h:112 +msgid "jump to the next new message" +msgstr "跳到下一封新的信件" + +#: keymap_alldefs.h:113 +#, fuzzy +msgid "jump to the next new or unread message" +msgstr "跳到下一個未讀取的信件" + +#: keymap_alldefs.h:114 +msgid "jump to the next subthread" +msgstr "跳到下一個子序列" + +#: keymap_alldefs.h:115 +msgid "jump to the next thread" +msgstr "跳到下一個序列" + +#: keymap_alldefs.h:116 +msgid "move to the next undeleted message" +msgstr "移動到下一個未刪除的信件" + +#: keymap_alldefs.h:117 +msgid "jump to the next unread message" +msgstr "跳到下一個未讀取的信件" + +#: keymap_alldefs.h:118 +msgid "jump to parent message in thread" +msgstr "跳到這個序列的主信件" + +#: keymap_alldefs.h:119 +msgid "jump to previous thread" +msgstr "跳到上一個序列" + +#: keymap_alldefs.h:120 +msgid "jump to previous subthread" +msgstr "跳到上一個子序列" + +#: keymap_alldefs.h:121 +msgid "move to the previous undeleted message" +msgstr "移動到上一個未刪除的信件" + +#: keymap_alldefs.h:122 +msgid "jump to the previous new message" +msgstr "跳到上一個新的信件" + +#: keymap_alldefs.h:123 +#, fuzzy +msgid "jump to the previous new or unread message" +msgstr "跳到上一個未讀取的信件" + +#: keymap_alldefs.h:124 +msgid "jump to the previous unread message" +msgstr "跳到上一個未讀取的信件" + +#: keymap_alldefs.h:125 +msgid "mark the current thread as read" +msgstr "標記現在的序列為已讀取" + +#: keymap_alldefs.h:126 +msgid "mark the current subthread as read" +msgstr "標記現在的子序列為已讀取" + +#: keymap_alldefs.h:127 +msgid "set a status flag on a message" +msgstr "設定某一封信件的狀態旗標" + +#: keymap_alldefs.h:128 +msgid "save changes to mailbox" +msgstr "儲存變動到信箱" + +#: keymap_alldefs.h:129 +msgid "tag messages matching a pattern" +msgstr "標記符合某個格式的信件" + +#: keymap_alldefs.h:130 +msgid "undelete messages matching a pattern" +msgstr "反刪除符合某個格式的信件" + +#: keymap_alldefs.h:131 +msgid "untag messages matching a pattern" +msgstr "反標記符合某個格式的信件" + +#: keymap_alldefs.h:132 +msgid "move to the middle of the page" +msgstr "移動到本頁的中間" + +#: keymap_alldefs.h:133 +msgid "move to the next entry" +msgstr "移動到下一項資料" + +#: keymap_alldefs.h:134 +msgid "scroll down one line" +msgstr "向下捲動一行" + +#: keymap_alldefs.h:135 +msgid "move to the next page" +msgstr "移到下一頁" + +#: keymap_alldefs.h:136 +msgid "jump to the bottom of the message" +msgstr "跳到信件的最後面" + +#: keymap_alldefs.h:137 +msgid "toggle display of quoted text" +msgstr "切換引言顯示" + +#: keymap_alldefs.h:138 +msgid "skip beyond quoted text" +msgstr "跳過引言" + +#: keymap_alldefs.h:139 +msgid "jump to the top of the message" +msgstr "跳到信件的最上面" + +#: keymap_alldefs.h:140 +msgid "pipe message/attachment to a shell command" +msgstr "輸出導向 訊息/附件 至命令解譯器" + +#: keymap_alldefs.h:141 +msgid "move to the previous entry" +msgstr "移到上一項資料" + +#: keymap_alldefs.h:142 +msgid "scroll up one line" +msgstr "向上捲動一行" + +#: keymap_alldefs.h:143 +msgid "move to the previous page" +msgstr "移到上一頁" + +#: keymap_alldefs.h:144 +msgid "print the current entry" +msgstr "列印現在的資料" + +#: keymap_alldefs.h:145 +msgid "query external program for addresses" +msgstr "利用外部應用程式查詢地址" + +#: keymap_alldefs.h:146 +msgid "append new query results to current results" +msgstr "附加新的查詢結果至現今的查詢結果" + +#: keymap_alldefs.h:147 +msgid "save changes to mailbox and quit" +msgstr "儲存變動過的資料到信箱並且離開" + +#: keymap_alldefs.h:148 +msgid "recall a postponed message" +msgstr "重新叫出一封被延遲寄出的信件" + +#: keymap_alldefs.h:149 +msgid "clear and redraw the screen" +msgstr "清除並重新繪製畫面" + +#: keymap_alldefs.h:150 +msgid "{internal}" +msgstr "{內部的}" + +#: keymap_alldefs.h:151 +msgid "reply to a message" +msgstr "回覆一封信件" + +#: keymap_alldefs.h:152 +msgid "use the current message as a template for a new one" +msgstr "用這封信件作為新信件的範本" + +#: keymap_alldefs.h:153 +msgid "save message/attachment to a file" +msgstr "儲存信件/附件到某個檔案" + +#: keymap_alldefs.h:154 +msgid "search for a regular expression" +msgstr "用正規表示式尋找" + +#: keymap_alldefs.h:155 +msgid "search backwards for a regular expression" +msgstr "向後搜尋一個正規表示式" + +#: keymap_alldefs.h:156 +msgid "search for next match" +msgstr "尋找下一個符合的資料" + +#: keymap_alldefs.h:157 +msgid "search for next match in opposite direction" +msgstr "返方向搜尋下一個符合的資料" + +#: keymap_alldefs.h:158 +msgid "toggle search pattern coloring" +msgstr "切換搜尋格式的顏色" + +#: keymap_alldefs.h:159 +msgid "invoke a command in a subshell" +msgstr "在子 shell 執行指令" + +#: keymap_alldefs.h:160 +msgid "sort messages" +msgstr "信件排序" + +#: keymap_alldefs.h:161 +msgid "sort messages in reverse order" +msgstr "以相反的次序來做訊息排序" + +#: keymap_alldefs.h:162 +msgid "tag the current entry" +msgstr "標記現在的記錄" + +#: keymap_alldefs.h:163 +msgid "apply next function to tagged messages" +msgstr "應用下一個功能到已標記的訊息" + +#: keymap_alldefs.h:164 +#, fuzzy +msgid "apply next function ONLY to tagged messages" +msgstr "應用下一個功能到已標記的訊息" + +#: keymap_alldefs.h:165 +msgid "tag the current subthread" +msgstr "標記目前的子序列" + +#: keymap_alldefs.h:166 +msgid "tag the current thread" +msgstr "標記目前的序列" + +#: keymap_alldefs.h:167 +msgid "toggle a message's 'new' flag" +msgstr "切換信件的 'new' 旗標" + +#: keymap_alldefs.h:168 +msgid "toggle whether the mailbox will be rewritten" +msgstr "切換是否重新寫入郵箱中" + +#: keymap_alldefs.h:169 +msgid "toggle whether to browse mailboxes or all files" +msgstr "切換瀏覽郵箱抑或所有的檔案" + +#: keymap_alldefs.h:170 +msgid "move to the top of the page" +msgstr "移到頁首" + +#: keymap_alldefs.h:171 +msgid "undelete the current entry" +msgstr "取消刪除所在的記錄" + +#: keymap_alldefs.h:172 +msgid "undelete all messages in thread" +msgstr "取消刪除序列中的所有信件" + +#: keymap_alldefs.h:173 +msgid "undelete all messages in subthread" +msgstr "取消刪除子序列中的所有信件" + +#: keymap_alldefs.h:174 +msgid "show the Mutt version number and date" +msgstr "顯示 Mutt 的版本號碼與日期" + +#: keymap_alldefs.h:175 +msgid "view attachment using mailcap entry if necessary" +msgstr "如果需要的話使用 mailcap 瀏覽附件" + +#: keymap_alldefs.h:176 +msgid "show MIME attachments" +msgstr "顯示 MIME 附件" + +#: keymap_alldefs.h:177 +msgid "display the keycode for a key press" +msgstr "" + +#: keymap_alldefs.h:178 +msgid "show currently active limit pattern" +msgstr "顯示目前有作用的限制樣式" + +#: keymap_alldefs.h:179 +msgid "collapse/uncollapse current thread" +msgstr "打開/關閉 目前的序列" + +#: keymap_alldefs.h:180 +msgid "collapse/uncollapse all threads" +msgstr "打開/關閉 所有的序列" + +#: keymap_alldefs.h:181 +msgid "attach a PGP public key" +msgstr "附帶一把 PGP 公共鑰匙" + +#: keymap_alldefs.h:182 +msgid "show PGP options" +msgstr "顯示 PGP 選項" + +#: keymap_alldefs.h:183 +msgid "mail a PGP public key" +msgstr "寄出 PGP 公共鑰匙" + +#: keymap_alldefs.h:184 +msgid "verify a PGP public key" +msgstr "檢驗 PGP 公共鑰匙" + +#: keymap_alldefs.h:185 +msgid "view the key's user id" +msgstr "檢閱這把鑰匙的使用者 id" + +#: keymap_alldefs.h:186 +msgid "check for classic pgp" +msgstr "檢查古老的pgp格式" + +#: keymap_alldefs.h:187 +msgid "Accept the chain constructed" +msgstr "同意已建好的鏈結" + +#: keymap_alldefs.h:188 +msgid "Append a remailer to the chain" +msgstr "在鏈結的後面加上郵件轉接器" + +#: keymap_alldefs.h:189 +msgid "Insert a remailer into the chain" +msgstr "在鏈結中加入郵件轉接器" + +#: keymap_alldefs.h:190 +msgid "Delete a remailer from the chain" +msgstr "從鏈結中刪除郵件轉接器" + +#: keymap_alldefs.h:191 +msgid "Select the previous element of the chain" +msgstr "選擇鏈結裏對上一個部份" + +#: keymap_alldefs.h:192 +msgid "Select the next element of the chain" +msgstr "選擇鏈結裏跟著的一個部份" + +#: keymap_alldefs.h:193 +msgid "send the message through a mixmaster remailer chain" +msgstr "利用 mixmaster 郵件轉接器把郵件寄出" + +#: keymap_alldefs.h:194 +msgid "make decrypted copy and delete" +msgstr "製作解密的拷貝並且刪除之" + +#: keymap_alldefs.h:195 +msgid "make decrypted copy" +msgstr "製作一份解密的拷貝" + +#: keymap_alldefs.h:196 +#, fuzzy +msgid "wipe passphrase(s) from memory" +msgstr "清除記憶體中的 PGP 通行密碼" + +#: keymap_alldefs.h:197 +#, fuzzy +msgid "extract supported public keys" +msgstr "擷取 PGP 公共鑰匙" + +#: keymap_alldefs.h:198 +#, fuzzy +msgid "show S/MIME options" +msgstr "顯示 PGP 選項" + +#: lib.c:60 +msgid "Integer overflow -- can't allocate memory!" +msgstr "" + +#: lib.c:67 lib.c:82 lib.c:114 +msgid "Out of memory!" +msgstr "記憶體不足!" + +#: main.c:46 +msgid "" +"To contact the developers, please mail to <mutt-dev@mutt.org>.\n" +"To report a bug, please use the flea(1) utility.\n" +msgstr "" +"要與開發人員連絡,請寄信給 <mutt-dev@mutt.org>。\n" +"如發現問題,請利用 flea(1) 程式告之。\n" + +#: main.c:50 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 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" +msgstr "" +"版權所有 (C) 1996-2001 Michael R. Elkins 及其他人仕。\n" +"Mutt 不提供任何保證:需要更詳細的資料,請鍵入 `mutt -vv'。\n" +"Mutt 是一個自由軟體, 歡迎您在某些特定的條件上,重新將它分發。\n" +"若需要更詳細的資料, 請鍵入 `mutt -vv'\n" + +#: main.c:56 +#, fuzzy +msgid "" +"Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>\n" +"Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n" +"Copyright (C) 1997-2002 Thomas Roessler <roessler@does-not-exist.org>\n" +"Copyright (C) 1998-2002 Werner Koch <wk@isil.d.shuttle.de>\n" +"Copyright (C) 1999-2002 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" +"Lots of others not mentioned here contributed lots of code,\n" +"fixes, and suggestions.\n" +"\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" +"\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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.\n" +msgstr "" +"版權所有 (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>\n" +"版權所有 (C) 1996-2000 Brandon Long <blong@fiction.net>\n" +"版權所有 (C) 1997-2000 Thomas Roessler <roessler@guug.de>\n" +"版權所有 (C) 1998-2000 Werner Koch <wk@isil.d.shuttle.de>\n" +"版權所有 (C) 1999-2000 Brendan Cully <brendan@kublai.com>\n" +"版權所有 (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n" +"版權所有 (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org>\n" +"\n" +"還有許多在這裡沒有提及到的人仕,他們曾提供程式碼,修正,和意見。\n" +"\n" +" 這個應用程式是自由軟體;您可以在自由軟體基金會的 GNU 一般公共\n" +" 授權書(版本 2,或i隨你喜好使用以後的版本)下重複散布並/或修\n" +" 正它。\n" +"\n" +" 發布這個應用程式的目的是希望它會對你有用,但絕不包括任何保証;\n" +" 就連銷售性和適於特定目的之暗示擔保亦然。在 GNU 一般公共授權書\n" +" 中將會獲得更多資料。\n" +"\n" +" 您應已連同應用程式收到一份 GNU 一般公共授權書;如果沒有,請寫信\n" +" 至 Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" +" Boston, MA 02111, USA.\n" + +#: main.c:94 +#, fuzzy +msgid "" +"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 [ -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" +"\n" +"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" +" -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 from\n" +" -i <file>\tspecify a file which Mutt should include in the reply\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\n" +" -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" +msgstr "" +"用法: mutt [ -nRzZ ] [ -e <命令> ] [ -F <檔案> ] [ -m <類型> ] [ -f <檔案" +"> ]\n" +" mutt [ -nx ] [ -e <命令> ] [ -a <檔案> ] [ -F <檔案> ] [ -H <檔案> ] " +"[ -i <檔案> ] [ -s <主題> ] [ -b <地址> ] [ -c <地址> ] <地址> [ ... ]\n" +" mutt [ -n ] [ -e <命令> ] [ -F <檔案> ] -p\n" +" mutt -v[v]\n" +"\n" +"參數:\n" +" -a <檔案>\t\t將檔案附在信件中\n" +" -b <地址>\t\t指定一個 秘密複製 (BCC) 的地址\n" +" -c <地址>\t\t指定一個 複製 (CC) 的地址\n" +" -e <命令>\t\t指定一個初始化後要被執行的命令\n" +" -f <檔案>\t\t指定要閱讀那一個郵筒\n" +" -F <檔案>\t\t指定另一個 muttrc 檔案\n" +" -H <檔案>\t\t指定一個範本檔案以讀取標題來源\n" +" -i <檔案>\t\t指定一個包括在回覆中的檔案\n" +" -m <類型>\t\t指定一個預設的郵筒類型\n" +" -n\t\t使 Mutt 不去讀取系統的 Muttrc 檔\n" +" -p\t\t叫回一個延後寄送的信件\n" +" -R\t\t以唯讀模式開啟郵筒\n" +" -s <主題>\t\t指定一個主題 (如果有空白的話必須被包括在引言中)\n" +" -v\t\t顯示版本和編譯時所定義的參數\n" +" -x\t\t模擬 mailx 寄送模式\n" +" -y\t\t選擇一個被指定在您郵筒清單中的郵筒\n" +" -z\t\t如果沒有訊息在郵筒中的話,立即離開\n" +" -Z\t\t開啟第一個附有新郵件的資料夾,如果沒有的話立即離開\n" +" -h\t\t這個說明訊息" + +#: main.c:162 +msgid "" +"\n" +"Compile options:" +msgstr "" +"\n" +"編譯選項:" + +#: main.c:454 +msgid "Error initializing terminal." +msgstr "無法初始化終端機。" + +#: main.c:559 +#, c-format +msgid "Debugging at level %d.\n" +msgstr "除錯模式在第 %d 層。\n" + +#: main.c:561 +msgid "DEBUG was not defined during compilation. Ignored.\n" +msgstr "在編譯時候沒有定義 DEBUG。放棄執行。\n" + +#: main.c:706 +#, c-format +msgid "%s does not exist. Create it?" +msgstr "%s 不存在。製造嗎?" + +#: main.c:710 +#, c-format +msgid "Can't create %s: %s." +msgstr "無法建立 %s: %s." + +#: main.c:755 +msgid "No recipients specified.\n" +msgstr "沒有指定接受者。\n" + +#: main.c:841 +#, c-format +msgid "%s: unable to attach file.\n" +msgstr "%s:無法附帶檔案。\n" + +#: main.c:861 +msgid "No mailbox with new mail." +msgstr "沒有信箱有新信件。" + +#: main.c:870 +msgid "No incoming mailboxes defined." +msgstr "沒有定義任何的收信郵箱" + +#: main.c:897 +msgid "Mailbox is empty." +msgstr "信箱內空無一物。" + +#: mbox.c:125 mbox.c:284 +#, c-format +msgid "Reading %s... %d (%d%%)" +msgstr "讀取 %s 中… %d (%d%%)" + +#: mbox.c:149 mbox.c:206 +msgid "Mailbox is corrupt!" +msgstr "信箱已損壞了!" + +#: mbox.c:658 +msgid "Mailbox was corrupted!" +msgstr "信箱已損壞!" + +#: mbox.c:695 mbox.c:949 +msgid "Fatal error! Could not reopen mailbox!" +msgstr "嚴重錯誤!無法重新開啟信箱!" + +#: mbox.c:704 +msgid "Unable to lock mailbox!" +msgstr "無法鎖住信箱!" + +#. this means ctx->changed or ctx->deleted was set, but no +#. * messages were found to be changed or deleted. This should +#. * never happen, is we presume it is a bug in mutt. +#. +#: mbox.c:750 +msgid "sync: mbox modified, but no modified messages! (report this bug)" +msgstr "同步:信箱已被修改,但沒有被修改過的信件!(請回報這個錯誤)" + +#: mbox.c:789 +#, c-format +msgid "Writing messages... %d (%d%%)" +msgstr "寫入信件中… %d (%d%%)" + +#. copy the temp mailbox back into place starting at the first +#. * change/deleted message +#. +#: mbox.c:902 +msgid "Committing changes..." +msgstr "正在寫入更改的資料…" + +#: mbox.c:933 +#, c-format +msgid "Write failed! Saved partial mailbox to %s" +msgstr "寫入失敗!已把部分的信箱儲存至 %s" + +#: mbox.c:999 +msgid "Could not reopen mailbox!" +msgstr "無法重開信箱!" + +#: mbox.c:1037 +msgid "Reopening mailbox..." +msgstr "重新開啟信箱中…" + +#: menu.c:413 +msgid "Jump to: " +msgstr "跳到:" + +#: menu.c:422 +msgid "Invalid index number." +msgstr "無效的索引編號。" + +#: menu.c:426 menu.c:444 menu.c:480 menu.c:521 menu.c:537 menu.c:548 +#: menu.c:559 menu.c:601 menu.c:612 menu.c:625 menu.c:638 menu.c:1033 +msgid "No entries." +msgstr "沒有資料。" + +#: menu.c:441 +msgid "You cannot scroll down farther." +msgstr "您無法再向下捲動了。" + +#: menu.c:457 +msgid "You cannot scroll up farther." +msgstr "您無法再向上捲動了。" + +#: menu.c:477 +msgid "You are on the last page." +msgstr "您現在在最後一頁。" + +#: menu.c:499 +msgid "You are on the first page." +msgstr "您現在在第一頁。" + +#: menu.c:578 +msgid "First entry is shown." +msgstr "正在顯示第一項。" + +#: menu.c:598 +msgid "Last entry is shown." +msgstr "正在顯示最後一項。" + +#: menu.c:649 +msgid "You are on the last entry." +msgstr "您現在在最後一項。" + +#: menu.c:660 +msgid "You are on the first entry." +msgstr "您現在在第一項。" + +#: menu.c:720 pattern.c:1232 +msgid "Search for: " +msgstr "搜尋:" + +#: menu.c:721 pattern.c:1233 +msgid "Reverse search for: " +msgstr "返向搜尋:" + +#: menu.c:731 pattern.c:1265 +msgid "No search pattern." +msgstr "沒有搜尋格式。" + +#: menu.c:761 pager.c:1925 pager.c:1941 pager.c:2049 pattern.c:1330 +msgid "Not found." +msgstr "沒有找到。" + +#: menu.c:885 +msgid "No tagged entries." +msgstr "沒有已標記的記錄。" + +#: menu.c:990 +msgid "Search is not implemented for this menu." +msgstr "這個選單中沒有搜尋功能。" + +#: menu.c:995 +msgid "Jumping is not implemented for dialogs." +msgstr "對話模式中不支援跳躍功能。" + +#: menu.c:1036 +msgid "Tagging is not supported." +msgstr "不支援標記功能。" + +#: mh.c:655 +#, c-format +msgid "Reading %s... %d" +msgstr "讀取 %s… %d" + +#: mh.c:1041 +msgid "maildir_commit_message(): unable to set time on file" +msgstr "" + +#: muttlib.c:835 +#, fuzzy +msgid "File is a directory, save under it? [(y)es, (n)o, (a)ll]" +msgstr "檔案是一個目錄, 儲存在它下面 ?" + +#: muttlib.c:835 +msgid "yna" +msgstr "" + +#: muttlib.c:851 +msgid "File is a directory, save under it?" +msgstr "檔案是一個目錄, 儲存在它下面 ?" + +#: muttlib.c:857 +msgid "File under directory: " +msgstr "在目錄底下的檔案:" + +#: muttlib.c:869 +msgid "File exists, (o)verwrite, (a)ppend, or (c)ancel?" +msgstr "檔案已經存在, (1)覆蓋, (2)附加, 或是 (3)取消 ?" + +#: muttlib.c:869 +msgid "oac" +msgstr "123" + +#: muttlib.c:1171 +msgid "Can't save message to POP mailbox." +msgstr "無法將信件存到信箱。" + +#: muttlib.c:1180 +#, c-format +msgid "%s is not a mailbox!" +msgstr "%s 不是信箱!" + +#: muttlib.c:1186 +#, c-format +msgid "Append messages to %s?" +msgstr "附加信件到 %s ?" + +#: mutt_socket.c:87 mutt_socket.c:143 +#, c-format +msgid "Connection to %s closed" +msgstr "到 %s 的連線中斷了" + +#: mutt_socket.c:261 +msgid "SSL is unavailable." +msgstr "沒有 SSL 功能" + +#: mutt_socket.c:292 +msgid "Preconnect command failed." +msgstr "預先連接指令失敗。" + +#: mutt_socket.c:363 mutt_socket.c:377 +#, c-format +msgid "Error talking to %s (%s)" +msgstr "連線到 %s (%s) 時失敗" + +#: mutt_socket.c:416 mutt_socket.c:473 +#, c-format +msgid "Bad IDN \"%s\"." +msgstr "" + +#: mutt_socket.c:423 mutt_socket.c:480 +#, c-format +msgid "Looking up %s..." +msgstr "正在尋找 %s…" + +#: mutt_socket.c:434 mutt_socket.c:487 +#, c-format +msgid "Could not find the host \"%s\"" +msgstr "找不到主機 \"%s\"" + +#: mutt_socket.c:438 mutt_socket.c:496 +#, c-format +msgid "Connecting to %s..." +msgstr "正連接到 %s…" + +#: mutt_socket.c:519 +#, c-format +msgid "Could not connect to %s (%s)." +msgstr "無法連線到 %s (%s)。" + +# Well, I don't know how to translate the word "entropy" +#: mutt_ssl.c:170 +msgid "Failed to find enough entropy on your system" +msgstr "" + +#: mutt_ssl.c:194 +#, c-format +msgid "Filling entropy pool: %s...\n" +msgstr "" + +#: mutt_ssl.c:202 +#, c-format +msgid "%s has insecure permissions!" +msgstr "%s 的權限不安全!" + +#: mutt_ssl.c:221 +msgid "SSL disabled due the lack of entropy" +msgstr "" + +#: mutt_ssl.c:315 +msgid "I/O error" +msgstr "" + +#: mutt_ssl.c:318 +msgid "unspecified protocol error" +msgstr "" + +#: mutt_ssl.c:324 +#, fuzzy, c-format +msgid "SSL failed: %s" +msgstr "登入失敗: %s" + +#: mutt_ssl.c:333 +msgid "Unable to get certificate from peer" +msgstr "無法從對方拿取驗証" + +#: mutt_ssl.c:341 +#, c-format +msgid "SSL connection using %s (%s)" +msgstr "利用 %s (%s) 來進行 SSL" + +#: mutt_ssl.c:381 +msgid "Unknown" +msgstr "不清楚" + +#: mutt_ssl.c:406 +msgid "[unable to calculate]" +msgstr "【無法計算】" + +#: mutt_ssl.c:424 +msgid "[invalid date]" +msgstr "【無效的日期】" + +#: mutt_ssl.c:499 +msgid "Server certificate is not yet valid" +msgstr "伺服器的驗証還未有效" + +#: mutt_ssl.c:506 +msgid "Server certificate has expired" +msgstr "伺服器的驗証已過期" + +#: mutt_ssl.c:579 +msgid "This certificate belongs to:" +msgstr "這個驗証屬於:" + +#: mutt_ssl.c:590 +msgid "This certificate was issued by:" +msgstr "這個驗証的派發者:" + +#: mutt_ssl.c:601 +msgid "This certificate is valid" +msgstr "這個驗証有效" + +#: mutt_ssl.c:602 +#, c-format +msgid " from %s" +msgstr " 由 %s" + +#: mutt_ssl.c:604 +#, c-format +msgid " to %s" +msgstr " 至 %s" + +#: mutt_ssl.c:610 +#, c-format +msgid "Fingerprint: %s" +msgstr "指模:%s" + +#: mutt_ssl.c:612 +msgid "SSL Certificate check" +msgstr "SSL 驗証測試" + +#: mutt_ssl.c:615 +msgid "(r)eject, accept (o)nce, (a)ccept always" +msgstr "(1)不接受,(2)只是這次接受,(3)永遠接受" + +#: mutt_ssl.c:616 +msgid "roa" +msgstr "123" + +#: mutt_ssl.c:620 +msgid "(r)eject, accept (o)nce" +msgstr "(1)不接受,(2)只是這次接受" + +#: mutt_ssl.c:621 +msgid "ro" +msgstr "12" + +#: mutt_ssl.c:625 pgpkey.c:510 smime.c:410 +msgid "Exit " +msgstr "離開 " + +#: mutt_ssl.c:652 +msgid "Warning: Couldn't save certificate" +msgstr "警告:未能儲存驗証" + +#: mutt_ssl.c:657 +msgid "Certificate saved" +msgstr "驗証已儲存" + +#: mx.c:116 +#, c-format +msgid "Lock count exceeded, remove lock for %s?" +msgstr "鎖進數量超過限額,將 %s 的鎖移除?" + +#: mx.c:128 +#, c-format +msgid "Can't dotlock %s.\n" +msgstr "無法用 dotlock 鎖住 %s。\n" + +#: mx.c:186 +msgid "Timeout exceeded while attempting fcntl lock!" +msgstr "嘗試 fcntl 的鎖定時超過時間!" + +#: mx.c:192 +#, c-format +msgid "Waiting for fcntl lock... %d" +msgstr "正在等待 fcntl 的鎖定… %d" + +#: mx.c:220 +msgid "Timeout exceeded while attempting flock lock!" +msgstr "嘗試 flock 時超過時間!" + +#: mx.c:227 +#, c-format +msgid "Waiting for flock attempt... %d" +msgstr "正在等待 flock 執行成功… %d" + +#: mx.c:591 +#, c-format +msgid "Couldn't lock %s\n" +msgstr "無法鎖住 %s。\n" + +#: mx.c:675 +#, c-format +msgid "Reading %s..." +msgstr "讀取 %s 中…" + +#: mx.c:775 +#, c-format +msgid "Writing %s..." +msgstr "寫入 %s 中…" + +#: mx.c:808 +#, c-format +msgid "Could not synchronize mailbox %s!" +msgstr "無法與 %s 信箱同步!" + +#: mx.c:874 +#, c-format +msgid "Move read messages to %s?" +msgstr "搬移已讀取的信件到 %s?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted message?" +msgstr "清除 %d 封已經被刪除的信件?" + +#: mx.c:890 mx.c:1146 +#, c-format +msgid "Purge %d deleted messages?" +msgstr "清除 %d 封已被刪除的信件?" + +#: mx.c:914 +#, c-format +msgid "Moving read messages to %s..." +msgstr "正在搬移已經讀取的信件到 %s …" + +#: mx.c:973 mx.c:1137 +msgid "Mailbox is unchanged." +msgstr "信箱沒有變動。" + +#: mx.c:1009 +#, c-format +msgid "%d kept, %d moved, %d deleted." +msgstr "%d 封信件被保留, %d 封信件被搬移, %d 封信件被刪除。" + +#: mx.c:1012 mx.c:1184 +#, c-format +msgid "%d kept, %d deleted." +msgstr "%d 封信件被保留, %d 封信件被刪除。" + +#: mx.c:1122 +#, c-format +msgid " Press '%s' to toggle write" +msgstr " 請按下 '%s' 來切換寫入模式" + +#: mx.c:1124 +msgid "Use 'toggle-write' to re-enable write!" +msgstr "請使用 'toggle-write' 來重新啟動寫入功能!" + +#: mx.c:1126 +#, c-format +msgid "Mailbox is marked unwritable. %s" +msgstr "信箱被標記成為無法寫入的. %s" + +# How to translate? +#: mx.c:1181 +msgid "Mailbox checkpointed." +msgstr "" + +#: mx.c:1490 +msgid "Can't write message" +msgstr "無法寫信件" + +#: mx.c:1535 +msgid "Integer overflow -- can't allocate memory." +msgstr "" + +#: pager.c:53 +msgid "Not available in this menu." +msgstr "在這個菜單中沒有這個功能。" + +#: pager.c:1446 +msgid "PrevPg" +msgstr "上一頁" + +#: pager.c:1447 +msgid "NextPg" +msgstr "下一頁" + +#: pager.c:1451 +msgid "View Attachm." +msgstr "顯示附件。" + +#: pager.c:1454 +msgid "Next" +msgstr "下一個" + +#. emulate "less -q" and don't go on to the next message. +#: pager.c:1833 pager.c:1864 pager.c:1896 pager.c:2137 +msgid "Bottom of message is shown." +msgstr "現正顯示最下面的信件。" + +#: pager.c:1849 pager.c:1871 pager.c:1878 pager.c:1885 +msgid "Top of message is shown." +msgstr "現正顯示最上面的信件。" + +#: pager.c:1954 +msgid "Reverse search: " +msgstr "反向搜尋:" + +#: pager.c:1955 +msgid "Search: " +msgstr "搜尋:" + +#: pager.c:2075 +msgid "Help is currently being shown." +msgstr "現正顯示說明文件。" + +#: pager.c:2104 +msgid "No more quoted text." +msgstr "不能有再多的引言。" + +#: pager.c:2117 +msgid "No more unquoted text after quoted text." +msgstr "在引言後有過多的非引言文字。" + +#: parse.c:597 +msgid "multipart message has no boundary parameter!" +msgstr "多部份郵件沒有分隔的參數!" + +#: pattern.c:238 +#, c-format +msgid "Error in expression: %s" +msgstr "表達式有錯誤:%s" + +#: pattern.c:348 +#, c-format +msgid "Invalid day of month: %s" +msgstr "無效的日子:%s" + +#: pattern.c:362 +#, c-format +msgid "Invalid month: %s" +msgstr "無效的月份:%s" + +#. getDate has its own error message, don't overwrite it here +#: pattern.c:514 +#, c-format +msgid "Invalid relative date: %s" +msgstr "無效的相對日期:%s" + +#: pattern.c:528 +msgid "error in expression" +msgstr "表達式有錯誤" + +#: pattern.c:734 pattern.c:842 +#, c-format +msgid "error in pattern at: %s" +msgstr "在樣式上有錯誤:%s" + +#: pattern.c:782 +#, c-format +msgid "%c: invalid command" +msgstr "%c:無效的指令" + +#: pattern.c:788 +#, c-format +msgid "%c: not supported in this mode" +msgstr "%c:在這個模式不支援" + +#: pattern.c:801 +msgid "missing parameter" +msgstr "錯失參數" + +#: pattern.c:817 +#, c-format +msgid "mismatched parenthesis: %s" +msgstr "不對稱的括弧:%s" + +#: pattern.c:849 +msgid "empty pattern" +msgstr "空的格式" + +#: pattern.c:1051 +#, c-format +msgid "error: unknown op %d (report this error)." +msgstr "錯誤:不明的 op %d (請回報這個錯誤)。" + +#: pattern.c:1120 pattern.c:1251 +msgid "Compiling search pattern..." +msgstr "編譯搜尋樣式中…" + +#: pattern.c:1134 +msgid "Executing command on matching messages..." +msgstr "正在對符合的郵件執行命令…" + +#: pattern.c:1196 +msgid "No messages matched criteria." +msgstr "沒有郵件符合要求。" + +#: pattern.c:1289 +msgid "Search hit bottom without finding match" +msgstr "已搜尋至結尾,並沒有發現任何符合" + +#: pattern.c:1300 +msgid "Search hit top without finding match" +msgstr "已搜尋至開頭,並沒有發現任何符合" + +#: pattern.c:1322 +msgid "Search interrupted." +msgstr "搜尋已被中斷。" + +#: pgp.c:73 +msgid "PGP passphrase forgotten." +msgstr "已忘記 PGP 通行密碼。" + +#: pgp.c:308 +msgid "[-- Error: unable to create PGP subprocess! --]\n" +msgstr "[-- 錯誤:無法建立 PGP 子程序! --]\n" + +#: pgp.c:337 pgp.c:554 pgp.c:755 +msgid "" +"[-- End of PGP output --]\n" +"\n" +msgstr "" +"[-- PGP 輸出部份結束 --]\n" +"\n" + +#: pgp.c:352 +msgid "" +"[-- BEGIN PGP MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP 信件開始 --]\n" +"\n" + +#: pgp.c:354 +msgid "[-- BEGIN PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP 公共鑰匙區段開始 --]\n" + +#: pgp.c:356 +msgid "" +"[-- BEGIN PGP SIGNED MESSAGE --]\n" +"\n" +msgstr "" +"[-- PGP 簽名的信件開始 --]\n" +"\n" + +#: pgp.c:381 +#, fuzzy +msgid "[-- END PGP MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP 信件結束 --]\n" + +#: pgp.c:383 +msgid "[-- END PGP PUBLIC KEY BLOCK --]\n" +msgstr "[-- PGP 公共鑰匙區段結束 --]\n" + +#: pgp.c:385 +#, fuzzy +msgid "[-- END PGP SIGNED MESSAGE --]\n" +msgstr "" +"\n" +"[-- PGP 簽名的信件結束 --]\n" + +#: pgp.c:412 +msgid "" +"[-- Error: could not find beginning of PGP message! --]\n" +"\n" +msgstr "" +"[-- 錯誤:找不到 PGP 信件的開頭! --]\n" +"\n" + +#: pgp.c:662 +#, fuzzy +msgid "Internal error. Inform <roessler@does-not-exist.org>." +msgstr "內部錯誤。聯絡 <rosessler@guug.de>。" + +#: pgp.c:722 +msgid "" +"[-- Error: could not create a PGP subprocess! --]\n" +"\n" +msgstr "" +"[-- 錯誤:無法建立 PGP 子程序! --]\n" +"\n" + +#: pgp.c:821 +msgid "" +"[-- Error: malformed PGP/MIME message! --]\n" +"\n" +msgstr "" +"[-- 錯誤:不正確的 PGP/MIME 信件! --]\n" +"\n" + +#: pgp.c:834 +msgid "[-- Error: could not create temporary file! --]\n" +msgstr "[-- 錯誤:無法建立暫存檔! --]\n" + +#: pgp.c:843 +msgid "" +"[-- The following data is PGP/MIME encrypted --]\n" +"\n" +msgstr "" +"[-- 下面是 PGP/MIME 加密資料 --]\n" +"\n" + +#: pgp.c:863 +#, fuzzy +msgid "[-- End of PGP/MIME encrypted data --]\n" +msgstr "" +"\n" +"[-- PGP/MIME 加密資料結束 --]\n" + +#: pgp.c:913 +msgid "Can't open PGP subprocess!" +msgstr "無法開啟 PGP 子程序!" + +#: pgp.c:1057 +#, c-format +msgid "Use keyID = \"%s\" for %s?" +msgstr "要為 %2$s 使用鑰匙 ID = \"%1$s\"?" + +#: pgp.c:1091 smime.c:654 smime.c:781 +#, c-format +msgid "Enter keyID for %s: " +msgstr "請輸入 %s 的鑰匙 ID:" + +#: pgp.c:1345 +msgid "Can't invoke PGP" +msgstr "不能執行 PGP" + +#: pgpinvoke.c:303 +msgid "Fetching PGP key..." +msgstr "正在拿取 PGP 鑰匙 …" + +#: pgpkey.c:486 +#, fuzzy +msgid "All matching keys are expired, revoked, or disabled." +msgstr "所有符合的鑰匙經已過期或取消。" + +#. __STRCAT_CHECKED__ +#: pgpkey.c:512 smime.c:412 +msgid "Select " +msgstr "選擇 " + +#. __STRCAT_CHECKED__ +#: pgpkey.c:515 +msgid "Check key " +msgstr "檢查鑰匙 " + +#: pgpkey.c:528 +#, c-format +msgid "PGP keys matching <%s>." +msgstr "PGP 鑰匙符合 <%s>。" + +#: pgpkey.c:530 +#, c-format +msgid "PGP keys matching \"%s\"." +msgstr "PGP 鑰匙符合 \"%s\"。" + +#: pgpkey.c:549 pgpkey.c:741 +msgid "Can't open /dev/null" +msgstr "無法開啟 /dev/null" + +#: pgpkey.c:555 pgpkey.c:735 +msgid "Can't create temporary file" +msgstr "無法建立暫存檔" + +#: pgpkey.c:576 +#, c-format +msgid "Key ID: 0x%s" +msgstr "鑰匙 ID:0x%s" + +#: pgpkey.c:596 +msgid "This key can't be used: expired/disabled/revoked." +msgstr "這個鑰匙不能使用:過期/停用/已取消。" + +#: pgpkey.c:608 +#, fuzzy +msgid "ID is expired/disabled/revoked." +msgstr "這個 ID 已過期/停用/取消。" + +#: pgpkey.c:612 +msgid "ID has undefined validity." +msgstr "" + +#: pgpkey.c:615 +#, fuzzy +msgid "ID is not valid." +msgstr "這個 ID 不可接受。" + +#: pgpkey.c:618 +#, fuzzy +msgid "ID is only marginally valid." +msgstr "æ­¤ ID 只是勉強可接受。" + +#: pgpkey.c:622 +#, c-format +msgid "%s Do you really want to use the key?" +msgstr "%s 您真的要使用這個鑰匙?" + +#: pgpkey.c:720 +msgid "Please enter the key ID: " +msgstr "請輸入這把鑰匙的 ID:" + +#: pgpkey.c:748 +msgid "Invoking pgp..." +msgstr "啟動 pgp…" + +#: pgpkey.c:773 +#, c-format +msgid "PGP Key %s." +msgstr "PGP 鑰匙 %s。" + +#: pgpkey.c:835 pgpkey.c:951 +#, c-format +msgid "Looking for keys matching \"%s\"..." +msgstr "正找尋匹配 \"%s\" 的鑰匙…" + +#: pop.c:86 pop_lib.c:197 +msgid "Command TOP is not supported by server." +msgstr "伺服器不支援 TOP 指令。" + +#: pop.c:113 +msgid "Can't write header to temporary file!" +msgstr "無法把標頭寫到暫存檔!" + +#: pop.c:194 pop_lib.c:199 +msgid "Command UIDL is not supported by server." +msgstr "伺服器不支援 UIDL 指令。" + +#: pop.c:243 pop.c:558 +#, c-format +msgid "%s is an invalid POP path" +msgstr "" + +#: pop.c:274 +msgid "Fetching list of messages..." +msgstr "正在拿取信件…" + +#: pop.c:411 +msgid "Can't write message to temporary file!" +msgstr "無法把信件寫到暫存檔!" + +#: pop.c:513 pop.c:578 +msgid "Checking for new messages..." +msgstr "看看有沒有新信件…" + +#: pop.c:542 +msgid "POP host is not defined." +msgstr "POP 主機沒有被定義。" + +#: pop.c:606 +msgid "No new mail in POP mailbox." +msgstr "POP 信箱中沒有新的信件" + +#: pop.c:613 +msgid "Delete messages from server?" +msgstr "刪除伺服器上的信件嗎?" + +#: pop.c:615 +#, c-format +msgid "Reading new messages (%d bytes)..." +msgstr "讀取新信件中 (%d 個位元組)…" + +#: pop.c:657 +msgid "Error while writing mailbox!" +msgstr "寫入信箱時發生錯誤!" + +#: pop.c:661 +#, c-format +msgid "%s [%d of %d messages read]" +msgstr "%s [已閱讀 %2d 封信件中的 %1d 封]" + +#: pop.c:684 pop_lib.c:356 +msgid "Server closed connection!" +msgstr "與伺服器的聯結中斷了!" + +#: pop_auth.c:89 +msgid "Authenticating (SASL)..." +msgstr "驗證中 (SASL)…" + +#: pop_auth.c:205 +msgid "Authenticating (APOP)..." +msgstr "驗證中 (APOP)…" + +#: pop_auth.c:229 +msgid "APOP authentication failed." +msgstr "APOP 驗證失敗。" + +#: pop_auth.c:264 +msgid "Command USER is not supported by server." +msgstr "伺服器不支援 USER 指令。" + +#: pop_lib.c:195 +msgid "Unable to leave messages on server." +msgstr "無法把信件留在伺服器上。" + +#: pop_lib.c:225 +#, c-format +msgid "Error connecting to server: %s" +msgstr "連線到 %s 時失敗" + +#: pop_lib.c:370 +msgid "Closing connection to POP server..." +msgstr "正在關閉與 POP 伺服器的連線…" + +#: pop_lib.c:536 +msgid "Verifying message indexes..." +msgstr "正在檢查信件的指引 …" + +#: pop_lib.c:560 +msgid "Connection lost. Reconnect to POP server?" +msgstr "連線中斷。再與 POP 伺服器連線嗎?" + +#: postpone.c:163 +msgid "Postponed Messages" +msgstr "信件已經被延遲寄出" + +#: postpone.c:243 postpone.c:252 +msgid "No postponed messages." +msgstr "沒有被延遲寄出的信件。" + +#: postpone.c:438 postpone.c:459 postpone.c:488 +msgid "Illegal PGP header" +msgstr "不合規定的 PGP 標頭" + +#: postpone.c:479 +#, fuzzy +msgid "Illegal S/MIME header" +msgstr "不合規定的 PGP 標頭" + +#: postpone.c:554 +#, fuzzy +msgid "Decryption failed." +msgstr "登入失敗。" + +#: query.c:46 +msgid "New Query" +msgstr "新的查詢" + +#: query.c:47 +msgid "Make Alias" +msgstr "製作別名" + +#: query.c:48 +msgid "Search" +msgstr "搜尋" + +#: query.c:95 +msgid "Waiting for response..." +msgstr "等待回應中…" + +#: query.c:231 query.c:259 +msgid "Query command not defined." +msgstr "查詢指令尚未定義。" + +#: query.c:286 +msgid "Query" +msgstr "查詢" + +#. Prompt for Query +#: query.c:299 query.c:324 +msgid "Query: " +msgstr "查詢:" + +#: query.c:307 query.c:333 +#, c-format +msgid "Query '%s'" +msgstr "查詢 '%s'" + +#: recvattach.c:52 +msgid "Pipe" +msgstr "管線" + +#: recvattach.c:53 +msgid "Print" +msgstr "顯示" + +#: recvattach.c:431 +msgid "Saving..." +msgstr "儲存中…" + +#: recvattach.c:434 recvattach.c:523 +msgid "Attachment saved." +msgstr "附件已被儲存。" + +#: recvattach.c:535 +#, c-format +msgid "WARNING! You are about to overwrite %s, continue?" +msgstr "警告! 您正在覆蓋 %s, 是否要繼續?" + +#: recvattach.c:553 +msgid "Attachment filtered." +msgstr "附件被過濾掉。" + +#: recvattach.c:620 +msgid "Filter through: " +msgstr "經過過濾:" + +#: recvattach.c:620 +msgid "Pipe to: " +msgstr "導引至:" + +#: recvattach.c:655 +#, c-format +msgid "I dont know how to print %s attachments!" +msgstr "我不知道要怎麼列印 %s 附件!" + +#: recvattach.c:720 +msgid "Print tagged attachment(s)?" +msgstr "是否要列印標記起來的附件?" + +#: recvattach.c:720 +msgid "Print attachment?" +msgstr "是否要列印附件?" + +#: recvattach.c:938 +#, fuzzy +msgid "Can't decrypt encrypted message!" +msgstr "找不到已標記的訊息" + +#: recvattach.c:951 +msgid "Attachments" +msgstr "附件" + +#: recvattach.c:987 +msgid "There are no subparts to show!" +msgstr "沒有部件!" + +#: recvattach.c:1048 +msgid "Can't delete attachment from POP server." +msgstr "無法從 POP 伺服器刪除附件。" + +#: recvattach.c:1056 +#, fuzzy +msgid "Deletion of attachments from encrypted messages is unsupported." +msgstr "未支援刪除 PGP 信件所附帶的附件。" + +#: recvattach.c:1075 recvattach.c:1092 +msgid "Only deletion of multipart attachments is supported." +msgstr "只支援刪除多重附件" + +#: recvcmd.c:43 +msgid "You may only bounce message/rfc822 parts." +msgstr "您只能直接傳送 message/rfc822 的部分。" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing message!" +msgstr "寄信途中發生錯誤。" + +#: recvcmd.c:213 +#, fuzzy +msgid "Error bouncing messages!" +msgstr "寄信途中發生錯誤。" + +#: recvcmd.c:413 +#, c-format +msgid "Can't open temporary file %s." +msgstr "無法開啟暫存檔 %s" + +#: recvcmd.c:444 +msgid "Forward as attachments?" +msgstr "利用附件形式來轉寄?" + +#: recvcmd.c:458 +msgid "Can't decode all tagged attachments. MIME-forward the others?" +msgstr "未能把所有已標簽的附件解碼。要用 MIME 轉寄其它的嗎?" + +#: recvcmd.c:583 +msgid "Forward MIME encapsulated?" +msgstr "用 MIME 的方式來轉寄?" + +#: recvcmd.c:591 recvcmd.c:841 +#, c-format +msgid "Can't create %s." +msgstr "無法建立 %s." + +#: recvcmd.c:724 +msgid "Can't find any tagged messages." +msgstr "找不到已標記的訊息" + +#: recvcmd.c:745 send.c:707 +msgid "No mailing lists found!" +msgstr "沒有找到郵寄論壇!" + +#: recvcmd.c:820 +msgid "Can't decode all tagged attachments. MIME-encapsulate the others?" +msgstr "未能把所有已標簽的附件解碼。要用 MIME 包封其它的嗎?" + +#: remailer.c:480 +msgid "Append" +msgstr "加上" + +#: remailer.c:481 +msgid "Insert" +msgstr "加入" + +#: remailer.c:482 +msgid "Delete" +msgstr "刪除" + +#: remailer.c:484 +msgid "OK" +msgstr "OK" + +#: remailer.c:512 +msgid "Can't get mixmaster's type2.list!" +msgstr "拿不到 mixmaster 的 type2.list!" + +#: remailer.c:538 +msgid "Select a remailer chain." +msgstr "選擇一個郵件轉接器的鏈結" + +#: remailer.c:598 +#, c-format +msgid "Error: %s can't be used as the final remailer of a chain." +msgstr "錯誤:%s 不能用作鏈結的最後一個郵件轉接器" + +#: remailer.c:628 +#, c-format +msgid "Mixmaster chains are limited to %d elements." +msgstr "Mixmaster 鏈結最多為 %d 個元件" + +#: remailer.c:651 +msgid "The remailer chain is already empty." +msgstr "郵件轉接器的鏈結已沒有東西了。" + +#: remailer.c:661 +msgid "You already have the first chain element selected." +msgstr "你已經選擇了鏈結的第一個元件。" + +#: remailer.c:671 +msgid "You already have the last chain element selected." +msgstr "你已經選擇了鏈結的最後一個元件。" + +#: remailer.c:710 +msgid "Mixmaster doesn't accept Cc or Bcc headers." +msgstr "Mixmaster 不接受 Cc 和 Bcc 的標頭。" + +#: remailer.c:734 +msgid "" +"Please set the hostname variable to a proper value when using mixmaster!" +msgstr "使用 mixmaster 時請先設定好 hostname 變數!" + +#: remailer.c:768 +#, c-format +msgid "Error sending message, child exited %d.\n" +msgstr "寄送訊息時出現錯誤,子程序結束 %d。\n" + +#: remailer.c:772 +msgid "Error sending message." +msgstr "寄信途中發生錯誤。" + +#: rfc1524.c:159 +#, c-format +msgid "Improperly formated entry for type %s in \"%s\" line %d" +msgstr "在 \"%2$s\" 的第 %3$d 行發現類別 %1$s 為錯誤的格式紀錄" + +#: rfc1524.c:391 +msgid "No mailcap path specified" +msgstr "沒有指定 mailcap 路徑" + +#: rfc1524.c:419 +#, c-format +msgid "mailcap entry for type %s not found" +msgstr "沒有發現類型 %s 的 mailcap 紀錄" + +#: score.c:71 +msgid "score: too few arguments" +msgstr "分數:太少的引數" + +#: score.c:80 +msgid "score: too many arguments" +msgstr "分數:太多的引數" + +#: send.c:247 +msgid "No subject, abort?" +msgstr "沒有標題,要不要中斷?" + +#: send.c:249 +msgid "No subject, aborting." +msgstr "沒有標題,正在中斷中。" + +#. There are quite a few mailing lists which set the Reply-To: +#. * header field to the list address, which makes it quite impossible +#. * to send a message to only the sender of the message. This +#. * provides a way to do that. +#. +#: send.c:483 +#, c-format +msgid "Reply to %s%s?" +msgstr "要回覆給 %s%s?" + +#: send.c:517 +#, c-format +msgid "Follow-up to %s%s?" +msgstr "以後的回覆都寄至 %s%s?" + +#. This could happen if the user tagged some messages and then did +#. * a limit such that none of the tagged message are visible. +#. +#: send.c:682 +msgid "No tagged messages are visible!" +msgstr "沒有被標記了的信件在顯示!" + +#: send.c:733 +msgid "Include message in reply?" +msgstr "回信時是否要包含原本的信件內容?" + +#: send.c:738 +msgid "Including quoted message..." +msgstr "正引入引言部分…" + +#: send.c:748 +msgid "Could not include all requested messages!" +msgstr "無法包含所有要求的信件!" + +#: send.c:762 +msgid "Forward as attachment?" +msgstr "利用附件形式來轉寄?" + +#: send.c:766 +msgid "Preparing forwarded message..." +msgstr "準備轉寄信件…" + +#. If the user is composing a new message, check to see if there +#. * are any postponed messages first. +#. +#: send.c:1062 +msgid "Recall postponed message?" +msgstr "要叫出被延遲的信件?" + +#: send.c:1336 +#, fuzzy +msgid "Edit forwarded message?" +msgstr "準備轉寄信件…" + +#: send.c:1359 +msgid "Abort unmodified message?" +msgstr "是否要中斷未修改過的信件?" + +#: send.c:1361 +msgid "Aborted unmodified message." +msgstr "中斷沒有修改過的信件" + +#. abort +#: send.c:1403 +msgid "Mail not sent." +msgstr "信件沒有寄出。" + +#: send.c:1430 +msgid "Message postponed." +msgstr "信件被延遲寄出。" + +#: send.c:1439 +msgid "No recipients are specified!" +msgstr "沒有指定接受者!" + +#: send.c:1444 +msgid "No recipients were specified." +msgstr "沒有指定接受者。" + +#: send.c:1460 +msgid "No subject, abort sending?" +msgstr "沒有信件標題,要中斷寄信的工作?" + +#: send.c:1464 +msgid "No subject specified." +msgstr "沒有指定標題。" + +#: send.c:1526 +msgid "Sending message..." +msgstr "正在寄出信件…" + +#: send.c:1667 +msgid "Could not send the message." +msgstr "無法寄出信件。" + +#: send.c:1672 +msgid "Mail sent." +msgstr "信件已經寄出。" + +#: send.c:1672 +msgid "Sending in background." +msgstr "正在背景作業中傳送。" + +#: sendlib.c:464 +msgid "No boundary parameter found! [report this error]" +msgstr "沒有發現分界變數![回報錯誤]" + +#: sendlib.c:494 +#, c-format +msgid "%s no longer exists!" +msgstr "%s 已經不存在!" + +#: sendlib.c:916 +#, fuzzy, c-format +msgid "%s isn't a regular file." +msgstr "%s 不是信箱。" + +#: sendlib.c:1085 +#, c-format +msgid "Could not open %s" +msgstr "無法開啟 %s" + +#: sendlib.c:2053 +#, c-format +msgid "Error sending message, child exited %d (%s)." +msgstr "寄送訊息出現錯誤,子程序已結束 %d (%s)。" + +#: sendlib.c:2059 +msgid "Output of the delivery process" +msgstr "Delivery process 的輸出" + +#: sendlib.c:2263 +#, c-format +msgid "Bad IDN %s while preparing resent-from." +msgstr "" + +#: signal.c:39 +#, c-format +msgid "%s... Exiting.\n" +msgstr "%s… 正在離開。\n" + +#: signal.c:42 signal.c:45 +#, c-format +msgid "Caught %s... Exiting.\n" +msgstr "捕抓到 %s… 正在離開。\n" + +#: signal.c:47 +#, c-format +msgid "Caught signal %d... Exiting.\n" +msgstr "捕抓到 signal %d… 正在離開.\n" + +#: smime.c:300 +msgid "Trusted " +msgstr "" + +#: smime.c:303 +msgid "Verified " +msgstr "" + +#: smime.c:306 +msgid "Unverified" +msgstr "" + +#: smime.c:309 +#, fuzzy +msgid "Expired " +msgstr "離開 " + +#: smime.c:312 +msgid "Revoked " +msgstr "" + +#: smime.c:315 +#, fuzzy +msgid "Invalid " +msgstr "無效的月份:%s" + +#: smime.c:318 +#, fuzzy +msgid "Unknown " +msgstr "不清楚" + +#: smime.c:347 +#, fuzzy +msgid "Enter keyID: " +msgstr "請輸入 %s 的鑰匙 ID:" + +#: smime.c:370 +#, fuzzy, c-format +msgid "S/MIME certificates matching \"%s\"." +msgstr "PGP 鑰匙符合 \"%s\"。" + +#: smime.c:519 smime.c:588 smime.c:609 +#, c-format +msgid "ID %s is unverified. Do you want to use it for %s ?" +msgstr "" + +#: smime.c:523 smime.c:592 +#, fuzzy, c-format +msgid "Use (untrusted!) ID %s for %s ?" +msgstr "要為 %2$s 使用鑰匙 ID = \"%1$s\"?" + +#: smime.c:526 smime.c:595 +#, fuzzy, c-format +msgid "Use ID %s for %s ?" +msgstr "要為 %2$s 使用鑰匙 ID = \"%1$s\"?" + +#: smime.c:621 +#, c-format +msgid "Warning: You have not yet decided to trust ID %s. (any key to continue)" +msgstr "" + +#: smime.c:787 +#, c-format +msgid "No (valid) certificate found for %s." +msgstr "" + +#: smime.c:842 smime.c:870 smime.c:935 smime.c:979 smime.c:1044 smime.c:1119 +#, fuzzy +msgid "Error: unable to create OpenSSL subprocess!" +msgstr "[-- 錯誤:無法建立 PGP 子程序! --]\n" + +#: smime.c:1197 +#, fuzzy +msgid "no certfile" +msgstr "無法建立過濾器" + +#: smime.c:1200 +#, fuzzy +msgid "no mbox" +msgstr "(沒有信箱)" + +#. fatal error while trying to encrypt message +#: smime.c:1343 +msgid "No output from OpenSSL.." +msgstr "" + +#: smime.c:1381 +#, fuzzy +msgid "Warning: Intermediate certificate not found." +msgstr "警告:未能儲存驗証" + +#: smime.c:1426 +#, fuzzy +msgid "Can't open OpenSSL subprocess!" +msgstr "無法開啟 PGP 子程序!" + +#: smime.c:1464 +msgid "No output from OpenSSL..." +msgstr "" + +#: smime.c:1629 smime.c:1751 +#, fuzzy +msgid "" +"[-- End of OpenSSL output --]\n" +"\n" +msgstr "" +"[-- PGP 輸出部份結束 --]\n" +"\n" + +#: smime.c:1712 smime.c:1722 +#, fuzzy +msgid "[-- Error: unable to create OpenSSL subprocess! --]\n" +msgstr "[-- 錯誤:無法建立 PGP 子程序! --]\n" + +#: smime.c:1755 +#, fuzzy +msgid "[-- The following data is S/MIME encrypted --]\n" +msgstr "" +"[-- 下面是 PGP/MIME 加密資料 --]\n" +"\n" + +#: smime.c:1758 +#, fuzzy +msgid "[-- The following data is S/MIME signed --]\n" +msgstr "" +"[-- 以下的資料已被簽署 --]\n" +"\n" + +#: smime.c:1822 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME encrypted data. --]\n" +msgstr "" +"\n" +"[-- PGP/MIME 加密資料結束 --]\n" + +#: smime.c:1824 +#, fuzzy +msgid "" +"\n" +"[-- End of S/MIME signed data. --]\n" +msgstr "" +"\n" +"[-- 簽署的資料結束 --]\n" + +#: sort.c:202 +msgid "Sorting mailbox..." +msgstr "信箱排序中…" + +#: sort.c:239 +msgid "Could not find sorting function! [report this bug]" +msgstr "找不到排序的功能![請回報這個問題]" + +#: status.c:102 +msgid "(no mailbox)" +msgstr "(沒有信箱)" + +#: thread.c:1081 +#, fuzzy +msgid "Parent message is not visible in this limited view." +msgstr "在限制閱覽模式下無法顯示主信件。" + +#: thread.c:1087 +msgid "Parent message is not available." +msgstr "主信件不存在。" + +#, fuzzy +#~ msgid "Invoking OpenSSL..." +#~ msgstr "啟動 pgp…" + +#~ msgid "Bounce message to %s...?" +#~ msgstr "把郵件直接傳送至 %s…?" + +#~ msgid "Bounce messages to %s...?" +#~ msgstr "把郵件直接傳送至 %s…?" + +#, fuzzy +#~ msgid "ewsabf" +#~ msgstr "12345" + +#, fuzzy +#~ msgid "Certificate *NOT* added." +#~ msgstr "驗証已儲存" + +#~ msgid "This ID's validity level is undefined." +#~ msgstr "這個 ID 的可接受程度不明。" + +#~ msgid "Decode-save" +#~ msgstr "解碼並儲存" + +#~ msgid "Decode-copy" +#~ msgstr "解碼並拷貝" + +#~ msgid "Decrypt-save" +#~ msgstr "解密並儲存" + +#~ msgid "Decrypt-copy" +#~ msgstr "解密並拷貝" + +#~ msgid "Copy" +#~ msgstr "拷貝" + +#~ msgid "%s [%s]\n" +#~ msgstr "%s 【%s】\n" + +#~ msgid "" +#~ "\n" +#~ "[-- End of PGP output --]\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "[-- PGP 輸出的資料結束 --]\n" +#~ "\n" + +#, fuzzy +#~ msgid "Can't stat %s." +#~ msgstr "無法讀取:%s" + +#~ msgid "MIC algorithm: " +#~ msgstr "MIC 演算法:" + +#~ msgid "This doesn't make sense if you don't want to sign the message." +#~ msgstr "如果您不想把信件簽名,這樣做就沒有什麼意思啦。" + +#~ msgid "Unknown MIC algorithm, valid ones are: pgp-md5, pgp-sha1, pgp-rmd160" +#~ msgstr "不明的 MIC 演算法。有效的如下: pgp-md5, pgp-sha1, pgp-rmd160" + +#~ msgid "%s: no such command" +#~ msgstr "%s:無此指令" + +#~ msgid "Authentication method is unknown." +#~ msgstr "不明的驗證方法。" + +#~ msgid "" +#~ "\n" +#~ "SHA1 implementation Copyright (C) 1995-1997 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " Redistribution and use in source and binary forms, with or without\n" +#~ " modification, are permitted under certain conditions.\n" +#~ "\n" +#~ " The SHA1 implementation comes AS IS, and ANY EXPRESS OR IMPLIED\n" +#~ " WARRANTIES, including, but not limited to, the implied warranties of\n" +#~ " merchantability and fitness for a particular purpose ARE DISCLAIMED.\n" +#~ "\n" +#~ " You should have received a copy of the full distribution terms\n" +#~ " along with this program; if not, write to the program's developers.\n" +#~ msgstr "" +#~ "\n" +#~ "SHA1 implementation 版權所有 (C) 1995-7 Eric A. Young <eay@cryptsoft." +#~ "com>\n" +#~ "\n" +#~ " 重複散布並使用原始程式碼和編譯過的程式碼,不管有否經過修改,\n" +#~ " 在某些條件下是許可的。\n" +#~ "\n" +#~ " SHA1 程序不附帶任何擔保,不論係明示還是暗示,包括但不限於銷售性\n" +#~ " 和適於特定目的之暗示擔保。\n" +#~ "\n" +#~ " 您應該收到一份此應用程式的完整的散布條文;如果沒有,請寫信給\n" +#~ " 應用程式的開發人員.\n" + +#~ msgid "POP Username: " +#~ msgstr "POP 用戶名稱:" + +#~ msgid "Reading new message (%d bytes)..." +#~ msgstr "讀取新信件中 (%d 歌位元組)…" + +#~ msgid "Error reading message!" +#~ msgstr "讀取信件時發生錯誤!" + +#~ msgid "%s [%d message read]" +#~ msgstr "%s [已閱讀 %d 封信件]" + +#~ msgid "Creating mailboxes is not yet supported." +#~ msgstr "未支援製造郵箱。" + +#~ msgid "We can't currently handle utf-8 at this point." +#~ msgstr "我們還未能處理 utf-8。" + +#~ msgid "Can't open %s: %s." +#~ msgstr "無法開啟 %s:%s." + +#~ msgid "Error while recoding %s. Leave it unchanged." +#~ msgstr "當轉換編碼 %s 時發生錯誤,因此不會做任何改變。" + +#~ msgid "Error while recoding %s. See %s for recovering your data." +#~ msgstr "當轉換編碼 %s 發生錯誤。看 %s 來修復你的資料。" + +#~ msgid "Can't change character set for non-text attachments!" +#~ msgstr "非文字的附件是不能改變字符集的!" + +#~ msgid "Enter character set: " +#~ msgstr "請輸入字符集:" + +#~ msgid "UTF-8 encoding attachments has not yet been implemented." +#~ msgstr "還未支援 UTF-8 編碼的附件。" + +#~ msgid "Compose" +#~ msgstr "寫信" + +#~ msgid "We currently can't encode to utf-8." +#~ msgstr "我們現在還未能重新編碼至 utf-8。" + +#~ msgid "Recoding successful." +#~ msgstr "重新編碼成功。" + +#~ msgid "[-- Error: unexpected end of file! --]\n" +#~ msgstr "[-- 錯誤:突發的檔尾! --]\n" + +#~ msgid "CRAM key for %s@%s: " +#~ msgstr "%s@%s 的 CRAM 鑰匙" + +#~ msgid "Skipping CRAM-MD5 authentication." +#~ msgstr "掠過 CRAM-MD5 驗證" + +#~ msgid "Reopening mailbox... %s" +#~ msgstr "重新開啟信箱中… %s" + +#~ msgid "Closing mailbox..." +#~ msgstr "關閉信箱中…" + +#~ msgid "Sending APPEND command ..." +#~ msgstr "正在送出 APPEND 命令…" + +#~ msgid "change an attachment's character set" +#~ msgstr "改變附件的字符集" + +#~ msgid "recode this attachment to/from the local charset" +#~ msgstr "重新將附件編碼至本地字符集,或由本地字符集重新編碼" + +#~ msgid "%d kept." +#~ msgstr "%d 保留了。" + +#~ msgid "POP Password: " +#~ msgstr "POP 密碼:" + +#~ msgid "No POP username is defined." +#~ msgstr "沒有被定義的 POP 使用者名稱。" + +#~ msgid "Attachment saved" +#~ msgstr "附件已被儲存。" + +#~ msgid "move to the last undelete message" +#~ msgstr "移動到最後一封未刪除的信件" + +#~ msgid "return to the main-menu" +#~ msgstr "回到主選單" + +#~ msgid "ignoring empty header field: %s" +#~ msgstr "不理會空的標頭欄位:%s" + +#, fuzzy +#~ msgid "Recoding only affetcs text attachments." +#~ msgstr "只重新編碼受影響的文字附件" + +#, fuzzy +#~ msgid "display message with full headers" +#~ msgstr "編輯信件的標頭" + +#, fuzzy +#~ msgid "PGP keys matching " +#~ msgstr "PGP 鑰匙符合 <%s>。" + +#, fuzzy +#~ msgid "This operation is not currently supported for PGP messages." +#~ msgstr "暫不支援瀏覽 IMAP 目錄" + +#~ msgid "imap_error(): unexpected response in %s: %s\n" +#~ msgstr "imap_error():%s 的意外回應:%s\n" + +#~ msgid "Can't open your secret key ring!" +#~ msgstr "無法開啟您的祕密鑰匙環!" + +#~ msgid "An unkown PGP version was defined for signing." +#~ msgstr "定義了一個不明的 PGP 版本來簽名" + +#~ msgid "===== Attachments =====" +#~ msgstr "===== 附件 =====" + +#~ msgid "Sending CREATE command ..." +#~ msgstr "正在送出 CREATE 命令…" + +#~ msgid "Unknown PGP version \"%s\"." +#~ msgstr "不明的 PGP 版本 \"%s\"。" + +#~ msgid "" +#~ "[-- Error: this message does not comply with the PGP/MIME specification! " +#~ "--]\n" +#~ "\n" +#~ msgstr "" +#~ "[-- 錯誤:這封信件不符合 PGP/MIME 的規格! --]\n" +#~ "\n" + +#~ msgid "reserved" +#~ msgstr "保留的" + +#~ msgid "Encrypted Session Key" +#~ msgstr "加密的鑰匙" + +#~ msgid "Signature Packet" +#~ msgstr "簽名封包" + +#~ msgid "Conventionally Encrypted Session Key Packet" +#~ msgstr "一般加密鑰匙封包" + +#~ msgid "One-Pass Signature Packet" +#~ msgstr "單一通道的簽名封包" + +#~ msgid "Secret Key Packet" +#~ msgstr "秘密鑰匙封包" + +#~ msgid "Public Key Packet" +#~ msgstr "公共鑰匙封包" + +#~ msgid "Secret Subkey Packet" +#~ msgstr "秘密次鑰匙封包" + +#~ msgid "Compressed Data Packet" +#~ msgstr "壓縮資料封包" + +#~ msgid "Symmetrically Encrypted Data Packet" +#~ msgstr "對稱加密資料封包" + +#~ msgid "Marker Packet" +#~ msgstr "記號封包" + +#~ msgid "Literal Data Packet" +#~ msgstr "文字資料封包" + +#~ msgid "Trust Packet" +#~ msgstr "被信托封包" + +#~ msgid "Name Packet" +#~ msgstr "名稱封包" + +#~ msgid "Subkey Packet" +#~ msgstr "次鑰匙 (subkey) 封包" + +#~ msgid "Reserved" +#~ msgstr "保留的" + +#~ msgid "Comment Packet" +#~ msgstr "注解封包" + +#~ msgid "Message edited. Really send?" +#~ msgstr "信件已經編輯過。確定要寄出?" + +#~ msgid "Saved output of child process to %s.\n" +#~ msgstr "輸出子程序儲存至 %s.\n" diff --git a/pop.c b/pop.c new file mode 100644 index 0000000..8492ac2 --- /dev/null +++ b/pop.c @@ -0,0 +1,687 @@ +/* + * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mx.h" +#include "pop.h" +#include "mutt_crypt.h" + +#include <string.h> +#include <unistd.h> + +/* write line to file */ +static int fetch_message (char *line, void *file) +{ + FILE *f = (FILE *) file; + + fputs (line, f); + if (fputc ('\n', f) == EOF) + return -1; + + return 0; +} + +/* + * Read header + * returns: + * 0 on success + * -1 - conection lost, + * -2 - invalid command or execution error, + * -3 - error writing to tempfile + */ +static int pop_read_header (POP_DATA *pop_data, HEADER *h) +{ + FILE *f; + int ret, index; + long length; + char buf[LONG_STRING]; + char tempfile[_POSIX_PATH_MAX]; + + mutt_mktemp (tempfile); + if (!(f = safe_fopen (tempfile, "w+"))) + { + mutt_perror (tempfile); + return -3; + } + + snprintf (buf, sizeof (buf), "LIST %d\r\n", h->refno); + ret = pop_query (pop_data, buf, sizeof (buf)); + if (ret == 0) + { + sscanf (buf, "+OK %d %ld", &index, &length); + + snprintf (buf, sizeof (buf), "TOP %d 0\r\n", h->refno); + ret = pop_fetch_data (pop_data, buf, NULL, fetch_message, f); + + if (pop_data->cmd_top == 2) + { + if (ret == 0) + { + pop_data->cmd_top = 1; + + dprint (1, (debugfile, "pop_read_header: set TOP capability\n")); + } + + if (ret == -2) + { + pop_data->cmd_top = 0; + + dprint (1, (debugfile, "pop_read_header: unset TOP capability\n")); + snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), + _("Command TOP is not supported by server.")); + } + } + } + + switch (ret) + { + case 0: + { + rewind (f); + h->env = mutt_read_rfc822_header (f, h, 0, 0); + h->content->length = length - h->content->offset + 1; + rewind (f); + while (!feof (f)) + { + h->content->length--; + fgets (buf, sizeof (buf), f); + } + break; + } + case -2: + { + mutt_error ("%s", pop_data->err_msg); + break; + } + case -3: + { + mutt_error _("Can't write header to temporary file!"); + break; + } + } + + fclose (f); + unlink (tempfile); + return ret; +} + +/* parse UIDL */ +static int fetch_uidl (char *line, void *data) +{ + int i, index; + CONTEXT *ctx = (CONTEXT *)data; + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + sscanf (line, "%d %s", &index, line); + for (i = 0; i < ctx->msgcount; i++) + if (!mutt_strcmp (line, ctx->hdrs[i]->data)) + break; + + if (i == ctx->msgcount) + { + dprint (1, (debugfile, "pop_fetch_headers: new header %d %s\n", index, line)); + + if (i >= ctx->hdrmax) + mx_alloc_memory(ctx); + + ctx->msgcount++; + ctx->hdrs[i] = mutt_new_header (); + ctx->hdrs[i]->data = safe_strdup (line); + } + else if (ctx->hdrs[i]->index != index - 1) + pop_data->clear_cache = 1; + + ctx->hdrs[i]->refno = index; + ctx->hdrs[i]->index = index - 1; + + return 0; +} + +/* + * Read headers + * returns: + * 0 on success + * -1 - conection lost, + * -2 - invalid command or execution error, + * -3 - error writing to tempfile + */ +static int pop_fetch_headers (CONTEXT *ctx) +{ + int i, ret, old_count, new_count; + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + time (&pop_data->check_time); + pop_data->clear_cache = 0; + + for (i = 0; i < ctx->msgcount; i++) + ctx->hdrs[i]->refno = -1; + + old_count = ctx->msgcount; + ret = pop_fetch_data (pop_data, "UIDL\r\n", NULL, fetch_uidl, ctx); + new_count = ctx->msgcount; + ctx->msgcount = old_count; + + if (pop_data->cmd_uidl == 2) + { + if (ret == 0) + { + pop_data->cmd_uidl = 1; + + dprint (1, (debugfile, "pop_fetch_headers: set UIDL capability\n")); + } + + if (ret == -2 && pop_data->cmd_uidl == 2) + { + pop_data->cmd_uidl = 0; + + dprint (1, (debugfile, "pop_fetch_headers: unset UIDL capability\n")); + snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), + _("Command UIDL is not supported by server.")); + } + } + + if (ret == 0) + { + for (i = 0; i < old_count; i++) + if (ctx->hdrs[i]->refno == -1) + ctx->hdrs[i]->deleted = 1; + + for (i = old_count; i < new_count; i++) + { + mutt_message (_("Fetching message headers... [%d/%d]"), + i + 1 - old_count, new_count - old_count); + + ret = pop_read_header (pop_data, ctx->hdrs[i]); + if (ret < 0) + break; + + ctx->msgcount++; + } + + if (i > old_count) + mx_update_context (ctx, i - old_count); + } + + if (ret < 0) + { + for (i = ctx->msgcount; i < new_count; i++) + mutt_free_header (&ctx->hdrs[i]); + return ret; + } + + mutt_clear_error (); + return (new_count - old_count); +} + +/* open POP mailbox - fetch only headers */ +int pop_open_mailbox (CONTEXT *ctx) +{ + int ret; + char buf[LONG_STRING]; + CONNECTION *conn; + ACCOUNT acct; + POP_DATA *pop_data; + ciss_url_t url; + + if (pop_parse_path (ctx->path, &acct)) + { + mutt_error (_("%s is an invalid POP path"), ctx->path); + mutt_sleep (2); + return -1; + } + + mutt_account_tourl (&acct, &url); + url.path = NULL; + url_ciss_tostring (&url, buf, sizeof (buf), 0); + conn = mutt_conn_find (NULL, &acct); + if (!conn) + return -1; + + FREE (&ctx->path); + ctx->path = safe_strdup (buf); + + pop_data = safe_calloc (1, sizeof (POP_DATA)); + pop_data->conn = conn; + ctx->data = pop_data; + + if (pop_open_connection (pop_data) < 0) + return -1; + + conn->data = pop_data; + + FOREVER + { + if (pop_reconnect (ctx) < 0) + return -1; + + ctx->size = pop_data->size; + + mutt_message _("Fetching list of messages..."); + + ret = pop_fetch_headers (ctx); + + if (ret >= 0) + return 0; + + if (ret < -1) + { + mutt_sleep (2); + return -1; + } + } +} + +/* delete all cached messages */ +static void pop_clear_cache (POP_DATA *pop_data) +{ + int i; + + if (!pop_data->clear_cache) + return; + + dprint (1, (debugfile, "pop_clear_cache: delete cached messages\n")); + + for (i = 0; i < POP_CACHE_LEN; i++) + { + if (pop_data->cache[i].path) + { + unlink (pop_data->cache[i].path); + FREE (&pop_data->cache[i].path); + } + } +} + +/* close POP mailbox */ +void pop_close_mailbox (CONTEXT *ctx) +{ + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + if (!pop_data) + return; + + pop_logout (ctx); + + if (pop_data->status != POP_NONE) + mutt_socket_close (pop_data->conn); + + pop_data->status = POP_NONE; + + pop_data->clear_cache = 1; + pop_clear_cache (pop_data); + + if (!pop_data->conn->data) + mutt_socket_free (pop_data->conn); + + return; +} + +/* fetch message from POP server */ +int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno) +{ + int ret; + void *uidl; + char buf[LONG_STRING]; + char path[_POSIX_PATH_MAX]; + char *m = _("Fetching message..."); + POP_DATA *pop_data = (POP_DATA *)ctx->data; + POP_CACHE *cache; + HEADER *h = ctx->hdrs[msgno]; + + /* see if we already have the message in our cache */ + cache = &pop_data->cache[h->index % POP_CACHE_LEN]; + + if (cache->path) + { + if (cache->index == h->index) + { + /* yes, so just return a pointer to the message */ + msg->fp = fopen (cache->path, "r"); + if (msg->fp) + return 0; + + mutt_perror (cache->path); + mutt_sleep (2); + return -1; + } + else + { + /* clear the previous entry */ + unlink (cache->path); + FREE (&cache->path); + } + } + + FOREVER + { + if (pop_reconnect (ctx) < 0) + return -1; + + /* verify that massage index is correct */ + if (h->refno < 0) + { + mutt_error _("The message index is incorrect. Try reopening the mailbox."); + mutt_sleep (2); + return -1; + } + + mutt_message (m); + + mutt_mktemp (path); + msg->fp = safe_fopen (path, "w+"); + if (!msg->fp) + { + mutt_perror (path); + mutt_sleep (2); + return -1; + } + + snprintf (buf, sizeof (buf), "RETR %d\r\n", h->refno); + + ret = pop_fetch_data (pop_data, buf, m, fetch_message, msg->fp); + if (ret == 0) + break; + + safe_fclose (&msg->fp); + unlink (path); + + if (ret == -2) + { + mutt_error ("%s", pop_data->err_msg); + mutt_sleep (2); + return -1; + } + + if (ret == -3) + { + mutt_error _("Can't write message to temporary file!"); + mutt_sleep (2); + return -1; + } + } + + /* Update the header information. Previously, we only downloaded a + * portion of the headers, those required for the main display. + */ + cache->index = h->index; + cache->path = safe_strdup (path); + rewind (msg->fp); + uidl = h->data; + mutt_free_envelope (&h->env); + h->env = mutt_read_rfc822_header (msg->fp, h, 0, 0); + h->data = uidl; + h->lines = 0; + fgets (buf, sizeof (buf), msg->fp); + while (!feof (msg->fp)) + { + ctx->hdrs[msgno]->lines++; + fgets (buf, sizeof (buf), msg->fp); + } + + h->content->length = ftell (msg->fp) - h->content->offset; + + /* This needs to be done in case this is a multipart message */ + if (!WithCrypto) + h->security = crypt_query (h->content); + + mutt_clear_error(); + rewind (msg->fp); + + return 0; +} + +/* update POP mailbox - delete messages from server */ +int pop_sync_mailbox (CONTEXT *ctx, int *index_hint) +{ + int i, ret; + char buf[LONG_STRING]; + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + pop_data->check_time = 0; + + FOREVER + { + if (pop_reconnect (ctx) < 0) + return -1; + + mutt_message (_("Marking %d messages deleted..."), ctx->deleted); + + for (i = 0, ret = 0; ret == 0 && i < ctx->msgcount; i++) + { + if (ctx->hdrs[i]->deleted) + { + snprintf (buf, sizeof (buf), "DELE %d\r\n", ctx->hdrs[i]->refno); + ret = pop_query (pop_data, buf, sizeof (buf)); + } + } + + if (ret == 0) + { + strfcpy (buf, "QUIT\r\n", sizeof (buf)); + ret = pop_query (pop_data, buf, sizeof (buf)); + } + + if (ret == 0) + { + pop_data->clear_cache = 1; + pop_clear_cache (pop_data); + pop_data->status = POP_DISCONNECTED; + return 0; + } + + if (ret == -2) + { + mutt_error ("%s", pop_data->err_msg); + mutt_sleep (2); + return -1; + } + } +} + +/* Check for new messages and fetch headers */ +int pop_check_mailbox (CONTEXT *ctx, int *index_hint) +{ + int ret; + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + if ((pop_data->check_time + PopCheckTimeout) > time (NULL)) + return 0; + + pop_logout (ctx); + + mutt_socket_close (pop_data->conn); + + if (pop_open_connection (pop_data) < 0) + return -1; + + ctx->size = pop_data->size; + + mutt_message _("Checking for new messages..."); + + ret = pop_fetch_headers (ctx); + pop_clear_cache (pop_data); + + if (ret < 0) + return -1; + + if (ret > 0) + return M_NEW_MAIL; + + return 0; +} + +/* Fetch messages and save them in $spoolfile */ +void pop_fetch_mail (void) +{ + char buffer[LONG_STRING]; + char msgbuf[SHORT_STRING]; + char *url, *p; + int i, delanswer, last = 0, msgs, bytes, rset = 0, ret; + CONNECTION *conn; + CONTEXT ctx; + MESSAGE *msg = NULL; + ACCOUNT acct; + POP_DATA *pop_data; + + if (!PopHost) + { + mutt_error _("POP host is not defined."); + return; + } + + url = p = safe_calloc (strlen (PopHost) + 7, sizeof (char)); + if (url_check_scheme (PopHost) == U_UNKNOWN) + { + strcpy (url, "pop://"); /* __STRCPY_CHECKED__ */ + p = strchr (url, '\0'); + } + strcpy (p, PopHost); /* __STRCPY_CHECKED__ */ + + ret = pop_parse_path (url, &acct); + FREE (&url); + if (ret) + { + mutt_error (_("%s is an invalid POP path"), PopHost); + return; + } + + conn = mutt_conn_find (NULL, &acct); + if (!conn) + return; + + pop_data = safe_calloc (1, sizeof (POP_DATA)); + pop_data->conn = conn; + + if (pop_open_connection (pop_data) < 0) + { + mutt_socket_free (pop_data->conn); + FREE (&pop_data); + return; + } + + conn->data = pop_data; + + mutt_message _("Checking for new messages..."); + + /* find out how many messages are in the mailbox. */ + strfcpy (buffer, "STAT\r\n", sizeof (buffer)); + ret = pop_query (pop_data, buffer, sizeof (buffer)); + if (ret == -1) + goto fail; + if (ret == -2) + { + mutt_error ("%s", pop_data->err_msg); + goto finish; + } + + sscanf (buffer, "+OK %d %d", &msgs, &bytes); + + /* only get unread messages */ + if (msgs > 0 && option (OPTPOPLAST)) + { + strfcpy (buffer, "LAST\r\n", sizeof (buffer)); + ret = pop_query (pop_data, buffer, sizeof (buffer)); + if (ret == -1) + goto fail; + if (ret == 0) + sscanf (buffer, "+OK %d", &last); + } + + if (msgs <= last) + { + mutt_message _("No new mail in POP mailbox."); + goto finish; + } + + if (mx_open_mailbox (NONULL (Spoolfile), M_APPEND, &ctx) == NULL) + goto finish; + + delanswer = query_quadoption (OPT_POPDELETE, _("Delete messages from server?")); + + snprintf (msgbuf, sizeof (msgbuf), _("Reading new messages (%d bytes)..."), bytes); + mutt_message ("%s", msgbuf); + + for (i = last + 1 ; i <= msgs ; i++) + { + if ((msg = mx_open_new_message (&ctx, NULL, M_ADD_FROM)) == NULL) + ret = -3; + else + { + snprintf (buffer, sizeof (buffer), "RETR %d\r\n", i); + ret = pop_fetch_data (pop_data, buffer, NULL, fetch_message, msg->fp); + if (ret == -3) + rset = 1; + + if (ret == 0 && mx_commit_message (msg, &ctx) != 0) + { + rset = 1; + ret = -3; + } + + mx_close_message (&msg); + } + + if (ret == 0 && delanswer == M_YES) + { + /* delete the message on the server */ + snprintf (buffer, sizeof (buffer), "DELE %d\r\n", i); + ret = pop_query (pop_data, buffer, sizeof (buffer)); + } + + if (ret == -1) + { + mx_close_mailbox (&ctx, NULL); + goto fail; + } + if (ret == -2) + { + mutt_error ("%s", pop_data->err_msg); + break; + } + if (ret == -3) + { + mutt_error _("Error while writing mailbox!"); + break; + } + + mutt_message (_("%s [%d of %d messages read]"), msgbuf, i - last, msgs - last); + } + + mx_close_mailbox (&ctx, NULL); + + if (rset) + { + /* make sure no messages get deleted */ + strfcpy (buffer, "RSET\r\n", sizeof (buffer)); + if (pop_query (pop_data, buffer, sizeof (buffer)) == -1) + goto fail; + } + +finish: + /* exit gracefully */ + strfcpy (buffer, "QUIT\r\n", sizeof (buffer)); + if (pop_query (pop_data, buffer, sizeof (buffer)) == -1) + goto fail; + mutt_socket_close (conn); + FREE (&pop_data); + return; + +fail: + mutt_error _("Server closed connection!"); + mutt_socket_close (conn); + FREE (&pop_data); +} diff --git a/pop.h b/pop.h new file mode 100644 index 0000000..027c20d --- /dev/null +++ b/pop.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2000-2003 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _POP_H +#define _POP_H 1 + +#include "mailbox.h" +#include "mutt_socket.h" + +#define POP_PORT 110 +#define POP_SSL_PORT 995 + +/* number of entries in the hash table */ +#define POP_CACHE_LEN 10 + +/* maximal length of the server response (RFC1939) */ +#define POP_CMD_RESPONSE 512 + +enum +{ + /* Status */ + POP_NONE = 0, + POP_CONNECTED, + POP_DISCONNECTED, + POP_BYE +}; + +typedef enum +{ + POP_A_SUCCESS = 0, + POP_A_SOCKET, + POP_A_FAILURE, + POP_A_UNAVAIL +} pop_auth_res_t; + +typedef struct +{ + unsigned int index; + char *path; +} POP_CACHE; + +typedef struct +{ + CONNECTION *conn; + unsigned int status : 2; + unsigned int capabilities : 1; + unsigned int use_stls : 2; + unsigned int cmd_capa : 1; /* optional command CAPA */ + unsigned int cmd_stls : 1; /* optional command STLS */ + unsigned int cmd_user : 2; /* optional command USER */ + unsigned int cmd_uidl : 2; /* optional command UIDL */ + unsigned int cmd_top : 2; /* optional command TOP */ + unsigned int resp_codes : 1; /* server supports extended response codes */ + unsigned int expire : 1; /* expire is greater than 0 */ + unsigned int clear_cache : 1; + size_t size; + time_t check_time; + time_t login_delay; /* minimal login delay capability */ + char *auth_list; /* list of auth mechanisms */ + char *timestamp; + char err_msg[POP_CMD_RESPONSE]; + POP_CACHE cache[POP_CACHE_LEN]; +} POP_DATA; + +typedef struct +{ + /* do authentication, using named method or any available if method is NULL */ + pop_auth_res_t (*authenticate) (POP_DATA *, const char *); + /* name of authentication method supported, NULL means variable. If this + * is not null, authenticate may ignore the second parameter. */ + const char* method; +} pop_auth_t; + +/* pop_auth.c */ +int pop_authenticate (POP_DATA *); +void pop_apop_timestamp (POP_DATA *, char *); + +/* pop_lib.c */ +#define pop_query(A,B,C) pop_query_d(A,B,C,NULL) +int pop_parse_path (const char *, ACCOUNT *); +int pop_connect (POP_DATA *); +int pop_open_connection (POP_DATA *); +int pop_query_d (POP_DATA *, char *, size_t, char *); +int pop_fetch_data (POP_DATA *, char *, char *, int (*funct) (char *, void *), void *); +int pop_reconnect (CONTEXT *); +void pop_logout (CONTEXT *); +void pop_error (POP_DATA *, char *); + +/* pop.c */ +int pop_check_mailbox (CONTEXT *, int *); +int pop_open_mailbox (CONTEXT *); +int pop_sync_mailbox (CONTEXT *, int *); +int pop_fetch_message (MESSAGE *, CONTEXT *, int); +void pop_close_mailbox (CONTEXT *); +void pop_fetch_mail (void); + +#endif diff --git a/pop_auth.c b/pop_auth.c new file mode 100644 index 0000000..9353eef --- /dev/null +++ b/pop_auth.c @@ -0,0 +1,415 @@ +/* + * Copyright (C) 2000-2001 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mx.h" +#include "md5.h" +#include "pop.h" + +#include <string.h> +#include <unistd.h> + +#ifdef USE_SASL +#ifdef USE_SASL2 +#include <sasl/sasl.h> +#include <sasl/saslutil.h> +#else +#include <sasl.h> +#include <saslutil.h> +#endif + +#include "mutt_sasl.h" +#endif + +#ifdef USE_SASL +/* SASL authenticator */ +static pop_auth_res_t pop_auth_sasl (POP_DATA *pop_data, const char *method) +{ + sasl_conn_t *saslconn; + sasl_interact_t *interaction = NULL; + int rc; + char buf[LONG_STRING]; + char inbuf[LONG_STRING]; + const char* mech; +#ifdef USE_SASL2 + const char *pc = NULL; +#else + char* pc = NULL; +#endif + unsigned int len, olen; + unsigned char client_start; + + if (mutt_sasl_client_new (pop_data->conn, &saslconn) < 0) + { + dprint (1, (debugfile, "pop_auth_sasl: Error allocating SASL connection.\n")); + return POP_A_FAILURE; + } + + if (!method) + method = pop_data->auth_list; + + FOREVER + { +#ifdef USE_SASL2 + rc = sasl_client_start(saslconn, method, &interaction, &pc, &olen, &mech); +#else + rc = sasl_client_start (saslconn, method, NULL, + &interaction, &pc, &olen, &mech); +#endif + if (rc != SASL_INTERACT) + break; + mutt_sasl_interact (interaction); + } + + if (rc != SASL_OK && rc != SASL_CONTINUE) + { + dprint (1, (debugfile, "pop_auth_sasl: Failure starting authentication exchange. No shared mechanisms?\n")); + + /* SASL doesn't support suggested mechanisms, so fall back */ + return POP_A_UNAVAIL; + } + + client_start = (olen > 0); + + mutt_message _("Authenticating (SASL)..."); + + snprintf (buf, sizeof (buf), "AUTH %s", mech); + olen = strlen (buf); + + /* looping protocol */ + FOREVER + { + strfcpy (buf + olen, "\r\n", sizeof (buf) - olen); + mutt_socket_write (pop_data->conn, buf); + if (mutt_socket_readln (inbuf, sizeof (inbuf), pop_data->conn) < 0) + { + sasl_dispose (&saslconn); + pop_data->status = POP_DISCONNECTED; + return POP_A_SOCKET; + } + + if (rc != SASL_CONTINUE) + break; + +#ifdef USE_SASL2 + if (!mutt_strncmp (inbuf, "+ ", 2) + && sasl_decode64 (inbuf, strlen (inbuf), buf, LONG_STRING-1, &len) != SASL_OK) +#else + if (!mutt_strncmp (inbuf, "+ ", 2) + && sasl_decode64 (inbuf, strlen (inbuf), buf, &len) != SASL_OK) +#endif + { + dprint (1, (debugfile, "pop_auth_sasl: error base64-decoding server response.\n")); + goto bail; + } + + if (!client_start) + FOREVER + { + rc = sasl_client_step (saslconn, buf, len, &interaction, &pc, &olen); + if (rc != SASL_INTERACT) + break; + mutt_sasl_interact (interaction); + } + else + client_start = 0; + + if (rc != SASL_CONTINUE && (olen == 0 || rc != SASL_OK)) + break; + + /* send out response, or line break if none needed */ + if (pc) + { + if (sasl_encode64 (pc, olen, buf, sizeof (buf), &olen) != SASL_OK) + { + dprint (1, (debugfile, "pop_auth_sasl: error base64-encoding client response.\n")); + goto bail; + } + + /* sasl_client_st(art|ep) allocate pc with malloc, expect me to + * free it */ +#ifndef USE_SASL2 + FREE (&pc); +#endif + } + } + + if (rc != SASL_OK) + goto bail; + + if (!mutt_strncmp (inbuf, "+OK", 3)) + { + mutt_sasl_setup_conn (pop_data->conn, saslconn); + return POP_A_SUCCESS; + } + +bail: + sasl_dispose (&saslconn); + + /* terminate SASL sessoin if the last responce is not +OK nor -ERR */ + if (!mutt_strncmp (inbuf, "+ ", 2)) + { + snprintf (buf, sizeof (buf), "*\r\n"); + if (pop_query (pop_data, buf, sizeof (buf)) == -1) + return POP_A_SOCKET; + } + + mutt_error _("SASL authentication failed."); + mutt_sleep (2); + + return POP_A_FAILURE; +} +#endif + +/* Get the server timestamp for APOP authentication */ +void pop_apop_timestamp (POP_DATA *pop_data, char *buf) +{ + char *p1, *p2; + + FREE (&pop_data->timestamp); + + if ((p1 = strchr (buf, '<')) && (p2 = strchr (p1, '>'))) + { + p2[1] = '\0'; + pop_data->timestamp = safe_strdup (p1); + } +} + +/* APOP authenticator */ +static pop_auth_res_t pop_auth_apop (POP_DATA *pop_data, const char *method) +{ + MD5_CTX mdContext; + unsigned char digest[16]; + char hash[33]; + char buf[LONG_STRING]; + int i; + + if (!pop_data->timestamp) + return POP_A_UNAVAIL; + + mutt_message _("Authenticating (APOP)..."); + + /* Compute the authentication hash to send to the server */ + MD5Init (&mdContext); + MD5Update (&mdContext, (unsigned char *)pop_data->timestamp, + strlen (pop_data->timestamp)); + MD5Update (&mdContext, (unsigned char *)pop_data->conn->account.pass, + strlen (pop_data->conn->account.pass)); + MD5Final (digest, &mdContext); + + for (i = 0; i < sizeof (digest); i++) + sprintf (hash + 2 * i, "%02x", digest[i]); + + /* Send APOP command to server */ + snprintf (buf, sizeof (buf), "APOP %s %s\r\n", pop_data->conn->account.user, hash); + + switch (pop_query (pop_data, buf, sizeof (buf))) + { + case 0: + return POP_A_SUCCESS; + case -1: + return POP_A_SOCKET; + } + + mutt_error _("APOP authentication failed."); + mutt_sleep (2); + + return POP_A_FAILURE; +} + +/* USER authenticator */ +static pop_auth_res_t pop_auth_user (POP_DATA *pop_data, const char *method) +{ + char buf[LONG_STRING]; + int ret; + + if (!pop_data->cmd_user) + return POP_A_UNAVAIL; + + mutt_message _("Logging in..."); + + snprintf (buf, sizeof (buf), "USER %s\r\n", pop_data->conn->account.user); + ret = pop_query (pop_data, buf, sizeof (buf)); + + if (pop_data->cmd_user == 2) + { + if (ret == 0) + { + pop_data->cmd_user = 1; + + dprint (1, (debugfile, "pop_auth_user: set USER capability\n")); + } + + if (ret == -2) + { + pop_data->cmd_user = 0; + + dprint (1, (debugfile, "pop_auth_user: unset USER capability\n")); + snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), + _("Command USER is not supported by server.")); + } + } + + if (ret == 0) + { + snprintf (buf, sizeof (buf), "PASS %s\r\n", pop_data->conn->account.pass); + ret = pop_query_d (pop_data, buf, sizeof (buf), +#ifdef DEBUG + /* don't print the password unless we're at the ungodly debugging level */ + debuglevel < M_SOCK_LOG_FULL ? "PASS *\r\n" : +#endif + NULL); + } + + switch (ret) + { + case 0: + return POP_A_SUCCESS; + case -1: + return POP_A_SOCKET; + } + + mutt_error ("%s %s", _("Login failed."), pop_data->err_msg); + mutt_sleep (2); + + return POP_A_FAILURE; +} + +static pop_auth_t pop_authenticators[] = { +#ifdef USE_SASL + { pop_auth_sasl, NULL }, +#endif + { pop_auth_apop, "apop" }, + { pop_auth_user, "user" }, + { NULL } +}; + +/* + * Authentication + * 0 - successful, + * -1 - conection lost, + * -2 - login failed, + * -3 - authentication canceled. +*/ +int pop_authenticate (POP_DATA* pop_data) +{ + ACCOUNT *acct = &pop_data->conn->account; + pop_auth_t* authenticator; + char* methods; + char* comma; + char* method; + int attempts = 0; + int ret = POP_A_UNAVAIL; + + if (mutt_account_getuser (acct) || !acct->user[0] || + mutt_account_getpass (acct) || !acct->pass[0]) + return -3; + + if (PopAuthenticators && *PopAuthenticators) + { + /* Try user-specified list of authentication methods */ + methods = safe_strdup (PopAuthenticators); + method = methods; + + while (method) + { + comma = strchr (method, ':'); + if (comma) + *comma++ = '\0'; + dprint (2, (debugfile, "pop_authenticate: Trying method %s\n", method)); + authenticator = pop_authenticators; + + while (authenticator->authenticate) + { + if (!authenticator->method || + !ascii_strcasecmp (authenticator->method, method)) + { + ret = authenticator->authenticate (pop_data, method); + if (ret == POP_A_SOCKET) + switch (pop_connect (pop_data)) + { + case 0: + { + ret = authenticator->authenticate (pop_data, method); + break; + } + case -2: + ret = POP_A_FAILURE; + } + + if (ret != POP_A_UNAVAIL) + attempts++; + if (ret == POP_A_SUCCESS || ret == POP_A_SOCKET || + (ret == POP_A_FAILURE && !option (OPTPOPAUTHTRYALL))) + { + comma = NULL; + break; + } + } + authenticator++; + } + + method = comma; + } + + FREE (&methods); + } + else + { + /* Fall back to default: any authenticator */ + dprint (2, (debugfile, "pop_authenticate: Using any available method.\n")); + authenticator = pop_authenticators; + + while (authenticator->authenticate) + { + ret = authenticator->authenticate (pop_data, authenticator->method); + if (ret == POP_A_SOCKET) + switch (pop_connect (pop_data)) + { + case 0: + { + ret = authenticator->authenticate (pop_data, authenticator->method); + break; + } + case -2: + ret = POP_A_FAILURE; + } + + if (ret != POP_A_UNAVAIL) + attempts++; + if (ret == POP_A_SUCCESS || ret == POP_A_SOCKET || + (ret == POP_A_FAILURE && !option (OPTPOPAUTHTRYALL))) + break; + + authenticator++; + } + } + + switch (ret) + { + case POP_A_SUCCESS: + return 0; + case POP_A_SOCKET: + return -1; + case POP_A_UNAVAIL: + if (!attempts) + mutt_error (_("No authenticators available")); + } + + return -2; +} diff --git a/pop_lib.c b/pop_lib.c new file mode 100644 index 0000000..5408348 --- /dev/null +++ b/pop_lib.c @@ -0,0 +1,563 @@ +/* + * Copyright (C) 2000-2003 Vsevolod Volkov <vvv@mutt.org.ua> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mx.h" +#include "url.h" +#include "pop.h" +#ifdef USE_SSL +# include "mutt_ssl.h" +#endif + +#include <string.h> +#include <unistd.h> +#include <ctype.h> + +/* given an POP mailbox name, return host, port, username and password */ +int pop_parse_path (const char* path, ACCOUNT* acct) +{ + ciss_url_t url; + char *c; + int ret = -1; + + /* Defaults */ + acct->flags = 0; + acct->port = POP_PORT; + acct->type = M_ACCT_TYPE_POP; + + c = safe_strdup (path); + url_parse_ciss (&url, c); + + if (url.scheme == U_POP || url.scheme == U_POPS) + { + if (url.scheme == U_POPS) + { + acct->flags |= M_ACCT_SSL; + acct->port = POP_SSL_PORT; + } + + if ((!url.path || !*url.path) && mutt_account_fromurl (acct, &url) == 0) + ret = 0; + } + + FREE (&c); + return ret; +} + +/* Copy error message to err_msg buffer */ +void pop_error (POP_DATA *pop_data, char *msg) +{ + char *t, *c, *c2; + + t = strchr (pop_data->err_msg, '\0'); + c = msg; + + if (!mutt_strncmp (msg, "-ERR ", 5)) + { + c2 = msg + 5; + SKIPWS (c2); + + if (*c2) + c = c2; + } + + strfcpy (t, c, sizeof (pop_data->err_msg) - strlen (pop_data->err_msg)); + mutt_remove_trailing_ws (pop_data->err_msg); +} + +/* Parse CAPA output */ +static int fetch_capa (char *line, void *data) +{ + POP_DATA *pop_data = (POP_DATA *)data; + char *c; + + if (!ascii_strncasecmp (line, "SASL", 4)) + { + FREE (&pop_data->auth_list); + c = line + 4; + SKIPWS (c); + pop_data->auth_list = safe_strdup (c); + } + + else if (!ascii_strncasecmp (line, "STLS", 4)) + pop_data->cmd_stls = 1; + + else if (!ascii_strncasecmp (line, "USER", 4)) + pop_data->cmd_user = 1; + + else if (!ascii_strncasecmp (line, "UIDL", 4)) + pop_data->cmd_uidl = 1; + + else if (!ascii_strncasecmp (line, "TOP", 3)) + pop_data->cmd_top = 1; + + return 0; +} + +/* Fetch list of the authentication mechanisms */ +static int fetch_auth (char *line, void *data) +{ + POP_DATA *pop_data = (POP_DATA *)data; + + if (!pop_data->auth_list) + { + pop_data->auth_list = safe_malloc (strlen (line) + 1); + *pop_data->auth_list = '\0'; + } + else + { + safe_realloc (&pop_data->auth_list, + strlen (pop_data->auth_list) + strlen (line) + 2); + strcat (pop_data->auth_list, " "); /* __STRCAT_CHECKED__ */ + } + strcat (pop_data->auth_list, line); /* __STRCAT_CHECKED__ */ + + return 0; +} + +/* + * Get capabilities + * 0 - successful, + * -1 - conection lost, + * -2 - execution error. +*/ +static int pop_capabilities (POP_DATA *pop_data, int mode) +{ + char buf[LONG_STRING]; + + /* don't check capabilities on reconnect */ + if (pop_data->capabilities) + return 0; + + /* init capabilities */ + if (mode == 0) + { + pop_data->cmd_capa = 0; + pop_data->cmd_stls = 0; + pop_data->cmd_user = 0; + pop_data->cmd_uidl = 0; + pop_data->cmd_top = 0; + pop_data->resp_codes = 0; + pop_data->expire = 1; + pop_data->login_delay = 0; + FREE (&pop_data->auth_list); + } + + /* Execute CAPA command */ + if (mode == 0 || pop_data->cmd_capa) + { + strfcpy (buf, "CAPA\r\n", sizeof (buf)); + switch (pop_fetch_data (pop_data, buf, NULL, fetch_capa, pop_data)) + { + case 0: + { + pop_data->cmd_capa = 1; + break; + } + case -1: + return -1; + } + } + + /* CAPA not supported, use defaults */ + if (mode == 0 && !pop_data->cmd_capa) + { + pop_data->cmd_user = 2; + pop_data->cmd_uidl = 2; + pop_data->cmd_top = 2; + + strfcpy (buf, "AUTH\r\n", sizeof (buf)); + if (pop_fetch_data (pop_data, buf, NULL, fetch_auth, pop_data) == -1) + return -1; + } + + /* Check capabilities */ + if (mode == 2) + { + char *msg = NULL; + + if (!pop_data->expire) + msg = _("Unable to leave messages on server."); + if (!pop_data->cmd_top) + msg = _("Command TOP is not supported by server."); + if (!pop_data->cmd_uidl) + msg = _("Command UIDL is not supported by server."); + if (msg && pop_data->cmd_capa) + { + mutt_error (msg); + return -2; + } + pop_data->capabilities = 1; + } + + return 0; +} + +/* + * Open connection + * 0 - successful, + * -1 - conection lost, + * -2 - invalid response. +*/ +int pop_connect (POP_DATA *pop_data) +{ + char buf[LONG_STRING]; + + pop_data->status = POP_NONE; + if (mutt_socket_open (pop_data->conn) < 0 || + mutt_socket_readln (buf, sizeof (buf), pop_data->conn) < 0) + { + mutt_error (_("Error connecting to server: %s"), pop_data->conn->account.host); + return -1; + } + + pop_data->status = POP_CONNECTED; + + if (mutt_strncmp (buf, "+OK", 3)) + { + *pop_data->err_msg = '\0'; + pop_error (pop_data, buf); + mutt_error ("%s", pop_data->err_msg); + return -2; + } + + pop_apop_timestamp (pop_data, buf); + + return 0; +} + +/* + * Open connection and authenticate + * 0 - successful, + * -1 - conection lost, + * -2 - invalid command or execution error, + * -3 - authentication canceled. +*/ +int pop_open_connection (POP_DATA *pop_data) +{ + int ret; + unsigned int n, size; + char buf[LONG_STRING]; + + ret = pop_connect (pop_data); + if (ret < 0) + { + mutt_sleep (2); + return ret; + } + + ret = pop_capabilities (pop_data, 0); + if (ret == -1) + goto err_conn; + if (ret == -2) + { + mutt_sleep (2); + return -2; + } + +#if defined(USE_SSL) && !defined(USE_NSS) + /* Attempt STLS if available and desired. */ + if (pop_data->cmd_stls && !pop_data->conn->ssf) + { + if (pop_data->use_stls == 0) + { + ret = query_quadoption (OPT_SSLSTARTTLS, + _("Secure connection with TLS?")); + if (ret == -1) + return -2; + pop_data->use_stls = 1; + if (ret == M_YES) + pop_data->use_stls = 2; + } + if (pop_data->use_stls == 2) + { + strfcpy (buf, "STLS\r\n", sizeof (buf)); + ret = pop_query (pop_data, buf, sizeof (buf)); + if (ret == -1) + goto err_conn; + if (ret != 0) + { + mutt_error ("%s", pop_data->err_msg); + mutt_sleep (2); + } + else if (mutt_ssl_starttls (pop_data->conn)) + { + mutt_error (_("Could not negotiate TLS connection")); + mutt_sleep (2); + return -2; + } + else + { + /* recheck capabilities after STLS completes */ + ret = pop_capabilities (pop_data, 1); + if (ret == -1) + goto err_conn; + if (ret == -2) + { + mutt_sleep (2); + return -2; + } + } + } + } +#endif + + ret = pop_authenticate (pop_data); + if (ret == -1) + goto err_conn; + if (ret == -3) + mutt_clear_error (); + if (ret != 0) + return ret; + + /* recheck capabilities after authentication */ + ret = pop_capabilities (pop_data, 2); + if (ret == -1) + goto err_conn; + if (ret == -2) + { + mutt_sleep (2); + return -2; + } + + /* get total size of mailbox */ + strfcpy (buf, "STAT\r\n", sizeof (buf)); + ret = pop_query (pop_data, buf, sizeof (buf)); + if (ret == -1) + goto err_conn; + if (ret == -2) + { + mutt_error ("%s", pop_data->err_msg); + mutt_sleep (2); + return ret; + } + + sscanf (buf, "+OK %u %u", &n, &size); + pop_data->size = size; + return 0; + +err_conn: + pop_data->status = POP_DISCONNECTED; + mutt_error _("Server closed connection!"); + mutt_sleep (2); + return -1; +} + +/* logout from POP server */ +void pop_logout (CONTEXT *ctx) +{ + int ret = 0; + char buf[LONG_STRING]; + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + if (pop_data->status == POP_CONNECTED) + { + mutt_message _("Closing connection to POP server..."); + + if (ctx->readonly) + { + strfcpy (buf, "RSET\r\n", sizeof (buf)); + ret = pop_query (pop_data, buf, sizeof (buf)); + } + + if (ret != -1) + { + strfcpy (buf, "QUIT\r\n", sizeof (buf)); + pop_query (pop_data, buf, sizeof (buf)); + } + + mutt_clear_error (); + } + + pop_data->status = POP_DISCONNECTED; + return; +} + +/* + * Send data from buffer and receive answer to the same buffer + * 0 - successful, + * -1 - conection lost, + * -2 - invalid command or execution error. +*/ +int pop_query_d (POP_DATA *pop_data, char *buf, size_t buflen, char *msg) +{ + int dbg = M_SOCK_LOG_CMD; + char *c; + + if (pop_data->status != POP_CONNECTED) + return -1; + +#ifdef DEBUG + /* print msg instaed of real command */ + if (msg) + { + dbg = M_SOCK_LOG_FULL; + dprint (M_SOCK_LOG_CMD, (debugfile, "> %s", msg)); + } +#endif + + mutt_socket_write_d (pop_data->conn, buf, dbg); + + c = strpbrk (buf, " \r\n"); + *c = '\0'; + snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), "%s: ", buf); + + if (mutt_socket_readln (buf, buflen, pop_data->conn) < 0) + { + pop_data->status = POP_DISCONNECTED; + return -1; + } + if (!mutt_strncmp (buf, "+OK", 3)) + return 0; + + pop_error (pop_data, buf); + return -2; +} + +/* + * This function calls funct(*line, *data) for each received line, + * funct(NULL, *data) if rewind(*data) needs, exits when fail or done. + * Returned codes: + * 0 - successful, + * -1 - conection lost, + * -2 - invalid command or execution error, + * -3 - error in funct(*line, *data) + */ +int pop_fetch_data (POP_DATA *pop_data, char *query, char *msg, + int (*funct) (char *, void *), void *data) +{ + char buf[LONG_STRING]; + char *inbuf; + char *p; + int ret, chunk, line = 0; + size_t lenbuf = 0; + + strfcpy (buf, query, sizeof (buf)); + ret = pop_query (pop_data, buf, sizeof (buf)); + if (ret < 0) + return ret; + + inbuf = safe_malloc (sizeof (buf)); + + FOREVER + { + chunk = mutt_socket_readln_d (buf, sizeof (buf), pop_data->conn, M_SOCK_LOG_HDR); + if (chunk < 0) + { + pop_data->status = POP_DISCONNECTED; + ret = -1; + break; + } + + p = buf; + if (!lenbuf && buf[0] == '.') + { + if (buf[1] != '.') + break; + p++; + } + + strfcpy (inbuf + lenbuf, p, sizeof (buf)); + + if (chunk >= sizeof (buf)) + { + lenbuf += strlen (p); + } + else + { + line++; + if (msg && ReadInc && (line % ReadInc == 0)) + mutt_message ("%s %d", msg, line); + if (ret == 0 && funct (inbuf, data) < 0) + ret = -3; + lenbuf = 0; + } + + safe_realloc (&inbuf, lenbuf + sizeof (buf)); + } + + FREE (&inbuf); + return ret; +} + +/* find message with this UIDL and set refno */ +static int check_uidl (char *line, void *data) +{ + int i; + unsigned int index; + CONTEXT *ctx = (CONTEXT *)data; + + sscanf (line, "%u %s", &index, line); + for (i = 0; i < ctx->msgcount; i++) + { + if (!mutt_strcmp (ctx->hdrs[i]->data, line)) + { + ctx->hdrs[i]->refno = index; + break; + } + } + + return 0; +} + +/* reconnect and verify idnexes if connection was lost */ +int pop_reconnect (CONTEXT *ctx) +{ + int ret; + POP_DATA *pop_data = (POP_DATA *)ctx->data; + + if (pop_data->status == POP_CONNECTED) + return 0; + if (pop_data->status == POP_BYE) + return -1; + + FOREVER + { + mutt_socket_close (pop_data->conn); + + ret = pop_open_connection (pop_data); + if (ret == 0) + { + char *msg = _("Verifying message indexes..."); + int i; + + for (i = 0; i < ctx->msgcount; i++) + ctx->hdrs[i]->refno = -1; + + mutt_message (msg); + + ret = pop_fetch_data (pop_data, "UIDL\r\n", msg, check_uidl, ctx); + if (ret == -2) + { + mutt_error ("%s", pop_data->err_msg); + mutt_sleep (2); + } + } + if (ret == 0) + return 0; + + pop_logout (ctx); + + if (ret < -1) + return -1; + + if (query_quadoption (OPT_POPRECONNECT, + _("Connection lost. Reconnect to POP server?")) != M_YES) + return -1; + } +} diff --git a/postpone.c b/postpone.c new file mode 100644 index 0000000..449f83e --- /dev/null +++ b/postpone.c @@ -0,0 +1,683 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "rfc1524.h" +#include "mime.h" +#include "mailbox.h" +#include "mapping.h" +#include "sort.h" +#ifdef USE_IMAP +#include "mx.h" +#include "imap.h" +#endif +#include "mutt_crypt.h" + +#include <ctype.h> +#include <unistd.h> +#include <string.h> +#include <sys/stat.h> + +static struct mapping_t PostponeHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("Del"), OP_DELETE }, + { N_("Undel"), OP_UNDELETE }, + { N_("Help"), OP_HELP }, + { NULL } +}; + + + +static short PostCount = 0; +static CONTEXT *PostContext = NULL; +static short UpdateNumPostponed = 0; + +/* Return the number of postponed messages. + * if force is 0, use a cached value if it is costly to get a fresh + * count (IMAP) - else check. + */ +int mutt_num_postponed (int force) +{ + struct stat st; + CONTEXT ctx; + + static time_t LastModify = 0; + static char *OldPostponed = NULL; + + if (UpdateNumPostponed) + { + UpdateNumPostponed = 0; + force = 1; + } + + if (Postponed != OldPostponed) + { + OldPostponed = Postponed; + LastModify = 0; + force = 1; + } + + if (!Postponed) + return 0; + +#ifdef USE_IMAP + /* LastModify is useless for IMAP */ + if (mx_is_imap (Postponed)) + { + if (force) + { + short newpc; + + newpc = imap_mailbox_check (Postponed, 0); + if (newpc >= 0) + { + PostCount = newpc; + dprint (2, (debugfile, "mutt_num_postponed: %d postponed IMAP messages found.\n", PostCount)); + } + else + dprint (2, (debugfile, "mutt_num_postponed: using old IMAP postponed count.\n")); + } + return PostCount; + } +#endif + + if (stat (Postponed, &st) == -1) + { + PostCount = 0; + LastModify = 0; + return (0); + } + + if (S_ISDIR (st.st_mode)) + { + /* if we have a maildir mailbox, we need to stat the "new" dir */ + + char buf[_POSIX_PATH_MAX]; + + snprintf (buf, sizeof (buf), "%s/new", Postponed); + if (access (buf, F_OK) == 0 && stat (buf, &st) == -1) + { + PostCount = 0; + LastModify = 0; + return 0; + } + } + + if (LastModify < st.st_mtime) + { +#ifdef USE_NNTP + int optnews = option (OPTNEWS); +#endif + LastModify = st.st_mtime; + + if (access (Postponed, R_OK | F_OK) != 0) + return (PostCount = 0); +#ifdef USE_NNTP + if (optnews) + unset_option (OPTNEWS); +#endif + if (mx_open_mailbox (Postponed, M_NOSORT | M_QUIET, &ctx) == NULL) + PostCount = 0; + else + PostCount = ctx.msgcount; + mx_fastclose_mailbox (&ctx); +#ifdef USE_NNTP + if (optnews) + set_option (OPTNEWS); +#endif + } + + return (PostCount); +} + +void mutt_update_num_postponed (void) +{ + UpdateNumPostponed = 1; +} + +static void post_entry (char *s, size_t slen, MUTTMENU *menu, int entry) +{ + CONTEXT *ctx = (CONTEXT *) menu->data; + + _mutt_make_string (s, slen, NONULL (HdrFmt), ctx, ctx->hdrs[entry], + M_FORMAT_ARROWCURSOR); +} + +static HEADER *select_msg (void) +{ + MUTTMENU *menu; + int i, done=0, r=-1; + char helpstr[SHORT_STRING]; + short orig_sort; + + menu = mutt_new_menu (); + menu->make_entry = post_entry; + menu->menu = MENU_POST; + menu->max = PostContext->msgcount; + menu->title = _("Postponed Messages"); + menu->data = PostContext; + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_POST, PostponeHelp); + + /* The postponed mailbox is setup to have sorting disabled, but the global + * Sort variable may indicate something different. Sorting has to be + * disabled while the postpone menu is being displayed. */ + orig_sort = Sort; + Sort = SORT_ORDER; + + while (!done) + { + switch (i = mutt_menuLoop (menu)) + { + case OP_DELETE: + case OP_UNDELETE: + mutt_set_flag (PostContext, PostContext->hdrs[menu->current], M_DELETE, (i == OP_DELETE) ? 1 : 0); + PostCount = PostContext->msgcount - PostContext->deleted; + if (option (OPTRESOLVE) && menu->current < menu->max - 1) + { + menu->oldcurrent = menu->current; + menu->current++; + if (menu->current >= menu->top + menu->pagelen) + { + menu->top = menu->current; + menu->redraw = REDRAW_INDEX | REDRAW_STATUS; + } + else + menu->redraw |= REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + break; + + case OP_GENERIC_SELECT_ENTRY: + r = menu->current; + done = 1; + break; + + case OP_EXIT: + done = 1; + break; + } + } + + Sort = orig_sort; + mutt_menuDestroy (&menu); + return (r > -1 ? PostContext->hdrs[r] : NULL); +} + +/* args: + * ctx Context info, used when recalling a message to which + * we reply. + * hdr envelope/attachment info for recalled message + * cur if message was a reply, `cur' is set to the message which + * `hdr' is in reply to + * fcc fcc for the recalled message + * fcclen max length of fcc + * + * return vals: + * -1 error/no messages + * 0 normal exit + * SENDREPLY recalled message is a reply + */ +int mutt_get_postponed (CONTEXT *ctx, HEADER *hdr, HEADER **cur, char *fcc, size_t fcclen) +{ + HEADER *h; + int code = SENDPOSTPONED; + LIST *tmp; + LIST *last = NULL; + LIST *next; + char *p; + int opt_delete; + + if (!Postponed) + return (-1); + + if ((PostContext = mx_open_mailbox (Postponed, M_NOSORT, NULL)) == NULL) + { + PostCount = 0; + mutt_error _("No postponed messages."); + return (-1); + } + + if (! PostContext->msgcount) + { + PostCount = 0; + mx_close_mailbox (PostContext, NULL); + FREE (&PostContext); + mutt_error _("No postponed messages."); + return (-1); + } + + if (PostContext->msgcount == 1) + { + /* only one message, so just use that one. */ + h = PostContext->hdrs[0]; + } + else if ((h = select_msg ()) == NULL) + { + mx_close_mailbox (PostContext, NULL); + FREE (&PostContext); + return (-1); + } + + if (mutt_prepare_template (NULL, PostContext, hdr, h, 0) < 0) + { + mx_fastclose_mailbox (PostContext); + FREE (&PostContext); + return (-1); + } + + /* finished with this message, so delete it. */ + mutt_set_flag (PostContext, h, M_DELETE, 1); + + /* and consider it saved, so that it won't be moved to the trash folder */ + mutt_set_flag (PostContext, h, M_APPENDED, 1); + + /* update the count for the status display */ + PostCount = PostContext->msgcount - PostContext->deleted; + + /* avoid the "purge deleted messages" prompt */ + opt_delete = quadoption (OPT_DELETE); + set_quadoption (OPT_DELETE, M_YES); + mx_close_mailbox (PostContext, NULL); + set_quadoption (OPT_DELETE, opt_delete); + + FREE (&PostContext); + + for (tmp = hdr->env->userhdrs; tmp; ) + { + if (ascii_strncasecmp ("X-Mutt-References:", tmp->data, 18) == 0) + { + if (ctx) + { + /* if a mailbox is currently open, look to see if the orignal message + the user attempted to reply to is in this mailbox */ + p = tmp->data + 18; + SKIPWS (p); + if (!ctx->id_hash) + ctx->id_hash = mutt_make_id_hash (ctx); + *cur = hash_find (ctx->id_hash, p); + } + + /* Remove the X-Mutt-References: header field. */ + next = tmp->next; + if (last) + last->next = tmp->next; + else + hdr->env->userhdrs = tmp->next; + tmp->next = NULL; + mutt_free_list (&tmp); + tmp = next; + if (*cur) + code |= SENDREPLY; + } + else if (ascii_strncasecmp ("X-Mutt-Fcc:", tmp->data, 11) == 0) + { + p = tmp->data + 11; + SKIPWS (p); + strfcpy (fcc, p, fcclen); + mutt_pretty_mailbox (fcc); + + /* remove the X-Mutt-Fcc: header field */ + next = tmp->next; + if (last) + last->next = tmp->next; + else + hdr->env->userhdrs = tmp->next; + tmp->next = NULL; + mutt_free_list (&tmp); + tmp = next; + } + else if ((WithCrypto & APPLICATION_PGP) + && (mutt_strncmp ("Pgp:", tmp->data, 4) == 0 /* this is generated + * by old mutt versions + */ + || mutt_strncmp ("X-Mutt-PGP:", tmp->data, 11) == 0)) + { + hdr->security = mutt_parse_crypt_hdr (strchr (tmp->data, ':') + 1, 1); + hdr->security |= APPLICATION_PGP; + + /* remove the pgp field */ + next = tmp->next; + if (last) + last->next = tmp->next; + else + hdr->env->userhdrs = tmp->next; + tmp->next = NULL; + mutt_free_list (&tmp); + tmp = next; + } + else if ((WithCrypto & APPLICATION_SMIME) + && mutt_strncmp ("X-Mutt-SMIME:", tmp->data, 13) == 0) + { + hdr->security = mutt_parse_crypt_hdr (strchr (tmp->data, ':') + 1, 1); + hdr->security |= APPLICATION_SMIME; + + /* remove the smime field */ + next = tmp->next; + if (last) + last->next = tmp->next; + else + hdr->env->userhdrs = tmp->next; + tmp->next = NULL; + mutt_free_list (&tmp); + tmp = next; + } + +#ifdef MIXMASTER + else if (mutt_strncmp ("X-Mutt-Mix:", tmp->data, 11) == 0) + { + char *t; + mutt_free_list (&hdr->chain); + + t = strtok (tmp->data + 11, " \t\n"); + while (t) + { + hdr->chain = mutt_add_list (hdr->chain, t); + t = strtok (NULL, " \t\n"); + } + + next = tmp->next; + if (last) + last->next = tmp->next; + else + hdr->env->userhdrs = tmp->next; + tmp->next = NULL; + mutt_free_list (&tmp); + tmp = next; + } +#endif + + else + { + last = tmp; + tmp = tmp->next; + } + } + return (code); +} + + + +int mutt_parse_crypt_hdr (char *p, int set_signas) +{ + int pgp = 0; + char pgp_sign_as[LONG_STRING] = "\0", *q; + char smime_cryptalg[LONG_STRING] = "\0"; + + if (!WithCrypto) + return 0; + + SKIPWS (p); + for (; *p; p++) + { + + switch (*p) + { + case 'e': + case 'E': + pgp |= ENCRYPT; + break; + + case 's': + case 'S': + pgp |= SIGN; + q = pgp_sign_as; + + if (*(p+1) == '<') + { + for (p += 2; + *p && *p != '>' && q < pgp_sign_as + sizeof (pgp_sign_as) - 1; + *q++ = *p++) + ; + + if (*p!='>') + { + mutt_error _("Illegal PGP header"); + return 0; + } + } + + *q = '\0'; + break; + + /* This used to be the micalg parameter. + * + * It's no longer needed, so we just skip the parameter in order + * to be able to recall old messages. + */ + case 'm': + case 'M': + if(*(p+1) == '<') + { + for (p += 2; *p && *p != '>'; p++) + ; + if(*p != '>') + { + mutt_error _("Illegal PGP header"); + return 0; + } + } + + break; + + + case 'c': + case 'C': + q = smime_cryptalg; + + if(*(p+1) == '<') + { + for(p += 2; *p && *p != '>' && q < smime_cryptalg + sizeof(smime_cryptalg) - 1; + *q++ = *p++) + ; + + if(*p != '>') + { + mutt_error _("Illegal S/MIME header"); + return 0; + } + } + + *q = '\0'; + break; + + default: + mutt_error _("Illegal PGP header"); + return 0; + } + + } + + /* the cryptalg field must not be empty */ + if ((WithCrypto & APPLICATION_SMIME) && *smime_cryptalg) + mutt_str_replace (&SmimeCryptAlg, smime_cryptalg); + + if ((WithCrypto & APPLICATION_PGP) && (set_signas || *pgp_sign_as)) + mutt_str_replace (&PgpSignAs, pgp_sign_as); + + return pgp; +} + + + +int mutt_prepare_template (FILE *fp, CONTEXT *ctx, HEADER *newhdr, HEADER *hdr, + short weed) +{ + MESSAGE *msg = NULL; + char file[_POSIX_PATH_MAX]; + BODY *b; + FILE *bfp; + + int rv = -1; + STATE s; + + memset (&s, 0, sizeof (s)); + + if (!fp && (msg = mx_open_message (ctx, hdr->msgno)) == NULL) + return (-1); + + if (!fp) fp = msg->fp; + + bfp = fp; + + /* parse the message header and MIME structure */ + + fseek (fp, hdr->offset, 0); + newhdr->offset = hdr->offset; + newhdr->env = mutt_read_rfc822_header (fp, newhdr, 1, weed); + newhdr->content->length = hdr->content->length; + mutt_parse_part (fp, newhdr->content); + + FREE (&newhdr->env->message_id); + FREE (&newhdr->env->mail_followup_to); /* really? */ + + /* decrypt pgp/mime encoded messages */ + /* XXX - what happens with S/MIME encrypted messages?!?!? - tlr, 020909*/ + if ((WithCrypto & APPLICATION_PGP) + && (hdr->security & APPLICATION_PGP) + && mutt_is_multipart_encrypted (newhdr->content)) + { + newhdr->security |= PGPENCRYPT; + if (!crypt_valid_passphrase(APPLICATION_PGP)) + goto err; + + mutt_message _("Invoking PGP..."); + if (crypt_pgp_decrypt_mime (fp, &bfp, newhdr->content, &b) == -1 || b == NULL) + { + err: + mx_close_message (&msg); + mutt_free_envelope (&newhdr->env); + mutt_free_body (&newhdr->content); + mutt_error _("Decryption failed."); + return -1; + } + + mutt_free_body (&newhdr->content); + newhdr->content = b; + + mutt_clear_error (); + } + + /* + * remove a potential multipart/signed layer - useful when + * resending messages + */ + + if (WithCrypto && mutt_is_multipart_signed (newhdr->content)) + { + newhdr->security |= SIGN; + if ((WithCrypto & APPLICATION_PGP) + && ascii_strcasecmp (mutt_get_parameter ("protocol", newhdr->content->parameter), "application/pgp-signature") == 0) + newhdr->security |= APPLICATION_PGP; + else if ((WithCrypto & APPLICATION_SMIME)) + newhdr->security |= APPLICATION_SMIME; + + /* destroy the signature */ + mutt_free_body (&newhdr->content->parts->next); + newhdr->content = mutt_remove_multipart (newhdr->content); + } + + /* + * We don't need no primary multipart. + * Note: We _do_ preserve messages! + * + * XXX - we don't handle multipart/alternative in any + * smart way when sending messages. However, one may + * consider this a feature. + * + */ + + if (newhdr->content->type == TYPEMULTIPART) + newhdr->content = mutt_remove_multipart (newhdr->content); + + s.fpin = bfp; + + /* create temporary files for all attachments */ + for (b = newhdr->content; b; b = b->next) + { + + /* what follows is roughly a receive-mode variant of + * mutt_get_tmp_attachment () from muttlib.c + */ + + file[0] = '\0'; + if (b->filename) + { + strfcpy (file, b->filename, sizeof (file)); + b->d_filename = safe_strdup (b->filename); + } + else + { + /* avoid Content-Disposition: header with temporary filename */ + b->use_disp = 0; + } + + /* set up state flags */ + + s.flags = 0; + + if (b->type == TYPETEXT) + { + if (!ascii_strcasecmp ("yes", mutt_get_parameter ("x-mutt-noconv", b->parameter))) + b->noconv = 1; + else + { + s.flags |= M_CHARCONV; + b->noconv = 0; + } + + mutt_delete_parameter ("x-mutt-noconv", &b->parameter); + } + + mutt_adv_mktemp (file, sizeof(file)); + if ((s.fpout = safe_fopen (file, "w")) == NULL) + goto bail; + + + mutt_decode_attachment (b, &s); + + if (safe_fclose (&s.fpout) != 0) + goto bail; + + mutt_str_replace (&b->filename, file); + b->unlink = 1; + + mutt_stamp_attachment (b); + + mutt_free_body (&b->parts); + if (b->hdr) b->hdr->content = NULL; /* avoid dangling pointer */ + } + + rv = 0; + + bail: + + /* that's it. */ + if (bfp != fp) fclose (bfp); + if (msg) mx_close_message (&msg); + + if (rv == -1) + { + mutt_free_envelope (&newhdr->env); + mutt_free_body (&newhdr->content); + } + + return rv; +} diff --git a/prepare b/prepare new file mode 100755 index 0000000..85df1ed --- /dev/null +++ b/prepare @@ -0,0 +1,23 @@ +#!/bin/sh -- + +if test x"$1" = x"-dev" ; then + include_deps= + shift +else + include_deps="-i" +fi + +if aclocal -I m4 && autoheader && (cd m4 && make -f Makefile.am.in ) \ + && automake $include_deps && autoconf && ./configure $@ +then + echo + echo "The mutt source code was successfully prepared." + echo "Type make && make install to build and install mutt." + echo +else + echo + echo "Some part of the preparation process failed." + echo "Please refer to doc/devel-notes.txt for details." + echo + exit 1 +fi diff --git a/protos.h b/protos.h new file mode 100644 index 0000000..c272e29 --- /dev/null +++ b/protos.h @@ -0,0 +1,490 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + + +#include "mbyte.h" + +#ifdef DEBUG +#define dprint(N,X) do { if(debuglevel>=N) fprintf X; } while (0) +#else +#define dprint(N,X) +#endif + +#define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#') + +#define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0) +void _mutt_make_string (char *, size_t, const char *, CONTEXT *, + HEADER *, format_flag); + +int mutt_extract_token (BUFFER *, BUFFER *, int); +void mutt_buffer_add (BUFFER*, const char*, size_t); +void mutt_buffer_addstr (BUFFER*, const char*); +void mutt_buffer_addch (BUFFER*, char); + +#define mutt_system(x) _mutt_system(x,0) +int _mutt_system (const char *, int); + +#define mutt_next_thread(x) _mutt_aside_thread(x,1,0) +#define mutt_previous_thread(x) _mutt_aside_thread(x,0,0) +#define mutt_next_subthread(x) _mutt_aside_thread(x,1,1) +#define mutt_previous_subthread(x) _mutt_aside_thread(x,0,1) +int _mutt_aside_thread (HEADER *, short, short); + +#define mutt_collapse_thread(x,y) _mutt_traverse_thread (x,y,M_THREAD_COLLAPSE) +#define mutt_uncollapse_thread(x,y) _mutt_traverse_thread (x,y,M_THREAD_UNCOLLAPSE) +#define mutt_get_hidden(x,y)_mutt_traverse_thread (x,y,M_THREAD_GET_HIDDEN) +#define mutt_thread_contains_unread(x,y) _mutt_traverse_thread (x,y,M_THREAD_UNREAD) +#define mutt_thread_next_unread(x,y) _mutt_traverse_thread(x,y,M_THREAD_NEXT_UNREAD) +int _mutt_traverse_thread (CONTEXT *ctx, HEADER *hdr, int flag); + + +#define mutt_new_parameter() safe_calloc (1, sizeof (PARAMETER)) +#define mutt_new_header() safe_calloc (1, sizeof (HEADER)) +#define mutt_new_envelope() safe_calloc (1, sizeof (ENVELOPE)) +#define mutt_new_enter_state() safe_calloc (1, sizeof (ENTER_STATE)) + +typedef const char * format_t (char *, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag); + +void mutt_FormatString (char *, size_t, const char *, format_t *, unsigned long, format_flag); +void mutt_parse_content_type (char *, BODY *); +void mutt_generate_boundary (PARAMETER **); +void mutt_delete_parameter (const char *attribute, PARAMETER **p); +void mutt_set_parameter (const char *, const char *, PARAMETER **); + + +FILE *mutt_open_read (const char *, pid_t *); + +void set_quadoption (int, int); +int query_quadoption (int, const char *); +int quadoption (int); + +ADDRESS *mutt_default_from (void); +ADDRESS *mutt_get_address (ENVELOPE *, char **); +ADDRESS *mutt_lookup_alias (const char *s); +ADDRESS *mutt_remove_duplicates (ADDRESS *); +ADDRESS *mutt_expand_aliases (ADDRESS *); +ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *); + +BODY *mutt_make_file_attach (const char *); +BODY *mutt_make_message_attach (CONTEXT *, HEADER *, int); +BODY *mutt_remove_multipart (BODY *); +BODY *mutt_make_multipart (BODY *); +BODY *mutt_new_body (void); +BODY *mutt_parse_multipart (FILE *, const char *, long, int); +BODY *mutt_parse_messageRFC822 (FILE *, BODY *); +BODY *mutt_read_mime_header (FILE *, int); + +CONTENT *mutt_get_content_info (const char *fname, BODY *b); + +HASH *mutt_make_id_hash (CONTEXT *); +HASH *mutt_make_subj_hash (CONTEXT *); + +LIST *mutt_make_references(ENVELOPE *e); +LIST *mutt_parse_references (char *, int); + +ENVELOPE *mutt_read_rfc822_header (FILE *, HEADER *, short, short); +HEADER *mutt_dup_header (HEADER *); + +ATTACHPTR **mutt_gen_attach_list (BODY *, int, ATTACHPTR **, short *, short *, int, int); + +time_t mutt_decrease_mtime (const char *, struct stat *); +time_t mutt_local_tz (time_t); +time_t mutt_mktime (struct tm *, int); +time_t mutt_parse_date (const char *, HEADER *); +int is_from (const char *, char *, size_t, time_t *); + +const char *mutt_attach_fmt ( + char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags); + + +char *mutt_charset_hook (const char *); +char *mutt_iconv_hook (const char *); +char *mutt_expand_path (char *, size_t); +char *_mutt_expand_path (char *, size_t, int); +char *mutt_find_hook (int, const char *); +char *mutt_gecos_name (char *, size_t, struct passwd *); +char *mutt_gen_msgid (void); +char *mutt_get_body_charset (char *, size_t, BODY *); +const char *mutt_get_name (ADDRESS *); +char *mutt_get_parameter (const char *, PARAMETER *); +char *mutt_crypt_hook (ADDRESS *); +char *mutt_make_date (char *, size_t); + +const char *mutt_make_version (void); + +const char *mutt_fqdn(short); + +REGEXP *mutt_compile_regexp (const char *, int); + +void mutt_account_hook (const char* url); +void mutt_add_to_reference_headers (ENVELOPE *env, ENVELOPE *curenv, LIST ***pp, LIST ***qq); +void mutt_adv_mktemp (char *, size_t); +void mutt_alias_menu (char *, size_t, ALIAS *); +void mutt_allow_interrupt (int); +void mutt_attach_init (BODY *); +void mutt_block_signals (void); +void mutt_block_signals_system (void); +void mutt_body_handler (BODY *, STATE *); +int mutt_bounce_message (FILE *fp, HEADER *, ADDRESS *); +void mutt_buffy (char *, size_t); +int mutt_buffy_list (void); +void mutt_canonical_charset (char *, size_t, const char *); +void mutt_check_rescore (CONTEXT *); +void mutt_clear_error (void); +void mutt_create_alias (ENVELOPE *, ADDRESS *); +void mutt_decode_attachment (BODY *, STATE *); +void mutt_decode_base64 (STATE *s, long len, int istext, iconv_t cd); +void mutt_default_save (char *, size_t, HEADER *); +void mutt_display_address (ENVELOPE *); +void mutt_display_sanitize (char *); +void mutt_edit_content_type (HEADER *, BODY *, FILE *); +void mutt_edit_file (const char *, const char *); +void mutt_edit_headers (const char *, const char *, HEADER *, char *, size_t); +void mutt_curses_error (const char *, ...); +void mutt_curses_message (const char *, ...); +void mutt_enter_command (void); +void mutt_expand_aliases_env (ENVELOPE *); +void mutt_expand_file_fmt (char *, size_t, const char *, const char *); +void mutt_expand_fmt (char *, size_t, const char *, const char *); +void mutt_expand_link (char *, const char *, const char *); +void mutt_fix_reply_recipients (ENVELOPE *env); +void mutt_folder_hook (char *); +void mutt_format_string (char *, size_t, int, int, int, char, const char *, size_t, int); +void mutt_format_s (char *, size_t, const char *, const char *); +void mutt_format_s_tree (char *, size_t, const char *, const char *); +void mutt_forward_intro (FILE *fp, HEADER *cur); +void mutt_forward_trailer (FILE *fp); +void mutt_free_alias (ALIAS **); +void mutt_free_body (BODY **); +void mutt_free_color (int fg, int bg); +void mutt_free_enter_state (ENTER_STATE **); +void mutt_free_envelope (ENVELOPE **); +void mutt_free_header (HEADER **); +void mutt_free_parameter (PARAMETER **); +void mutt_free_regexp (REGEXP **); +void mutt_generate_header (char *, size_t, HEADER *, int); +void mutt_help (int); +void mutt_draw_tree (CONTEXT *); +void mutt_check_lookup_list (BODY *, char *, int); +void mutt_make_attribution (CONTEXT *ctx, HEADER *cur, FILE *out); +void mutt_make_forward_subject (ENVELOPE *env, CONTEXT *ctx, HEADER *cur); +void mutt_make_help (char *, size_t, char *, int, int); +void mutt_make_misc_reply_headers (ENVELOPE *env, CONTEXT *ctx, HEADER *cur, ENVELOPE *curenv); +void mutt_make_post_indent (CONTEXT *ctx, HEADER *cur, FILE *out); +void mutt_message_to_7bit (BODY *, FILE *); +#define mutt_mktemp(a) _mutt_mktemp (a, __FILE__, __LINE__) +void _mutt_mktemp (char *, const char *, int); +void mutt_normalize_time (struct tm *); +void mutt_paddstr (int, const char *); +void mutt_parse_mime_message (CONTEXT *ctx, HEADER *); +void mutt_parse_part (FILE *, BODY *); +void mutt_perror (const char *); +void mutt_prepare_envelope (ENVELOPE *, int); +void mutt_unprepare_envelope (ENVELOPE *); +void mutt_pretty_mailbox (char *); +void mutt_pretty_size (char *, size_t, long); +void mutt_pipe_message (HEADER *); +void mutt_print_message (HEADER *); +void mutt_print_patchlist (void); +void mutt_query_exit (void); +void mutt_query_menu (char *, size_t); +void mutt_safe_path (char *s, size_t l, ADDRESS *a); +void mutt_save_path (char *s, size_t l, ADDRESS *a); +void mutt_score_message (CONTEXT *, HEADER *, int); +void mutt_select_fcc (char *, size_t, HEADER *); +#define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL) +void _mutt_select_file (char *, size_t, int, char ***, int *); +void mutt_message_hook (CONTEXT *, HEADER *, int); +void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int); +#define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1) +void mutt_set_followup_to (ENVELOPE *); +void mutt_shell_escape (void); +void mutt_show_error (void); +void mutt_signal_init (void); +void mutt_stamp_attachment (BODY *a); +void mutt_tabs_to_spaces (char *); +void mutt_tag_set_flag (int, int); +void mutt_unblock_signals (void); +void mutt_unblock_signals_system (int); +void mutt_update_encoding (BODY *a); +void mutt_update_tree (ATTACHPTR **, short); +void mutt_version (void); +void mutt_view_attachments (HEADER *); +void mutt_write_references (LIST *, FILE *); +void mutt_write_address_list (ADDRESS *adr, FILE *fp, int linelen, int display); +void mutt_set_virtual (CONTEXT *); + +int mutt_addr_is_user (ADDRESS *); +int mutt_addwch (wchar_t); +int mutt_alias_complete (char *, size_t); +int mutt_alloc_color (int fg, int bg); +int mutt_any_key_to_continue (const char *); +int mutt_buffy_check (int); +int mutt_buffy_notify (void); +int mutt_builtin_editor (const char *, HEADER *, HEADER *); +int mutt_can_decode (BODY *); +int mutt_change_flag (HEADER *, int); +int mutt_check_alias_name (const char *, char *); +int mutt_check_encoding (const char *); +int mutt_check_key (const char *); +int mutt_check_menu (const char *); +int mutt_check_mime_type (const char *); +int mutt_check_month (const char *); +int mutt_check_overwrite (const char *, const char *, char *, size_t, int *, char **); +int mutt_check_traditional_pgp (HEADER *, int *); +int mutt_command_complete (char *, size_t, int, int); +int mutt_var_value_complete (char *, size_t, int); +int mutt_complete (char *, size_t); +int mutt_compose_attachment (BODY *a); +int mutt_copy_body (FILE *, BODY **, BODY *); +int mutt_decode_save_attachment (FILE *, BODY *, char *, int, int); +int mutt_display_message (HEADER *h); +int mutt_edit_attachment(BODY *); +int mutt_edit_message (CONTEXT *, HEADER *); +int mutt_fetch_recips (ENVELOPE *out, ENVELOPE *in, int flags); +int mutt_chscmp (const char *s, const char *chs); +#define mutt_is_utf8(a) mutt_chscmp (a, "utf-8") +#define mutt_is_us_ascii(a) mutt_chscmp (a, "us-ascii") +int mutt_parent_message (CONTEXT *, HEADER *); +int mutt_prepare_template(FILE*, CONTEXT *, HEADER *, HEADER *, short); +int mutt_resend_message (FILE *, CONTEXT *, HEADER *); +#define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL) +int _mutt_enter_fname (const char *, char *, size_t, int *, int, int, char ***, int *); +int mutt_enter_string (char *buf, size_t buflen, int y, int x, int flags); +int _mutt_enter_string (char *, size_t, int, int, int, int, char ***, int *, ENTER_STATE *); +#define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL) +int _mutt_get_field (char *, char *, size_t, int, int, char ***, int *); +int mutt_get_hook_type (const char *); +int mutt_get_password (char *, char *, size_t); +int mutt_get_postponed (CONTEXT *, HEADER *, HEADER **, char *, size_t); +int mutt_get_tmp_attachment (BODY *); +int mutt_index_menu (void); +int mutt_invoke_mta (ADDRESS *, ADDRESS *, ADDRESS *, ADDRESS *, const char *, int); +int mutt_is_autoview (BODY *, const char *); +int mutt_is_mail_list (ADDRESS *); +int mutt_is_message_type(int, const char *); +int mutt_is_list_cc (int, ADDRESS *, ADDRESS *); +int mutt_is_list_recipient (int, ADDRESS *, ADDRESS *); +int mutt_is_subscribed_list (ADDRESS *); +int mutt_is_text_part (BODY *); +int mutt_is_valid_mailbox (const char *); +int mutt_lookup_mime_type (BODY *, const char *); +int mutt_match_rx_list (const char *, RX_LIST *); +int mutt_messages_in_thread (CONTEXT *, HEADER *, int); +int mutt_multi_choice (char *prompt, char *letters); +int mutt_needs_mailcap (BODY *); +int mutt_num_postponed (int); +int mutt_parse_bind (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_exec (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_hook (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_macro (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_mailboxes (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_push (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_rc_line (/* const */ char *, BUFFER *, BUFFER *); +int mutt_parse_rfc822_line (ENVELOPE *e, HEADER *hdr, char *line, char *p, + short user_hdrs, short weed, short do_2047, LIST **lastp); +int mutt_parse_score (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_unscore (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_unhook (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_pattern_func (int, char *); +int mutt_pipe_attachment (FILE *, BODY *, const char *, char *); +int mutt_print_attachment (FILE *, BODY *); +int mutt_query_complete (char *, size_t); +int mutt_query_variables (LIST *queries); +int mutt_save_attachment (FILE *, BODY *, char *, int, HEADER *); +void _mutt_save_message (HEADER *, CONTEXT *, int, int, int); +int mutt_save_message (HEADER *, int, int, int, int *); +int mutt_search_command (int, int); +int mutt_strwidth (const char *); +int mutt_compose_menu (HEADER *, char *, size_t, HEADER *); +int mutt_thread_set_flag (HEADER *, int, int, int); +int mutt_update_list_file (char *, char *, char *, char *); +int mutt_user_is_recipient (HEADER *); +void mutt_update_num_postponed (void); +int mutt_view_attachment (FILE*, BODY *, int, HEADER *, ATTACHPTR **, short); +int mutt_wait_filter (pid_t); +int mutt_which_case (const char *); +int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int, char *); +int mutt_write_mime_body (BODY *, FILE *); +int mutt_write_mime_header (BODY *, FILE *); +int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int); +int mutt_yesorno (const char *, int); +void mutt_set_header_color(CONTEXT *, HEADER *); +void mutt_sleep (short); +int mutt_save_confirm (const char *, struct stat *); + +int mh_valid_message (const char *); + +pid_t mutt_create_filter (const char *, FILE **, FILE **, FILE **); +pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int, int, int); + +ADDRESS *alias_reverse_lookup (ADDRESS *); + +/* base64.c */ +void mutt_to_base64 (unsigned char*, const unsigned char*, size_t, size_t); +int mutt_from_base64 (char*, const char*); + +/* utf8.c */ +int mutt_wctoutf8 (char *s, unsigned int c); + +#ifdef LOCALES_HACK +#define IsPrint(c) (isprint((unsigned char)(c)) || \ + ((unsigned char)(c) >= 0xa0)) +#define IsWPrint(wc) (iswprint(wc) || wc >= 0xa0) +#else +#define IsPrint(c) (isprint((unsigned char)(c)) || \ + (option (OPTLOCALES) ? 0 : \ + ((unsigned char)(c) >= 0xa0))) +#define IsWPrint(wc) (iswprint(wc) || \ + (option (OPTLOCALES) ? 0 : (wc >= 0xa0))) +#endif + +#define new_pattern() safe_calloc(1, sizeof (pattern_t)) + +int mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h); +pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err); +void mutt_check_simple (char *s, size_t len, const char *simple); +void mutt_pattern_free (pattern_t **pat); + +/* ---------------------------------------------------------------------------- + * Prototypes for broken systems + */ + +#ifdef HAVE_SRAND48 +#define LRAND lrand48 +#define SRAND srand48 +#define DRAND drand48 +#else +#define LRAND rand +#define SRAND srand +#define DRAND (double)rand +#endif /* HAVE_SRAND48 */ + +/* HP-UX, ConvexOS and UNIXware don't have this macro */ +#ifndef S_ISLNK +#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0) +#endif + +int getdnsdomainname (char *, size_t); + +/* According to SCO support, this is how to detect SCO */ +#if defined (_M_UNIX) || defined (M_OS) +#define SCO +#endif + +/* SCO Unix uses chsize() instead of ftruncate() */ +#ifndef HAVE_FTRUNCATE +#define ftruncate chsize +#endif + +#ifndef HAVE_SNPRINTF +extern int snprintf (char *, size_t, const char *, ...); +#endif + +#ifndef HAVE_VSNPRINTF +extern int vsnprintf (char *, size_t, const char *, va_list); +#endif + +#ifndef HAVE_STRERROR +#ifndef STDC_HEADERS +extern int sys_nerr; +extern char *sys_errlist[]; +#endif + +#define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0 +#endif /* !HAVE_STRERROR */ + +#ifndef HAVE_MEMMOVE +#define memmove(d,s,n) bcopy((s),(d),(n)) +#endif + +/* AIX doesn't define these in any headers (sigh) */ +int strcasecmp (const char *, const char *); +int strncasecmp (const char *, const char *, size_t); + +#ifdef _AIX +int setegid (gid_t); +#endif /* _AIX */ + +#ifndef STDC_HEADERS +extern FILE *fdopen (); +extern int system (); +extern int puts (); +extern int fputs (); +extern int fputc (); +extern int fseek (); +extern char *strchr (); +extern int getopt (); +extern int fputs (); +extern int fputc (); +extern int fclose (); +extern int fprintf(); +extern int printf (); +extern int fgetc (); +extern int tolower (); +extern int toupper (); +extern int sscanf (); +extern size_t fread (); +extern size_t fwrite (); +extern int system (); +extern int rename (); +extern time_t time (); +extern struct tm *localtime (); +extern char *asctime (); +extern char *strpbrk (); +extern int fflush (); +extern long lrand48 (); +extern void srand48 (); +extern time_t mktime (); +extern int vsprintf (); +extern int ungetc (); +extern char *mktemp (); +extern int ftruncate (); +extern void *memset (); +extern int pclose (); +extern int socket (); +extern int connect (); +extern size_t strftime (); +extern int lstat (); +extern void rewind (); +extern int readlink (); + +/* IRIX barfs on empty var decls because the system include file uses elipsis + in the declaration. So declare all the args to avoid compiler errors. This + should be harmless on other systems. */ +int ioctl (int, int, ...); + +#endif + +/* unsorted */ +void ci_bounce_message (HEADER *, int *); +int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *); + + diff --git a/query.c b/query.c new file mode 100644 index 0000000..87e046a --- /dev/null +++ b/query.c @@ -0,0 +1,527 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mutt_idna.h" +#include "mapping.h" +#include "sort.h" + +#include <string.h> +#include <stdlib.h> +#include <ctype.h> + +typedef struct query +{ + ADDRESS *addr; + char *name; + char *other; + struct query *next; +} QUERY; + +typedef struct entry +{ + int tagged; + QUERY *data; +} ENTRY; + +static struct mapping_t QueryHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("Mail"), OP_MAIL }, + { N_("New Query"), OP_QUERY }, + { N_("Make Alias"), OP_CREATE_ALIAS }, + { N_("Search"), OP_SEARCH }, + { N_("Help"), OP_HELP }, + { NULL } +}; + +/* Variables for outsizing output format */ +static int FirstColumn; +static int SecondColumn; + +static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf); + +static ADDRESS *result_to_addr (QUERY *r) +{ + static ADDRESS *tmp; + + tmp = rfc822_cpy_adr (r->addr); + + if(!tmp->next && !tmp->personal) + tmp->personal = safe_strdup (r->name); + + mutt_addrlist_to_idna (tmp, NULL); + return tmp; +} + +static QUERY *run_query (char *s, int quiet) +{ + FILE *fp; + QUERY *first = NULL; + QUERY *cur = NULL; + char cmd[_POSIX_PATH_MAX]; + char *buf = NULL; + size_t buflen; + int dummy = 0; + char msg[STRING]; + char *p; + pid_t thepid; + int l; + + + mutt_expand_file_fmt (cmd, sizeof(cmd), QueryCmd, s); + + if ((thepid = mutt_create_filter (cmd, NULL, &fp, NULL)) < 0) + { + dprint (1, (debugfile, "unable to fork command: %s", cmd)); + return 0; + } + if (!quiet) + mutt_message _("Waiting for response..."); + fgets (msg, sizeof (msg), fp); + if ((p = strrchr (msg, '\n'))) + *p = '\0'; + while ((buf = mutt_read_line (buf, &buflen, fp, &dummy)) != NULL) + { + if ((p = strtok(buf, "\t\n"))) + { + if (first == NULL) + { + FirstColumn = 0; + SecondColumn = 0; + first = (QUERY *) safe_calloc (1, sizeof (QUERY)); + cur = first; + } + else + { + cur->next = (QUERY *) safe_calloc (1, sizeof (QUERY)); + cur = cur->next; + } + + l = mutt_strwidth (p); + if (l > SecondColumn) + SecondColumn = l; + + cur->addr = rfc822_parse_adrlist (cur->addr, p); + p = strtok(NULL, "\t\n"); + if (p) + { + l = mutt_strwidth (p); + if (l > FirstColumn) + FirstColumn = l; + cur->name = safe_strdup (p); + p = strtok(NULL, "\t\n"); + if (p) + { + cur->other = safe_strdup (p); + } + } + } + } + FREE (&buf); + fclose (fp); + if (mutt_wait_filter (thepid)) + { + dprint (1, (debugfile, "Error: %s\n", msg)); + if (!quiet) mutt_error ("%s", msg); + } + else + { + if (!quiet) + mutt_message ("%s", msg); + } + + return first; +} + +static int query_search (MUTTMENU *m, regex_t *re, int n) +{ + ENTRY *table = (ENTRY *) m->data; + + if (table[n].data->name && !regexec (re, table[n].data->name, 0, NULL, 0)) + return 0; + if (table[n].data->other && !regexec (re, table[n].data->other, 0, NULL, 0)) + return 0; + if (table[n].data->addr) + { + if (table[n].data->addr->personal && + !regexec (re, table[n].data->addr->personal, 0, NULL, 0)) + return 0; + if (table[n].data->addr->mailbox && + !regexec (re, table[n].data->addr->mailbox, 0, NULL, 0)) + return 0; +#ifdef EXACT_ADDRESS + if (table[n].data->addr->val && + !regexec (re, table[n].data->addr->val, 0, NULL, 0)) + return 0; +#endif + } + + return REG_NOMATCH; +} + +/* This is the callback routine from mutt_menuLoop() which is used to generate + * a menu entry for the requested item number. + */ +#define QUERY_MIN_COLUMN_LENGHT 20 /* Must be < 70/2 */ +static void query_entry (char *s, size_t slen, MUTTMENU *m, int num) +{ + ENTRY *table = (ENTRY *) m->data; + char buf2[SHORT_STRING], buf[SHORT_STRING] = ""; + + /* need a query format ... hard coded constants are not good */ + while (FirstColumn + SecondColumn > 70) + { + FirstColumn = FirstColumn * 3 / 4; + SecondColumn = SecondColumn * 3 / 4; + if (FirstColumn < QUERY_MIN_COLUMN_LENGHT) + FirstColumn = QUERY_MIN_COLUMN_LENGHT; + if (SecondColumn < QUERY_MIN_COLUMN_LENGHT) + SecondColumn = QUERY_MIN_COLUMN_LENGHT; + } + + rfc822_write_address (buf, sizeof (buf), table[num].data->addr, 1); + + mutt_format_string (buf2, sizeof (buf2), + FirstColumn + 2, FirstColumn + 2, + 0, ' ', table[num].data->name, + mutt_strlen (table[num].data->name), 0); + + snprintf (s, slen, " %c %3d %s %-*.*s %s", + table[num].tagged ? '*':' ', + num+1, + buf2, + SecondColumn+2, + SecondColumn+2, + buf, + NONULL (table[num].data->other)); +} + +static int query_tag (MUTTMENU *menu, int n, int m) +{ + ENTRY *cur = &((ENTRY *) menu->data)[n]; + int ot = cur->tagged; + + cur->tagged = m >= 0 ? m : !cur->tagged; + return cur->tagged - ot; +} + +int mutt_query_complete (char *buf, size_t buflen) +{ + QUERY *results = NULL; + ADDRESS *tmpa; + + if (!QueryCmd) + { + mutt_error _("Query command not defined."); + return 0; + } + + results = run_query (buf, 1); + if (results) + { + /* only one response? */ + if (results->next == NULL) + { + tmpa = result_to_addr (results); + mutt_addrlist_to_local (tmpa); + buf[0] = '\0'; + rfc822_write_address (buf, buflen, tmpa, 0); + rfc822_free_address (&tmpa); + mutt_clear_error (); + return (0); + } + /* multiple results, choose from query menu */ + query_menu (buf, buflen, results, 1); + } + return (0); +} + +void mutt_query_menu (char *buf, size_t buflen) +{ + if (!QueryCmd) + { + mutt_error _("Query command not defined."); + return; + } + + if (buf == NULL) + { + char buffer[STRING] = ""; + + query_menu (buffer, sizeof (buffer), NULL, 0); + } + else + { + query_menu (buf, buflen, NULL, 1); + } +} + +static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf) +{ + MUTTMENU *menu; + HEADER *msg = NULL; + ENTRY *QueryTable = NULL; + QUERY *queryp = NULL; + int i, done = 0; + int op; + char helpstr[SHORT_STRING]; + char title[STRING]; + + snprintf (title, sizeof (title), _("Query")); /* FIXME */ + + menu = mutt_new_menu (); + menu->make_entry = query_entry; + menu->search = query_search; + menu->tag = query_tag; + menu->menu = MENU_QUERY; + menu->title = title; + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_QUERY, QueryHelp); + + if (results == NULL) + { + /* Prompt for Query */ + if (mutt_get_field (_("Query: "), buf, buflen, 0) == 0 && buf[0]) + { + results = run_query (buf, 0); + } + } + + if (results) + { + snprintf (title, sizeof (title), _("Query '%s'"), buf); + + /* count the number of results */ + for (queryp = results; queryp; queryp = queryp->next) + menu->max++; + + menu->data = QueryTable = (ENTRY *) safe_calloc (menu->max, sizeof (ENTRY)); + + for (i = 0, queryp = results; queryp; queryp = queryp->next, i++) + QueryTable[i].data = queryp; + + while (!done) + { + switch ((op = mutt_menuLoop (menu))) + { + case OP_QUERY_APPEND: + case OP_QUERY: + if (mutt_get_field (_("Query: "), buf, buflen, 0) == 0 && buf[0]) + { + QUERY *newresults = NULL; + + newresults = run_query (buf, 0); + + menu->redraw = REDRAW_FULL; + if (newresults) + { + snprintf (title, sizeof (title), _("Query '%s'"), buf); + + if (op == OP_QUERY) + { + queryp = results; + while (queryp) + { + rfc822_free_address (&queryp->addr); + FREE (&queryp->name); + FREE (&queryp->other); + results = queryp->next; + FREE (&queryp); + queryp = results; + } + results = newresults; + FREE (&QueryTable); + } + else + { + /* append */ + for (queryp = results; queryp->next; queryp = queryp->next); + + queryp->next = newresults; + } + + + menu->current = 0; + mutt_menuDestroy (&menu); + menu = mutt_new_menu (); + menu->make_entry = query_entry; + menu->search = query_search; + menu->tag = query_tag; + menu->menu = MENU_QUERY; + menu->title = title; + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_QUERY, QueryHelp); + + /* count the number of results */ + for (queryp = results; queryp; queryp = queryp->next) + menu->max++; + + if (op == OP_QUERY) + { + menu->data = QueryTable = + (ENTRY *) safe_calloc (menu->max, sizeof (ENTRY)); + + for (i = 0, queryp = results; queryp; + queryp = queryp->next, i++) + QueryTable[i].data = queryp; + } + else + { + int clear = 0; + + /* append */ + safe_realloc (&QueryTable, menu->max * sizeof (ENTRY)); + + menu->data = QueryTable; + + for (i = 0, queryp = results; queryp; + queryp = queryp->next, i++) + { + /* once we hit new entries, clear/init the tag */ + if (queryp == newresults) + clear = 1; + + QueryTable[i].data = queryp; + if (clear) + QueryTable[i].tagged = 0; + } + } + } + } + break; + + case OP_CREATE_ALIAS: + if (menu->tagprefix) + { + ADDRESS *naddr = NULL; + + for (i = 0; i < menu->max; i++) + if (QueryTable[i].tagged) + { + ADDRESS *a = result_to_addr(QueryTable[i].data); + rfc822_append (&naddr, a); + rfc822_free_address (&a); + } + + mutt_create_alias (NULL, naddr); + } + else + { + ADDRESS *a = result_to_addr(QueryTable[menu->current].data); + mutt_create_alias (NULL, a); + rfc822_free_address (&a); + } + break; + + case OP_GENERIC_SELECT_ENTRY: + if (retbuf) + { + done = 2; + break; + } + /* fall through to OP_MAIL */ + + case OP_MAIL: + msg = mutt_new_header (); + msg->env = mutt_new_envelope (); + if (!menu->tagprefix) + { + msg->env->to = result_to_addr(QueryTable[menu->current].data); + } + else + { + for (i = 0; i < menu->max; i++) + if (QueryTable[i].tagged) + { + ADDRESS *a = result_to_addr(QueryTable[i].data); + rfc822_append (&msg->env->to, a); + rfc822_free_address (&a); + } + } + ci_send_message (0, msg, NULL, Context, NULL); + menu->redraw = REDRAW_FULL; + break; + + case OP_EXIT: + done = 1; + break; + } + } + + /* if we need to return the selected entries */ + if (retbuf && (done == 2)) + { + int tagged = 0; + size_t curpos = 0; + + memset (buf, 0, buflen); + + /* check for tagged entries */ + for (i = 0; i < menu->max; i++) + { + if (QueryTable[i].tagged) + { + if (curpos == 0) + { + ADDRESS *tmpa = result_to_addr (QueryTable[i].data); + mutt_addrlist_to_local (tmpa); + tagged = 1; + rfc822_write_address (buf, buflen, tmpa, 0); + curpos = mutt_strlen (buf); + rfc822_free_address (&tmpa); + } + else if (curpos + 2 < buflen) + { + ADDRESS *tmpa = result_to_addr (QueryTable[i].data); + mutt_addrlist_to_local (tmpa); + strcat (buf, ", "); /* __STRCAT_CHECKED__ */ + rfc822_write_address ((char *) buf + curpos + 1, buflen - curpos - 1, + tmpa, 0); + curpos = mutt_strlen (buf); + rfc822_free_address (&tmpa); + } + } + } + /* then enter current message */ + if (!tagged) + { + ADDRESS *tmpa = result_to_addr (QueryTable[menu->current].data); + mutt_addrlist_to_local (tmpa); + rfc822_write_address (buf, buflen, tmpa, 0); + rfc822_free_address (&tmpa); + } + + } + + queryp = results; + while (queryp) + { + rfc822_free_address (&queryp->addr); + FREE (&queryp->name); + FREE (&queryp->other); + results = queryp->next; + FREE (&queryp); + queryp = results; + } + FREE (&QueryTable); + + /* tell whoever called me to redraw the screen when I return */ + set_option (OPTNEEDREDRAW); + } + + mutt_menuDestroy (&menu); +} diff --git a/recvattach.c b/recvattach.c new file mode 100644 index 0000000..cfea588 --- /dev/null +++ b/recvattach.c @@ -0,0 +1,1232 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "rfc1524.h" +#include "mime.h" +#include "mailbox.h" +#include "attach.h" +#include "mapping.h" +#include "mx.h" +#include "copy.h" +#include "mutt_crypt.h" + +#include <ctype.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> +#include <sys/stat.h> +#include <string.h> +#include <errno.h> + +static const char *Mailbox_is_read_only = N_("Mailbox is read-only."); + +#define CHECK_READONLY if (Context->readonly) \ +{\ + mutt_flushinp (); \ + mutt_error _(Mailbox_is_read_only); \ + break; \ +} + +static struct mapping_t AttachHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("Save"), OP_SAVE }, + { N_("Pipe"), OP_PIPE }, + { N_("Print"), OP_PRINT }, + { N_("Help"), OP_HELP }, + { NULL } +}; + +void mutt_update_tree (ATTACHPTR **idx, short idxlen) +{ + char buf[STRING]; + char *s; + int x; + + for (x = 0; x < idxlen; x++) + { + idx[x]->num = x; + if (2 * (idx[x]->level + 2) < sizeof (buf)) + { + if (idx[x]->level) + { + s = buf + 2 * (idx[x]->level - 1); + *s++ = (idx[x]->content->next) ? M_TREE_LTEE : M_TREE_LLCORNER; + *s++ = M_TREE_HLINE; + *s++ = M_TREE_RARROW; + } + else + s = buf; + *s = 0; + } + + if (idx[x]->tree) + { + if (mutt_strcmp (idx[x]->tree, buf) != 0) + mutt_str_replace (&idx[x]->tree, buf); + } + else + idx[x]->tree = safe_strdup (buf); + + if (2 * (idx[x]->level + 2) < sizeof (buf) && idx[x]->level) + { + s = buf + 2 * (idx[x]->level - 1); + *s++ = (idx[x]->content->next) ? '\005' : '\006'; + *s++ = '\006'; + } + } +} + +ATTACHPTR **mutt_gen_attach_list (BODY *m, + int parent_type, + ATTACHPTR **idx, + short *idxlen, + short *idxmax, + int level, + int compose) +{ + ATTACHPTR *new; + int i; + + for (; m; m = m->next) + { + if (*idxlen == *idxmax) + { + safe_realloc (&idx, sizeof (ATTACHPTR *) * ((*idxmax) += 5)); + for (i = *idxlen; i < *idxmax; i++) + idx[i] = NULL; + } + + if (m->type == TYPEMULTIPART && m->parts + && (compose || (parent_type == -1 && ascii_strcasecmp ("alternative", m->subtype))) + && (!(WithCrypto & APPLICATION_PGP) || !mutt_is_multipart_encrypted(m)) + ) + { + idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax, level, compose); + } + else + { + if (!idx[*idxlen]) + idx[*idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR)); + + new = idx[(*idxlen)++]; + new->content = m; + m->aptr = new; + new->parent_type = parent_type; + new->level = level; + + /* We don't support multipart messages in the compose menu yet */ + if (!compose && !m->collapsed && + ((m->type == TYPEMULTIPART + && (!(WithCrypto & APPLICATION_PGP) + || !mutt_is_multipart_encrypted (m)) + ) + || mutt_is_message_type(m->type, m->subtype))) + { + idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax, level + 1, compose); + } + } + } + + if (level == 0) + mutt_update_tree (idx, *idxlen); + + return (idx); +} + +/* %c = character set: convert? + * %C = character set + * %D = deleted flag + * %d = description + * %e = MIME content-transfer-encoding + * %f = filename + * %I = content-disposition, either I (inline) or A (attachment) + * %t = tagged flag + * %T = tree chars + * %m = major MIME type + * %M = MIME subtype + * %n = attachment number + * %s = size + * %u = unlink + */ +const char *mutt_attach_fmt (char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags) +{ + char fmt[16]; + char tmp[SHORT_STRING]; + char charset[SHORT_STRING]; + ATTACHPTR *aptr = (ATTACHPTR *) data; + int optional = (flags & M_FORMAT_OPTIONAL); + size_t l; + + switch (op) + { + case 'C': + if (!optional) + { + if (mutt_is_text_part (aptr->content) && + mutt_get_body_charset (charset, sizeof (charset), aptr->content)) + mutt_format_s (dest, destlen, prefix, charset); + else + mutt_format_s (dest, destlen, prefix, ""); + } + else if (!mutt_is_text_part (aptr->content) || + !mutt_get_body_charset (charset, sizeof (charset), aptr->content)) + optional = 0; + break; + case 'c': + /* XXX */ + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sc", prefix); + snprintf (dest, destlen, fmt, aptr->content->type != TYPETEXT || + aptr->content->noconv ? 'n' : 'c'); + } + else if (aptr->content->type != TYPETEXT || aptr->content->noconv) + optional = 0; + break; + case 'd': + if(!optional) + { + if (aptr->content->description) + { + mutt_format_s (dest, destlen, prefix, aptr->content->description); + break; + } + if (mutt_is_message_type(aptr->content->type, aptr->content->subtype) && + MsgFmt && aptr->content->hdr) + { + char s[SHORT_STRING]; + _mutt_make_string (s, sizeof (s), MsgFmt, NULL, aptr->content->hdr, + M_FORMAT_FORCESUBJ | M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR); + if (*s) + { + mutt_format_s (dest, destlen, prefix, s); + break; + } + } + if (!aptr->content->filename) + { + mutt_format_s (dest, destlen, prefix, "<no description>"); + break; + } + } + else if(aptr->content->description || + (mutt_is_message_type (aptr->content->type, aptr->content->subtype) + && MsgFmt && aptr->content->hdr)) + break; + /* FALLS THROUGH TO 'f' */ + case 'f': + if(!optional) + { + if (aptr->content->filename && *aptr->content->filename == '/') + { + char path[_POSIX_PATH_MAX]; + + strfcpy (path, aptr->content->filename, sizeof (path)); + mutt_pretty_mailbox (path); + mutt_format_s (dest, destlen, prefix, path); + } + else + mutt_format_s (dest, destlen, prefix, NONULL (aptr->content->filename)); + } + else if(!aptr->content->filename) + optional = 0; + break; + case 'D': + if(!optional) + snprintf (dest, destlen, "%c", aptr->content->deleted ? 'D' : ' '); + else if(!aptr->content->deleted) + optional = 0; + break; + case 'e': + if(!optional) + mutt_format_s (dest, destlen, prefix, + ENCODING (aptr->content->encoding)); + break; + case 'I': + if (!optional) + { + snprintf (dest, destlen, "%c", + (aptr->content->disposition == DISPINLINE) ? 'I' : 'A'); + } + break; + case 'm': + if(!optional) + mutt_format_s (dest, destlen, prefix, TYPE (aptr->content)); + break; + case 'M': + if(!optional) + mutt_format_s (dest, destlen, prefix, aptr->content->subtype); + else if(!aptr->content->subtype) + optional = 0; + break; + case 'n': + if(!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, aptr->num + 1); + } + break; + case 's': + if (flags & M_FORMAT_STAT_FILE) + { + struct stat st; + stat (aptr->content->filename, &st); + l = st.st_size; + } + else + l = aptr->content->length; + + if(!optional) + { + mutt_pretty_size (tmp, sizeof(tmp), l); + mutt_format_s (dest, destlen, prefix, tmp); + } + else if (l == 0) + optional = 0; + + break; + case 't': + if(!optional) + snprintf (dest, destlen, "%c", aptr->content->tagged ? '*' : ' '); + else if(!aptr->content->tagged) + optional = 0; + break; + case 'T': + if(!optional) + mutt_format_s_tree (dest, destlen, prefix, NONULL (aptr->tree)); + else if (!aptr->tree) + optional = 0; + break; + case 'u': + if(!optional) + snprintf (dest, destlen, "%c", aptr->content->unlink ? '-' : ' '); + else if (!aptr->content->unlink) + optional = 0; + break; + default: + *dest = 0; + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0); + return (src); +} + +void attach_entry (char *b, size_t blen, MUTTMENU *menu, int num) +{ + mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **)menu->data)[num]), M_FORMAT_ARROWCURSOR); +} + +int mutt_tag_attach (MUTTMENU *menu, int n, int m) +{ + BODY *cur = ((ATTACHPTR **) menu->data)[n]->content; + int ot = cur->tagged; + + cur->tagged = (m >= 0 ? m : !cur->tagged); + return cur->tagged - ot; +} + +int mutt_is_message_type (int type, const char *subtype) +{ + if (type != TYPEMESSAGE) + return 0; + + subtype = NONULL(subtype); + return (ascii_strcasecmp (subtype, "rfc822") == 0 || ascii_strcasecmp (subtype, "news") == 0); +} + +static int mutt_query_save_attachment (FILE *fp, BODY *body, HEADER *hdr, char **directory) +{ + char *prompt; + char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX]; + int is_message; + int append = 0; + int rc; + + if (body->filename) + { + if (directory && *directory) + mutt_concat_path (buf, *directory, mutt_basename (body->filename), sizeof (buf)); + else + strfcpy (buf, body->filename, sizeof (buf)); + } + else if(body->hdr && + body->encoding != ENCBASE64 && + body->encoding != ENCQUOTEDPRINTABLE && + mutt_is_message_type(body->type, body->subtype)) + mutt_default_save(buf, sizeof(buf), body->hdr); + else + buf[0] = 0; + + prompt = _("Save to file: "); + while (prompt) + { + if (mutt_get_field (prompt, buf, sizeof (buf), M_FILE | M_CLEAR) != 0 + || !buf[0]) + return -1; + + prompt = NULL; + mutt_expand_path (buf, sizeof (buf)); + + is_message = (fp && + body->hdr && + body->encoding != ENCBASE64 && + body->encoding != ENCQUOTEDPRINTABLE && + mutt_is_message_type (body->type, body->subtype)); + + if (is_message) + { + struct stat st; + + /* check to make sure that this file is really the one the user wants */ + if ((rc = mutt_save_confirm (buf, &st)) == 1) + { + prompt = _("Save to file: "); + continue; + } + else if (rc == -1) + return -1; + strfcpy(tfile, buf, sizeof(tfile)); + } + else + { + if ((rc = mutt_check_overwrite (body->filename, buf, tfile, sizeof (tfile), &append, directory)) == -1) + return -1; + else if (rc == 1) + { + prompt = _("Save to file: "); + continue; + } + } + + mutt_message _("Saving..."); + if (mutt_save_attachment (fp, body, tfile, append, (hdr || !is_message) ? hdr : body->hdr) == 0) + { + mutt_message _("Attachment saved."); + return 0; + } + else + { + prompt = _("Save to file: "); + continue; + } + } + return 0; +} + +void mutt_save_attachment_list (FILE *fp, int tag, BODY *top, HEADER *hdr, MUTTMENU *menu) +{ + char buf[_POSIX_PATH_MAX], tfile[_POSIX_PATH_MAX]; + char *directory = NULL; + int rc = 1; + int last = menu ? menu->current : -1; + FILE *fpout; + + buf[0] = 0; + + for (; top; top = top->next) + { + if (!tag || top->tagged) + { + if (!option (OPTATTACHSPLIT)) + { + if (!buf[0]) + { + int append = 0; + + strfcpy (buf, NONULL (top->filename), sizeof (buf)); + if (mutt_get_field (_("Save to file: "), buf, sizeof (buf), + M_FILE | M_CLEAR) != 0 || !buf[0]) + return; + mutt_expand_path (buf, sizeof (buf)); + if (mutt_check_overwrite (top->filename, buf, tfile, + sizeof (tfile), &append, NULL)) + return; + rc = mutt_save_attachment (fp, top, tfile, append, hdr); + if (rc == 0 && AttachSep && (fpout = fopen (tfile,"a")) != NULL) + { + fprintf(fpout, "%s", AttachSep); + fclose (fpout); + } + } + else + { + rc = mutt_save_attachment (fp, top, tfile, M_SAVE_APPEND, hdr); + if (rc == 0 && AttachSep && (fpout = fopen (tfile,"a")) != NULL) + { + fprintf(fpout, "%s", AttachSep); + fclose (fpout); + } + } + } + else + { + if (tag && menu && top->aptr) + { + menu->oldcurrent = menu->current; + menu->current = top->aptr->num; + menu_check_recenter (menu); + menu->redraw |= REDRAW_MOTION; + + menu_redraw (menu); + } + if (mutt_query_save_attachment (fp, top, hdr, &directory) == -1) + break; + } + } + else if (top->parts) + mutt_save_attachment_list (fp, 1, top->parts, hdr, menu); + if (!tag) + break; + } + + FREE (&directory); + + if (tag && menu) + { + menu->oldcurrent = menu->current; + menu->current = last; + menu_check_recenter (menu); + menu->redraw |= REDRAW_MOTION; + } + + if (!option (OPTATTACHSPLIT) && (rc == 0)) + mutt_message _("Attachment saved."); +} + +static void +mutt_query_pipe_attachment (char *command, FILE *fp, BODY *body, int filter) +{ + char tfile[_POSIX_PATH_MAX]; + char warning[STRING+_POSIX_PATH_MAX]; + + if (filter) + { + snprintf (warning, sizeof (warning), + _("WARNING! You are about to overwrite %s, continue?"), + body->filename); + if (mutt_yesorno (warning, M_NO) != M_YES) { + CLEARLINE (LINES-1); + return; + } + mutt_mktemp (tfile); + } + else + tfile[0] = 0; + + if (mutt_pipe_attachment (fp, body, command, tfile)) + { + if (filter) + { + mutt_unlink (body->filename); + mutt_rename_file (tfile, body->filename); + mutt_update_encoding (body); + mutt_message _("Attachment filtered."); + } + } + else + { + if (filter && tfile[0]) + mutt_unlink (tfile); + } +} + +static void pipe_attachment (FILE *fp, BODY *b, STATE *state) +{ + FILE *ifp; + + if (fp) + { + state->fpin = fp; + mutt_decode_attachment (b, state); + if (AttachSep) + state_puts (AttachSep, state); + } + else + { + if ((ifp = fopen (b->filename, "r")) == NULL) + { + mutt_perror ("fopen"); + return; + } + mutt_copy_stream (ifp, state->fpout); + fclose (ifp); + if (AttachSep) + state_puts (AttachSep, state); + } +} + +static void +pipe_attachment_list (char *command, FILE *fp, int tag, BODY *top, int filter, + STATE *state) +{ + for (; top; top = top->next) + { + if (!tag || top->tagged) + { + if (!filter && !option (OPTATTACHSPLIT)) + pipe_attachment (fp, top, state); + else + mutt_query_pipe_attachment (command, fp, top, filter); + } + else if (top->parts) + pipe_attachment_list (command, fp, tag, top->parts, filter, state); + if (!tag) + break; + } +} + +void mutt_pipe_attachment_list (FILE *fp, int tag, BODY *top, int filter) +{ + STATE state; + char buf[SHORT_STRING]; + pid_t thepid; + + if (fp) + filter = 0; /* sanity check: we can't filter in the recv case yet */ + + buf[0] = 0; + memset (&state, 0, sizeof (STATE)); + + if (mutt_get_field ((filter ? _("Filter through: ") : _("Pipe to: ")), + buf, sizeof (buf), M_CMD) != 0 || !buf[0]) + return; + + mutt_expand_path (buf, sizeof (buf)); + + if (!filter && !option (OPTATTACHSPLIT)) + { + mutt_endwin (NULL); + thepid = mutt_create_filter (buf, &state.fpout, NULL, NULL); + pipe_attachment_list (buf, fp, tag, top, filter, &state); + fclose (state.fpout); + if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + } + else + pipe_attachment_list (buf, fp, tag, top, filter, &state); +} + +static int can_print (BODY *top, int tag) +{ + char type [STRING]; + + for (; top; top = top->next) + { + snprintf (type, sizeof (type), "%s/%s", TYPE (top), top->subtype); + if (!tag || top->tagged) + { + if (!rfc1524_mailcap_lookup (top, type, NULL, M_PRINT)) + { + if (ascii_strcasecmp ("text/plain", top->subtype) && + ascii_strcasecmp ("application/postscript", top->subtype)) + { + if (!mutt_can_decode (top)) + { + mutt_error (_("I dont know how to print %s attachments!"), type); + return (0); + } + } + } + } + else if (top->parts) + return (can_print (top->parts, tag)); + if (!tag) + break; + } + return (1); +} + +static void print_attachment_list (FILE *fp, int tag, BODY *top, STATE *state) +{ + char type [STRING]; + + + for (; top; top = top->next) + { + if (!tag || top->tagged) + { + snprintf (type, sizeof (type), "%s/%s", TYPE (top), top->subtype); + if (!option (OPTATTACHSPLIT) && !rfc1524_mailcap_lookup (top, type, NULL, M_PRINT)) + { + if (!ascii_strcasecmp ("text/plain", top->subtype) || + !ascii_strcasecmp ("application/postscript", top->subtype)) + pipe_attachment (fp, top, state); + else if (mutt_can_decode (top)) + { + /* decode and print */ + + char newfile[_POSIX_PATH_MAX] = ""; + FILE *ifp; + + mutt_mktemp (newfile); + if (mutt_decode_save_attachment (fp, top, newfile, M_PRINTING, 0) == 0) + { + if ((ifp = fopen (newfile, "r")) != NULL) + { + mutt_copy_stream (ifp, state->fpout); + fclose (ifp); + if (AttachSep) + state_puts (AttachSep, state); + } + } + mutt_unlink (newfile); + } + } + else + mutt_print_attachment (fp, top); + } + else if (top->parts) + print_attachment_list (fp, tag, top->parts, state); + if (!tag) + return; + } +} + +void mutt_print_attachment_list (FILE *fp, int tag, BODY *top) +{ + STATE state; + + pid_t thepid; + if (query_quadoption (OPT_PRINT, tag ? _("Print tagged attachment(s)?") : _("Print attachment?")) != M_YES) + return; + + if (!option (OPTATTACHSPLIT)) + { + if (!can_print (top, tag)) + return; + mutt_endwin (NULL); + memset (&state, 0, sizeof (STATE)); + thepid = mutt_create_filter (NONULL (PrintCmd), &state.fpout, NULL, NULL); + print_attachment_list (fp, tag, top, &state); + fclose (state.fpout); + if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY)) + mutt_any_key_to_continue (NULL); + } + else + print_attachment_list (fp, tag, top, &state); +} + +void +mutt_update_attach_index (BODY *cur, ATTACHPTR ***idxp, + short *idxlen, short *idxmax, + MUTTMENU *menu) +{ + ATTACHPTR **idx = *idxp; + while (--(*idxlen) >= 0) + idx[(*idxlen)]->content = NULL; + *idxlen = 0; + + idx = *idxp = mutt_gen_attach_list (cur, -1, idx, idxlen, idxmax, 0, 0); + + menu->max = *idxlen; + menu->data = *idxp; + + if (menu->current >= menu->max) + menu->current = menu->max - 1; + menu_check_recenter (menu); + menu->redraw |= REDRAW_INDEX; + +} + + +int +mutt_attach_display_loop (MUTTMENU *menu, int op, FILE *fp, HEADER *hdr, + BODY *cur, ATTACHPTR ***idxp, short *idxlen, short *idxmax, + int recv) +{ + ATTACHPTR **idx = *idxp; +#if 0 + int old_optweed = option (OPTWEED); + set_option (OPTWEED); +#endif + + do + { + switch (op) + { + case OP_DISPLAY_HEADERS: + toggle_option (OPTWEED); + /* fall through */ + + case OP_VIEW_ATTACH: + op = mutt_view_attachment (fp, idx[menu->current]->content, M_REGULAR, + hdr, idx, *idxlen); + break; + + case OP_NEXT_ENTRY: + case OP_MAIN_NEXT_UNDELETED: /* hack */ + if (menu->current < menu->max - 1) + { + menu->current++; + op = OP_VIEW_ATTACH; + } + else + op = OP_NULL; + break; + case OP_PREV_ENTRY: + case OP_MAIN_PREV_UNDELETED: /* hack */ + if (menu->current > 0) + { + menu->current--; + op = OP_VIEW_ATTACH; + } + else + op = OP_NULL; + break; + case OP_EDIT_TYPE: + /* when we edit the content-type, we should redisplay the attachment + immediately */ + mutt_edit_content_type (hdr, idx[menu->current]->content, fp); + if (idxmax) + { + mutt_update_attach_index (cur, idxp, idxlen, idxmax, menu); + idx = *idxp; + } + op = OP_VIEW_ATTACH; + break; + /* functions which are passed through from the pager */ + case OP_CHECK_TRADITIONAL: + if (!(WithCrypto & APPLICATION_PGP)) + { + op = OP_NULL; + break; + } + /* fall through */ + case OP_ATTACH_COLLAPSE: + if (recv) + return op; + default: + op = OP_NULL; + } + } + while (op != OP_NULL); + +#if 0 + if (option (OPTWEED) != old_optweed) + toggle_option (OPTWEED); +#endif + return op; +} + +static void attach_collapse (BODY *b, short collapse, short init, short just_one) +{ + short i; + for (; b; b = b->next) + { + i = init || b->collapsed; + if (i && option (OPTDIGESTCOLLAPSE) && b->type == TYPEMULTIPART + && !ascii_strcasecmp (b->subtype, "digest")) + attach_collapse (b->parts, 1, 1, 0); + else if (b->type == TYPEMULTIPART || mutt_is_message_type (b->type, b->subtype)) + attach_collapse (b->parts, collapse, i, 0); + b->collapsed = collapse; + if (just_one) + return; + } +} + +void mutt_attach_init (BODY *b) +{ + for (; b; b = b->next) + { + b->tagged = 0; + b->collapsed = 0; + if (b->parts) + mutt_attach_init (b->parts); + } +} + +static const char *Function_not_permitted = N_("Function not permitted in attach-message mode."); + +#define CHECK_ATTACH if(option(OPTATTACHMSG)) \ + {\ + mutt_flushinp (); \ + mutt_error _(Function_not_permitted); \ + break; \ + } + + + + +void mutt_view_attachments (HEADER *hdr) +{ + int secured = 0; + int need_secured = 0; + + char helpstr[SHORT_STRING]; + MUTTMENU *menu; + BODY *cur; + MESSAGE *msg; + FILE *fp; + ATTACHPTR **idx = NULL; + short idxlen = 0; + short idxmax = 0; + int flags = 0; + int op = OP_NULL; + + /* make sure we have parsed this message */ + mutt_parse_mime_message (Context, hdr); + + mutt_message_hook (Context, hdr, M_MESSAGEHOOK); + + if ((msg = mx_open_message (Context, hdr->msgno)) == NULL) + return; + + + if (WithCrypto && ((hdr->security & ENCRYPT) || + (mutt_is_application_smime(hdr->content) & SMIMEOPAQUE))) + { + need_secured = 1; + + if ((hdr->security & ENCRYPT) && !crypt_valid_passphrase(hdr->security)) + { + mx_close_message (&msg); + return; + } + if ((WithCrypto & APPLICATION_SMIME) && hdr->security & APPLICATION_SMIME) + { + if (hdr->env) + crypt_smime_getkeys (hdr->env); + + if (mutt_is_application_smime(hdr->content)) + secured = ! crypt_smime_decrypt_mime (msg->fp, &fp, + hdr->content, &cur); + else + need_secured = 0; + } + if ((WithCrypto & APPLICATION_PGP) && hdr->security & APPLICATION_PGP) + { + if (mutt_is_multipart_encrypted(hdr->content)) + secured = !crypt_pgp_decrypt_mime (msg->fp, &fp, hdr->content, &cur); + else + need_secured = 0; + } + + if (need_secured && !secured) + { + mx_close_message (&msg); + mutt_error _("Can't decrypt encrypted message!"); + return; + } + } + + if (!WithCrypto || !need_secured) + { + fp = msg->fp; + cur = hdr->content; + } + + menu = mutt_new_menu (); + menu->menu = MENU_ATTACH; + menu->title = _("Attachments"); + menu->make_entry = attach_entry; + menu->tag = mutt_tag_attach; + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_ATTACH, AttachHelp); + + mutt_attach_init (cur); + attach_collapse (cur, 0, 1, 0); + mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu); + + FOREVER + { + if (op == OP_NULL) + op = mutt_menuLoop (menu); + switch (op) + { + case OP_ATTACH_VIEW_MAILCAP: + mutt_view_attachment (fp, idx[menu->current]->content, M_MAILCAP, + hdr, idx, idxlen); + menu->redraw = REDRAW_FULL; + break; + + case OP_ATTACH_VIEW_TEXT: + mutt_view_attachment (fp, idx[menu->current]->content, M_AS_TEXT, + hdr, idx, idxlen); + menu->redraw = REDRAW_FULL; + break; + + case OP_DISPLAY_HEADERS: + case OP_VIEW_ATTACH: + op = mutt_attach_display_loop (menu, op, fp, hdr, cur, &idx, &idxlen, &idxmax, 1); + menu->redraw = REDRAW_FULL; + continue; + + case OP_ATTACH_COLLAPSE: + if (!idx[menu->current]->content->parts) + { + mutt_error _("There are no subparts to show!"); + break; + } + if (!idx[menu->current]->content->collapsed) + attach_collapse (idx[menu->current]->content, 1, 0, 1); + else + attach_collapse (idx[menu->current]->content, 0, 1, 1); + mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu); + break; + + case OP_FORGET_PASSPHRASE: + crypt_forget_passphrase (); + break; + + case OP_EXTRACT_KEYS: + if ((WithCrypto & APPLICATION_PGP)) + { + crypt_pgp_extract_keys_from_attachment_list (fp, menu->tagprefix, + menu->tagprefix ? cur : idx[menu->current]->content); + menu->redraw = REDRAW_FULL; + } + break; + + case OP_CHECK_TRADITIONAL: + if ((WithCrypto & APPLICATION_PGP) + && crypt_pgp_check_traditional (fp, menu->tagprefix ? cur + : idx[menu->current]->content, + menu->tagprefix)) + { + hdr->security = crypt_query (cur); + menu->redraw = REDRAW_FULL; + } + break; + + case OP_PRINT: + mutt_print_attachment_list (fp, menu->tagprefix, + menu->tagprefix ? cur : idx[menu->current]->content); + break; + + case OP_PIPE: + mutt_pipe_attachment_list (fp, menu->tagprefix, + menu->tagprefix ? cur : idx[menu->current]->content, 0); + break; + + case OP_SAVE: + mutt_save_attachment_list (fp, menu->tagprefix, + menu->tagprefix ? cur : idx[menu->current]->content, hdr, menu); + + if (!menu->tagprefix && option (OPTRESOLVE) && menu->current < menu->max - 1) + menu->current++; + + menu->redraw = REDRAW_MOTION_RESYNCH | REDRAW_FULL; + break; + + case OP_DELETE: + CHECK_READONLY; + +#ifdef USE_POP + if (Context->magic == M_POP) + { + mutt_flushinp (); + mutt_error _("Can't delete attachment from POP server."); + break; + } +#endif + +#ifdef USE_NNTP + if (Context->magic == M_NNTP) + { + mutt_flushinp (); + mutt_error _("Can't delete attachment from newsserver."); + break; + } +#endif + + if (WithCrypto && hdr->security) + { + mutt_message _( + "Deletion of attachments from encrypted messages is unsupported."); + } + else + { + if (!menu->tagprefix) + { + if (idx[menu->current]->parent_type == TYPEMULTIPART) + { + idx[menu->current]->content->deleted = 1; + if (option (OPTRESOLVE) && menu->current < menu->max - 1) + { + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + } + else + mutt_message _( + "Only deletion of multipart attachments is supported."); + } + else + { + int x; + + for (x = 0; x < menu->max; x++) + { + if (idx[x]->content->tagged) + { + if (idx[x]->parent_type == TYPEMULTIPART) + { + idx[x]->content->deleted = 1; + menu->redraw = REDRAW_INDEX; + } + else + mutt_message _( + "Only deletion of multipart attachments is supported."); + } + } + } + } + break; + + case OP_UNDELETE: + CHECK_READONLY; + if (!menu->tagprefix) + { + idx[menu->current]->content->deleted = 0; + if (option (OPTRESOLVE) && menu->current < menu->max - 1) + { + menu->current++; + menu->redraw = REDRAW_MOTION_RESYNCH; + } + else + menu->redraw = REDRAW_CURRENT; + } + else + { + int x; + + for (x = 0; x < menu->max; x++) + { + if (idx[x]->content->tagged) + { + idx[x]->content->deleted = 0; + menu->redraw = REDRAW_INDEX; + } + } + } + break; + + case OP_RESEND: + CHECK_ATTACH; + mutt_attach_resend (fp, hdr, idx, idxlen, + menu->tagprefix ? NULL : idx[menu->current]->content); + menu->redraw = REDRAW_FULL; + break; + + case OP_BOUNCE_MESSAGE: + CHECK_ATTACH; + mutt_attach_bounce (fp, hdr, idx, idxlen, + menu->tagprefix ? NULL : idx[menu->current]->content); + menu->redraw = REDRAW_FULL; + break; + + case OP_FORWARD_MESSAGE: + CHECK_ATTACH; + mutt_attach_forward (fp, hdr, idx, idxlen, + menu->tagprefix ? NULL : idx[menu->current]->content, 0); + menu->redraw = REDRAW_FULL; + break; + +#ifdef USE_NNTP + case OP_FORWARD_TO_GROUP: + CHECK_ATTACH; + mutt_attach_forward (fp, hdr, idx, idxlen, + menu->tagprefix ? NULL : idx[menu->current]->content, SENDNEWS); + menu->redraw = REDRAW_FULL; + break; + + case OP_FOLLOWUP: + CHECK_ATTACH; + + if (!idx[menu->current]->content->hdr->env->followup_to || + mutt_strcasecmp (idx[menu->current]->content->hdr->env->followup_to, "poster") || + query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES) + { + mutt_attach_reply (fp, hdr, idx, idxlen, + menu->tagprefix ? NULL : idx[menu->current]->content, + SENDNEWS|SENDREPLY); + menu->redraw = REDRAW_FULL; + break; + } +#endif + + case OP_REPLY: + case OP_GROUP_REPLY: + case OP_LIST_REPLY: + + CHECK_ATTACH; + + flags = SENDREPLY | + (op == OP_GROUP_REPLY ? SENDGROUPREPLY : 0) | + (op == OP_LIST_REPLY ? SENDLISTREPLY : 0); + mutt_attach_reply (fp, hdr, idx, idxlen, + menu->tagprefix ? NULL : idx[menu->current]->content, flags); + menu->redraw = REDRAW_FULL; + break; + + case OP_EDIT_TYPE: + mutt_edit_content_type (hdr, idx[menu->current]->content, fp); + mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu); + break; + + case OP_EXIT: + mx_close_message (&msg); + hdr->attach_del = 0; + while (idxmax-- > 0) + { + if (!idx[idxmax]) + continue; + if (idx[idxmax]->content && idx[idxmax]->content->deleted) + hdr->attach_del = 1; + if (idx[idxmax]->content) + idx[idxmax]->content->aptr = NULL; + FREE (&idx[idxmax]->tree); + FREE (&idx[idxmax]); + } + if (hdr->attach_del) + hdr->changed = 1; + FREE (&idx); + idxmax = 0; + + if (WithCrypto && need_secured && secured) + { + fclose (fp); + mutt_free_body (&cur); + } + + mutt_menuDestroy (&menu); + return; + } + + op = OP_NULL; + } + + /* not reached */ +} diff --git a/recvcmd.c b/recvcmd.c new file mode 100644 index 0000000..92e3cba --- /dev/null +++ b/recvcmd.c @@ -0,0 +1,939 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "rfc1524.h" +#include "mime.h" +#include "mailbox.h" +#include "attach.h" +#include "mapping.h" +#include "mx.h" +#include "copy.h" +#include "mutt_idna.h" + +/* some helper functions to verify that we are exclusively operating + * on message/rfc822 attachments + */ + +static short check_msg (BODY * b, short err) +{ + if (!mutt_is_message_type (b->type, b->subtype)) + { + if (err) + mutt_error _("You may only bounce message/rfc822 parts."); + return -1; + } + return 0; +} + +static short check_all_msg (ATTACHPTR ** idx, short idxlen, + BODY * cur, short err) +{ + short i; + + if (cur && check_msg (cur, err) == -1) + return -1; + else if (!cur) + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged) + { + if (check_msg (idx[i]->content, err) == -1) + return -1; + } + } + } + return 0; +} + + +/* can we decode all tagged attachments? */ + +static short check_can_decode (ATTACHPTR ** idx, short idxlen, + BODY * cur) +{ + short i; + + if (cur) + return mutt_can_decode (cur); + + for (i = 0; i < idxlen; i++) + if (idx[i]->content->tagged && !mutt_can_decode (idx[i]->content)) + return 0; + + return 1; +} + +static short count_tagged (ATTACHPTR **idx, short idxlen) +{ + short count = 0; + short i; + + for (i = 0; i < idxlen; i++) + if (idx[i]->content->tagged) + count++; + + return count; +} + +/* count the number of tagged children below a multipart or message + * attachment. + */ + +static short count_tagged_children (ATTACHPTR ** idx, + short idxlen, short i) +{ + short level = idx[i]->level; + short count = 0; + + while ((++i < idxlen) && (level < idx[i]->level)) + if (idx[i]->content->tagged) + count++; + + return count; +} + + + +/** + ** + ** The bounce function, from the attachment menu + ** + **/ + +void mutt_attach_bounce (FILE * fp, HEADER * hdr, + ATTACHPTR ** idx, short idxlen, BODY * cur) +{ + short i; + char prompt[STRING]; + char buf[HUGE_STRING]; + char *err = NULL; + ADDRESS *adr = NULL; + int ret = 0; + int p = 0; + + if (check_all_msg (idx, idxlen, cur, 1) == -1) + return; + + /* one or more messages? */ + p = (cur || count_tagged (idx, idxlen) == 1); + + if (p) + strfcpy (prompt, _("Bounce message to: "), sizeof (prompt)); + else + strfcpy (prompt, _("Bounce tagged messages to: "), sizeof (prompt)); + + buf[0] = '\0'; + if (mutt_get_field (prompt, buf, sizeof (buf), M_ALIAS) + || buf[0] == '\0') + return; + + if (!(adr = rfc822_parse_adrlist (adr, buf))) + { + mutt_error _("Error parsing address!"); + return; + } + + adr = mutt_expand_aliases (adr); + + if (mutt_addrlist_to_idna (adr, &err) < 0) + { + mutt_error (_("Bad IDN: '%s'"), err); + FREE (&err); + rfc822_free_address (&adr); + return; + } + + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), adr, 1); + +#define extra_space (15+7+2) + /* + * See commands.c. + */ + snprintf (prompt, sizeof (prompt) - 4, + (p ? _("Bounce message to %s") : _("Bounce messages to %s")), buf); + + if (mutt_strwidth (prompt) > COLS - extra_space) + { + mutt_format_string (prompt, sizeof (prompt) - 4, + 0, COLS-extra_space, 0, 0, + prompt, sizeof (prompt), 0); + strncat (prompt, "...?", sizeof (prompt)); + } + else + strncat (prompt, "?", sizeof (prompt)); + + if (query_quadoption (OPT_BOUNCE, prompt) != M_YES) + { + rfc822_free_address (&adr); + CLEARLINE (LINES - 1); + mutt_message (p ? _("Message not bounced.") : _("Messages not bounced.")); + return; + } + + CLEARLINE (LINES - 1); + + if (cur) + ret = mutt_bounce_message (fp, cur->hdr, adr); + else + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged) + if (mutt_bounce_message (fp, idx[i]->content->hdr, adr)) + ret = 1; + } + } + + if (!ret) + mutt_message (p ? _("Message bounced.") : _("Messages bounced.")); + else + mutt_error (p ? _("Error bouncing message!") : _("Error bouncing messages!")); +} + + + +/** + ** + ** resend-message, from the attachment menu + ** + ** + **/ + +void mutt_attach_resend (FILE * fp, HEADER * hdr, ATTACHPTR ** idx, + short idxlen, BODY * cur) +{ + short i; + + if (check_all_msg (idx, idxlen, cur, 1) == -1) + return; + + if (cur) + mutt_resend_message (fp, Context, cur->hdr); + else + { + for (i = 0; i < idxlen; i++) + if (idx[i]->content->tagged) + mutt_resend_message (fp, Context, idx[i]->content->hdr); + } +} + + +/** + ** + ** forward-message, from the attachment menu + ** + **/ + +/* try to find a common parent message for the tagged attachments. */ + +static HEADER *find_common_parent (ATTACHPTR ** idx, short idxlen, + short nattach) +{ + short i; + short nchildren; + + for (i = 0; i < idxlen; i++) + if (idx[i]->content->tagged) + break; + + while (--i >= 0) + { + if (mutt_is_message_type (idx[i]->content->type, idx[i]->content->subtype)) + { + nchildren = count_tagged_children (idx, idxlen, i); + if (nchildren == nattach) + return idx[i]->content->hdr; + } + } + + return NULL; +} + +/* + * check whether attachment #i is a parent of the attachment + * pointed to by cur + * + * Note: This and the calling procedure could be optimized quite a + * bit. For now, it's not worth the effort. + */ + +static int is_parent (short i, ATTACHPTR **idx, short idxlen, BODY *cur) +{ + short level = idx[i]->level; + + while ((++i < idxlen) && idx[i]->level > level) + { + if (idx[i]->content == cur) + return 1; + } + + return 0; +} + +static HEADER *find_parent (ATTACHPTR **idx, short idxlen, BODY *cur, short nattach) +{ + short i; + HEADER *parent = NULL; + + if (cur) + { + for (i = 0; i < idxlen; i++) + { + if (mutt_is_message_type (idx[i]->content->type, idx[i]->content->subtype) + && is_parent (i, idx, idxlen, cur)) + parent = idx[i]->content->hdr; + if (idx[i]->content == cur) + break; + } + } + else if (nattach) + parent = find_common_parent (idx, idxlen, nattach); + + return parent; +} + +static void include_header (int quote, FILE * ifp, + HEADER * hdr, FILE * ofp, + char *_prefix) +{ + int chflags = CH_DECODE; + char prefix[SHORT_STRING]; + + if (option (OPTWEED)) + chflags |= CH_WEED | CH_REORDER; + + if (quote) + { + if (_prefix) + strfcpy (prefix, _prefix, sizeof (prefix)); + else if (!option (OPTTEXTFLOWED)) + _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), + Context, hdr, 0); + else + strfcpy (prefix, ">", sizeof (prefix)); + + chflags |= CH_PREFIX; + } + + mutt_copy_header (ifp, hdr, ofp, chflags, quote ? prefix : NULL); +} + +/* Attach all the body parts which can't be decoded. + * This code is shared by forwarding and replying. */ + +static BODY ** copy_problematic_attachments (FILE *fp, + BODY **last, + ATTACHPTR **idx, + short idxlen, + short force) +{ + short i; + + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged && + (force || !mutt_can_decode (idx[i]->content))) + { + if (mutt_copy_body (fp, last, idx[i]->content) == -1) + return NULL; /* XXXXX - may lead to crashes */ + last = &((*last)->next); + } + } + return last; +} + +/* + * forward one or several MIME bodies + * (non-message types) + */ + +static void attach_forward_bodies (FILE * fp, HEADER * hdr, + ATTACHPTR ** idx, short idxlen, + BODY * cur, + short nattach, int flags) +{ + short i; + short mime_fwd_all = 0; + short mime_fwd_any = 1; + HEADER *parent = NULL; + HEADER *tmphdr = NULL; + BODY **last; + char tmpbody[_POSIX_PATH_MAX]; + FILE *tmpfp = NULL; + + char prefix[STRING]; + + int rc = 0; + + STATE st; + + /* + * First, find the parent message. + * Note: This could be made an option by just + * putting the following lines into an if block. + */ + + + parent = find_parent (idx, idxlen, cur, nattach); + + if (parent == NULL) + parent = hdr; + + + tmphdr = mutt_new_header (); + tmphdr->env = mutt_new_envelope (); + mutt_make_forward_subject (tmphdr->env, Context, parent); + + mutt_mktemp (tmpbody); + if ((tmpfp = safe_fopen (tmpbody, "w")) == NULL) + { + mutt_error (_("Can't open temporary file %s."), tmpbody); + return; + } + + mutt_forward_intro (tmpfp, parent); + + /* prepare the prefix here since we'll need it later. */ + + if (option (OPTFORWQUOTE)) + { + if (!option (OPTTEXTFLOWED)) + _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), Context, + parent, 0); + else + strfcpy (prefix, ">", sizeof (prefix)); + } + + include_header (option (OPTFORWQUOTE), fp, parent, + tmpfp, prefix); + + + /* + * Now, we have prepared the first part of the message body: The + * original message's header. + * + * The next part is more interesting: either include the message bodies, + * or attach them. + */ + + if ((!cur || mutt_can_decode (cur)) && + (rc = query_quadoption (OPT_MIMEFWD, + _("Forward as attachments?"))) == M_YES) + mime_fwd_all = 1; + else if (rc == -1) + goto bail; + + /* + * shortcut MIMEFWDREST when there is only one attachment. Is + * this intuitive? + */ + + if (!mime_fwd_all && !cur && (nattach > 1) + && !check_can_decode (idx, idxlen, cur)) + { + if ((rc = query_quadoption (OPT_MIMEFWDREST, +_("Can't decode all tagged attachments. MIME-forward the others?"))) == -1) + goto bail; + else if (rc == M_NO) + mime_fwd_any = 0; + } + + /* initialize a state structure */ + + memset (&st, 0, sizeof (st)); + + if (option (OPTFORWQUOTE)) + st.prefix = prefix; + st.flags = M_CHARCONV; + if (option (OPTWEED)) + st.flags |= M_WEED; + st.fpin = fp; + st.fpout = tmpfp; + + /* where do we append new MIME parts? */ + last = &tmphdr->content; + + if (cur) + { + /* single body case */ + + if (!mime_fwd_all && mutt_can_decode (cur)) + { + mutt_body_handler (cur, &st); + state_putc ('\n', &st); + } + else + { + if (mutt_copy_body (fp, last, cur) == -1) + goto bail; + last = &((*last)->next); + } + } + else + { + /* multiple body case */ + + if (!mime_fwd_all) + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged && mutt_can_decode (idx[i]->content)) + { + mutt_body_handler (idx[i]->content, &st); + state_putc ('\n', &st); + } + } + } + + if (mime_fwd_any && + (last = copy_problematic_attachments (fp, last, idx, idxlen, mime_fwd_all)) == NULL) + goto bail; + } + + mutt_forward_trailer (tmpfp); + + fclose (tmpfp); + tmpfp = NULL; + + /* now that we have the template, send it. */ + ci_send_message (flags, tmphdr, tmpbody, NULL, parent); + return; + + bail: + + if (tmpfp) + { + fclose (tmpfp); + mutt_unlink (tmpbody); + } + + mutt_free_header (&tmphdr); +} + + +/* + * Forward one or several message-type attachments. This + * is different from the previous function + * since we want to mimic the index menu's behaviour. + * + * Code reuse from ci_send_message is not possible here - + * ci_send_message relies on a context structure to find messages, + * while, on the attachment menu, messages are referenced through + * the attachment index. + */ + +static void attach_forward_msgs (FILE * fp, HEADER * hdr, + ATTACHPTR ** idx, short idxlen, BODY * cur, int flags) +{ + HEADER *curhdr = NULL; + HEADER *tmphdr; + short i; + int rc; + + BODY **last; + char tmpbody[_POSIX_PATH_MAX]; + FILE *tmpfp = NULL; + + int cmflags = 0; + int chflags = CH_XMIT; + + if (cur) + curhdr = cur->hdr; + else + { + for (i = 0; i < idxlen; i++) + if (idx[i]->content->tagged) + { + curhdr = idx[i]->content->hdr; + break; + } + } + + tmphdr = mutt_new_header (); + tmphdr->env = mutt_new_envelope (); + mutt_make_forward_subject (tmphdr->env, Context, curhdr); + + + tmpbody[0] = '\0'; + + if ((rc = query_quadoption (OPT_MIMEFWD, + _("Forward MIME encapsulated?"))) == M_NO) + { + + /* no MIME encapsulation */ + + mutt_mktemp (tmpbody); + if (!(tmpfp = safe_fopen (tmpbody, "w"))) + { + mutt_error (_("Can't create %s."), tmpbody); + mutt_free_header (&tmphdr); + return; + } + + if (option (OPTFORWQUOTE)) + { + chflags |= CH_PREFIX; + cmflags |= M_CM_PREFIX; + } + + if (option (OPTFORWDECODE)) + { + cmflags |= M_CM_DECODE | M_CM_CHARCONV; + if (option (OPTWEED)) + { + chflags |= CH_WEED | CH_REORDER; + cmflags |= M_CM_WEED; + } + } + + + if (cur) + { + /* mutt_message_hook (cur->hdr, M_MESSAGEHOOK); */ + mutt_forward_intro (tmpfp, cur->hdr); + _mutt_copy_message (tmpfp, fp, cur->hdr, cur->hdr->content, cmflags, chflags); + mutt_forward_trailer (tmpfp); + } + else + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged) + { + /* mutt_message_hook (idx[i]->content->hdr, M_MESSAGEHOOK); */ + mutt_forward_intro (tmpfp, idx[i]->content->hdr); + _mutt_copy_message (tmpfp, fp, idx[i]->content->hdr, + idx[i]->content->hdr->content, cmflags, chflags); + mutt_forward_trailer (tmpfp); + } + } + } + fclose (tmpfp); + } + else if (rc == M_YES) /* do MIME encapsulation - we don't need to do much here */ + { + last = &tmphdr->content; + if (cur) + mutt_copy_body (fp, last, cur); + else + { + for (i = 0; i < idxlen; i++) + if (idx[i]->content->tagged) + { + mutt_copy_body (fp, last, idx[i]->content); + last = &((*last)->next); + } + } + } + else + mutt_free_header (&tmphdr); + + ci_send_message (flags, tmphdr, *tmpbody ? tmpbody : NULL, + NULL, curhdr); + +} + +void mutt_attach_forward (FILE * fp, HEADER * hdr, + ATTACHPTR ** idx, short idxlen, BODY * cur, int flags) +{ + short nattach; + + + if (check_all_msg (idx, idxlen, cur, 0) == 0) + attach_forward_msgs (fp, hdr, idx, idxlen, cur, flags); + else + { + nattach = count_tagged (idx, idxlen); + attach_forward_bodies (fp, hdr, idx, idxlen, cur, nattach, flags); + } +} + + + +/** + ** + ** the various reply functions, from the attachment menu + ** + ** + **/ + +/* Create the envelope defaults for a reply. + * + * This function can be invoked in two ways. + * + * Either, parent is NULL. In this case, all tagged bodies are of a message type, + * and the header information is fetched from them. + * + * Or, parent is non-NULL. In this case, cur is the common parent of all the + * tagged attachments. + * + * Note that this code is horribly similar to envelope_defaults () from send.c. + */ + +static int +attach_reply_envelope_defaults (ENVELOPE *env, ATTACHPTR **idx, short idxlen, + HEADER *parent, int flags) +{ + ENVELOPE *curenv = NULL; + HEADER *curhdr = NULL; + short i; + + if (!parent) + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged) + { + curhdr = idx[i]->content->hdr; + curenv = curhdr->env; + break; + } + } + } + else + { + curenv = parent->env; + curhdr = parent; + } + + if (curenv == NULL || curhdr == NULL) + { + mutt_error _("Can't find any tagged messages."); + return -1; + } + +#ifdef USE_NNTP + if ((flags & SENDNEWS)) + { + /* in case followup set Newsgroups: with Followup-To: if it present */ + if (!env->newsgroups && curenv && + mutt_strcasecmp (curenv->followup_to, "poster")) + env->newsgroups = safe_strdup (curenv->followup_to); + } + else +#endif + { + if (parent) + { + if (mutt_fetch_recips (env, curenv, flags) == -1) + return -1; + } + else + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged + && mutt_fetch_recips (env, idx[i]->content->hdr->env, flags) == -1) + return -1; + } + } + + if ((flags & SENDLISTREPLY) && !env->to) + { + mutt_error _("No mailing lists found!"); + return (-1); + } + + mutt_fix_reply_recipients (env); + } + mutt_make_misc_reply_headers (env, Context, curhdr, curenv); + + if (parent) + mutt_add_to_reference_headers (env, curenv, NULL, NULL); + else + { + LIST **p = NULL, **q = NULL; + + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged) + mutt_add_to_reference_headers (env, idx[i]->content->hdr->env, &p, &q); + } + } + + return 0; +} + + +/* This is _very_ similar to send.c's include_reply(). */ + +static void attach_include_reply (FILE *fp, FILE *tmpfp, HEADER *cur, int flags) +{ + int cmflags = M_CM_PREFIX | M_CM_DECODE | M_CM_CHARCONV; + int chflags = CH_DECODE; + + /* mutt_message_hook (cur, M_MESSAGEHOOK); */ + + mutt_make_attribution (Context, cur, tmpfp); + + if (!option (OPTHEADER)) + cmflags |= M_CM_NOHEADER; + if (option (OPTWEED)) + { + chflags |= CH_WEED; + cmflags |= M_CM_WEED; + } + + _mutt_copy_message (tmpfp, fp, cur, cur->content, cmflags, chflags); + mutt_make_post_indent (Context, cur, tmpfp); +} + +void mutt_attach_reply (FILE * fp, HEADER * hdr, + ATTACHPTR ** idx, short idxlen, BODY * cur, + int flags) +{ + short mime_reply_any = 0; + + short nattach = 0; + HEADER *parent = NULL; + HEADER *tmphdr = NULL; + short i; + + STATE st; + char tmpbody[_POSIX_PATH_MAX]; + FILE *tmpfp; + + char prefix[SHORT_STRING]; + int rc; + +#ifdef USE_NNTP + if (flags & SENDNEWS) + set_option (OPTNEWSSEND); + else + unset_option (OPTNEWSSEND); +#endif + + if (check_all_msg (idx, idxlen, cur, 0) == -1) + { + nattach = count_tagged (idx, idxlen); + if ((parent = find_parent (idx, idxlen, cur, nattach)) == NULL) + parent = hdr; + } + + if (nattach > 1 && !check_can_decode (idx, idxlen, cur)) + { + if ((rc = query_quadoption (OPT_MIMEFWDREST, + _("Can't decode all tagged attachments. MIME-encapsulate the others?"))) == -1) + return; + else if (rc == M_YES) + mime_reply_any = 1; + } + else if (nattach == 1) + mime_reply_any = 1; + + tmphdr = mutt_new_header (); + tmphdr->env = mutt_new_envelope (); + + if (attach_reply_envelope_defaults (tmphdr->env, idx, idxlen, + parent ? parent : (cur ? cur->hdr : NULL), flags) == -1) + { + mutt_free_header (&tmphdr); + return; + } + + mutt_mktemp (tmpbody); + if ((tmpfp = safe_fopen (tmpbody, "w")) == NULL) + { + mutt_error (_("Can't create %s."), tmpbody); + mutt_free_header (&tmphdr); + return; + } + + if (!parent) + { + if (cur) + attach_include_reply (fp, tmpfp, cur->hdr, flags); + else + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged) + attach_include_reply (fp, tmpfp, idx[i]->content->hdr, flags); + } + } + } + else + { + mutt_make_attribution (Context, parent, tmpfp); + + memset (&st, 0, sizeof (STATE)); + st.fpin = fp; + st.fpout = tmpfp; + + if (!option (OPTTEXTFLOWED)) + _mutt_make_string (prefix, sizeof (prefix), NONULL (Prefix), + Context, parent, 0); + else + strfcpy (prefix, ">", sizeof (prefix)); + + st.prefix = prefix; + st.flags = M_CHARCONV; + + if (option (OPTWEED)) + st.flags |= M_WEED; + + if (option (OPTHEADER)) + include_header (1, fp, parent, tmpfp, prefix); + + if (cur) + { + if (mutt_can_decode (cur)) + { + mutt_body_handler (cur, &st); + state_putc ('\n', &st); + } + else + mutt_copy_body (fp, &tmphdr->content, cur); + } + else + { + for (i = 0; i < idxlen; i++) + { + if (idx[i]->content->tagged && mutt_can_decode (idx[i]->content)) + { + mutt_body_handler (idx[i]->content, &st); + state_putc ('\n', &st); + } + } + } + + mutt_make_post_indent (Context, parent, tmpfp); + + if (mime_reply_any && !cur && + copy_problematic_attachments (fp, &tmphdr->content, idx, idxlen, 0) == NULL) + { + mutt_free_header (&tmphdr); + fclose (tmpfp); + return; + } + } + + fclose (tmpfp); + + if (ci_send_message (flags, tmphdr, tmpbody, NULL, parent) == 0) + mutt_set_flag (Context, hdr, M_REPLIED, 1); +} + diff --git a/regex.c b/regex.c new file mode 100644 index 0000000..398f7f9 --- /dev/null +++ b/regex.c @@ -0,0 +1,5754 @@ +/* Extended regular expression matching and search library, + * version 0.12. + * (Implements POSIX draft P1003.2/D11.2, except for some of the + * internationalization features.) + * + * Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. + * + * This file is part of the GNU C Library. Its master source is NOT part of + * the C library, however. The master source lives in /gd/gnu/lib. + * + * The GNU C Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The GNU C Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the GNU C Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* + * Modifications: + * + * Use _regex.h instead of regex.h. tlr, 1999-01-06 + * Make REGEX_MALLOC depend on HAVE_ALLOCA &c. + * tlr, 1999-02-14 + * Don't switch on regex debugging when debugging mutt. + * tlr, 1999-02-25 + */ + +/* The following doesn't mix too well with autoconfiguring + * the use of alloca. So let's disable it for AIX. + */ + +#if 0 + +/* AIX requires this to be the first thing in the file. */ +# if defined (_AIX) && !defined (REGEX_MALLOC) +# pragma alloca +# endif + +#endif + +#undef _GNU_SOURCE +#define _GNU_SOURCE + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#undef DEBUG + +#if (defined(HAVE_ALLOCA_H) && !defined(_AIX)) +# include <alloca.h> +#endif + +#if (!defined(HAVE_ALLOCA) || defined(_AIX)) +# define REGEX_MALLOC +#endif + +#if defined(STDC_HEADERS) && !defined(emacs) +#include <stddef.h> +#else +/* We need this for `regex.h', and perhaps for the Emacs include files. */ +#include <sys/types.h> +#endif + +/* For platform which support the ISO C amendement 1 functionality we + support user defined character classes. */ +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +# include <wctype.h> +# include <wchar.h> +#endif + +/* This is for other GNU distributions with internationalized messages. */ +#if HAVE_LIBINTL_H || defined (_LIBC) +# include <libintl.h> +#else +# define gettext(msgid) (msgid) +#endif + +#ifndef gettext_noop +/* This define is so xgettext can find the internationalizable + strings. */ +#define gettext_noop(String) String +#endif + +/* The `emacs' switch turns on certain matching commands + that make sense only in Emacs. */ +#ifdef emacs + +#include "lisp.h" +#include "buffer.h" +#include "syntax.h" + +#else /* not emacs */ + +/* If we are not linking with Emacs proper, + we can't use the relocating allocator + even if config.h says that we can. */ +#undef REL_ALLOC + +#if defined (STDC_HEADERS) || defined (_LIBC) +#include <stdlib.h> +#else +char *malloc (); /* __MEM_CHECKED__ */ +char *realloc (); /* __MEM_CHECKED__ */ +#endif + +/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow. + If nothing else has been done, use the method below. */ +#ifdef INHIBIT_STRING_HEADER +#if !(defined (HAVE_BZERO) && defined (HAVE_BCOPY)) +#if !defined (bzero) && !defined (bcopy) +#undef INHIBIT_STRING_HEADER +#endif +#endif +#endif + +/* This is the normal way of making sure we have a bcopy and a bzero. + This is used in most programs--a few other programs avoid this + by defining INHIBIT_STRING_HEADER. */ +#ifndef INHIBIT_STRING_HEADER +#if defined (HAVE_STRING_H) || defined (STDC_HEADERS) || defined (_LIBC) +#include <string.h> +#ifndef bcmp +#define bcmp(s1, s2, n) memcmp ((s1), (s2), (n)) +#endif +#ifndef bcopy +#define bcopy(s, d, n) memcpy ((d), (s), (n)) +#endif +#ifndef bzero +#define bzero(s, n) memset ((s), 0, (n)) +#endif +#else +#include <strings.h> +#endif +#endif + +/* Define the syntax stuff for \<, \>, etc. */ + +/* This must be nonzero for the wordchar and notwordchar pattern + commands in re_match_2. */ +#ifndef Sword +#define Sword 1 +#endif + +#ifdef SWITCH_ENUM_BUG +#define SWITCH_ENUM_CAST(x) ((int)(x)) +#else +#define SWITCH_ENUM_CAST(x) (x) +#endif + +#ifdef SYNTAX_TABLE + +extern char *re_syntax_table; + +#else /* not SYNTAX_TABLE */ + +/* How many characters in the character set. */ +#define CHAR_SET_SIZE 256 + +static char re_syntax_table[CHAR_SET_SIZE]; + +static void +init_syntax_once () +{ + register int c; + static int done = 0; + + if (done) + return; + + bzero (re_syntax_table, sizeof re_syntax_table); + + for (c = 'a'; c <= 'z'; c++) + re_syntax_table[c] = Sword; + + for (c = 'A'; c <= 'Z'; c++) + re_syntax_table[c] = Sword; + + for (c = '0'; c <= '9'; c++) + re_syntax_table[c] = Sword; + + re_syntax_table['_'] = Sword; + + done = 1; +} + +#endif /* not SYNTAX_TABLE */ + +#define SYNTAX(c) re_syntax_table[c] + +#endif /* not emacs */ + +/* Get the interface, including the syntax bits. */ + +/* Changed to fit into mutt - tlr, 1999-01-06 */ + +#include "_regex.h" + +/* isalpha etc. are used for the character classes. */ +#include <ctype.h> + +/* Jim Meyering writes: + + "... Some ctype macros are valid only for character codes that + isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when + using /bin/cc or gcc but without giving an ansi option). So, all + ctype uses should be through macros like ISPRINT... If + STDC_HEADERS is defined, then autoconf has verified that the ctype + macros don't need to be guarded with references to isascii. ... + Defining isascii to 1 should let any compiler worth its salt + eliminate the && through constant folding." */ + +#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) +#define ISASCII(c) 1 +#else +#define ISASCII(c) isascii(c) +#endif + +#ifdef isblank +#define ISBLANK(c) (ISASCII (c) && isblank (c)) +#else +#define ISBLANK(c) ((c) == ' ' || (c) == '\t') +#endif +#ifdef isgraph +#define ISGRAPH(c) (ISASCII (c) && isgraph (c)) +#else +#define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) +#endif + +#define ISPRINT(c) (ISASCII (c) && isprint (c)) +#define ISDIGIT(c) (ISASCII (c) && isdigit (c)) +#define ISALNUM(c) (ISASCII (c) && isalnum (c)) +#define ISALPHA(c) (ISASCII (c) && isalpha (c)) +#define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) +#define ISLOWER(c) (ISASCII (c) && islower (c)) +#define ISPUNCT(c) (ISASCII (c) && ispunct (c)) +#define ISSPACE(c) (ISASCII (c) && isspace (c)) +#define ISUPPER(c) (ISASCII (c) && isupper (c)) +#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) + +#ifndef NULL +#define NULL (void *)0 +#endif + +/* We remove any previous definition of `SIGN_EXTEND_CHAR', + since ours (we hope) works properly with all combinations of + machines, compilers, `char' and `unsigned char' argument types. + (Per Bothner suggested the basic approach.) */ +#undef SIGN_EXTEND_CHAR +#if __STDC__ +#define SIGN_EXTEND_CHAR(c) ((signed char) (c)) +#else /* not __STDC__ */ +/* As in Harbison and Steele. */ +#define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) +#endif + +/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we + use `alloca' instead of `malloc'. This is because using malloc in + re_search* or re_match* could cause memory leaks when C-g is used in + Emacs; also, malloc is slower and causes storage fragmentation. On + the other hand, malloc is more portable, and easier to debug. + + Because we sometimes use alloca, some routines have to be macros, + not functions -- `alloca'-allocated space disappears at the end of the + function it is called in. */ + +#ifdef REGEX_MALLOC + +#define REGEX_ALLOCATE malloc +#define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize) +#define REGEX_FREE free + +#else /* not REGEX_MALLOC */ + +/* Emacs already defines alloca, sometimes. */ +#ifndef alloca + +/* Make alloca work the best possible way. */ +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* not __GNUC__ */ +#if HAVE_ALLOCA_H +#include <alloca.h> +#else /* not __GNUC__ or HAVE_ALLOCA_H */ +#if 0 /* It is a bad idea to declare alloca. We always cast the result. */ +#ifndef _AIX /* Already did AIX, up at the top. */ +char *alloca (); +#endif /* not _AIX */ +#endif +#endif /* not HAVE_ALLOCA_H */ +#endif /* not __GNUC__ */ + +#endif /* not alloca */ + +#define REGEX_ALLOCATE alloca + +/* Assumes a `char *destination' variable. */ +#define REGEX_REALLOCATE(source, osize, nsize) \ + (destination = (char *) alloca (nsize), \ + bcopy (source, destination, osize), \ + destination) + +/* No need to do anything to free, after alloca. */ +#define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */ + +#endif /* not REGEX_MALLOC */ + +/* Define how to allocate the failure stack. */ + +#if defined (REL_ALLOC) && defined (REGEX_MALLOC) + +#define REGEX_ALLOCATE_STACK(size) \ + r_alloc (&failure_stack_ptr, (size)) +#define REGEX_REALLOCATE_STACK(source, osize, nsize) \ + r_re_alloc (&failure_stack_ptr, (nsize)) +#define REGEX_FREE_STACK(ptr) \ + r_alloc_free (&failure_stack_ptr) + +#else /* not using relocating allocator */ + +#ifdef REGEX_MALLOC + +#define REGEX_ALLOCATE_STACK malloc +#define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize) +#define REGEX_FREE_STACK free + +#else /* not REGEX_MALLOC */ + +#define REGEX_ALLOCATE_STACK alloca + +#define REGEX_REALLOCATE_STACK(source, osize, nsize) \ + REGEX_REALLOCATE (source, osize, nsize) +/* No need to explicitly free anything. */ +#define REGEX_FREE_STACK(arg) + +#endif /* not REGEX_MALLOC */ +#endif /* not using relocating allocator */ + + +/* True if `size1' is non-NULL and PTR is pointing anywhere inside + `string1' or just past its end. This works if PTR is NULL, which is + a good thing. */ +#define FIRST_STRING_P(ptr) \ + (size1 && string1 <= (ptr) && (ptr) <= string1 + size1) + +/* (Re)Allocate N items of type T using malloc, or fail. */ +#define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t))) +#define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t))) +#define RETALLOC_IF(addr, n, t) \ + if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t) +#define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t))) + +#define BYTEWIDTH 8 /* In bits. */ + +#define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) + +#undef MAX +#undef MIN +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + +typedef char boolean; +#define false 0 +#define true 1 + +static int re_match_2_internal (); + +/* These are the command codes that appear in compiled regular + expressions. Some opcodes are followed by argument bytes. A + command code can specify any interpretation whatsoever for its + arguments. Zero bytes may appear in the compiled regular expression. */ + +typedef enum +{ + no_op = 0, + + /* Succeed right away--no more backtracking. */ + succeed, + + /* Followed by one byte giving n, then by n literal bytes. */ + exactn, + + /* Matches any (more or less) character. */ + anychar, + + /* Matches any one char belonging to specified set. First + following byte is number of bitmap bytes. Then come bytes + for a bitmap saying which chars are in. Bits in each byte + are ordered low-bit-first. A character is in the set if its + bit is 1. A character too large to have a bit in the map is + automatically not in the set. */ + charset, + + /* Same parameters as charset, but match any character that is + not one of those specified. */ + charset_not, + + /* Start remembering the text that is matched, for storing in a + register. Followed by one byte with the register number, in + the range 0 to one less than the pattern buffer's re_nsub + field. Then followed by one byte with the number of groups + inner to this one. (This last has to be part of the + start_memory only because we need it in the on_failure_jump + of re_match_2.) */ + start_memory, + + /* Stop remembering the text that is matched and store it in a + memory register. Followed by one byte with the register + number, in the range 0 to one less than `re_nsub' in the + pattern buffer, and one byte with the number of inner groups, + just like `start_memory'. (We need the number of inner + groups here because we don't have any easy way of finding the + corresponding start_memory when we're at a stop_memory.) */ + stop_memory, + + /* Match a duplicate of something remembered. Followed by one + byte containing the register number. */ + duplicate, + + /* Fail unless at beginning of line. */ + begline, + + /* Fail unless at end of line. */ + endline, + + /* Succeeds if at beginning of buffer (if emacs) or at beginning + of string to be matched (if not). */ + begbuf, + + /* Analogously, for end of buffer/string. */ + endbuf, + + /* Followed by two byte relative address to which to jump. */ + jump, + + /* Same as jump, but marks the end of an alternative. */ + jump_past_alt, + + /* Followed by two-byte relative address of place to resume at + in case of failure. */ + on_failure_jump, + + /* Like on_failure_jump, but pushes a placeholder instead of the + current string position when executed. */ + on_failure_keep_string_jump, + + /* Throw away latest failure point and then jump to following + two-byte relative address. */ + pop_failure_jump, + + /* Change to pop_failure_jump if know won't have to backtrack to + match; otherwise change to jump. This is used to jump + back to the beginning of a repeat. If what follows this jump + clearly won't match what the repeat does, such that we can be + sure that there is no use backtracking out of repetitions + already matched, then we change it to a pop_failure_jump. + Followed by two-byte address. */ + maybe_pop_jump, + + /* Jump to following two-byte address, and push a dummy failure + point. This failure point will be thrown away if an attempt + is made to use it for a failure. A `+' construct makes this + before the first repeat. Also used as an intermediary kind + of jump when compiling an alternative. */ + dummy_failure_jump, + + /* Push a dummy failure point and continue. Used at the end of + alternatives. */ + push_dummy_failure, + + /* Followed by two-byte relative address and two-byte number n. + After matching N times, jump to the address upon failure. */ + succeed_n, + + /* Followed by two-byte relative address, and two-byte number n. + Jump to the address N times, then fail. */ + jump_n, + + /* Set the following two-byte relative address to the + subsequent two-byte number. The address *includes* the two + bytes of number. */ + set_number_at, + + wordchar, /* Matches any word-constituent character. */ + notwordchar, /* Matches any char that is not a word-constituent. */ + + wordbeg, /* Succeeds if at word beginning. */ + wordend, /* Succeeds if at word end. */ + + wordbound, /* Succeeds if at a word boundary. */ + notwordbound /* Succeeds if not at a word boundary. */ + +#ifdef emacs + ,before_dot, /* Succeeds if before point. */ + at_dot, /* Succeeds if at point. */ + after_dot, /* Succeeds if after point. */ + + /* Matches any character whose syntax is specified. Followed by + a byte which contains a syntax code, e.g., Sword. */ + syntaxspec, + + /* Matches any character whose syntax is not that specified. */ + notsyntaxspec +#endif /* emacs */ +} re_opcode_t; + +/* Common operations on the compiled pattern. */ + +/* Store NUMBER in two contiguous bytes starting at DESTINATION. */ + +#define STORE_NUMBER(destination, number) \ + do { \ + (destination)[0] = (number) & 0377; \ + (destination)[1] = (number) >> 8; \ + } while (0) + +/* Same as STORE_NUMBER, except increment DESTINATION to + the byte after where the number is stored. Therefore, DESTINATION + must be an lvalue. */ + +#define STORE_NUMBER_AND_INCR(destination, number) \ + do { \ + STORE_NUMBER (destination, number); \ + (destination) += 2; \ + } while (0) + +/* Put into DESTINATION a number stored in two contiguous bytes starting + at SOURCE. */ + +#define EXTRACT_NUMBER(destination, source) \ + do { \ + (destination) = *(source) & 0377; \ + (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ + } while (0) + +#ifdef DEBUG +static void extract_number _RE_ARGS ((int *dest, unsigned char *source)); +static void +extract_number (dest, source) + int *dest; + unsigned char *source; +{ + int temp = SIGN_EXTEND_CHAR (*(source + 1)); + *dest = *source & 0377; + *dest += temp << 8; +} + +#ifndef EXTRACT_MACROS /* To debug the macros. */ +#undef EXTRACT_NUMBER +#define EXTRACT_NUMBER(dest, src) extract_number (&dest, src) +#endif /* not EXTRACT_MACROS */ + +#endif /* DEBUG */ + +/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number. + SOURCE must be an lvalue. */ + +#define EXTRACT_NUMBER_AND_INCR(destination, source) \ + do { \ + EXTRACT_NUMBER (destination, source); \ + (source) += 2; \ + } while (0) + +#ifdef DEBUG +static void extract_number_and_incr _RE_ARGS ((int *destination, + unsigned char **source)); +static void +extract_number_and_incr (destination, source) + int *destination; + unsigned char **source; +{ + extract_number (destination, *source); + *source += 2; +} + +#ifndef EXTRACT_MACROS +#undef EXTRACT_NUMBER_AND_INCR +#define EXTRACT_NUMBER_AND_INCR(dest, src) \ + extract_number_and_incr (&dest, &src) +#endif /* not EXTRACT_MACROS */ + +#endif /* DEBUG */ + +/* If DEBUG is defined, Regex prints many voluminous messages about what + it is doing (if the variable `debug' is nonzero). If linked with the + main program in `iregex.c', you can enter patterns and strings + interactively. And if linked with the main program in `main.c' and + the other test files, you can run the already-written tests. */ + +#ifdef DEBUG + +/* We use standard I/O for debugging. */ +#include <stdio.h> + +/* It is useful to test things that ``must'' be true when debugging. */ +#include <assert.h> + +static int debug = 0; + +#define DEBUG_STATEMENT(e) e +#define DEBUG_PRINT1(x) if (debug) printf (x) +#define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2) +#define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3) +#define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4) +#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \ + if (debug) print_partial_compiled_pattern (s, e) +#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \ + if (debug) print_double_string (w, s1, sz1, s2, sz2) + + +/* Print the fastmap in human-readable form. */ + +void +print_fastmap (fastmap) + char *fastmap; +{ + unsigned was_a_range = 0; + unsigned i = 0; + + while (i < (1 << BYTEWIDTH)) + { + if (fastmap[i++]) + { + was_a_range = 0; + putchar (i - 1); + while (i < (1 << BYTEWIDTH) && fastmap[i]) + { + was_a_range = 1; + i++; + } + if (was_a_range) + { + printf ("-"); + putchar (i - 1); + } + } + } + putchar ('\n'); +} + + +/* Print a compiled pattern string in human-readable form, starting at + the START pointer into it and ending just before the pointer END. */ + +void +print_partial_compiled_pattern (start, end) + unsigned char *start; + unsigned char *end; +{ + int mcnt, mcnt2; + unsigned char *p1; + unsigned char *p = start; + unsigned char *pend = end; + + if (start == NULL) + { + printf ("(null)\n"); + return; + } + + /* Loop over pattern commands. */ + while (p < pend) + { + printf ("%d:\t", p - start); + + switch ((re_opcode_t) *p++) + { + case no_op: + printf ("/no_op"); + break; + + case exactn: + mcnt = *p++; + printf ("/exactn/%d", mcnt); + do + { + putchar ('/'); + putchar (*p++); + } + while (--mcnt); + break; + + case start_memory: + mcnt = *p++; + printf ("/start_memory/%d/%d", mcnt, *p++); + break; + + case stop_memory: + mcnt = *p++; + printf ("/stop_memory/%d/%d", mcnt, *p++); + break; + + case duplicate: + printf ("/duplicate/%d", *p++); + break; + + case anychar: + printf ("/anychar"); + break; + + case charset: + case charset_not: + { + register int c, last = -100; + register int in_range = 0; + + printf ("/charset [%s", + (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); + + assert (p + *p < pend); + + for (c = 0; c < 256; c++) + if (c / 8 < *p + && (p[1 + (c/8)] & (1 << (c % 8)))) + { + /* Are we starting a range? */ + if (last + 1 == c && ! in_range) + { + putchar ('-'); + in_range = 1; + } + /* Have we broken a range? */ + else if (last + 1 != c && in_range) + { + putchar (last); + in_range = 0; + } + + if (! in_range) + putchar (c); + + last = c; + } + + if (in_range) + putchar (last); + + putchar (']'); + + p += 1 + *p; + } + break; + + case begline: + printf ("/begline"); + break; + + case endline: + printf ("/endline"); + break; + + case on_failure_jump: + extract_number_and_incr (&mcnt, &p); + printf ("/on_failure_jump to %d", p + mcnt - start); + break; + + case on_failure_keep_string_jump: + extract_number_and_incr (&mcnt, &p); + printf ("/on_failure_keep_string_jump to %d", p + mcnt - start); + break; + + case dummy_failure_jump: + extract_number_and_incr (&mcnt, &p); + printf ("/dummy_failure_jump to %d", p + mcnt - start); + break; + + case push_dummy_failure: + printf ("/push_dummy_failure"); + break; + + case maybe_pop_jump: + extract_number_and_incr (&mcnt, &p); + printf ("/maybe_pop_jump to %d", p + mcnt - start); + break; + + case pop_failure_jump: + extract_number_and_incr (&mcnt, &p); + printf ("/pop_failure_jump to %d", p + mcnt - start); + break; + + case jump_past_alt: + extract_number_and_incr (&mcnt, &p); + printf ("/jump_past_alt to %d", p + mcnt - start); + break; + + case jump: + extract_number_and_incr (&mcnt, &p); + printf ("/jump to %d", p + mcnt - start); + break; + + case succeed_n: + extract_number_and_incr (&mcnt, &p); + p1 = p + mcnt; + extract_number_and_incr (&mcnt2, &p); + printf ("/succeed_n to %d, %d times", p1 - start, mcnt2); + break; + + case jump_n: + extract_number_and_incr (&mcnt, &p); + p1 = p + mcnt; + extract_number_and_incr (&mcnt2, &p); + printf ("/jump_n to %d, %d times", p1 - start, mcnt2); + break; + + case set_number_at: + extract_number_and_incr (&mcnt, &p); + p1 = p + mcnt; + extract_number_and_incr (&mcnt2, &p); + printf ("/set_number_at location %d to %d", p1 - start, mcnt2); + break; + + case wordbound: + printf ("/wordbound"); + break; + + case notwordbound: + printf ("/notwordbound"); + break; + + case wordbeg: + printf ("/wordbeg"); + break; + + case wordend: + printf ("/wordend"); + +#ifdef emacs + case before_dot: + printf ("/before_dot"); + break; + + case at_dot: + printf ("/at_dot"); + break; + + case after_dot: + printf ("/after_dot"); + break; + + case syntaxspec: + printf ("/syntaxspec"); + mcnt = *p++; + printf ("/%d", mcnt); + break; + + case notsyntaxspec: + printf ("/notsyntaxspec"); + mcnt = *p++; + printf ("/%d", mcnt); + break; +#endif /* emacs */ + + case wordchar: + printf ("/wordchar"); + break; + + case notwordchar: + printf ("/notwordchar"); + break; + + case begbuf: + printf ("/begbuf"); + break; + + case endbuf: + printf ("/endbuf"); + break; + + default: + printf ("?%d", *(p-1)); + } + + putchar ('\n'); + } + + printf ("%d:\tend of pattern.\n", p - start); +} + + +void +print_compiled_pattern (bufp) + struct re_pattern_buffer *bufp; +{ + unsigned char *buffer = bufp->buffer; + + print_partial_compiled_pattern (buffer, buffer + bufp->used); + printf ("%ld bytes used/%ld bytes allocated.\n", + bufp->used, bufp->allocated); + + if (bufp->fastmap_accurate && bufp->fastmap) + { + printf ("fastmap: "); + print_fastmap (bufp->fastmap); + } + + printf ("re_nsub: %d\t", bufp->re_nsub); + printf ("regs_alloc: %d\t", bufp->regs_allocated); + printf ("can_be_null: %d\t", bufp->can_be_null); + printf ("newline_anchor: %d\n", bufp->newline_anchor); + printf ("no_sub: %d\t", bufp->no_sub); + printf ("not_bol: %d\t", bufp->not_bol); + printf ("not_eol: %d\t", bufp->not_eol); + printf ("syntax: %lx\n", bufp->syntax); + /* Perhaps we should print the translate table? */ +} + + +void +print_double_string (where, string1, size1, string2, size2) + const char *where; + const char *string1; + const char *string2; + int size1; + int size2; +{ + int this_char; + + if (where == NULL) + printf ("(null)"); + else + { + if (FIRST_STRING_P (where)) + { + for (this_char = where - string1; this_char < size1; this_char++) + putchar (string1[this_char]); + + where = string2; + } + + for (this_char = where - string2; this_char < size2; this_char++) + putchar (string2[this_char]); + } +} + +void +printchar (c) + int c; +{ + putc (c, stderr); +} + +#else /* not DEBUG */ + +#undef assert +#define assert(e) + +#define DEBUG_STATEMENT(e) +#define DEBUG_PRINT1(x) +#define DEBUG_PRINT2(x1, x2) +#define DEBUG_PRINT3(x1, x2, x3) +#define DEBUG_PRINT4(x1, x2, x3, x4) +#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) +#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) + +#endif /* not DEBUG */ + +/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can + also be assigned to arbitrarily: each pattern buffer stores its own + syntax, so it can be changed between regex compilations. */ +/* This has no initializer because initialized variables in Emacs + become read-only after dumping. */ +reg_syntax_t re_syntax_options; + + +/* Specify the precise syntax of regexps for compilation. This provides + for compatibility for various utilities which historically have + different, incompatible syntaxes. + + The argument SYNTAX is a bit mask comprised of the various bits + defined in regex.h. We return the old syntax. */ + +reg_syntax_t +re_set_syntax (syntax) + reg_syntax_t syntax; +{ + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; +#ifdef DEBUG + if (syntax & RE_DEBUG) + debug = 1; + else if (debug) /* was on but now is not */ + debug = 0; +#endif /* DEBUG */ + return ret; +} + +/* This table gives an error message for each of the error codes listed + in regex.h. Obviously the order here has to be same as there. + POSIX doesn't require that we do anything for REG_NOERROR, + but why not be nice? */ + +static const char *re_error_msgid[] = + { + gettext_noop ("Success"), /* REG_NOERROR */ + gettext_noop ("No match"), /* REG_NOMATCH */ + gettext_noop ("Invalid regular expression"), /* REG_BADPAT */ + gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */ + gettext_noop ("Invalid character class name"), /* REG_ECTYPE */ + gettext_noop ("Trailing backslash"), /* REG_EESCAPE */ + gettext_noop ("Invalid back reference"), /* REG_ESUBREG */ + gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */ + gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */ + gettext_noop ("Unmatched \\{"), /* REG_EBRACE */ + gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */ + gettext_noop ("Invalid range end"), /* REG_ERANGE */ + gettext_noop ("Memory exhausted"), /* REG_ESPACE */ + gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */ + gettext_noop ("Premature end of regular expression"), /* REG_EEND */ + gettext_noop ("Regular expression too big"), /* REG_ESIZE */ + gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */ + }; + +/* Avoiding alloca during matching, to placate r_alloc. */ + +/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the + searching and matching functions should not call alloca. On some + systems, alloca is implemented in terms of malloc, and if we're + using the relocating allocator routines, then malloc could cause a + relocation, which might (if the strings being searched are in the + ralloc heap) shift the data out from underneath the regexp + routines. + + Here's another reason to avoid allocation: Emacs + processes input from X in a signal handler; processing X input may + call malloc; if input arrives while a matching routine is calling + malloc, then we're scrod. But Emacs can't just block input while + calling matching routines; then we don't notice interrupts when + they come in. So, Emacs blocks input around all regexp calls + except the matching calls, which it leaves unprotected, in the + faith that they will not malloc. */ + +/* Normally, this is fine. */ +#define MATCH_MAY_ALLOCATE + +/* When using GNU C, we are not REALLY using the C alloca, no matter + what config.h may say. So don't take precautions for it. */ +#ifdef __GNUC__ +#undef C_ALLOCA +#endif + +/* The match routines may not allocate if (1) they would do it with malloc + and (2) it's not safe for them to use malloc. + Note that if REL_ALLOC is defined, matching would not use malloc for the + failure stack, but we would still use it for the register vectors; + so REL_ALLOC should not affect this. */ +#if (defined (C_ALLOCA) || defined (REGEX_MALLOC)) && defined (emacs) +#undef MATCH_MAY_ALLOCATE +#endif + + +/* Failure stack declarations and macros; both re_compile_fastmap and + re_match_2 use a failure stack. These have to be macros because of + REGEX_ALLOCATE_STACK. */ + + +/* Number of failure points for which to initially allocate space + when matching. If this number is exceeded, we allocate more + space, so it is not a hard limit. */ +#ifndef INIT_FAILURE_ALLOC +#define INIT_FAILURE_ALLOC 5 +#endif + +/* Roughly the maximum number of failure points on the stack. Would be + exactly that if always used MAX_FAILURE_ITEMS items each time we failed. + This is a variable only so users of regex can assign to it; we never + change it ourselves. */ + +#ifdef INT_IS_16BIT + +#if defined (MATCH_MAY_ALLOCATE) +/* 4400 was enough to cause a crash on Alpha OSF/1, + whose default stack limit is 2mb. */ +long int re_max_failures = 4000; +#else +long int re_max_failures = 2000; +#endif + +union fail_stack_elt +{ + unsigned char *pointer; + long int integer; +}; + +typedef union fail_stack_elt fail_stack_elt_t; + +typedef struct +{ + fail_stack_elt_t *stack; + unsigned long int size; + unsigned long int avail; /* Offset of next open position. */ +} fail_stack_type; + +#else /* not INT_IS_16BIT */ + +#if defined (MATCH_MAY_ALLOCATE) +/* 4400 was enough to cause a crash on Alpha OSF/1, + whose default stack limit is 2mb. */ +int re_max_failures = 20000; +#else +int re_max_failures = 2000; +#endif + +union fail_stack_elt +{ + unsigned char *pointer; + int integer; +}; + +typedef union fail_stack_elt fail_stack_elt_t; + +typedef struct +{ + fail_stack_elt_t *stack; + unsigned size; + unsigned avail; /* Offset of next open position. */ +} fail_stack_type; + +#endif /* INT_IS_16BIT */ + +#define FAIL_STACK_EMPTY() (fail_stack.avail == 0) +#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0) +#define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size) + + +/* Define macros to initialize and free the failure stack. + Do `return -2' if the alloc fails. */ + +#ifdef MATCH_MAY_ALLOCATE +#define INIT_FAIL_STACK() \ + do { \ + fail_stack.stack = (fail_stack_elt_t *) \ + REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \ + \ + if (fail_stack.stack == NULL) \ + return -2; \ + \ + fail_stack.size = INIT_FAILURE_ALLOC; \ + fail_stack.avail = 0; \ + } while (0) + +#define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack) +#else +#define INIT_FAIL_STACK() \ + do { \ + fail_stack.avail = 0; \ + } while (0) + +#define RESET_FAIL_STACK() +#endif + + +/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items. + + Return 1 if succeeds, and 0 if either ran out of memory + allocating space for it or it was already too large. + + REGEX_REALLOCATE_STACK requires `destination' be declared. */ + +#define DOUBLE_FAIL_STACK(fail_stack) \ + ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \ + ? 0 \ + : ((fail_stack).stack = (fail_stack_elt_t *) \ + REGEX_REALLOCATE_STACK ((fail_stack).stack, \ + (fail_stack).size * sizeof (fail_stack_elt_t), \ + ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)), \ + \ + (fail_stack).stack == NULL \ + ? 0 \ + : ((fail_stack).size <<= 1, \ + 1))) + + +/* Push pointer POINTER on FAIL_STACK. + Return 1 if was able to do so and 0 if ran out of memory allocating + space to do so. */ +#define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \ + ((FAIL_STACK_FULL () \ + && !DOUBLE_FAIL_STACK (FAIL_STACK)) \ + ? 0 \ + : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \ + 1)) + +/* Push a pointer value onto the failure stack. + Assumes the variable `fail_stack'. Probably should only + be called from within `PUSH_FAILURE_POINT'. */ +#define PUSH_FAILURE_POINTER(item) \ + fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item) + +/* This pushes an integer-valued item onto the failure stack. + Assumes the variable `fail_stack'. Probably should only + be called from within `PUSH_FAILURE_POINT'. */ +#define PUSH_FAILURE_INT(item) \ + fail_stack.stack[fail_stack.avail++].integer = (item) + +/* Push a fail_stack_elt_t value onto the failure stack. + Assumes the variable `fail_stack'. Probably should only + be called from within `PUSH_FAILURE_POINT'. */ +#define PUSH_FAILURE_ELT(item) \ + fail_stack.stack[fail_stack.avail++] = (item) + +/* These three POP... operations complement the three PUSH... operations. + All assume that `fail_stack' is nonempty. */ +#define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer +#define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer +#define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail] + +/* Used to omit pushing failure point id's when we're not debugging. */ +#ifdef DEBUG +#define DEBUG_PUSH PUSH_FAILURE_INT +#define DEBUG_POP(item_addr) (item_addr)->integer = POP_FAILURE_INT () +#else +#define DEBUG_PUSH(item) +#define DEBUG_POP(item_addr) +#endif + + +/* Push the information about the state we will need + if we ever fail back to it. + + Requires variables fail_stack, regstart, regend, reg_info, and + num_regs be declared. DOUBLE_FAIL_STACK requires `destination' be + declared. + + Does `return FAILURE_CODE' if runs out of memory. */ + +#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \ + do { \ + char *destination; \ + /* Must be int, so when we don't save any registers, the arithmetic \ + of 0 + -1 isn't done as unsigned. */ \ + /* Can't be int, since there is not a shred of a guarantee that int \ + is wide enough to hold a value of something to which pointer can \ + be assigned */ \ + s_reg_t this_reg; \ + \ + DEBUG_STATEMENT (failure_id++); \ + DEBUG_STATEMENT (nfailure_points_pushed++); \ + DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \ + DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\ + DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\ + \ + DEBUG_PRINT2 (" slots needed: %d\n", NUM_FAILURE_ITEMS); \ + DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \ + \ + /* Ensure we have enough space allocated for what we will push. */ \ + while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \ + { \ + if (!DOUBLE_FAIL_STACK (fail_stack)) \ + return failure_code; \ + \ + DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \ + (fail_stack).size); \ + DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\ + } \ + \ + /* Push the info, starting with the registers. */ \ + DEBUG_PRINT1 ("\n"); \ + \ + if (1) \ + for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \ + this_reg++) \ + { \ + DEBUG_PRINT2 (" Pushing reg: %d\n", this_reg); \ + DEBUG_STATEMENT (num_regs_pushed++); \ + \ + DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \ + PUSH_FAILURE_POINTER (regstart[this_reg]); \ + \ + DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \ + PUSH_FAILURE_POINTER (regend[this_reg]); \ + \ + DEBUG_PRINT2 (" info: 0x%x\n ", reg_info[this_reg]); \ + DEBUG_PRINT2 (" match_null=%d", \ + REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \ + DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \ + DEBUG_PRINT2 (" matched_something=%d", \ + MATCHED_SOMETHING (reg_info[this_reg])); \ + DEBUG_PRINT2 (" ever_matched=%d", \ + EVER_MATCHED_SOMETHING (reg_info[this_reg])); \ + DEBUG_PRINT1 ("\n"); \ + PUSH_FAILURE_ELT (reg_info[this_reg].word); \ + } \ + \ + DEBUG_PRINT2 (" Pushing low active reg: %d\n", lowest_active_reg);\ + PUSH_FAILURE_INT (lowest_active_reg); \ + \ + DEBUG_PRINT2 (" Pushing high active reg: %d\n", highest_active_reg);\ + PUSH_FAILURE_INT (highest_active_reg); \ + \ + DEBUG_PRINT2 (" Pushing pattern 0x%x:\n", pattern_place); \ + DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \ + PUSH_FAILURE_POINTER (pattern_place); \ + \ + DEBUG_PRINT2 (" Pushing string 0x%x: `", string_place); \ + DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \ + size2); \ + DEBUG_PRINT1 ("'\n"); \ + PUSH_FAILURE_POINTER (string_place); \ + \ + DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \ + DEBUG_PUSH (failure_id); \ + } while (0) + +/* This is the number of items that are pushed and popped on the stack + for each register. */ +#define NUM_REG_ITEMS 3 + +/* Individual items aside from the registers. */ +#ifdef DEBUG +#define NUM_NONREG_ITEMS 5 /* Includes failure point id. */ +#else +#define NUM_NONREG_ITEMS 4 +#endif + +/* We push at most this many items on the stack. */ +/* We used to use (num_regs - 1), which is the number of registers + this regexp will save; but that was changed to 5 + to avoid stack overflow for a regexp with lots of parens. */ +#define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS) + +/* We actually push this many items. */ +#define NUM_FAILURE_ITEMS \ + (((0 \ + ? 0 : highest_active_reg - lowest_active_reg + 1) \ + * NUM_REG_ITEMS) \ + + NUM_NONREG_ITEMS) + +/* How many items can still be added to the stack without overflowing it. */ +#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail) + + +/* Pops what PUSH_FAIL_STACK pushes. + + We restore into the parameters, all of which should be lvalues: + STR -- the saved data position. + PAT -- the saved pattern position. + LOW_REG, HIGH_REG -- the highest and lowest active registers. + REGSTART, REGEND -- arrays of string positions. + REG_INFO -- array of information about each subexpression. + + Also assumes the variables `fail_stack' and (if debugging), `bufp', + `pend', `string1', `size1', `string2', and `size2'. */ + +#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\ +{ \ + DEBUG_STATEMENT (fail_stack_elt_t failure_id;) \ + s_reg_t this_reg; \ + const unsigned char *string_temp; \ + \ + assert (!FAIL_STACK_EMPTY ()); \ + \ + /* Remove failure points and point to how many regs pushed. */ \ + DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \ + DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \ + DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \ + \ + assert (fail_stack.avail >= NUM_NONREG_ITEMS); \ + \ + DEBUG_POP (&failure_id); \ + DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \ + \ + /* If the saved string location is NULL, it came from an \ + on_failure_keep_string_jump opcode, and we want to throw away the \ + saved NULL, thus retaining our current position in the string. */ \ + string_temp = POP_FAILURE_POINTER (); \ + if (string_temp != NULL) \ + str = (const char *) string_temp; \ + \ + DEBUG_PRINT2 (" Popping string 0x%x: `", str); \ + DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \ + DEBUG_PRINT1 ("'\n"); \ + \ + pat = (unsigned char *) POP_FAILURE_POINTER (); \ + DEBUG_PRINT2 (" Popping pattern 0x%x:\n", pat); \ + DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \ + \ + /* Restore register info. */ \ + high_reg = (active_reg_t) POP_FAILURE_INT (); \ + DEBUG_PRINT2 (" Popping high active reg: %d\n", high_reg); \ + \ + low_reg = (active_reg_t) POP_FAILURE_INT (); \ + DEBUG_PRINT2 (" Popping low active reg: %d\n", low_reg); \ + \ + if (1) \ + for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \ + { \ + DEBUG_PRINT2 (" Popping reg: %d\n", this_reg); \ + \ + reg_info[this_reg].word = POP_FAILURE_ELT (); \ + DEBUG_PRINT2 (" info: 0x%x\n", reg_info[this_reg]); \ + \ + regend[this_reg] = (const char *) POP_FAILURE_POINTER (); \ + DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \ + \ + regstart[this_reg] = (const char *) POP_FAILURE_POINTER (); \ + DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \ + } \ + else \ + { \ + for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \ + { \ + reg_info[this_reg].word.integer = 0; \ + regend[this_reg] = 0; \ + regstart[this_reg] = 0; \ + } \ + highest_active_reg = high_reg; \ + } \ + \ + set_regs_matched_done = 0; \ + DEBUG_STATEMENT (nfailure_points_popped++); \ +} /* POP_FAILURE_POINT */ + + + +/* Structure for per-register (a.k.a. per-group) information. + Other register information, such as the + starting and ending positions (which are addresses), and the list of + inner groups (which is a bits list) are maintained in separate + variables. + + We are making a (strictly speaking) nonportable assumption here: that + the compiler will pack our bit fields into something that fits into + the type of `word', i.e., is something that fits into one item on the + failure stack. */ + + +/* Declarations and macros for re_match_2. */ + +typedef union +{ + fail_stack_elt_t word; + struct + { + /* This field is one if this group can match the empty string, + zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */ +#define MATCH_NULL_UNSET_VALUE 3 + unsigned match_null_string_p : 2; + unsigned is_active : 1; + unsigned matched_something : 1; + unsigned ever_matched_something : 1; + } bits; +} register_info_type; + +#define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p) +#define IS_ACTIVE(R) ((R).bits.is_active) +#define MATCHED_SOMETHING(R) ((R).bits.matched_something) +#define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something) + + +/* Call this when have matched a real character; it sets `matched' flags + for the subexpressions which we are currently inside. Also records + that those subexprs have matched. */ +#define SET_REGS_MATCHED() \ + do \ + { \ + if (!set_regs_matched_done) \ + { \ + active_reg_t r; \ + set_regs_matched_done = 1; \ + for (r = lowest_active_reg; r <= highest_active_reg; r++) \ + { \ + MATCHED_SOMETHING (reg_info[r]) \ + = EVER_MATCHED_SOMETHING (reg_info[r]) \ + = 1; \ + } \ + } \ + } \ + while (0) + +/* Registers are set to a sentinel when they haven't yet matched. */ +static char reg_unset_dummy; +#define REG_UNSET_VALUE (®_unset_dummy) +#define REG_UNSET(e) ((e) == REG_UNSET_VALUE) + +/* Subroutine declarations and macros for regex_compile. */ + +static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size, + reg_syntax_t syntax, + struct re_pattern_buffer *bufp)); +static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg)); +static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc, + int arg1, int arg2)); +static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, + int arg, unsigned char *end)); +static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc, + int arg1, int arg2, unsigned char *end)); +static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p, + reg_syntax_t syntax)); +static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend, + reg_syntax_t syntax)); +static reg_errcode_t compile_range _RE_ARGS ((const char **p_ptr, + const char *pend, + char *translate, + reg_syntax_t syntax, + unsigned char *b)); + +/* Fetch the next character in the uncompiled pattern---translating it + if necessary. Also cast from a signed character in the constant + string passed to us by the user to an unsigned char that we can use + as an array index (in, e.g., `translate'). */ +#ifndef PATFETCH +#define PATFETCH(c) \ + do {if (p == pend) return REG_EEND; \ + c = (unsigned char) *p++; \ + if (translate) c = (unsigned char) translate[c]; \ + } while (0) +#endif + +/* Fetch the next character in the uncompiled pattern, with no + translation. */ +#define PATFETCH_RAW(c) \ + do {if (p == pend) return REG_EEND; \ + c = (unsigned char) *p++; \ + } while (0) + +/* Go backwards one character in the pattern. */ +#define PATUNFETCH p-- + + +/* If `translate' is non-null, return translate[D], else just D. We + cast the subscript to translate because some data is declared as + `char *', to avoid warnings when a string constant is passed. But + when we use a character as a subscript we must make it unsigned. */ +#ifndef TRANSLATE +#define TRANSLATE(d) \ + (translate ? (char) translate[(unsigned char) (d)] : (d)) +#endif + + +/* Macros for outputting the compiled pattern into `buffer'. */ + +/* If the buffer isn't allocated when it comes in, use this. */ +#define INIT_BUF_SIZE 32 + +/* Make sure we have at least N more bytes of space in buffer. */ +#define GET_BUFFER_SPACE(n) \ + while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \ + EXTEND_BUFFER () + +/* Make sure we have one more byte of buffer space and then add C to it. */ +#define BUF_PUSH(c) \ + do { \ + GET_BUFFER_SPACE (1); \ + *b++ = (unsigned char) (c); \ + } while (0) + + +/* Ensure we have two more bytes of buffer space and then append C1 and C2. */ +#define BUF_PUSH_2(c1, c2) \ + do { \ + GET_BUFFER_SPACE (2); \ + *b++ = (unsigned char) (c1); \ + *b++ = (unsigned char) (c2); \ + } while (0) + + +/* As with BUF_PUSH_2, except for three bytes. */ +#define BUF_PUSH_3(c1, c2, c3) \ + do { \ + GET_BUFFER_SPACE (3); \ + *b++ = (unsigned char) (c1); \ + *b++ = (unsigned char) (c2); \ + *b++ = (unsigned char) (c3); \ + } while (0) + + +/* Store a jump with opcode OP at LOC to location TO. We store a + relative address offset by the three bytes the jump itself occupies. */ +#define STORE_JUMP(op, loc, to) \ + store_op1 (op, loc, (int) ((to) - (loc) - 3)) + +/* Likewise, for a two-argument jump. */ +#define STORE_JUMP2(op, loc, to, arg) \ + store_op2 (op, loc, (int) ((to) - (loc) - 3), arg) + +/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */ +#define INSERT_JUMP(op, loc, to) \ + insert_op1 (op, loc, (int) ((to) - (loc) - 3), b) + +/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */ +#define INSERT_JUMP2(op, loc, to, arg) \ + insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b) + + +/* This is not an arbitrary limit: the arguments which represent offsets + into the pattern are two bytes long. So if 2^16 bytes turns out to + be too small, many things would have to change. */ +/* Any other compiler which, like MSC, has allocation limit below 2^16 + bytes will have to use approach similar to what was done below for + MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up + reallocating to 0 bytes. Such thing is not going to work too well. + You have been warned!! */ +#if defined(_MSC_VER) && !defined(WIN32) +/* Microsoft C 16-bit versions limit malloc to approx 65512 bytes. + The REALLOC define eliminates a flurry of conversion warnings, + but is not required. */ +#define MAX_BUF_SIZE 65500L +#define REALLOC(p,s) realloc ((p), (size_t) (s)) +#else +#define MAX_BUF_SIZE (1L << 16) +#define REALLOC(p,s) realloc ((p), (s)) +#endif + +/* Extend the buffer by twice its current size via realloc and + reset the pointers that pointed into the old block to point to the + correct places in the new one. If extending the buffer results in it + being larger than MAX_BUF_SIZE, then flag memory exhausted. */ +#define EXTEND_BUFFER() \ + do { \ + unsigned char *old_buffer = bufp->buffer; \ + if (bufp->allocated == MAX_BUF_SIZE) \ + return REG_ESIZE; \ + bufp->allocated <<= 1; \ + if (bufp->allocated > MAX_BUF_SIZE) \ + bufp->allocated = MAX_BUF_SIZE; \ + bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\ + if (bufp->buffer == NULL) \ + return REG_ESPACE; \ + /* If the buffer moved, move all the pointers into it. */ \ + if (old_buffer != bufp->buffer) \ + { \ + b = (b - old_buffer) + bufp->buffer; \ + begalt = (begalt - old_buffer) + bufp->buffer; \ + if (fixup_alt_jump) \ + fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\ + if (laststart) \ + laststart = (laststart - old_buffer) + bufp->buffer; \ + if (pending_exact) \ + pending_exact = (pending_exact - old_buffer) + bufp->buffer; \ + } \ + } while (0) + + +/* Since we have one byte reserved for the register number argument to + {start,stop}_memory, the maximum number of groups we can report + things about is what fits in that byte. */ +#define MAX_REGNUM 255 + +/* But patterns can have more than `MAX_REGNUM' registers. We just + ignore the excess. */ +typedef unsigned regnum_t; + + +/* Macros for the compile stack. */ + +/* Since offsets can go either forwards or backwards, this type needs to + be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */ +/* int may be not enough when sizeof(int) == 2. */ +typedef long pattern_offset_t; + +typedef struct +{ + pattern_offset_t begalt_offset; + pattern_offset_t fixup_alt_jump; + pattern_offset_t inner_group_offset; + pattern_offset_t laststart_offset; + regnum_t regnum; +} compile_stack_elt_t; + + +typedef struct +{ + compile_stack_elt_t *stack; + unsigned size; + unsigned avail; /* Offset of next open position. */ +} compile_stack_type; + + +#define INIT_COMPILE_STACK_SIZE 32 + +#define COMPILE_STACK_EMPTY (compile_stack.avail == 0) +#define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size) + +/* The next available element. */ +#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) + + +/* Set the bit for character C in a list. */ +#define SET_LIST_BIT(c) \ + (b[((unsigned char) (c)) / BYTEWIDTH] \ + |= 1 << (((unsigned char) c) % BYTEWIDTH)) + + +/* Get the next unsigned number in the uncompiled pattern. */ +#define GET_UNSIGNED_NUMBER(num) \ + { if (p != pend) \ + { \ + PATFETCH (c); \ + while (ISDIGIT (c)) \ + { \ + if (num < 0) \ + num = 0; \ + num = num * 10 + c - '0'; \ + if (p == pend) \ + break; \ + PATFETCH (c); \ + } \ + } \ + } + +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +/* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendement 1. */ +# ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +# else +/* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ +# define CHAR_CLASS_MAX_LENGTH 256 +# endif + +# define IS_CHAR_CLASS(string) wctype (string) +#else +# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ + +# define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) +#endif + +#ifndef MATCH_MAY_ALLOCATE + +/* If we cannot allocate large objects within re_match_2_internal, + we make the fail stack and register vectors global. + The fail stack, we grow to the maximum size when a regexp + is compiled. + The register vectors, we adjust in size each time we + compile a regexp, according to the number of registers it needs. */ + +static fail_stack_type fail_stack; + +/* Size with which the following vectors are currently allocated. + That is so we can make them bigger as needed, + but never make them smaller. */ +static int regs_allocated_size; + +static const char ** regstart, ** regend; +static const char ** old_regstart, ** old_regend; +static const char **best_regstart, **best_regend; +static register_info_type *reg_info; +static const char **reg_dummy; +static register_info_type *reg_info_dummy; + +/* Make the register vectors big enough for NUM_REGS registers, + but don't make them smaller. */ + +static +regex_grow_registers (num_regs) + int num_regs; +{ + if (num_regs > regs_allocated_size) + { + RETALLOC_IF (regstart, num_regs, const char *); + RETALLOC_IF (regend, num_regs, const char *); + RETALLOC_IF (old_regstart, num_regs, const char *); + RETALLOC_IF (old_regend, num_regs, const char *); + RETALLOC_IF (best_regstart, num_regs, const char *); + RETALLOC_IF (best_regend, num_regs, const char *); + RETALLOC_IF (reg_info, num_regs, register_info_type); + RETALLOC_IF (reg_dummy, num_regs, const char *); + RETALLOC_IF (reg_info_dummy, num_regs, register_info_type); + + regs_allocated_size = num_regs; + } +} + +#endif /* not MATCH_MAY_ALLOCATE */ + +static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type + compile_stack, + regnum_t regnum)); + +/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. + Returns one of error codes defined in `regex.h', or zero for success. + + Assumes the `allocated' (and perhaps `buffer') and `translate' + fields are set in BUFP on entry. + + If it succeeds, results are put in BUFP (if it returns an error, the + contents of BUFP are undefined): + `buffer' is the compiled pattern; + `syntax' is set to SYNTAX; + `used' is set to the length of the compiled pattern; + `fastmap_accurate' is zero; + `re_nsub' is the number of subexpressions in PATTERN; + `not_bol' and `not_eol' are zero; + + The `fastmap' and `newline_anchor' fields are neither + examined nor set. */ + +/* Return, freeing storage we allocated. */ +#define FREE_STACK_RETURN(value) \ + return (free (compile_stack.stack), value) /* __MEM_CHECKED__ */ + +static reg_errcode_t +regex_compile (pattern, size, syntax, bufp) + const char *pattern; + size_t size; + reg_syntax_t syntax; + struct re_pattern_buffer *bufp; +{ + /* We fetch characters from PATTERN here. Even though PATTERN is + `char *' (i.e., signed), we declare these variables as unsigned, so + they can be reliably used as array indices. */ + register unsigned char c, c1; + + /* A random temporary spot in PATTERN. */ + const char *p1; + + /* Points to the end of the buffer, where we should append. */ + register unsigned char *b; + + /* Keeps track of unclosed groups. */ + compile_stack_type compile_stack; + + /* Points to the current (ending) position in the pattern. */ + const char *p = pattern; + const char *pend = pattern + size; + + /* How to translate the characters in the pattern. */ + RE_TRANSLATE_TYPE translate = bufp->translate; + + /* Address of the count-byte of the most recently inserted `exactn' + command. This makes it possible to tell if a new exact-match + character can be added to that command or if the character requires + a new `exactn' command. */ + unsigned char *pending_exact = 0; + + /* Address of start of the most recently finished expression. + This tells, e.g., postfix * where to find the start of its + operand. Reset at the beginning of groups and alternatives. */ + unsigned char *laststart = 0; + + /* Address of beginning of regexp, or inside of last group. */ + unsigned char *begalt; + + /* Place in the uncompiled pattern (i.e., the {) to + which to go back if the interval is invalid. */ + const char *beg_interval; + + /* Address of the place where a forward jump should go to the end of + the containing expression. Each alternative of an `or' -- except the + last -- ends with a forward jump of this sort. */ + unsigned char *fixup_alt_jump = 0; + + /* Counts open-groups as they are encountered. Remembered for the + matching close-group on the compile stack, so the same register + number is put in the stop_memory as the start_memory. */ + regnum_t regnum = 0; + +#ifdef DEBUG + DEBUG_PRINT1 ("\nCompiling pattern: "); + if (debug) + { + unsigned debug_count; + + for (debug_count = 0; debug_count < size; debug_count++) + putchar (pattern[debug_count]); + putchar ('\n'); + } +#endif /* DEBUG */ + + /* Initialize the compile stack. */ + compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t); + if (compile_stack.stack == NULL) + return REG_ESPACE; + + compile_stack.size = INIT_COMPILE_STACK_SIZE; + compile_stack.avail = 0; + + /* Initialize the pattern buffer. */ + bufp->syntax = syntax; + bufp->fastmap_accurate = 0; + bufp->not_bol = bufp->not_eol = 0; + + /* Set `used' to zero, so that if we return an error, the pattern + printer (for debugging) will think there's no pattern. We reset it + at the end. */ + bufp->used = 0; + + /* Always count groups, whether or not bufp->no_sub is set. */ + bufp->re_nsub = 0; + +#if !defined (emacs) && !defined (SYNTAX_TABLE) + /* Initialize the syntax table. */ + init_syntax_once (); +#endif + + if (bufp->allocated == 0) + { + if (bufp->buffer) + { /* If zero allocated, but buffer is non-null, try to realloc + enough space. This loses if buffer's address is bogus, but + that is the user's responsibility. */ + RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char); + } + else + { /* Caller did not allocate a buffer. Do it for them. */ + bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char); + } + if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE); + + bufp->allocated = INIT_BUF_SIZE; + } + + begalt = b = bufp->buffer; + + /* Loop through the uncompiled pattern until we're at the end. */ + while (p != pend) + { + PATFETCH (c); + + switch (c) + { + case '^': + { + if ( /* If at start of pattern, it's an operator. */ + p == pattern + 1 + /* If context independent, it's an operator. */ + || syntax & RE_CONTEXT_INDEP_ANCHORS + /* Otherwise, depends on what's come before. */ + || at_begline_loc_p (pattern, p, syntax)) + BUF_PUSH (begline); + else + goto normal_char; + } + break; + + + case '$': + { + if ( /* If at end of pattern, it's an operator. */ + p == pend + /* If context independent, it's an operator. */ + || syntax & RE_CONTEXT_INDEP_ANCHORS + /* Otherwise, depends on what's next. */ + || at_endline_loc_p (p, pend, syntax)) + BUF_PUSH (endline); + else + goto normal_char; + } + break; + + + case '+': + case '?': + if ((syntax & RE_BK_PLUS_QM) + || (syntax & RE_LIMITED_OPS)) + goto normal_char; + handle_plus: + case '*': + /* If there is no previous pattern... */ + if (!laststart) + { + if (syntax & RE_CONTEXT_INVALID_OPS) + FREE_STACK_RETURN (REG_BADRPT); + else if (!(syntax & RE_CONTEXT_INDEP_OPS)) + goto normal_char; + } + + { + /* Are we optimizing this jump? */ + boolean keep_string_p = false; + + /* 1 means zero (many) matches is allowed. */ + char zero_times_ok = 0, many_times_ok = 0; + + /* If there is a sequence of repetition chars, collapse it + down to just one (the right one). We can't combine + interval operators with these because of, e.g., `a{2}*', + which should only match an even number of `a's. */ + + for (;;) + { + zero_times_ok |= c != '+'; + many_times_ok |= c != '?'; + + if (p == pend) + break; + + PATFETCH (c); + + if (c == '*' + || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?'))) + ; + + else if (syntax & RE_BK_PLUS_QM && c == '\\') + { + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + PATFETCH (c1); + if (!(c1 == '+' || c1 == '?')) + { + PATUNFETCH; + PATUNFETCH; + break; + } + + c = c1; + } + else + { + PATUNFETCH; + break; + } + + /* If we get here, we found another repeat character. */ + } + + /* Star, etc. applied to an empty pattern is equivalent + to an empty pattern. */ + if (!laststart) + break; + + /* Now we know whether or not zero matches is allowed + and also whether or not two or more matches is allowed. */ + if (many_times_ok) + { /* More than one repetition is allowed, so put in at the + end a backward relative jump from `b' to before the next + jump we're going to put in below (which jumps from + laststart to after this jump). + + But if we are at the `*' in the exact sequence `.*\n', + insert an unconditional jump backwards to the ., + instead of the beginning of the loop. This way we only + push a failure point once, instead of every time + through the loop. */ + assert (p - 1 > pattern); + + /* Allocate the space for the jump. */ + GET_BUFFER_SPACE (3); + + /* We know we are not at the first character of the pattern, + because laststart was nonzero. And we've already + incremented `p', by the way, to be the character after + the `*'. Do we have to do something analogous here + for null bytes, because of RE_DOT_NOT_NULL? */ + if (TRANSLATE (*(p - 2)) == TRANSLATE ('.') + && zero_times_ok + && p < pend && TRANSLATE (*p) == TRANSLATE ('\n') + && !(syntax & RE_DOT_NEWLINE)) + { /* We have .*\n. */ + STORE_JUMP (jump, b, laststart); + keep_string_p = true; + } + else + /* Anything else. */ + STORE_JUMP (maybe_pop_jump, b, laststart - 3); + + /* We've added more stuff to the buffer. */ + b += 3; + } + + /* On failure, jump from laststart to b + 3, which will be the + end of the buffer after this jump is inserted. */ + GET_BUFFER_SPACE (3); + INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump + : on_failure_jump, + laststart, b + 3); + pending_exact = 0; + b += 3; + + if (!zero_times_ok) + { + /* At least one repetition is required, so insert a + `dummy_failure_jump' before the initial + `on_failure_jump' instruction of the loop. This + effects a skip over that instruction the first time + we hit that loop. */ + GET_BUFFER_SPACE (3); + INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6); + b += 3; + } + } + break; + + + case '.': + laststart = b; + BUF_PUSH (anychar); + break; + + + case '[': + { + boolean had_char_class = false; + + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + /* Ensure that we have enough space to push a charset: the + opcode, the length count, and the bitset; 34 bytes in all. */ + GET_BUFFER_SPACE (34); + + laststart = b; + + /* We test `*p == '^' twice, instead of using an if + statement, so we only need one BUF_PUSH. */ + BUF_PUSH (*p == '^' ? charset_not : charset); + if (*p == '^') + p++; + + /* Remember the first position in the bracket expression. */ + p1 = p; + + /* Push the number of bytes in the bitmap. */ + BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH); + + /* Clear the whole map. */ + bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); + + /* charset_not matches newline according to a syntax bit. */ + if ((re_opcode_t) b[-2] == charset_not + && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) + SET_LIST_BIT ('\n'); + + /* Read in characters and ranges, setting map bits. */ + for (;;) + { + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + PATFETCH (c); + + /* \ might escape characters inside [...] and [^...]. */ + if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') + { + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + PATFETCH (c1); + SET_LIST_BIT (c1); + continue; + } + + /* Could be the end of the bracket expression. If it's + not (i.e., when the bracket expression is `[]' so + far), the ']' character bit gets set way below. */ + if (c == ']' && p != p1 + 1) + break; + + /* Look ahead to see if it's a range when the last thing + was a character class. */ + if (had_char_class && c == '-' && *p != ']') + FREE_STACK_RETURN (REG_ERANGE); + + /* Look ahead to see if it's a range when the last thing + was a character: if this is a hyphen not at the + beginning or the end of a list, then it's the range + operator. */ + if (c == '-' + && !(p - 2 >= pattern && p[-2] == '[') + && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') + && *p != ']') + { + reg_errcode_t ret + = compile_range (&p, pend, translate, syntax, b); + if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); + } + + else if (p[0] == '-' && p[1] != ']') + { /* This handles ranges made up of characters only. */ + reg_errcode_t ret; + + /* Move past the `-'. */ + PATFETCH (c1); + + ret = compile_range (&p, pend, translate, syntax, b); + if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); + } + + /* See if we're at the beginning of a possible character + class. */ + + else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') + { /* Leave room for the null. */ + char str[CHAR_CLASS_MAX_LENGTH + 1]; + + PATFETCH (c); + c1 = 0; + + /* If pattern is `[[:'. */ + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (;;) + { + PATFETCH (c); + if (c == ':' || c == ']' || p == pend + || c1 == CHAR_CLASS_MAX_LENGTH) + break; + str[c1++] = c; + } + str[c1] = '\0'; + + /* If isn't a word bracketed by `[:' and:`]': + undo the ending character, the letters, and leave + the leading `:' and `[' (but set bits for them). */ + if (c == ':' && *p == ']') + { +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) + boolean is_lower = STREQ (str, "lower"); + boolean is_upper = STREQ (str, "upper"); + wctype_t wt; + int ch; + + wt = wctype (str); + if (wt == 0) + FREE_STACK_RETURN (REG_ECTYPE); + + /* Throw away the ] at the end of the character + class. */ + PATFETCH (c); + + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (ch = 0; ch < 1 << BYTEWIDTH; ++ch) + { + if (iswctype (btowc (ch), wt)) + SET_LIST_BIT (ch); + + if (translate && (is_upper || is_lower) + && (ISUPPER (ch) || ISLOWER (ch))) + SET_LIST_BIT (ch); + } + + had_char_class = true; +#else + int ch; + boolean is_alnum = STREQ (str, "alnum"); + boolean is_alpha = STREQ (str, "alpha"); + boolean is_blank = STREQ (str, "blank"); + boolean is_cntrl = STREQ (str, "cntrl"); + boolean is_digit = STREQ (str, "digit"); + boolean is_graph = STREQ (str, "graph"); + boolean is_lower = STREQ (str, "lower"); + boolean is_print = STREQ (str, "print"); + boolean is_punct = STREQ (str, "punct"); + boolean is_space = STREQ (str, "space"); + boolean is_upper = STREQ (str, "upper"); + boolean is_xdigit = STREQ (str, "xdigit"); + + if (!IS_CHAR_CLASS (str)) + FREE_STACK_RETURN (REG_ECTYPE); + + /* Throw away the ] at the end of the character + class. */ + PATFETCH (c); + + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (ch = 0; ch < 1 << BYTEWIDTH; ch++) + { + /* This was split into 3 if's to + avoid an arbitrary limit in some compiler. */ + if ( (is_alnum && ISALNUM (ch)) + || (is_alpha && ISALPHA (ch)) + || (is_blank && ISBLANK (ch)) + || (is_cntrl && ISCNTRL (ch))) + SET_LIST_BIT (ch); + if ( (is_digit && ISDIGIT (ch)) + || (is_graph && ISGRAPH (ch)) + || (is_lower && ISLOWER (ch)) + || (is_print && ISPRINT (ch))) + SET_LIST_BIT (ch); + if ( (is_punct && ISPUNCT (ch)) + || (is_space && ISSPACE (ch)) + || (is_upper && ISUPPER (ch)) + || (is_xdigit && ISXDIGIT (ch))) + SET_LIST_BIT (ch); + if ( translate && (is_upper || is_lower) + && (ISUPPER (ch) || ISLOWER (ch))) + SET_LIST_BIT (ch); + } + had_char_class = true; +#endif /* libc || wctype.h */ + } + else + { + c1++; + while (c1--) + PATUNFETCH; + SET_LIST_BIT ('['); + SET_LIST_BIT (':'); + had_char_class = false; + } + } + else + { + had_char_class = false; + SET_LIST_BIT (c); + } + } + + /* Discard any (non)matching list bytes that are all 0 at the + end of the map. Decrease the map-length byte too. */ + while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) + b[-1]--; + b += b[-1]; + } + break; + + + case '(': + if (syntax & RE_NO_BK_PARENS) + goto handle_open; + else + goto normal_char; + + + case ')': + if (syntax & RE_NO_BK_PARENS) + goto handle_close; + else + goto normal_char; + + + case '\n': + if (syntax & RE_NEWLINE_ALT) + goto handle_alt; + else + goto normal_char; + + + case '|': + if (syntax & RE_NO_BK_VBAR) + goto handle_alt; + else + goto normal_char; + + + case '{': + if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES) + goto handle_interval; + else + goto normal_char; + + + case '\\': + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + /* Do not translate the character after the \, so that we can + distinguish, e.g., \B from \b, even if we normally would + translate, e.g., B to b. */ + PATFETCH_RAW (c); + + switch (c) + { + case '(': + if (syntax & RE_NO_BK_PARENS) + goto normal_backslash; + + handle_open: + bufp->re_nsub++; + regnum++; + + if (COMPILE_STACK_FULL) + { + RETALLOC (compile_stack.stack, compile_stack.size << 1, + compile_stack_elt_t); + if (compile_stack.stack == NULL) return REG_ESPACE; + + compile_stack.size <<= 1; + } + + /* These are the values to restore when we hit end of this + group. They are all relative offsets, so that if the + whole pattern moves because of realloc, they will still + be valid. */ + COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer; + COMPILE_STACK_TOP.fixup_alt_jump + = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0; + COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer; + COMPILE_STACK_TOP.regnum = regnum; + + /* We will eventually replace the 0 with the number of + groups inner to this one. But do not push a + start_memory for groups beyond the last one we can + represent in the compiled pattern. */ + if (regnum <= MAX_REGNUM) + { + COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2; + BUF_PUSH_3 (start_memory, regnum, 0); + } + + compile_stack.avail++; + + fixup_alt_jump = 0; + laststart = 0; + begalt = b; + /* If we've reached MAX_REGNUM groups, then this open + won't actually generate any code, so we'll have to + clear pending_exact explicitly. */ + pending_exact = 0; + break; + + + case ')': + if (syntax & RE_NO_BK_PARENS) goto normal_backslash; + + if (COMPILE_STACK_EMPTY) + if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) + goto normal_backslash; + else + FREE_STACK_RETURN (REG_ERPAREN); + + handle_close: + if (fixup_alt_jump) + { /* Push a dummy failure point at the end of the + alternative for a possible future + `pop_failure_jump' to pop. See comments at + `push_dummy_failure' in `re_match_2'. */ + BUF_PUSH (push_dummy_failure); + + /* We allocated space for this jump when we assigned + to `fixup_alt_jump', in the `handle_alt' case below. */ + STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1); + } + + /* See similar code for backslashed left paren above. */ + if (COMPILE_STACK_EMPTY) + if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) + goto normal_char; + else + FREE_STACK_RETURN (REG_ERPAREN); + + /* Since we just checked for an empty stack above, this + ``can't happen''. */ + assert (compile_stack.avail != 0); + { + /* We don't just want to restore into `regnum', because + later groups should continue to be numbered higher, + as in `(ab)c(de)' -- the second group is #2. */ + regnum_t this_group_regnum; + + compile_stack.avail--; + begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset; + fixup_alt_jump + = COMPILE_STACK_TOP.fixup_alt_jump + ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1 + : 0; + laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset; + this_group_regnum = COMPILE_STACK_TOP.regnum; + /* If we've reached MAX_REGNUM groups, then this open + won't actually generate any code, so we'll have to + clear pending_exact explicitly. */ + pending_exact = 0; + + /* We're at the end of the group, so now we know how many + groups were inside this one. */ + if (this_group_regnum <= MAX_REGNUM) + { + unsigned char *inner_group_loc + = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset; + + *inner_group_loc = regnum - this_group_regnum; + BUF_PUSH_3 (stop_memory, this_group_regnum, + regnum - this_group_regnum); + } + } + break; + + + case '|': /* `\|'. */ + if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR) + goto normal_backslash; + handle_alt: + if (syntax & RE_LIMITED_OPS) + goto normal_char; + + /* Insert before the previous alternative a jump which + jumps to this alternative if the former fails. */ + GET_BUFFER_SPACE (3); + INSERT_JUMP (on_failure_jump, begalt, b + 6); + pending_exact = 0; + b += 3; + + /* The alternative before this one has a jump after it + which gets executed if it gets matched. Adjust that + jump so it will jump to this alternative's analogous + jump (put in below, which in turn will jump to the next + (if any) alternative's such jump, etc.). The last such + jump jumps to the correct final destination. A picture: + _____ _____ + | | | | + | v | v + a | b | c + + If we are at `b', then fixup_alt_jump right now points to a + three-byte space after `a'. We'll put in the jump, set + fixup_alt_jump to right after `b', and leave behind three + bytes which we'll fill in when we get to after `c'. */ + + if (fixup_alt_jump) + STORE_JUMP (jump_past_alt, fixup_alt_jump, b); + + /* Mark and leave space for a jump after this alternative, + to be filled in later either by next alternative or + when know we're at the end of a series of alternatives. */ + fixup_alt_jump = b; + GET_BUFFER_SPACE (3); + b += 3; + + laststart = 0; + begalt = b; + break; + + + case '{': + /* If \{ is a literal. */ + if (!(syntax & RE_INTERVALS) + /* If we're at `\{' and it's not the open-interval + operator. */ + || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + || (p - 2 == pattern && p == pend)) + goto normal_backslash; + + handle_interval: + { + /* If got here, then the syntax allows intervals. */ + + /* At least (most) this many matches must be made. */ + int lower_bound = -1, upper_bound = -1; + + beg_interval = p - 1; + + if (p == pend) + { + if (syntax & RE_NO_BK_BRACES) + goto unfetch_interval; + else + FREE_STACK_RETURN (REG_EBRACE); + } + + GET_UNSIGNED_NUMBER (lower_bound); + + if (c == ',') + { + GET_UNSIGNED_NUMBER (upper_bound); + if (upper_bound < 0) upper_bound = RE_DUP_MAX; + } + else + /* Interval such as `{1}' => match exactly once. */ + upper_bound = lower_bound; + + if (lower_bound < 0 || upper_bound > RE_DUP_MAX + || lower_bound > upper_bound) + { + if (syntax & RE_NO_BK_BRACES) + goto unfetch_interval; + else + FREE_STACK_RETURN (REG_BADBR); + } + + if (!(syntax & RE_NO_BK_BRACES)) + { + if (c != '\\') FREE_STACK_RETURN (REG_EBRACE); + + PATFETCH (c); + } + + if (c != '}') + { + if (syntax & RE_NO_BK_BRACES) + goto unfetch_interval; + else + FREE_STACK_RETURN (REG_BADBR); + } + + /* We just parsed a valid interval. */ + + /* If it's invalid to have no preceding re. */ + if (!laststart) + { + if (syntax & RE_CONTEXT_INVALID_OPS) + FREE_STACK_RETURN (REG_BADRPT); + else if (syntax & RE_CONTEXT_INDEP_OPS) + laststart = b; + else + goto unfetch_interval; + } + + /* If the upper bound is zero, don't want to succeed at + all; jump from `laststart' to `b + 3', which will be + the end of the buffer after we insert the jump. */ + if (upper_bound == 0) + { + GET_BUFFER_SPACE (3); + INSERT_JUMP (jump, laststart, b + 3); + b += 3; + } + + /* Otherwise, we have a nontrivial interval. When + we're all done, the pattern will look like: + set_number_at <jump count> <upper bound> + set_number_at <succeed_n count> <lower bound> + succeed_n <after jump addr> <succeed_n count> + <body of loop> + jump_n <succeed_n addr> <jump count> + (The upper bound and `jump_n' are omitted if + `upper_bound' is 1, though.) */ + else + { /* If the upper bound is > 1, we need to insert + more at the end of the loop. */ + unsigned nbytes = 10 + (upper_bound > 1) * 10; + + GET_BUFFER_SPACE (nbytes); + + /* Initialize lower bound of the `succeed_n', even + though it will be set during matching by its + attendant `set_number_at' (inserted next), + because `re_compile_fastmap' needs to know. + Jump to the `jump_n' we might insert below. */ + INSERT_JUMP2 (succeed_n, laststart, + b + 5 + (upper_bound > 1) * 5, + lower_bound); + b += 5; + + /* Code to initialize the lower bound. Insert + before the `succeed_n'. The `5' is the last two + bytes of this `set_number_at', plus 3 bytes of + the following `succeed_n'. */ + insert_op2 (set_number_at, laststart, 5, lower_bound, b); + b += 5; + + if (upper_bound > 1) + { /* More than one repetition is allowed, so + append a backward jump to the `succeed_n' + that starts this interval. + + When we've reached this during matching, + we'll have matched the interval once, so + jump back only `upper_bound - 1' times. */ + STORE_JUMP2 (jump_n, b, laststart + 5, + upper_bound - 1); + b += 5; + + /* The location we want to set is the second + parameter of the `jump_n'; that is `b-2' as + an absolute address. `laststart' will be + the `set_number_at' we're about to insert; + `laststart+3' the number to set, the source + for the relative address. But we are + inserting into the middle of the pattern -- + so everything is getting moved up by 5. + Conclusion: (b - 2) - (laststart + 3) + 5, + i.e., b - laststart. + + We insert this at the beginning of the loop + so that if we fail during matching, we'll + reinitialize the bounds. */ + insert_op2 (set_number_at, laststart, b - laststart, + upper_bound - 1, b); + b += 5; + } + } + pending_exact = 0; + beg_interval = NULL; + } + break; + + unfetch_interval: + /* If an invalid interval, match the characters as literals. */ + assert (beg_interval); + p = beg_interval; + beg_interval = NULL; + + /* normal_char and normal_backslash need `c'. */ + PATFETCH (c); + + if (!(syntax & RE_NO_BK_BRACES)) + { + if (p > pattern && p[-1] == '\\') + goto normal_backslash; + } + goto normal_char; + +#ifdef emacs + /* There is no way to specify the before_dot and after_dot + operators. rms says this is ok. --karl */ + case '=': + BUF_PUSH (at_dot); + break; + + case 's': + laststart = b; + PATFETCH (c); + BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]); + break; + + case 'S': + laststart = b; + PATFETCH (c); + BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]); + break; +#endif /* emacs */ + + + case 'w': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + laststart = b; + BUF_PUSH (wordchar); + break; + + + case 'W': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + laststart = b; + BUF_PUSH (notwordchar); + break; + + + case '<': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (wordbeg); + break; + + case '>': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (wordend); + break; + + case 'b': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (wordbound); + break; + + case 'B': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (notwordbound); + break; + + case '`': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (begbuf); + break; + + case '\'': + if (re_syntax_options & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (endbuf); + break; + + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if (syntax & RE_NO_BK_REFS) + goto normal_char; + + c1 = c - '0'; + + if (c1 > regnum) + FREE_STACK_RETURN (REG_ESUBREG); + + /* Can't back reference to a subexpression if inside of it. */ + if (group_in_compile_stack (compile_stack, (regnum_t) c1)) + goto normal_char; + + laststart = b; + BUF_PUSH_2 (duplicate, c1); + break; + + + case '+': + case '?': + if (syntax & RE_BK_PLUS_QM) + goto handle_plus; + else + goto normal_backslash; + + default: + normal_backslash: + /* You might think it would be useful for \ to mean + not to translate; but if we don't translate it + it will never match anything. */ + c = TRANSLATE (c); + goto normal_char; + } + break; + + + default: + /* Expects the character in `c'. */ + normal_char: + /* If no exactn currently being built. */ + if (!pending_exact + + /* If last exactn not at current position. */ + || pending_exact + *pending_exact + 1 != b + + /* We have only one byte following the exactn for the count. */ + || *pending_exact == (1 << BYTEWIDTH) - 1 + + /* If followed by a repetition operator. */ + || *p == '*' || *p == '^' + || ((syntax & RE_BK_PLUS_QM) + ? *p == '\\' && (p[1] == '+' || p[1] == '?') + : (*p == '+' || *p == '?')) + || ((syntax & RE_INTERVALS) + && ((syntax & RE_NO_BK_BRACES) + ? *p == '{' + : (p[0] == '\\' && p[1] == '{')))) + { + /* Start building a new exactn. */ + + laststart = b; + + BUF_PUSH_2 (exactn, 0); + pending_exact = b - 1; + } + + BUF_PUSH (c); + (*pending_exact)++; + break; + } /* switch (c) */ + } /* while p != pend */ + + + /* Through the pattern now. */ + + if (fixup_alt_jump) + STORE_JUMP (jump_past_alt, fixup_alt_jump, b); + + if (!COMPILE_STACK_EMPTY) + FREE_STACK_RETURN (REG_EPAREN); + + /* If we don't want backtracking, force success + the first time we reach the end of the compiled pattern. */ + if (syntax & RE_NO_POSIX_BACKTRACKING) + BUF_PUSH (succeed); + + free (compile_stack.stack); /* __MEM_CHECKED__ */ + + /* We have succeeded; set the length of the buffer. */ + bufp->used = b - bufp->buffer; + +#ifdef DEBUG + if (debug) + { + DEBUG_PRINT1 ("\nCompiled pattern: \n"); + print_compiled_pattern (bufp); + } +#endif /* DEBUG */ + +#ifndef MATCH_MAY_ALLOCATE + /* Initialize the failure stack to the largest possible stack. This + isn't necessary unless we're trying to avoid calling alloca in + the search and match routines. */ + { + int num_regs = bufp->re_nsub + 1; + + /* Since DOUBLE_FAIL_STACK refuses to double only if the current size + is strictly greater than re_max_failures, the largest possible stack + is 2 * re_max_failures failure points. */ + if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS)) + { + fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS); + +#ifdef emacs + if (! fail_stack.stack) + fail_stack.stack + = (fail_stack_elt_t *) xmalloc (fail_stack.size + * sizeof (fail_stack_elt_t)); + else + fail_stack.stack + = (fail_stack_elt_t *) xrealloc (fail_stack.stack, + (fail_stack.size + * sizeof (fail_stack_elt_t))); +#else /* not emacs */ + if (! fail_stack.stack) + fail_stack.stack + = (fail_stack_elt_t *) malloc (fail_stack.size /* __MEM_CHECKED__ */ + * sizeof (fail_stack_elt_t)); + else + fail_stack.stack + = (fail_stack_elt_t *) realloc (fail_stack.stack, /* __MEM_CHECKED__ */ + (fail_stack.size + * sizeof (fail_stack_elt_t))); +#endif /* not emacs */ + } + + regex_grow_registers (num_regs); + } +#endif /* not MATCH_MAY_ALLOCATE */ + + return REG_NOERROR; +} /* regex_compile */ + +/* Subroutines for `regex_compile'. */ + +/* Store OP at LOC followed by two-byte integer parameter ARG. */ + +static void +store_op1 (op, loc, arg) + re_opcode_t op; + unsigned char *loc; + int arg; +{ + *loc = (unsigned char) op; + STORE_NUMBER (loc + 1, arg); +} + + +/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */ + +static void +store_op2 (op, loc, arg1, arg2) + re_opcode_t op; + unsigned char *loc; + int arg1, arg2; +{ + *loc = (unsigned char) op; + STORE_NUMBER (loc + 1, arg1); + STORE_NUMBER (loc + 3, arg2); +} + + +/* Copy the bytes from LOC to END to open up three bytes of space at LOC + for OP followed by two-byte integer parameter ARG. */ + +static void +insert_op1 (op, loc, arg, end) + re_opcode_t op; + unsigned char *loc; + int arg; + unsigned char *end; +{ + register unsigned char *pfrom = end; + register unsigned char *pto = end + 3; + + while (pfrom != loc) + *--pto = *--pfrom; + + store_op1 (op, loc, arg); +} + + +/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */ + +static void +insert_op2 (op, loc, arg1, arg2, end) + re_opcode_t op; + unsigned char *loc; + int arg1, arg2; + unsigned char *end; +{ + register unsigned char *pfrom = end; + register unsigned char *pto = end + 5; + + while (pfrom != loc) + *--pto = *--pfrom; + + store_op2 (op, loc, arg1, arg2); +} + + +/* P points to just after a ^ in PATTERN. Return true if that ^ comes + after an alternative or a begin-subexpression. We assume there is at + least one character before the ^. */ + +static boolean +at_begline_loc_p (pattern, p, syntax) + const char *pattern, *p; + reg_syntax_t syntax; +{ + const char *prev = p - 2; + boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\'; + + return + /* After a subexpression? */ + (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash)) + /* After an alternative? */ + || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash)); +} + + +/* The dual of at_begline_loc_p. This one is for $. We assume there is + at least one character after the $, i.e., `P < PEND'. */ + +static boolean +at_endline_loc_p (p, pend, syntax) + const char *p, *pend; + reg_syntax_t syntax; +{ + const char *next = p; + boolean next_backslash = *next == '\\'; + const char *next_next = p + 1 < pend ? p + 1 : 0; + + return + /* Before a subexpression? */ + (syntax & RE_NO_BK_PARENS ? *next == ')' + : next_backslash && next_next && *next_next == ')') + /* Before an alternative? */ + || (syntax & RE_NO_BK_VBAR ? *next == '|' + : next_backslash && next_next && *next_next == '|'); +} + + +/* Returns true if REGNUM is in one of COMPILE_STACK's elements and + false if it's not. */ + +static boolean +group_in_compile_stack (compile_stack, regnum) + compile_stack_type compile_stack; + regnum_t regnum; +{ + int this_element; + + for (this_element = compile_stack.avail - 1; + this_element >= 0; + this_element--) + if (compile_stack.stack[this_element].regnum == regnum) + return true; + + return false; +} + + +/* Read the ending character of a range (in a bracket expression) from the + uncompiled pattern *P_PTR (which ends at PEND). We assume the + starting character is in `P[-2]'. (`P[-1]' is the character `-'.) + Then we set the translation of all bits between the starting and + ending characters (inclusive) in the compiled pattern B. + + Return an error code. + + We use these short variable names so we can use the same macros as + `regex_compile' itself. */ + +static reg_errcode_t +compile_range (p_ptr, pend, translate, syntax, b) + const char **p_ptr, *pend; + RE_TRANSLATE_TYPE translate; + reg_syntax_t syntax; + unsigned char *b; +{ + unsigned this_char; + + const char *p = *p_ptr; + unsigned int range_start, range_end; + + if (p == pend) + return REG_ERANGE; + + /* Even though the pattern is a signed `char *', we need to fetch + with unsigned char *'s; if the high bit of the pattern character + is set, the range endpoints will be negative if we fetch using a + signed char *. + + We also want to fetch the endpoints without translating them; the + appropriate translation is done in the bit-setting loop below. */ + /* The SVR4 compiler on the 3B2 had trouble with unsigned const char *. */ + range_start = ((const unsigned char *) p)[-2]; + range_end = ((const unsigned char *) p)[0]; + + /* Have to increment the pointer into the pattern string, so the + caller isn't still at the ending character. */ + (*p_ptr)++; + + /* If the start is after the end, the range is empty. */ + if (range_start > range_end) + return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; + + /* Here we see why `this_char' has to be larger than an `unsigned + char' -- the range is inclusive, so if `range_end' == 0xff + (assuming 8-bit characters), we would otherwise go into an infinite + loop, since all characters <= 0xff. */ + for (this_char = range_start; this_char <= range_end; this_char++) + { + SET_LIST_BIT (TRANSLATE (this_char)); + } + + return REG_NOERROR; +} + +/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in + BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible + characters can start a string that matches the pattern. This fastmap + is used by re_search to skip quickly over impossible starting points. + + The caller must supply the address of a (1 << BYTEWIDTH)-byte data + area as BUFP->fastmap. + + We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in + the pattern buffer. + + Returns 0 if we succeed, -2 if an internal error. */ + +int +re_compile_fastmap (bufp) + struct re_pattern_buffer *bufp; +{ + int j, k; +#ifdef MATCH_MAY_ALLOCATE + fail_stack_type fail_stack; +#endif +#ifndef REGEX_MALLOC + char *destination; +#endif + /* We don't push any register information onto the failure stack. */ + unsigned num_regs = 0; + + register char *fastmap = bufp->fastmap; + unsigned char *pattern = bufp->buffer; + unsigned char *p = pattern; + register unsigned char *pend = pattern + bufp->used; + +#ifdef REL_ALLOC + /* This holds the pointer to the failure stack, when + it is allocated relocatably. */ + fail_stack_elt_t *failure_stack_ptr; +#endif + + /* Assume that each path through the pattern can be null until + proven otherwise. We set this false at the bottom of switch + statement, to which we get only if a particular path doesn't + match the empty string. */ + boolean path_can_be_null = true; + + /* We aren't doing a `succeed_n' to begin with. */ + boolean succeed_n_p = false; + + assert (fastmap != NULL && p != NULL); + + INIT_FAIL_STACK (); + bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */ + bufp->fastmap_accurate = 1; /* It will be when we're done. */ + bufp->can_be_null = 0; + + while (1) + { + if (p == pend || *p == succeed) + { + /* We have reached the (effective) end of pattern. */ + if (!FAIL_STACK_EMPTY ()) + { + bufp->can_be_null |= path_can_be_null; + + /* Reset for next path. */ + path_can_be_null = true; + + p = fail_stack.stack[--fail_stack.avail].pointer; + + continue; + } + else + break; + } + + /* We should never be about to go beyond the end of the pattern. */ + assert (p < pend); + + switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) + { + + /* I guess the idea here is to simply not bother with a fastmap + if a backreference is used, since it's too hard to figure out + the fastmap for the corresponding group. Setting + `can_be_null' stops `re_search_2' from using the fastmap, so + that is all we do. */ + case duplicate: + bufp->can_be_null = 1; + goto done; + + + /* Following are the cases which match a character. These end + with `break'. */ + + case exactn: + fastmap[p[1]] = 1; + break; + + + case charset: + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) + fastmap[j] = 1; + break; + + + case charset_not: + /* Chars beyond end of map must be allowed. */ + for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) + fastmap[j] = 1; + + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) + fastmap[j] = 1; + break; + + + case wordchar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) == Sword) + fastmap[j] = 1; + break; + + + case notwordchar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) != Sword) + fastmap[j] = 1; + break; + + + case anychar: + { + int fastmap_newline = fastmap['\n']; + + /* `.' matches anything ... */ + for (j = 0; j < (1 << BYTEWIDTH); j++) + fastmap[j] = 1; + + /* ... except perhaps newline. */ + if (!(bufp->syntax & RE_DOT_NEWLINE)) + fastmap['\n'] = fastmap_newline; + + /* Return if we have already set `can_be_null'; if we have, + then the fastmap is irrelevant. Something's wrong here. */ + else if (bufp->can_be_null) + goto done; + + /* Otherwise, have to check alternative paths. */ + break; + } + +#ifdef emacs + case syntaxspec: + k = *p++; + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) == (enum syntaxcode) k) + fastmap[j] = 1; + break; + + + case notsyntaxspec: + k = *p++; + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) != (enum syntaxcode) k) + fastmap[j] = 1; + break; + + + /* All cases after this match the empty string. These end with + `continue'. */ + + + case before_dot: + case at_dot: + case after_dot: + continue; +#endif /* emacs */ + + + case no_op: + case begline: + case endline: + case begbuf: + case endbuf: + case wordbound: + case notwordbound: + case wordbeg: + case wordend: + case push_dummy_failure: + continue; + + + case jump_n: + case pop_failure_jump: + case maybe_pop_jump: + case jump: + case jump_past_alt: + case dummy_failure_jump: + EXTRACT_NUMBER_AND_INCR (j, p); + p += j; + if (j > 0) + continue; + + /* Jump backward implies we just went through the body of a + loop and matched nothing. Opcode jumped to should be + `on_failure_jump' or `succeed_n'. Just treat it like an + ordinary jump. For a * loop, it has pushed its failure + point already; if so, discard that as redundant. */ + if ((re_opcode_t) *p != on_failure_jump + && (re_opcode_t) *p != succeed_n) + continue; + + p++; + EXTRACT_NUMBER_AND_INCR (j, p); + p += j; + + /* If what's on the stack is where we are now, pop it. */ + if (!FAIL_STACK_EMPTY () + && fail_stack.stack[fail_stack.avail - 1].pointer == p) + fail_stack.avail--; + + continue; + + + case on_failure_jump: + case on_failure_keep_string_jump: + handle_on_failure_jump: + EXTRACT_NUMBER_AND_INCR (j, p); + + /* For some patterns, e.g., `(a?)?', `p+j' here points to the + end of the pattern. We don't want to push such a point, + since when we restore it above, entering the switch will + increment `p' past the end of the pattern. We don't need + to push such a point since we obviously won't find any more + fastmap entries beyond `pend'. Such a pattern can match + the null string, though. */ + if (p + j < pend) + { + if (!PUSH_PATTERN_OP (p + j, fail_stack)) + { + RESET_FAIL_STACK (); + return -2; + } + } + else + bufp->can_be_null = 1; + + if (succeed_n_p) + { + EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */ + succeed_n_p = false; + } + + continue; + + + case succeed_n: + /* Get to the number of times to succeed. */ + p += 2; + + /* Increment p past the n for when k != 0. */ + EXTRACT_NUMBER_AND_INCR (k, p); + if (k == 0) + { + p -= 4; + succeed_n_p = true; /* Spaghetti code alert. */ + goto handle_on_failure_jump; + } + continue; + + + case set_number_at: + p += 4; + continue; + + + case start_memory: + case stop_memory: + p += 2; + continue; + + + default: + abort (); /* We have listed all the cases. */ + } /* switch *p++ */ + + /* Getting here means we have found the possible starting + characters for one path of the pattern -- and that the empty + string does not match. We need not follow this path further. + Instead, look at the next alternative (remembered on the + stack), or quit if no more. The test at the top of the loop + does these things. */ + path_can_be_null = false; + p = pend; + } /* while p */ + + /* Set `can_be_null' for the last path (also the first path, if the + pattern is empty). */ + bufp->can_be_null |= path_can_be_null; + + done: + RESET_FAIL_STACK (); + return 0; +} /* re_compile_fastmap */ + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use + this memory for recording register information. STARTS and ENDS + must be allocated using the malloc library routine, and must each + be at least NUM_REGS * sizeof (regoff_t) bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + +void +re_set_registers (bufp, regs, num_regs, starts, ends) + struct re_pattern_buffer *bufp; + struct re_registers *regs; + unsigned num_regs; + regoff_t *starts, *ends; +{ + if (num_regs) + { + bufp->regs_allocated = REGS_REALLOCATE; + regs->num_regs = num_regs; + regs->start = starts; + regs->end = ends; + } + else + { + bufp->regs_allocated = REGS_UNALLOCATED; + regs->num_regs = 0; + regs->start = regs->end = (regoff_t *) 0; + } +} + +/* Searching routines. */ + +/* Like re_search_2, below, but only one string is specified, and + doesn't let you say where to stop matching. */ + +int +re_search (bufp, string, size, startpos, range, regs) + struct re_pattern_buffer *bufp; + const char *string; + int size, startpos, range; + struct re_registers *regs; +{ + return re_search_2 (bufp, NULL, 0, string, size, startpos, range, + regs, size); +} + + +/* Using the compiled pattern in BUFP->buffer, first tries to match the + virtual concatenation of STRING1 and STRING2, starting first at index + STARTPOS, then at STARTPOS + 1, and so on. + + STRING1 and STRING2 have length SIZE1 and SIZE2, respectively. + + RANGE is how far to scan while trying to match. RANGE = 0 means try + only at STARTPOS; in general, the last start tried is STARTPOS + + RANGE. + + In REGS, return the indices of the virtual concatenation of STRING1 + and STRING2 that matched the entire BUFP->buffer and its contained + subexpressions. + + Do not consider matching one past the index STOP in the virtual + concatenation of STRING1 and STRING2. + + We return either the position in the strings at which the match was + found, -1 if no match, or -2 if error (such as failure + stack overflow). */ + +int +re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int startpos; + int range; + struct re_registers *regs; + int stop; +{ + int val; + register char *fastmap = bufp->fastmap; + register RE_TRANSLATE_TYPE translate = bufp->translate; + int total_size = size1 + size2; + int endpos = startpos + range; + + /* Check for out-of-range STARTPOS. */ + if (startpos < 0 || startpos > total_size) + return -1; + + /* Fix up RANGE if it might eventually take us outside + the virtual concatenation of STRING1 and STRING2. + Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */ + if (endpos < 0) + range = 0 - startpos; + else if (endpos > total_size) + range = total_size - startpos; + + /* If the search isn't to be a backwards one, don't waste time in a + search for a pattern that must be anchored. */ + if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0) + { + if (startpos > 0) + return -1; + else + range = 1; + } + +#ifdef emacs + /* In a forward search for something that starts with \=. + don't keep searching past point. */ + if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0) + { + range = PT - startpos; + if (range <= 0) + return -1; + } +#endif /* emacs */ + + /* Update the fastmap now if not correct already. */ + if (fastmap && !bufp->fastmap_accurate) + if (re_compile_fastmap (bufp) == -2) + return -2; + + /* Loop through the string, looking for a place to start matching. */ + for (;;) + { + /* If a fastmap is supplied, skip quickly over characters that + cannot be the start of a match. If the pattern can match the + null string, however, we don't need to skip characters; we want + the first null string. */ + if (fastmap && startpos < total_size && !bufp->can_be_null) + { + if (range > 0) /* Searching forwards. */ + { + register const char *d; + register int lim = 0; + int irange = range; + + if (startpos < size1 && startpos + range >= size1) + lim = range - (size1 - startpos); + + d = (startpos >= size1 ? string2 - size1 : string1) + startpos; + + /* Written out as an if-else to avoid testing `translate' + inside the loop. */ + if (translate) + while (range > lim + && !fastmap[(unsigned char) + translate[(unsigned char) *d++]]) + range--; + else + while (range > lim && !fastmap[(unsigned char) *d++]) + range--; + + startpos += irange - range; + } + else /* Searching backwards. */ + { + register char c = (size1 == 0 || startpos >= size1 + ? string2[startpos - size1] + : string1[startpos]); + + if (!fastmap[(unsigned char) TRANSLATE (c)]) + goto advance; + } + } + + /* If can't match the null string, and that's all we have left, fail. */ + if (range >= 0 && startpos == total_size && fastmap + && !bufp->can_be_null) + return -1; + + val = re_match_2_internal (bufp, string1, size1, string2, size2, + startpos, regs, stop); +#ifndef REGEX_MALLOC +#ifdef C_ALLOCA + alloca (0); +#endif +#endif + + if (val >= 0) + return startpos; + + if (val == -2) + return -2; + + advance: + if (!range) + break; + else if (range > 0) + { + range--; + startpos++; + } + else + { + range++; + startpos--; + } + } + return -1; +} /* re_search_2 */ + +/* This converts PTR, a pointer into one of the search strings `string1' + and `string2' into an offset from the beginning of that string. */ +#define POINTER_TO_OFFSET(ptr) \ + (FIRST_STRING_P (ptr) \ + ? ((regoff_t) ((ptr) - string1)) \ + : ((regoff_t) ((ptr) - string2 + size1))) + +/* Macros for dealing with the split strings in re_match_2. */ + +#define MATCHING_IN_FIRST_STRING (dend == end_match_1) + +/* Call before fetching a character with *d. This switches over to + string2 if necessary. */ +#define PREFETCH() \ + while (d == dend) \ + { \ + /* End of string2 => fail. */ \ + if (dend == end_match_2) \ + goto fail; \ + /* End of string1 => advance to string2. */ \ + d = string2; \ + dend = end_match_2; \ + } + + +/* Test if at very beginning or at very end of the virtual concatenation + of `string1' and `string2'. If only one string, it's `string2'. */ +#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2) +#define AT_STRINGS_END(d) ((d) == end2) + + +/* Test if D points to a character which is word-constituent. We have + two special cases to check for: if past the end of string1, look at + the first character in string2; and if before the beginning of + string2, look at the last character in string1. */ +#define WORDCHAR_P(d) \ + (SYNTAX ((d) == end1 ? *string2 \ + : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \ + == Sword) + +/* Disabled due to a compiler bug -- see comment at case wordbound */ +#if 0 +/* Test if the character before D and the one at D differ with respect + to being word-constituent. */ +#define AT_WORD_BOUNDARY(d) \ + (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \ + || WORDCHAR_P (d - 1) != WORDCHAR_P (d)) +#endif + +/* Free everything we malloc. */ +#ifdef MATCH_MAY_ALLOCATE +#define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL +#define FREE_VARIABLES() \ + do { \ + REGEX_FREE_STACK (fail_stack.stack); \ + FREE_VAR (regstart); \ + FREE_VAR (regend); \ + FREE_VAR (old_regstart); \ + FREE_VAR (old_regend); \ + FREE_VAR (best_regstart); \ + FREE_VAR (best_regend); \ + FREE_VAR (reg_info); \ + FREE_VAR (reg_dummy); \ + FREE_VAR (reg_info_dummy); \ + } while (0) +#else +#define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */ +#endif /* not MATCH_MAY_ALLOCATE */ + +/* These values must meet several constraints. They must not be valid + register values; since we have a limit of 255 registers (because + we use only one byte in the pattern for the register number), we can + use numbers larger than 255. They must differ by 1, because of + NUM_FAILURE_ITEMS above. And the value for the lowest register must + be larger than the value for the highest register, so we do not try + to actually save any registers when none are active. */ +#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH) +#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1) + +/* Matching routines. */ + +#ifndef emacs /* Emacs never uses this. */ +/* re_match is like re_match_2 except it takes only a single string. */ + +int +re_match (bufp, string, size, pos, regs) + struct re_pattern_buffer *bufp; + const char *string; + int size, pos; + struct re_registers *regs; +{ + int result = re_match_2_internal (bufp, NULL, 0, string, size, + pos, regs, size); +#ifndef REGEX_MALLOC +#ifdef C_ALLOCA + alloca (0); +#endif +#endif + return result; +} +#endif /* not emacs */ + +static boolean group_match_null_string_p _RE_ARGS ((unsigned char **p, + unsigned char *end, + register_info_type *reg_info)); +static boolean alt_match_null_string_p _RE_ARGS ((unsigned char *p, + unsigned char *end, + register_info_type *reg_info)); +static boolean common_op_match_null_string_p _RE_ARGS ((unsigned char **p, + unsigned char *end, + register_info_type *reg_info)); +static int bcmp_translate _RE_ARGS ((const char *s1, const char *s2, + int len, char *translate)); + +/* re_match_2 matches the compiled pattern in BUFP against the + the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1 + and SIZE2, respectively). We start matching at POS, and stop + matching at STOP. + + If REGS is non-null and the `no_sub' field of BUFP is nonzero, we + store offsets for the substring each group matched in REGS. See the + documentation for exactly how many groups we fill. + + We return -1 if no match, -2 if an internal error (such as the + failure stack overflowing). Otherwise, we return the length of the + matched substring. */ + +int +re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int pos; + struct re_registers *regs; + int stop; +{ + int result = re_match_2_internal (bufp, string1, size1, string2, size2, + pos, regs, stop); +#ifndef REGEX_MALLOC +#ifdef C_ALLOCA + alloca (0); +#endif +#endif + return result; +} + +/* This is a separate function so that we can force an alloca cleanup + afterwards. */ +static int +re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int pos; + struct re_registers *regs; + int stop; +{ + /* General temporaries. */ + int mcnt; + unsigned char *p1; + + /* Just past the end of the corresponding string. */ + const char *end1, *end2; + + /* Pointers into string1 and string2, just past the last characters in + each to consider matching. */ + const char *end_match_1, *end_match_2; + + /* Where we are in the data, and the end of the current string. */ + const char *d, *dend; + + /* Where we are in the pattern, and the end of the pattern. */ + unsigned char *p = bufp->buffer; + register unsigned char *pend = p + bufp->used; + + /* Mark the opcode just after a start_memory, so we can test for an + empty subpattern when we get to the stop_memory. */ + unsigned char *just_past_start_mem = 0; + + /* We use this to map every character in the string. */ + RE_TRANSLATE_TYPE translate = bufp->translate; + + /* Failure point stack. Each place that can handle a failure further + down the line pushes a failure point on this stack. It consists of + restart, regend, and reg_info for all registers corresponding to + the subexpressions we're currently inside, plus the number of such + registers, and, finally, two char *'s. The first char * is where + to resume scanning the pattern; the second one is where to resume + scanning the strings. If the latter is zero, the failure point is + a ``dummy''; if a failure happens and the failure point is a dummy, + it gets discarded and the next next one is tried. */ +#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ + fail_stack_type fail_stack; +#endif +#ifdef DEBUG + static unsigned failure_id = 0; + unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0; +#endif + +#ifdef REL_ALLOC + /* This holds the pointer to the failure stack, when + it is allocated relocatably. */ + fail_stack_elt_t *failure_stack_ptr; +#endif + + /* We fill all the registers internally, independent of what we + return, for use in backreferences. The number here includes + an element for register zero. */ + size_t num_regs = bufp->re_nsub + 1; + + /* The currently active registers. */ + active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG; + active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG; + + /* Information on the contents of registers. These are pointers into + the input strings; they record just what was matched (on this + attempt) by a subexpression part of the pattern, that is, the + regnum-th regstart pointer points to where in the pattern we began + matching and the regnum-th regend points to right after where we + stopped matching the regnum-th subexpression. (The zeroth register + keeps track of what the whole pattern matches.) */ +#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const char **regstart, **regend; +#endif + + /* If a group that's operated upon by a repetition operator fails to + match anything, then the register for its start will need to be + restored because it will have been set to wherever in the string we + are when we last see its open-group operator. Similarly for a + register's end. */ +#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const char **old_regstart, **old_regend; +#endif + + /* The is_active field of reg_info helps us keep track of which (possibly + nested) subexpressions we are currently in. The matched_something + field of reg_info[reg_num] helps us tell whether or not we have + matched any of the pattern so far this time through the reg_num-th + subexpression. These two fields get reset each time through any + loop their register is in. */ +#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ + register_info_type *reg_info; +#endif + + /* The following record the register info as found in the above + variables when we find a match better than any we've seen before. + This happens as we backtrack through the failure points, which in + turn happens only if we have not yet matched the entire string. */ + unsigned best_regs_set = false; +#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const char **best_regstart, **best_regend; +#endif + + /* Logically, this is `best_regend[0]'. But we don't want to have to + allocate space for that if we're not allocating space for anything + else (see below). Also, we never need info about register 0 for + any of the other register vectors, and it seems rather a kludge to + treat `best_regend' differently than the rest. So we keep track of + the end of the best match so far in a separate variable. We + initialize this to NULL so that when we backtrack the first time + and need to test it, it's not garbage. */ + const char *match_end = NULL; + + /* This helps SET_REGS_MATCHED avoid doing redundant work. */ + int set_regs_matched_done = 0; + + /* Used when we pop values we don't care about. */ +#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const char **reg_dummy; + register_info_type *reg_info_dummy; +#endif + +#ifdef DEBUG + /* Counts the total number of registers pushed. */ + unsigned num_regs_pushed = 0; +#endif + + DEBUG_PRINT1 ("\n\nEntering re_match_2.\n"); + + INIT_FAIL_STACK (); + +#ifdef MATCH_MAY_ALLOCATE + /* Do not bother to initialize all the register variables if there are + no groups in the pattern, as it takes a fair amount of time. If + there are groups, we include space for register 0 (the whole + pattern), even though we never use it, since it simplifies the + array indexing. We should fix this. */ + if (bufp->re_nsub) + { + regstart = REGEX_TALLOC (num_regs, const char *); + regend = REGEX_TALLOC (num_regs, const char *); + old_regstart = REGEX_TALLOC (num_regs, const char *); + old_regend = REGEX_TALLOC (num_regs, const char *); + best_regstart = REGEX_TALLOC (num_regs, const char *); + best_regend = REGEX_TALLOC (num_regs, const char *); + reg_info = REGEX_TALLOC (num_regs, register_info_type); + reg_dummy = REGEX_TALLOC (num_regs, const char *); + reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type); + + if (!(regstart && regend && old_regstart && old_regend && reg_info + && best_regstart && best_regend && reg_dummy && reg_info_dummy)) + { + FREE_VARIABLES (); + return -2; + } + } + else + { + /* We must initialize all our variables to NULL, so that + `FREE_VARIABLES' doesn't try to free them. */ + regstart = regend = old_regstart = old_regend = best_regstart + = best_regend = reg_dummy = NULL; + reg_info = reg_info_dummy = (register_info_type *) NULL; + } +#endif /* MATCH_MAY_ALLOCATE */ + + /* The starting position is bogus. */ + if (pos < 0 || pos > size1 + size2) + { + FREE_VARIABLES (); + return -1; + } + + /* Initialize subexpression text positions to -1 to mark ones that no + start_memory/stop_memory has been seen for. Also initialize the + register information struct. */ + for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) + { + regstart[mcnt] = regend[mcnt] + = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE; + + REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE; + IS_ACTIVE (reg_info[mcnt]) = 0; + MATCHED_SOMETHING (reg_info[mcnt]) = 0; + EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0; + } + + /* We move `string1' into `string2' if the latter's empty -- but not if + `string1' is null. */ + if (size2 == 0 && string1 != NULL) + { + string2 = string1; + size2 = size1; + string1 = 0; + size1 = 0; + } + end1 = string1 + size1; + end2 = string2 + size2; + + /* Compute where to stop matching, within the two strings. */ + if (stop <= size1) + { + end_match_1 = string1 + stop; + end_match_2 = string2; + } + else + { + end_match_1 = end1; + end_match_2 = string2 + stop - size1; + } + + /* `p' scans through the pattern as `d' scans through the data. + `dend' is the end of the input string that `d' points within. `d' + is advanced into the following input string whenever necessary, but + this happens before fetching; therefore, at the beginning of the + loop, `d' can be pointing at the end of a string, but it cannot + equal `string2'. */ + if (size1 > 0 && pos <= size1) + { + d = string1 + pos; + dend = end_match_1; + } + else + { + d = string2 + pos - size1; + dend = end_match_2; + } + + DEBUG_PRINT1 ("The compiled pattern is:\n"); + DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend); + DEBUG_PRINT1 ("The string to match is: `"); + DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2); + DEBUG_PRINT1 ("'\n"); + + /* This loops over pattern commands. It exits by returning from the + function if the match is complete, or it drops through if the match + fails at this starting point in the input data. */ + for (;;) + { +#ifdef _LIBC + DEBUG_PRINT2 ("\n%p: ", p); +#else + DEBUG_PRINT2 ("\n0x%x: ", p); +#endif + + if (p == pend) + { /* End of pattern means we might have succeeded. */ + DEBUG_PRINT1 ("end of pattern ... "); + + /* If we haven't matched the entire string, and we want the + longest match, try backtracking. */ + if (d != end_match_2) + { + /* 1 if this match ends in the same string (string1 or string2) + as the best previous match. */ + boolean same_str_p = (FIRST_STRING_P (match_end) + == MATCHING_IN_FIRST_STRING); + /* 1 if this match is the best seen so far. */ + boolean best_match_p; + + /* AIX compiler got confused when this was combined + with the previous declaration. */ + if (same_str_p) + best_match_p = d > match_end; + else + best_match_p = !MATCHING_IN_FIRST_STRING; + + DEBUG_PRINT1 ("backtracking.\n"); + + if (!FAIL_STACK_EMPTY ()) + { /* More failure points to try. */ + + /* If exceeds best match so far, save it. */ + if (!best_regs_set || best_match_p) + { + best_regs_set = true; + match_end = d; + + DEBUG_PRINT1 ("\nSAVING match as best so far.\n"); + + for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) + { + best_regstart[mcnt] = regstart[mcnt]; + best_regend[mcnt] = regend[mcnt]; + } + } + goto fail; + } + + /* If no failure points, don't restore garbage. And if + last match is real best match, don't restore second + best one. */ + else if (best_regs_set && !best_match_p) + { + restore_best_regs: + /* Restore best match. It may happen that `dend == + end_match_1' while the restored d is in string2. + For example, the pattern `x.*y.*z' against the + strings `x-' and `y-z-', if the two strings are + not consecutive in memory. */ + DEBUG_PRINT1 ("Restoring best registers.\n"); + + d = match_end; + dend = ((d >= string1 && d <= end1) + ? end_match_1 : end_match_2); + + for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) + { + regstart[mcnt] = best_regstart[mcnt]; + regend[mcnt] = best_regend[mcnt]; + } + } + } /* d != end_match_2 */ + + succeed_label: + DEBUG_PRINT1 ("Accepting match.\n"); + + /* If caller wants register contents data back, do it. */ + if (regs && !bufp->no_sub) + { + /* Have the register data arrays been allocated? */ + if (bufp->regs_allocated == REGS_UNALLOCATED) + { /* No. So allocate them with malloc. We need one + extra element beyond `num_regs' for the `-1' marker + GNU code uses. */ + regs->num_regs = MAX (RE_NREGS, num_regs + 1); + regs->start = TALLOC (regs->num_regs, regoff_t); + regs->end = TALLOC (regs->num_regs, regoff_t); + if (regs->start == NULL || regs->end == NULL) + { + FREE_VARIABLES (); + return -2; + } + bufp->regs_allocated = REGS_REALLOCATE; + } + else if (bufp->regs_allocated == REGS_REALLOCATE) + { /* Yes. If we need more elements than were already + allocated, reallocate them. If we need fewer, just + leave it alone. */ + if (regs->num_regs < num_regs + 1) + { + regs->num_regs = num_regs + 1; + RETALLOC (regs->start, regs->num_regs, regoff_t); + RETALLOC (regs->end, regs->num_regs, regoff_t); + if (regs->start == NULL || regs->end == NULL) + { + FREE_VARIABLES (); + return -2; + } + } + } + else + { + /* These braces fend off a "empty body in an else-statement" + warning under GCC when assert expands to nothing. */ + assert (bufp->regs_allocated == REGS_FIXED); + } + + /* Convert the pointer data in `regstart' and `regend' to + indices. Register zero has to be set differently, + since we haven't kept track of any info for it. */ + if (regs->num_regs > 0) + { + regs->start[0] = pos; + regs->end[0] = (MATCHING_IN_FIRST_STRING + ? ((regoff_t) (d - string1)) + : ((regoff_t) (d - string2 + size1))); + } + + /* Go through the first `min (num_regs, regs->num_regs)' + registers, since that is all we initialized. */ + for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs); + mcnt++) + { + if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt])) + regs->start[mcnt] = regs->end[mcnt] = -1; + else + { + regs->start[mcnt] + = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]); + regs->end[mcnt] + = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]); + } + } + + /* If the regs structure we return has more elements than + were in the pattern, set the extra elements to -1. If + we (re)allocated the registers, this is the case, + because we always allocate enough to have at least one + -1 at the end. */ + for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++) + regs->start[mcnt] = regs->end[mcnt] = -1; + } /* regs && !bufp->no_sub */ + + DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n", + nfailure_points_pushed, nfailure_points_popped, + nfailure_points_pushed - nfailure_points_popped); + DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed); + + mcnt = d - pos - (MATCHING_IN_FIRST_STRING + ? string1 + : string2 - size1); + + DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt); + + FREE_VARIABLES (); + return mcnt; + } + + /* Otherwise match next pattern command. */ + switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) + { + /* Ignore these. Used to ignore the n of succeed_n's which + currently have n == 0. */ + case no_op: + DEBUG_PRINT1 ("EXECUTING no_op.\n"); + break; + + case succeed: + DEBUG_PRINT1 ("EXECUTING succeed.\n"); + goto succeed_label; + + /* Match the next n pattern characters exactly. The following + byte in the pattern defines n, and the n bytes after that + are the characters to match. */ + case exactn: + mcnt = *p++; + DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt); + + /* This is written out as an if-else so we don't waste time + testing `translate' inside the loop. */ + if (translate) + { + do + { + PREFETCH (); + if ((unsigned char) translate[(unsigned char) *d++] + != (unsigned char) *p++) + goto fail; + } + while (--mcnt); + } + else + { + do + { + PREFETCH (); + if (*d++ != (char) *p++) goto fail; + } + while (--mcnt); + } + SET_REGS_MATCHED (); + break; + + + /* Match any character except possibly a newline or a null. */ + case anychar: + DEBUG_PRINT1 ("EXECUTING anychar.\n"); + + PREFETCH (); + + if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') + || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000')) + goto fail; + + SET_REGS_MATCHED (); + DEBUG_PRINT2 (" Matched `%d'.\n", *d); + d++; + break; + + + case charset: + case charset_not: + { + register unsigned char c; + boolean not = (re_opcode_t) *(p - 1) == charset_not; + + DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : ""); + + PREFETCH (); + c = TRANSLATE (*d); /* The character to match. */ + + /* Cast to `unsigned' instead of `unsigned char' in case the + bit list is a full 32 bytes long. */ + if (c < (unsigned) (*p * BYTEWIDTH) + && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) + not = !not; + + p += 1 + *p; + + if (!not) goto fail; + + SET_REGS_MATCHED (); + d++; + break; + } + + + /* The beginning of a group is represented by start_memory. + The arguments are the register number in the next byte, and the + number of groups inner to this one in the next. The text + matched within the group is recorded (in the internal + registers data structure) under the register number. */ + case start_memory: + DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]); + + /* Find out if this group can match the empty string. */ + p1 = p; /* To send to group_match_null_string_p. */ + + if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE) + REG_MATCH_NULL_STRING_P (reg_info[*p]) + = group_match_null_string_p (&p1, pend, reg_info); + + /* Save the position in the string where we were the last time + we were at this open-group operator in case the group is + operated upon by a repetition operator, e.g., with `(a*)*b' + against `ab'; then we want to ignore where we are now in + the string in case this attempt to match fails. */ + old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) + ? REG_UNSET (regstart[*p]) ? d : regstart[*p] + : regstart[*p]; + DEBUG_PRINT2 (" old_regstart: %d\n", + POINTER_TO_OFFSET (old_regstart[*p])); + + regstart[*p] = d; + DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p])); + + IS_ACTIVE (reg_info[*p]) = 1; + MATCHED_SOMETHING (reg_info[*p]) = 0; + + /* Clear this whenever we change the register activity status. */ + set_regs_matched_done = 0; + + /* This is the new highest active register. */ + highest_active_reg = *p; + + /* If nothing was active before, this is the new lowest active + register. */ + if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) + lowest_active_reg = *p; + + /* Move past the register number and inner group count. */ + p += 2; + just_past_start_mem = p; + + break; + + + /* The stop_memory opcode represents the end of a group. Its + arguments are the same as start_memory's: the register + number, and the number of inner groups. */ + case stop_memory: + DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]); + + /* We need to save the string position the last time we were at + this close-group operator in case the group is operated + upon by a repetition operator, e.g., with `((a*)*(b*)*)*' + against `aba'; then we want to ignore where we are now in + the string in case this attempt to match fails. */ + old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) + ? REG_UNSET (regend[*p]) ? d : regend[*p] + : regend[*p]; + DEBUG_PRINT2 (" old_regend: %d\n", + POINTER_TO_OFFSET (old_regend[*p])); + + regend[*p] = d; + DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p])); + + /* This register isn't active anymore. */ + IS_ACTIVE (reg_info[*p]) = 0; + + /* Clear this whenever we change the register activity status. */ + set_regs_matched_done = 0; + + /* If this was the only register active, nothing is active + anymore. */ + if (lowest_active_reg == highest_active_reg) + { + lowest_active_reg = NO_LOWEST_ACTIVE_REG; + highest_active_reg = NO_HIGHEST_ACTIVE_REG; + } + else + { /* We must scan for the new highest active register, since + it isn't necessarily one less than now: consider + (a(b)c(d(e)f)g). When group 3 ends, after the f), the + new highest active register is 1. */ + unsigned char r = *p - 1; + while (r > 0 && !IS_ACTIVE (reg_info[r])) + r--; + + /* If we end up at register zero, that means that we saved + the registers as the result of an `on_failure_jump', not + a `start_memory', and we jumped to past the innermost + `stop_memory'. For example, in ((.)*) we save + registers 1 and 2 as a result of the *, but when we pop + back to the second ), we are at the stop_memory 1. + Thus, nothing is active. */ + if (r == 0) + { + lowest_active_reg = NO_LOWEST_ACTIVE_REG; + highest_active_reg = NO_HIGHEST_ACTIVE_REG; + } + else + highest_active_reg = r; + } + + /* If just failed to match something this time around with a + group that's operated on by a repetition operator, try to + force exit from the ``loop'', and restore the register + information for this group that we had before trying this + last match. */ + if ((!MATCHED_SOMETHING (reg_info[*p]) + || just_past_start_mem == p - 1) + && (p + 2) < pend) + { + boolean is_a_jump_n = false; + + p1 = p + 2; + mcnt = 0; + switch ((re_opcode_t) *p1++) + { + case jump_n: + is_a_jump_n = true; + case pop_failure_jump: + case maybe_pop_jump: + case jump: + case dummy_failure_jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + if (is_a_jump_n) + p1 += 2; + break; + + default: + /* do nothing */ ; + } + p1 += mcnt; + + /* If the next operation is a jump backwards in the pattern + to an on_failure_jump right before the start_memory + corresponding to this stop_memory, exit from the loop + by forcing a failure after pushing on the stack the + on_failure_jump's jump in the pattern, and d. */ + if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump + && (re_opcode_t) p1[3] == start_memory && p1[4] == *p) + { + /* If this group ever matched anything, then restore + what its registers were before trying this last + failed match, e.g., with `(a*)*b' against `ab' for + regstart[1], and, e.g., with `((a*)*(b*)*)*' + against `aba' for regend[3]. + + Also restore the registers for inner groups for, + e.g., `((a*)(b*))*' against `aba' (register 3 would + otherwise get trashed). */ + + if (EVER_MATCHED_SOMETHING (reg_info[*p])) + { + unsigned r; + + EVER_MATCHED_SOMETHING (reg_info[*p]) = 0; + + /* Restore this and inner groups' (if any) registers. */ + for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1); + r++) + { + regstart[r] = old_regstart[r]; + + /* xx why this test? */ + if (old_regend[r] >= regstart[r]) + regend[r] = old_regend[r]; + } + } + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + PUSH_FAILURE_POINT (p1 + mcnt, d, -2); + + goto fail; + } + } + + /* Move past the register number and the inner group count. */ + p += 2; + break; + + + /* \<digit> has been turned into a `duplicate' command which is + followed by the numeric value of <digit> as the register number. */ + case duplicate: + { + register const char *d2, *dend2; + int regno = *p++; /* Get which register to match against. */ + DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno); + + /* Can't back reference a group which we've never matched. */ + if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno])) + goto fail; + + /* Where in input to try to start matching. */ + d2 = regstart[regno]; + + /* Where to stop matching; if both the place to start and + the place to stop matching are in the same string, then + set to the place to stop, otherwise, for now have to use + the end of the first string. */ + + dend2 = ((FIRST_STRING_P (regstart[regno]) + == FIRST_STRING_P (regend[regno])) + ? regend[regno] : end_match_1); + for (;;) + { + /* If necessary, advance to next segment in register + contents. */ + while (d2 == dend2) + { + if (dend2 == end_match_2) break; + if (dend2 == regend[regno]) break; + + /* End of string1 => advance to string2. */ + d2 = string2; + dend2 = regend[regno]; + } + /* At end of register contents => success */ + if (d2 == dend2) break; + + /* If necessary, advance to next segment in data. */ + PREFETCH (); + + /* How many characters left in this segment to match. */ + mcnt = dend - d; + + /* Want how many consecutive characters we can match in + one shot, so, if necessary, adjust the count. */ + if (mcnt > dend2 - d2) + mcnt = dend2 - d2; + + /* Compare that many; failure if mismatch, else move + past them. */ + if (translate + ? bcmp_translate (d, d2, mcnt, translate) + : bcmp (d, d2, mcnt)) + goto fail; + d += mcnt, d2 += mcnt; + + /* Do this because we've match some characters. */ + SET_REGS_MATCHED (); + } + } + break; + + + /* begline matches the empty string at the beginning of the string + (unless `not_bol' is set in `bufp'), and, if + `newline_anchor' is set, after newlines. */ + case begline: + DEBUG_PRINT1 ("EXECUTING begline.\n"); + + if (AT_STRINGS_BEG (d)) + { + if (!bufp->not_bol) break; + } + else if (d[-1] == '\n' && bufp->newline_anchor) + { + break; + } + /* In all other cases, we fail. */ + goto fail; + + + /* endline is the dual of begline. */ + case endline: + DEBUG_PRINT1 ("EXECUTING endline.\n"); + + if (AT_STRINGS_END (d)) + { + if (!bufp->not_eol) break; + } + + /* We have to ``prefetch'' the next character. */ + else if ((d == end1 ? *string2 : *d) == '\n' + && bufp->newline_anchor) + { + break; + } + goto fail; + + + /* Match at the very beginning of the data. */ + case begbuf: + DEBUG_PRINT1 ("EXECUTING begbuf.\n"); + if (AT_STRINGS_BEG (d)) + break; + goto fail; + + + /* Match at the very end of the data. */ + case endbuf: + DEBUG_PRINT1 ("EXECUTING endbuf.\n"); + if (AT_STRINGS_END (d)) + break; + goto fail; + + + /* on_failure_keep_string_jump is used to optimize `.*\n'. It + pushes NULL as the value for the string on the stack. Then + `pop_failure_point' will keep the current value for the + string, instead of restoring it. To see why, consider + matching `foo\nbar' against `.*\n'. The .* matches the foo; + then the . fails against the \n. But the next thing we want + to do is match the \n against the \n; if we restored the + string value, we would be back at the foo. + + Because this is used only in specific cases, we don't need to + check all the things that `on_failure_jump' does, to make + sure the right things get saved on the stack. Hence we don't + share its code. The only reason to push anything on the + stack at all is that otherwise we would have to change + `anychar's code to do something besides goto fail in this + case; that seems worse than this. */ + case on_failure_keep_string_jump: + DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump"); + + EXTRACT_NUMBER_AND_INCR (mcnt, p); +#ifdef _LIBC + DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt); +#else + DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt); +#endif + + PUSH_FAILURE_POINT (p + mcnt, NULL, -2); + break; + + + /* Uses of on_failure_jump: + + Each alternative starts with an on_failure_jump that points + to the beginning of the next alternative. Each alternative + except the last ends with a jump that in effect jumps past + the rest of the alternatives. (They really jump to the + ending jump of the following alternative, because tensioning + these jumps is a hassle.) + + Repeats start with an on_failure_jump that points past both + the repetition text and either the following jump or + pop_failure_jump back to this on_failure_jump. */ + case on_failure_jump: + on_failure: + DEBUG_PRINT1 ("EXECUTING on_failure_jump"); + + EXTRACT_NUMBER_AND_INCR (mcnt, p); +#ifdef _LIBC + DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt); +#else + DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt); +#endif + + /* If this on_failure_jump comes right before a group (i.e., + the original * applied to a group), save the information + for that group and all inner ones, so that if we fail back + to this point, the group's information will be correct. + For example, in \(a*\)*\1, we need the preceding group, + and in \(zz\(a*\)b*\)\2, we need the inner group. */ + + /* We can't use `p' to check ahead because we push + a failure point to `p + mcnt' after we do this. */ + p1 = p; + + /* We need to skip no_op's before we look for the + start_memory in case this on_failure_jump is happening as + the result of a completed succeed_n, as in \(a\)\{1,3\}b\1 + against aba. */ + while (p1 < pend && (re_opcode_t) *p1 == no_op) + p1++; + + if (p1 < pend && (re_opcode_t) *p1 == start_memory) + { + /* We have a new highest active register now. This will + get reset at the start_memory we are about to get to, + but we will have saved all the registers relevant to + this repetition op, as described above. */ + highest_active_reg = *(p1 + 1) + *(p1 + 2); + if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) + lowest_active_reg = *(p1 + 1); + } + + DEBUG_PRINT1 (":\n"); + PUSH_FAILURE_POINT (p + mcnt, d, -2); + break; + + + /* A smart repeat ends with `maybe_pop_jump'. + We change it to either `pop_failure_jump' or `jump'. */ + case maybe_pop_jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p); + DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt); + { + register unsigned char *p2 = p; + + /* Compare the beginning of the repeat with what in the + pattern follows its end. If we can establish that there + is nothing that they would both match, i.e., that we + would have to backtrack because of (as in, e.g., `a*a') + then we can change to pop_failure_jump, because we'll + never have to backtrack. + + This is not true in the case of alternatives: in + `(a|ab)*' we do need to backtrack to the `ab' alternative + (e.g., if the string was `ab'). But instead of trying to + detect that here, the alternative has put on a dummy + failure point which is what we will end up popping. */ + + /* Skip over open/close-group commands. + If what follows this loop is a ...+ construct, + look at what begins its body, since we will have to + match at least one of that. */ + while (1) + { + if (p2 + 2 < pend + && ((re_opcode_t) *p2 == stop_memory + || (re_opcode_t) *p2 == start_memory)) + p2 += 3; + else if (p2 + 6 < pend + && (re_opcode_t) *p2 == dummy_failure_jump) + p2 += 6; + else + break; + } + + p1 = p + mcnt; + /* p1[0] ... p1[2] are the `on_failure_jump' corresponding + to the `maybe_finalize_jump' of this case. Examine what + follows. */ + + /* If we're at the end of the pattern, we can change. */ + if (p2 == pend) + { + /* Consider what happens when matching ":\(.*\)" + against ":/". I don't really understand this code + yet. */ + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 + (" End of pattern: change to `pop_failure_jump'.\n"); + } + + else if ((re_opcode_t) *p2 == exactn + || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) + { + register unsigned char c + = *p2 == (unsigned char) endline ? '\n' : p2[2]; + + if ((re_opcode_t) p1[3] == exactn && p1[5] != c) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", + c, p1[5]); + } + + else if ((re_opcode_t) p1[3] == charset + || (re_opcode_t) p1[3] == charset_not) + { + int not = (re_opcode_t) p1[3] == charset_not; + + if (c < (unsigned char) (p1[4] * BYTEWIDTH) + && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) + not = !not; + + /* `not' is equal to 1 if c would match, which means + that we can't change to pop_failure_jump. */ + if (!not) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + } + } + else if ((re_opcode_t) *p2 == charset) + { +#ifdef DEBUG + register unsigned char c + = *p2 == (unsigned char) endline ? '\n' : p2[2]; +#endif + +#if 0 + if ((re_opcode_t) p1[3] == exactn + && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5] + && (p2[2 + p1[5] / BYTEWIDTH] + & (1 << (p1[5] % BYTEWIDTH))))) +#else + if ((re_opcode_t) p1[3] == exactn + && ! ((int) p2[1] * BYTEWIDTH > (int) p1[4] + && (p2[2 + p1[4] / BYTEWIDTH] + & (1 << (p1[4] % BYTEWIDTH))))) +#endif + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", + c, p1[5]); + } + + else if ((re_opcode_t) p1[3] == charset_not) + { + int idx; + /* We win if the charset_not inside the loop + lists every character listed in the charset after. */ + for (idx = 0; idx < (int) p2[1]; idx++) + if (! (p2[2 + idx] == 0 + || (idx < (int) p1[4] + && ((p2[2 + idx] & ~ p1[5 + idx]) == 0)))) + break; + + if (idx == p2[1]) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + } + else if ((re_opcode_t) p1[3] == charset) + { + int idx; + /* We win if the charset inside the loop + has no overlap with the one after the loop. */ + for (idx = 0; + idx < (int) p2[1] && idx < (int) p1[4]; + idx++) + if ((p2[2 + idx] & p1[5 + idx]) != 0) + break; + + if (idx == p2[1] || idx == p1[4]) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + } + } + } + p -= 2; /* Point at relative address again. */ + if ((re_opcode_t) p[-1] != pop_failure_jump) + { + p[-1] = (unsigned char) jump; + DEBUG_PRINT1 (" Match => jump.\n"); + goto unconditional_jump; + } + /* Note fall through. */ + + + /* The end of a simple repeat has a pop_failure_jump back to + its matching on_failure_jump, where the latter will push a + failure point. The pop_failure_jump takes off failure + points put on by this pop_failure_jump's matching + on_failure_jump; we got through the pattern to here from the + matching on_failure_jump, so didn't fail. */ + case pop_failure_jump: + { + /* We need to pass separate storage for the lowest and + highest registers, even though we don't care about the + actual values. Otherwise, we will restore only one + register from the stack, since lowest will == highest in + `pop_failure_point'. */ + active_reg_t dummy_low_reg, dummy_high_reg; + unsigned char *pdummy; + const char *sdummy; + + DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n"); + POP_FAILURE_POINT (sdummy, pdummy, + dummy_low_reg, dummy_high_reg, + reg_dummy, reg_dummy, reg_info_dummy); + } + /* Note fall through. */ + + unconditional_jump: +#ifdef _LIBC + DEBUG_PRINT2 ("\n%p: ", p); +#else + DEBUG_PRINT2 ("\n0x%x: ", p); +#endif + /* Note fall through. */ + + /* Unconditionally jump (without popping any failure points). */ + case jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */ + DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt); + p += mcnt; /* Do the jump. */ +#ifdef _LIBC + DEBUG_PRINT2 ("(to %p).\n", p); +#else + DEBUG_PRINT2 ("(to 0x%x).\n", p); +#endif + break; + + + /* We need this opcode so we can detect where alternatives end + in `group_match_null_string_p' et al. */ + case jump_past_alt: + DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n"); + goto unconditional_jump; + + + /* Normally, the on_failure_jump pushes a failure point, which + then gets popped at pop_failure_jump. We will end up at + pop_failure_jump, also, and with a pattern of, say, `a+', we + are skipping over the on_failure_jump, so we have to push + something meaningless for pop_failure_jump to pop. */ + case dummy_failure_jump: + DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n"); + /* It doesn't matter what we push for the string here. What + the code at `fail' tests is the value for the pattern. */ + PUSH_FAILURE_POINT (0, 0, -2); + goto unconditional_jump; + + + /* At the end of an alternative, we need to push a dummy failure + point in case we are followed by a `pop_failure_jump', because + we don't want the failure point for the alternative to be + popped. For example, matching `(a|ab)*' against `aab' + requires that we match the `ab' alternative. */ + case push_dummy_failure: + DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n"); + /* See comments just above at `dummy_failure_jump' about the + two zeroes. */ + PUSH_FAILURE_POINT (0, 0, -2); + break; + + /* Have to succeed matching what follows at least n times. + After that, handle like `on_failure_jump'. */ + case succeed_n: + EXTRACT_NUMBER (mcnt, p + 2); + DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt); + + assert (mcnt >= 0); + /* Originally, this is how many times we HAVE to succeed. */ + if (mcnt > 0) + { + mcnt--; + p += 2; + STORE_NUMBER_AND_INCR (p, mcnt); +#ifdef _LIBC + DEBUG_PRINT3 (" Setting %p to %d.\n", p - 2, mcnt); +#else + DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - 2, mcnt); +#endif + } + else if (mcnt == 0) + { +#ifdef _LIBC + DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n", p+2); +#else + DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p+2); +#endif + p[2] = (unsigned char) no_op; + p[3] = (unsigned char) no_op; + goto on_failure; + } + break; + + case jump_n: + EXTRACT_NUMBER (mcnt, p + 2); + DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt); + + /* Originally, this is how many times we CAN jump. */ + if (mcnt) + { + mcnt--; + STORE_NUMBER (p + 2, mcnt); +#ifdef _LIBC + DEBUG_PRINT3 (" Setting %p to %d.\n", p + 2, mcnt); +#else + DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + 2, mcnt); +#endif + goto unconditional_jump; + } + /* If don't have to jump any more, skip over the rest of command. */ + else + p += 4; + break; + + case set_number_at: + { + DEBUG_PRINT1 ("EXECUTING set_number_at.\n"); + + EXTRACT_NUMBER_AND_INCR (mcnt, p); + p1 = p + mcnt; + EXTRACT_NUMBER_AND_INCR (mcnt, p); +#ifdef _LIBC + DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt); +#else + DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt); +#endif + STORE_NUMBER (p1, mcnt); + break; + } + +#if 0 + /* The DEC Alpha C compiler 3.x generates incorrect code for the + test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of + AT_WORD_BOUNDARY, so this code is disabled. Expanding the + macro and introducing temporary variables works around the bug. */ + + case wordbound: + DEBUG_PRINT1 ("EXECUTING wordbound.\n"); + if (AT_WORD_BOUNDARY (d)) + break; + goto fail; + + case notwordbound: + DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); + if (AT_WORD_BOUNDARY (d)) + goto fail; + break; +#else + case wordbound: + { + boolean prevchar, thischar; + + DEBUG_PRINT1 ("EXECUTING wordbound.\n"); + if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) + break; + + prevchar = WORDCHAR_P (d - 1); + thischar = WORDCHAR_P (d); + if (prevchar != thischar) + break; + goto fail; + } + + case notwordbound: + { + boolean prevchar, thischar; + + DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); + if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) + goto fail; + + prevchar = WORDCHAR_P (d - 1); + thischar = WORDCHAR_P (d); + if (prevchar != thischar) + goto fail; + break; + } +#endif + + case wordbeg: + DEBUG_PRINT1 ("EXECUTING wordbeg.\n"); + if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1))) + break; + goto fail; + + case wordend: + DEBUG_PRINT1 ("EXECUTING wordend.\n"); + if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1) + && (!WORDCHAR_P (d) || AT_STRINGS_END (d))) + break; + goto fail; + +#ifdef emacs + case before_dot: + DEBUG_PRINT1 ("EXECUTING before_dot.\n"); + if (PTR_CHAR_POS ((unsigned char *) d) >= point) + goto fail; + break; + + case at_dot: + DEBUG_PRINT1 ("EXECUTING at_dot.\n"); + if (PTR_CHAR_POS ((unsigned char *) d) != point) + goto fail; + break; + + case after_dot: + DEBUG_PRINT1 ("EXECUTING after_dot.\n"); + if (PTR_CHAR_POS ((unsigned char *) d) <= point) + goto fail; + break; + + case syntaxspec: + DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt); + mcnt = *p++; + goto matchsyntax; + + case wordchar: + DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n"); + mcnt = (int) Sword; + matchsyntax: + PREFETCH (); + /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ + d++; + if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt) + goto fail; + SET_REGS_MATCHED (); + break; + + case notsyntaxspec: + DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt); + mcnt = *p++; + goto matchnotsyntax; + + case notwordchar: + DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n"); + mcnt = (int) Sword; + matchnotsyntax: + PREFETCH (); + /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ + d++; + if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt) + goto fail; + SET_REGS_MATCHED (); + break; + +#else /* not emacs */ + case wordchar: + DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n"); + PREFETCH (); + if (!WORDCHAR_P (d)) + goto fail; + SET_REGS_MATCHED (); + d++; + break; + + case notwordchar: + DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n"); + PREFETCH (); + if (WORDCHAR_P (d)) + goto fail; + SET_REGS_MATCHED (); + d++; + break; +#endif /* not emacs */ + + default: + abort (); + } + continue; /* Successfully executed one pattern command; keep going. */ + + + /* We goto here if a matching operation fails. */ + fail: + if (!FAIL_STACK_EMPTY ()) + { /* A restart point is known. Restore to that state. */ + DEBUG_PRINT1 ("\nFAIL:\n"); + POP_FAILURE_POINT (d, p, + lowest_active_reg, highest_active_reg, + regstart, regend, reg_info); + + /* If this failure point is a dummy, try the next one. */ + if (!p) + goto fail; + + /* If we failed to the end of the pattern, don't examine *p. */ + assert (p <= pend); + if (p < pend) + { + boolean is_a_jump_n = false; + + /* If failed to a backwards jump that's part of a repetition + loop, need to pop this failure point and use the next one. */ + switch ((re_opcode_t) *p) + { + case jump_n: + is_a_jump_n = true; + case maybe_pop_jump: + case pop_failure_jump: + case jump: + p1 = p + 1; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + p1 += mcnt; + + if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n) + || (!is_a_jump_n + && (re_opcode_t) *p1 == on_failure_jump)) + goto fail; + break; + default: + /* do nothing */ ; + } + } + + if (d >= string1 && d <= end1) + dend = end_match_1; + } + else + break; /* Matching at this starting point really fails. */ + } /* for (;;) */ + + if (best_regs_set) + goto restore_best_regs; + + FREE_VARIABLES (); + + return -1; /* Failure to match. */ +} /* re_match_2 */ + +/* Subroutine definitions for re_match_2. */ + + +/* We are passed P pointing to a register number after a start_memory. + + Return true if the pattern up to the corresponding stop_memory can + match the empty string, and false otherwise. + + If we find the matching stop_memory, sets P to point to one past its number. + Otherwise, sets P to an undefined byte less than or equal to END. + + We don't handle duplicates properly (yet). */ + +static boolean +group_match_null_string_p (p, end, reg_info) + unsigned char **p, *end; + register_info_type *reg_info; +{ + int mcnt; + /* Point to after the args to the start_memory. */ + unsigned char *p1 = *p + 2; + + while (p1 < end) + { + /* Skip over opcodes that can match nothing, and return true or + false, as appropriate, when we get to one that can't, or to the + matching stop_memory. */ + + switch ((re_opcode_t) *p1) + { + /* Could be either a loop or a series of alternatives. */ + case on_failure_jump: + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + + /* If the next operation is not a jump backwards in the + pattern. */ + + if (mcnt >= 0) + { + /* Go through the on_failure_jumps of the alternatives, + seeing if any of the alternatives cannot match nothing. + The last alternative starts with only a jump, + whereas the rest start with on_failure_jump and end + with a jump, e.g., here is the pattern for `a|b|c': + + /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6 + /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3 + /exactn/1/c + + So, we have to first go through the first (n-1) + alternatives and then deal with the last one separately. */ + + + /* Deal with the first (n-1) alternatives, which start + with an on_failure_jump (see above) that jumps to right + past a jump_past_alt. */ + + while ((re_opcode_t) p1[mcnt-3] == jump_past_alt) + { + /* `mcnt' holds how many bytes long the alternative + is, including the ending `jump_past_alt' and + its number. */ + + if (!alt_match_null_string_p (p1, p1 + mcnt - 3, + reg_info)) + return false; + + /* Move to right after this alternative, including the + jump_past_alt. */ + p1 += mcnt; + + /* Break if it's the beginning of an n-th alternative + that doesn't begin with an on_failure_jump. */ + if ((re_opcode_t) *p1 != on_failure_jump) + break; + + /* Still have to check that it's not an n-th + alternative that starts with an on_failure_jump. */ + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + if ((re_opcode_t) p1[mcnt-3] != jump_past_alt) + { + /* Get to the beginning of the n-th alternative. */ + p1 -= 3; + break; + } + } + + /* Deal with the last alternative: go back and get number + of the `jump_past_alt' just before it. `mcnt' contains + the length of the alternative. */ + EXTRACT_NUMBER (mcnt, p1 - 2); + + if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info)) + return false; + + p1 += mcnt; /* Get past the n-th alternative. */ + } /* if mcnt > 0 */ + break; + + + case stop_memory: + assert (p1[1] == **p); + *p = p1 + 2; + return true; + + + default: + if (!common_op_match_null_string_p (&p1, end, reg_info)) + return false; + } + } /* while p1 < end */ + + return false; +} /* group_match_null_string_p */ + + +/* Similar to group_match_null_string_p, but doesn't deal with alternatives: + It expects P to be the first byte of a single alternative and END one + byte past the last. The alternative can contain groups. */ + +static boolean +alt_match_null_string_p (p, end, reg_info) + unsigned char *p, *end; + register_info_type *reg_info; +{ + int mcnt; + unsigned char *p1 = p; + + while (p1 < end) + { + /* Skip over opcodes that can match nothing, and break when we get + to one that can't. */ + + switch ((re_opcode_t) *p1) + { + /* It's a loop. */ + case on_failure_jump: + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + p1 += mcnt; + break; + + default: + if (!common_op_match_null_string_p (&p1, end, reg_info)) + return false; + } + } /* while p1 < end */ + + return true; +} /* alt_match_null_string_p */ + + +/* Deals with the ops common to group_match_null_string_p and + alt_match_null_string_p. + + Sets P to one after the op and its arguments, if any. */ + +static boolean +common_op_match_null_string_p (p, end, reg_info) + unsigned char **p, *end; + register_info_type *reg_info; +{ + int mcnt; + boolean ret; + int reg_no; + unsigned char *p1 = *p; + + switch ((re_opcode_t) *p1++) + { + case no_op: + case begline: + case endline: + case begbuf: + case endbuf: + case wordbeg: + case wordend: + case wordbound: + case notwordbound: +#ifdef emacs + case before_dot: + case at_dot: + case after_dot: +#endif + break; + + case start_memory: + reg_no = *p1; + assert (reg_no > 0 && reg_no <= MAX_REGNUM); + ret = group_match_null_string_p (&p1, end, reg_info); + + /* Have to set this here in case we're checking a group which + contains a group and a back reference to it. */ + + if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE) + REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret; + + if (!ret) + return false; + break; + + /* If this is an optimized succeed_n for zero times, make the jump. */ + case jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + if (mcnt >= 0) + p1 += mcnt; + else + return false; + break; + + case succeed_n: + /* Get to the number of times to succeed. */ + p1 += 2; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + + if (mcnt == 0) + { + p1 -= 4; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + p1 += mcnt; + } + else + return false; + break; + + case duplicate: + if (!REG_MATCH_NULL_STRING_P (reg_info[*p1])) + return false; + break; + + case set_number_at: + p1 += 4; + + default: + /* All other opcodes mean we cannot match the empty string. */ + return false; + } + + *p = p1; + return true; +} /* common_op_match_null_string_p */ + + +/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN + bytes; nonzero otherwise. */ + +static int +bcmp_translate (s1, s2, len, translate) + const char *s1, *s2; + register int len; + RE_TRANSLATE_TYPE translate; +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + while (len) + { + if (translate[*p1++] != translate[*p2++]) return 1; + len--; + } + return 0; +} + +/* Entry points for GNU code. */ + +/* re_compile_pattern is the GNU regular expression compiler: it + compiles PATTERN (of length SIZE) and puts the result in BUFP. + Returns 0 if the pattern was valid, otherwise an error string. + + Assumes the `allocated' (and perhaps `buffer') and `translate' fields + are set in BUFP on entry. + + We call regex_compile to do the actual compilation. */ + +const char * +re_compile_pattern (pattern, length, bufp) + const char *pattern; + size_t length; + struct re_pattern_buffer *bufp; +{ + reg_errcode_t ret; + + /* GNU code is written to assume at least RE_NREGS registers will be set + (and at least one extra will be -1). */ + bufp->regs_allocated = REGS_UNALLOCATED; + + /* And GNU code determines whether or not to get register information + by passing null for the REGS argument to re_match, etc., not by + setting no_sub. */ + bufp->no_sub = 0; + + /* Match anchors at newline. */ + bufp->newline_anchor = 1; + + ret = regex_compile (pattern, length, re_syntax_options, bufp); + + if (!ret) + return NULL; + return gettext (re_error_msgid[(int) ret]); +} + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined (_REGEX_RE_COMP) || defined (_LIBC) + +/* BSD has one and only one pattern buffer. */ +static struct re_pattern_buffer re_comp_buf; + +char * +#ifdef _LIBC +/* Make these definitions weak in libc, so POSIX programs can redefine + these names if they don't use our functions, and still use + regcomp/regexec below without link errors. */ +weak_function +#endif +re_comp (s) + const char *s; +{ + reg_errcode_t ret; + + if (!s) + { + if (!re_comp_buf.buffer) + return gettext ("No previous regular expression"); + return 0; + } + + if (!re_comp_buf.buffer) + { + re_comp_buf.buffer = (unsigned char *) malloc (200); /* __MEM_CHECKED__ */ + if (re_comp_buf.buffer == NULL) + return gettext (re_error_msgid[(int) REG_ESPACE]); + re_comp_buf.allocated = 200; + + re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH); /* __MEM_CHECKED__ */ + if (re_comp_buf.fastmap == NULL) + return gettext (re_error_msgid[(int) REG_ESPACE]); + } + + /* Since `re_exec' always passes NULL for the `regs' argument, we + don't need to initialize the pattern buffer fields which affect it. */ + + /* Match anchors at newlines. */ + re_comp_buf.newline_anchor = 1; + + ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); + + if (!ret) + return NULL; + + /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ + return (char *) gettext (re_error_msgid[(int) ret]); +} + + +int +#ifdef _LIBC +weak_function +#endif +re_exec (s) + const char *s; +{ + const int len = strlen (s); + return + 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0); +} + +#endif /* _REGEX_RE_COMP */ + +/* POSIX.2 functions. Don't define these for Emacs. */ + +#ifndef emacs + +/* regcomp takes a regular expression as a string and compiles it. + + PREG is a regex_t *. We do not expect any fields to be initialized, + since POSIX says we shouldn't. Thus, we set + + `buffer' to the compiled pattern; + `used' to the length of the compiled pattern; + `syntax' to RE_SYNTAX_POSIX_EXTENDED if the + REG_EXTENDED bit in CFLAGS is set; otherwise, to + RE_SYNTAX_POSIX_BASIC; + `newline_anchor' to REG_NEWLINE being set in CFLAGS; + `fastmap' and `fastmap_accurate' to zero; + `re_nsub' to the number of subexpressions in PATTERN. + + PATTERN is the address of the pattern string. + + CFLAGS is a series of bits which affect compilation. + + If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we + use POSIX basic syntax. + + If REG_NEWLINE is set, then . and [^...] don't match newline. + Also, regexec will try a match beginning after every newline. + + If REG_ICASE is set, then we considers upper- and lowercase + versions of letters to be equivalent when matching. + + If REG_NOSUB is set, then when PREG is passed to regexec, that + routine will report only success or failure, and nothing about the + registers. + + It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for + the return codes and their meanings.) */ + +int +regcomp (preg, pattern, cflags) + regex_t *preg; + const char *pattern; + int cflags; +{ + reg_errcode_t ret; + reg_syntax_t syntax + = (cflags & REG_EXTENDED) ? + RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; + + /* regex_compile will allocate the space for the compiled pattern. */ + preg->buffer = 0; + preg->allocated = 0; + preg->used = 0; + + /* Don't bother to use a fastmap when searching. This simplifies the + REG_NEWLINE case: if we used a fastmap, we'd have to put all the + characters after newlines into the fastmap. This way, we just try + every character. */ + preg->fastmap = 0; + + if (cflags & REG_ICASE) + { + unsigned i; + + preg->translate + = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE /* __MEM_CHECKED__ */ + * sizeof (*(RE_TRANSLATE_TYPE)0)); + if (preg->translate == NULL) + return (int) REG_ESPACE; + + /* Map uppercase characters to corresponding lowercase ones. */ + for (i = 0; i < CHAR_SET_SIZE; i++) + preg->translate[i] = ISUPPER (i) ? tolower (i) : i; + } + else + preg->translate = NULL; + + /* If REG_NEWLINE is set, newlines are treated differently. */ + if (cflags & REG_NEWLINE) + { /* REG_NEWLINE implies neither . nor [^...] match newline. */ + syntax &= ~RE_DOT_NEWLINE; + syntax |= RE_HAT_LISTS_NOT_NEWLINE; + /* It also changes the matching behavior. */ + preg->newline_anchor = 1; + } + else + preg->newline_anchor = 0; + + preg->no_sub = !!(cflags & REG_NOSUB); + + /* POSIX says a null character in the pattern terminates it, so we + can use strlen here in compiling the pattern. */ + ret = regex_compile (pattern, strlen (pattern), syntax, preg); + + /* POSIX doesn't distinguish between an unmatched open-group and an + unmatched close-group: both are REG_EPAREN. */ + if (ret == REG_ERPAREN) ret = REG_EPAREN; + + return (int) ret; +} + + +/* regexec searches for a given pattern, specified by PREG, in the + string STRING. + + If NMATCH is zero or REG_NOSUB was set in the cflags argument to + `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at + least NMATCH elements, and we set them to the offsets of the + corresponding matched substrings. + + EFLAGS specifies `execution flags' which affect matching: if + REG_NOTBOL is set, then ^ does not match at the beginning of the + string; if REG_NOTEOL is set, then $ does not match at the end. + + We return 0 if we find a match and REG_NOMATCH if not. */ + +int +regexec (preg, string, nmatch, pmatch, eflags) + const regex_t *preg; + const char *string; + size_t nmatch; + regmatch_t pmatch[]; + int eflags; +{ + int ret; + struct re_registers regs; + regex_t private_preg; + int len = strlen (string); + boolean want_reg_info = !preg->no_sub && nmatch > 0; + + private_preg = *preg; + + private_preg.not_bol = !!(eflags & REG_NOTBOL); + private_preg.not_eol = !!(eflags & REG_NOTEOL); + + /* The user has told us exactly how many registers to return + information about, via `nmatch'. We have to pass that on to the + matching routines. */ + private_preg.regs_allocated = REGS_FIXED; + + if (want_reg_info) + { + regs.num_regs = nmatch; + regs.start = TALLOC (nmatch, regoff_t); + regs.end = TALLOC (nmatch, regoff_t); + if (regs.start == NULL || regs.end == NULL) + return (int) REG_NOMATCH; + } + + /* Perform the searching operation. */ + ret = re_search (&private_preg, string, len, + /* start: */ 0, /* range: */ len, + want_reg_info ? ®s : (struct re_registers *) 0); + + /* Copy the register information to the POSIX structure. */ + if (want_reg_info) + { + if (ret >= 0) + { + unsigned r; + + for (r = 0; r < nmatch; r++) + { + pmatch[r].rm_so = regs.start[r]; + pmatch[r].rm_eo = regs.end[r]; + } + } + + /* If we needed the temporary register info, free the space now. */ + free (regs.start); /* __MEM_CHECKED__ */ + free (regs.end); /* __MEM_CHECKED__ */ + } + + /* We want zero return to mean success, unlike `re_search'. */ + return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH; +} + + +/* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + +size_t +regerror (errcode, preg, errbuf, errbuf_size) + int errcode; + const regex_t *preg; + char *errbuf; + size_t errbuf_size; +{ + const char *msg; + size_t msg_size; + + if (errcode < 0 + || errcode >= (int) (sizeof (re_error_msgid) + / sizeof (re_error_msgid[0]))) + /* Only error codes returned by the rest of the code should be passed + to this routine. If we are given anything else, or if other regex + code generates an invalid error code, then the program has a bug. + Dump core so we can fix it. */ + abort (); + + msg = gettext (re_error_msgid[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + + if (errbuf_size != 0) + { + if (msg_size > errbuf_size) + { + strncpy (errbuf, msg, errbuf_size - 1); + errbuf[errbuf_size - 1] = 0; + } + else + strcpy (errbuf, msg); /* __STRCPY_CHECKED__ */ + } + + return msg_size; +} + + +/* Free dynamically allocated space used by PREG. */ + +void +regfree (preg) + regex_t *preg; +{ + if (preg->buffer != NULL) + free (preg->buffer); /* __MEM_CHECKED__ */ + preg->buffer = NULL; + + preg->allocated = 0; + preg->used = 0; + + if (preg->fastmap != NULL) + free (preg->fastmap); /* __MEM_CHECKED__ */ + preg->fastmap = NULL; + preg->fastmap_accurate = 0; + + if (preg->translate != NULL) + free (preg->translate); /* __MEM_CHECKED__ */ + preg->translate = NULL; +} + +#endif /* not emacs */ diff --git a/reldate.h b/reldate.h new file mode 100644 index 0000000..8649e24 --- /dev/null +++ b/reldate.h @@ -0,0 +1 @@ +const char *ReleaseDate = "2004-02-01"; diff --git a/remailer.c b/remailer.c new file mode 100644 index 0000000..8172f7c --- /dev/null +++ b/remailer.c @@ -0,0 +1,781 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* + * Mixmaster support for Mutt + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "mutt_regex.h" +#include "mapping.h" + +#include "remailer.h" + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include <sys/types.h> +#include <sys/file.h> +#include <fcntl.h> + +#ifdef MIXMASTER + +struct coord +{ + short r, c; +}; + +static REMAILER **mix_type2_list (size_t *l); +static REMAILER *mix_new_remailer (void); +static const char *mix_format_caps (REMAILER *r); +static int mix_chain_add (MIXCHAIN *chain, const char *s, REMAILER **type2_list); +static int mix_get_caps (const char *capstr); +static void mix_add_entry (REMAILER ***, REMAILER *, size_t *, size_t *); +static void mix_entry (char *b, size_t blen, MUTTMENU *menu, int num); +static void mix_free_remailer (REMAILER **r); +static void mix_free_type2_list (REMAILER ***ttlp); +static void mix_redraw_ce (REMAILER **type2_list, struct coord *coords, MIXCHAIN *chain, int i, short selected); +static void mix_redraw_chain (REMAILER **type2_list, struct coord *coords, MIXCHAIN *chain, int cur); +static void mix_redraw_head (MIXCHAIN *); +static void mix_screen_coordinates (REMAILER **type2_list, struct coord **, MIXCHAIN *, int); + +static int mix_get_caps (const char *capstr) +{ + int caps = 0; + + while (*capstr) + { + switch (*capstr) + { + case 'C': + caps |= MIX_CAP_COMPRESS; + break; + + case 'M': + caps |= MIX_CAP_MIDDLEMAN; + break; + + case 'N': + { + switch (*++capstr) + { + case 'm': + caps |= MIX_CAP_NEWSMAIL; + break; + + case 'p': + caps |= MIX_CAP_NEWSPOST; + break; + + } + } + } + + if (*capstr) capstr++; + } + + return caps; +} + +static void mix_add_entry (REMAILER ***type2_list, REMAILER *entry, + size_t *slots, size_t *used) +{ + if (*used == *slots) + { + *slots += 5; + safe_realloc (type2_list, sizeof (REMAILER *) * (*slots)); + } + + (*type2_list)[(*used)++] = entry; + if (entry) entry->num = *used; +} + +static REMAILER *mix_new_remailer (void) +{ + return safe_calloc (1, sizeof (REMAILER)); +} + +static void mix_free_remailer (REMAILER **r) +{ + FREE (&(*r)->shortname); + FREE (&(*r)->addr); + FREE (&(*r)->ver); + + FREE (r); +} + +/* parse the type2.list as given by mixmaster -T */ + +static REMAILER **mix_type2_list (size_t *l) +{ + FILE *fp; + pid_t mm_pid; + int devnull; + + char cmd[HUGE_STRING + _POSIX_PATH_MAX]; + char line[HUGE_STRING]; + char *t; + + REMAILER **type2_list = NULL, *p; + size_t slots = 0, used = 0; + + if (!l) + return NULL; + + if ((devnull = open ("/dev/null", O_RDWR)) == -1) + return NULL; + + snprintf (cmd, sizeof (cmd), "%s -T", Mixmaster); + + if ((mm_pid = mutt_create_filter_fd (cmd, NULL, &fp, NULL, devnull, -1, devnull)) == -1) + { + close (devnull); + return NULL; + } + + /* first, generate the "random" remailer */ + + p = mix_new_remailer (); + p->shortname = safe_strdup ("<random>"); + mix_add_entry (&type2_list, p, &slots, &used); + + while (fgets (line, sizeof (line), fp)) + { + p = mix_new_remailer (); + + if (!(t = strtok (line, " \t\n"))) + goto problem; + + p->shortname = safe_strdup (t); + + if (!(t = strtok (NULL, " \t\n"))) + goto problem; + + p->addr = safe_strdup (t); + + if (!(t = strtok (NULL, " \t\n"))) + goto problem; + + if (!(t = strtok (NULL, " \t\n"))) + goto problem; + + p->ver = safe_strdup (t); + + if (!(t = strtok (NULL, " \t\n"))) + goto problem; + + p->caps = mix_get_caps (t); + + mix_add_entry (&type2_list, p, &slots, &used); + continue; + + problem: + mix_free_remailer (&p); + } + + *l = used; + + mix_add_entry (&type2_list, NULL, &slots, &used); + mutt_wait_filter (mm_pid); + + close (devnull); + + return type2_list; +} + +static void mix_free_type2_list (REMAILER ***ttlp) +{ + int i; + REMAILER **type2_list = *ttlp; + + for (i = 0; type2_list[i]; i++) + mix_free_remailer (&type2_list[i]); + + FREE (type2_list); +} + + +#define MIX_HOFFSET 2 +#define MIX_VOFFSET (LINES - 6) +#define MIX_MAXROW (LINES - 3) + + +static void mix_screen_coordinates (REMAILER **type2_list, + struct coord **coordsp, + MIXCHAIN *chain, + int i) +{ + short c, r, oc; + struct coord *coords; + + if (!chain->cl) + return; + + safe_realloc (coordsp, sizeof (struct coord) * chain->cl); + + coords = *coordsp; + + if (i) + { + c = coords[i-1].c + strlen (type2_list[chain->ch[i-1]]->shortname) + 2; + r = coords[i-1].r; + } + else + { + r = MIX_VOFFSET; + c = MIX_HOFFSET; + } + + + for (; i < chain->cl; i++) + { + oc = c; + c += strlen (type2_list[chain->ch[i]]->shortname) + 2; + + if (c >= COLS) + { + oc = c = MIX_HOFFSET; + r++; + } + + coords[i].c = oc; + coords[i].r = r; + + } + +} + +static void mix_redraw_ce (REMAILER **type2_list, + struct coord *coords, + MIXCHAIN *chain, + int i, + short selected) +{ + if (!coords || !chain) + return; + + if (coords[i].r < MIX_MAXROW) + { + + if (selected) + SETCOLOR (MT_COLOR_INDICATOR); + else + SETCOLOR (MT_COLOR_NORMAL); + + mvaddstr (coords[i].r, coords[i].c, type2_list[chain->ch[i]]->shortname); + SETCOLOR (MT_COLOR_NORMAL); + + if (i + 1 < chain->cl) + addstr (", "); + } +} + +static void mix_redraw_chain (REMAILER **type2_list, + struct coord *coords, + MIXCHAIN *chain, + int cur) +{ + int i; + + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + + for (i = MIX_VOFFSET; i < MIX_MAXROW; i++) + { + move (i, 0); + clrtoeol (); + } + + for (i = 0; i < chain->cl; i++) + mix_redraw_ce (type2_list, coords, chain, i, i == cur); +} + +static void mix_redraw_head (MIXCHAIN *chain) +{ + SETCOLOR (MT_COLOR_STATUS); + mvprintw (MIX_VOFFSET - 1, 0, "-- Remailer chain [Length: %d]", chain ? chain->cl : 0); + + BKGDSET (MT_COLOR_STATUS); + clrtoeol (); + + BKGDSET (MT_COLOR_NORMAL); + SETCOLOR (MT_COLOR_NORMAL); +} + +static const char *mix_format_caps (REMAILER *r) +{ + static char capbuff[10]; + char *t = capbuff; + + if (r->caps & MIX_CAP_COMPRESS) + *t++ = 'C'; + else + *t++ = ' '; + + if (r->caps & MIX_CAP_MIDDLEMAN) + *t++ = 'M'; + else + *t++ = ' '; + + if (r->caps & MIX_CAP_NEWSPOST) + { + *t++ = 'N'; + *t++ = 'p'; + } + else + { + *t++ = ' '; + *t++ = ' '; + } + + if (r->caps & MIX_CAP_NEWSMAIL) + { + *t++ = 'N'; + *t++ = 'm'; + } + else + { + *t++ = ' '; + *t++ = ' '; + } + + *t = '\0'; + + return capbuff; +} + +/* + * Format an entry for the remailer menu. + * + * %n number + * %c capabilities + * %s short name + * %a address + * + */ + +static const char *mix_entry_fmt (char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags) +{ + char fmt[16]; + REMAILER *remailer = (REMAILER *) data; + int optional = (flags & M_FORMAT_OPTIONAL); + + switch (op) + { + case 'n': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, remailer->num); + } + break; + case 'c': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, mix_format_caps(remailer)); + } + break; + case 's': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL(remailer->shortname)); + } + else if (!remailer->shortname) + optional = 0; + break; + case 'a': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL(remailer->addr)); + } + else if (!remailer->addr) + optional = 0; + break; + + default: + *dest = '\0'; + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0); + return (src); +} + + + +static void mix_entry (char *b, size_t blen, MUTTMENU *menu, int num) +{ + REMAILER **type2_list = (REMAILER **) menu->data; + mutt_FormatString (b, blen, NONULL (MixEntryFormat), mix_entry_fmt, + (unsigned long) type2_list[num], M_FORMAT_ARROWCURSOR); +} + +static int mix_chain_add (MIXCHAIN *chain, const char *s, + REMAILER **type2_list) +{ + int i; + + if (chain->cl >= MAXMIXES) + return -1; + + if (!mutt_strcmp (s, "0") || !ascii_strcasecmp (s, "<random>")) + { + chain->ch[chain->cl++] = 0; + return 0; + } + + for (i = 0; type2_list[i]; i++) + { + if (!ascii_strcasecmp (s, type2_list[i]->shortname)) + { + chain->ch[chain->cl++] = i; + return 0; + } + } + + /* replace unknown remailers by <random> */ + + if (!type2_list[i]) + chain->ch[chain->cl++] = 0; + + return 0; +} + +static struct mapping_t RemailerHelp[] = +{ + { N_("Append"), OP_MIX_APPEND }, + { N_("Insert"), OP_MIX_INSERT }, + { N_("Delete"), OP_MIX_DELETE }, + { N_("Abort"), OP_EXIT }, + { N_("OK"), OP_MIX_USE }, + { NULL } +}; + + +void mix_make_chain (LIST **chainp, int *redraw) +{ + LIST *p; + MIXCHAIN *chain; + int c_cur = 0, c_old = 0; + int m_len; + short c_redraw = 1; + + REMAILER **type2_list = NULL; + size_t ttll = 0; + + struct coord *coords = NULL; + + MUTTMENU *menu; + char helpstr[SHORT_STRING]; + short loop = 1; + int op; + + int i, j; + char *t; + + if (!(type2_list = mix_type2_list (&ttll))) + { + mutt_error _("Can't get mixmaster's type2.list!"); + return; + } + + *redraw = REDRAW_FULL; + + chain = safe_calloc (sizeof (MIXCHAIN), 1); + for (p = *chainp; p; p = p->next) + mix_chain_add (chain, (char *) p->data, type2_list); + + mutt_free_list (chainp); + + /* safety check */ + for (i = 0; i < chain->cl; i++) + { + if (chain->ch[i] >= ttll) + chain->ch[i] = 0; + } + + mix_screen_coordinates (type2_list, &coords, chain, 0); + + menu = mutt_new_menu (); + menu->menu = MENU_MIX; + menu->max = ttll; + menu->make_entry = mix_entry; + menu->tag = NULL; + menu->title = _("Select a remailer chain."); + menu->data = type2_list; + menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MIX, RemailerHelp); + + m_len = menu->pagelen = MIX_VOFFSET - menu->offset - 1; + + while (loop) + { + if (menu->pagelen != m_len) + { + menu->pagelen = m_len; + menu->redraw = REDRAW_FULL; + } + + if (c_redraw) + { + mix_redraw_head (chain); + mix_redraw_chain (type2_list, coords, chain, c_cur); + c_redraw = 0; + } + else if (c_cur != c_old) + { + mix_redraw_ce (type2_list, coords, chain, c_old, 0); + mix_redraw_ce (type2_list, coords, chain, c_cur, 1); + } + + c_old = c_cur; + + switch ((op = mutt_menuLoop (menu))) + { + case OP_REDRAW: + { + menu_redraw_status (menu); + mix_redraw_head (chain); + mix_screen_coordinates (type2_list, &coords, chain, 0); + mix_redraw_chain (type2_list, coords, chain, c_cur); + menu->pagelen = m_len = MIX_VOFFSET - menu->offset - 1; + break; + } + + case OP_EXIT: + { + chain->cl = 0; + loop = 0; + break; + } + + case OP_MIX_USE: + { + if (!chain->cl) + { + chain->cl++; + chain->ch[0] = menu->current; + mix_screen_coordinates (type2_list, &coords, chain, c_cur); + c_redraw = 1; + } + + if (chain->cl && chain->ch[chain->cl - 1] && + (type2_list[chain->ch[chain->cl-1]]->caps & MIX_CAP_MIDDLEMAN)) + { + mutt_error ( _("Error: %s can't be used as the final remailer of a chain."), + type2_list[chain->ch[chain->cl - 1]]->shortname); + } + else + { + loop = 0; + } + break; + } + + case OP_GENERIC_SELECT_ENTRY: + case OP_MIX_APPEND: + { + if (chain->cl < MAXMIXES && c_cur < chain->cl) + c_cur++; + } + /* fallthrough */ + case OP_MIX_INSERT: + { + if (chain->cl < MAXMIXES) + { + chain->cl++; + for (i = chain->cl - 1; i > c_cur; i--) + chain->ch[i] = chain->ch[i-1]; + + chain->ch[c_cur] = menu->current; + mix_screen_coordinates (type2_list, &coords, chain, c_cur); + c_redraw = 1; + } + else + mutt_error ( _("Mixmaster chains are limited to %d elements."), + MAXMIXES); + + break; + } + + case OP_MIX_DELETE: + { + if (chain->cl) + { + chain->cl--; + + for (i = c_cur; i < chain->cl; i++) + chain->ch[i] = chain->ch[i+1]; + + if (c_cur == chain->cl && c_cur) + c_cur--; + + mix_screen_coordinates (type2_list, &coords, chain, c_cur); + c_redraw = 1; + } + else + { + mutt_error _("The remailer chain is already empty."); + } + break; + } + + case OP_MIX_CHAIN_PREV: + { + if (c_cur) + c_cur--; + else + mutt_error _("You already have the first chain element selected."); + + break; + } + + case OP_MIX_CHAIN_NEXT: + { + if (chain->cl && c_cur < chain->cl - 1) + c_cur++; + else + mutt_error _("You already have the last chain element selected."); + + break; + } + } + } + + mutt_menuDestroy (&menu); + + /* construct the remailer list */ + + if (chain->cl) + { + for (i = 0; i < chain->cl; i++) + { + if ((j = chain->ch[i])) + t = type2_list[j]->shortname; + else + t = "*"; + + *chainp = mutt_add_list (*chainp, t); + } + } + + mix_free_type2_list (&type2_list); + FREE (&coords); + FREE (&chain); +} + +/* some safety checks before piping the message to mixmaster */ + +int mix_check_message (HEADER *msg) +{ + const char *fqdn; + short need_hostname = 0; + ADDRESS *p; + + if (msg->env->cc || msg->env->bcc) + { + mutt_error _("Mixmaster doesn't accept Cc or Bcc headers."); + return -1; + } + + /* When using mixmaster, we MUST qualify any addresses since + * the message will be delivered through remote systems. + * + * use_domain won't be respected at this point, hidden_host will. + */ + + for (p = msg->env->to; p; p = p->next) + { + if (!p->group && strchr (p->mailbox, '@') == NULL) + { + need_hostname = 1; + break; + } + } + + if (need_hostname) + { + + if (!(fqdn = mutt_fqdn (1))) + { + mutt_error _("Please set the hostname variable to a proper value when using mixmaster!"); + return (-1); + } + + /* Cc and Bcc are empty at this point. */ + rfc822_qualify (msg->env->to, fqdn); + rfc822_qualify (msg->env->reply_to, fqdn); + rfc822_qualify (msg->env->mail_followup_to, fqdn); + } + + return 0; +} + +int mix_send_message (LIST *chain, const char *tempfile) +{ + char cmd[HUGE_STRING]; + char tmp[HUGE_STRING]; + char cd_quoted[STRING]; + int i; + + snprintf (cmd, sizeof (cmd), "cat %s | %s -m ", tempfile, Mixmaster); + + for (i = 0; chain; chain = chain->next, i = 1) + { + strfcpy (tmp, cmd, sizeof (tmp)); + mutt_quote_filename (cd_quoted, sizeof (cd_quoted), (char *) chain->data); + snprintf (cmd, sizeof (cmd), "%s%s%s", tmp, i ? "," : " -l ", cd_quoted); + } + + if (!option (OPTNOCURSES)) + mutt_endwin (NULL); + + if ((i = mutt_system (cmd))) + { + fprintf (stderr, _("Error sending message, child exited %d.\n"), i); + if (!option (OPTNOCURSES)) + { + mutt_any_key_to_continue (NULL); + mutt_error _("Error sending message."); + } + } + + unlink (tempfile); + return i; +} + + +#endif diff --git a/remailer.h b/remailer.h new file mode 100644 index 0000000..0ff0e97 --- /dev/null +++ b/remailer.h @@ -0,0 +1,65 @@ +#ifndef _REMAILER_H +#define _REMAILER_H + +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * Mixmaster support for Mutt + */ + +#include "config.h" + +#ifdef MIXMASTER + +#define MIX_CAP_COMPRESS (1 << 0) +#define MIX_CAP_MIDDLEMAN (1 << 1) +#define MIX_CAP_NEWSPOST (1 << 2) +#define MIX_CAP_NEWSMAIL (1 << 3) + +/* Mixmaster's maximum chain length. Don't change this. */ + +#define MAXMIXES 19 + +struct type2 +{ + int num; + char *shortname; + char *addr; + char *ver; + int caps; +}; + +typedef struct type2 REMAILER; + + +struct mixchain +{ + size_t cl; + int ch[MAXMIXES]; +}; + +typedef struct mixchain MIXCHAIN; + +int mix_send_message (LIST *, const char *); +int mix_check_message (HEADER *msg); +void mix_make_chain (LIST **, int *); + +#endif /* MIXMASTER */ + +#endif /* _REMAILER_H */ diff --git a/resize.c b/resize.c new file mode 100644 index 0000000..c36b7a4 --- /dev/null +++ b/resize.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" + +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <termios.h> + +#ifdef HAVE_SYS_IOCTL_H +#include <sys/ioctl.h> +#else +# ifdef HAVE_IOCTL_H +# include <ioctl.h> +# endif +#endif + +/* this routine should be called after receiving SIGWINCH */ +void mutt_resize_screen (void) +{ + char *cp; + int fd; + struct winsize w; +#ifdef HAVE_RESIZETERM + int SLtt_Screen_Rows, SLtt_Screen_Cols; +#endif + + SLtt_Screen_Rows = -1; + SLtt_Screen_Cols = -1; + if ((fd = open ("/dev/tty", O_RDONLY)) != -1) + { + if (ioctl (fd, TIOCGWINSZ, &w) != -1) + { + SLtt_Screen_Rows = w.ws_row; + SLtt_Screen_Cols = w.ws_col; + } + close (fd); + } + if (SLtt_Screen_Rows <= 0) + { + if ((cp = getenv ("LINES")) != NULL) + { + SLtt_Screen_Rows = atoi (cp); + } + else + SLtt_Screen_Rows = 24; + } + if (SLtt_Screen_Cols <= 0) + { + if ((cp = getenv ("COLUMNS")) != NULL) + SLtt_Screen_Cols = atoi (cp); + else + SLtt_Screen_Cols = 80; + } +#ifdef USE_SLANG_CURSES + delwin (stdscr); + SLsmg_reset_smg (); + SLsmg_init_smg (); + stdscr = newwin (0, 0, 0, 0); + keypad (stdscr, TRUE); +#else + resizeterm (SLtt_Screen_Rows, SLtt_Screen_Cols); +#endif +} diff --git a/rfc1524.c b/rfc1524.c new file mode 100644 index 0000000..82c39a6 --- /dev/null +++ b/rfc1524.c @@ -0,0 +1,593 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * rfc1524 defines a format for the Multimedia Mail Configuration, which + * is the standard mailcap file format under Unix which specifies what + * external programs should be used to view/compose/edit multimedia files + * based on content type. + * + * This file contains various functions for implementing a fair subset of + * rfc1524. + */ + +#include "mutt.h" +#include "rfc1524.h" + +#include <string.h> +#include <stdlib.h> +#include <ctype.h> + +#include <sys/stat.h> +#include <sys/wait.h> +#include <errno.h> +#include <unistd.h> + +/* The command semantics include the following: + * %s is the filename that contains the mail body data + * %t is the content type, like text/plain + * %{parameter} is replaced by the parameter value from the content-type field + * \% is % + * Unsupported rfc1524 parameters: these would probably require some doing + * by mutt, and can probably just be done by piping the message to metamail + * %n is the integer number of sub-parts in the multipart + * %F is "content-type filename" repeated for each sub-part + * + * In addition, this function returns a 0 if the command works on a file, + * and 1 if the command works on a pipe. + */ +int rfc1524_expand_command (BODY *a, char *filename, char *_type, + char *command, int clen) +{ + int x=0,y=0; + int needspipe = TRUE; + char buf[LONG_STRING]; + char type[LONG_STRING]; + + strfcpy (type, _type, sizeof (type)); + + if (option (OPTMAILCAPSANITIZE)) + mutt_sanitize_filename (type, 0); + + while (command[x] && x<clen && y<sizeof(buf)) + { + if (command[x] == '\\') { + x++; + buf[y++] = command[x++]; + } + else if (command[x] == '%') + { + x++; + if (command[x] == '{') + { + char param[STRING]; + char pvalue[STRING]; + char *_pvalue; + int z = 0; + + x++; + while (command[x] && command[x] != '}' && z<sizeof(param)) + param[z++] = command[x++]; + param[z] = '\0'; + + _pvalue = mutt_get_parameter (param, a->parameter); + strfcpy (pvalue, NONULL(_pvalue), sizeof (pvalue)); + if (option (OPTMAILCAPSANITIZE)) + mutt_sanitize_filename (pvalue, 0); + + y += mutt_quote_filename (buf + y, sizeof (buf) - y, pvalue); + } + else if (command[x] == 's' && filename != NULL) + { + y += mutt_quote_filename (buf + y, sizeof (buf) - y, filename); + needspipe = FALSE; + } + else if (command[x] == 't') + { + y += mutt_quote_filename (buf + y, sizeof (buf) - y, type); + } + x++; + } + else + buf[y++] = command[x++]; + } + buf[y] = '\0'; + strfcpy (command, buf, clen); + + return needspipe; +} + +/* NUL terminates a rfc 1524 field, + * returns start of next field or NULL */ +static char *get_field (char *s) +{ + char *ch; + + if (!s) + return NULL; + + while ((ch = strpbrk (s, ";\\")) != NULL) + { + if (*ch == '\\') + { + s = ch + 1; + if (*s) + s++; + } + else + { + *ch++ = 0; + SKIPWS (ch); + break; + } + } + mutt_remove_trailing_ws (s); + return ch; +} + +static int get_field_text (char *field, char **entry, + char *type, char *filename, int line) +{ + field = mutt_skip_whitespace (field); + if (*field == '=') + { + if (entry) + { + field++; + field = mutt_skip_whitespace (field); + mutt_str_replace (entry, field); + } + return 1; + } + else + { + mutt_error (_("Improperly formated entry for type %s in \"%s\" line %d"), + type, filename, line); + return 0; + } +} + +static int rfc1524_mailcap_parse (BODY *a, + char *filename, + char *type, + rfc1524_entry *entry, + int opt) +{ + FILE *fp; + char *buf = NULL; + size_t buflen; + char *ch; + char *field; + int found = FALSE; + int copiousoutput; + int composecommand; + int editcommand; + int printcommand; + int btlen; + int line = 0; + + /* rfc1524 mailcap file is of the format: + * base/type; command; extradefs + * type can be * for matching all + * base with no /type is an implicit wild + * command contains a %s for the filename to pass, default to pipe on stdin + * extradefs are of the form: + * def1="definition"; def2="define \;"; + * line wraps with a \ at the end of the line + * # for comments + */ + + /* find length of basetype */ + if ((ch = strchr (type, '/')) == NULL) + return FALSE; + btlen = ch - type; + + if ((fp = fopen (filename, "r")) != NULL) + { + while (!found && (buf = mutt_read_line (buf, &buflen, fp, &line)) != NULL) + { + /* ignore comments */ + if (*buf == '#') + continue; + dprint (2, (debugfile, "mailcap entry: %s\n", buf)); + + /* check type */ + ch = get_field (buf); + if (ascii_strcasecmp (buf, type) && + (ascii_strncasecmp (buf, type, btlen) || + (buf[btlen] != 0 && /* implicit wild */ + mutt_strcmp (buf + btlen, "/*")))) /* wildsubtype */ + continue; + + /* next field is the viewcommand */ + field = ch; + ch = get_field (ch); + if (entry) + entry->command = safe_strdup (field); + + /* parse the optional fields */ + found = TRUE; + copiousoutput = FALSE; + composecommand = FALSE; + editcommand = FALSE; + printcommand = FALSE; + + while (ch) + { + field = ch; + ch = get_field (ch); + dprint (2, (debugfile, "field: %s\n", field)); + + if (!ascii_strcasecmp (field, "needsterminal")) + { + if (entry) + entry->needsterminal = TRUE; + } + else if (!ascii_strcasecmp (field, "copiousoutput")) + { + copiousoutput = TRUE; + if (entry) + entry->copiousoutput = TRUE; + } + else if (!ascii_strncasecmp (field, "composetyped", 12)) + { + /* this compare most occur before compose to match correctly */ + if (get_field_text (field + 12, entry ? &entry->composetypecommand : NULL, + type, filename, line)) + composecommand = TRUE; + } + else if (!ascii_strncasecmp (field, "compose", 7)) + { + if (get_field_text (field + 7, entry ? &entry->composecommand : NULL, + type, filename, line)) + composecommand = TRUE; + } + else if (!ascii_strncasecmp (field, "print", 5)) + { + if (get_field_text (field + 5, entry ? &entry->printcommand : NULL, + type, filename, line)) + printcommand = TRUE; + } + else if (!ascii_strncasecmp (field, "edit", 4)) + { + if (get_field_text (field + 4, entry ? &entry->editcommand : NULL, + type, filename, line)) + editcommand = TRUE; + } + else if (!ascii_strncasecmp (field, "nametemplate", 12)) + { + get_field_text (field + 12, entry ? &entry->nametemplate : NULL, + type, filename, line); + } + else if (!ascii_strncasecmp (field, "x-convert", 9)) + { + get_field_text (field + 9, entry ? &entry->convert : NULL, + type, filename, line); + } + else if (!ascii_strncasecmp (field, "test", 4)) + { + /* + * This routine executes the given test command to determine + * if this is the right entry. + */ + char *test_command = NULL; + size_t len; + + if (get_field_text (field + 4, &test_command, type, filename, line) + && test_command) + { + len = mutt_strlen (test_command) + STRING; + safe_realloc (&test_command, len); + rfc1524_expand_command (a, a->filename, type, test_command, len); + if (mutt_system (test_command)) + { + /* a non-zero exit code means test failed */ + found = FALSE; + } + FREE (&test_command); + } + } + } /* while (ch) */ + + if (opt == M_AUTOVIEW) + { + if (!copiousoutput) + found = FALSE; + } + else if (opt == M_COMPOSE) + { + if (!composecommand) + found = FALSE; + } + else if (opt == M_EDIT) + { + if (!editcommand) + found = FALSE; + } + else if (opt == M_PRINT) + { + if (!printcommand) + found = FALSE; + } + + if (!found) + { + /* reset */ + if (entry) + { + FREE (&entry->command); + FREE (&entry->composecommand); + FREE (&entry->composetypecommand); + FREE (&entry->editcommand); + FREE (&entry->printcommand); + FREE (&entry->nametemplate); + FREE (&entry->convert); + entry->needsterminal = 0; + entry->copiousoutput = 0; + } + } + } /* while (!found && (buf = mutt_read_line ())) */ + fclose (fp); + } /* if ((fp = fopen ())) */ + FREE (&buf); + return found; +} + +rfc1524_entry *rfc1524_new_entry(void) +{ + return (rfc1524_entry *)safe_calloc(1, sizeof(rfc1524_entry)); +} + +void rfc1524_free_entry(rfc1524_entry **entry) +{ + rfc1524_entry *p = *entry; + + FREE (&p->command); + FREE (&p->testcommand); + FREE (&p->composecommand); + FREE (&p->composetypecommand); + FREE (&p->editcommand); + FREE (&p->printcommand); + FREE (&p->nametemplate); + FREE (entry); +} + +/* + * rfc1524_mailcap_lookup attempts to find the given type in the + * list of mailcap files. On success, this returns the entry information + * in *entry, and returns 1. On failure (not found), returns 0. + * If entry == NULL just return 1 if the given type is found. + */ +int rfc1524_mailcap_lookup (BODY *a, char *type, rfc1524_entry *entry, int opt) +{ + char path[_POSIX_PATH_MAX]; + int x; + int found = FALSE; + char *curr = MailcapPath; + + /* rfc1524 specifies that a path of mailcap files should be searched. + * joy. They say + * $HOME/.mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap, etc + * and overriden by the MAILCAPS environment variable, and, just to be nice, + * we'll make it specifiable in .muttrc + */ + if (!curr || !*curr) + { + mutt_error _("No mailcap path specified"); + return 0; + } + + mutt_check_lookup_list (a, type, SHORT_STRING); + + while (!found && *curr) + { + x = 0; + while (*curr && *curr != ':' && x < sizeof (path) - 1) + { + path[x++] = *curr; + curr++; + } + if (*curr) + curr++; + + if (!x) + continue; + + path[x] = '\0'; + mutt_expand_path (path, sizeof (path)); + + dprint(2,(debugfile,"Checking mailcap file: %s\n",path)); + found = rfc1524_mailcap_parse (a, path, type, entry, opt); + } + + if (entry && !found) + mutt_error (_("mailcap entry for type %s not found"), type); + + return found; +} + + +/* This routine will create a _temporary_ filename matching the + * name template given if this needs to be done. + * + * Please note that only the last path element of the + * template and/or the old file name will be used for the + * comparison and the temporary file name. + * + * Returns 0 if oldfile is fine as is. + * Returns 1 if newfile specified + */ + +static void strnfcpy(char *d, char *s, size_t siz, size_t len) +{ + if(len > siz) + len = siz - 1; + strfcpy(d, s, len); +} + +int rfc1524_expand_filename (char *nametemplate, + char *oldfile, + char *newfile, + size_t nflen) +{ + int i, j, k, ps, r; + char *s; + short lmatch = 0, rmatch = 0; + char left[_POSIX_PATH_MAX]; + char right[_POSIX_PATH_MAX]; + + newfile[0] = 0; + + /* first, ignore leading path components. + */ + + if (nametemplate && (s = strrchr (nametemplate, '/'))) + nametemplate = s + 1; + + if (oldfile && (s = strrchr (oldfile, '/'))) + oldfile = s + 1; + + if (!nametemplate) + { + if (oldfile) + strfcpy (newfile, oldfile, nflen); + } + else if (!oldfile) + { + mutt_expand_fmt (newfile, nflen, nametemplate, "mutt"); + } + else /* oldfile && nametemplate */ + { + + /* first, compare everything left from the "%s" + * (if there is one). + */ + + lmatch = 1; ps = 0; + for(i = 0; nametemplate[i]; i++) + { + if(nametemplate[i] == '%' && nametemplate[i+1] == 's') + { + ps = 1; + break; + } + + /* note that the following will _not_ read beyond oldfile's end. */ + + if(lmatch && nametemplate[i] != oldfile[i]) + lmatch = 0; + } + + if(ps) + { + + /* If we had a "%s", check the rest. */ + + /* now, for the right part: compare everything right from + * the "%s" to the final part of oldfile. + * + * The logic here is as follows: + * + * - We start reading from the end. + * - There must be a match _right_ from the "%s", + * thus the i + 2. + * - If there was a left hand match, this stuff + * must not be counted again. That's done by the + * condition (j >= (lmatch ? i : 0)). + */ + + rmatch = 1; + + for(r = 0, j = mutt_strlen(oldfile) - 1, k = mutt_strlen(nametemplate) - 1 ; + j >= (lmatch ? i : 0) && k >= i + 2; + j--, k--) + { + if(nametemplate[k] != oldfile[j]) + { + rmatch = 0; + break; + } + } + + /* Now, check if we had a full match. */ + + if(k >= i + 2) + rmatch = 0; + + if(lmatch) *left = 0; + else strnfcpy(left, nametemplate, sizeof(left), i); + + if(rmatch) *right = 0; + else strfcpy(right, nametemplate + i + 2, sizeof(right)); + + snprintf(newfile, nflen, "%s%s%s", left, oldfile, right); + } + else + { + /* no "%s" in the name template. */ + strfcpy(newfile, nametemplate, nflen); + } + } + + mutt_adv_mktemp(newfile, nflen); + + if(rmatch && lmatch) + return 0; + else + return 1; + +} + +/* If rfc1524_expand_command() is used on a recv'd message, then + * the filename doesn't exist yet, but if its used while sending a message, + * then we need to rename the existing file. + * + * This function returns 0 on successful move, 1 on old file doesn't exist, + * 2 on new file already exists, and 3 on other failure. + */ + +/* note on access(2) use: No dangling symlink problems here due to + * safe_fopen(). + */ + +int _mutt_rename_file (char *oldfile, char *newfile, int overwrite) +{ + FILE *ofp, *nfp; + + if (access (oldfile, F_OK) != 0) + return 1; + if (!overwrite && access (newfile, F_OK) == 0) + return 2; + if ((ofp = fopen (oldfile,"r")) == NULL) + return 3; + if ((nfp = safe_fopen (newfile,"w")) == NULL) + { + fclose(ofp); + return 3; + } + mutt_copy_stream (ofp,nfp); + fclose (nfp); + fclose (ofp); + mutt_unlink (oldfile); + return 0; +} + +int mutt_rename_file (char *oldfile, char *newfile) +{ + return _mutt_rename_file (oldfile, newfile, 0); +} diff --git a/rfc1524.h b/rfc1524.h new file mode 100644 index 0000000..bc24e96 --- /dev/null +++ b/rfc1524.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef _RFC1524_H +#define _RFC1524_H + +typedef struct rfc1524_mailcap_entry { +/* char *contenttype; */ /* we don't need this, as we search for it */ + char *command; + char *testcommand; + char *composecommand; + char *composetypecommand; + char *editcommand; + char *printcommand; + char *nametemplate; + char *convert; +/* char *description; */ /* we don't need this */ + unsigned int needsterminal : 1; /* endwin() and system */ + unsigned int copiousoutput : 1; /* needs pager, basically */ +} rfc1524_entry; + +rfc1524_entry *rfc1524_new_entry (void); +void rfc1524_free_entry (rfc1524_entry **); +int rfc1524_expand_command (BODY *, char *, char *, char *, int); +int rfc1524_expand_filename (char *, char *, char *, size_t); +int rfc1524_mailcap_lookup (BODY *, char *, rfc1524_entry *, int); +int mutt_rename_file (char *, char *); +int _mutt_rename_file (char *, char *, int); + +#endif /* _RFC1524_H */ diff --git a/rfc2047.c b/rfc2047.c new file mode 100644 index 0000000..d27224e --- /dev/null +++ b/rfc2047.c @@ -0,0 +1,778 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * Copyright (C) 2000-2001 Edmund Grimley Evans <edmundo@rano.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mime.h" +#include "charset.h" +#include "rfc2047.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* If you are debugging this file, comment out the following line. */ +/*#define NDEBUG*/ + +#ifdef NDEBUG +#define assert(x) +#else +#include <assert.h> +#endif + +#define ENCWORD_LEN_MAX 75 +#define ENCWORD_LEN_MIN 9 /* strlen ("=?.?.?.?=") */ + +#define HSPACE(x) ((x) == '\0' || (x) == ' ' || (x) == '\t') + +#define CONTINUATION_BYTE(c) (((c) & 0xc0) == 0x80) + +extern char RFC822Specials[]; + +typedef size_t (*encoder_t) (char *, ICONV_CONST char *, size_t, + const char *); + +static size_t convert_string (ICONV_CONST char *f, size_t flen, + const char *from, const char *to, + char **t, size_t *tlen) +{ + iconv_t cd; + char *buf, *ob; + size_t obl, n; + int e; + + cd = mutt_iconv_open (to, from, 0); + if (cd == (iconv_t)(-1)) + return (size_t)(-1); + obl = 4 * flen + 1; + ob = buf = safe_malloc (obl); + n = iconv (cd, &f, &flen, &ob, &obl); + if (n == (size_t)(-1) || iconv (cd, 0, 0, &ob, &obl) == (size_t)(-1)) + { + e = errno; + FREE (&buf); + iconv_close (cd); + errno = e; + return (size_t)(-1); + } + *ob = '\0'; + + *tlen = ob - buf; + + safe_realloc (&buf, ob - buf + 1); + *t = buf; + iconv_close (cd); + + return n; +} + +char *mutt_choose_charset (const char *fromcode, const char *charsets, + char *u, size_t ulen, char **d, size_t *dlen) +{ + char canonical_buff[LONG_STRING]; + char *e = 0, *tocode = 0; + size_t elen = 0, bestn = 0; + const char *p, *q; + + for (p = charsets; p; p = q ? q + 1 : 0) + { + char *s, *t; + size_t slen, n; + + q = strchr (p, ':'); + + n = q ? q - p : strlen (p); + + if (!n || + /* Assume that we never need more than 12 characters of + encoded-text to encode a single character. */ + n > (ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 2 - 12)) + continue; + + t = safe_malloc (n + 1); + memcpy (t, p, n); + t[n] = '\0'; + + n = convert_string (u, ulen, fromcode, t, &s, &slen); + if (n == (size_t)(-1)) + continue; + + if (!tocode || n < bestn) + { + bestn = n; + FREE (&tocode); + tocode = t; + if (d) + { + FREE (&e); + e = s; + } + else + FREE (&s); + elen = slen; + if (!bestn) + break; + } + else + { + FREE (&t); + FREE (&s); + } + } + if (tocode) + { + if (d) + *d = e; + if (dlen) + *dlen = elen; + + mutt_canonical_charset (canonical_buff, sizeof (canonical_buff), tocode); + mutt_str_replace (&tocode, canonical_buff); + } + return tocode; +} + +static size_t b_encoder (char *s, ICONV_CONST char *d, size_t dlen, + const char *tocode) +{ + char *s0 = s; + + memcpy (s, "=?", 2), s += 2; + memcpy (s, tocode, strlen (tocode)), s += strlen (tocode); + memcpy (s, "?B?", 3), s += 3; + for (;;) + { + if (!dlen) + break; + else if (dlen == 1) + { + *s++ = B64Chars[(*d >> 2) & 0x3f]; + *s++ = B64Chars[(*d & 0x03) << 4]; + *s++ = '='; + *s++ = '='; + break; + } + else if (dlen == 2) + { + *s++ = B64Chars[(*d >> 2) & 0x3f]; + *s++ = B64Chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)]; + *s++ = B64Chars[(d[1] & 0x0f) << 2]; + *s++ = '='; + break; + } + else + { + *s++ = B64Chars[(*d >> 2) & 0x3f]; + *s++ = B64Chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)]; + *s++ = B64Chars[((d[1] & 0x0f) << 2) | ((d[2] >> 6) & 0x03)]; + *s++ = B64Chars[d[2] & 0x3f]; + d += 3, dlen -= 3; + } + } + memcpy (s, "?=", 2), s += 2; + return s - s0; +} + +static size_t q_encoder (char *s, ICONV_CONST char *d, size_t dlen, + const char *tocode) +{ + char hex[] = "0123456789ABCDEF"; + char *s0 = s; + + memcpy (s, "=?", 2), s += 2; + memcpy (s, tocode, strlen (tocode)), s += strlen (tocode); + memcpy (s, "?Q?", 3), s += 3; + while (dlen--) + { + unsigned char c = *d++; + if (c == ' ') + *s++ = '_'; + else if (c >= 0x7f || c < 0x20 || c == '_' || strchr (MimeSpecials, c)) + { + *s++ = '='; + *s++ = hex[(c & 0xf0) >> 4]; + *s++ = hex[c & 0x0f]; + } + else + *s++ = c; + } + memcpy (s, "?=", 2), s += 2; + return s - s0; +} + +/* + * Return 0 if and set *encoder and *wlen if the data (d, dlen) could + * be converted to an encoded word of length *wlen using *encoder. + * Otherwise return an upper bound on the maximum length of the data + * which could be converted. + * The data is converted from fromcode (which must be stateless) to + * tocode, unless fromcode is 0, in which case the data is assumed to + * be already in tocode, which should be 8-bit and stateless. + */ +static size_t try_block (ICONV_CONST char *d, size_t dlen, + const char *fromcode, const char *tocode, + encoder_t *encoder, size_t *wlen) +{ + char buf1[ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 1]; + iconv_t cd; + ICONV_CONST char *ib; + char *ob, *p; + size_t ibl, obl; + int count, len, len_b, len_q; + + if (fromcode) + { + cd = mutt_iconv_open (tocode, fromcode, 0); + assert (cd != (iconv_t)(-1)); + ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - strlen (tocode); + if (iconv (cd, &ib, &ibl, &ob, &obl) == (size_t)(-1) || + iconv (cd, 0, 0, &ob, &obl) == (size_t)(-1)) + { + assert (errno == E2BIG); + iconv_close (cd); + assert (ib > d); + return (ib - d == dlen) ? dlen : ib - d + 1; + } + iconv_close (cd); + } + else + { + if (dlen > sizeof (buf1) - strlen (tocode)) + return sizeof (buf1) - strlen (tocode) + 1; + memcpy (buf1, d, dlen); + ob = buf1 + dlen; + } + + count = 0; + for (p = buf1; p < ob; p++) + { + unsigned char c = *p; + assert (strchr (MimeSpecials, '?')); + if (c >= 0x7f || c < 0x20 || *p == '_' || + (c != ' ' && strchr (MimeSpecials, *p))) + ++count; + } + + len = ENCWORD_LEN_MIN - 2 + strlen (tocode); + len_b = len + (((ob - buf1) + 2) / 3) * 4; + len_q = len + (ob - buf1) + 2 * count; + + /* Apparently RFC 1468 says to use B encoding for iso-2022-jp. */ + if (!ascii_strcasecmp (tocode, "ISO-2022-JP")) + len_q = ENCWORD_LEN_MAX + 1; + + if (len_b < len_q && len_b <= ENCWORD_LEN_MAX) + { + *encoder = b_encoder; + *wlen = len_b; + return 0; + } + else if (len_q <= ENCWORD_LEN_MAX) + { + *encoder = q_encoder; + *wlen = len_q; + return 0; + } + else + return dlen; +} + +/* + * Encode the data (d, dlen) into s using the encoder. + * Return the length of the encoded word. + */ +static size_t encode_block (char *s, char *d, size_t dlen, + const char *fromcode, const char *tocode, + encoder_t encoder) +{ + char buf1[ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 1]; + iconv_t cd; + ICONV_CONST char *ib; + char *ob; + size_t ibl, obl, n1, n2; + + if (fromcode) + { + cd = mutt_iconv_open (tocode, fromcode, 0); + assert (cd != (iconv_t)(-1)); + ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - strlen (tocode); + n1 = iconv (cd, &ib, &ibl, &ob, &obl); + n2 = iconv (cd, 0, 0, &ob, &obl); + assert (n1 != (size_t)(-1) && n2 != (size_t)(-1)); + iconv_close (cd); + return (*encoder) (s, buf1, ob - buf1, tocode); + } + else + return (*encoder) (s, d, dlen, tocode); +} + +/* + * Discover how much of the data (d, dlen) can be converted into + * a single encoded word. Return how much data can be converted, + * and set the length *wlen of the encoded word and *encoder. + * We start in column col, which limits the length of the word. + */ +static size_t choose_block (char *d, size_t dlen, int col, + const char *fromcode, const char *tocode, + encoder_t *encoder, size_t *wlen) +{ + size_t n, nn; + int utf8 = fromcode && !ascii_strcasecmp (fromcode, "UTF-8"); + + n = dlen; + for (;;) + { + assert (d + n > d); + nn = try_block (d, n, fromcode, tocode, encoder, wlen); + if (!nn && (col + *wlen <= ENCWORD_LEN_MAX + 1 || n <= 1)) + break; + n = (nn ? nn : n) - 1; + assert (n > 0); + if (utf8) + while (n > 1 && CONTINUATION_BYTE(d[n])) + --n; + } + return n; +} + +/* + * Place the result of RFC-2047-encoding (d, dlen) into the dynamically + * allocated buffer (e, elen). The input data is in charset fromcode + * and is converted into a charset chosen from charsets. + * Return 1 if the conversion to UTF-8 failed, 2 if conversion from UTF-8 + * failed, otherwise 0. If conversion failed, fromcode is assumed to be + * compatible with us-ascii and the original data is used. + * The input data is assumed to be a single line starting at column col; + * if col is non-zero, the preceding character was a space. + */ +static int rfc2047_encode (ICONV_CONST char *d, size_t dlen, int col, + const char *fromcode, const char *charsets, + char **e, size_t *elen, char *specials) +{ + int ret = 0; + char *buf; + size_t bufpos, buflen; + char *u, *t0, *t1, *t; + char *s0, *s1; + size_t ulen, r, n, wlen; + encoder_t encoder; + char *tocode1 = 0; + const char *tocode; + char *icode = "UTF-8"; + + /* Try to convert to UTF-8. */ + if (convert_string (d, dlen, fromcode, icode, &u, &ulen)) + { + ret = 1; + icode = 0; + u = safe_malloc ((ulen = dlen) + 1); + memcpy (u, d, dlen); + u[ulen] = 0; + } + + /* Find earliest and latest things we must encode. */ + s0 = s1 = t0 = t1 = 0; + for (t = u; t < u + ulen; t++) + { + if ((*t & 0x80) || + (*t == '=' && t[1] == '?' && (t == u || HSPACE(*(t-1))))) + { + if (!t0) t0 = t; + t1 = t; + } + else if (specials && strchr (specials, *t)) + { + if (!s0) s0 = t; + s1 = t; + } + } + + /* If we have something to encode, include RFC822 specials */ + if (t0 && s0 && s0 < t0) + t0 = s0; + if (t1 && s1 && s1 > t1) + t1 = s1; + + if (!t0) + { + /* No encoding is required. */ + *e = u; + *elen = ulen; + return ret; + } + + /* Choose target charset. */ + tocode = fromcode; + if (icode) + { + if ((tocode1 = mutt_choose_charset (icode, charsets, u, ulen, 0, 0))) + tocode = tocode1; + else + ret = 2, icode = 0; + } + + /* Hack to avoid labelling 8-bit data as us-ascii. */ + if (!icode && mutt_is_us_ascii (tocode)) + tocode = "unknown-8bit"; + + /* Adjust t0 for maximum length of line. */ + t = u + (ENCWORD_LEN_MAX + 1) - col - ENCWORD_LEN_MIN; + if (t < u) t = u; + if (t < t0) t0 = t; + + + /* Adjust t0 until we can encode a character after a space. */ + for (; t0 > u; t0--) + { + if (!HSPACE(*(t0-1))) + continue; + t = t0 + 1; + if (icode) + while (t < u + ulen && CONTINUATION_BYTE(*t)) + ++t; + if (!try_block (t0, t - t0, icode, tocode, &encoder, &wlen) && + col + (t0 - u) + wlen <= ENCWORD_LEN_MAX + 1) + break; + } + + /* Adjust t1 until we can encode a character before a space. */ + for (; t1 < u + ulen; t1++) + { + if (!HSPACE(*t1)) + continue; + t = t1 - 1; + if (icode) + while (CONTINUATION_BYTE(*t)) + --t; + if (!try_block (t, t1 - t, icode, tocode, &encoder, &wlen) && + 1 + wlen + (u + ulen - t1) <= ENCWORD_LEN_MAX + 1) + break; + } + + /* We shall encode the region [t0,t1). */ + + /* Initialise the output buffer with the us-ascii prefix. */ + buflen = 2 * ulen; + buf = safe_malloc (buflen); + bufpos = t0 - u; + memcpy (buf, u, t0 - u); + + col += t0 - u; + + t = t0; + for (;;) + { + /* Find how much we can encode. */ + n = choose_block (t, t1 - t, col, icode, tocode, &encoder, &wlen); + if (n == t1 - t) + { + /* See if we can fit the us-ascii suffix, too. */ + if (col + wlen + (u + ulen - t1) <= ENCWORD_LEN_MAX + 1) + break; + n = t1 - t - 1; + if (icode) + while (CONTINUATION_BYTE(t[n])) + --n; + assert (t + n >= t); + if (!n) + { + /* This should only happen in the really stupid case where the + only word that needs encoding is one character long, but + there is too much us-ascii stuff after it to use a single + encoded word. We add the next word to the encoded region + and try again. */ + assert (t1 < u + ulen); + for (t1++; t1 < u + ulen && !HSPACE(*t1); t1++) + ; + continue; + } + n = choose_block (t, n, col, icode, tocode, &encoder, &wlen); + } + + /* Add to output buffer. */ +#define LINEBREAK "\n\t" + if (bufpos + wlen + strlen (LINEBREAK) > buflen) + { + buflen = bufpos + wlen + strlen (LINEBREAK); + safe_realloc (&buf, buflen); + } + r = encode_block (buf + bufpos, t, n, icode, tocode, encoder); + assert (r == wlen); + bufpos += wlen; + memcpy (buf + bufpos, LINEBREAK, strlen (LINEBREAK)); + bufpos += strlen (LINEBREAK); +#undef LINEBREAK + + col = 1; + + t += n; + } + + /* Add last encoded word and us-ascii suffix to buffer. */ + buflen = bufpos + wlen + (u + ulen - t1); + safe_realloc (&buf, buflen + 1); + r = encode_block (buf + bufpos, t, t1 - t, icode, tocode, encoder); + assert (r == wlen); + bufpos += wlen; + memcpy (buf + bufpos, t1, u + ulen - t1); + + FREE (&tocode1); + FREE (&u); + + buf[buflen] = '\0'; + + *e = buf; + *elen = buflen + 1; + return ret; +} + +void _rfc2047_encode_string (char **pd, int encode_specials, int col) +{ + char *e; + size_t elen; + char *charsets; + + if (!Charset || !*pd) + return; + + charsets = SendCharset; + if (!charsets || !*charsets) + charsets = "UTF-8"; + + rfc2047_encode (*pd, strlen (*pd), col, + Charset, charsets, &e, &elen, + encode_specials ? RFC822Specials : NULL); + + FREE (pd); + *pd = e; +} + +void rfc2047_encode_adrlist (ADDRESS *addr, const char *tag) +{ + ADDRESS *ptr = addr; + int col = tag ? strlen (tag) + 2 : 32; + + while (ptr) + { + if (ptr->personal) + _rfc2047_encode_string (&ptr->personal, 1, col); +#ifdef EXACT_ADDRESS + if (ptr->val) + _rfc2047_encode_string (&ptr->val, 1, col); +#endif + ptr = ptr->next; + } +} + +static int rfc2047_decode_word (char *d, const char *s, size_t len) +{ + const char *pp, *pp1; + char *pd, *d0; + const char *t, *t1; + int enc = 0, count = 0; + char *charset = NULL; + + pd = d0 = safe_malloc (strlen (s)); + + for (pp = s; (pp1 = strchr (pp, '?')); pp = pp1 + 1) + { + count++; + switch (count) + { + case 2: + /* ignore language specification a la RFC 2231 */ + t = pp1; + if ((t1 = memchr (pp, '*', t - pp))) + t = t1; + charset = safe_malloc (t - pp + 1); + memcpy (charset, pp, t - pp); + charset[t-pp] = '\0'; + break; + case 3: + if (toupper ((unsigned char) *pp) == 'Q') + enc = ENCQUOTEDPRINTABLE; + else if (toupper ((unsigned char) *pp) == 'B') + enc = ENCBASE64; + else + { + FREE (&charset); + FREE (&d0); + return (-1); + } + break; + case 4: + if (enc == ENCQUOTEDPRINTABLE) + { + for (; pp < pp1; pp++) + { + if (*pp == '_') + *pd++ = ' '; + else if (*pp == '=' && + (!(pp[1] & ~127) && hexval(pp[1]) != -1) && + (!(pp[2] & ~127) && hexval(pp[2]) != -1)) + { + *pd++ = (hexval(pp[1]) << 4) | hexval(pp[2]); + pp += 2; + } + else + *pd++ = *pp; + } + *pd = 0; + } + else if (enc == ENCBASE64) + { + int c, b = 0, k = 0; + + for (; pp < pp1; pp++) + { + if (*pp == '=') + break; + if ((*pp & ~127) || (c = base64val(*pp)) == -1) + continue; + if (k + 6 >= 8) + { + k -= 2; + *pd++ = b | (c >> k); + b = c << (8 - k); + } + else + { + b |= c << (k + 2); + k += 6; + } + } + *pd = 0; + } + break; + } + } + + if (charset) + mutt_convert_string (&d0, charset, Charset, M_ICONV_HOOK_FROM); + strfcpy (d, d0, len); + FREE (&charset); + FREE (&d0); + return (0); +} + +/* + * Find the start and end of the first encoded word in the string. + * We use the grammar in section 2 of RFC 2047, but the "encoding" + * must be B or Q. Also, we don't require the encoded word to be + * separated by linear-white-space (section 5(1)). + */ +static const char *find_encoded_word (const char *s, const char **x) +{ + const char *p, *q; + + q = s; + while ((p = strstr (q, "=?"))) + { + for (q = p + 2; + 0x20 < *q && *q < 0x7f && !strchr ("()<>@,;:\"/[]?.=", *q); + q++) + ; + if (q[0] != '?' || !strchr ("BbQq", q[1]) || q[2] != '?') + continue; + for (q = q + 3; 0x20 <= *q && *q < 0x7f && *q != '?'; q++) + ; + if (q[0] != '?' || q[1] != '=') + { + --q; + continue; + } + + *x = q + 2; + return p; + } + + return 0; +} + +/* try to decode anything that looks like a valid RFC2047 encoded + * header field, ignoring RFC822 parsing rules + */ +void rfc2047_decode (char **pd) +{ + const char *p, *q; + size_t n; + int found_encoded = 0; + char *d0, *d; + const char *s = *pd; + size_t dlen; + + if (!s || !*s) + return; + + dlen = 4 * strlen (s); /* should be enough */ + d = d0 = safe_malloc (dlen + 1); + + while (*s && dlen > 0) + { + if (!(p = find_encoded_word (s, &q))) + { + /* no encoded words */ + strncpy (d, s, dlen); + d += dlen; + break; + } + + if (p != s) + { + n = (size_t) (p - s); + /* ignore spaces between encoded words */ + if (!found_encoded || strspn (s, " \t\r\n") != n) + { + if (n > dlen) + n = dlen; + memcpy (d, s, n); + d += n; + dlen -= n; + } + } + + rfc2047_decode_word (d, p, dlen); + found_encoded = 1; + s = q; + n = mutt_strlen (d); + dlen -= n; + d += n; + } + *d = 0; + + FREE (pd); + *pd = d0; + mutt_str_adjust (pd); +} + +void rfc2047_decode_adrlist (ADDRESS *a) +{ + while (a) + { + if (a->personal && strstr (a->personal, "=?") != NULL) { + rfc2047_decode (&a->personal); + } +#ifdef EXACT_ADDRESS + if (a->val && strstr (a->val, "=?") != NULL) + rfc2047_decode (&a->val); +#endif + a = a->next; + } +} diff --git a/rfc2047.h b/rfc2047.h new file mode 100644 index 0000000..f6e0bbf --- /dev/null +++ b/rfc2047.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +char *mutt_choose_charset (const char *fromcode, const char *charsets, + char *u, size_t ulen, char **d, size_t *dlen); + +void _rfc2047_encode_string (char **, int, int); +void rfc2047_encode_adrlist (ADDRESS *, const char *); + +#define rfc2047_encode_string(a) _rfc2047_encode_string (a, 0, 32); + +void rfc2047_decode (char **); +void rfc2047_decode_adrlist (ADDRESS *); diff --git a/rfc2231.c b/rfc2231.c new file mode 100644 index 0000000..3f45650 --- /dev/null +++ b/rfc2231.c @@ -0,0 +1,376 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +/* + * Yet another MIME encoding for header data. This time, it's + * parameters, specified in RFC 2231, and modeled after the + * encoding used in URLs. + * + * Additionally, continuations and encoding are mixed in an, errrm, + * interesting manner. + * + */ + +#include "mutt.h" +#include "mime.h" +#include "charset.h" +#include "rfc2047.h" +#include "rfc2231.h" + +#include <ctype.h> +#include <string.h> +#include <stdlib.h> + +struct rfc2231_parameter +{ + char *attribute; + char *value; + int index; + int encoded; + struct rfc2231_parameter + *next; +}; + +static char *rfc2231_get_charset (char *, char *, size_t); +static struct rfc2231_parameter *rfc2231_new_parameter (void); +static void rfc2231_decode_one (char *, char *); +static void rfc2231_free_parameter (struct rfc2231_parameter **); +static void rfc2231_join_continuations (PARAMETER **, struct rfc2231_parameter *); +static void rfc2231_list_insert (struct rfc2231_parameter **, struct rfc2231_parameter *); + +static void purge_empty_parameters (PARAMETER **headp) +{ + PARAMETER *p, *q, **last; + + for (last = headp, p = *headp; p; p = q) + { + q = p->next; + if (!p->attribute || !p->value) + { + *last = q; + p->next = NULL; + mutt_free_parameter (&p); + } + else + last = &p->next; + } +} + + +void rfc2231_decode_parameters (PARAMETER **headp) +{ + PARAMETER *head = NULL; + PARAMETER **last; + PARAMETER *p, *q; + + struct rfc2231_parameter *conthead = NULL; + struct rfc2231_parameter *conttmp; + + char *s, *t; + char charset[STRING]; + + int encoded; + int index; + short dirty = 0; /* set to 1 when we may have created + * empty parameters. + */ + + if (!headp) return; + + purge_empty_parameters (headp); + + for (last = &head, p = *headp; p; p = q) + { + q = p->next; + + if (!(s = strchr (p->attribute, '*'))) + { + + /* + * Using RFC 2047 encoding in MIME parameters is explicitly + * forbidden by that document. Nevertheless, it's being + * generated by some software, including certain Lotus Notes to + * Internet Gateways. So we actually decode it. + */ + + if (option (OPTRFC2047PARAMS) && p->value && strstr (p->value, "=?")) + rfc2047_decode (&p->value); + + *last = p; + last = &p->next; + p->next = NULL; + } + else if (*(s + 1) == '\0') + { + *s = '\0'; + + s = rfc2231_get_charset (p->value, charset, sizeof (charset)); + rfc2231_decode_one (p->value, s); + mutt_convert_string (&p->value, charset, Charset, M_ICONV_HOOK_FROM); + + *last = p; + last = &p->next; + p->next = NULL; + + dirty = 1; + } + else + { + *s = '\0'; s++; /* let s point to the first character of index. */ + for (t = s; *t && isdigit ((unsigned char) *t); t++) + ; + encoded = (*t == '*'); + *t = '\0'; + + index = atoi (s); + + conttmp = rfc2231_new_parameter (); + conttmp->attribute = p->attribute; + conttmp->value = p->value; + conttmp->encoded = encoded; + conttmp->index = index; + + p->attribute = NULL; + p->value = NULL; + FREE (&p); + + rfc2231_list_insert (&conthead, conttmp); + } + } + + if (conthead) + { + rfc2231_join_continuations (last, conthead); + dirty = 1; + } + + *headp = head; + + if (dirty) + purge_empty_parameters (headp); +} + +static struct rfc2231_parameter *rfc2231_new_parameter (void) +{ + return safe_calloc (sizeof (struct rfc2231_parameter), 1); +} + +static void rfc2231_free_parameter (struct rfc2231_parameter **p) +{ + if (*p) + { + FREE (&(*p)->attribute); + FREE (&(*p)->value); + FREE (p); + } +} + +static char *rfc2231_get_charset (char *value, char *charset, size_t chslen) +{ + char *t, *u; + + if (!(t = strchr (value, '\''))) + { + charset[0] = '\0'; + return value; + } + + *t = '\0'; + strfcpy (charset, value, chslen); + + if ((u = strchr (t + 1, '\''))) + return u + 1; + else + return t + 1; +} + +static void rfc2231_decode_one (char *dest, char *src) +{ + char *d; + + for (d = dest; *src; src++) + { + if (*src == '%' && + isxdigit ((unsigned char) *(src + 1)) && + isxdigit ((unsigned char) *(src + 2))) + { + *d++ = (hexval (*(src + 1)) << 4) | (hexval (*(src + 2))); + src += 2; + } + else + *d++ = *src; + } + + *d = '\0'; +} + +/* insert parameter into an ordered list. + * + * Primary sorting key: attribute + * Secondary sorting key: index + */ + +static void rfc2231_list_insert (struct rfc2231_parameter **list, + struct rfc2231_parameter *par) +{ + struct rfc2231_parameter **last = list; + struct rfc2231_parameter *p = *list, *q; + int c; + + while (p) + { + last = &p->next; + q = p; p = p->next; + + c = strcmp (par->value, q->value); + if ((c > 0) || (c == 0 && par->index >= q->index)) + break; + } + + par->next = p; + *last = par; +} + +/* process continuation parameters */ + +static void rfc2231_join_continuations (PARAMETER **head, + struct rfc2231_parameter *par) +{ + struct rfc2231_parameter *q; + + char attribute[STRING]; + char charset[STRING]; + char *value = NULL; + char *valp; + int encoded; + + size_t l, vl; + + while (par) + { + value = NULL; l = 0; + + strfcpy (attribute, par->attribute, sizeof (attribute)); + + if ((encoded = par->encoded)) + valp = rfc2231_get_charset (par->value, charset, sizeof (charset)); + else + valp = par->value; + + do + { + if (encoded && par->encoded) + rfc2231_decode_one (par->value, valp); + + vl = strlen (par->value); + + safe_realloc (&value, l + vl + 1); + strcpy (value + l, par->value); /* __STRCPY_CHECKED__ */ + l += vl; + + q = par->next; + rfc2231_free_parameter (&par); + if ((par = q)) + valp = par->value; + } while (par && !strcmp (par->attribute, attribute)); + + if (value) + { + if (encoded) + mutt_convert_string (&value, charset, Charset, M_ICONV_HOOK_FROM); + *head = mutt_new_parameter (); + (*head)->attribute = safe_strdup (attribute); + (*head)->value = value; + head = &(*head)->next; + } + } +} + +int rfc2231_encode_string (char **pd) +{ + int ext = 0, encode = 0; + char *charset, *s, *t, *e, *d = 0; + size_t slen, dlen = 0; + + /* + * A shortcut to detect pure 7bit data. + * + * This should prevent the worst when character set handling + * is flawed. + */ + + for (s = *pd; *s; s++) + if (*s & 0x80) + break; + + if (!*s) + return 0; + + if (!Charset || !SendCharset || + !(charset = mutt_choose_charset (Charset, SendCharset, + *pd, strlen (*pd), &d, &dlen))) + { + charset = safe_strdup (Charset ? Charset : "unknown-8bit"); + d = *pd; + dlen = strlen (d); + } + + if (!mutt_is_us_ascii (charset)) + encode = 1; + + for (s = d, slen = dlen; slen; s++, slen--) + if (*s < 0x20 || *s >= 0x7f) + encode = 1, ++ext; + else if (strchr (MimeSpecials, *s) || strchr ("*'%", *s)) + ++ext; + + if (encode) + { + e = safe_malloc (dlen + 2*ext + strlen (charset) + 3); + sprintf (e, "%s''", charset); /* __SPRINTF_CHECKED__ */ + t = e + strlen (e); + for (s = d, slen = dlen; slen; s++, slen--) + if (*s < 0x20 || *s >= 0x7f || + strchr (MimeSpecials, *s) || strchr ("*'%", *s)) + { + sprintf (t, "%%%02X", (unsigned char)*s); + t += 3; + } + else + *t++ = *s; + *t = '\0'; + + if (d != *pd) + FREE (&d); + FREE (pd); + *pd = e; + } + else if (d != *pd) + { + FREE (pd); + *pd = d; + } + + FREE (&charset); + + return encode; +} + diff --git a/rfc2231.h b/rfc2231.h new file mode 100644 index 0000000..ccf01cc --- /dev/null +++ b/rfc2231.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111, USA. + */ + +void rfc2231_decode_parameters (PARAMETER **); +int rfc2231_encode_string (char **); + diff --git a/rfc822.c b/rfc822.c new file mode 100644 index 0000000..2732f52 --- /dev/null +++ b/rfc822.c @@ -0,0 +1,814 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include <string.h> +#include <ctype.h> +#include <stdlib.h> + +#ifndef TESTING +#include "mutt.h" +#else +#define safe_strdup strdup +#define safe_malloc malloc +#define SKIPWS(x) while(isspace(*x))x++ +#define FREE(x) safe_free(x) +#define ISSPACE isspace +#define strfcpy(a,b,c) {if (c) {strncpy(a,b,c);a[c-1]=0;}} +#define STRING 128 +#include "rfc822.h" +#endif + +#include "mutt_idna.h" + +#define terminate_string(a, b, c) do { if ((b) < (c)) a[(b)] = 0; else \ + a[(c)] = 0; } while (0) + +#define terminate_buffer(a, b) terminate_string(a, b, sizeof (a) - 1) + + +const char RFC822Specials[] = "@.,:;<>[]\\\"()"; +#define is_special(x) strchr(RFC822Specials,x) + +int RFC822Error = 0; + +/* these must defined in the same order as the numerated errors given in rfc822.h */ +const char *RFC822Errors[] = { + "out of memory", + "mismatched parenthesis", + "mismatched quotes", + "bad route in <>", + "bad address in <>", + "bad address spec" +}; + +void rfc822_dequote_comment (char *s) +{ + char *w = s; + + for (; *s; s++) + { + if (*s == '\\') + { + if (!*++s) + break; /* error? */ + *w++ = *s; + } + else if (*s != '\"') + { + if (w != s) + *w = *s; + w++; + } + } + *w = 0; +} + +void rfc822_free_address (ADDRESS **p) +{ + ADDRESS *t; + + while (*p) + { + t = *p; + *p = (*p)->next; +#ifdef EXACT_ADDRESS + FREE (&t->val); +#endif + FREE (&t->personal); + FREE (&t->mailbox); + FREE (&t); + } +} + +static const char * +parse_comment (const char *s, + char *comment, size_t *commentlen, size_t commentmax) +{ + int level = 1; + + while (*s && level) + { + if (*s == '(') + level++; + else if (*s == ')') + { + if (--level == 0) + { + s++; + break; + } + } + else if (*s == '\\') + { + if (!*++s) + break; + } + if (*commentlen < commentmax) + comment[(*commentlen)++] = *s; + s++; + } + if (level) + { + RFC822Error = ERR_MISMATCH_PAREN; + return NULL; + } + return s; +} + +static const char * +parse_quote (const char *s, char *token, size_t *tokenlen, size_t tokenmax) +{ + if (*tokenlen < tokenmax) + token[(*tokenlen)++] = '"'; + while (*s) + { + if (*tokenlen < tokenmax) + token[*tokenlen] = *s; + if (*s == '"') + { + (*tokenlen)++; + return (s + 1); + } + if (*s == '\\') + { + if (!*++s) + break; + + if (*tokenlen < tokenmax) + token[*tokenlen] = *s; + } + (*tokenlen)++; + s++; + } + RFC822Error = ERR_MISMATCH_QUOTE; + return NULL; +} + +static const char * +next_token (const char *s, char *token, size_t *tokenlen, size_t tokenmax) +{ + if (*s == '(') + return (parse_comment (s + 1, token, tokenlen, tokenmax)); + if (*s == '"') + return (parse_quote (s + 1, token, tokenlen, tokenmax)); + if (is_special (*s)) + { + if (*tokenlen < tokenmax) + token[(*tokenlen)++] = *s; + return (s + 1); + } + while (*s) + { + if (ISSPACE ((unsigned char) *s) || is_special (*s)) + break; + if (*tokenlen < tokenmax) + token[(*tokenlen)++] = *s; + s++; + } + return s; +} + +static const char * +parse_mailboxdomain (const char *s, const char *nonspecial, + char *mailbox, size_t *mailboxlen, size_t mailboxmax, + char *comment, size_t *commentlen, size_t commentmax) +{ + const char *ps; + + while (*s) + { + SKIPWS (s); + if (strchr (nonspecial, *s) == NULL && is_special (*s)) + return s; + + if (*s == '(') + { + if (*commentlen && *commentlen < commentmax) + comment[(*commentlen)++] = ' '; + ps = next_token (s, comment, commentlen, commentmax); + } + else + ps = next_token (s, mailbox, mailboxlen, mailboxmax); + if (!ps) + return NULL; + s = ps; + } + + return s; +} + +static const char * +parse_address (const char *s, + char *token, size_t *tokenlen, size_t tokenmax, + char *comment, size_t *commentlen, size_t commentmax, + ADDRESS *addr) +{ + s = parse_mailboxdomain (s, ".\"(\\", + token, tokenlen, tokenmax, + comment, commentlen, commentmax); + if (!s) + return NULL; + + if (*s == '@') + { + if (*tokenlen < tokenmax) + token[(*tokenlen)++] = '@'; + s = parse_mailboxdomain (s + 1, ".([]\\", + token, tokenlen, tokenmax, + comment, commentlen, commentmax); + if (!s) + return NULL; + } + + terminate_string (token, *tokenlen, tokenmax); + addr->mailbox = safe_strdup (token); + + if (*commentlen && !addr->personal) + { + terminate_string (comment, *commentlen, commentmax); + addr->personal = safe_strdup (comment); + } + + return s; +} + +static const char * +parse_route_addr (const char *s, + char *comment, size_t *commentlen, size_t commentmax, + ADDRESS *addr) +{ + char token[STRING]; + size_t tokenlen = 0; + + SKIPWS (s); + + /* find the end of the route */ + if (*s == '@') + { + while (s && *s == '@') + { + if (tokenlen < sizeof (token) - 1) + token[tokenlen++] = '@'; + s = parse_mailboxdomain (s + 1, ",.\\[](", token, + &tokenlen, sizeof (token) - 1, + comment, commentlen, commentmax); + } + if (!s || *s != ':') + { + RFC822Error = ERR_BAD_ROUTE; + return NULL; /* invalid route */ + } + + if (tokenlen < sizeof (token) - 1) + token[tokenlen++] = ':'; + s++; + } + + if ((s = parse_address (s, token, &tokenlen, sizeof (token) - 1, comment, commentlen, commentmax, addr)) == NULL) + return NULL; + + if (*s != '>') + { + RFC822Error = ERR_BAD_ROUTE_ADDR; + return NULL; + } + + if (!addr->mailbox) + addr->mailbox = safe_strdup ("@"); + + s++; + return s; +} + +static const char * +parse_addr_spec (const char *s, + char *comment, size_t *commentlen, size_t commentmax, + ADDRESS *addr) +{ + char token[STRING]; + size_t tokenlen = 0; + + s = parse_address (s, token, &tokenlen, sizeof (token) - 1, comment, commentlen, commentmax, addr); + if (s && *s && *s != ',' && *s != ';') + { + RFC822Error = ERR_BAD_ADDR_SPEC; + return NULL; + } + return s; +} + +static void +add_addrspec (ADDRESS **top, ADDRESS **last, const char *phrase, + char *comment, size_t *commentlen, size_t commentmax) +{ + ADDRESS *cur = rfc822_new_address (); + + if (parse_addr_spec (phrase, comment, commentlen, commentmax, cur) == NULL) + { + rfc822_free_address (&cur); + return; + } + + if (*last) + (*last)->next = cur; + else + *top = cur; + *last = cur; +} + +ADDRESS *rfc822_parse_adrlist (ADDRESS *top, const char *s) +{ + int ws_pending; + const char *begin, *ps; + char comment[STRING], phrase[STRING]; + size_t phraselen = 0, commentlen = 0; + ADDRESS *cur, *last = NULL; + + RFC822Error = 0; + + last = top; + while (last && last->next) + last = last->next; + + ws_pending = isspace ((unsigned char) *s); + + SKIPWS (s); + begin = s; + while (*s) + { + if (*s == ',') + { + if (phraselen) + { + terminate_buffer (phrase, phraselen); + add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1); + } + else if (commentlen && last && !last->personal) + { + terminate_buffer (comment, commentlen); + last->personal = safe_strdup (comment); + } + +#ifdef EXACT_ADDRESS + if (last && !last->val) + last->val = mutt_substrdup (begin, s); +#endif + commentlen = 0; + phraselen = 0; + s++; + begin = s; + SKIPWS (begin); + } + else if (*s == '(') + { + if (commentlen && commentlen < sizeof (comment) - 1) + comment[commentlen++] = ' '; + if ((ps = next_token (s, comment, &commentlen, sizeof (comment) - 1)) == NULL) + { + rfc822_free_address (&top); + return NULL; + } + s = ps; + } + else if (*s == ':') + { + cur = rfc822_new_address (); + terminate_buffer (phrase, phraselen); + cur->mailbox = safe_strdup (phrase); + cur->group = 1; + + if (last) + last->next = cur; + else + top = cur; + last = cur; + +#ifdef EXACT_ADDRESS + last->val = mutt_substrdup (begin, s); +#endif + + phraselen = 0; + commentlen = 0; + s++; + begin = s; + SKIPWS (begin); + } + else if (*s == ';') + { + if (phraselen) + { + terminate_buffer (phrase, phraselen); + add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1); + } + else if (commentlen && last && !last->personal) + { + terminate_buffer (comment, commentlen); + last->personal = safe_strdup (comment); + } +#ifdef EXACT_ADDRESS + if (last && !last->val) + last->val = mutt_substrdup (begin, s); +#endif + + /* add group terminator */ + cur = rfc822_new_address (); + if (last) + { + last->next = cur; + last = cur; + } + + phraselen = 0; + commentlen = 0; + s++; + begin = s; + SKIPWS (begin); + } + else if (*s == '<') + { + terminate_buffer (phrase, phraselen); + cur = rfc822_new_address (); + if (phraselen) + { + if (cur->personal) + FREE (&cur->personal); + /* if we get something like "Michael R. Elkins" remove the quotes */ + rfc822_dequote_comment (phrase); + cur->personal = safe_strdup (phrase); + } + if ((ps = parse_route_addr (s + 1, comment, &commentlen, sizeof (comment) - 1, cur)) == NULL) + { + rfc822_free_address (&top); + rfc822_free_address (&cur); + return NULL; + } + + if (last) + last->next = cur; + else + top = cur; + last = cur; + + phraselen = 0; + commentlen = 0; + s = ps; + } + else + { + if (phraselen && phraselen < sizeof (phrase) - 1 && ws_pending) + phrase[phraselen++] = ' '; + if ((ps = next_token (s, phrase, &phraselen, sizeof (phrase) - 1)) == NULL) + { + rfc822_free_address (&top); + return NULL; + } + s = ps; + } + ws_pending = isspace ((unsigned char) *s); + SKIPWS (s); + } + + if (phraselen) + { + terminate_buffer (phrase, phraselen); + terminate_buffer (comment, commentlen); + add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1); + } + else if (commentlen && last && !last->personal) + { + terminate_buffer (comment, commentlen); + last->personal = safe_strdup (comment); + } +#ifdef EXACT_ADDRESS + if (last) + last->val = mutt_substrdup (begin, s); +#endif + + return top; +} + +void rfc822_qualify (ADDRESS *addr, const char *host) +{ + char *p; + + for (; addr; addr = addr->next) + if (!addr->group && addr->mailbox && strchr (addr->mailbox, '@') == NULL) + { + p = safe_malloc (mutt_strlen (addr->mailbox) + mutt_strlen (host) + 2); + sprintf (p, "%s@%s", addr->mailbox, host); /* __SPRINTF_CHECKED__ */ + FREE (&addr->mailbox); + addr->mailbox = p; + } +} + +void +rfc822_cat (char *buf, size_t buflen, const char *value, const char *specials) +{ + if (strpbrk (value, specials)) + { + char tmp[256], *pc = tmp; + size_t tmplen = sizeof (tmp) - 3; + + *pc++ = '"'; + for (; *value && tmplen > 1; value++) + { + if (*value == '\\' || *value == '"') + { + *pc++ = '\\'; + tmplen--; + } + *pc++ = *value; + tmplen--; + } + *pc++ = '"'; + *pc = 0; + strfcpy (buf, tmp, buflen); + } + else + strfcpy (buf, value, buflen); +} + +void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS *addr, + int display) +{ + size_t len; + char *pbuf = buf; + char *pc; + + if (!addr) + return; + + buflen--; /* save room for the terminal nul */ + +#ifdef EXACT_ADDRESS + if (addr->val) + { + if (!buflen) + goto done; + strfcpy (pbuf, addr->val, buflen); + len = mutt_strlen (pbuf); + pbuf += len; + buflen -= len; + if (addr->group) + { + if (!buflen) + goto done; + *pbuf++ = ':'; + buflen--; + *pbuf = 0; + } + return; + } +#endif + + if (addr->personal) + { + if (strpbrk (addr->personal, RFC822Specials)) + { + if (!buflen) + goto done; + *pbuf++ = '"'; + buflen--; + for (pc = addr->personal; *pc && buflen > 0; pc++) + { + if (*pc == '"' || *pc == '\\') + { + if (!buflen) + goto done; + *pbuf++ = '\\'; + buflen--; + } + if (!buflen) + goto done; + *pbuf++ = *pc; + buflen--; + } + if (!buflen) + goto done; + *pbuf++ = '"'; + buflen--; + } + else + { + if (!buflen) + goto done; + strfcpy (pbuf, addr->personal, buflen); + len = mutt_strlen (pbuf); + pbuf += len; + buflen -= len; + } + + if (!buflen) + goto done; + *pbuf++ = ' '; + buflen--; + } + + if (addr->personal || (addr->mailbox && *addr->mailbox == '@')) + { + if (!buflen) + goto done; + *pbuf++ = '<'; + buflen--; + } + + if (addr->mailbox) + { + if (!buflen) + goto done; + if (ascii_strcmp (addr->mailbox, "@") && !display) + { + strfcpy (pbuf, addr->mailbox, buflen); + len = mutt_strlen (pbuf); + } + else if (ascii_strcmp (addr->mailbox, "@") && display) + { + strfcpy (pbuf, mutt_addr_for_display (addr), buflen); + len = mutt_strlen (pbuf); + } + else + { + *pbuf = '\0'; + len = 0; + } + pbuf += len; + buflen -= len; + + if (addr->personal || (addr->mailbox && *addr->mailbox == '@')) + { + if (!buflen) + goto done; + *pbuf++ = '>'; + buflen--; + } + + if (addr->group) + { + if (!buflen) + goto done; + *pbuf++ = ':'; + buflen--; + if (!buflen) + goto done; + *pbuf++ = ' '; + buflen--; + } + } + else + { + if (!buflen) + goto done; + *pbuf++ = ';'; + buflen--; + } +done: + /* no need to check for length here since we already save space at the + beginning of this routine */ + *pbuf = 0; +} + +/* note: it is assumed that `buf' is nul terminated! */ +void rfc822_write_address (char *buf, size_t buflen, ADDRESS *addr, int display) +{ + char *pbuf = buf; + size_t len = mutt_strlen (buf); + + buflen--; /* save room for the terminal nul */ + + if (len > 0) + { + if (len > buflen) + return; /* safety check for bogus arguments */ + + pbuf += len; + buflen -= len; + if (!buflen) + goto done; + *pbuf++ = ','; + buflen--; + if (!buflen) + goto done; + *pbuf++ = ' '; + buflen--; + } + + for (; addr && buflen > 0; addr = addr->next) + { + /* use buflen+1 here because we already saved space for the trailing + nul char, and the subroutine can make use of it */ + rfc822_write_address_single (pbuf, buflen + 1, addr, display); + + /* this should be safe since we always have at least 1 char passed into + the above call, which means `pbuf' should always be nul terminated */ + len = mutt_strlen (pbuf); + pbuf += len; + buflen -= len; + + /* if there is another address, and its not a group mailbox name or + group terminator, add a comma to separate the addresses */ + if (addr->next && addr->next->mailbox && !addr->group) + { + if (!buflen) + goto done; + *pbuf++ = ','; + buflen--; + if (!buflen) + goto done; + *pbuf++ = ' '; + buflen--; + } + } +done: + *pbuf = 0; +} + +/* this should be rfc822_cpy_adr */ +ADDRESS *rfc822_cpy_adr_real (ADDRESS *addr) +{ + ADDRESS *p = rfc822_new_address (); + +#ifdef EXACT_ADDRESS + p->val = safe_strdup (addr->val); +#endif + p->personal = safe_strdup (addr->personal); + p->mailbox = safe_strdup (addr->mailbox); + p->group = addr->group; + return p; +} + +/* this should be rfc822_cpy_adrlist */ +ADDRESS *rfc822_cpy_adr (ADDRESS *addr) +{ + ADDRESS *top = NULL, *last = NULL; + + for (; addr; addr = addr->next) + { + if (last) + { + last->next = rfc822_cpy_adr_real (addr); + last = last->next; + } + else + top = last = rfc822_cpy_adr_real (addr); + } + return top; +} + +/* append list 'b' to list 'a' and return the last element in the new list */ +ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b) +{ + ADDRESS *tmp = *a; + + while (tmp && tmp->next) + tmp = tmp->next; + if (!b) + return tmp; + if (tmp) + tmp->next = rfc822_cpy_adr (b); + else + tmp = *a = rfc822_cpy_adr (b); + while (tmp && tmp->next) + tmp = tmp->next; + return tmp; +} + +#ifdef TESTING +int safe_free (void **p) +{ + free(*p); /* __MEM_CHECKED__ */ + *p = 0; +} + +int main (int argc, char **argv) +{ + ADDRESS *list; + char buf[256]; +# if 0 + char *str = "michael, Michael Elkins <me@mutt.org>, testing a really complex address: this example <@contains.a.source.route,@with.multiple.hosts:address@example.com>;, lothar@of.the.hillpeople (lothar)"; +# else + char *str = "a b c "; +# endif + + list = rfc822_parse_adrlist (NULL, str); + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), list); + rfc822_free_address (&list); + puts (buf); + exit (0); +} +#endif diff --git a/rfc822.h b/rfc822.h new file mode 100644 index 0000000..1e703e3 --- /dev/null +++ b/rfc822.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#ifndef rfc822_h +#define rfc822_h + +#include "config.h" + +/* possible values for RFC822Error */ +enum +{ + ERR_MEMORY = 1, + ERR_MISMATCH_PAREN, + ERR_MISMATCH_QUOTE, + ERR_BAD_ROUTE, + ERR_BAD_ROUTE_ADDR, + ERR_BAD_ADDR_SPEC +}; + +typedef struct address_t +{ +#ifdef EXACT_ADDRESS + char *val; /* value of address as parsed */ +#endif + char *personal; /* real name of address */ + char *mailbox; /* mailbox and host address */ + int group; /* group mailbox? */ + struct address_t *next; +} +ADDRESS; + +void rfc822_free_address (ADDRESS **); +void rfc822_qualify (ADDRESS *, const char *); +ADDRESS *rfc822_parse_adrlist (ADDRESS *, const char *s); +ADDRESS *rfc822_cpy_adr (ADDRESS *addr); +ADDRESS *rfc822_cpy_adr_real (ADDRESS *addr); +ADDRESS *rfc822_append (ADDRESS **a, ADDRESS *b); +void rfc822_write_address (char *, size_t, ADDRESS *, int); +void rfc822_write_address_single (char *, size_t, ADDRESS *, int); +void rfc822_free_address (ADDRESS **addr); +void rfc822_cat (char *, size_t, const char *, const char *); + +extern int RFC822Error; +extern const char *RFC822Errors[]; + +#define rfc822_error(x) RFC822Errors[x] +#define rfc822_new_address() calloc(1,sizeof(ADDRESS)) + +#endif /* rfc822_h */ diff --git a/score.c b/score.c new file mode 100644 index 0000000..a29e357 --- /dev/null +++ b/score.c @@ -0,0 +1,181 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "sort.h" +#include <string.h> +#include <stdlib.h> + +typedef struct score_t +{ + char *str; + pattern_t *pat; + int val; + int exact; /* if this rule matches, don't evaluate any more */ + struct score_t *next; +} SCORE; + +SCORE *Score = NULL; + +void mutt_check_rescore (CONTEXT *ctx) +{ + int i; + + if (option (OPTNEEDRESCORE) && option (OPTSCORE)) + { + if ((Sort & SORT_MASK) == SORT_SCORE || + (SortAux & SORT_MASK) == SORT_SCORE) + { + set_option (OPTNEEDRESORT); + if ((Sort & SORT_MASK) == SORT_THREADS) + set_option (OPTSORTSUBTHREADS); + } + + /* must redraw the index since the user might have %N in it */ + set_option (OPTFORCEREDRAWINDEX); + set_option (OPTFORCEREDRAWPAGER); + + for (i = 0; ctx && i < ctx->msgcount; i++) + { + mutt_score_message (ctx, ctx->hdrs[i], 1); + ctx->hdrs[i]->pair = 0; + } + } + unset_option (OPTNEEDRESCORE); +} + +int mutt_parse_score (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + SCORE *ptr, *last; + char *pattern, *pc; + struct pattern_t *pat; + + mutt_extract_token (buf, s, 0); + if (!MoreArgs (s)) + { + strfcpy (err->data, _("score: too few arguments"), err->dsize); + return (-1); + } + pattern = buf->data; + memset (buf, 0, sizeof (BUFFER)); + mutt_extract_token (buf, s, 0); + if (MoreArgs (s)) + { + FREE (&pattern); + strfcpy (err->data, _("score: too many arguments"), err->dsize); + return (-1); + } + + /* look for an existing entry and update the value, else add it to the end + of the list */ + for (ptr = Score, last = NULL; ptr; last = ptr, ptr = ptr->next) + if (mutt_strcmp (pattern, ptr->str) == 0) + break; + if (!ptr) + { + if ((pat = mutt_pattern_comp (pattern, 0, err)) == NULL) + { + FREE (&pattern); + return (-1); + } + ptr = safe_calloc (1, sizeof (SCORE)); + if (last) + last->next = ptr; + else + Score = ptr; + ptr->pat = pat; + ptr->str = pattern; + } + pc = buf->data; + if (*pc == '=') + { + ptr->exact = 1; + pc++; + } + ptr->val = atoi (pc); + set_option (OPTNEEDRESCORE); + return 0; +} + +void mutt_score_message (CONTEXT *ctx, HEADER *hdr, int upd_ctx) +{ + SCORE *tmp; + + hdr->score = 0; /* in case of re-scoring */ + for (tmp = Score; tmp; tmp = tmp->next) + { + if (mutt_pattern_exec (tmp->pat, 0, NULL, hdr) > 0) + { + if (tmp->exact || tmp->val == 9999 || tmp->val == -9999) + { + hdr->score = tmp->val; + break; + } + hdr->score += tmp->val; + } + } + if (hdr->score < 0) + hdr->score = 0; + + if (hdr->score <= ScoreThresholdDelete) + _mutt_set_flag (ctx, hdr, M_DELETE, 1, upd_ctx); + if (hdr->score <= ScoreThresholdRead) + _mutt_set_flag (ctx, hdr, M_READ, 1, upd_ctx); + if (hdr->score >= ScoreThresholdFlag) + _mutt_set_flag (ctx, hdr, M_FLAG, 1, upd_ctx); +} + +int mutt_parse_unscore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) +{ + SCORE *tmp, *last = NULL; + + while (MoreArgs (s)) + { + mutt_extract_token (buf, s, 0); + if (!mutt_strcmp ("*", buf->data)) + { + for (tmp = Score; tmp; ) + { + last = tmp; + tmp = tmp->next; + mutt_pattern_free (&last->pat); + FREE (&last); + } + Score = NULL; + } + else + { + for (tmp = Score; tmp; last = tmp, tmp = tmp->next) + { + if (!mutt_strcmp (buf->data, tmp->str)) + { + if (last) + last->next = tmp->next; + else + Score = tmp->next; + mutt_pattern_free (&tmp->pat); + FREE (&tmp); + /* there should only be one score per pattern, so we can stop here */ + break; + } + } + } + } + set_option (OPTNEEDRESCORE); + return 0; +} diff --git a/send.c b/send.c new file mode 100644 index 0000000..2b42915 --- /dev/null +++ b/send.c @@ -0,0 +1,1869 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "rfc2047.h" +#include "keymap.h" +#include "mime.h" +#include "mailbox.h" +#include "copy.h" +#include "mx.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#include <ctype.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <dirent.h> +#include <time.h> +#include <sys/types.h> +#include <utime.h> + +#ifdef USE_NNTP +#include "nntp.h" +#endif + +#ifdef MIXMASTER +#include "remailer.h" +#endif + + +static void append_signature (FILE *f) +{ + FILE *tmpfp; + pid_t thepid; + + if (Signature && (tmpfp = mutt_open_read (Signature, &thepid))) + { + if (option (OPTSIGDASHES)) + fputs ("\n-- \n", f); + mutt_copy_stream (tmpfp, f); + fclose (tmpfp); + if (thepid != -1) + mutt_wait_filter (thepid); + } +} + +/* compare two e-mail addresses and return 1 if they are equivalent */ +static int mutt_addrcmp (ADDRESS *a, ADDRESS *b) +{ + if (!a->mailbox || !b->mailbox) + return 0; + if (ascii_strcasecmp (a->mailbox, b->mailbox)) + return 0; + return 1; +} + +/* search an e-mail address in a list */ +static int mutt_addrsrc (ADDRESS *a, ADDRESS *lst) +{ + for (; lst; lst = lst->next) + { + if (mutt_addrcmp (a, lst)) + return (1); + } + return (0); +} + +/* removes addresses from "b" which are contained in "a" */ +static ADDRESS *mutt_remove_xrefs (ADDRESS *a, ADDRESS *b) +{ + ADDRESS *top, *p, *prev = NULL; + + top = b; + while (b) + { + for (p = a; p; p = p->next) + { + if (mutt_addrcmp (p, b)) + break; + } + if (p) + { + if (prev) + { + prev->next = b->next; + b->next = NULL; + rfc822_free_address (&b); + b = prev; + } + else + { + top = top->next; + b->next = NULL; + rfc822_free_address (&b); + b = top; + } + } + else + { + prev = b; + b = b->next; + } + } + return top; +} + +/* remove any address which matches the current user. if `leave_only' is + * nonzero, don't remove the user's address if it is the only one in the list + */ +static ADDRESS *remove_user (ADDRESS *a, int leave_only) +{ + ADDRESS *top = NULL, *last = NULL; + + while (a) + { + if (!mutt_addr_is_user (a)) + { + if (top) + { + last->next = a; + last = last->next; + } + else + last = top = a; + a = a->next; + last->next = NULL; + } + else + { + ADDRESS *tmp = a; + + a = a->next; + if (!leave_only || a || last) + { + tmp->next = NULL; + rfc822_free_address (&tmp); + } + else + last = top = tmp; + } + } + return top; +} + +static ADDRESS *find_mailing_lists (ADDRESS *t, ADDRESS *c) +{ + ADDRESS *top = NULL, *ptr = NULL; + + for (; t || c; t = c, c = NULL) + { + for (; t; t = t->next) + { + if (mutt_is_mail_list (t) && !t->group) + { + if (top) + { + ptr->next = rfc822_cpy_adr_real (t); + ptr = ptr->next; + } + else + ptr = top = rfc822_cpy_adr_real (t); + } + } + } + return top; +} + +static int edit_address (ADDRESS **a, /* const */ char *field) +{ + char buf[HUGE_STRING]; + char *err = NULL; + int idna_ok = 0; + + do + { + buf[0] = 0; + mutt_addrlist_to_local (*a); + rfc822_write_address (buf, sizeof (buf), *a, 0); + if (mutt_get_field (field, buf, sizeof (buf), M_ALIAS) != 0) + return (-1); + rfc822_free_address (a); + *a = mutt_expand_aliases (mutt_parse_adrlist (NULL, buf)); + if ((idna_ok = mutt_addrlist_to_idna (*a, &err)) != 0) + { + mutt_error (_("Error: '%s' is a bad IDN."), err); + mutt_refresh (); + mutt_sleep (2); + FREE (&err); + } + } + while (idna_ok != 0); + return 0; +} + +static int edit_envelope (ENVELOPE *en, int flags) +{ + char buf[HUGE_STRING]; + LIST *uh = UserHeader; + +#ifdef USE_NNTP + if (option (OPTNEWSSEND)) + { + if (en->newsgroups) + strfcpy (buf, en->newsgroups, sizeof (buf)); + else + buf[0] = 0; + if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) != 0) + return (-1); + FREE (&en->newsgroups); + en->newsgroups = safe_strdup (buf); + + if (en->followup_to) + strfcpy (buf, en->followup_to, sizeof (buf)); + else + buf[0] = 0; + if (option (OPTASKFOLLOWUP) && mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) != 0) + return (-1); + FREE (&en->followup_to); + en->followup_to = safe_strdup (buf); + + if (en->x_comment_to) + strfcpy (buf, en->x_comment_to, sizeof (buf)); + else + buf[0] = 0; + if (option (OPTXCOMMENTTO) && option (OPTASKXCOMMENTTO) && mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) != 0) + return (-1); + FREE (&en->x_comment_to); + en->x_comment_to = safe_strdup (buf); + } + else +#endif + { + if (edit_address (&en->to, "To: ") == -1 || en->to == NULL) + return (-1); + if (option (OPTASKCC) && edit_address (&en->cc, "Cc: ") == -1) + return (-1); + if (option (OPTASKBCC) && edit_address (&en->bcc, "Bcc: ") == -1) + return (-1); + } + + if (en->subject) + { + if (option (OPTFASTREPLY)) + return (0); + else + strfcpy (buf, en->subject, sizeof (buf)); + } + else + { + char *p; + + buf[0] = 0; + for (; uh; uh = uh->next) + { + if (ascii_strncasecmp ("subject:", uh->data, 8) == 0) + { + p = uh->data + 8; + SKIPWS (p); + strncpy (buf, p, sizeof (buf)); + } + } + } + + if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) != 0 || + (!buf[0] && query_quadoption (OPT_SUBJECT, _("No subject, abort?")) != M_NO)) + { + mutt_message _("No subject, aborting."); + return (-1); + } + mutt_str_replace (&en->subject, buf); + + return 0; +} + +#ifdef USE_NNTP +char *nntp_get_header (const char *s) +{ + SKIPWS (s); + return safe_strdup (s); +} +#endif + +static void process_user_recips (ENVELOPE *env) +{ + LIST *uh = UserHeader; + + for (; uh; uh = uh->next) + { + if (ascii_strncasecmp ("to:", uh->data, 3) == 0) + env->to = rfc822_parse_adrlist (env->to, uh->data + 3); + else if (ascii_strncasecmp ("cc:", uh->data, 3) == 0) + env->cc = rfc822_parse_adrlist (env->cc, uh->data + 3); + else if (ascii_strncasecmp ("bcc:", uh->data, 4) == 0) + env->bcc = rfc822_parse_adrlist (env->bcc, uh->data + 4); +#ifdef USE_NNTP + else if (ascii_strncasecmp ("newsgroups:", uh->data, 11) == 0) + env->newsgroups = nntp_get_header (uh->data + 11); + else if (ascii_strncasecmp ("followup-to:", uh->data, 12) == 0) + env->followup_to = nntp_get_header (uh->data + 12); + else if (ascii_strncasecmp ("x-comment-to:", uh->data, 13) == 0) + env->x_comment_to = nntp_get_header (uh->data + 13); +#endif + } +} + +static void process_user_header (ENVELOPE *env) +{ + LIST *uh = UserHeader; + LIST *last = env->userhdrs; + + if (last) + while (last->next) + last = last->next; + + for (; uh; uh = uh->next) + { + if (ascii_strncasecmp ("from:", uh->data, 5) == 0) + { + /* User has specified a default From: address. Remove default address */ + rfc822_free_address (&env->from); + env->from = rfc822_parse_adrlist (env->from, uh->data + 5); + } + else if (ascii_strncasecmp ("reply-to:", uh->data, 9) == 0) + { + rfc822_free_address (&env->reply_to); + env->reply_to = rfc822_parse_adrlist (env->reply_to, uh->data + 9); + } + else if (ascii_strncasecmp ("message-id:", uh->data, 11) == 0) + mutt_str_replace (&env->message_id, uh->data + 11); + else if (ascii_strncasecmp ("to:", uh->data, 3) != 0 && + ascii_strncasecmp ("cc:", uh->data, 3) != 0 && + ascii_strncasecmp ("bcc:", uh->data, 4) != 0 && +#ifdef USE_NNTP + ascii_strncasecmp ("newsgroups:", uh->data, 11) != 0 && + ascii_strncasecmp ("followup-to:", uh->data, 12) != 0 && + ascii_strncasecmp ("x-comment-to:", uh->data, 13) != 0 && +#endif + ascii_strncasecmp ("supersedes:", uh->data, 11) != 0 && + ascii_strncasecmp ("subject:", uh->data, 8) != 0) + { + if (last) + { + last->next = mutt_new_list (); + last = last->next; + } + else + last = env->userhdrs = mutt_new_list (); + last->data = safe_strdup (uh->data); + } + } +} + +LIST *mutt_copy_list (LIST *p) +{ + LIST *t, *r=NULL, *l=NULL; + + for (; p; p = p->next) + { + t = (LIST *) safe_malloc (sizeof (LIST)); + t->data = safe_strdup (p->data); + t->next = NULL; + if (l) + { + r->next = t; + r = r->next; + } + else + l = r = t; + } + return (l); +} + +void mutt_forward_intro (FILE *fp, HEADER *cur) +{ + char buffer[STRING]; + + fputs ("----- Forwarded message from ", fp); + buffer[0] = 0; + rfc822_write_address (buffer, sizeof (buffer), cur->env->from, 1); + fputs (buffer, fp); + fputs (" -----\n\n", fp); +} + +void mutt_forward_trailer (FILE *fp) +{ + fputs ("\n----- End forwarded message -----\n", fp); +} + + +static int include_forward (CONTEXT *ctx, HEADER *cur, FILE *out) +{ + int chflags = CH_DECODE, cmflags = 0; + + mutt_parse_mime_message (ctx, cur); + mutt_message_hook (ctx, cur, M_MESSAGEHOOK); + + if (WithCrypto && (cur->security & ENCRYPT) && option (OPTFORWDECODE)) + { + /* make sure we have the user's passphrase before proceeding... */ + crypt_valid_passphrase (cur->security); + } + + mutt_forward_intro (out, cur); + + if (option (OPTFORWDECODE)) + { + cmflags |= M_CM_DECODE | M_CM_CHARCONV; + if (option (OPTWEED)) + { + chflags |= CH_WEED | CH_REORDER; + cmflags |= M_CM_WEED; + } + } + if (option (OPTFORWQUOTE)) + cmflags |= M_CM_PREFIX; + + mutt_copy_message (out, ctx, cur, cmflags, chflags); + mutt_forward_trailer (out); + return 0; +} + +void mutt_make_attribution (CONTEXT *ctx, HEADER *cur, FILE *out) +{ + char buffer[STRING]; + if (Attribution) + { + mutt_make_string (buffer, sizeof (buffer), Attribution, ctx, cur); + fputs (buffer, out); + fputc ('\n', out); + } +} + +void mutt_make_post_indent (CONTEXT *ctx, HEADER *cur, FILE *out) +{ + char buffer[STRING]; + if (PostIndentString) + { + mutt_make_string (buffer, sizeof (buffer), PostIndentString, ctx, cur); + fputs (buffer, out); + fputc ('\n', out); + } +} + +static int include_reply (CONTEXT *ctx, HEADER *cur, FILE *out) +{ + int cmflags = M_CM_PREFIX | M_CM_DECODE | M_CM_CHARCONV; + int chflags = CH_DECODE; + + if (WithCrypto && (cur->security & ENCRYPT)) + { + /* make sure we have the user's passphrase before proceeding... */ + crypt_valid_passphrase (cur->security); + } + + mutt_parse_mime_message (ctx, cur); + mutt_message_hook (ctx, cur, M_MESSAGEHOOK); + + mutt_make_attribution (ctx, cur, out); + + if (!option (OPTHEADER)) + cmflags |= M_CM_NOHEADER; + if (option (OPTWEED)) + { + chflags |= CH_WEED | CH_REORDER; + cmflags |= M_CM_WEED; + } + + mutt_copy_message (out, ctx, cur, cmflags, chflags); + + mutt_make_post_indent (ctx, cur, out); + + return 0; +} + +static int default_to (ADDRESS **to, ENVELOPE *env, int flags, int hmfupto) +{ + char prompt[STRING]; + ADDRESS *tmp; + + if (flags && env->mail_followup_to && hmfupto == M_YES) + { + rfc822_append (to, env->mail_followup_to); + return 0; + } + + /* Exit now if we're setting up the default Cc list for list-reply + * (only set if Mail-Followup-To is present and honoured). + */ + if (flags & SENDLISTREPLY) + return 0; + + /* If this message came from a mailing list, ask the user if he really + * intended to reply to the author only. + */ + if (!(flags & SENDGROUPREPLY) && mutt_is_list_cc (0, env->to, env->cc)) { + switch (query_quadoption (OPT_LISTREPLY, + _("Message came from a mailing list. Reply to author only?"))) + { + case M_NO: + tmp = find_mailing_lists (env->to, env->cc); + rfc822_append (to, tmp); + rfc822_free_address (&tmp); + return 0; + case -1: + return -1; /* abort */ + } + } + + if (!option(OPTREPLYSELF) && mutt_addr_is_user (env->from)) + { + /* mail is from the user, assume replying to recipients */ + rfc822_append (to, env->to); + } + else if (env->reply_to) + { + if ((mutt_addrcmp (env->from, env->reply_to) && !env->reply_to->next) || + (option (OPTIGNORELISTREPLYTO) && + mutt_is_mail_list (env->reply_to) && + (mutt_addrsrc (env->reply_to, env->to) || + mutt_addrsrc (env->reply_to, env->cc)))) + { + /* If the Reply-To: address is a mailing list, assume that it was + * put there by the mailing list, and use the From: address + * + * We also take the from header if our correspondant has a reply-to + * header which is identical to the electronic mail address given + * in his From header. + * + */ + rfc822_append (to, env->from); + } + else if (!(mutt_addrcmp (env->from, env->reply_to) && + !env->reply_to->next) && + quadoption (OPT_REPLYTO) != M_YES) + { + /* There are quite a few mailing lists which set the Reply-To: + * header field to the list address, which makes it quite impossible + * to send a message to only the sender of the message. This + * provides a way to do that. + */ + snprintf (prompt, sizeof (prompt), _("Reply to %s%s?"), + env->reply_to->mailbox, + env->reply_to->next?",...":""); + switch (query_quadoption (OPT_REPLYTO, prompt)) + { + case M_YES: + rfc822_append (to, env->reply_to); + break; + + case M_NO: + rfc822_append (to, env->from); + break; + + default: + return (-1); /* abort */ + } + } + else + rfc822_append (to, env->reply_to); + } + else + rfc822_append (to, env->from); + + return (0); +} + +int mutt_fetch_recips (ENVELOPE *out, ENVELOPE *in, int flags) +{ + char prompt[STRING]; + ADDRESS *tmp; + int hmfupto = -1; + + if ((flags & (SENDLISTREPLY|SENDGROUPREPLY)) && in->mail_followup_to) + { + snprintf (prompt, sizeof (prompt), _("Follow-up to %s%s?"), + in->mail_followup_to->mailbox, + in->mail_followup_to->next ? ",..." : ""); + + if ((hmfupto = query_quadoption (OPT_MFUPTO, prompt)) == -1) + return -1; + } + + if (flags & SENDLISTREPLY) + { + tmp = find_mailing_lists (in->to, in->cc); + rfc822_append (&out->to, tmp); + rfc822_free_address (&tmp); + + if (in->mail_followup_to && hmfupto == M_YES && + default_to (&out->cc, in, flags & SENDLISTREPLY, hmfupto) == -1) + return (-1); /* abort */ + } + else + { + if (default_to (&out->to, in, flags & SENDGROUPREPLY, hmfupto) == -1) + return (-1); /* abort */ + + if ((flags & SENDGROUPREPLY) && (!in->mail_followup_to || hmfupto != M_YES)) + { + /* if(!mutt_addr_is_user(in->to)) */ + rfc822_append (&out->cc, in->to); + rfc822_append (&out->cc, in->cc); + } + } + return 0; +} + +LIST *mutt_make_references(ENVELOPE *e) +{ + LIST *t = NULL, *l = NULL; + + if (e->references) + l = mutt_copy_list (e->references); + else + l = mutt_copy_list (e->in_reply_to); + + if (e->message_id) + { + t = mutt_new_list(); + t->data = safe_strdup(e->message_id); + t->next = l; + l = t; + } + + return l; +} + +void mutt_fix_reply_recipients (ENVELOPE *env) +{ + mutt_expand_aliases_env (env); + + if (! option (OPTMETOO)) + { + /* the order is important here. do the CC: first so that if the + * the user is the only recipient, it ends up on the TO: field + */ + env->cc = remove_user (env->cc, (env->to == NULL)); + env->to = remove_user (env->to, (env->cc == NULL)); + } + + /* the CC field can get cluttered, especially with lists */ + env->to = mutt_remove_duplicates (env->to); + env->cc = mutt_remove_duplicates (env->cc); + env->cc = mutt_remove_xrefs (env->to, env->cc); +} + +void mutt_make_forward_subject (ENVELOPE *env, CONTEXT *ctx, HEADER *cur) +{ + char buffer[STRING]; + + /* set the default subject for the message. */ + mutt_make_string (buffer, sizeof (buffer), NONULL(ForwFmt), ctx, cur); + env->subject = safe_strdup (buffer); +} + +void mutt_make_misc_reply_headers (ENVELOPE *env, CONTEXT *ctx, + HEADER *cur, ENVELOPE *curenv) +{ + if (curenv->real_subj) + { + env->subject = safe_malloc (mutt_strlen (curenv->real_subj) + 5); + sprintf (env->subject, "Re: %s", curenv->real_subj); /* __SPRINTF_CHECKED__ */ + } + else + env->subject = safe_strdup ("Re: your mail"); + +#ifdef USE_NNTP + if (option (OPTNEWSSEND) && option (OPTXCOMMENTTO) && curenv->from) + env->x_comment_to = safe_strdup (mutt_get_name (curenv->from)); +#endif +} + +void mutt_add_to_reference_headers (ENVELOPE *env, ENVELOPE *curenv, LIST ***pp, LIST ***qq) +{ + LIST **p = NULL, **q = NULL; + + if (pp) p = *pp; + if (qq) q = *qq; + + if (!p) p = &env->references; + if (!q) q = &env->in_reply_to; + + while (*p) p = &(*p)->next; + while (*q) q = &(*q)->next; + + *p = mutt_make_references (curenv); + + if (curenv->message_id) + { + *q = mutt_new_list(); + (*q)->data = safe_strdup (curenv->message_id); + } + + if (pp) *pp = p; + if (qq) *qq = q; + +} + +static void +mutt_make_reference_headers (ENVELOPE *curenv, ENVELOPE *env, CONTEXT *ctx) +{ + env->references = NULL; + env->in_reply_to = NULL; + + if (!curenv) + { + HEADER *h; + LIST **p = NULL, **q = NULL; + int i; + + for(i = 0; i < ctx->vcount; i++) + { + h = ctx->hdrs[ctx->v2r[i]]; + if (h->tagged) + mutt_add_to_reference_headers (env, h->env, &p, &q); + } + } + else + mutt_add_to_reference_headers (env, curenv, NULL, NULL); +} + +static int +envelope_defaults (ENVELOPE *env, CONTEXT *ctx, HEADER *cur, int flags) +{ + ENVELOPE *curenv = NULL; + int i = 0, tag = 0; + + if (!cur) + { + tag = 1; + for (i = 0; i < ctx->vcount; i++) + if (ctx->hdrs[ctx->v2r[i]]->tagged) + { + cur = ctx->hdrs[ctx->v2r[i]]; + curenv = cur->env; + break; + } + + if (!cur) + { + /* This could happen if the user tagged some messages and then did + * a limit such that none of the tagged message are visible. + */ + mutt_error _("No tagged messages are visible!"); + return (-1); + } + } + else + curenv = cur->env; + + if (flags & SENDREPLY) + { +#ifdef USE_NNTP + if ((flags & SENDNEWS)) + { + /* in case followup set Newsgroups: with Followup-To: if it present */ + if (!env->newsgroups && curenv && + mutt_strcasecmp (curenv->followup_to, "poster")) + env->newsgroups = safe_strdup (curenv->followup_to); + } + else +#endif + if (tag) + { + HEADER *h; + + for (i = 0; i < ctx->vcount; i++) + { + h = ctx->hdrs[ctx->v2r[i]]; + if (h->tagged && mutt_fetch_recips (env, h->env, flags) == -1) + return -1; + } + } + else if (mutt_fetch_recips (env, curenv, flags) == -1) + return -1; + + if ((flags & SENDLISTREPLY) && !env->to) + { + mutt_error _("No mailing lists found!"); + return (-1); + } + + mutt_make_misc_reply_headers (env, ctx, cur, curenv); + mutt_make_reference_headers (tag ? NULL : curenv, env, ctx); + } + else if (flags & SENDFORWARD) + mutt_make_forward_subject (env, ctx, cur); + + return (0); +} + +static int +generate_body (FILE *tempfp, /* stream for outgoing message */ + HEADER *msg, /* header for outgoing message */ + int flags, /* compose mode */ + CONTEXT *ctx, /* current mailbox */ + HEADER *cur) /* current message */ +{ + int i; + HEADER *h; + BODY *tmp; + + if (flags & SENDREPLY) + { + if ((i = query_quadoption (OPT_INCLUDE, _("Include message in reply?"))) == -1) + return (-1); + + if (i == M_YES) + { + mutt_message _("Including quoted message..."); + if (!cur) + { + for (i = 0; i < ctx->vcount; i++) + { + h = ctx->hdrs[ctx->v2r[i]]; + if (h->tagged) + { + if (include_reply (ctx, h, tempfp) == -1) + { + mutt_error _("Could not include all requested messages!"); + return (-1); + } + fputc ('\n', tempfp); + } + } + } + else + include_reply (ctx, cur, tempfp); + + } + } + else if (flags & SENDFORWARD) + { + if ((i = query_quadoption (OPT_MIMEFWD, _("Forward as attachment?"))) == M_YES) + { + BODY *last = msg->content; + + mutt_message _("Preparing forwarded message..."); + + while (last && last->next) + last = last->next; + + if (cur) + { + tmp = mutt_make_message_attach (ctx, cur, 0); + if (last) + last->next = tmp; + else + msg->content = tmp; + } + else + { + for (i = 0; i < ctx->vcount; i++) + { + if (ctx->hdrs[ctx->v2r[i]]->tagged) + { + tmp = mutt_make_message_attach (ctx, ctx->hdrs[ctx->v2r[i]], 0); + if (last) + { + last->next = tmp; + last = tmp; + } + else + last = msg->content = tmp; + } + } + } + } + else if (i != -1) + { + if (cur) + include_forward (ctx, cur, tempfp); + else + for (i=0; i < ctx->vcount; i++) + if (ctx->hdrs[ctx->v2r[i]]->tagged) + include_forward (ctx, ctx->hdrs[ctx->v2r[i]], tempfp); + } + else if (i == -1) + return -1; + } + /* if (WithCrypto && (flags & SENDKEY)) */ + else if ((WithCrypto & APPLICATION_PGP) && (flags & SENDKEY)) + { + BODY *tmp; + + if ((WithCrypto & APPLICATION_PGP) + && (tmp = crypt_pgp_make_key_attachment (NULL)) == NULL) + return -1; + + tmp->next = msg->content; + msg->content = tmp; + } + + mutt_clear_error (); + + return (0); +} + +void mutt_set_followup_to (ENVELOPE *e) +{ + ADDRESS *t = NULL; + ADDRESS *from; + + /* + * Only generate the Mail-Followup-To if the user has requested it, and + * it hasn't already been set + */ + + if (!option (OPTFOLLOWUPTO)) + return; +#ifdef USE_NNTP + if (option (OPTNEWSSEND)) + { + if (!e->followup_to && e->newsgroups && (strrchr (e->newsgroups, ','))) + e->followup_to = safe_strdup (e->newsgroups); + return; + } +#endif + + if (!e->mail_followup_to) + { + if (mutt_is_list_cc (0, e->to, e->cc)) + { + /* + * this message goes to known mailing lists, so create a proper + * mail-followup-to header + */ + + t = rfc822_append (&e->mail_followup_to, e->to); + rfc822_append (&t, e->cc); + } + + /* remove ourselves from the mail-followup-to header */ + e->mail_followup_to = remove_user (e->mail_followup_to, 0); + + /* + * If we are not subscribed to any of the lists in question, + * re-add ourselves to the mail-followup-to header. The + * mail-followup-to header generated is a no-op with group-reply, + * but makes sure list-reply has the desired effect. + */ + + if (e->mail_followup_to && !mutt_is_list_recipient (0, e->to, e->cc)) + { + if (e->reply_to) + from = rfc822_cpy_adr (e->reply_to); + else if (e->from) + from = rfc822_cpy_adr (e->from); + else + from = mutt_default_from (); + + if (from) + { + /* Normally, this loop will not even be entered. */ + for (t = from; t && t->next; t = t->next) + ; + + t->next = e->mail_followup_to; /* t cannot be NULL at this point. */ + e->mail_followup_to = from; + } + } + + e->mail_followup_to = mutt_remove_duplicates (e->mail_followup_to); + + } +} + + +/* look through the recipients of the message we are replying to, and if + we find an address that matches $alternates, we use that as the default + from field */ +static ADDRESS *set_reverse_name (ENVELOPE *env) +{ + ADDRESS *tmp; + + for (tmp = env->to; tmp; tmp = tmp->next) + { + if (mutt_addr_is_user (tmp)) + break; + } + if (!tmp) + { + for (tmp = env->cc; tmp; tmp = tmp->next) + { + if (mutt_addr_is_user (tmp)) + break; + } + } + if (!tmp && mutt_addr_is_user (env->from)) + tmp = env->from; + if (tmp) + { + tmp = rfc822_cpy_adr_real (tmp); + if (!option (OPTREVREAL)) + FREE (&tmp->personal); + if (!tmp->personal) + tmp->personal = safe_strdup (Realname); + } + return (tmp); +} + +ADDRESS *mutt_default_from (void) +{ + ADDRESS *adr; + const char *fqdn = mutt_fqdn(1); + + /* + * Note: We let $from override $realname here. Is this the right + * thing to do? + */ + + if (From) + adr = rfc822_cpy_adr_real (From); + else if (option (OPTUSEDOMAIN)) + { + adr = rfc822_new_address (); + adr->mailbox = safe_malloc (mutt_strlen (Username) + mutt_strlen (fqdn) + 2); + sprintf (adr->mailbox, "%s@%s", NONULL(Username), NONULL(fqdn)); /* __SPRINTF_CHECKED__ */ + } + else + { + adr = rfc822_new_address (); + adr->mailbox = safe_strdup (NONULL(Username)); + } + + return (adr); +} + +static int send_message (HEADER *msg) +{ + char tempfile[_POSIX_PATH_MAX]; + FILE *tempfp; + int i; + + /* Write out the message in MIME form. */ + mutt_mktemp (tempfile); + if ((tempfp = safe_fopen (tempfile, "w")) == NULL) + return (-1); + +#ifdef MIXMASTER + mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, msg->chain ? 1 : 0); +#endif +#ifndef MIXMASTER + mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, 0); +#endif + + fputc ('\n', tempfp); /* tie off the header. */ + + if ((mutt_write_mime_body (msg->content, tempfp) == -1)) + { + fclose(tempfp); + unlink (tempfile); + return (-1); + } + + if (fclose (tempfp) != 0) + { + mutt_perror (tempfile); + unlink (tempfile); + return (-1); + } + +#ifdef MIXMASTER + if (msg->chain) + return mix_send_message (msg->chain, tempfile); +#endif + + i = mutt_invoke_mta (msg->env->from, msg->env->to, msg->env->cc, + msg->env->bcc, tempfile, (msg->content->encoding == ENC8BIT)); + return (i); +} + +/* rfc2047 encode the content-descriptions */ +static void encode_descriptions (BODY *b, short recurse) +{ + BODY *t; + + for (t = b; t; t = t->next) + { + if (t->description) + { + rfc2047_encode_string (&t->description); + } + if (recurse && t->parts) + encode_descriptions (t->parts, recurse); + } +} + +/* rfc2047 decode them in case of an error */ +static void decode_descriptions (BODY *b) +{ + BODY *t; + + for (t = b; t; t = t->next) + { + if (t->description) + { + rfc2047_decode (&t->description); + } + if (t->parts) + decode_descriptions (t->parts); + } +} + +int mutt_resend_message (FILE *fp, CONTEXT *ctx, HEADER *cur) +{ + HEADER *msg = mutt_new_header (); + + if (mutt_prepare_template (fp, ctx, msg, cur, 1) < 0) + return -1; + + return ci_send_message (SENDRESEND, msg, NULL, ctx, cur); +} + +int +ci_send_message (int flags, /* send mode */ + HEADER *msg, /* template to use for new message */ + char *tempfile, /* file specified by -i or -H */ + CONTEXT *ctx, /* current mailbox */ + HEADER *cur) /* current message */ +{ + char buffer[LONG_STRING]; + char fcc[_POSIX_PATH_MAX] = ""; /* where to copy this message */ + FILE *tempfp = NULL; + BODY *pbody; + int i, killfrom = 0; + int fcc_error = 0; + int free_clear_content = 0; + + BODY *save_content = NULL; + BODY *clear_content = NULL; + char *pgpkeylist = NULL; + /* save current value of "pgp_sign_as" */ + char *signas = NULL; + char *tag = NULL, *err = NULL; + + int rv = -1; + +#ifdef USE_NNTP + if (flags & SENDNEWS) + set_option (OPTNEWSSEND); + else + unset_option (OPTNEWSSEND); +#endif + + if (!flags && !msg && quadoption (OPT_RECALL) != M_NO && + mutt_num_postponed (1)) + { + /* If the user is composing a new message, check to see if there + * are any postponed messages first. + */ + if ((i = query_quadoption (OPT_RECALL, _("Recall postponed message?"))) == -1) + return rv; + + if(i == M_YES) + flags |= SENDPOSTPONED; + } + + + if ((WithCrypto & APPLICATION_PGP) && (flags & SENDPOSTPONED)) + signas = safe_strdup(PgpSignAs); + + /* Delay expansion of aliases until absolutely necessary--shouldn't + * be necessary unless we are prompting the user or about to execute a + * send-hook. + */ + + if (!msg) + { + msg = mutt_new_header (); + + if (flags == SENDPOSTPONED) + { + if ((flags = mutt_get_postponed (ctx, msg, &cur, fcc, sizeof (fcc))) < 0) + goto cleanup; +#ifdef USE_NNTP + /* + * If postponed message is a news article, it have + * a "Newsgroups:" header line, then set appropriate flag. + */ + if (msg->env->newsgroups) + { + flags |= SENDNEWS; + set_option (OPTNEWSSEND); + } + else + { + flags &= ~SENDNEWS; + unset_option (OPTNEWSSEND); + } +#endif + } + + if (flags & (SENDPOSTPONED|SENDRESEND)) + { + if ((tempfp = safe_fopen (msg->content->filename, "a+")) == NULL) + { + mutt_perror (msg->content->filename); + goto cleanup; + } + } + + if (!msg->env) + msg->env = mutt_new_envelope (); + } + + if (! (flags & (SENDKEY | SENDPOSTPONED | SENDRESEND))) + { + pbody = mutt_new_body (); + pbody->next = msg->content; /* don't kill command-line attachments */ + msg->content = pbody; + + mutt_parse_content_type (ContentType, msg->content); + msg->content->unlink = 1; + msg->content->use_disp = 0; + msg->content->disposition = DISPINLINE; + if (option (OPTTEXTFLOWED) && msg->content->type == TYPETEXT && !ascii_strcasecmp (msg->content->subtype, "plain")) + mutt_set_parameter ("format", "flowed", &msg->content->parameter); + + if (!tempfile) + { + mutt_mktemp (buffer); + tempfp = safe_fopen (buffer, "w+"); + msg->content->filename = safe_strdup (buffer); + } + else + { + tempfp = safe_fopen (tempfile, "a+"); + msg->content->filename = safe_strdup (tempfile); + } + + if (!tempfp) + { + dprint(1,(debugfile, "newsend_message: can't create tempfile %s (errno=%d)\n", msg->content->filename, errno)); + mutt_perror (msg->content->filename); + goto cleanup; + } + } + + /* this is handled here so that the user can match ~f in send-hook */ + if (cur && option (OPTREVNAME) && !(flags & (SENDPOSTPONED|SENDRESEND))) + { + /* we shouldn't have to worry about freeing `msg->env->from' before + * setting it here since this code will only execute when doing some + * sort of reply. the pointer will only be set when using the -H command + * line option. + * + * We shouldn't have to worry about alias expansion here since we are + * either replying to a real or postponed message, therefore no aliases + * should exist since the user has not had the opportunity to add + * addresses to the list. We just have to ensure the postponed messages + * have their aliases expanded. + */ + + msg->env->from = set_reverse_name (cur->env); + } + + if (!msg->env->from && option (OPTUSEFROM) && !(flags & (SENDPOSTPONED|SENDRESEND))) + msg->env->from = mutt_default_from (); + + if (flags & SENDBATCH) + { + mutt_copy_stream (stdin, tempfp); + if (option (OPTHDRS)) + { + process_user_recips (msg->env); + process_user_header (msg->env); + } + mutt_expand_aliases_env (msg->env); + } + else if (! (flags & (SENDPOSTPONED|SENDRESEND))) + { + if ((flags & (SENDREPLY | SENDFORWARD)) && ctx && + envelope_defaults (msg->env, ctx, cur, flags) == -1) + goto cleanup; + + if (option (OPTHDRS)) + process_user_recips (msg->env); + + /* Expand aliases and remove duplicates/crossrefs */ + mutt_fix_reply_recipients (msg->env); + +#ifdef USE_NNTP + if ((flags & SENDNEWS) && ctx && ctx->magic == M_NNTP && !msg->env->newsgroups) + msg->env->newsgroups = safe_strdup (((NNTP_DATA *)ctx->data)->group); +#endif + + if (! (flags & SENDMAILX) && + ! (option (OPTAUTOEDIT) && option (OPTEDITHDRS)) && + ! ((flags & SENDREPLY) && option (OPTFASTREPLY))) + { + if (edit_envelope (msg->env, flags) == -1) + goto cleanup; + } + + /* the from address must be set here regardless of whether or not + * $use_from is set so that the `~P' (from you) operator in send-hook + * patterns will work. if $use_from is unset, the from address is killed + * after send-hooks are evaulated */ + + if (!msg->env->from) + { + msg->env->from = mutt_default_from (); + killfrom = 1; + } + + if ((flags & SENDREPLY) && cur) + { + /* change setting based upon message we are replying to */ + mutt_message_hook (ctx, cur, M_REPLYHOOK); + + /* + * set the replied flag for the message we are generating so that the + * user can use ~Q in a send-hook to know when reply-hook's are also + * being used. + */ + msg->replied = 1; + } + + /* change settings based upon recipients */ + + mutt_message_hook (NULL, msg, M_SENDHOOK); + + /* + * Unset the replied flag from the message we are composing since it is + * no longer required. This is done here because the FCC'd copy of + * this message was erroneously get the 'R'eplied flag when stored in + * a maildir-style mailbox. + */ + msg->replied = 0; + + if (killfrom) + { + rfc822_free_address (&msg->env->from); + killfrom = 0; + } + + if (option (OPTHDRS)) + process_user_header (msg->env); + + + if (option (OPTSIGONTOP) && (! (flags & (SENDMAILX | SENDKEY)) && Editor && mutt_strcmp (Editor, "builtin") != 0)) + append_signature (tempfp); + + /* include replies/forwarded messages, unless we are given a template */ + if (!tempfile && (ctx || !(flags & (SENDREPLY|SENDFORWARD))) + && generate_body (tempfp, msg, flags, ctx, cur) == -1) + goto cleanup; + + if (!option (OPTSIGONTOP) && (! (flags & (SENDMAILX | SENDKEY)) && Editor && mutt_strcmp (Editor, "builtin") != 0)) + append_signature (tempfp); + + /* + * this wants to be done _after_ generate_body, so message-hooks + * can take effect. + */ + + if (WithCrypto && !(flags & SENDMAILX)) + { + if (option (OPTCRYPTAUTOSIGN)) + msg->security |= SIGN; + if (option (OPTCRYPTAUTOENCRYPT)) + msg->security |= ENCRYPT; + if (option (OPTCRYPTREPLYENCRYPT) && cur && (cur->security & ENCRYPT)) + msg->security |= ENCRYPT; + if (option (OPTCRYPTREPLYSIGN) && cur && (cur->security & SIGN)) + msg->security |= SIGN; + if (option (OPTCRYPTREPLYSIGNENCRYPTED) && cur && (cur->security & ENCRYPT)) + msg->security |= SIGN; + } + + if (WithCrypto && msg->security) + { + /* + * When reypling / forwarding, use the original message's + * crypto system. According to the documentation, + * smime_is_default should be disregarded here. + * + * Problem: At least with forwarding, this doesn't really + * make much sense. Should we have an option to completely + * disable individual mechanisms at run-time? + */ + if (cur) + { + if ((WithCrypto & APPLICATION_PGP) && option (OPTCRYPTAUTOPGP) + && (cur->security & APPLICATION_PGP)) + msg->security |= APPLICATION_PGP; + else if ((WithCrypto & APPLICATION_SMIME) && option (OPTCRYPTAUTOSMIME) + && (cur->security & APPLICATION_SMIME)) + msg->security |= APPLICATION_SMIME; + } + + /* + * No crypto mechanism selected? Use availability + smime_is_default + * for the decision. + */ + if (!(msg->security & (APPLICATION_SMIME | APPLICATION_PGP))) + { + if ((WithCrypto & APPLICATION_SMIME) && option (OPTCRYPTAUTOSMIME) + && option (OPTSMIMEISDEFAULT)) + msg->security |= APPLICATION_SMIME; + else if ((WithCrypto & APPLICATION_PGP) && option (OPTCRYPTAUTOPGP)) + msg->security |= APPLICATION_PGP; + else if ((WithCrypto & APPLICATION_SMIME) && option (OPTCRYPTAUTOSMIME)) + msg->security |= APPLICATION_SMIME; + } + } + + /* No permissible mechanisms found. Don't sign or encrypt. */ + if (!(msg->security & (APPLICATION_SMIME|APPLICATION_PGP))) + msg->security = 0; + } + /* wait until now to set the real name portion of our return address so + that $realname can be set in a send-hook */ + if (msg->env->from && !msg->env->from->personal + && !(flags & (SENDRESEND|SENDPOSTPONED))) + msg->env->from->personal = safe_strdup (Realname); + + if (!((WithCrypto & APPLICATION_PGP) && (flags & SENDKEY))) + safe_fclose (&tempfp); + + if (flags & SENDMAILX) + { + if (mutt_builtin_editor (msg->content->filename, msg, cur) == -1) + goto cleanup; + } + else if (! (flags & SENDBATCH)) + { + struct stat st; + time_t mtime = mutt_decrease_mtime (msg->content->filename, NULL); + + mutt_update_encoding (msg->content); + + /* + * Select whether or not the user's editor should be called now. We + * don't want to do this when: + * 1) we are sending a key/cert + * 2) we are forwarding a message and the user doesn't want to edit it. + * This is controled by the quadoption $forward_edit. However, if + * both $edit_headers and $autoedit are set, we want to ignore the + * setting of $forward_edit because the user probably needs to add the + * recipients. + */ + if (! (flags & SENDKEY) && + ((flags & SENDFORWARD) == 0 || + (option (OPTEDITHDRS) && option (OPTAUTOEDIT)) || + query_quadoption (OPT_FORWEDIT, _("Edit forwarded message?")) == M_YES)) + { + /* If the this isn't a text message, look for a mailcap edit command */ + if (mutt_needs_mailcap (msg->content)) + mutt_edit_attachment (msg->content); + else if (!Editor || mutt_strcmp ("builtin", Editor) == 0) + mutt_builtin_editor (msg->content->filename, msg, cur); + else if (option (OPTEDITHDRS)) + { + mutt_env_to_local (msg->env); + mutt_edit_headers (Editor, msg->content->filename, msg, fcc, sizeof (fcc)); + mutt_env_to_idna (msg->env, NULL, NULL); + } + else + mutt_edit_file (Editor, msg->content->filename); + } + + if (! (flags & (SENDPOSTPONED | SENDFORWARD | SENDKEY | SENDRESEND))) + { + if (stat (msg->content->filename, &st) == 0) + { + /* if the file was not modified, bail out now */ + if (mtime == st.st_mtime && !msg->content->next && + query_quadoption (OPT_ABORT, _("Abort unmodified message?")) == M_YES) + { + mutt_message _("Aborted unmodified message."); + goto cleanup; + } + } + else + mutt_perror (msg->content->filename); + } + } + + /* specify a default fcc. if we are in batchmode, only save a copy of + * the message if the value of $copy is yes or ask-yes */ + + if (!fcc[0] && !(flags & (SENDPOSTPONED)) && (!(flags & SENDBATCH) || (quadoption (OPT_COPY) & 0x1))) + { + /* set the default FCC */ + if (!msg->env->from) + { + msg->env->from = mutt_default_from (); + killfrom = 1; /* no need to check $use_from because if the user specified + a from address it would have already been set by now */ + } + mutt_select_fcc (fcc, sizeof (fcc), msg); + if (killfrom) + { + rfc822_free_address (&msg->env->from); + killfrom = 0; + } + } + + + mutt_update_encoding (msg->content); + + if (! (flags & (SENDMAILX | SENDBATCH))) + { +main_loop: + + fcc_error = 0; /* reset value since we may have failed before */ + mutt_pretty_mailbox (fcc); + i = mutt_compose_menu (msg, fcc, sizeof (fcc), cur); + if (i == -1) + { + /* abort */ +#ifdef USE_NNTP + if (flags & SENDNEWS) + mutt_message _("Article not posted."); + else +#endif + mutt_message _("Mail not sent."); + goto cleanup; + } + else if (i == 1) + { + /* postpone the message until later. */ + if (msg->content->next) + msg->content = mutt_make_multipart (msg->content); + + /* + * make sure the message is written to the right part of a maildir + * postponed folder. + */ + msg->read = 0; msg->old = 0; + + encode_descriptions (msg->content, 1); + mutt_prepare_envelope (msg->env, 0); + mutt_env_to_idna (msg->env, NULL, NULL); /* Handle bad IDNAs the next time. */ + + if (!Postponed || mutt_write_fcc (NONULL (Postponed), msg, (cur && (flags & SENDREPLY)) ? cur->env->message_id : NULL, 1, fcc) < 0) + { + msg->content = mutt_remove_multipart (msg->content); + decode_descriptions (msg->content); + mutt_unprepare_envelope (msg->env); + goto main_loop; + } + mutt_update_num_postponed (); + mutt_message _("Message postponed."); + goto cleanup; + } + } + +#ifdef USE_NNTP + if (!(flags & SENDNEWS)) +#endif + if (!msg->env->to && !msg->env->cc && !msg->env->bcc) + { + if (! (flags & SENDBATCH)) + { + mutt_error _("No recipients are specified!"); + goto main_loop; + } + else + { + puts _("No recipients were specified."); + goto cleanup; + } + } + + if (mutt_env_to_idna (msg->env, &tag, &err)) + { + mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err); + FREE (&err); + if (!(flags & SENDBATCH)) + goto main_loop; + else + goto cleanup; + } + + if (!msg->env->subject && ! (flags & SENDBATCH) && + (i = query_quadoption (OPT_SUBJECT, _("No subject, abort sending?"))) != M_NO) + { + /* if the abort is automatic, print an error message */ + if (quadoption (OPT_SUBJECT) == M_YES) + mutt_error _("No subject specified."); + goto main_loop; + } +#ifdef USE_NNTP + if ((flags & SENDNEWS) && !msg->env->subject) + { + mutt_error _("No subject specified."); + goto main_loop; + } + + if ((flags & SENDNEWS) && !msg->env->newsgroups) + { + mutt_error _("No newsgroup specified."); + goto main_loop; + } +#endif + + if (msg->content->next) + msg->content = mutt_make_multipart (msg->content); + + /* + * Ok, we need to do it this way instead of handling all fcc stuff in + * one place in order to avoid going to main_loop with encoded "env" + * in case of error. Ugh. + */ + + encode_descriptions (msg->content, 1); + + /* + * Make sure that clear_content and free_clear_content are + * properly initialized -- we may visit this particular place in + * the code multiple times, including after a failed call to + * mutt_protect(). + */ + + clear_content = NULL; + free_clear_content = 0; + + if (WithCrypto) + { + if (msg->security) + { + /* save the decrypted attachments */ + clear_content = msg->content; + + if ((crypt_get_keys (msg, &pgpkeylist) == -1) || + mutt_protect (msg, cur, pgpkeylist) == -1) + { + msg->content = mutt_remove_multipart (msg->content); + + FREE (&pgpkeylist); + + decode_descriptions (msg->content); + goto main_loop; + } + encode_descriptions (msg->content, 0); + } + + /* + * at this point, msg->content is one of the following three things: + * - multipart/signed. In this case, clear_content is a child. + * - multipart/encrypted. In this case, clear_content exists + * independently + * - application/pgp. In this case, clear_content exists independently. + * - something else. In this case, it's the same as clear_content. + */ + + /* This is ugly -- lack of "reporting back" from mutt_protect(). */ + + if (clear_content && (msg->content != clear_content) + && (msg->content->parts != clear_content)) + free_clear_content = 1; + } + + if (!option (OPTNOCURSES) && !(flags & SENDMAILX)) + mutt_message _("Sending message..."); + + mutt_prepare_envelope (msg->env, 1); + + /* save a copy of the message, if necessary. */ + + mutt_expand_path (fcc, sizeof (fcc)); + + + /* Don't save a copy when we are in batch-mode, and the FCC + * folder is on an IMAP server: This would involve possibly lots + * of user interaction, which is not available in batch mode. + * + * Note: A patch to fix the problems with the use of IMAP servers + * from non-curses mode is available from Brendan Cully. However, + * I'd like to think a bit more about this before including it. + */ + +#ifdef USE_IMAP + if ((flags & SENDBATCH) && fcc[0] && mx_is_imap (fcc)) + fcc[0] = '\0'; +#endif + + if (*fcc && mutt_strcmp ("/dev/null", fcc) != 0) + { + BODY *tmpbody = msg->content; + BODY *save_sig = NULL; + BODY *save_parts = NULL; + + if (WithCrypto && msg->security && option (OPTFCCCLEAR)) + msg->content = clear_content; + + /* check to see if the user wants copies of all attachments */ + if (!option (OPTFCCATTACH) && msg->content->type == TYPEMULTIPART) + { + if (WithCrypto + && (mutt_strcmp (msg->content->subtype, "encrypted") == 0 || + mutt_strcmp (msg->content->subtype, "signed") == 0)) + { + if (clear_content->type == TYPEMULTIPART) + { + if(!(msg->security & ENCRYPT) && (msg->security & SIGN)) + { + /* save initial signature and attachments */ + save_sig = msg->content->parts->next; + save_parts = clear_content->parts->next; + } + + /* this means writing only the main part */ + msg->content = clear_content->parts; + + if (mutt_protect (msg, cur, pgpkeylist) == -1) + { + /* we can't do much about it at this point, so + * fallback to saving the whole thing to fcc + */ + msg->content = tmpbody; + save_sig = NULL; + goto full_fcc; + } + + save_content = msg->content; + } + } + else + msg->content = msg->content->parts; + } + +full_fcc: + if (msg->content) + { + /* update received time so that when storing to a mbox-style folder + * the From_ line contains the current time instead of when the + * message was first postponed. + */ + msg->received = time (NULL); + if (mutt_write_fcc (fcc, msg, NULL, 0, NULL) == -1) + { + /* + * Error writing FCC, we should abort sending. + */ + fcc_error = 1; + } + } + + msg->content = tmpbody; + + if (WithCrypto && save_sig) + { + /* cleanup the second signature structures */ + if (save_content->parts) + { + mutt_free_body (&save_content->parts->next); + save_content->parts = NULL; + } + mutt_free_body (&save_content); + + /* restore old signature and attachments */ + msg->content->parts->next = save_sig; + msg->content->parts->parts->next = save_parts; + } + else if (WithCrypto && save_content) + { + /* destroy the new encrypted body. */ + mutt_free_body (&save_content); + } + + } + + + /* + * Don't attempt to send the message if the FCC failed. Just pretend + * the send failed as well so we give the user a chance to fix the + * error. + */ + if (fcc_error || (i = send_message (msg)) == -1) + { + if (!(flags & SENDBATCH)) + { + if (!WithCrypto) + ; + else if ((msg->security & ENCRYPT) || + ((msg->security & SIGN) + && msg->content->type == TYPEAPPLICATION)) + { + mutt_free_body (&msg->content); /* destroy PGP data */ + msg->content = clear_content; /* restore clear text. */ + } + else if ((msg->security & SIGN) && msg->content->type == TYPEMULTIPART) + { + mutt_free_body (&msg->content->parts->next); /* destroy sig */ + msg->content = mutt_remove_multipart (msg->content); + } + + msg->content = mutt_remove_multipart (msg->content); + decode_descriptions (msg->content); + mutt_unprepare_envelope (msg->env); + goto main_loop; + } + else + { + puts _("Could not send the message."); + goto cleanup; + } + } + else if (!option (OPTNOCURSES) && ! (flags & SENDMAILX)) + mutt_message (i != 0 ? _("Sending in background.") : +#ifdef USE_NNTP + (flags & SENDNEWS) ? _("Article posted.") : _("Mail sent.")); +#else + _("Mail sent.")); +#endif + + if (WithCrypto && (msg->security & ENCRYPT)) + FREE (&pgpkeylist); + + if (WithCrypto && free_clear_content) + mutt_free_body (&clear_content); + + if (flags & SENDREPLY) + { + if (cur && ctx) + mutt_set_flag (ctx, cur, M_REPLIED, 1); + else if (!(flags & SENDPOSTPONED) && ctx && ctx->tagged) + { + for (i = 0; i < ctx->vcount; i++) + if (ctx->hdrs[ctx->v2r[i]]->tagged) + mutt_set_flag (ctx, ctx->hdrs[ctx->v2r[i]], M_REPLIED, 1); + } + } + + + rv = 0; + +cleanup: + + if ((WithCrypto & APPLICATION_PGP) && (flags & SENDPOSTPONED)) + { + if(signas) + { + FREE (&PgpSignAs); + PgpSignAs = signas; + } + } + + safe_fclose (&tempfp); + mutt_free_header (&msg); + + return rv; +} + +/* vim: set sw=2: */ diff --git a/sendlib.c b/sendlib.c new file mode 100644 index 0000000..8128089 --- /dev/null +++ b/sendlib.c @@ -0,0 +1,2593 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#define _SENDLIB_C 1 + +#include "mutt.h" +#include "mutt_curses.h" +#include "rfc2047.h" +#include "rfc2231.h" +#include "mx.h" +#include "mime.h" +#include "mailbox.h" +#include "copy.h" +#include "pager.h" +#include "charset.h" +#include "mutt_crypt.h" +#include "mutt_idna.h" + +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> +#include <ctype.h> +#include <sys/stat.h> +#include <signal.h> +#include <sys/wait.h> +#include <fcntl.h> + +#ifdef USE_NNTP +#include <nntp.h> +#endif + +#ifdef HAVE_SYSEXITS_H +#include <sysexits.h> +#else /* Make sure EX_OK is defined <philiph@pobox.com> */ +#define EX_OK 0 +#endif + +/* If you are debugging this file, comment out the following line. */ +/*#define NDEBUG*/ + +#ifdef NDEBUG +#define assert(x) +#else +#include <assert.h> +#endif + +extern char RFC822Specials[]; + +static struct sysexits +{ + int v; + const char *str; +} +sysexits_h[] = +{ +#ifdef EX_USAGE + { 0xff & EX_USAGE, "Bad usage." }, +#endif +#ifdef EX_DATAERR + { 0xff & EX_DATAERR, "Data format error." }, +#endif +#ifdef EX_NOINPUT + { 0xff & EX_NOINPUT, "Cannot open input." }, +#endif +#ifdef EX_NOUSER + { 0xff & EX_NOUSER, "User unknown." }, +#endif +#ifdef EX_NOHOST + { 0xff & EX_NOHOST, "Host unknown." }, +#endif +#ifdef EX_UNAVAILABLE + { 0xff & EX_UNAVAILABLE, "Service unavailable." }, +#endif +#ifdef EX_SOFTWARE + { 0xff & EX_SOFTWARE, "Internal error." }, +#endif +#ifdef EX_OSERR + { 0xff & EX_OSERR, "Operating system error." }, +#endif +#ifdef EX_OSFILE + { 0xff & EX_OSFILE, "System file missing." }, +#endif +#ifdef EX_CANTCREAT + { 0xff & EX_CANTCREAT, "Can't create output." }, +#endif +#ifdef EX_IOERR + { 0xff & EX_IOERR, "I/O error." }, +#endif +#ifdef EX_TEMPFAIL + { 0xff & EX_TEMPFAIL, "Deferred." }, +#endif +#ifdef EX_PROTOCOL + { 0xff & EX_PROTOCOL, "Remote protocol error." }, +#endif +#ifdef EX_NOPERM + { 0xff & EX_NOPERM, "Insufficient permission." }, +#endif +#ifdef EX_CONFIG + { 0xff & EX_NOPERM, "Local configuration error." }, +#endif + { S_ERR, "Exec error." }, + { -1, NULL} +}; + + + +#define DISPOSITION(X) X==DISPATTACH?"attachment":"inline" + +const char MimeSpecials[] = "@.,;:<>[]\\\"()?/= \t"; + +char B64Chars[64] = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', + 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', '+', '/' +}; + +static char MsgIdPfx = 'A'; + +static void transform_to_7bit (BODY *a, FILE *fpin); + +static void encode_quoted (FGETCONV * fc, FILE *fout, int istext) +{ + int c, linelen = 0; + char line[77], savechar; + + while ((c = fgetconv (fc)) != EOF) + { + /* Wrap the line if needed. */ + if (linelen == 76 && ((istext && c != '\n') || !istext)) + { + /* If the last character is "quoted", then be sure to move all three + * characters to the next line. Otherwise, just move the last + * character... + */ + if (line[linelen-3] == '=') + { + line[linelen-3] = 0; + fputs (line, fout); + fputs ("=\n", fout); + line[linelen] = 0; + line[0] = '='; + line[1] = line[linelen-2]; + line[2] = line[linelen-1]; + linelen = 3; + } + else + { + savechar = line[linelen-1]; + line[linelen-1] = '='; + line[linelen] = 0; + fputs (line, fout); + fputc ('\n', fout); + line[0] = savechar; + linelen = 1; + } + } + + /* Escape lines that begin with/only contain "the message separator". */ + if (linelen == 4 && !mutt_strncmp ("From", line, 4)) + { + strfcpy (line, "=46rom", sizeof (line)); + linelen = 6; + } + else if (linelen == 4 && !mutt_strncmp ("from", line, 4)) + { + strfcpy (line, "=66rom", sizeof (line)); + linelen = 6; + } + else if (linelen == 1 && line[0] == '.') + { + strfcpy (line, "=2E", sizeof (line)); + linelen = 3; + } + +#ifdef USE_LIBESMTP +# include "mutt_libesmtp.h" +#endif /* USE_LIBESMTP */ + + if (c == '\n' && istext) + { + /* Check to make sure there is no trailing space on this line. */ + if (linelen > 0 && (line[linelen-1] == ' ' || line[linelen-1] == '\t')) + { + if (linelen < 74) + { + sprintf (line+linelen-1, "=%2.2X", (unsigned char) line[linelen-1]); + fputs (line, fout); + } + else + { + int savechar = line[linelen-1]; + + line[linelen-1] = '='; + line[linelen] = 0; + fputs (line, fout); + fprintf (fout, "\n=%2.2X", (unsigned char) savechar); + } + } + else + { + line[linelen] = 0; + fputs (line, fout); + } + fputc ('\n', fout); + linelen = 0; + } + else if (c != 9 && (c < 32 || c > 126 || c == '=')) + { + /* Check to make sure there is enough room for the quoted character. + * If not, wrap to the next line. + */ + if (linelen > 73) + { + line[linelen++] = '='; + line[linelen] = 0; + fputs (line, fout); + fputc ('\n', fout); + linelen = 0; + } + sprintf (line+linelen,"=%2.2X", (unsigned char) c); + linelen += 3; + } + else + { + /* Don't worry about wrapping the line here. That will happen during + * the next iteration when I'll also know what the next character is. + */ + line[linelen++] = c; + } + } + + /* Take care of anything left in the buffer */ + if (linelen > 0) + { + if (line[linelen-1] == ' ' || line[linelen-1] == '\t') + { + /* take care of trailing whitespace */ + if (linelen < 74) + sprintf (line+linelen-1, "=%2.2X", (unsigned char) line[linelen-1]); + else + { + savechar = line[linelen-1]; + line[linelen-1] = '='; + line[linelen] = 0; + fputs (line, fout); + fputc ('\n', fout); + sprintf (line, "=%2.2X", (unsigned char) savechar); + } + } + else + line[linelen] = 0; + fputs (line, fout); + } +} + +static char b64_buffer[3]; +static short b64_num; +static short b64_linelen; + +static void b64_flush(FILE *fout) +{ + short i; + + if(!b64_num) + return; + + if(b64_linelen >= 72) + { + fputc('\n', fout); + b64_linelen = 0; + } + + for(i = b64_num; i < 3; i++) + b64_buffer[i] = '\0'; + + fputc(B64Chars[(b64_buffer[0] >> 2) & 0x3f], fout); + b64_linelen++; + fputc(B64Chars[((b64_buffer[0] & 0x3) << 4) | ((b64_buffer[1] >> 4) & 0xf) ], fout); + b64_linelen++; + + if(b64_num > 1) + { + fputc(B64Chars[((b64_buffer[1] & 0xf) << 2) | ((b64_buffer[2] >> 6) & 0x3) ], fout); + b64_linelen++; + if(b64_num > 2) + { + fputc(B64Chars[b64_buffer[2] & 0x3f], fout); + b64_linelen++; + } + } + + while(b64_linelen % 4) + { + fputc('=', fout); + b64_linelen++; + } + + b64_num = 0; +} + + +static void b64_putc(char c, FILE *fout) +{ + if(b64_num == 3) + b64_flush(fout); + + b64_buffer[b64_num++] = c; +} + + +static void encode_base64 (FGETCONV * fc, FILE *fout, int istext) +{ + int ch, ch1 = EOF; + + b64_num = b64_linelen = 0; + + while ((ch = fgetconv (fc)) != EOF) + { + if (istext && ch == '\n' && ch1 != '\r') + b64_putc('\r', fout); + b64_putc(ch, fout); + ch1 = ch; + } + b64_flush(fout); + fputc('\n', fout); +} + +static void encode_8bit (FGETCONV *fc, FILE *fout, int istext) +{ + int ch; + + while ((ch = fgetconv (fc)) != EOF) + fputc (ch, fout); +} + + +int mutt_write_mime_header (BODY *a, FILE *f) +{ + PARAMETER *p; + char buffer[STRING]; + char *t; + char *fn; + int len; + int tmplen; + int encode; + + fprintf (f, "Content-Type: %s/%s", TYPE (a), a->subtype); + + if (a->parameter) + { + len = 25 + mutt_strlen (a->subtype); /* approximate len. of content-type */ + + for(p = a->parameter; p; p = p->next) + { + char *tmp; + + if(!p->value) + continue; + + fputc (';', f); + + buffer[0] = 0; + tmp = safe_strdup (p->value); + encode = rfc2231_encode_string (&tmp); + rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials); + + /* Dirty hack to make messages readable by Outlook Express + * for the Mac: force quotes around the boundary parameter + * even when they aren't needed. + */ + + if (!ascii_strcasecmp (p->attribute, "boundary") && !strcmp (buffer, tmp)) + snprintf (buffer, sizeof (buffer), "\"%s\"", tmp); + + FREE (&tmp); + + tmplen = mutt_strlen (buffer) + mutt_strlen (p->attribute) + 1; + + if (len + tmplen + 2 > 76) + { + fputs ("\n\t", f); + len = tmplen + 8; + } + else + { + fputc (' ', f); + len += tmplen + 1; + } + + fprintf (f, "%s%s=%s", p->attribute, encode ? "*" : "", buffer); + + } + } + + fputc ('\n', f); + + if (a->description) + fprintf(f, "Content-Description: %s\n", a->description); + + fprintf (f, "Content-Disposition: %s", DISPOSITION (a->disposition)); + + if (a->use_disp) + { + if(!(fn = a->d_filename)) + fn = a->filename; + + if (fn) + { + char *tmp; + + /* Strip off the leading path... */ + if ((t = strrchr (fn, '/'))) + t++; + else + t = fn; + + buffer[0] = 0; + tmp = safe_strdup (t); + encode = rfc2231_encode_string (&tmp); + rfc822_cat (buffer, sizeof (buffer), tmp, MimeSpecials); + FREE (&tmp); + fprintf (f, "; filename%s=%s", encode ? "*" : "", buffer); + } + } + + fputc ('\n', f); + + if (a->encoding != ENC7BIT) + fprintf(f, "Content-Transfer-Encoding: %s\n", ENCODING (a->encoding)); + + /* Do NOT add the terminator here!!! */ + return (ferror (f) ? -1 : 0); +} + +# define write_as_text_part(a) (mutt_is_text_part(a) \ + || ((WithCrypto & APPLICATION_PGP)\ + && mutt_is_application_pgp(a))) + +int mutt_write_mime_body (BODY *a, FILE *f) +{ + char *p, boundary[SHORT_STRING]; + char send_charset[SHORT_STRING]; + FILE *fpin; + BODY *t; + FGETCONV *fc; + + if (a->type == TYPEMULTIPART) + { + /* First, find the boundary to use */ + if (!(p = mutt_get_parameter ("boundary", a->parameter))) + { + dprint (1, (debugfile, "mutt_write_mime_body(): no boundary parameter found!\n")); + mutt_error _("No boundary parameter found! [report this error]"); + return (-1); + } + strfcpy (boundary, p, sizeof (boundary)); + + for (t = a->parts; t ; t = t->next) + { + fprintf (f, "\n--%s\n", boundary); + if (mutt_write_mime_header (t, f) == -1) + return -1; + fputc ('\n', f); + if (mutt_write_mime_body (t, f) == -1) + return -1; + } + fprintf (f, "\n--%s--\n", boundary); + return (ferror (f) ? -1 : 0); + } + + /* This is pretty gross, but it's the best solution for now... */ + if ((WithCrypto & APPLICATION_PGP) + && a->type == TYPEAPPLICATION + && mutt_strcmp (a->subtype, "pgp-encrypted") == 0) + { + fputs ("Version: 1\n", f); + return 0; + } + + if ((fpin = fopen (a->filename, "r")) == NULL) + { + dprint(1,(debugfile, "write_mime_body: %s no longer exists!\n",a->filename)); + mutt_error (_("%s no longer exists!"), a->filename); + return -1; + } + + if (a->type == TYPETEXT && (!a->noconv)) + fc = fgetconv_open (fpin, Charset, + mutt_get_body_charset (send_charset, sizeof (send_charset), a), + 0); + else + fc = fgetconv_open (fpin, 0, 0, 0); + + if (a->encoding == ENCQUOTEDPRINTABLE) + encode_quoted (fc, f, write_as_text_part (a)); + else if (a->encoding == ENCBASE64) + encode_base64 (fc, f, write_as_text_part (a)); + else if (a->type == TYPETEXT && (!a->noconv)) + encode_8bit (fc, f, write_as_text_part (a)); + else + mutt_copy_stream (fpin, f); + + fgetconv_close (&fc); + fclose (fpin); + + return (ferror (f) ? -1 : 0); +} + +#undef write_as_text_part + +#define BOUNDARYLEN 16 +void mutt_generate_boundary (PARAMETER **parm) +{ + char rs[BOUNDARYLEN + 1]; + char *p = rs; + int i; + + rs[BOUNDARYLEN] = 0; + for (i=0;i<BOUNDARYLEN;i++) + *p++ = B64Chars[LRAND() % sizeof (B64Chars)]; + *p = 0; + + mutt_set_parameter ("boundary", rs, parm); +} + +typedef struct +{ + int from; + int whitespace; + int dot; + int linelen; + int was_cr; +} +CONTENT_STATE; + + +static void update_content_info (CONTENT *info, CONTENT_STATE *s, char *d, size_t dlen) +{ + int from = s->from; + int whitespace = s->whitespace; + int dot = s->dot; + int linelen = s->linelen; + int was_cr = s->was_cr; + + if (!d) /* This signals EOF */ + { + if (was_cr) + info->binary = 1; + if (linelen > info->linemax) + info->linemax = linelen; + + return; + } + + for (; dlen; d++, dlen--) + { + char ch = *d; + + if (was_cr) + { + was_cr = 0; + if (ch != '\n') + { + info->binary = 1; + } + else + { + if (whitespace) info->space = 1; + if (dot) info->dot = 1; + if (linelen > info->linemax) info->linemax = linelen; + whitespace = 0; + dot = 0; + linelen = 0; + continue; + } + } + + linelen++; + if (ch == '\n') + { + info->crlf++; + if (whitespace) info->space = 1; + if (dot) info->dot = 1; + if (linelen > info->linemax) info->linemax = linelen; + whitespace = 0; + linelen = 0; + dot = 0; + } + else if (ch == '\r') + { + info->crlf++; + info->cr = 1; + was_cr = 1; + continue; + } + else if (ch & 0x80) + info->hibin++; + else if (ch == '\t' || ch == '\f') + { + info->ascii++; + whitespace++; + } + else if (ch < 32 || ch == 127) + info->lobin++; + else + { + if (linelen == 1) + { + if ((ch == 'F') || (ch == 'f')) + from = 1; + else + from = 0; + if (ch == '.') + dot = 1; + else + dot = 0; + } + else if (from) + { + if (linelen == 2 && ch != 'r') from = 0; + else if (linelen == 3 && ch != 'o') from = 0; + else if (linelen == 4) + { + if (ch == 'm') info->from = 1; + from = 0; + } + } + if (ch == ' ') whitespace++; + info->ascii++; + } + + if (linelen > 1) dot = 0; + if (ch != ' ' && ch != '\t') whitespace = 0; + } + + s->from = from; + s->whitespace = whitespace; + s->dot = dot; + s->linelen = linelen; + s->was_cr = was_cr; + +} + +/* Define as 1 if iconv sometimes returns -1(EILSEQ) instead of transcribing. */ +#define BUGGY_ICONV 1 + +/* + * Find the best charset conversion of the file from fromcode into one + * of the tocodes. If successful, set *tocode and CONTENT *info and + * return the number of characters converted inexactly. If no + * conversion was possible, return -1. + * + * We convert via UTF-8 in order to avoid the condition -1(EINVAL), + * which would otherwise prevent us from knowing the number of inexact + * conversions. Where the candidate target charset is UTF-8 we avoid + * doing the second conversion because iconv_open("UTF-8", "UTF-8") + * fails with some libraries. + * + * We assume that the output from iconv is never more than 4 times as + * long as the input for any pair of charsets we might be interested + * in. + */ +static size_t convert_file_to (FILE *file, const char *fromcode, + int ncodes, const char **tocodes, + int *tocode, CONTENT *info) +{ +#ifdef HAVE_ICONV + iconv_t cd1, *cd; + char bufi[256], bufu[512], bufo[4 * sizeof (bufi)]; + ICONV_CONST char *ib, *ub; + char *ob; + size_t ibl, obl, ubl, ubl1, n, ret; + int i; + CONTENT *infos; + CONTENT_STATE *states; + size_t *score; + + cd1 = mutt_iconv_open ("UTF-8", fromcode, 0); + if (cd1 == (iconv_t)(-1)) + return -1; + + cd = safe_calloc (ncodes, sizeof (iconv_t)); + score = safe_calloc (ncodes, sizeof (size_t)); + states = safe_calloc (ncodes, sizeof (CONTENT_STATE)); + infos = safe_calloc (ncodes, sizeof (CONTENT)); + + for (i = 0; i < ncodes; i++) + if (ascii_strcasecmp (tocodes[i], "UTF-8")) + cd[i] = mutt_iconv_open (tocodes[i], "UTF-8", 0); + else + /* Special case for conversion to UTF-8 */ + cd[i] = (iconv_t)(-1), score[i] = (size_t)(-1); + + rewind (file); + ibl = 0; + for (;;) + { + + /* Try to fill input buffer */ + n = fread (bufi + ibl, 1, sizeof (bufi) - ibl, file); + ibl += n; + + /* Convert to UTF-8 */ + ib = bufi; + ob = bufu, obl = sizeof (bufu); + n = iconv (cd1, ibl ? &ib : 0, &ibl, &ob, &obl); + assert (n == (size_t)(-1) || !n || ICONV_NONTRANS); + if (n == (size_t)(-1) && + ((errno != EINVAL && errno != E2BIG) || ib == bufi)) + { + assert (errno == EILSEQ || + (errno == EINVAL && ib == bufi && ibl < sizeof (bufi))); + ret = (size_t)(-1); + break; + } + ubl1 = ob - bufu; + + /* Convert from UTF-8 */ + for (i = 0; i < ncodes; i++) + if (cd[i] != (iconv_t)(-1) && score[i] != (size_t)(-1)) + { + ub = bufu, ubl = ubl1; + ob = bufo, obl = sizeof (bufo); + n = iconv (cd[i], (ibl || ubl) ? &ub : 0, &ubl, &ob, &obl); + if (n == (size_t)(-1)) + { + assert (errno == E2BIG || + (BUGGY_ICONV && (errno == EILSEQ || errno == ENOENT))); + score[i] = (size_t)(-1); + } + else + { + score[i] += n; + update_content_info (&infos[i], &states[i], bufo, ob - bufo); + } + } + else if (cd[i] == (iconv_t)(-1) && score[i] == (size_t)(-1)) + /* Special case for conversion to UTF-8 */ + update_content_info (&infos[i], &states[i], bufu, ubl1); + + if (ibl) + /* Save unused input */ + memmove (bufi, ib, ibl); + else if (!ubl1 && ib < bufi + sizeof (bufi)) + { + ret = 0; + break; + } + } + + if (!ret) + { + /* Find best score */ + ret = (size_t)(-1); + for (i = 0; i < ncodes; i++) + { + if (cd[i] == (iconv_t)(-1) && score[i] == (size_t)(-1)) + { + /* Special case for conversion to UTF-8 */ + *tocode = i; + ret = 0; + break; + } + else if (cd[i] == (iconv_t)(-1) || score[i] == (size_t)(-1)) + continue; + else if (ret == (size_t)(-1) || score[i] < ret) + { + *tocode = i; + ret = score[i]; + if (!ret) + break; + } + } + if (ret != (size_t)(-1)) + { + memcpy (info, &infos[*tocode], sizeof(CONTENT)); + update_content_info (info, &states[*tocode], 0, 0); /* EOF */ + } + } + + for (i = 0; i < ncodes; i++) + if (cd[i] != (iconv_t)(-1)) + iconv_close (cd[i]); + + iconv_close (cd1); + FREE (&cd); + FREE (&infos); + FREE (&score); + FREE (&states); + + return ret; +#else + return -1; +#endif /* !HAVE_ICONV */ +} + +/* + * Find the first of the fromcodes that gives a valid conversion and + * the best charset conversion of the file into one of the tocodes. If + * successful, set *fromcode and *tocode to dynamically allocated + * strings, set CONTENT *info, and return the number of characters + * converted inexactly. If no conversion was possible, return -1. + * + * Both fromcodes and tocodes may be colon-separated lists of charsets. + * However, if fromcode is zero then fromcodes is assumed to be the + * name of a single charset even if it contains a colon. + */ +static size_t convert_file_from_to (FILE *file, + const char *fromcodes, const char *tocodes, + char **fromcode, char **tocode, CONTENT *info) +{ + char *fcode; + char **tcode; + const char *c, *c1; + size_t ret; + int ncodes, i, cn; + + /* Count the tocodes */ + ncodes = 0; + for (c = tocodes; c; c = c1 ? c1 + 1 : 0) + { + if ((c1 = strchr (c, ':')) == c) + continue; + ++ncodes; + } + + /* Copy them */ + tcode = safe_malloc (ncodes * sizeof (char *)); + for (c = tocodes, i = 0; c; c = c1 ? c1 + 1 : 0, i++) + { + if ((c1 = strchr (c, ':')) == c) + continue; + tcode[i] = mutt_substrdup (c, c1); + } + + ret = (size_t)(-1); + if (fromcode) + { + /* Try each fromcode in turn */ + for (c = fromcodes; c; c = c1 ? c1 + 1 : 0) + { + if ((c1 = strchr (c, ':')) == c) + continue; + fcode = mutt_substrdup (c, c1); + + ret = convert_file_to (file, fcode, ncodes, (const char **)tcode, + &cn, info); + if (ret != (size_t)(-1)) + { + *fromcode = fcode; + *tocode = tcode[cn]; + tcode[cn] = 0; + break; + } + FREE (&fcode); + } + } + else + { + /* There is only one fromcode */ + ret = convert_file_to (file, fromcodes, ncodes, (const char **)tcode, + &cn, info); + if (ret != (size_t)(-1)) + { + *tocode = tcode[cn]; + tcode[cn] = 0; + } + } + + /* Free memory */ + for (i = 0; i < ncodes; i++) + FREE (&tcode[i]); + + FREE (tcode); + + return ret; +} + +/* + * Analyze the contents of a file to determine which MIME encoding to use. + * Also set the body charset, sometimes, or not. + */ +CONTENT *mutt_get_content_info (const char *fname, BODY *b) +{ + CONTENT *info; + CONTENT_STATE state; + FILE *fp = NULL; + char *tocode; + char buffer[100]; + char chsbuf[STRING]; + size_t r; + + struct stat sb; + + if(b && !fname) fname = b->filename; + + if (stat (fname, &sb) == -1) + { + mutt_error (_("Can't stat %s: %s"), fname, strerror (errno)); + return NULL; + } + + if (!S_ISREG(sb.st_mode)) + { + mutt_error (_("%s isn't a regular file."), fname); + return NULL; + } + + if ((fp = fopen (fname, "r")) == NULL) + { + dprint (1, (debugfile, "mutt_get_content_info: %s: %s (errno %d).\n", + fname, strerror (errno), errno)); + return (NULL); + } + + info = safe_calloc (1, sizeof (CONTENT)); + memset (&state, 0, sizeof (state)); + + if (b != NULL && b->type == TYPETEXT && (!b->noconv && !b->force_charset)) + { + char *chs = mutt_get_parameter ("charset", b->parameter); + if (Charset && (chs || SendCharset) && + convert_file_from_to (fp, Charset, chs ? chs : SendCharset, + 0, &tocode, info) != (size_t)(-1)) + { + if (!chs) + { + mutt_canonical_charset (chsbuf, sizeof (chsbuf), tocode); + mutt_set_parameter ("charset", chsbuf, &b->parameter); + } + FREE (&tocode); + safe_fclose (&fp); + return info; + } + } + + rewind (fp); + while ((r = fread (buffer, 1, sizeof(buffer), fp))) + update_content_info (info, &state, buffer, r); + update_content_info (info, &state, 0, 0); + + safe_fclose (&fp); + + if (b != NULL && b->type == TYPETEXT && (!b->noconv && !b->force_charset)) + mutt_set_parameter ("charset", (!info->hibin ? "us-ascii" : + Charset && !mutt_is_us_ascii (Charset) ? Charset : "unknown-8bit"), + &b->parameter); + + return info; +} + +/* Given a file with path ``s'', see if there is a registered MIME type. + * returns the major MIME type, and copies the subtype to ``d''. First look + * for ~/.mime.types, then look in a system mime.types if we can find one. + * The longest match is used so that we can match `ps.gz' when `gz' also + * exists. + */ + +int mutt_lookup_mime_type (BODY *att, const char *path) +{ + FILE *f; + char *p, *q, *ct; + char buf[LONG_STRING]; + char subtype[STRING], xtype[STRING]; + int count; + int szf, sze, cur_sze; + int type; + + *subtype = '\0'; + *xtype = '\0'; + type = TYPEOTHER; + cur_sze = 0; + + szf = mutt_strlen (path); + + for (count = 0 ; count < 3 ; count++) + { + /* + * can't use strtok() because we use it in an inner loop below, so use + * a switch statement here instead. + */ + switch (count) + { + case 0: + snprintf (buf, sizeof (buf), "%s/.mime.types", NONULL(Homedir)); + break; + case 1: + strfcpy (buf, SYSCONFDIR"/mime.types", sizeof(buf)); + break; + case 2: + strfcpy (buf, PKGDATADIR"/mime.types", sizeof (buf)); + break; + default: + dprint (1, (debugfile, "mutt_lookup_mime_type: Internal error, count = %d.\n", count)); + goto bye; /* shouldn't happen */ + } + + if ((f = fopen (buf, "r")) != NULL) + { + while (fgets (buf, sizeof (buf) - 1, f) != NULL) + { + /* weed out any comments */ + if ((p = strchr (buf, '#'))) + *p = 0; + + /* remove any leading space. */ + ct = buf; + SKIPWS (ct); + + /* position on the next field in this line */ + if ((p = strpbrk (ct, " \t")) == NULL) + continue; + *p++ = 0; + SKIPWS (p); + + /* cycle through the file extensions */ + while ((p = strtok (p, " \t\n"))) + { + sze = mutt_strlen (p); + if ((sze > cur_sze) && (szf >= sze) && + (mutt_strcasecmp (path + szf - sze, p) == 0 || ascii_strcasecmp (path + szf - sze, p) == 0) && + (szf == sze || path[szf - sze - 1] == '.')) + { + /* get the content-type */ + + if ((p = strchr (ct, '/')) == NULL) + { + /* malformed line, just skip it. */ + break; + } + *p++ = 0; + + for (q = p; *q && !ISSPACE (*q); q++) + ; + + mutt_substrcpy (subtype, p, q, sizeof (subtype)); + + if ((type = mutt_check_mime_type (ct)) == TYPEOTHER) + strfcpy (xtype, ct, sizeof (xtype)); + + cur_sze = sze; + } + p = NULL; + } + } + fclose (f); + } + } + + bye: + + if (type != TYPEOTHER || *xtype != '\0') + { + att->type = type; + mutt_str_replace (&att->subtype, subtype); + mutt_str_replace (&att->xtype, xtype); + } + + return (type); +} + +void mutt_message_to_7bit (BODY *a, FILE *fp) +{ + char temp[_POSIX_PATH_MAX]; + char *line = NULL; + FILE *fpin = NULL; + FILE *fpout = NULL; + struct stat sb; + + if (!a->filename && fp) + fpin = fp; + else if (!a->filename || !(fpin = fopen (a->filename, "r"))) + { + mutt_error (_("Could not open %s"), a->filename ? a->filename : "(null)"); + return; + } + else + { + a->offset = 0; + if (stat (a->filename, &sb) == -1) + { + mutt_perror ("stat"); + fclose (fpin); + } + a->length = sb.st_size; + } + + mutt_mktemp (temp); + if (!(fpout = safe_fopen (temp, "w+"))) + { + mutt_perror ("fopen"); + goto cleanup; + } + + fseek (fpin, a->offset, 0); + a->parts = mutt_parse_messageRFC822 (fpin, a); + + transform_to_7bit (a->parts, fpin); + + mutt_copy_hdr (fpin, fpout, a->offset, a->offset + a->length, + CH_MIME | CH_NONEWLINE | CH_XMIT, NULL); + + fputs ("Mime-Version: 1.0\n", fpout); + mutt_write_mime_header (a->parts, fpout); + fputc ('\n', fpout); + mutt_write_mime_body (a->parts, fpout); + + cleanup: + FREE (&line); + + if (fpin && !fp) + fclose (fpin); + if (fpout) + fclose (fpout); + else + return; + + a->encoding = ENC7BIT; + a->d_filename = a->filename; + if (a->filename && a->unlink) + unlink (a->filename); + a->filename = safe_strdup (temp); + a->unlink = 1; + if(stat (a->filename, &sb) == -1) + { + mutt_perror ("stat"); + return; + } + a->length = sb.st_size; + mutt_free_body (&a->parts); + a->hdr->content = NULL; +} + +static void transform_to_7bit (BODY *a, FILE *fpin) +{ + char buff[_POSIX_PATH_MAX]; + STATE s; + struct stat sb; + + memset (&s, 0, sizeof (s)); + for (; a; a = a->next) + { + if (a->type == TYPEMULTIPART) + { + if (a->encoding != ENC7BIT) + a->encoding = ENC7BIT; + + transform_to_7bit (a->parts, fpin); + } + else if (mutt_is_message_type(a->type, a->subtype)) + { + mutt_message_to_7bit (a, fpin); + } + else + { + mutt_mktemp (buff); + if ((s.fpout = safe_fopen (buff, "w")) == NULL) + { + mutt_perror ("fopen"); + return; + } + s.fpin = fpin; + mutt_decode_attachment (a, &s); + fclose (s.fpout); + a->d_filename = a->filename; + a->filename = safe_strdup (buff); + a->unlink = 1; + if (stat (a->filename, &sb) == -1) + { + mutt_perror ("stat"); + return; + } + a->length = sb.st_size; + + mutt_update_encoding (a); + if (a->encoding == ENC8BIT) + a->encoding = ENCQUOTEDPRINTABLE; + else if(a->encoding == ENCBINARY) + a->encoding = ENCBASE64; + } + } +} + +/* determine which Content-Transfer-Encoding to use */ +static void mutt_set_encoding (BODY *b, CONTENT *info) +{ + char send_charset[SHORT_STRING]; + + if (b->type == TYPETEXT) + { + char *chsname = mutt_get_body_charset (send_charset, sizeof (send_charset), b); + if ((info->lobin && ascii_strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 || (info->from && option (OPTENCODEFROM))) + b->encoding = ENCQUOTEDPRINTABLE; + else if (info->hibin) + b->encoding = option (OPTALLOW8BIT) ? ENC8BIT : ENCQUOTEDPRINTABLE; + else + b->encoding = ENC7BIT; + } + else if (b->type == TYPEMESSAGE || b->type == TYPEMULTIPART) + { + if (info->lobin || info->hibin) + { + if (option (OPTALLOW8BIT) && !info->lobin) + b->encoding = ENC8BIT; + else + mutt_message_to_7bit (b, NULL); + } + else + b->encoding = ENC7BIT; + } + else if (b->type == TYPEAPPLICATION && ascii_strcasecmp (b->subtype, "pgp-keys") == 0) + b->encoding = ENC7BIT; + else +#if 0 + if (info->lobin || info->hibin || info->binary || info->linemax > 990 + || info->cr || (/* option (OPTENCODEFROM) && */ info->from)) +#endif + { + /* Determine which encoding is smaller */ + if (1.33 * (float)(info->lobin+info->hibin+info->ascii) < + 3.0 * (float)(info->lobin + info->hibin) + (float)info->ascii) + b->encoding = ENCBASE64; + else + b->encoding = ENCQUOTEDPRINTABLE; + } +#if 0 + else + b->encoding = ENC7BIT; +#endif +} + +void mutt_stamp_attachment(BODY *a) +{ + a->stamp = time(NULL); +} + +/* Get a body's character set */ + +char *mutt_get_body_charset (char *d, size_t dlen, BODY *b) +{ + char *p = NULL; + + if (b && b->type != TYPETEXT) + return NULL; + + if (b) + p = mutt_get_parameter ("charset", b->parameter); + + if (p) + mutt_canonical_charset (d, dlen, NONULL(p)); + else + strfcpy (d, "us-ascii", dlen); + + return d; +} + + +/* Assumes called from send mode where BODY->filename points to actual file */ +void mutt_update_encoding (BODY *a) +{ + CONTENT *info; + char chsbuff[STRING]; + + /* override noconv when it's us-ascii */ + if (mutt_is_us_ascii (mutt_get_body_charset (chsbuff, sizeof (chsbuff), a))) + a->noconv = 0; + + if (!a->force_charset && !a->noconv) + mutt_delete_parameter ("charset", &a->parameter); + + if ((info = mutt_get_content_info (a->filename, a)) == NULL) + return; + + mutt_set_encoding (a, info); + mutt_stamp_attachment(a); + + FREE (&a->content); + a->content = info; + +} + +BODY *mutt_make_message_attach (CONTEXT *ctx, HEADER *hdr, int attach_msg) +{ + char buffer[LONG_STRING]; + BODY *body; + FILE *fp; + int cmflags, chflags; + int pgp = WithCrypto? hdr->security : 0; + + if (WithCrypto) + { + if ((option(OPTMIMEFORWDECODE) || option(OPTFORWDECRYPT)) && + (hdr->security & ENCRYPT)) { + if (!crypt_valid_passphrase(hdr->security)) + return (NULL); + } + } + + mutt_mktemp (buffer); + if ((fp = safe_fopen (buffer, "w+")) == NULL) + return NULL; + + body = mutt_new_body (); + body->type = TYPEMESSAGE; + body->subtype = safe_strdup ("rfc822"); + body->filename = safe_strdup (buffer); + body->unlink = 1; + body->use_disp = 0; + body->disposition = DISPINLINE; + + mutt_parse_mime_message (ctx, hdr); + + chflags = CH_XMIT; + cmflags = 0; + + /* If we are attaching a message, ignore OPTMIMEFORWDECODE */ + if (!attach_msg && option (OPTMIMEFORWDECODE)) + { + chflags |= CH_MIME | CH_TXTPLAIN; + cmflags = M_CM_DECODE | M_CM_CHARCONV; + if ((WithCrypto & APPLICATION_PGP)) + pgp &= ~PGPENCRYPT; + if ((WithCrypto & APPLICATION_SMIME)) + pgp &= ~SMIMEENCRYPT; + } + else if (WithCrypto + && option (OPTFORWDECRYPT) && (hdr->security & ENCRYPT)) + { + if ((WithCrypto & APPLICATION_PGP) + && mutt_is_multipart_encrypted (hdr->content)) + { + chflags |= CH_MIME | CH_NONEWLINE; + cmflags = M_CM_DECODE_PGP; + pgp &= ~PGPENCRYPT; + } + else if ((WithCrypto & APPLICATION_PGP) + && (mutt_is_application_pgp (hdr->content) & PGPENCRYPT)) + { + chflags |= CH_MIME | CH_TXTPLAIN; + cmflags = M_CM_DECODE | M_CM_CHARCONV; + pgp &= ~PGPENCRYPT; + } + else if ((WithCrypto & APPLICATION_SMIME) + && mutt_is_application_smime (hdr->content) & SMIMEENCRYPT) + { + chflags |= CH_MIME | CH_TXTPLAIN; + cmflags = M_CM_DECODE | M_CM_CHARCONV; + pgp &= ~SMIMEENCRYPT; + } + } + + mutt_copy_message (fp, ctx, hdr, cmflags, chflags); + + fflush(fp); + rewind(fp); + + body->hdr = mutt_new_header(); + body->hdr->offset = 0; + /* we don't need the user headers here */ + body->hdr->env = mutt_read_rfc822_header(fp, body->hdr, 0, 0); + if (WithCrypto) + body->hdr->security = pgp; + mutt_update_encoding (body); + body->parts = body->hdr->content; + + fclose(fp); + + return (body); +} + +BODY *mutt_make_file_attach (const char *path) +{ + BODY *att; + CONTENT *info; + + att = mutt_new_body (); + att->filename = safe_strdup (path); + + /* Attempt to determine the appropriate content-type based on the filename + * suffix. + */ + +#if 0 + + if ((n = mutt_lookup_mime_type (buf, sizeof (buf), xbuf, sizeof (xbuf), path)) != TYPEOTHER + || *xbuf != '\0') + { + att->type = n; + att->subtype = safe_strdup (buf); + att->xtype = safe_strdup (xbuf); + } + +#else + + mutt_lookup_mime_type (att, path); + +#endif + + if ((info = mutt_get_content_info (path, att)) == NULL) + { + mutt_free_body (&att); + return NULL; + } + + if (!att->subtype) + { + if (info->lobin == 0 || (info->lobin + info->hibin + info->ascii)/ info->lobin >= 10) + { + /* + * Statistically speaking, there should be more than 10% "lobin" + * chars if this is really a binary file... + */ + att->type = TYPETEXT; + att->subtype = safe_strdup ("plain"); + } + else + { + att->type = TYPEAPPLICATION; + att->subtype = safe_strdup ("octet-stream"); + } + } + + mutt_update_encoding (att); + return (att); +} + +static int get_toplevel_encoding (BODY *a) +{ + int e = ENC7BIT; + + for (; a; a = a->next) + { + if (a->encoding == ENCBINARY) + return (ENCBINARY); + else if (a->encoding == ENC8BIT) + e = ENC8BIT; + } + + return (e); +} + +BODY *mutt_make_multipart (BODY *b) +{ + BODY *new; + + new = mutt_new_body (); + new->type = TYPEMULTIPART; + new->subtype = safe_strdup ("mixed"); + new->encoding = get_toplevel_encoding (b); + mutt_generate_boundary (&new->parameter); + new->use_disp = 0; + new->disposition = DISPINLINE; + new->parts = b; + + return new; +} + +/* remove the multipart body if it exists */ +BODY *mutt_remove_multipart (BODY *b) +{ + BODY *t; + + if (b->parts) + { + t = b; + b = b->parts; + t->parts = NULL; + mutt_free_body (&t); + } + return b; +} + +char *mutt_make_date (char *s, size_t len) +{ + time_t t = time (NULL); + struct tm *l = localtime (&t); + time_t tz = mutt_local_tz (t); + + tz /= 60; + + snprintf (s, len, "Date: %s, %d %s %d %02d:%02d:%02d %+03d%02d\n", + Weekdays[l->tm_wday], l->tm_mday, Months[l->tm_mon], + l->tm_year + 1900, l->tm_hour, l->tm_min, l->tm_sec, + (int) tz / 60, (int) abs (tz) % 60); + return (s); +} + +/* wrapper around mutt_write_address() so we can handle very large + recipient lists without needing a huge temporary buffer in memory */ +void mutt_write_address_list (ADDRESS *adr, FILE *fp, int linelen, int display) +{ + ADDRESS *tmp; + char buf[LONG_STRING]; + int count = 0; + int len; + + while (adr) + { + tmp = adr->next; + adr->next = NULL; + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), adr, display); + len = mutt_strlen (buf); + if (count && linelen + len > 74) + { + fputs ("\n\t", fp); + linelen = len + 8; /* tab is usually about 8 spaces... */ + } + else + { + if (count && adr->mailbox) + { + fputc (' ', fp); + linelen++; + } + linelen += len; + } + fputs (buf, fp); + adr->next = tmp; + if (!adr->group && adr->next && adr->next->mailbox) + { + linelen++; + fputc (',', fp); + } + adr = adr->next; + count++; + } + fputc ('\n', fp); +} + +/* arbitrary number of elements to grow the array by */ +#define REF_INC 16 + +#define TrimRef 10 + +/* need to write the list in reverse because they are stored in reverse order + * when parsed to speed up threading + */ +void mutt_write_references (LIST *r, FILE *f) +{ + LIST **ref = NULL; + int refcnt = 0, refmax = 0; + + for ( ; (TrimRef == 0 || refcnt < TrimRef) && r ; r = r->next) + { + if (refcnt == refmax) + safe_realloc (&ref, (refmax += REF_INC) * sizeof (LIST *)); + ref[refcnt++] = r; + } + + while (refcnt-- > 0) + { + fputc (' ', f); + fputs (ref[refcnt]->data, f); + } + + FREE (&ref); +} + +/* Note: all RFC2047 encoding should be done outside of this routine, except + * for the "real name." This will allow this routine to be used more than + * once, if necessary. + * + * Likewise, all IDN processing should happen outside of this routine. + * + * mode == 1 => "lite" mode (used for edit_hdrs) + * mode == 0 => normal mode. write full header + MIME headers + * mode == -1 => write just the envelope info (used for postponing messages) + * + * privacy != 0 => will omit any headers which may identify the user. + * Output generated is suitable for being sent through + * anonymous remailer chains. + * + */ + +int mutt_write_rfc822_header (FILE *fp, ENVELOPE *env, BODY *attach, + int mode, int privacy) +{ + char buffer[LONG_STRING]; + char *p; + LIST *tmp = env->userhdrs; + int has_agent = 0; /* user defined user-agent header field exists */ + +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + if (mode == 0 && !privacy) + fputs (mutt_make_date (buffer, sizeof(buffer)), fp); + + /* OPTUSEFROM is not consulted here so that we can still write a From: + * field if the user sets it with the `my_hdr' command + */ + if (env->from && !privacy) + { + buffer[0] = 0; + rfc822_write_address (buffer, sizeof (buffer), env->from, 0); + fprintf (fp, "From: %s\n", buffer); + } + + if (env->to) + { + fputs ("To: ", fp); + mutt_write_address_list (env->to, fp, 4, 0); + } + else if (mode > 0) +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + fputs ("To: \n", fp); + + if (env->cc) + { + fputs ("Cc: ", fp); + mutt_write_address_list (env->cc, fp, 4, 0); + } + else if (mode > 0) +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + fputs ("Cc: \n", fp); + + if (env->bcc) + { + if(mode != 0 || option(OPTWRITEBCC)) + { + fputs ("Bcc: ", fp); + mutt_write_address_list (env->bcc, fp, 5, 0); + } + } + else if (mode > 0) +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + fputs ("Bcc: \n", fp); + +#ifdef USE_NNTP + if (env->newsgroups) + fprintf (fp, "Newsgroups: %s\n", env->newsgroups); + else if (mode == 1 && option (OPTNEWSSEND)) + fputs ("Newsgroups: \n", fp); + + if (env->followup_to) + fprintf (fp, "Followup-To: %s\n", env->followup_to); + else if (mode == 1 && option (OPTNEWSSEND)) + fputs ("Followup-To: \n", fp); + + if (env->x_comment_to) + fprintf (fp, "X-Comment-To: %s\n", env->x_comment_to); + else if (mode == 1 && option (OPTNEWSSEND) && option (OPTXCOMMENTTO)) + fputs ("X-Comment-To: \n", fp); +#endif + + if (env->subject) + fprintf (fp, "Subject: %s\n", env->subject); + else if (mode == 1) + fputs ("Subject: \n", fp); + + /* save message id if the user has set it */ + if (env->message_id && !privacy) + fprintf (fp, "Message-ID: %s\n", env->message_id); + + if (env->reply_to) + { + fputs ("Reply-To: ", fp); + mutt_write_address_list (env->reply_to, fp, 10, 0); + } + else if (mode > 0) + fputs ("Reply-To: \n", fp); + + if (env->mail_followup_to) +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) +#endif + { + fputs ("Mail-Followup-To: ", fp); + mutt_write_address_list (env->mail_followup_to, fp, 18, 0); + } + + if (mode <= 0) + { + if (env->references) + { + fputs ("References:", fp); + mutt_write_references (env->references, fp); + fputc('\n', fp); + } + + /* Add the MIME headers */ + fputs ("Mime-Version: 1.0\n", fp); + mutt_write_mime_header (attach, fp); + } + + if (env->in_reply_to) + { + fputs ("In-Reply-To:", fp); + mutt_write_references (env->in_reply_to, fp); + fputc ('\n', fp); + } + + /* Add any user defined headers */ + for (; tmp; tmp = tmp->next) + { + if ((p = strchr (tmp->data, ':'))) + { + p++; SKIPWS (p); + if (!*p) continue; /* don't emit empty fields. */ + + /* check to see if the user has overridden the user-agent field */ + if (!ascii_strncasecmp ("user-agent", tmp->data, 10)) + { + has_agent = 1; + if (privacy) + continue; + } + + fputs (tmp->data, fp); + fputc ('\n', fp); + } + } + + if (mode == 0 && !privacy && option (OPTXMAILER) && !has_agent) + { + /* Add a vanity header */ + fprintf (fp, "User-Agent: Mutt/%s\n", MUTT_VERSION); + } + + return (ferror (fp) == 0 ? 0 : -1); +} + +static void encode_headers (LIST *h) +{ + char *tmp; + char *p; + int i; + + for (; h; h = h->next) + { + if (!(p = strchr (h->data, ':'))) + continue; + + i = p - h->data; + ++p; SKIPWS (p); + tmp = safe_strdup (p); + + if (!tmp) + continue; + + rfc2047_encode_string (&tmp); + safe_realloc (&h->data, mutt_strlen (h->data) + 2 + mutt_strlen (tmp) + 1); + + sprintf (h->data + i, ": %s", NONULL (tmp)); /* __SPRINTF_CHECKED__ */ + + FREE (&tmp); + } +} + +const char *mutt_fqdn(short may_hide_host) +{ + char *p = NULL, *q; + + if(Fqdn && Fqdn[0] != '@') + { + p = Fqdn; + + if(may_hide_host && option(OPTHIDDENHOST)) + { + if((p = strchr(Fqdn, '.'))) + p++; + + /* sanity check: don't hide the host if + * the fqdn is something like detebe.org. + */ + + if(!p || !(q = strchr(p, '.'))) + p = Fqdn; + } + } + + return p; +} + +char *mutt_gen_msgid (void) +{ + char buf[SHORT_STRING]; + time_t now; + struct tm *tm; + const char *fqdn; + + now = time (NULL); + tm = gmtime (&now); + if(!(fqdn = mutt_fqdn(0))) + fqdn = NONULL(Hostname); + + snprintf (buf, sizeof (buf), "<%d%02d%02d%02d%02d%02d.G%c%d@%s>", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, + tm->tm_min, tm->tm_sec, MsgIdPfx, getpid (), fqdn); + MsgIdPfx = (MsgIdPfx == 'Z') ? 'A' : MsgIdPfx + 1; + return (safe_strdup (buf)); +} + +static RETSIGTYPE alarm_handler (int sig) +{ + SigAlrm = 1; +} + +/* invoke sendmail in a subshell + path (in) path to program to execute + args (in) arguments to pass to program + msg (in) temp file containing message to send + tempfile (out) if sendmail is put in the background, this points + to the temporary file containing the stdout of the + child process */ +static int +send_msg (const char *path, char **args, const char *msg, char **tempfile) +{ + sigset_t set; + int fd, st; + pid_t pid, ppid; + + mutt_block_signals_system (); + + sigemptyset (&set); + /* we also don't want to be stopped right now */ + sigaddset (&set, SIGTSTP); + sigprocmask (SIG_BLOCK, &set, NULL); + + if (SendmailWait >= 0) + { + char tmp[_POSIX_PATH_MAX]; + + mutt_mktemp (tmp); + *tempfile = safe_strdup (tmp); + } + + if ((pid = fork ()) == 0) + { + struct sigaction act, oldalrm; + + /* save parent's ID before setsid() */ + ppid = getppid (); + + /* we want the delivery to continue even after the main process dies, + * so we put ourselves into another session right away + */ + setsid (); + + /* next we close all open files */ +#if defined(OPEN_MAX) + for (fd = 0; fd < OPEN_MAX; fd++) + close (fd); +#elif defined(_POSIX_OPEN_MAX) + for (fd = 0; fd < _POSIX_OPEN_MAX; fd++) + close (fd); +#else + close (0); + close (1); + close (2); +#endif + + /* now the second fork() */ + if ((pid = fork ()) == 0) + { + /* "msg" will be opened as stdin */ + if (open (msg, O_RDONLY, 0) < 0) + { + unlink (msg); + _exit (S_ERR); + } + unlink (msg); + + if (SendmailWait >= 0) + { + /* *tempfile will be opened as stdout */ + if (open (*tempfile, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0600) < 0) + _exit (S_ERR); + /* redirect stderr to *tempfile too */ + if (dup (1) < 0) + _exit (S_ERR); + } + else + { + if (open ("/dev/null", O_WRONLY | O_APPEND) < 0) /* stdout */ + _exit (S_ERR); + if (open ("/dev/null", O_RDWR | O_APPEND) < 0) /* stderr */ + _exit (S_ERR); + } + + execv (path, args); + _exit (S_ERR); + } + else if (pid == -1) + { + unlink (msg); + FREE (tempfile); + _exit (S_ERR); + } + + /* SendmailWait > 0: interrupt waitpid() after SendmailWait seconds + * SendmailWait = 0: wait forever + * SendmailWait < 0: don't wait + */ + if (SendmailWait > 0) + { + SigAlrm = 0; + act.sa_handler = alarm_handler; +#ifdef SA_INTERRUPT + /* need to make sure waitpid() is interrupted on SIGALRM */ + act.sa_flags = SA_INTERRUPT; +#else + act.sa_flags = 0; +#endif + sigemptyset (&act.sa_mask); + sigaction (SIGALRM, &act, &oldalrm); + alarm (SendmailWait); + } + else if (SendmailWait < 0) + _exit (0xff & EX_OK); + + if (waitpid (pid, &st, 0) > 0) + { + st = WIFEXITED (st) ? WEXITSTATUS (st) : S_ERR; + if (SendmailWait && st == (0xff & EX_OK)) + { + unlink (*tempfile); /* no longer needed */ + FREE (tempfile); + } + } + else + { + st = (SendmailWait > 0 && errno == EINTR && SigAlrm) ? + S_BKG : S_ERR; + if (SendmailWait > 0) + { + unlink (*tempfile); + FREE (tempfile); + } + } + + /* reset alarm; not really needed, but... */ + alarm (0); + sigaction (SIGALRM, &oldalrm, NULL); + + if (kill (ppid, 0) == -1 && errno == ESRCH) + { + /* the parent is already dead */ + unlink (*tempfile); + FREE (tempfile); + } + + _exit (st); + } + + sigprocmask (SIG_UNBLOCK, &set, NULL); + + if (pid != -1 && waitpid (pid, &st, 0) > 0) + st = WIFEXITED (st) ? WEXITSTATUS (st) : S_ERR; /* return child status */ + else + st = S_ERR; /* error */ + + mutt_unblock_signals_system (1); + + return (st); +} + +static char ** +add_args (char **args, size_t *argslen, size_t *argsmax, ADDRESS *addr) +{ + for (; addr; addr = addr->next) + { + /* weed out group mailboxes, since those are for display only */ + if (addr->mailbox && !addr->group) + { + if (*argslen == *argsmax) + safe_realloc (&args, (*argsmax += 5) * sizeof (char *)); + args[(*argslen)++] = addr->mailbox; + } + } + return (args); +} + +static char ** +add_option (char **args, size_t *argslen, size_t *argsmax, char *s) +{ + if (*argslen == *argsmax) + safe_realloc (&args, (*argsmax += 5) * sizeof (char *)); + args[(*argslen)++] = s; + return (args); +} + +static const char * +strsysexit(int e) +{ + int i; + + for(i = 0; sysexits_h[i].str; i++) + { + if(e == sysexits_h[i].v) + break; + } + + return sysexits_h[i].str; +} + + +static int +mutt_invoke_sendmail (ADDRESS *from, /* the sender */ + ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */ + const char *msg, /* file containing message */ + int eightbit) /* message contains 8bit chars */ +{ + char *ps = NULL, *path = NULL, *s = NULL, *childout = NULL; + char **args = NULL; + size_t argslen = 0, argsmax = 0; + int i; + +#ifdef USE_NNTP + if (option (OPTNEWSSEND)) + { + char cmd[LONG_STRING]; + + mutt_FormatString (cmd, sizeof (cmd), NONULL (Inews), nntp_format_str, 0, 0); + if (!*cmd) + { + i = nntp_post (msg); + unlink (msg); + return i; + } + + s = safe_strdup (cmd); + } + else +#endif + s = safe_strdup (Sendmail); + + ps = s; + i = 0; + while ((ps = strtok (ps, " "))) + { + if (argslen == argsmax) + safe_realloc (&args, sizeof (char *) * (argsmax += 5)); + + if (i) + args[argslen++] = ps; + else + { + path = safe_strdup (ps); + ps = strrchr (ps, '/'); + if (ps) + ps++; + else + ps = path; + args[argslen++] = ps; + } + ps = NULL; + i++; + } + +#ifdef USE_NNTP + if (!option (OPTNEWSSEND)) + { +#endif + if (eightbit && option (OPTUSE8BITMIME)) + args = add_option (args, &argslen, &argsmax, "-B8BITMIME"); + + if (option (OPTENVFROM) && from && !from->next) + { + args = add_option (args, &argslen, &argsmax, "-f"); + args = add_args (args, &argslen, &argsmax, from); + } + if (DsnNotify) + { + args = add_option (args, &argslen, &argsmax, "-N"); + args = add_option (args, &argslen, &argsmax, DsnNotify); + } + if (DsnReturn) + { + args = add_option (args, &argslen, &argsmax, "-R"); + args = add_option (args, &argslen, &argsmax, DsnReturn); + } + args = add_option (args, &argslen, &argsmax, "--"); + args = add_args (args, &argslen, &argsmax, to); + args = add_args (args, &argslen, &argsmax, cc); + args = add_args (args, &argslen, &argsmax, bcc); +#ifdef USE_NNTP + } +#endif + + if (argslen == argsmax) + safe_realloc (&args, sizeof (char *) * (++argsmax)); + + args[argslen++] = NULL; + + if ((i = send_msg (path, args, msg, &childout)) != (EX_OK & 0xff)) + { + if (i != S_BKG) + { + const char *e = strsysexit (i); + + e = strsysexit (i); + mutt_error (_("Error sending message, child exited %d (%s)."), i, NONULL (e)); + if (childout) + { + struct stat st; + + if (stat (childout, &st) == 0 && st.st_size > 0) + mutt_do_pager (_("Output of the delivery process"), childout, 0, NULL); + } + } + } + else + unlink (childout); + + FREE (&childout); + FREE (&path); + FREE (&s); + FREE (&args); + + if (i == (EX_OK & 0xff)) + i = 0; + else if (i == S_BKG) + i = 1; + else + i = -1; + return (i); +} + +int +mutt_invoke_mta (ADDRESS *from, /* the sender */ + ADDRESS *to, ADDRESS *cc, ADDRESS *bcc, /* recips */ + const char *msg, /* file containing message */ + int eightbit) /* message contains 8bit chars */ +{ +#ifdef USE_LIBESMTP + if (SmtpHost) + return mutt_invoke_libesmtp(from, to, cc, bcc, msg, eightbit); +#endif + + return mutt_invoke_sendmail(from, to, cc, bcc, msg, eightbit); +} + +/* appends string 'b' to string 'a', and returns the pointer to the new + string. */ +char *mutt_append_string (char *a, const char *b) +{ + size_t la = mutt_strlen (a); + safe_realloc (&a, la + mutt_strlen (b) + 1); + strcpy (a + la, b); /* __STRCPY_CHECKED__ */ + return (a); +} + +/* returns 1 if char `c' needs to be quoted to protect from shell + interpretation when executing commands in a subshell */ +#define INVALID_CHAR(c) (!isalnum ((unsigned char)c) && !strchr ("@.+-_,:", c)) + +/* returns 1 if string `s' contains characters which could cause problems + when used on a command line to execute a command */ +int mutt_needs_quote (const char *s) +{ + while (*s) + { + if (INVALID_CHAR (*s)) + return 1; + s++; + } + return 0; +} + +/* Quote a string to prevent shell escapes when this string is used on the + command line to send mail. */ +char *mutt_quote_string (const char *s) +{ + char *r, *pr; + size_t rlen; + + rlen = mutt_strlen (s) + 3; + pr = r = (char *) safe_malloc (rlen); + *pr++ = '"'; + while (*s) + { + if (INVALID_CHAR (*s)) + { + size_t o = pr - r; + safe_realloc (&r, ++rlen); + pr = r + o; + *pr++ = '\\'; + } + *pr++ = *s++; + } + *pr++ = '"'; + *pr = 0; + return (r); +} + +/* For postponing (!final) do the necessary encodings only */ +void mutt_prepare_envelope (ENVELOPE *env, int final) +{ + char buffer[LONG_STRING]; + + if (final) + { + if (env->bcc && !(env->to || env->cc)) + { + /* some MTA's will put an Apparently-To: header field showing the Bcc: + * recipients if there is no To: or Cc: field, so attempt to suppress + * it by using an empty To: field. + */ + env->to = rfc822_new_address (); + env->to->group = 1; + env->to->next = rfc822_new_address (); + + buffer[0] = 0; + rfc822_cat (buffer, sizeof (buffer), "undisclosed-recipients", + RFC822Specials); + + env->to->mailbox = safe_strdup (buffer); + } + + mutt_set_followup_to (env); + + if (!env->message_id) + env->message_id = mutt_gen_msgid (); + } + + /* Take care of 8-bit => 7-bit conversion. */ + rfc2047_encode_adrlist (env->to, "To"); + rfc2047_encode_adrlist (env->cc, "Cc"); + rfc2047_encode_adrlist (env->from, "From"); + rfc2047_encode_adrlist (env->mail_followup_to, "Mail-Followup-To"); + rfc2047_encode_adrlist (env->reply_to, "Reply-To"); + + if (env->subject) +#ifdef USE_NNTP + if (!option (OPTNEWSSEND) || option (OPTMIMESUBJECT)) +#endif + { + rfc2047_encode_string (&env->subject); + } + encode_headers (env->userhdrs); +} + +void mutt_unprepare_envelope (ENVELOPE *env) +{ + LIST *item; + + for (item = env->userhdrs; item; item = item->next) + rfc2047_decode (&item->data); + + rfc822_free_address (&env->mail_followup_to); + + /* back conversions */ + rfc2047_decode_adrlist (env->to); + rfc2047_decode_adrlist (env->cc); + rfc2047_decode_adrlist (env->from); + rfc2047_decode_adrlist (env->reply_to); + rfc2047_decode (&env->subject); +} + +static int _mutt_bounce_message (FILE *fp, HEADER *h, ADDRESS *to, const char *resent_from, + ADDRESS *env_from) +{ + int i, ret = 0; + FILE *f; + char date[SHORT_STRING], tempfile[_POSIX_PATH_MAX]; + MESSAGE *msg = NULL; + + if (!h) + { + /* Try to bounce each message out, aborting if we get any failures. */ + for (i=0; i<Context->msgcount; i++) + if (Context->hdrs[i]->tagged) + ret |= _mutt_bounce_message (fp, Context->hdrs[i], to, resent_from, env_from); + return ret; + } + + /* If we failed to open a message, return with error */ + if (!fp && (msg = mx_open_message (Context, h->msgno)) == NULL) + return -1; + + if (!fp) fp = msg->fp; + + mutt_mktemp (tempfile); + if ((f = safe_fopen (tempfile, "w")) != NULL) + { + int ch_flags = CH_XMIT | CH_NONEWLINE | CH_NOQFROM; + + if (!option (OPTBOUNCEDELIVERED)) + ch_flags |= CH_WEED_DELIVERED; + + fseek (fp, h->offset, 0); + fprintf (f, "Resent-From: %s", resent_from); + fprintf (f, "\nResent-%s", mutt_make_date (date, sizeof(date))); + fprintf (f, "Resent-Message-ID: %s\n", mutt_gen_msgid()); + fputs ("Resent-To: ", f); + mutt_write_address_list (to, f, 11, 0); + mutt_copy_header (fp, h, f, ch_flags, NULL); + fputc ('\n', f); + mutt_copy_bytes (fp, f, h->content->length); + fclose (f); + + ret = mutt_invoke_mta (env_from, to, NULL, NULL, tempfile, + h->content->encoding == ENC8BIT); + } + + if (msg) + mx_close_message (&msg); + + return ret; +} + +int mutt_bounce_message (FILE *fp, HEADER *h, ADDRESS *to) +{ + ADDRESS *from; + const char *fqdn = mutt_fqdn (1); + char resent_from[STRING]; + int ret; + char *err; + + resent_from[0] = '\0'; + from = mutt_default_from (); + + if (fqdn) + rfc822_qualify (from, fqdn); + + rfc2047_encode_adrlist (from, "Resent-From"); + if (mutt_addrlist_to_idna (from, &err)) + { + mutt_error (_("Bad IDN %s while preparing resent-from."), + err); + return -1; + } + rfc822_write_address (resent_from, sizeof (resent_from), from, 0); + +#ifdef USE_NNTP + unset_option (OPTNEWSSEND); +#endif + + ret = _mutt_bounce_message (fp, h, to, resent_from, from); + + rfc822_free_address (&from); + + return ret; +} + + +/* given a list of addresses, return a list of unique addresses */ +ADDRESS *mutt_remove_duplicates (ADDRESS *addr) +{ + ADDRESS *top = NULL; + ADDRESS *tmp; + + if ((top = addr) == NULL) + return (NULL); + addr = addr->next; + top->next = NULL; + while (addr) + { + tmp = top; + do { + if (addr->mailbox && tmp->mailbox && + !ascii_strcasecmp (addr->mailbox, tmp->mailbox)) + { + /* duplicate address, just ignore it */ + tmp = addr; + addr = addr->next; + tmp->next = NULL; + rfc822_free_address (&tmp); + } + else if (!tmp->next) + { + /* unique address. add it to the list */ + tmp->next = addr; + addr = addr->next; + tmp = tmp->next; + tmp->next = NULL; + tmp = NULL; /* so we exit the loop */ + } + else + tmp = tmp->next; + } while (tmp); + } + + return (top); +} + +static void set_noconv_flags (BODY *b, short flag) +{ + for(; b; b = b->next) + { + if (b->type == TYPEMESSAGE || b->type == TYPEMULTIPART) + set_noconv_flags (b->parts, flag); + else if (b->type == TYPETEXT && b->noconv) + { + if (flag) + mutt_set_parameter ("x-mutt-noconv", "yes", &b->parameter); + else + mutt_delete_parameter ("x-mutt-noconv", &b->parameter); + } + } +} + +int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc) +{ + CONTEXT f; + MESSAGE *msg; + char tempfile[_POSIX_PATH_MAX]; + FILE *tempfp = NULL; + int r; + + if (post) + set_noconv_flags (hdr->content, 1); + + if (mx_open_mailbox (path, M_APPEND | M_QUIET, &f) == NULL) + { + dprint (1, (debugfile, "mutt_write_fcc(): unable to open mailbox %s in append-mode, aborting.\n", + path)); + return (-1); + } + + /* We need to add a Content-Length field to avoid problems where a line in + * the message body begins with "From " + */ + if (f.magic == M_MMDF || f.magic == M_MBOX) + { + mutt_mktemp (tempfile); + if ((tempfp = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + mx_close_mailbox (&f, NULL); + return (-1); + } + } + + hdr->read = !post; /* make sure to put it in the `cur' directory (maildir) */ + if ((msg = mx_open_new_message (&f, hdr, M_ADD_FROM)) == NULL) + { + mx_close_mailbox (&f, NULL); + return (-1); + } + + /* post == 1 => postpone message. Set mode = -1 in mutt_write_rfc822_header() + * post == 0 => Normal mode. Set mode = 0 in mutt_write_rfc822_header() + * */ + mutt_write_rfc822_header (msg->fp, hdr->env, hdr->content, post ? -post : 0, 0); + + /* (postponment) if this was a reply of some sort, <msgid> contians the + * Message-ID: of message replied to. Save it using a special X-Mutt- + * header so it can be picked up if the message is recalled at a later + * point in time. This will allow the message to be marked as replied if + * the same mailbox is still open. + */ + if (post && msgid) + fprintf (msg->fp, "X-Mutt-References: %s\n", msgid); + + /* (postponment) save the Fcc: using a special X-Mutt- header so that + * it can be picked up when the message is recalled + */ + if (post && fcc) + fprintf (msg->fp, "X-Mutt-Fcc: %s\n", fcc); + fprintf (msg->fp, "Status: RO\n"); + + + + /* (postponment) if the mail is to be signed or encrypted, save this info */ + if ((WithCrypto & APPLICATION_PGP) + && post && (hdr->security & APPLICATION_PGP)) + { + fputs ("X-Mutt-PGP: ", msg->fp); + if (hdr->security & ENCRYPT) + fputc ('E', msg->fp); + if (hdr->security & SIGN) + { + fputc ('S', msg->fp); + if (PgpSignAs && *PgpSignAs) + fprintf (msg->fp, "<%s>", PgpSignAs); + } + fputc ('\n', msg->fp); + } + + /* (postponment) if the mail is to be signed or encrypted, save this info */ + if ((WithCrypto & APPLICATION_SMIME) + && post && (hdr->security & APPLICATION_SMIME)) + { + fputs ("X-Mutt-SMIME: ", msg->fp); + if (hdr->security & ENCRYPT) { + fputc ('E', msg->fp); + if (SmimeCryptAlg && *SmimeCryptAlg) + fprintf (msg->fp, "C<%s>", SmimeCryptAlg); + } + if (hdr->security & SIGN) { + fputc ('S', msg->fp); + if (SmimeDefaultKey && *SmimeDefaultKey) + fprintf (msg->fp, "<%s>", SmimeDefaultKey); + } + fputc ('\n', msg->fp); + } + +#ifdef MIXMASTER + /* (postponement) if the mail is to be sent through a mixmaster + * chain, save that information + */ + + if (post && hdr->chain && hdr->chain) + { + LIST *p; + + fputs ("X-Mutt-Mix:", msg->fp); + for (p = hdr->chain; p; p = p->next) + fprintf (msg->fp, " %s", (char *) p->data); + + fputc ('\n', msg->fp); + } +#endif + + if (tempfp) + { + char sasha[LONG_STRING]; + int lines = 0; + + mutt_write_mime_body (hdr->content, tempfp); + + /* make sure the last line ends with a newline. Emacs doesn't ensure + * this will happen, and it can cause problems parsing the mailbox + * later. + */ + fseek (tempfp, -1, 2); + if (fgetc (tempfp) != '\n') + { + fseek (tempfp, 0, 2); + fputc ('\n', tempfp); + } + + fflush (tempfp); + if (ferror (tempfp)) + { + dprint (1, (debugfile, "mutt_write_fcc(): %s: write failed.\n", tempfile)); + fclose (tempfp); + unlink (tempfile); + mx_commit_message (msg, &f); /* XXX - really? */ + mx_close_message (&msg); + mx_close_mailbox (&f, NULL); + return -1; + } + + /* count the number of lines */ + rewind (tempfp); + while (fgets (sasha, sizeof (sasha), tempfp) != NULL) + lines++; + fprintf (msg->fp, "Content-Length: %ld\n", (long) ftell (tempfp)); + fprintf (msg->fp, "Lines: %d\n\n", lines); + + /* copy the body and clean up */ + rewind (tempfp); + r = mutt_copy_stream (tempfp, msg->fp); + if (fclose (tempfp) != 0) + r = -1; + /* if there was an error, leave the temp version */ + if (!r) + unlink (tempfile); + } + else + { + fputc ('\n', msg->fp); /* finish off the header */ + r = mutt_write_mime_body (hdr->content, msg->fp); + } + + if (mx_commit_message (msg, &f) != 0) + r = -1; + mx_close_message (&msg); + mx_close_mailbox (&f, NULL); + + if (post) + set_noconv_flags (hdr->content, 0); + + return r; +} diff --git a/sha1.c b/sha1.c new file mode 100644 index 0000000..9196664 --- /dev/null +++ b/sha1.c @@ -0,0 +1,190 @@ +/* + SHA-1 in C + + By Steve Reid <steve@edmweb.com>, with small changes to make it + fit into mutt by Thomas Roessler <roessler@does-not-exist.org>. + + 100% Public Domain. + + Test Vectors (from FIPS PUB 180-1) + "abc" + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 + A million repetitions of "a" + 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F +*/ + +#define SHA1HANDSOFF + +#include <string.h> + +#include "sha1.h" + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ +#ifdef WORDS_BIGENDIAN +# define blk0(i) block->l[i] +#else +# define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ + |(rol(block->l[i],8)&0x00FF00FF)) +#endif + +#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ + ^block->l[(i+2)&15]^block->l[i&15],1)) + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); +#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); +#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); + + +/* Hash a single 512-bit block. This is the core of the algorithm. */ + +void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]) +{ +uint32_t a, b, c, d, e; +typedef union { + unsigned char c[64]; + uint32_t l[16]; +} CHAR64LONG16; +#ifdef SHA1HANDSOFF +CHAR64LONG16 block[1]; /* use array to appear as a pointer */ + memcpy(block, buffer, 64); +#else + /* The following had better never be used because it causes the + * pointer-to-const buffer to be cast into a pointer to non-const. + * And the result is written through. I threw a "const" in, hoping + * this will cause a diagnostic. + */ +CHAR64LONG16* block = (const CHAR64LONG16*)buffer; +#endif + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); + R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); + R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); + R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); + R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); + R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); + R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); + R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); + R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); + R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); + R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); + R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); + R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); + R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); + R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); + R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); + R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); + R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); + R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); + R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + /* Wipe variables */ + a = b = c = d = e = 0; +#ifdef SHA1HANDSOFF + memset(block, '\0', sizeof(block)); +#endif +} + + +/* SHA1Init - Initialize new context */ + +void SHA1Init(SHA1_CTX* context) +{ + /* SHA1 initialization constants */ + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + + +/* Run your data through this. */ + +void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len) +{ +uint32_t i; +uint32_t j; + + j = context->count[0]; + if ((context->count[0] += len << 3) < j) + context->count[1]++; + context->count[1] += (len>>29); + j = (j >> 3) & 63; + if ((j + len) > 63) { + memcpy(&context->buffer[j], data, (i = 64-j)); + SHA1Transform(context->state, context->buffer); + for ( ; i + 63 < len; i += 64) { + SHA1Transform(context->state, &data[i]); + } + j = 0; + } + else i = 0; + memcpy(&context->buffer[j], &data[i], len - i); +} + + +/* Add padding and return the message digest. */ + +void SHA1Final(unsigned char digest[20], SHA1_CTX* context) +{ +unsigned i; +unsigned char finalcount[8]; +unsigned char c; + +#if 0 /* untested "improvement" by DHR */ + /* Convert context->count to a sequence of bytes + * in finalcount. Second element first, but + * big-endian order within element. + * But we do it all backwards. + */ + unsigned char *fcp = &finalcount[8]; + + for (i = 0; i < 2; i++) + { + uint32_t t = context->count[i]; + int j; + + for (j = 0; j < 4; t >>= 8, j++) + *--fcp = (unsigned char) t + } +#else + for (i = 0; i < 8; i++) { + finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] + >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ + } +#endif + c = 0200; + SHA1Update(context, &c, 1); + while ((context->count[0] & 504) != 448) { + c = 0000; + SHA1Update(context, &c, 1); + } + SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ + for (i = 0; i < 20; i++) { + digest[i] = (unsigned char) + ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); + } + /* Wipe variables */ + memset(context, '\0', sizeof(*context)); + memset(&finalcount, '\0', sizeof(finalcount)); +} diff --git a/sha1.h b/sha1.h new file mode 100644 index 0000000..8381955 --- /dev/null +++ b/sha1.h @@ -0,0 +1,50 @@ +/* + SHA-1 in C + + By Steve Reid <steve@edmweb.com>, with small changes to make it + fit into mutt by Thomas Roessler <roessler@does-not-exist.org>. + +*/ + +#ifndef _SHA1_H +# define _SHA1_H + +#include "config.h" + +#include <sys/types.h> +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif + +#ifndef HAVE_UINT32_T +# if SIZEOF_INT == 4 +typedef unsigned int uint32_t; +# elif SIZEOF_LONG == 4 +typedef unsigned long uint32_t; +# endif +#endif + +typedef struct { + uint32_t state[5]; + uint32_t count[2]; + unsigned char buffer[64]; +} SHA1_CTX; + +void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]); +void SHA1Init(SHA1_CTX* context); +void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len); +void SHA1Final(unsigned char digest[20], SHA1_CTX* context); + +# define SHA1_Transform SHA1Transform +# define SHA1_Init SHA1Init +# define SHA1_Update SHA1Update +# define SHA1_Final SHA1Final + +# define SHA_DIGEST_LENGTH 20 + +#endif + diff --git a/signal.c b/signal.c new file mode 100644 index 0000000..e641737 --- /dev/null +++ b/signal.c @@ -0,0 +1,244 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" + +#include <signal.h> +#include <string.h> +#include <sys/wait.h> +#include <errno.h> + +static sigset_t Sigset; +static sigset_t SigsetSys; +static struct sigaction SysOldInt; +static struct sigaction SysOldQuit; +static int IsEndwin = 0; + +/* Attempt to catch "ordinary" signals and shut down gracefully. */ +RETSIGTYPE exit_handler (int sig) +{ + curs_set (1); + endwin (); /* just to be safe */ +#if SYS_SIGLIST_DECLARED + printf(_("%s... Exiting.\n"), sys_siglist[sig]); +#else +#if (__sun__ && __svr4__) + printf(_("Caught %s... Exiting.\n"), _sys_siglist[sig]); +#else +#if (__alpha && __osf__) + printf(_("Caught %s... Exiting.\n"), __sys_siglist[sig]); +#else + printf(_("Caught signal %d... Exiting.\n"), sig); +#endif +#endif +#endif + exit (0); +} + +RETSIGTYPE chld_handler (int sig) +{ + /* empty */ +} + +RETSIGTYPE sighandler (int sig) +{ + int save_errno = errno; + + switch (sig) + { + case SIGTSTP: /* user requested a suspend */ + if (!option (OPTSUSPEND)) + break; + IsEndwin = isendwin (); + curs_set (1); + if (!IsEndwin) + endwin (); + kill (0, SIGSTOP); + + case SIGCONT: + if (!IsEndwin) + refresh (); + mutt_curs_set (-1); + break; + +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + case SIGWINCH: + SigWinch = 1; + break; +#endif + + case SIGINT: + SigInt = 1; + break; + + } + errno = save_errno; +} + +#ifdef USE_SLANG_CURSES +int mutt_intr_hook (void) +{ + return (-1); +} +#endif /* USE_SLANG_CURSES */ + +void mutt_signal_init (void) +{ + struct sigaction act; + + sigemptyset (&act.sa_mask); + act.sa_flags = 0; + act.sa_handler = SIG_IGN; + sigaction (SIGPIPE, &act, NULL); + + act.sa_handler = exit_handler; + sigaction (SIGTERM, &act, NULL); + sigaction (SIGHUP, &act, NULL); + sigaction (SIGQUIT, &act, NULL); + + /* we want to avoid race conditions */ + sigaddset (&act.sa_mask, SIGTSTP); + + act.sa_handler = sighandler; + + /* we want SIGALRM to abort the current syscall, so we do this before + * setting the SA_RESTART flag below. currently this is only used to + * timeout on a connect() call in a reasonable amout of time. + */ + sigaction (SIGALRM, &act, NULL); + + /* we also don't want to mess with interrupted system calls */ +#ifdef SA_RESTART + act.sa_flags = SA_RESTART; +#endif + + sigaction (SIGCONT, &act, NULL); + sigaction (SIGTSTP, &act, NULL); + sigaction (SIGINT, &act, NULL); +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + sigaction (SIGWINCH, &act, NULL); +#endif + + /* POSIX doesn't allow us to ignore SIGCHLD, + * so we just install a dummy handler for it + */ + act.sa_handler = chld_handler; + /* don't need to block any other signals here */ + sigemptyset (&act.sa_mask); + /* we don't want to mess with stopped children */ + act.sa_flags |= SA_NOCLDSTOP; + sigaction (SIGCHLD, &act, NULL); + +#ifdef USE_SLANG_CURSES + /* This bit of code is required because of the implementation of + * SLcurses_wgetch(). If a signal is received (like SIGWINCH) when we + * are in blocking mode, SLsys_getkey() will not return an error unless + * a handler function is defined and it returns -1. This is needed so + * that if the user resizes the screen while at a prompt, it will just + * abort and go back to the main-menu. + */ + SLang_getkey_intr_hook = mutt_intr_hook; +#endif +} + +/* signals which are important to block while doing critical ops */ +void mutt_block_signals (void) +{ + if (!option (OPTSIGNALSBLOCKED)) + { + sigemptyset (&Sigset); + sigaddset (&Sigset, SIGTERM); + sigaddset (&Sigset, SIGHUP); + sigaddset (&Sigset, SIGTSTP); + sigaddset (&Sigset, SIGINT); +#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM) + sigaddset (&Sigset, SIGWINCH); +#endif + sigprocmask (SIG_BLOCK, &Sigset, 0); + set_option (OPTSIGNALSBLOCKED); + } +} + +/* restore the previous signal mask */ +void mutt_unblock_signals (void) +{ + if (option (OPTSIGNALSBLOCKED)) + { + sigprocmask (SIG_UNBLOCK, &Sigset, 0); + unset_option (OPTSIGNALSBLOCKED); + } +} + +void mutt_block_signals_system (void) +{ + struct sigaction sa; + + if (! option (OPTSYSSIGNALSBLOCKED)) + { + /* POSIX: ignore SIGINT and SIGQUIT & block SIGCHLD before exec */ + sa.sa_handler = SIG_IGN; + sa.sa_flags = 0; + sigemptyset (&sa.sa_mask); + sigaction (SIGINT, &sa, &SysOldInt); + sigaction (SIGQUIT, &sa, &SysOldQuit); + + sigemptyset (&SigsetSys); + sigaddset (&SigsetSys, SIGCHLD); + sigprocmask (SIG_BLOCK, &SigsetSys, 0); + set_option (OPTSYSSIGNALSBLOCKED); + } +} + +void mutt_unblock_signals_system (int catch) +{ + if (option (OPTSYSSIGNALSBLOCKED)) + { + sigprocmask (SIG_UNBLOCK, &SigsetSys, NULL); + if (catch) + { + sigaction (SIGQUIT, &SysOldQuit, NULL); + sigaction (SIGINT, &SysOldInt, NULL); + } + else + { + struct sigaction sa; + + sa.sa_handler = SIG_DFL; + sigemptyset (&sa.sa_mask); + sa.sa_flags = 0; + sigaction (SIGQUIT, &sa, NULL); + sigaction (SIGINT, &sa, NULL); + } + + unset_option (OPTSYSSIGNALSBLOCKED); + } +} + +void mutt_allow_interrupt (int disposition) +{ + struct sigaction sa; + + memset (&sa, 0, sizeof sa); + sa.sa_handler = sighandler; +#ifdef SA_RESTART + if (disposition == 0) + sa.sa_flags |= SA_RESTART; +#endif + sigaction (SIGINT, &sa, NULL); +} diff --git a/smime.c b/smime.c new file mode 100644 index 0000000..fda19e9 --- /dev/null +++ b/smime.c @@ -0,0 +1,1920 @@ +/* + * Copyright (C) 2001,2002 Oliver Ehli <elmy@acm.org> + * Copyright (C) 2002 Mike Schiraldi <raldi@research.netsol.com> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_curses.h" +#include "mutt_menu.h" +#include "smime.h" +#include "mime.h" +#include "copy.h" + +#include <sys/wait.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/stat.h> +#include <errno.h> +#include <ctype.h> + +#ifdef HAVE_LOCALE_H +#include <locale.h> +#endif + +#ifdef HAVE_SYS_TIME_H +# include <sys/time.h> +#endif + +#ifdef HAVE_SYS_RESOURCE_H +# include <sys/resource.h> +#endif + +#ifdef CRYPT_BACKEND_CLASSIC_SMIME + +#include "mutt_crypt.h" + + +struct smime_command_context { + const char *key; /* %k */ + const char *cryptalg; /* %a */ + const char *fname; /* %f */ + const char *sig_fname; /* %s */ + const char *certificates; /* %c */ + const char *intermediates; /* %i */ +}; + + +typedef struct { + unsigned int hash; + char suffix; + char email[256]; + char nick[256]; + char trust; /* i=Invalid r=revoked e=expired u=unverified v=verified t=trusted */ + short public; /* 1=public 0=private */ +} smime_id; + + +char SmimePass[STRING]; +time_t SmimeExptime = 0; /* when does the cached passphrase expire? */ + + +static char SmimeKeyToUse[_POSIX_PATH_MAX] = { 0 }; +static char SmimeCertToUse[_POSIX_PATH_MAX]; +static char SmimeIntermediateToUse[_POSIX_PATH_MAX]; + + +/* + * Queries and passphrase handling. + */ + + + + +/* these are copies from pgp.c */ + + +void smime_void_passphrase (void) +{ + memset (SmimePass, 0, sizeof (SmimePass)); + SmimeExptime = 0; +} + + + + + + +/* + * The OpenSSL interface + */ + +/* This is almost identical to ppgp's invoking interface. */ + +static const char *_mutt_fmt_smime_command (char *dest, + size_t destlen, + char op, + const char *src, + const char *prefix, + const char *ifstring, + const char *elsestring, + unsigned long data, + format_flag flags) +{ + char fmt[16]; + struct smime_command_context *cctx = (struct smime_command_context *) data; + int optional = (flags & M_FORMAT_OPTIONAL); + + switch (op) + { + case 'C': + { + if (!optional) + { + char path[_POSIX_PATH_MAX]; + char buf1[LONG_STRING], buf2[LONG_STRING]; + struct stat sb; + + strfcpy (path, NONULL (SmimeCALocation), sizeof (path)); + mutt_expand_path (path, sizeof (path)); + mutt_quote_filename (buf1, sizeof (buf1), path); + + if (stat (path, &sb) != 0 || !S_ISDIR (sb.st_mode)) + snprintf (buf2, sizeof (buf2), "-CAfile %s", buf1); + else + snprintf (buf2, sizeof (buf2), "-CApath %s", buf1); + + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, buf2); + } + else if (!SmimeCALocation) + optional = 0; + break; + } + + case 'c': + { /* certificate (list) */ + if (!optional) { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL(cctx->certificates)); + } + else if (!cctx->certificates) + optional = 0; + break; + } + + case 'i': + { /* intermediate certificates */ + if (!optional) { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL(cctx->intermediates)); + } + else if (!cctx->intermediates) + optional = 0; + break; + } + + case 's': + { /* detached signature */ + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->sig_fname)); + } + else if (!cctx->sig_fname) + optional = 0; + break; + } + + case 'k': + { /* private key */ + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->key)); + } + else if (!cctx->key) + optional = 0; + break; + } + + case 'a': + { /* algorithm for encryption */ + if (!optional) { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->cryptalg)); + } + else if (!cctx->key) + optional = 0; + break; + } + + case 'f': + { /* file to process */ + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (dest, destlen, fmt, NONULL (cctx->fname)); + } + else if (!cctx->fname) + optional = 0; + break; + } + + default: + *dest = '\0'; + break; + } + + if (optional) + mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_smime_command, + data, 0); + else if (flags & M_FORMAT_OPTIONAL) + mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_smime_command, + data, 0); + + return (src); +} + + + +static void mutt_smime_command (char *d, size_t dlen, + struct smime_command_context *cctx, const char *fmt) +{ + mutt_FormatString (d, dlen, NONULL(fmt), _mutt_fmt_smime_command, + (unsigned long) cctx, 0); + dprint (2,(debugfile, "mutt_smime_command: %s\n", d)); +} + + + + +static pid_t smime_invoke (FILE **smimein, FILE **smimeout, FILE **smimeerr, + int smimeinfd, int smimeoutfd, int smimeerrfd, + const char *fname, + const char *sig_fname, + const char *cryptalg, + const char *key, + const char *certificates, + const char *intermediates, + const char *format) +{ + struct smime_command_context cctx; + char cmd[HUGE_STRING]; + + memset (&cctx, 0, sizeof (cctx)); + + if (!format || !*format) + return (pid_t) -1; + + cctx.fname = fname; + cctx.sig_fname = sig_fname; + cctx.key = key; + cctx.cryptalg = cryptalg; + cctx.certificates = certificates; + cctx.intermediates = intermediates; + + mutt_smime_command (cmd, sizeof (cmd), &cctx, format); + + return mutt_create_filter_fd (cmd, smimein, smimeout, smimeerr, + smimeinfd, smimeoutfd, smimeerrfd); +} + + + + + + +/* + * Key and certificate handling. + */ + + + +/* + Search the certificate index for given mailbox. + return certificate file name. +*/ + +static void smime_entry (char *s, size_t l, MUTTMENU * menu, int num) +{ + smime_id *Table = (smime_id*) menu->data; + smime_id this = Table[num]; + char* truststate; + switch(this.trust) { + case 't': + truststate = N_("Trusted "); + break; + case 'v': + truststate = N_("Verified "); + break; + case 'u': + truststate = N_("Unverified"); + break; + case 'e': + truststate = N_("Expired "); + break; + case 'r': + truststate = N_("Revoked "); + break; + case 'i': + truststate = N_("Invalid "); + break; + default: + truststate = N_("Unknown "); + } + if (this.public) + snprintf(s, l, " 0x%.8X.%i %s %-35.35s %s", this.hash, this.suffix, truststate, this.email, this.nick); + else + snprintf(s, l, " 0x%.8X.%i %-35.35s %s", this.hash, this.suffix, this.email, this.nick); +} + + + + + +char* smime_ask_for_key (char *prompt, char *mailbox, short public) +{ + char *fname; + smime_id *Table; + long cert_num; /* Will contain the number of certificates. + * To be able to get it, the .index file will be read twice... */ + char index_file[_POSIX_PATH_MAX]; + FILE *index; + char buf[LONG_STRING]; + char fields[5][STRING]; + int numFields, hash_suffix, done, cur; /* The current entry */ + MUTTMENU* menu; + unsigned int hash; + char helpstr[HUGE_STRING*3]; + char qry[256]; + char title[256]; + + if (!prompt) prompt = _("Enter keyID: "); + snprintf(index_file, sizeof (index_file), "%s/.index", + public ? NONULL(SmimeCertificates) : NONULL(SmimeKeys)); + + index = fopen(index_file, "r"); + if (index == NULL) + { + mutt_perror (index_file); + return NULL; + } + /* Count Lines */ + cert_num = 0; + while (!feof(index)) { + if (fgets(buf, sizeof(buf), index)) cert_num++; + } + fclose(index); + + FOREVER + { + *qry = 0; + if (mutt_get_field(prompt, + qry, sizeof(qry), 0)) + return NULL; + snprintf(title, sizeof(title), _("S/MIME certificates matching \"%s\"."), + qry); + + + index = fopen(index_file, "r"); + if (index == NULL) + { + mutt_perror (index_file); + return NULL; + } + /* Read Entries */ + cur = 0; + Table = safe_calloc(cert_num, sizeof (smime_id)); + while (!feof(index)) { + numFields = fscanf (index, MUTT_FORMAT(STRING) " %x.%i " MUTT_FORMAT(STRING), fields[0], &hash, + &hash_suffix, fields[2]); + if (public) + fscanf (index, MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) "\n", fields[3], fields[4]); + + /* 0=email 1=name 2=nick 3=intermediate 4=trust */ + if (numFields < 2) continue; + + /* Check if query matches this certificate */ + if (!mutt_stristr(fields[0], qry) && + !mutt_stristr(fields[2], qry)) + continue; + + Table[cur].hash = hash; + Table[cur].suffix = hash_suffix; + strncpy(Table[cur].email, fields[0], sizeof(Table[cur].email)); + strncpy(Table[cur].nick, fields[2], sizeof(Table[cur].nick)); + Table[cur].trust = *fields[4]; + Table[cur].public = public; + + cur++; + } + fclose(index); + + /* Make Helpstring */ + helpstr[0] = 0; + mutt_make_help (buf, sizeof (buf), _("Exit "), MENU_SMIME, OP_EXIT); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + mutt_make_help (buf, sizeof (buf), _("Select "), MENU_SMIME, + OP_GENERIC_SELECT_ENTRY); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + mutt_make_help (buf, sizeof(buf), _("Help"), MENU_SMIME, OP_HELP); + strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + + /* Create the menu */ + menu = mutt_new_menu(); + menu->max = cur; + menu->make_entry = smime_entry; + menu->menu = MENU_SMIME; + menu->help = helpstr; + menu->data = Table; + menu->title = title; + /* sorting keys might be done later - TODO */ + + mutt_clear_error(); + + done = 0; + hash = 0; + while (!done) { + switch (mutt_menuLoop (menu)) { + case OP_GENERIC_SELECT_ENTRY: + cur = menu->current; + hash = 1; + done = 1; + break; + case OP_EXIT: + hash = 0; + done = 1; + break; + } + } + if (hash) { + fname = safe_malloc(14); /* Hash + '.' + Suffix + \n + \0 */ + sprintf(fname, "%.8x.%i\n", Table[cur].hash, Table[cur].suffix); + } + else fname = NULL; + + mutt_menuDestroy (&menu); + FREE (&Table); + set_option (OPTNEEDREDRAW); + + if (fname) return fname; + } +} + + + +char *smime_get_field_from_db (char *mailbox, char *query, short public, short may_ask) +{ + int addr_len, query_len, found = 0, ask = 0, choice = 0; + char cert_path[_POSIX_PATH_MAX]; + char buf[LONG_STRING], prompt[STRING]; + char fields[5][STRING]; + int numFields; + struct stat info; + char *key=NULL, key_trust_level = 0; + FILE *fp; + + if(!mailbox && !query) return(NULL); + + addr_len = mailbox ? mutt_strlen (mailbox) : 0; + query_len = query ? mutt_strlen (query) : 0; + + /* index-file format: + mailbox certfile label issuer_certfile trust_flags\n + + \n is also copied here, serving as delimitation. + + certfile is a hash value generated by openssl. + Note that this was done according to the OpenSSL + specs on their CA-directory. + + */ + snprintf (cert_path, sizeof (cert_path), "%s/.index", + (public ? NONULL(SmimeCertificates) : NONULL(SmimeKeys))); + + if (!stat (cert_path, &info)) + { + if ((fp = safe_fopen (cert_path, "r")) == NULL) + { + mutt_perror (cert_path); + return (NULL); + } + + while (fgets (buf, sizeof (buf) - 1, fp) != NULL) + if (mailbox && !(mutt_strncasecmp (mailbox, buf, addr_len))) + { + numFields = sscanf (buf, + MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) " " + MUTT_FORMAT(STRING) " " MUTT_FORMAT(STRING) " " + MUTT_FORMAT(STRING) "\n", + fields[0], fields[1], + fields[2], fields[3], + fields[4]); + if (numFields < 2) + continue; + if (mailbox && public && + (!fields[4] || + *fields[4] == 'i' || *fields[4] == 'e' || *fields[4] == 'r')) + continue; + + if (found) + { + if (public && *fields[4] == 'u' ) + snprintf (prompt, sizeof (prompt), + _("ID %s is unverified. Do you want to use it for %s ?"), + fields[1], mailbox); + else if (public && *fields[4] == 'v' ) + snprintf (prompt, sizeof (prompt), + _("Use (untrusted!) ID %s for %s ?"), + fields[1], mailbox); + else + snprintf (prompt, sizeof (prompt), _("Use ID %s for %s ?"), + fields[1], mailbox); + if (may_ask == 0) + choice = M_YES; + if (may_ask && (choice = mutt_yesorno (prompt, M_NO)) == -1) + { + found = 0; + ask = 0; + FREE (&key); + key = NULL; + break; + } + else if (choice == M_NO) + { + ask = 1; + continue; + } + else if (choice == M_YES) + { + snprintf (key,mutt_strlen(key)+1, fields[1]); + ask = 0; + break; + } + } + else + { + key = safe_calloc(1, mutt_strlen(fields[1])+2); + if (public) key_trust_level = *fields[4]; + snprintf(key, mutt_strlen(fields[1])+1, "%s", fields[1]); + + } + found = 1; + } + else if(query) + { + numFields = sscanf (buf, "%s %s %s %s %s\n", fields[0], fields[1], + fields[2], fields[3], fields[4]); + + /* query = label: return certificate. */ + if (numFields >= 3 && + !(mutt_strncasecmp (query, fields[2], query_len))) + { + ask = 0; + key = safe_calloc(1, mutt_strlen(fields[1])+2); + snprintf(key, mutt_strlen(fields[1])+1, "%s", fields[1]); + } + /* query = certificate: return intermediate certificate. */ + else if (numFields >= 4 && + !(mutt_strncasecmp (query, fields[1], query_len))) + { + ask = 0; + key = safe_calloc(1, mutt_strlen(fields[3])+2); + snprintf(key, mutt_strlen(fields[3])+1, "%s", fields[3]); + } + } + + fclose (fp); + + if (ask) + { + if (public && *fields[4] == 'u' ) + snprintf (prompt, sizeof (prompt), + _("ID %s is unverified. Do you want to use it for %s ?"), + fields[1], mailbox); + else if (public && *fields[4] == 'v' ) + snprintf (prompt, sizeof (prompt), + _("Use (untrusted!) ID %s for %s ?"), + fields[1], mailbox); + else + snprintf (prompt, sizeof(prompt), _("Use ID %s for %s ?"), key, + mailbox); + choice = mutt_yesorno (prompt, M_NO); + if (choice == -1 || choice == M_NO) + { + FREE (&key); + key = NULL; + } + } + else if (key_trust_level && may_ask) + { + if (key_trust_level == 'u' ) + { + snprintf (prompt, sizeof (prompt), + _("ID %s is unverified. Do you want to use it for %s ?"), + key, mailbox); + choice = mutt_yesorno (prompt, M_NO); + if (choice != M_YES) + { + FREE (&key); + key = NULL; + } + + } + else if (key_trust_level == 'v' ) + { + mutt_error (_("Warning: You have not yet decided to trust ID %s. (any key to continue)"), key); + mutt_sleep (5); + } + } + + } + + if (key) + { + key[mutt_strlen(key)+1] = '\0'; + key[mutt_strlen(key)] = '\n'; + } + + return key; +} + + + + +/* + This sets the '*ToUse' variables for an upcoming decryption, where + the reuquired key is different from SmimeDefaultKey. +*/ + +void _smime_getkeys (char *mailbox) +{ + char *k = NULL; + char buf[STRING]; + + k = smime_get_field_from_db (mailbox, NULL, 0, 1); + + if (!k) + { + snprintf(buf, sizeof(buf), _("Enter keyID for %s: "), + mailbox); + k = smime_ask_for_key(buf, mailbox, 0); + } + + if (k) + { + k[mutt_strlen (k)-1] = '\0'; + + /* the key used last time. */ + if (*SmimeKeyToUse && + !mutt_strcasecmp (k, SmimeKeyToUse + mutt_strlen (SmimeKeys)+1)) + { + FREE (&k); + return; + } + else smime_void_passphrase (); + + snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", + NONULL(SmimeKeys), k); + + snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s", + NONULL(SmimeCertificates), k); + + if (mutt_strcasecmp (k, SmimeDefaultKey)) + smime_void_passphrase (); + + FREE (&k); + return; + } + + if (*SmimeKeyToUse) + { + if (!mutt_strcasecmp (SmimeDefaultKey, + SmimeKeyToUse + mutt_strlen (SmimeKeys)+1)) + return; + + smime_void_passphrase (); + } + + snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", + NONULL (SmimeKeys), NONULL (SmimeDefaultKey)); + + snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s", + NONULL (SmimeCertificates), NONULL (SmimeDefaultKey)); +} + +void smime_getkeys (ENVELOPE *env) +{ + ADDRESS *t; + int found = 0; + + if (option (OPTSDEFAULTDECRYPTKEY) && SmimeDefaultKey && *SmimeDefaultKey) + { + snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", + NONULL (SmimeKeys), SmimeDefaultKey); + + snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s", + NONULL(SmimeCertificates), SmimeDefaultKey); + + return; + } + + for (t = env->to; !found && t; t = t->next) + if (mutt_addr_is_user (t)) + { + found = 1; + _smime_getkeys (t->mailbox); + } + for (t = env->cc; !found && t; t = t->next) + if (mutt_addr_is_user (t)) + { + found = 1; + _smime_getkeys (t->mailbox); + } + if (!found && (t = mutt_default_from())) + { + _smime_getkeys (t->mailbox); + rfc822_free_address (&t); + } +} + +/* This routine attempts to find the keyids of the recipients of a message. + * It returns NULL if any of the keys can not be found. + */ + +char *smime_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc) +{ + char *keyID, *keylist = NULL; + size_t keylist_size = 0; + size_t keylist_used = 0; + ADDRESS *tmp = NULL, *addr = NULL; + ADDRESS **last = &tmp; + ADDRESS *p, *q; + int i; + + const char *fqdn = mutt_fqdn (1); + + for (i = 0; i < 3; i++) + { + switch (i) + { + case 0: p = to; break; + case 1: p = cc; break; + case 2: p = bcc; break; + default: abort (); + } + + *last = rfc822_cpy_adr (p); + while (*last) + last = &((*last)->next); + } + + if (fqdn) + rfc822_qualify (tmp, fqdn); + + tmp = mutt_remove_duplicates (tmp); + + for (p = tmp; p ; p = p->next) + { + char buf[LONG_STRING]; + + q = p; + + if ((keyID = smime_get_field_from_db (q->mailbox, NULL, 1, 1)) == NULL) + { + snprintf(buf, sizeof(buf), + _("Enter keyID for %s: "), + q->mailbox); + keyID = smime_ask_for_key(buf, q->mailbox, 1); + } + if(!keyID) + { + mutt_message (_("No (valid) certificate found for %s."), q->mailbox); + FREE (&keylist); + rfc822_free_address (&tmp); + rfc822_free_address (&addr); + return NULL; + } + + keylist_size += mutt_strlen (keyID) + 1; + safe_realloc (&keylist, keylist_size); + sprintf (keylist + keylist_used, "%s", keyID); /* __SPRINTF_CHECKED__ */ + keylist_used = mutt_strlen (keylist); + + rfc822_free_address (&addr); + + } + rfc822_free_address (&tmp); + return (keylist); +} + + + + + + +static int smime_handle_cert_email (char *certificate, char *mailbox, + int copy, char ***buffer, int *num) +{ + FILE *fpout = NULL, *fperr = NULL; + char tmpfname[_POSIX_PATH_MAX]; + char email[STRING]; + int ret = -1, count = 0; + pid_t thepid; + + mutt_mktemp (tmpfname); + if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) + { + mutt_perror (tmpfname); + return 1; + } + mutt_unlink (tmpfname); + + mutt_mktemp (tmpfname); + if ((fpout = safe_fopen (tmpfname, "w+")) == NULL) + { + fclose (fperr); + mutt_perror (tmpfname); + return 1; + } + mutt_unlink (tmpfname); + + if ((thepid = smime_invoke (NULL, NULL, NULL, + -1, fileno (fpout), fileno (fperr), + certificate, NULL, NULL, NULL, NULL, NULL, + SmimeGetCertEmailCommand))== -1) + { + mutt_message (_("Error: unable to create OpenSSL subprocess!")); + fclose (fperr); + fclose (fpout); + return 1; + } + + mutt_wait_filter (thepid); + + fflush (fpout); + rewind (fpout); + rewind (fperr); + fflush (fperr); + + + while ((fgets (email, sizeof (email), fpout))) + { + *(email + mutt_strlen (email)-1) = '\0'; + if(mutt_strncasecmp (email, mailbox, mutt_strlen (mailbox)) == 0) + ret=1; + + ret = ret < 0 ? 0 : ret; + count++; + } + + if (ret == -1) + { + mutt_endwin(NULL); + mutt_copy_stream (fperr, stdout); + mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!")); + ret = 1; + } + else if (!ret) + ret = 1; + else ret = 0; + + if(copy && buffer && num) + { + (*num) = count; + *buffer = safe_calloc(sizeof(char*), count); + count = 0; + + rewind (fpout); + while ((fgets (email, sizeof (email), fpout))) + { + *(email + mutt_strlen (email) - 1) = '\0'; + (*buffer)[count] = safe_calloc(1, mutt_strlen (email) + 1); + strncpy((*buffer)[count], email, mutt_strlen (email)); + count++; + } + } + else if(copy) ret = 2; + + fclose (fpout); + fclose (fperr); + + return ret; +} + + + +static char *smime_extract_certificate (char *infile) +{ + FILE *fpout = NULL, *fperr = NULL; + char pk7out[_POSIX_PATH_MAX], certfile[_POSIX_PATH_MAX]; + char tmpfname[_POSIX_PATH_MAX]; + pid_t thepid; + int empty; + + + mutt_mktemp (tmpfname); + if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) + { + mutt_perror (tmpfname); + return NULL; + } + mutt_unlink (tmpfname); + + mutt_mktemp (pk7out); + if ((fpout = safe_fopen (pk7out, "w+")) == NULL) + { + fclose (fperr); + mutt_perror (pk7out); + return NULL; + } + + /* Step 1: Convert the signature to a PKCS#7 structure, as we can't + extract the full set of certificates directly. + */ + if ((thepid = smime_invoke (NULL, NULL, NULL, + -1, fileno (fpout), fileno (fperr), + infile, NULL, NULL, NULL, NULL, NULL, + SmimePk7outCommand))== -1) + { + mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!")); + fclose (fperr); + fclose (fpout); + mutt_unlink (pk7out); + return NULL; + } + + mutt_wait_filter (thepid); + + + fflush (fpout); + rewind (fpout); + rewind (fperr); + fflush (fperr); + empty = (fgetc (fpout) == EOF); + if (empty) + { + mutt_perror (pk7out); + mutt_copy_stream (fperr, stdout); + fclose (fpout); + fclose (fperr); + mutt_unlink (pk7out); + return NULL; + + } + + + fclose (fpout); + mutt_mktemp (certfile); + if ((fpout = safe_fopen (certfile, "w+")) == NULL) + { + fclose (fperr); + mutt_unlink (pk7out); + mutt_perror (certfile); + return NULL; + } + + /* Step 2: Extract the certificates from a PKCS#7 structure. + */ + if ((thepid = smime_invoke (NULL, NULL, NULL, + -1, fileno (fpout), fileno (fperr), + pk7out, NULL, NULL, NULL, NULL, NULL, + SmimeGetCertCommand))== -1) + { + mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!")); + fclose (fperr); + fclose (fpout); + mutt_unlink (pk7out); + mutt_unlink (certfile); + return NULL; + } + + mutt_wait_filter (thepid); + + mutt_unlink (pk7out); + + fflush (fpout); + rewind (fpout); + rewind (fperr); + fflush (fperr); + empty = (fgetc (fpout) == EOF); + if (empty) + { + mutt_copy_stream (fperr, stdout); + fclose (fpout); + fclose (fperr); + mutt_unlink (certfile); + return NULL; + } + + fclose (fpout); + fclose (fperr); + + return safe_strdup (certfile); +} + +static char *smime_extract_signer_certificate (char *infile) +{ + FILE *fpout = NULL, *fperr = NULL; + char pk7out[_POSIX_PATH_MAX], certfile[_POSIX_PATH_MAX]; + char tmpfname[_POSIX_PATH_MAX]; + pid_t thepid; + int empty; + + + mutt_mktemp (tmpfname); + if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) + { + mutt_perror (tmpfname); + return NULL; + } + mutt_unlink (tmpfname); + + + mutt_mktemp (certfile); + if ((fpout = safe_fopen (certfile, "w+")) == NULL) + { + fclose (fperr); + mutt_perror (certfile); + return NULL; + } + + /* Extract signer's certificate + */ + if ((thepid = smime_invoke (NULL, NULL, NULL, + -1, -1, fileno (fperr), + infile, NULL, NULL, NULL, certfile, NULL, + SmimeGetSignerCertCommand))== -1) + { + mutt_any_key_to_continue (_("Error: unable to create OpenSSL subprocess!")); + fclose (fperr); + fclose (fpout); + mutt_unlink (pk7out); + mutt_unlink (certfile); + return NULL; + } + + mutt_wait_filter (thepid); + + fflush (fpout); + rewind (fpout); + rewind (fperr); + fflush (fperr); + empty = (fgetc (fpout) == EOF); + if (empty) + { + mutt_endwin (NULL); + mutt_copy_stream (fperr, stdout); + mutt_any_key_to_continue (NULL); + fclose (fpout); + fclose (fperr); + mutt_unlink (certfile); + return NULL; + } + + fclose (fpout); + fclose (fperr); + + return safe_strdup (certfile); +} + + + + +/* Add a certificate and update index file (externally). */ + +void smime_invoke_import (char *infile, char *mailbox) +{ + char tmpfname[_POSIX_PATH_MAX], *certfile = NULL, buf[STRING]; + FILE *smimein=NULL, *fpout = NULL, *fperr = NULL; + pid_t thepid=-1; + + mutt_mktemp (tmpfname); + if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) + { + mutt_perror (tmpfname); + return; + } + mutt_unlink (tmpfname); + + mutt_mktemp (tmpfname); + if ((fpout = safe_fopen (tmpfname, "w+")) == NULL) + { + fclose (fperr); + mutt_perror (tmpfname); + return; + } + mutt_unlink (tmpfname); + + + buf[0] = '\0'; + if (option (OPTASKCERTLABEL)) + mutt_get_field ("Label for certificate:", buf, sizeof (buf), 0); + + mutt_endwin (NULL); + if ((certfile = smime_extract_certificate(infile))) + { + mutt_endwin (NULL); + + if ((thepid = smime_invoke (&smimein, NULL, NULL, + -1, fileno(fpout), fileno(fperr), + certfile, NULL, NULL, NULL, NULL, NULL, + SmimeImportCertCommand))== -1) + { + mutt_message (_("Error: unable to create OpenSSL subprocess!")); + return; + } + fputs (buf, smimein); + fputc ('\n', smimein); + fclose(smimein); + + mutt_wait_filter (thepid); + + mutt_unlink (certfile); + FREE (&certfile); + } + + fflush (fpout); + rewind (fpout); + fflush (fperr); + rewind (fperr); + + mutt_copy_stream (fpout, stdout); + mutt_copy_stream (fperr, stdout); + + fclose (fpout); + fclose (fperr); + +} + + + +int smime_verify_sender(HEADER *h) +{ + char *mbox = NULL, *certfile, tempfname[_POSIX_PATH_MAX]; + FILE *fpout; + int retval=1; + + mutt_mktemp (tempfname); + if (!(fpout = safe_fopen (tempfname, "w"))) + { + mutt_perror (tempfname); + return 1; + } + + if(h->security & ENCRYPT) + mutt_copy_message (fpout, Context, h, + M_CM_DECODE_CRYPT & M_CM_DECODE_SMIME, + CH_MIME|CH_WEED|CH_NONEWLINE); + else + mutt_copy_message (fpout, Context, h, 0, 0); + + fflush(fpout); + fclose (fpout); + + if (h->env->from) + { + h->env->from = mutt_expand_aliases (h->env->from); + mbox = h->env->from->mailbox; + } + else if (h->env->sender) + { + h->env->sender = mutt_expand_aliases (h->env->sender); + mbox = h->env->sender->mailbox; + } + + if (mbox) + { + if ((certfile = smime_extract_signer_certificate(tempfname))) + { + mutt_unlink(tempfname); + if (smime_handle_cert_email (certfile, mbox, 0, NULL, NULL)) + { + if(isendwin()) + mutt_any_key_to_continue(NULL); + } + else + retval = 0; + mutt_unlink(certfile); + FREE (&certfile); + } + else + mutt_any_key_to_continue(_("no certfile")); + } + else + mutt_any_key_to_continue(_("no mbox")); + + mutt_unlink(tempfname); + return retval; +} + + + + + + + + + +/* + * Creating S/MIME - bodies. + */ + + + + +static +pid_t smime_invoke_encrypt (FILE **smimein, FILE **smimeout, FILE **smimeerr, + int smimeinfd, int smimeoutfd, int smimeerrfd, + const char *fname, const char *uids) +{ + return smime_invoke (smimein, smimeout, smimeerr, + smimeinfd, smimeoutfd, smimeerrfd, + fname, NULL, SmimeCryptAlg, NULL, uids, NULL, + SmimeEncryptCommand); +} + + +static +pid_t smime_invoke_sign (FILE **smimein, FILE **smimeout, FILE **smimeerr, + int smimeinfd, int smimeoutfd, int smimeerrfd, + const char *fname) +{ + return smime_invoke (smimein, smimeout, smimeerr, smimeinfd, smimeoutfd, + smimeerrfd, fname, NULL, NULL, SmimeKeyToUse, + SmimeCertToUse, SmimeIntermediateToUse, + SmimeSignCommand); +} + + + + +BODY *smime_build_smime_entity (BODY *a, char *certlist) +{ + char buf[LONG_STRING], certfile[LONG_STRING]; + char tempfile[_POSIX_PATH_MAX], smimeerrfile[_POSIX_PATH_MAX]; + char smimeinfile[_POSIX_PATH_MAX]; + char *cert_start = certlist, *cert_end = certlist; + FILE *smimein = NULL, *smimeerr = NULL, *fpout = NULL, *fptmp = NULL; + BODY *t; + int err = 0, empty; + pid_t thepid; + + mutt_mktemp (tempfile); + if ((fpout = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + return (NULL); + } + + mutt_mktemp (smimeerrfile); + if ((smimeerr = safe_fopen (smimeerrfile, "w+")) == NULL) + { + mutt_perror (smimeerrfile); + fclose (fpout); + mutt_unlink (tempfile); + return NULL; + } + mutt_unlink (smimeerrfile); + + mutt_mktemp (smimeinfile); + if ((fptmp = safe_fopen (smimeinfile, "w+")) == NULL) + { + mutt_perror (smimeinfile); + mutt_unlink (tempfile); + fclose (fpout); + fclose (smimeerr); + return NULL; + } + + *certfile = '\0'; + while (1) + { + int off = mutt_strlen (certfile); + while (*++cert_end && *cert_end != '\n'); + if (!*cert_end) break; + *cert_end = '\0'; + snprintf (certfile+off, sizeof (certfile)-off, " %s/%s", + NONULL(SmimeCertificates), cert_start); + *cert_end = '\n'; + cert_start = cert_end; + cert_start++; + } + + /* write a MIME entity */ + mutt_write_mime_header (a, fptmp); + fputc ('\n', fptmp); + mutt_write_mime_body (a, fptmp); + fclose (fptmp); + + if ((thepid = + smime_invoke_encrypt (&smimein, NULL, NULL, -1, + fileno (fpout), fileno (smimeerr), + smimeinfile, certfile)) == -1) + { + fclose (smimeerr); + mutt_unlink (smimeinfile); + mutt_unlink (certfile); + return (NULL); + } + + fclose (smimein); + + mutt_wait_filter (thepid); + mutt_unlink (smimeinfile); + mutt_unlink (certfile); + + fflush (fpout); + rewind (fpout); + empty = (fgetc (fpout) == EOF); + fclose (fpout); + + fflush (smimeerr); + rewind (smimeerr); + while (fgets (buf, sizeof (buf) - 1, smimeerr) != NULL) + { + err = 1; + fputs (buf, stdout); + } + fclose (smimeerr); + + /* pause if there is any error output from SMIME */ + if (err) + mutt_any_key_to_continue (NULL); + + if (empty) + { + /* fatal error while trying to encrypt message */ + if (!err) mutt_any_key_to_continue _("No output from OpenSSL.."); + mutt_unlink (tempfile); + return (NULL); + } + + t = mutt_new_body (); + t->type = TYPEAPPLICATION; + t->subtype = safe_strdup ("x-pkcs7-mime"); + mutt_set_parameter ("name", "smime.p7m", &t->parameter); + mutt_set_parameter ("smime-type", "enveloped-data", &t->parameter); + t->encoding = ENCBASE64; /* The output of OpenSSL SHOULD be binary */ + t->use_disp = 1; + t->disposition = DISPATTACH; + t->d_filename = safe_strdup ("smime.p7m"); + t->filename = safe_strdup (tempfile); + t->unlink = 1; /*delete after sending the message */ + t->parts=0; + t->next=0; + + return (t); +} + + + + +BODY *smime_sign_message (BODY *a ) +{ + BODY *t; + char buffer[LONG_STRING]; + char signedfile[_POSIX_PATH_MAX], filetosign[_POSIX_PATH_MAX]; + FILE *smimein = NULL, *smimeout = NULL, *smimeerr = NULL, *sfp = NULL; + int err = 0; + int empty = 0; + pid_t thepid; + char *intermediates = smime_get_field_from_db(NULL, SmimeDefaultKey, 1, 1); + + if (!intermediates) + { + mutt_message(_("Warning: Intermediate certificate not found.")); + intermediates = SmimeDefaultKey; /* so openssl won't complain in any case */ + } + else + intermediates[mutt_strlen (intermediates)-1] = '\0'; + + convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */ + + mutt_mktemp (filetosign); + if ((sfp = safe_fopen (filetosign, "w+")) == NULL) + { + mutt_perror (filetosign); + return NULL; + } + + mutt_mktemp (signedfile); + if ((smimeout = safe_fopen (signedfile, "w+")) == NULL) + { + mutt_perror (signedfile); + fclose (sfp); + mutt_unlink (filetosign); + return NULL; + } + + mutt_write_mime_header (a, sfp); + fputc ('\n', sfp); + mutt_write_mime_body (a, sfp); + fclose (sfp); + + + + snprintf (SmimeKeyToUse, sizeof (SmimeKeyToUse), "%s/%s", + NONULL(SmimeKeys), SmimeDefaultKey); + + snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s", + NONULL(SmimeCertificates), SmimeDefaultKey); + + snprintf (SmimeIntermediateToUse, sizeof (SmimeIntermediateToUse), "%s/%s", + NONULL(SmimeCertificates), intermediates); + + + + if ((thepid = smime_invoke_sign (&smimein, NULL, &smimeerr, + -1, fileno (smimeout), -1, filetosign)) == -1) + { + mutt_perror _("Can't open OpenSSL subprocess!"); + fclose (smimeout); + mutt_unlink (signedfile); + mutt_unlink (filetosign); + return NULL; + } + fputs (SmimePass, smimein); + fputc ('\n', smimein); + fclose (smimein); + + + mutt_wait_filter (thepid); + + /* check for errors from OpenSSL */ + err = 0; + fflush (smimeerr); + rewind (smimeerr); + while (fgets (buffer, sizeof (buffer) - 1, smimeerr) != NULL) + { + err = 1; + fputs (buffer, stdout); + } + fclose (smimeerr); + + + fflush (smimeout); + rewind (smimeout); + empty = (fgetc (smimeout) == EOF); + fclose (smimeout); + + mutt_unlink (filetosign); + + + if (err) + mutt_any_key_to_continue (NULL); + + if (empty) + { + mutt_any_key_to_continue _("No output from OpenSSL..."); + mutt_unlink (signedfile); + return (NULL); /* fatal error while signing */ + } + + t = mutt_new_body (); + t->type = TYPEMULTIPART; + t->subtype = safe_strdup ("signed"); + t->encoding = ENC7BIT; + t->use_disp = 0; + t->disposition = DISPINLINE; + + mutt_generate_boundary (&t->parameter); + /* check if this can be extracted from private key somehow.... */ + mutt_set_parameter ("micalg", "sha1", &t->parameter); + mutt_set_parameter ("protocol", "application/x-pkcs7-signature", + &t->parameter); + + t->parts = a; + a = t; + + t->parts->next = mutt_new_body (); + t = t->parts->next; + t->type = TYPEAPPLICATION; + t->subtype = safe_strdup ("x-pkcs7-signature"); + t->filename = safe_strdup (signedfile); + t->d_filename = safe_strdup ("smime.p7s"); + t->use_disp = 1; + t->disposition = DISPATTACH; + t->encoding = ENCBASE64; + t->unlink = 1; /* ok to remove this file after sending. */ + + return (a); + +} + + + + + + +/* + * Handling S/MIME - bodies. + */ + + + + + + +static +pid_t smime_invoke_verify (FILE **smimein, FILE **smimeout, FILE **smimeerr, + int smimeinfd, int smimeoutfd, int smimeerrfd, + const char *fname, const char *sig_fname, int opaque) +{ + return smime_invoke (smimein, smimeout, smimeerr, smimeinfd, smimeoutfd, + smimeerrfd, fname, sig_fname, NULL, NULL, NULL, NULL, + (opaque ? SmimeVerifyOpaqueCommand : SmimeVerifyCommand)); +} + + +static +pid_t smime_invoke_decrypt (FILE **smimein, FILE **smimeout, FILE **smimeerr, + int smimeinfd, int smimeoutfd, int smimeerrfd, + const char *fname) +{ + return smime_invoke (smimein, smimeout, smimeerr, smimeinfd, smimeoutfd, + smimeerrfd, fname, NULL, NULL, SmimeKeyToUse, + SmimeCertToUse, NULL, SmimeDecryptCommand); +} + + + +int smime_verify_one (BODY *sigbdy, STATE *s, const char *tempfile) +{ + char signedfile[_POSIX_PATH_MAX], smimeerrfile[_POSIX_PATH_MAX]; + FILE *fp=NULL, *smimeout=NULL, *smimeerr=NULL; + pid_t thepid; + int badsig = -1; + + long tmpoffset = 0; + size_t tmplength = 0; + int origType = sigbdy->type; + char *savePrefix = NULL; + + + snprintf (signedfile, sizeof (signedfile), "%s.sig", tempfile); + + /* decode to a tempfile, saving the original destination */ + fp = s->fpout; + if ((s->fpout = safe_fopen (signedfile, "w")) == NULL) + { + mutt_perror (signedfile); + return -1; + } + /* decoding the attachment changes the size and offset, so save a copy + * of the "real" values now, and restore them after processing + */ + tmplength = sigbdy->length; + tmpoffset = sigbdy->offset; + + /* if we are decoding binary bodies, we don't want to prefix each + * line with the prefix or else the data will get corrupted. + */ + savePrefix = s->prefix; + s->prefix = NULL; + + mutt_decode_attachment (sigbdy, s); + + sigbdy->length = ftell (s->fpout); + sigbdy->offset = 0; + fclose (s->fpout); + + /* restore final destination and substitute the tempfile for input */ + s->fpout = fp; + fp = s->fpin; + s->fpin = fopen (signedfile, "r"); + + /* restore the prefix */ + s->prefix = savePrefix; + + sigbdy->type = origType; + + + mutt_mktemp (smimeerrfile); + if (!(smimeerr = safe_fopen (smimeerrfile, "w+"))) + { + mutt_perror (smimeerrfile); + mutt_unlink (signedfile); + return -1; + } + + crypt_current_time (s, "OpenSSL"); + + if ((thepid = smime_invoke_verify (NULL, &smimeout, NULL, + -1, -1, fileno (smimeerr), + tempfile, signedfile, 0)) != -1) + { + fflush (smimeout); + fclose (smimeout); + + if (mutt_wait_filter (thepid)) + badsig = -1; + else + { + char *line = NULL; + int lineno = 0; + size_t linelen; + + fflush (smimeerr); + rewind (smimeerr); + + line = mutt_read_line (line, &linelen, smimeerr, &lineno); + if (linelen && !mutt_strcasecmp (line, "verification successful")) + badsig = 0; + + FREE (&line); + } + } + + fflush (smimeerr); + rewind (smimeerr); + mutt_copy_stream (smimeerr, s->fpout); + fclose (smimeerr); + + state_attach_puts (_("[-- End of OpenSSL output --]\n\n"), s); + + mutt_unlink (signedfile); + mutt_unlink (smimeerrfile); + + sigbdy->length = tmplength; + sigbdy->offset = tmpoffset; + + /* restore the original source stream */ + fclose (s->fpin); + s->fpin = fp; + + + return badsig; +} + + + + + +/* + This handles application/pkcs7-mime which can either be a signed + or an encrypted message. +*/ + +static BODY *smime_handle_entity (BODY *m, STATE *s, FILE *outFile) +{ + int len=0; + int c; + long last_pos; + char buf[HUGE_STRING]; + char outfile[_POSIX_PATH_MAX], errfile[_POSIX_PATH_MAX]; + char tmpfname[_POSIX_PATH_MAX]; + char tmptmpfname[_POSIX_PATH_MAX]; + FILE *smimeout = NULL, *smimein=NULL, *smimeerr=NULL; + FILE *tmpfp=NULL, *tmpfp_buffer=NULL, *fpout=NULL; + struct stat info; + BODY *p=NULL; + pid_t thepid=-1; + unsigned int type = mutt_is_application_smime (m); + + if (!(type & APPLICATION_SMIME)) return NULL; + + mutt_mktemp (outfile); + if ((smimeout = safe_fopen (outfile, "w+")) == NULL) + { + mutt_perror (outfile); + return NULL; + } + + mutt_mktemp (errfile); + if ((smimeerr = safe_fopen (errfile, "w+")) == NULL) + { + mutt_perror (errfile); + fclose (smimeout); smimeout = NULL; + return NULL; + } + mutt_unlink (errfile); + + + mutt_mktemp (tmpfname); + if ((tmpfp = safe_fopen (tmpfname, "w+")) == NULL) + { + mutt_perror (tmpfname); + fclose (smimeout); smimeout = NULL; + fclose (smimeerr); smimeerr = NULL; + return NULL; + } + + fseek (s->fpin, m->offset, 0); + last_pos = m->offset; + + mutt_copy_bytes (s->fpin, tmpfp, m->length); + + fflush (tmpfp); + fclose (tmpfp); + + if ((type & ENCRYPT) && + (thepid = smime_invoke_decrypt (&smimein, NULL, NULL, -1, + fileno (smimeout), fileno (smimeerr), tmpfname)) == -1) + { + fclose (smimeout); smimeout = NULL; + mutt_unlink (tmpfname); + state_attach_puts (_("[-- Error: unable to create OpenSSL subprocess! --]\n"), s); + return NULL; + } + else if ((type & SIGNOPAQUE) && + (thepid = smime_invoke_verify (&smimein, NULL, NULL, -1, + fileno (smimeout), fileno (smimeerr), NULL, + tmpfname, SIGNOPAQUE)) == -1) + { + fclose (smimeout); smimeout = NULL; + mutt_unlink (tmpfname); + state_attach_puts (_("[-- Error: unable to create OpenSSL subprocess! --]\n"), s); + return NULL; + } + + + if (type & ENCRYPT) + { + if (!smime_valid_passphrase ()) + smime_void_passphrase (); + fputs (SmimePass, smimein); + fputc ('\n', smimein); + } + + fclose (smimein); + + mutt_wait_filter (thepid); + mutt_unlink (tmpfname); + + + if (s->flags & M_DISPLAY) + { + rewind (smimeerr); + + if ((c = fgetc (smimeerr)) != EOF) + { + ungetc (c, smimeerr); + + crypt_current_time (s, "OpenSSL"); + mutt_copy_stream (smimeerr, s->fpout); + state_attach_puts (_("[-- End of OpenSSL output --]\n\n"), s); + } + + if (type & ENCRYPT) + state_attach_puts (_("[-- The following data is S/MIME" + " encrypted --]\n"), s); + else + state_attach_puts (_("[-- The following data is S/MIME signed --]\n"), s); + } + + if (smimeout) + { + fflush (smimeout); + rewind (smimeout); + + if (outFile) fpout = outFile; + else + { + mutt_mktemp (tmptmpfname); + if ((fpout = safe_fopen (tmptmpfname, "w+")) == NULL) + { + mutt_perror(tmptmpfname); + fclose (smimeout); smimeout = NULL; + return NULL; + } + } + while (fgets (buf, sizeof (buf) - 1, smimeout) != NULL) + { + len = mutt_strlen (buf); + if (len > 1 && buf[len - 2] == '\r') + { + buf[len-2] = '\n'; + buf[len-1] = '\0'; + } + fputs (buf, fpout); + } + fflush (fpout); + rewind (fpout); + + + if ((p = mutt_read_mime_header (fpout, 0)) != NULL) + { + fstat (fileno (fpout), &info); + p->length = info.st_size - p->offset; + + mutt_parse_part (fpout, p); + if (s->fpout) + { + rewind (fpout); + tmpfp_buffer = s->fpin; + s->fpin = fpout; + mutt_body_handler (p, s); + s->fpin = tmpfp_buffer; + } + + } + fclose (smimeout); + smimeout = NULL; + mutt_unlink (outfile); + + if (!outFile) + { + fclose (fpout); + mutt_unlink (tmptmpfname); + } + fpout = NULL; + } + + if (s->flags & M_DISPLAY) + { + if (type & ENCRYPT) + state_attach_puts (_("\n[-- End of S/MIME encrypted data. --]\n"), s); + else + state_attach_puts (_("\n[-- End of S/MIME signed data. --]\n"), s); + } + + if (type & SIGNOPAQUE) + { + char *line = NULL; + int lineno = 0; + size_t linelen; + + rewind (smimeerr); + + line = mutt_read_line (line, &linelen, smimeerr, &lineno); + if (linelen && !mutt_strcasecmp (line, "verification successful")) + m->goodsig = 1; + FREE (&line); + } + else + { + m->goodsig = p->goodsig; + m->badsig = p->badsig; + } + fclose (smimeerr); + + return (p); +} + + + + + +int smime_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur) +{ + + + char tempfile[_POSIX_PATH_MAX]; + STATE s; + long tmpoffset = b->offset; + size_t tmplength = b->length; + int origType = b->type; + FILE *tmpfp=NULL; + + if (!mutt_is_application_smime (b)) + return -1; + + if (b->parts) + return -1; + + memset (&s, 0, sizeof (s)); + s.fpin = fpin; + fseek (s.fpin, b->offset, 0); + + mutt_mktemp (tempfile); + if ((tmpfp = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + return (-1); + } + + mutt_unlink (tempfile); + s.fpout = tmpfp; + mutt_decode_attachment (b, &s); + fflush (tmpfp); + b->length = ftell (s.fpout); + b->offset = 0; + rewind (tmpfp); + s.fpin = tmpfp; + s.fpout = 0; + + mutt_mktemp (tempfile); + if ((*fpout = safe_fopen (tempfile, "w+")) == NULL) + { + mutt_perror (tempfile); + return (-1); + } + mutt_unlink (tempfile); + + *cur = smime_handle_entity (b, &s, *fpout); + (*cur)->goodsig = b->goodsig; + (*cur)->badsig = b->badsig; + b->type = origType; + b->length = tmplength; + b->offset = tmpoffset; + fclose (tmpfp); + + rewind (*fpout); + return (0); + +} + + +void smime_application_smime_handler (BODY *m, STATE *s) +{ + + smime_handle_entity (m, s, NULL); + +} +#endif /* CRYPT_BACKEND_CLASSIC_SMIME */ diff --git a/smime.h b/smime.h new file mode 100644 index 0000000..360ecd8 --- /dev/null +++ b/smime.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2001,2002 Oliver Ehli <elmy@acm.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + + +#ifdef CRYPT_BACKEND_CLASSIC_SMIME + +#include "mutt_crypt.h" + + + + + +#define smime_valid_passphrase() crypt_valid_passphrase(APPLICATION_SMIME) + +void smime_void_passphrase (void); + +int smime_decrypt_mime (FILE *, FILE **, BODY *, BODY **); + +void smime_application_smime_handler (BODY *, STATE *); + + +BODY* smime_sign_message (BODY *); + +BODY* smime_build_smime_entity (BODY *, char *); + +int smime_verify_one(BODY *, STATE *, const char *); + + +int smime_verify_sender(HEADER *); + + +char* smime_get_field_from_db (char *, char *, short, short); + +void smime_getkeys (ENVELOPE *); + +char* smime_ask_for_key (char *, char *, short); + +char *smime_findKeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc); + +void smime_invoke_import (char *, char *); + +#endif + + diff --git a/smime_keys.pl b/smime_keys.pl new file mode 100755 index 0000000..97f53e2 --- /dev/null +++ b/smime_keys.pl @@ -0,0 +1,964 @@ +#! /usr/bin/perl -w + +# Copyright (C) 2001,2002 Oliver Ehli <elmy@acm.org> +# Copyright (C) 2001 Mike Schiraldi <raldi@research.netsol.com> +# Copyright (C) 2003 Bjoern Jacke <bjoern@j3e.de> +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + +use strict; +use File::Copy; + +umask 077; + +require "timelocal.pl"; + +sub usage (); +sub newfile ($;$$); +sub mutt_Q ($ ); +sub mycopy ($$); + +# directory setup routines +sub mkdir_recursive ($ ); +sub init_paths (); + +# key/certificate management methods +sub list_certs (); +sub query_label (); +sub add_entry ($$$$$ ); +sub add_certificate ($$$$;$ ); +sub add_key ($$$$); +sub add_root_cert ($ ); +sub parse_pem (@ ); +sub handle_pem (@ ); +sub modify_entry ($$$;$ ); +sub remove_pair ($ ); +sub change_label ($ ); +sub verify_cert($$); +sub do_verify($$$ ); + +# Get the directories mutt uses for certificate/key storage. + +my $mutt = $ENV{MUTT_CMDLINE} || 'mutt'; +my $opensslbin = "/usr/bin/openssl"; +my @tempfiles = (); +my @cert_tmp_file = (); + +my $tmpdir; +my $private_keys_path = mutt_Q 'smime_keys'; +my $certificates_path = mutt_Q 'smime_certificates'; +my $root_certs_path = mutt_Q 'smime_ca_location'; +my $root_certs_switch; +if ( -d $root_certs_path) { + $root_certs_switch = -CApath; +} else { + $root_certs_switch = -CAfile; +} + + +# +# OPS +# + +if(@ARGV == 1 and $ARGV[0] eq "init") { + init_paths; +} +elsif(@ARGV == 1 and $ARGV[0] eq "list") { + list_certs; +} +elsif(@ARGV == 2 and $ARGV[0] eq "label") { + change_label($ARGV[1]); +} +elsif(@ARGV == 2 and $ARGV[0] eq "add_cert") { + my $format = -B $ARGV[1] ? 'DER' : 'PEM'; + my $cmd = "$opensslbin x509 -noout -hash -in $ARGV[1] -inform $format"; + my $cert_hash = `$cmd`; + $? and die "'$cmd' returned $?"; + chomp($cert_hash); + my $label = query_label; + &add_certificate($ARGV[1], \$cert_hash, 1, $label, '?'); +} +elsif(@ARGV == 2 and $ARGV[0] eq "add_pem") { + -e $ARGV[1] and -s $ARGV[1] or die("$ARGV[1] is nonexistent or empty."); + open(PEM_FILE, "<$ARGV[1]") or die("Can't open $ARGV[1]: $!"); + my @pem = <PEM_FILE>; + close(PEM_FILE); + handle_pem(@pem); +} +elsif( @ARGV == 2 and $ARGV[0] eq "add_p12") { + -e $ARGV[1] and -s $ARGV[1] or die("$ARGV[1] is nonexistent or empty."); + + print "\nNOTE: This will ask you for two passphrases:\n"; + print " 1. The passphrase you used for exporting\n"; + print " 2. The passphrase you wish to secure your private key with.\n\n"; + + my $pem_file = "$ARGV[1].pem"; + + my $cmd = "$opensslbin pkcs12 -in $ARGV[1] -out $pem_file"; + system $cmd and die "'$cmd' returned $?"; + + -e $pem_file and -s $pem_file or die("Conversion of $ARGV[1] failed."); + open(PEM_FILE, $pem_file) or die("Can't open $pem_file: $!"); + my @pem = <PEM_FILE>; + close(PEM_FILE); + unlink $pem_file; + handle_pem(@pem); +} +elsif(@ARGV == 4 and $ARGV[0] eq "add_chain") { + my $mailbox; + my $format = -B $ARGV[2] ? 'DER' : 'PEM'; + my $cmd = "$opensslbin x509 -noout -hash -in $ARGV[2] -inform $format"; + my $cert_hash = `$cmd`; + + $? and die "'$cmd' returned $?"; + + $format = -B $ARGV[3] ? 'DER' : 'PEM'; + + $cmd = "$opensslbin x509 -noout -hash -in $ARGV[3] -inform $format"; + my $issuer_hash = `$cmd`; + $? and die "'$cmd' returned $?"; + + chomp($cert_hash); + chomp($issuer_hash); + + my $label = query_label; + + add_certificate($ARGV[3], \$issuer_hash, 0, $label); + my @mailbox = &add_certificate($ARGV[2], \$cert_hash, 1, $label, $issuer_hash); + + foreach $mailbox (@mailbox) { + chomp($mailbox); + add_key($ARGV[1], $cert_hash, $mailbox, $label); + } +} +elsif((@ARGV == 2 or @ARGV == 3) and $ARGV[0] eq "verify") { + verify_cert($ARGV[1], $ARGV[2]); +} +elsif(@ARGV == 2 and $ARGV[0] eq "remove") { + remove_pair($ARGV[1]); +} +elsif(@ARGV == 2 and $ARGV[0] eq "add_root") { + add_root_cert($ARGV[1]); +} +else { + usage; + exit(1); +} + +exit(0); + + + + + +############## sub-routines ######################## + +sub usage () { + print <<EOF; + +Usage: smime_keys <operation> [file(s) | keyID [file(s)]] + + with operation being one of: + + init : no files needed, inits directory structure. + + list : lists the certificates stored in database. + label : keyID required. changes/removes/adds label. + remove : keyID required. + verify : 1=keyID and optionally 2=CRL + Verifies the certificate chain, and optionally wether + this certificate is included in supplied CRL (PEM format). + Note: to verify all certificates at the same time, + replace keyID with "all" + + add_cert : certificate required. + add_chain : three files reqd: 1=Key, 2=certificate + plus 3=intermediate certificate(s). + add_p12 : one file reqd. Adds keypair to database. + file is PKCS12 (e.g. export from netscape). + add_pem : one file reqd. Adds keypair to database. + (file was converted from e.g. PKCS12). + + add_root : one file reqd. Adds PEM root certificate to the location + specified within muttrc (smime_verify_* command) + +EOF +} + +sub mutt_Q ($) { + my $var = shift or die; + + my $cmd = "$mutt -v >/dev/null 2>/dev/null"; + system ($cmd) == 0 + or die<<EOF; +Couldn't launch mutt. I attempted to do so by running the command "$mutt". +If that's not the right command, you can override it by setting the +environment variable \$MUTT_CMDLINE +EOF + + $cmd = "$mutt -Q $var 2>/dev/null"; + my $answer = `$cmd`; + + $? and die<<EOF; +Couldn't look up the value of the mutt variable "$var". +You must set this in your mutt config file. See contrib/smime.rc for an example. +EOF +#' + + $answer =~ /\"(.*?)\"/ and return $1; + + $answer =~ /^Mutt (.*?) / and die<<EOF; +This script requires mutt 1.5.0 or later. You are using mutt $1. +EOF + + die "Value of $var is weird\n"; +} + +sub mycopy ($$) { + my $source = shift or die; + my $dest = shift or die; + + copy $source, $dest or die "Problem copying $source to $dest: $!\n"; +} + +# +# directory setup routines +# + + +sub mkdir_recursive ($) { + my $path = shift or die; + my $tmp_path; + + for my $dir (split /\//, $path) { + $tmp_path .= "$dir/"; + + -d $tmp_path + or mkdir $tmp_path, 0700 + or die "Can't mkdir $tmp_path: $!"; + } +} + +sub init_paths () { + mkdir_recursive($certificates_path); + mkdir_recursive($private_keys_path); + + my $file; + + $file = $certificates_path . "/.index"; + -f $file or open(TMP_FILE, ">$file") and close(TMP_FILE) + or die "Can't touch $file: $!"; + + $file = $private_keys_path . "/.index"; + -f $file or open(TMP_FILE, ">$file") and close(TMP_FILE) + or die "Can't touch $file: $!"; +} + + + +# +# certificate management methods +# + +sub list_certs () { + my %keyflags = ( 'i', '(Invalid)', 'r', '(Revoked)', 'e', '(Expired)', + 'u', '(Unverified)', 'v', '(Valid)', 't', '(Trusted)'); + + open(INDEX, "<$certificates_path/.index") or + die "Couldn't open $certificates_path/.index: $!"; + + print "\n"; + while(<INDEX>) { + my $tmp; + my @tmp; + my $tab = " "; + my @fields = split; + + if($fields[2] eq '-') { + print "$fields[1]: Issued for: $fields[0] $keyflags{$fields[4]}\n"; + } else { + print "$fields[1]: Issued for: $fields[0] \"$fields[2]\" $keyflags{$fields[4]}\n"; + } + + my $certfile = "$certificates_path/$fields[1]"; + my $cert; + { + open F, $certfile or + die "Couldn't open $certfile: $!"; + local $/; + $cert = <F>; + close F; + } + + my $subject_in; + my $issuer_in; + my $date1_in; + my $date2_in; + + my $format = -B $certfile ? 'DER' : 'PEM'; + my $cmd = "$opensslbin x509 -subject -issuer -dates -noout -in $certfile -inform $format"; + ($subject_in, $issuer_in, $date1_in, $date2_in) = `$cmd`; + $? and print "ERROR: '$cmd' returned $?\n\n" and next; + + + my @subject = split(/\//, $subject_in); + while(@subject) { + $tmp = shift @subject; + ($tmp =~ /^CN\=/) and last; + undef $tmp; + } + defined $tmp and @tmp = split (/\=/, $tmp) and + print $tab."Subject: $tmp[1]\n"; + + my @issuer = split(/\//, $issuer_in); + while(@issuer) { + $tmp = shift @issuer; + ($tmp =~ /^CN\=/) and last; + undef $tmp; + } + defined $tmp and @tmp = split (/\=/, $tmp) and + print $tab."Issued by: $tmp[1]"; + + if ( defined $date1_in and defined $date2_in ) { + @tmp = split (/\=/, $date1_in); + $tmp = $tmp[1]; + @tmp = split (/\=/, $date2_in); + print $tab."Certificate is not valid before $tmp". + $tab." or after ".$tmp[1]; + } + + -e "$private_keys_path/$fields[1]" and + print "$tab - Matching private key installed -\n"; + + $format = -B "$certificates_path/$fields[1]" ? 'DER' : 'PEM'; + $cmd = "$opensslbin x509 -purpose -noout -in $certfile -inform $format"; + my $purpose_in = `$cmd`; + $? and die "'$cmd' returned $?"; + + my @purpose = split (/\n/, $purpose_in); + print "$tab$purpose[0] (displays S/MIME options only)\n"; + while(@purpose) { + $tmp = shift @purpose; + ($tmp =~ /^S\/MIME/ and $tmp =~ /Yes/) or next; + my @tmptmp = split (/:/, $tmp); + print "$tab $tmptmp[0]\n"; + } + + print "\n"; + } + + close(INDEX); +} + + + +sub query_label () { + my @words; + my $input; + + print "\nYou may assign a label to this key, so you don't have to remember\n"; + print "the key ID. This has to be _one_ word (no whitespaces).\n\n"; + + print "Enter label: "; + chomp($input = <STDIN>); + + my ($label, $junk) = split(/\s/, $input, 2); + + defined $junk + and print "\nUsing '$label' as label; ignoring '$junk'\n"; + + defined $label || ($label = "-"); + + return $label; +} + + + +sub add_entry ($$$$$) { + my $mailbox = shift or die; + my $hashvalue = shift or die; + my $use_cert = shift; + my $label = shift or die; + my $issuer_hash = shift; + + my @fields; + + if ($use_cert) { + open(INDEX, "+<$certificates_path/.index") or + die "Couldn't open $certificates_path/.index: $!"; + } + else { + open(INDEX, "+<$private_keys_path/.index") or + die "Couldn't open $private_keys_path/.index: $!"; + } + + while(<INDEX>) { + @fields = split; + return if ($fields[0] eq $mailbox && $fields[1] eq $hashvalue); + } + + if ($use_cert) { + print INDEX "$mailbox $hashvalue $label $issuer_hash u\n"; + } + else { + print INDEX "$mailbox $hashvalue $label \n"; + } + + close(INDEX); +} + + +sub add_certificate ($$$$;$) { + my $filename = shift or die; + my $hashvalue = shift or die; + my $add_to_index = shift; + my $label = shift or die; + my $issuer_hash = shift; + + my $iter = 0; + my @mailbox; + my $mailbox; + + while(-e "$certificates_path/$$hashvalue.$iter") { + my ($t1, $t2); + my $format = -B $filename ? 'DER' : 'PEM'; + my $cmd = "$opensslbin x509 -in $filename -inform $format -fingerprint -noout"; + $t1 = `$cmd`; + $? and die "'$cmd' returned $?"; + + $format = -B "$certificates_path/$$hashvalue.$iter" ? 'DER' : 'PEM'; + $cmd = "$opensslbin x509 -in $certificates_path/$$hashvalue.$iter -inform $format -fingerprint -noout"; + $t2 = `$cmd`; + $? and die "'$cmd' returned $?"; + + $t1 eq $t2 and last; + + $iter++; + } + $$hashvalue .= ".$iter"; + + if (-e "$certificates_path/$$hashvalue") { + print "\nCertificate: $certificates_path/$$hashvalue already installed.\n"; + } + else { + mycopy $filename, "$certificates_path/$$hashvalue"; + + if ($add_to_index) { + my $format = -B $filename ? 'DER' : 'PEM'; + my $cmd = "$opensslbin x509 -in $filename -inform $format -email -noout"; + @mailbox = `$cmd`; + $? and die "'$cmd' returned $?"; + + foreach $mailbox (@mailbox) { + chomp($mailbox); + add_entry($mailbox, $$hashvalue, 1, $label, $issuer_hash); + + print "\ncertificate $$hashvalue ($label) for $mailbox added.\n"; + } + verify_cert($$hashvalue, undef); + } + else { + print "added certificate: $certificates_path/$$hashvalue.\n"; + } + } + + return @mailbox; +} + + +sub add_key ($$$$) { + my $file = shift or die; + my $hashvalue = shift or die; + my $mailbox = shift or die; + my $label = shift or die; + + unless (-e "$private_keys_path/$hashvalue") { + mycopy $file, "$private_keys_path/$hashvalue"; + } + + add_entry($mailbox, $hashvalue, 0, $label, ""); + print "added private key: " . + "$private_keys_path/$hashvalue for $mailbox\n"; +} + + + + + + +sub parse_pem (@) { + my $state = 0; + my $cert_iter = 0; + my @bag_attribs; + my $numBags = 0; + + $cert_tmp_file[$cert_iter] = newfile("cert_tmp.$cert_iter","temp"); + my $cert_tmp_iter = $cert_tmp_file[$cert_iter]; + open(CERT_FILE, ">$cert_tmp_iter") + or die "Couldn't open $cert_tmp_iter: $!"; + + while($_ = shift(@_)) { + if(/^Bag Attributes/) { + $numBags++; + $state == 0 or die("PEM-parse error at: $."); + $state = 1; + $bag_attribs[$cert_iter*4+1] = ""; + $bag_attribs[$cert_iter*4+2] = ""; + $bag_attribs[$cert_iter*4+3] = ""; + } + + ($state == 1) and /localKeyID:\s*(.*)/ + and ($bag_attribs[$cert_iter*4+1] = $1); + + ($state == 1) and /subject=\s*(.*)/ + and ($bag_attribs[$cert_iter*4+2] = $1); + + ($state == 1) and /issuer=\s*(.*)/ + and ($bag_attribs[$cert_iter*4+3] = $1); + + if(/^-----/) { + if(/BEGIN/) { + print CERT_FILE; + $state = 2; + + if(/PRIVATE/) { + $bag_attribs[$cert_iter*4] = "K"; + next; + } + if(/CERTIFICATE/) { + $bag_attribs[$cert_iter*4] = "C"; + next; + } + die("What's this: $_"); + } + if(/END/) { + $state = 0; + print CERT_FILE; + close(CERT_FILE); + $cert_iter++; + $cert_tmp_file[$cert_iter] = newfile("cert_tmp.$cert_iter","temp"); + $cert_tmp_iter = $cert_tmp_file[$cert_iter]; + open(CERT_FILE, ">$cert_tmp_iter") + or die "Couldn't open $cert_tmp_iter: $!"; + next; + } + } + print CERT_FILE; + } + close(CERT_FILE); + + # I'll add support for unbagged cetificates, in case this is needed. + $numBags == $cert_iter or + die("Not all contents were bagged. can't continue."); + + return @bag_attribs; +} + + +# This requires the Bag Attributes to be set +sub handle_pem (@) { + + my @pem_contents; + my $iter=0; + my $root_cert; + my $key; + my $certificate; + my $intermediate; + my @mailbox; + my $mailbox; + + @pem_contents = &parse_pem(@_); + + # private key and certificate use the same 'localKeyID' + while($iter <= $#pem_contents / 4) { + if($pem_contents[$iter * 4] eq "K") { + $key = $iter; + last; + } + $iter++; + } + ($iter > $#pem_contents / 2) and die("Couldn't find private key!"); + + $pem_contents[($key * 4)+1] or die("Attribute 'localKeyID' wasn't set."); + + $iter = 0; + while($iter <= $#pem_contents / 4) { + $iter == $key and ($iter++) and next; + if($pem_contents[($iter * 4)+1] eq $pem_contents[($key * 4)+1]) { + $certificate = $iter; + last; + } + $iter++; + } + ($iter > $#pem_contents / 4) and die("Couldn't find matching certificate!"); + + my $tmp_key = newfile("tmp_key","temp"); + mycopy $cert_tmp_file[$key], $tmp_key; + my $tmp_certificate = newfile("tmp_certificate","temp"); + mycopy $cert_tmp_file[$certificate], $tmp_certificate; + + # root certificate is self signed + $iter = 0; + + while($iter <= $#pem_contents / 4) { + if ($iter == $key or $iter == $certificate) { + $iter++; + next; + } + + if($pem_contents[($iter * 4)+2] eq $pem_contents[($iter * 4)+3]) { + $root_cert = $iter; + last; + } + $iter++; + } + if ($iter > $#pem_contents / 4) { + print "Couldn't identify root certificate!\n"; + $root_cert = -1; + } + + # what's left are intermediate certificates. + $iter = 0; + + # needs to be set, so we can check it later + $intermediate = $root_cert; + my $tmp_issuer_cert = newfile("tmp_issuer_cert","temp"); + while($iter <= $#pem_contents / 4) { + if ($iter == $key or $iter == $certificate or $iter == $root_cert) { + $iter++; + next; + } + + open (IC, ">> $tmp_issuer_cert") or die "can't open $tmp_issuer_cert: $?"; + my $cert_tmp_iter = $cert_tmp_file[$iter]; + open (CERT, "< $cert_tmp_iter") or die "can't open $cert_tmp_iter: $?"; + print IC while (<CERT>); + close IC; + close CERT; + + # although there may be many, just need to know if there was any + $intermediate = $iter; + + $iter++; + } + + # no intermediate certificates ? use root-cert instead (if that was found...) + if($intermediate == $root_cert) { + if ($root_cert == -1) { + die("No root and no intermediate certificates. Can't continue."); + } + mycopy $cert_tmp_file[$root_cert], $tmp_issuer_cert; + } + + my $label = query_label; + + my $format = -B $tmp_certificate ? 'DER' : 'PEM'; + my $cmd = "$opensslbin x509 -noout -hash -in $tmp_certificate -inform $format"; + my $cert_hash = `$cmd`; + $? and die "'$cmd' returned $?"; + + $format = -B $tmp_issuer_cert ? 'DER' : 'PEM'; + $cmd = "$opensslbin x509 -noout -hash -in $tmp_issuer_cert -inform $format"; + my $issuer_hash = `$cmd`; + $? and die "'$cmd' returned $?"; + + chomp($cert_hash); chomp($issuer_hash); + + # Note: $cert_hash will be changed to reflect the correct filename + # within add_cert() ONLY, so these _have_ to get called first.. + add_certificate($tmp_issuer_cert, \$issuer_hash, 0, $label); + @mailbox = &add_certificate("$tmp_certificate", \$cert_hash, 1, $label, $issuer_hash); + foreach $mailbox (@mailbox) { + chomp($mailbox); + add_key($tmp_key, $cert_hash, $mailbox, $label); + } +} + + + + + + +sub modify_entry ($$$;$ ) { + my $op = shift or die; + my $hashvalue = shift or die; + my $use_cert = shift; + my $crl; + my $label; + my $path; + my @fields; + + $op eq 'L' and ($label = shift or die); + $op eq 'V' and ($crl = shift); + + + if ($use_cert) { + $path = $certificates_path; + } + else { + $path = $private_keys_path; + } + + open(INDEX, "<$path/.index") or + die "Couldn't open $path/.index: $!"; + my $newindex = newfile("$path/.index.tmp"); + open(NEW_INDEX, ">$newindex") or + die "Couldn't create $newindex: $!"; + + while(<INDEX>) { + @fields = split; + if($fields[1] eq $hashvalue or $hashvalue eq 'all') { + $op eq 'R' and next; + print NEW_INDEX "$fields[0] $fields[1]"; + if($op eq 'L') { + if($use_cert) { + print NEW_INDEX " $label $fields[3] $fields[4]"; + } + else { + print NEW_INDEX " $label"; + } + } + if ($op eq 'V') { + print "\n==> about to verify certificate of $fields[0]\n"; + my $flag = &do_verify($fields[1], $fields[3], $crl); + print NEW_INDEX " $fields[2] $fields[3] $flag"; + } + print NEW_INDEX "\n"; + next; + } + print NEW_INDEX; + } + close(INDEX); + close(NEW_INDEX); + + rename $newindex, "$path/.index" + or die "Couldn't rename $newindex to $path/.index: $!\n"; + + print "\n"; +} + + + + +sub remove_pair ($ ) { + my $keyid = shift or die; + + if (-e "$certificates_path/$keyid") { + unlink "$certificates_path/$keyid"; + modify_entry('R', $keyid, 1); + print "Removed certificate $keyid.\n"; + } + else { + die "No such certificate: $keyid"; + } + + if (-e "$private_keys_path/$keyid") { + unlink "$private_keys_path/$keyid"; + modify_entry('R', $keyid, 0); + print "Removed private key $keyid.\n"; + } +} + + + +sub change_label ($ ) { + my $keyid = shift or die; + + my $label = query_label; + + if (-e "$certificates_path/$keyid") { + modify_entry('L', $keyid, 1, $label); + print "Changed label for certificate $keyid.\n"; + } + else { + die "No such certificate: $keyid"; + } + + if (-e "$private_keys_path/$keyid") { + modify_entry('L', $keyid, 0, $label); + print "Changed label for private key $keyid.\n"; + } + +} + + + + +sub verify_cert ($$) { + my $keyid = shift or die; + my $crl = shift; + + -e "$certificates_path/$keyid" or $keyid eq 'all' + or die "No such certificate: $keyid"; + modify_entry('V', $keyid, 1, $crl); +} + + + + +sub do_verify($$$) { + + my $cert = shift or die; + my $issuerid = shift or die; + my $crl = shift; + + my $result = 'i'; + my $trust_q; + my $issuer_path; + my $cert_path = "$certificates_path/$cert"; + + if($issuerid eq '?') { + $issuer_path = "$certificates_path/$cert"; + } else { + $issuer_path = "$certificates_path/$issuerid"; + } + + my $cmd = "$opensslbin verify $root_certs_switch $root_certs_path -purpose smimesign -purpose smimeencrypt -untrusted $issuer_path $cert_path"; + my $output = `$cmd`; + $? and die "'$cmd' returned $?"; + chop $output; + print "\n$output\n"; + + ($output =~ /OK/) and ($result = 'v'); + + $result eq 'i' and return $result; + + my $format = -B $cert_path ? 'DER' : 'PEM'; + $cmd = "$opensslbin x509 -dates -serial -noout -in $cert_path -inform $format"; + (my $date1_in, my $date2_in, my $serial_in) = `$cmd`; + $? and die "'$cmd' returned $?"; + + if ( defined $date1_in and defined $date2_in ) { + my @tmp = split (/\=/, $date1_in); + my $tmp = $tmp[1]; + @tmp = split (/\=/, $date2_in); + my %months = ('Jan', '00', 'Feb', '01', 'Mar', '02', 'Apr', '03', + 'May', '04', 'Jun', '05', 'Jul', '06', 'Aug', '07', + 'Sep', '08', 'Oct', '09', 'Nov', '10', 'Dec', '11'); + + my @fields = + $tmp =~ /(\w+)\s*(\d+)\s*(\d+):(\d+):(\d+)\s*(\d+)\s*GMT/; + + $#fields != 5 and print "Expiration Date: Parse Error : $tmp\n\n" or + timegm($fields[4], $fields[3], $fields[2], $fields[1], + $months{$fields[0]}, $fields[5]) > time and $result = 'e'; + $result eq 'e' and print "Certificate is not yet valid.\n" and return $result; + + @fields = + $tmp[1] =~ /(\w+)\s*(\d+)\s*(\d+):(\d+):(\d+)\s*(\d+)\s*GMT/; + + $#fields != 5 and print "Expiration Date: Parse Error : $tmp[1]\n\n" or + timegm($fields[4], $fields[3], $fields[2], $fields[1], + $months{$fields[0]}, $fields[5]) < time and $result = 'e'; + $result eq 'e' and print "Certificate has expired.\n" and return $result; + + } + + if ( defined $crl ) { + my @serial = split (/\=/, $serial_in); + my $cmd = "$opensslbin crl -text -noout -in $crl | grep -A1 $serial[1]"; + (my $l1, my $l2) = `$cmd`; + $? and die "'$cmd' returned $?"; + + if ( defined $l2 ) { + my @revoke_date = split (/:\s/, $l2); + print "FAILURE: Certificate $cert has been revoked on $revoke_date[1]\n"; + $result = 'r'; + } + } + print "\n"; + + if ($result eq 'v') { + return 't'; + } + + return $result; +} + + + +sub add_root_cert ($) { + my $root_cert = shift or die; + + my $format = -B $root_cert ? 'DER' : 'PEM'; + + my $cmd = "$opensslbin x509 -noout -hash -in $root_cert -inform $format"; + my $root_hash = `$cmd`; + $? and die "'$cmd' returned $?"; + + if (-d $root_certs_path) { + -e "$root_certs_path/$root_hash" or + mycopy $root_cert, "$root_certs_path/$root_hash"; + } + else { + open(ROOT_CERTS, ">>$root_certs_path") or + die ("Couldn't open $root_certs_path for writing"); + + $cmd = "$opensslbin x509 -in $root_cert -inform $format -fingerprint -noout"; + $? and die "'$cmd' returned $?"; + chomp(my $md5fp = `$cmd`); + + $cmd = "$opensslbin x509 -in $root_cert -inform $format -text -noout"; + $? and die "'$cmd' returned $?"; + my @cert_text = `$cmd`; + + print "Enter a label, name or description for this certificate: "; + my $input = <STDIN>; + + my $line = "=======================================\n"; + print ROOT_CERTS "\n$input$line$md5fp\nPEM-Data:\n"; + + $cmd = "$opensslbin x509 -in $root_cert -inform $format"; + my $cert = `$cmd`; + $? and die "'$cmd' returned $?"; + print ROOT_CERTS $cert; + print ROOT_CERTS @cert_text; + close (ROOT_CERTS); + } + +} + +sub newfile ($;$$) { + # returns a file name which does not exist for tmp file creation + my $filename = shift; + my $option = shift; + $option = "notemp" if (not defined($option)); + if (! $tmpdir and $option eq "temp") { + $tmpdir = mutt_Q 'tmpdir'; + $tmpdir = newfile("$tmpdir/smime"); + mkdir $tmpdir, 0700 || die "Can't create $tmpdir: $!\n"; + } + $filename = "$tmpdir/$filename" if ($option eq "temp"); + my $newfilename = $filename; + my $count = 0; + while (-e $newfilename) { + $newfilename = "$filename.$count"; + $count++; + } + unshift(@tempfiles,$newfilename); + return $newfilename; +} + + +END { + # remove all our temporary files in the end: + for (@tempfiles){ + if (-f) { + unlink; + } elsif (-d) { + rmdir; + } + } +} diff --git a/snprintf.c b/snprintf.c new file mode 100644 index 0000000..c2ebbde --- /dev/null +++ b/snprintf.c @@ -0,0 +1,789 @@ +/************************************************************** + * Original: + * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 + * A bombproof version of doprnt (dopr) included. + * Sigh. This sort of thing is always nasty do deal with. Note that + * the version here does not include floating point... + * + * snprintf() is used instead of sprintf() as it does limit checks + * for string length. This covers a nasty loophole. + * + * The other functions are there to prevent NULL pointers from + * causing nast effects. + * + * More Recently: + * Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43 + * This was ugly. It is still ugly. I opted out of floating point + * numbers, but the formatter understands just about everything + * from the normal C string format, at least as far as I can tell from + * the Solaris 2.5 printf(3S) man page. + * + * Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1 + * Ok, added some minimal floating point support, which means this + * probably requires libm on most operating systems. Don't yet + * support the exponent (e,E) and sigfig (g,G). Also, fmtint() + * was pretty badly broken, it just wasn't being exercised in ways + * which showed it, so that's been fixed. Also, formated the code + * to mutt conventions, and removed dead code left over from the + * original. Also, there is now a builtin-test, just compile with: + * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm + * and run snprintf for results. + * + * Thomas Roessler <roessler@does-not-exist.org> 01/27/98 for mutt 0.89i + * The PGP code was using unsigned hexadecimal formats. + * Unfortunately, unsigned formats simply didn't work. + * + * Michael Elkins <me@mutt.org> 03/05/98 for mutt 0.90.8 + * The original code assumed that both snprintf() and vsnprintf() were + * missing. Some systems only have snprintf() but not vsnprintf(), so + * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF. + * + **************************************************************/ + +#include "config.h" + +#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) + +#include <string.h> +# include <ctype.h> +#include <sys/types.h> + +/* Define this as a fall through, HAVE_STDARG_H is probably already set */ + +#define HAVE_VARARGS_H + +/* varargs declarations: */ + +#if defined(HAVE_STDARG_H) +# include <stdarg.h> +# define HAVE_STDARGS /* let's hope that works everywhere (mj) */ +# define VA_LOCAL_DECL va_list ap +# define VA_START(f) va_start(ap, f) +# define VA_SHIFT(v,t) ; /* no-op for ANSI */ +# define VA_END va_end(ap) +#else +# if defined(HAVE_VARARGS_H) +# include <varargs.h> +# undef HAVE_STDARGS +# define VA_LOCAL_DECL va_list ap +# define VA_START(f) va_start(ap) /* f is ignored! */ +# define VA_SHIFT(v,t) v = va_arg(ap,t) +# define VA_END va_end(ap) +# else +/*XX ** NO VARARGS ** XX*/ +# endif +#endif + +/*int snprintf (char *str, size_t count, const char *fmt, ...);*/ +/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/ + +static void dopr (char *buffer, size_t maxlen, const char *format, + va_list args); +static void fmtstr (char *buffer, size_t *currlen, size_t maxlen, + char *value, int flags, int min, int max); +static void fmtint (char *buffer, size_t *currlen, size_t maxlen, + long value, int base, int min, int max, int flags); +static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, + long double fvalue, int min, int max, int flags); +static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c ); + +/* + * dopr(): poor man's version of doprintf + */ + +/* format read states */ +#define DP_S_DEFAULT 0 +#define DP_S_FLAGS 1 +#define DP_S_MIN 2 +#define DP_S_DOT 3 +#define DP_S_MAX 4 +#define DP_S_MOD 5 +#define DP_S_CONV 6 +#define DP_S_DONE 7 + +/* format flags - Bits */ +#define DP_F_MINUS (1 << 0) +#define DP_F_PLUS (1 << 1) +#define DP_F_SPACE (1 << 2) +#define DP_F_NUM (1 << 3) +#define DP_F_ZERO (1 << 4) +#define DP_F_UP (1 << 5) +#define DP_F_UNSIGNED (1 << 6) + +/* Conversion Flags */ +#define DP_C_SHORT 1 +#define DP_C_LONG 2 +#define DP_C_LDOUBLE 3 + +#define char_to_int(p) (p - '0') +#undef MAX +#define MAX(p,q) ((p >= q) ? p : q) + +static void dopr (char *buffer, size_t maxlen, const char *format, va_list args) +{ + char ch; + long value; + long double fvalue; + char *strvalue; + int min; + int max; + int state; + int flags; + int cflags; + size_t currlen; + + state = DP_S_DEFAULT; + currlen = flags = cflags = min = 0; + max = -1; + ch = *format++; + + while (state != DP_S_DONE) + { + if ((ch == '\0') || (currlen >= maxlen)) + state = DP_S_DONE; + + switch(state) + { + case DP_S_DEFAULT: + if (ch == '%') + state = DP_S_FLAGS; + else + dopr_outch (buffer, &currlen, maxlen, ch); + ch = *format++; + break; + case DP_S_FLAGS: + switch (ch) + { + case '-': + flags |= DP_F_MINUS; + ch = *format++; + break; + case '+': + flags |= DP_F_PLUS; + ch = *format++; + break; + case ' ': + flags |= DP_F_SPACE; + ch = *format++; + break; + case '#': + flags |= DP_F_NUM; + ch = *format++; + break; + case '0': + flags |= DP_F_ZERO; + ch = *format++; + break; + default: + state = DP_S_MIN; + break; + } + break; + case DP_S_MIN: + if (isdigit((unsigned char)ch)) + { + min = 10*min + char_to_int (ch); + ch = *format++; + } + else if (ch == '*') + { + min = va_arg (args, int); + ch = *format++; + state = DP_S_DOT; + } + else + state = DP_S_DOT; + break; + case DP_S_DOT: + if (ch == '.') + { + state = DP_S_MAX; + ch = *format++; + } + else + state = DP_S_MOD; + break; + case DP_S_MAX: + if (isdigit((unsigned char)ch)) + { + if (max < 0) + max = 0; + max = 10*max + char_to_int (ch); + ch = *format++; + } + else if (ch == '*') + { + max = va_arg (args, int); + ch = *format++; + state = DP_S_MOD; + } + else + state = DP_S_MOD; + break; + case DP_S_MOD: + /* Currently, we don't support Long Long, bummer */ + switch (ch) + { + case 'h': + cflags = DP_C_SHORT; + ch = *format++; + break; + case 'l': + cflags = DP_C_LONG; + ch = *format++; + break; + case 'L': + cflags = DP_C_LDOUBLE; + ch = *format++; + break; + default: + break; + } + state = DP_S_CONV; + break; + case DP_S_CONV: + switch (ch) + { + case 'd': + case 'i': + if (cflags == DP_C_SHORT) + value = va_arg (args, short int); + else if (cflags == DP_C_LONG) + value = va_arg (args, long int); + else + value = va_arg (args, int); + fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); + break; + case 'o': + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned short int); + else if (cflags == DP_C_LONG) + value = va_arg (args, unsigned long int); + else + value = va_arg (args, unsigned int); + fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags); + break; + case 'u': + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned short int); + else if (cflags == DP_C_LONG) + value = va_arg (args, unsigned long int); + else + value = va_arg (args, unsigned int); + fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); + break; + case 'X': + flags |= DP_F_UP; + case 'x': + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned short int); + else if (cflags == DP_C_LONG) + value = va_arg (args, unsigned long int); + else + value = va_arg (args, unsigned int); + fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags); + break; + case 'f': + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, long double); + else + fvalue = va_arg (args, double); + /* um, floating point? */ + fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); + break; + case 'E': + flags |= DP_F_UP; + case 'e': + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, long double); + else + fvalue = va_arg (args, double); + break; + case 'G': + flags |= DP_F_UP; + case 'g': + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, long double); + else + fvalue = va_arg (args, double); + break; + case 'c': + dopr_outch (buffer, &currlen, maxlen, va_arg (args, int)); + break; + case 's': + strvalue = va_arg (args, char *); + if (max < 0) + max = maxlen; /* ie, no max */ + fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); + break; + case 'p': + strvalue = va_arg (args, void *); + fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags); + break; + case 'n': + if (cflags == DP_C_SHORT) + { + short int *num; + num = va_arg (args, short int *); + *num = currlen; + } + else if (cflags == DP_C_LONG) + { + long int *num; + num = va_arg (args, long int *); + *num = currlen; + } + else + { + int *num; + num = va_arg (args, int *); + *num = currlen; + } + break; + case '%': + dopr_outch (buffer, &currlen, maxlen, ch); + break; + case 'w': + /* not supported yet, treat as next char */ + ch = *format++; + break; + default: + /* Unknown, skip */ + break; + } + ch = *format++; + state = DP_S_DEFAULT; + flags = cflags = min = 0; + max = -1; + break; + case DP_S_DONE: + break; + default: + /* hmm? */ + break; /* some picky compilers need this */ + } + } + if (currlen < maxlen - 1) + buffer[currlen] = '\0'; + else + buffer[maxlen - 1] = '\0'; +} + +static void fmtstr (char *buffer, size_t *currlen, size_t maxlen, + char *value, int flags, int min, int max) +{ + int padlen, strln; /* amount to pad */ + int cnt = 0; + + if (value == 0) + { + value = "<NULL>"; + } + + for (strln = 0; value[strln]; ++strln); /* strlen */ + padlen = min - strln; + if (padlen < 0) + padlen = 0; + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justify */ + + while ((padlen > 0) && (cnt < max)) + { + dopr_outch (buffer, currlen, maxlen, ' '); + --padlen; + ++cnt; + } + while (*value && (cnt < max)) + { + dopr_outch (buffer, currlen, maxlen, *value++); + ++cnt; + } + while ((padlen < 0) && (cnt < max)) + { + dopr_outch (buffer, currlen, maxlen, ' '); + ++padlen; + ++cnt; + } +} + +/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ + +static void fmtint (char *buffer, size_t *currlen, size_t maxlen, + long value, int base, int min, int max, int flags) +{ + int signvalue = 0; + unsigned long uvalue; + char convert[20]; + int place = 0; + int spadlen = 0; /* amount to space pad */ + int zpadlen = 0; /* amount to zero pad */ + int caps = 0; + + if (max < 0) + max = 0; + + uvalue = value; + + if(!(flags & DP_F_UNSIGNED)) + { + if( value < 0 ) { + signvalue = '-'; + uvalue = -value; + } + else + if (flags & DP_F_PLUS) /* Do a sign (+/i) */ + signvalue = '+'; + else + if (flags & DP_F_SPACE) + signvalue = ' '; + } + + if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ + + do { + convert[place++] = + (caps? "0123456789ABCDEF":"0123456789abcdef") + [uvalue % (unsigned)base ]; + uvalue = (uvalue / (unsigned)base ); + } while(uvalue && (place < 20)); + if (place == 20) place--; + convert[place] = 0; + + zpadlen = max - place; + spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); + if (zpadlen < 0) zpadlen = 0; + if (spadlen < 0) spadlen = 0; + if (flags & DP_F_ZERO) + { + zpadlen = MAX(zpadlen, spadlen); + spadlen = 0; + } + if (flags & DP_F_MINUS) + spadlen = -spadlen; /* Left Justifty */ + +#ifdef DEBUG_SNPRINTF + dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", + zpadlen, spadlen, min, max, place)); +#endif + + /* Spaces */ + while (spadlen > 0) + { + dopr_outch (buffer, currlen, maxlen, ' '); + --spadlen; + } + + /* Sign */ + if (signvalue) + dopr_outch (buffer, currlen, maxlen, signvalue); + + /* Zeros */ + if (zpadlen > 0) + { + while (zpadlen > 0) + { + dopr_outch (buffer, currlen, maxlen, '0'); + --zpadlen; + } + } + + /* Digits */ + while (place > 0) + dopr_outch (buffer, currlen, maxlen, convert[--place]); + + /* Left Justified spaces */ + while (spadlen < 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++spadlen; + } +} + +static long double abs_val (long double value) +{ + long double result = value; + + if (value < 0) + result = -value; + + return result; +} + +static long double pow10 (int exp) +{ + long double result = 1; + + while (exp) + { + result *= 10; + exp--; + } + + return result; +} + +static long round (long double value) +{ + long intpart; + + intpart = value; + value = value - intpart; + if (value >= 0.5) + intpart++; + + return intpart; +} + +static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, + long double fvalue, int min, int max, int flags) +{ + int signvalue = 0; + long double ufvalue; + char iconvert[20]; + char fconvert[20]; + int iplace = 0; + int fplace = 0; + int padlen = 0; /* amount to pad */ + int zpadlen = 0; + int caps = 0; + long intpart; + long fracpart; + + /* + * AIX manpage says the default is 0, but Solaris says the default + * is 6, and sprintf on AIX defaults to 6 + */ + if (max < 0) + max = 6; + + ufvalue = abs_val (fvalue); + + if (fvalue < 0) + signvalue = '-'; + else + if (flags & DP_F_PLUS) /* Do a sign (+/i) */ + signvalue = '+'; + else + if (flags & DP_F_SPACE) + signvalue = ' '; + +#if 0 + if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ +#endif + + intpart = ufvalue; + + /* + * Sorry, we only support 9 digits past the decimal because of our + * conversion method + */ + if (max > 9) + max = 9; + + /* We "cheat" by converting the fractional part to integer by + * multiplying by a factor of 10 + */ + fracpart = round ((pow10 (max)) * (ufvalue - intpart)); + + if (fracpart >= pow10 (max)) + { + intpart++; + fracpart -= pow10 (max); + } + +#ifdef DEBUG_SNPRINTF + dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart)); +#endif + + /* Convert integer part */ + do { + iconvert[iplace++] = + (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10]; + intpart = (intpart / 10); + } while(intpart && (iplace < 20)); + if (iplace == 20) iplace--; + iconvert[iplace] = 0; + + /* Convert fractional part */ + do { + fconvert[fplace++] = + (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10]; + fracpart = (fracpart / 10); + } while(fracpart && (fplace < 20)); + if (fplace == 20) fplace--; + fconvert[fplace] = 0; + + /* -1 for decimal point, another -1 if we are printing a sign */ + padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); + zpadlen = max - fplace; + if (zpadlen < 0) + zpadlen = 0; + if (padlen < 0) + padlen = 0; + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justifty */ + + if ((flags & DP_F_ZERO) && (padlen > 0)) + { + if (signvalue) + { + dopr_outch (buffer, currlen, maxlen, signvalue); + --padlen; + signvalue = 0; + } + while (padlen > 0) + { + dopr_outch (buffer, currlen, maxlen, '0'); + --padlen; + } + } + while (padlen > 0) + { + dopr_outch (buffer, currlen, maxlen, ' '); + --padlen; + } + if (signvalue) + dopr_outch (buffer, currlen, maxlen, signvalue); + + while (iplace > 0) + dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]); + + /* + * Decimal point. This should probably use locale to find the correct + * char to print out. + */ + dopr_outch (buffer, currlen, maxlen, '.'); + + while (fplace > 0) + dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]); + + while (zpadlen > 0) + { + dopr_outch (buffer, currlen, maxlen, '0'); + --zpadlen; + } + + while (padlen < 0) + { + dopr_outch (buffer, currlen, maxlen, ' '); + ++padlen; + } +} + +static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c) +{ + if (*currlen < maxlen) + buffer[(*currlen)++] = c; +} +#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */ + +#ifndef HAVE_VSNPRINTF +int vsnprintf (char *str, size_t count, const char *fmt, va_list args) +{ + str[0] = 0; + dopr(str, count, fmt, args); + return(strlen(str)); +} +#endif /* !HAVE_VSNPRINTF */ + +#ifndef HAVE_SNPRINTF +/* VARARGS3 */ +#ifdef HAVE_STDARGS +int snprintf (char *str,size_t count,const char *fmt,...) +#else +int snprintf (va_alist) va_dcl +#endif +{ +#ifndef HAVE_STDARGS + char *str; + size_t count; + char *fmt; +#endif + VA_LOCAL_DECL; + + VA_START (fmt); + VA_SHIFT (str, char *); + VA_SHIFT (count, size_t ); + VA_SHIFT (fmt, char *); + (void) vsnprintf(str, count, fmt, ap); + VA_END; + return(strlen(str)); +} + +#ifdef TEST_SNPRINTF +#ifndef LONG_STRING +#define LONG_STRING 1024 +#endif +int main (void) +{ + char buf1[LONG_STRING]; + char buf2[LONG_STRING]; + char *fp_fmt[] = { + "%-1.5f", + "%1.5f", + "%123.9f", + "%10.5f", + "% 10.5f", + "%+22.9f", + "%+4.9f", + "%01.3f", + "%4f", + "%3.1f", + "%3.2f", + NULL + }; + double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, + 0.9996, 1.996, 4.136, 0}; + char *int_fmt[] = { + "%-1.5d", + "%1.5d", + "%123.9d", + "%5.5d", + "%10.5d", + "% 10.5d", + "%+22.33d", + "%01.3d", + "%4d", + NULL + }; + long int_nums[] = { -1, 134, 91340, 341, 0203, 0}; + int x, y; + int fail = 0; + int num = 0; + + printf ("Testing snprintf format codes against system sprintf...\n"); + + for (x = 0; fp_fmt[x] != NULL ; x++) + for (y = 0; fp_nums[y] != 0 ; y++) + { + snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]); + sprintf (buf2, fp_fmt[x], fp_nums[y]); + if (strcmp (buf1, buf2)) + { + printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", /* __SPRINTF_CHECKED__ */ + fp_fmt[x], buf1, buf2); + fail++; + } + num++; + } + + for (x = 0; int_fmt[x] != NULL ; x++) + for (y = 0; int_nums[y] != 0 ; y++) + { + snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]); + sprintf (buf2, int_fmt[x], int_nums[y]); + if (strcmp (buf1, buf2)) + { + printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", /* __SPRINTF_CHECKED__ */ + int_fmt[x], buf1, buf2); + fail++; + } + num++; + } + printf ("%d tests failed out of %d.\n", fail, num); +} +#endif /* SNPRINTF_TEST */ + +#endif /* !HAVE_SNPRINTF */ diff --git a/sort.c b/sort.c new file mode 100644 index 0000000..e6942ba --- /dev/null +++ b/sort.c @@ -0,0 +1,307 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "sort.h" +#include "mutt_idna.h" + +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <unistd.h> + +#define SORTCODE(x) (Sort & SORT_REVERSE) ? -(x) : x + +/* function to use as discriminator when normal sort method is equal */ +static sort_t *AuxSort = NULL; + +#define AUXSORT(code,a,b) if (!code && AuxSort && !option(OPTAUXSORT)) { \ + set_option(OPTAUXSORT); \ + code = AuxSort(a,b); \ + unset_option(OPTAUXSORT); \ +} \ +if (!code) \ + code = (*((HEADER **)a))->index - (*((HEADER **)b))->index; + +int compare_score (const void *a, const void *b) +{ + HEADER **pa = (HEADER **) a; + HEADER **pb = (HEADER **) b; + int result = (*pb)->score - (*pa)->score; /* note that this is reverse */ + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + +int compare_size (const void *a, const void *b) +{ + HEADER **pa = (HEADER **) a; + HEADER **pb = (HEADER **) b; + int result = (*pa)->content->length - (*pb)->content->length; + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + +int compare_date_sent (const void *a, const void *b) +{ + HEADER **pa = (HEADER **) a; + HEADER **pb = (HEADER **) b; + int result = (*pa)->date_sent - (*pb)->date_sent; + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + +int compare_subject (const void *a, const void *b) +{ + HEADER **pa = (HEADER **) a; + HEADER **pb = (HEADER **) b; + int rc; + + if (!(*pa)->env->real_subj) + { + if (!(*pb)->env->real_subj) + rc = compare_date_sent (pa, pb); + else + rc = -1; + } + else if (!(*pb)->env->real_subj) + rc = 1; + else + rc = mutt_strcasecmp ((*pa)->env->real_subj, (*pb)->env->real_subj); + AUXSORT(rc,a,b); + return (SORTCODE (rc)); +} + +const char *mutt_get_name (ADDRESS *a) +{ + ADDRESS *ali; + const char * name = ""; + + if (a) + { + if (option (OPTREVALIAS) && (ali = alias_reverse_lookup (a)) && ali->personal) + name = ali->personal; + else if (a->personal) + name = a->personal; + else if (a->mailbox) + name = (mutt_addr_for_display (a)); + } + /* don't return NULL to avoid segfault when printing/comparing */ + return name; +} + +int compare_to (const void *a, const void *b) +{ + HEADER **ppa = (HEADER **) a; + HEADER **ppb = (HEADER **) b; + char fa[1024]; + char fb[1024]; + int result; + + /* mutt_get_name() will sometimes return a pointer to a static buffer. + * On the next call that pointer may get smashed so we copy the return value + * to our own memory space. */ + + strncpy(fa,mutt_get_name ((*ppa)->env->to),sizeof(fa)); + fa[sizeof(fa)-1] = '\0'; + + strncpy(fb,mutt_get_name ((*ppb)->env->to),sizeof(fb)); + fb[sizeof(fb)-1] = '\0'; + + result = mutt_strcasecmp (fa, fb); + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + +int compare_from (const void *a, const void *b) +{ + HEADER **ppa = (HEADER **) a; + HEADER **ppb = (HEADER **) b; + char fa[1024]; + char fb[1024]; + int result; + + /* mutt_get_name() will sometimes return a pointer to a static buffer. + * On the next call that pointer may get smashed so we copy the return value + * to our own memory space. */ + + strncpy(fa,mutt_get_name ((*ppa)->env->from),sizeof(fa)); + fa[sizeof(fa)-1] = '\0'; + + strncpy(fb,mutt_get_name ((*ppb)->env->from),sizeof(fb)); + fb[sizeof(fb)-1] = '\0'; + + result = mutt_strcasecmp (fa, fb); + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + +int compare_date_received (const void *a, const void *b) +{ + HEADER **pa = (HEADER **) a; + HEADER **pb = (HEADER **) b; + int result = (*pa)->received - (*pb)->received; + AUXSORT(result,a,b); + return (SORTCODE (result)); +} + +int compare_order (const void *a, const void *b) +{ + HEADER **ha = (HEADER **) a; + HEADER **hb = (HEADER **) b; + +#ifdef USE_NNTP + if ((*ha)->article_num && (*hb)->article_num) + { + int result = (*ha)->article_num - (*hb)->article_num; + AUXSORT(result,a,b); + return (SORTCODE (result)); + } + else +#endif + /* no need to auxsort because you will never have equality here */ + return (SORTCODE ((*ha)->index - (*hb)->index)); +} + +sort_t *mutt_get_sort_func (int method) +{ + switch (method & SORT_MASK) + { + case SORT_RECEIVED: + return (compare_date_received); + case SORT_ORDER: + return (compare_order); + case SORT_DATE: + return (compare_date_sent); + case SORT_SUBJECT: + return (compare_subject); + case SORT_FROM: + return (compare_from); + case SORT_SIZE: + return (compare_size); + case SORT_TO: + return (compare_to); + case SORT_SCORE: + return (compare_score); + default: + return (NULL); + } + /* not reached */ +} + +void mutt_sort_headers (CONTEXT *ctx, int init) +{ + int i; + HEADER *h; + THREAD *thread, *top; + sort_t *sortfunc; + + unset_option (OPTNEEDRESORT); + + if (!ctx) + return; + + if (!ctx->msgcount) + { + /* this function gets called by mutt_sync_mailbox(), which may have just + * deleted all the messages. the virtual message numbers are not updated + * in that routine, so we must make sure to zero the vcount member. + */ + ctx->vcount = 0; + mutt_clear_threads (ctx); + return; /* nothing to do! */ + } + + if (!ctx->quiet) + mutt_message _("Sorting mailbox..."); + + if (option (OPTNEEDRESCORE) && option (OPTSCORE)) + { + for (i = 0; i < ctx->msgcount; i++) + mutt_score_message (ctx, ctx->hdrs[i], 1); + } + unset_option (OPTNEEDRESCORE); + + if (option (OPTRESORTINIT)) + { + unset_option (OPTRESORTINIT); + init = 1; + } + + if (init && ctx->tree) + mutt_clear_threads (ctx); + + if ((Sort & SORT_MASK) == SORT_THREADS) + { + AuxSort = NULL; + /* if $sort_aux changed after the mailbox is sorted, then all the + subthreads need to be resorted */ + if (option (OPTSORTSUBTHREADS)) + { + i = Sort; + Sort = SortAux; + if (ctx->tree) + ctx->tree = mutt_sort_subthreads (ctx->tree, 1); + Sort = i; + unset_option (OPTSORTSUBTHREADS); + } + mutt_sort_threads (ctx, init); + } + else if ((sortfunc = mutt_get_sort_func (Sort)) == NULL || + (AuxSort = mutt_get_sort_func (SortAux)) == NULL) + { + mutt_error _("Could not find sorting function! [report this bug]"); + mutt_sleep (1); + return; + } + else + qsort ((void *) ctx->hdrs, ctx->msgcount, sizeof (HEADER *), sortfunc); + + /* adjust the virtual message numbers */ + ctx->vcount = 0; + for (i = 0; i < ctx->msgcount; i++) + { + HEADER *cur = ctx->hdrs[i]; + if (cur->virtual != -1 || (cur->collapsed && (!ctx->pattern || cur->limited))) + { + cur->virtual = ctx->vcount; + ctx->v2r[ctx->vcount] = i; + ctx->vcount++; + } + cur->msgno = i; + } + + /* re-collapse threads marked as collapsed */ + if ((Sort & SORT_MASK) == SORT_THREADS) + { + top = ctx->tree; + while ((thread = top) != NULL) + { + while (!thread->message) + thread = thread->child; + h = thread->message; + + if (h->collapsed) + mutt_collapse_thread (ctx, h); + top = top->next; + } + mutt_set_virtual (ctx); + } + + if (!ctx->quiet) + mutt_clear_error (); +} diff --git a/sort.h b/sort.h new file mode 100644 index 0000000..87af059 --- /dev/null +++ b/sort.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#define SORT_DATE 1 /* the date the mail was sent. */ +#define SORT_SIZE 2 +#define SORT_SUBJECT 3 +#define SORT_FROM 4 +#define SORT_ORDER 5 /* the order the messages appear in the mailbox. */ +#define SORT_THREADS 6 +#define SORT_RECEIVED 7 /* when the message were delivered locally */ +#define SORT_TO 8 +#define SORT_SCORE 9 +#define SORT_ALIAS 10 +#define SORT_ADDRESS 11 +#define SORT_KEYID 12 +#define SORT_TRUST 13 +#define SORT_MASK 0xf +#define SORT_REVERSE (1<<4) +#define SORT_LAST (1<<5) + +typedef int sort_t (const void *, const void *); +sort_t *mutt_get_sort_func (int); + +void mutt_clear_threads (CONTEXT *); +void mutt_sort_headers (CONTEXT *, int); +void mutt_sort_threads (CONTEXT *, int); +int mutt_select_sort (int); +THREAD *mutt_sort_subthreads (THREAD *, int); + +WHERE short BrowserSort INITVAL (SORT_SUBJECT); +WHERE short Sort INITVAL (SORT_DATE); +WHERE short SortAux INITVAL (SORT_DATE); /* auxiallary sorting method */ +WHERE short SortAlias INITVAL (SORT_ALIAS); + +/* FIXME: This one does not belong to here */ +WHERE short PgpSortKeys INITVAL (SORT_ADDRESS); + +#include "mapping.h" +extern const struct mapping_t SortMethods[]; diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/status.c b/status.c new file mode 100644 index 0000000..3d175f6 --- /dev/null +++ b/status.c @@ -0,0 +1,295 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "mutt_menu.h" +#include "mutt_curses.h" +#include "sort.h" +#include "mapping.h" +#include "mx.h" + +#include <string.h> +#include <ctype.h> +#include <unistd.h> + +static char *get_sort_str (char *buf, size_t buflen, int method) +{ + snprintf (buf, buflen, "%s%s%s", + (method & SORT_REVERSE) ? "reverse-" : "", + (method & SORT_LAST) ? "last-" : "", + mutt_getnamebyvalue (method & SORT_MASK, SortMethods)); + return buf; +} + +/* %b = number of incoming folders with unread messages [option] + * %d = number of deleted messages [option] + * %f = full mailbox path + * %F = number of flagged messages [option] + * %h = hostname + * %l = length of mailbox (in bytes) [option] + * %m = total number of messages [option] + * %M = number of messages shown (virutal message count when limiting) [option] + * %n = number of new messages [option] + * %p = number of postponed messages [option] + * %P = percent of way through index + * %r = readonly/wontwrite/changed flag + * %s = current sorting method ($sort) + * %S = current aux sorting method ($sort_aux) + * %t = # of tagged messages [option] + * %v = Mutt version + * %V = currently active limit pattern [option] */ +static const char * +status_format_str (char *buf, size_t buflen, char op, const char *src, + const char *prefix, const char *ifstring, + const char *elsestring, + unsigned long data, format_flag flags) +{ + char fmt[SHORT_STRING], tmp[SHORT_STRING], *cp; + int count, optional = (flags & M_FORMAT_OPTIONAL); + MUTTMENU *menu = (MUTTMENU *) data; + + *buf = 0; + switch (op) + { + case 'b': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, mutt_buffy_check (0)); + } + else if (!mutt_buffy_check (0)) + optional = 0; + break; + + case 'd': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->deleted : 0); + } + else if (!Context || !Context->deleted) + optional = 0; + break; + + case 'h': + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (buf, buflen, fmt, NONULL(Hostname)); + break; + + case 'f': + snprintf (fmt, sizeof(fmt), "%%%ss", prefix); + if (Context && Context->path) + { + strfcpy (tmp, Context->path, sizeof (tmp)); + mutt_pretty_mailbox (tmp); + } + else + strfcpy (tmp, _("(no mailbox)"), sizeof (tmp)); + snprintf (buf, buflen, fmt, tmp); + break; + + case 'F': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->flagged : 0); + } + else if (!Context || !Context->flagged) + optional = 0; + break; + + case 'l': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->size : 0); + snprintf (buf, buflen, fmt, tmp); + } + else if (!Context || !Context->size) + optional = 0; + break; + + case 'L': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->vsize: 0); + snprintf (buf, buflen, fmt, tmp); + } + else if (!Context || !Context->pattern) + optional = 0; + break; + + case 'm': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->msgcount : 0); + } + else if (!Context || !Context->msgcount) + optional = 0; + break; + + case 'M': + if (!optional) + { + snprintf (fmt, sizeof(fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->vcount : 0); + } + else if (!Context || !Context->pattern) + optional = 0; + break; + + case 'n': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->new : 0); + } + else if (!Context || !Context->new) + optional = 0; + break; + + case 'o': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->unread - Context->new : 0); + } + else if (!Context || !(Context->unread - Context->new)) + optional = 0; + break; + + case 'p': + count = mutt_num_postponed (0); + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, count); + } + else if (!count) + optional = 0; + break; + + case 'P': + if (menu->top + menu->pagelen >= menu->max) + cp = menu->top ? "end" : "all"; + else + { + count = (100 * (menu->top + menu->pagelen)) / menu->max; + snprintf (tmp, sizeof (tmp), "%d%%", count); + cp = tmp; + } + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (buf, buflen, fmt, cp); + break; + + case 'r': + { + int i = 0; + + if (Context) + { + i = option(OPTATTACHMSG) ? 3 : ((Context->readonly || + Context->dontwrite) ? 2 : (Context->changed || ( +#ifdef USE_IMAP + /* deleted doesn't necessarily mean changed in IMAP */ + Context->magic != M_IMAP && +#endif + Context->deleted)) ? 1 : 0); + } + + if (!StChars) + buf[0] = 0; + else if (i >= mutt_strlen(StChars)) + buf[0] = StChars[0]; + else + buf[0] = StChars[i]; + + buf[1] = 0; + break; + } + + case 's': + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (buf, buflen, fmt, + get_sort_str (tmp, sizeof (tmp), Sort)); + break; + + case 'S': + snprintf (fmt, sizeof (fmt), "%%%ss", prefix); + snprintf (buf, buflen, fmt, + get_sort_str (tmp, sizeof (tmp), SortAux)); + break; + + case 't': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->tagged : 0); + } + else if (!Context || !Context->tagged) + optional = 0; + break; + + case 'u': + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (buf, buflen, fmt, Context ? Context->unread : 0); + } + else if (!Context || !Context->unread) + optional = 0; + break; + + case 'v': + snprintf (fmt, sizeof (fmt), "Mutt %%s"); + snprintf (buf, buflen, fmt, MUTT_VERSION); + break; + + case 'V': + if (!optional) + { + snprintf (fmt, sizeof(fmt), "%%%ss", prefix); + snprintf (buf, buflen, fmt, Context ? Context->pattern : 0); + } + else if (!Context || !Context->pattern) + optional = 0; + break; + + case 0: + *buf = 0; + return (src); + + default: + snprintf (buf, buflen, "%%%s%c", prefix, op); + break; + } + + if (optional) + menu_status_line (buf, buflen, menu, ifstring); + else if (flags & M_FORMAT_OPTIONAL) + menu_status_line (buf, buflen, menu, elsestring); + + return (src); +} + +void menu_status_line (char *buf, size_t buflen, MUTTMENU *menu, const char *p) +{ + mutt_FormatString (buf, buflen, p, status_format_str, (unsigned long) menu, 0); +} diff --git a/stderr.txt b/stderr.txt new file mode 100644 index 0000000..e69de29 diff --git a/strcasecmp.c b/strcasecmp.c new file mode 100644 index 0000000..51e6e10 --- /dev/null +++ b/strcasecmp.c @@ -0,0 +1,40 @@ +#include <ctype.h> +#include <sys/types.h> + +/* UnixWare doesn't have these functions in its standard C library */ + +int strncasecmp (char *s1, char *s2, size_t n) +{ + register int c1, c2, l = 0; + + while (*s1 && *s2 && l < n) + { + c1 = tolower ((unsigned char) *s1); + c2 = tolower ((unsigned char) *s2); + if (c1 != c2) + return (c1 - c2); + s1++; + s2++; + l++; + } + if (l == n) + return (int) (0); + else + return (int) (*s1 - *s2); +} + +int strcasecmp (char *s1, char *s2) +{ + register int c1, c2; + + while (*s1 && *s2) + { + c1 = tolower ((unsigned char) *s1); + c2 = tolower ((unsigned char) *s2); + if (c1 != c2) + return (c1 - c2); + s1++; + s2++; + } + return (int) (*s1 - *s2); +} diff --git a/strdup.c b/strdup.c new file mode 100644 index 0000000..0249a05 --- /dev/null +++ b/strdup.c @@ -0,0 +1,19 @@ +/* ultrix doesn't have strdup */ + +#include <string.h> +#include <stdlib.h> + +char *strdup (const char *s) /* __MEM_CHECKED__ */ +{ + char *d; + + if (s == NULL) + return NULL; + + if ((d = malloc (strlen (s) + 1)) == NULL) /* __MEM_CHECKED__ */ + return NULL; + + memcpy (d, s, strlen (s) + 1); + return d; +} + diff --git a/system.c b/system.c new file mode 100644 index 0000000..3ed31cf --- /dev/null +++ b/system.c @@ -0,0 +1,137 @@ +/* + * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#ifdef USE_IMAP +# include "imap.h" +# include <errno.h> +#endif + +#include <stdlib.h> +#include <signal.h> +#include <string.h> +#include <sys/wait.h> +#include <unistd.h> + +int _mutt_system (const char *cmd, int flags) +{ + int rc = -1; + struct sigaction act; + struct sigaction oldtstp; + struct sigaction oldcont; + sigset_t set; + pid_t thepid; + + if (!cmd || !*cmd) + return (0); + + /* must ignore SIGINT and SIGQUIT */ + + mutt_block_signals_system (); + + /* also don't want to be stopped right now */ + if (flags & M_DETACH_PROCESS) + { + sigemptyset (&set); + sigaddset (&set, SIGTSTP); + sigprocmask (SIG_BLOCK, &set, NULL); + } + else + { + act.sa_handler = SIG_DFL; + /* we want to restart the waitpid() below */ +#ifdef SA_RESTART + act.sa_flags = SA_RESTART; +#endif + sigemptyset (&act.sa_mask); + sigaction (SIGTSTP, &act, &oldtstp); + sigaction (SIGCONT, &act, &oldcont); + } + + if ((thepid = fork ()) == 0) + { + act.sa_flags = 0; + + if (flags & M_DETACH_PROCESS) + { + int fd; + + /* give up controlling terminal */ + setsid (); + + switch (fork ()) + { + case 0: +#if defined(OPEN_MAX) + for (fd = 0; fd < OPEN_MAX; fd++) + close (fd); +#elif defined(_POSIX_OPEN_MAX) + for (fd = 0; fd < _POSIX_OPEN_MAX; fd++) + close (fd); +#else + close (0); + close (1); + close (2); +#endif + chdir ("/"); + act.sa_handler = SIG_DFL; + sigaction (SIGCHLD, &act, NULL); + break; + + case -1: + _exit (127); + + default: + _exit (0); + } + } + + /* reset signals for the child; not really needed, but... */ + mutt_unblock_signals_system (0); + act.sa_handler = SIG_DFL; + act.sa_flags = 0; + sigemptyset (&act.sa_mask); + sigaction (SIGTERM, &act, NULL); + sigaction (SIGTSTP, &act, NULL); + sigaction (SIGCONT, &act, NULL); + + execl (EXECSHELL, "sh", "-c", cmd, NULL); + _exit (127); /* execl error */ + } + else if (thepid != -1) + { +#ifndef USE_IMAP + /* wait for the (first) child process to finish */ + waitpid (thepid, &rc, 0); +#else + rc = imap_wait_keepalive (thepid); +#endif + } + + sigaction (SIGCONT, &oldcont, NULL); + sigaction (SIGTSTP, &oldtstp, NULL); + + /* reset SIGINT, SIGQUIT and SIGCHLD */ + mutt_unblock_signals_system (1); + if (flags & M_DETACH_PROCESS) + sigprocmask (SIG_UNBLOCK, &set, NULL); + + rc = (thepid != -1) ? (WIFEXITED (rc) ? WEXITSTATUS (rc) : -1) : -1; + + return (rc); +} diff --git a/thread.c b/thread.c new file mode 100644 index 0000000..03409ea --- /dev/null +++ b/thread.c @@ -0,0 +1,1338 @@ +/* + * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "mutt.h" +#include "sort.h" + +#include <string.h> +#include <ctype.h> + +#define VISIBLE(hdr, ctx) (hdr->virtual >= 0 || (hdr->collapsed && (!ctx->pattern || hdr->limited))) + +/* determine whether a is a descendant of b */ +static int is_descendant (THREAD *a, THREAD *b) +{ + while (a) + { + if (a == b) + return (1); + a = a->parent; + } + return (0); +} + +/* Determines whether to display a message's subject. */ +static int need_display_subject (CONTEXT *ctx, HEADER *hdr) +{ + THREAD *tmp, *tree = hdr->thread; + + /* if our subject is different from our parent's, display it */ + if (hdr->subject_changed) + return (1); + + /* if our subject is different from that of our closest previously displayed + * sibling, display the subject */ + for (tmp = tree->prev; tmp; tmp = tmp->prev) + { + hdr = tmp->message; + if (hdr && VISIBLE (hdr, ctx)) + { + if (hdr->subject_changed) + return (1); + else + break; + } + } + + /* if there is a parent-to-child subject change anywhere between us and our + * closest displayed ancestor, display the subject */ + for (tmp = tree->parent; tmp; tmp = tmp->parent) + { + hdr = tmp->message; + if (hdr) + { + if (VISIBLE (hdr, ctx)) + return (0); + else if (hdr->subject_changed) + return (1); + } + } + + /* if we have no visible parent or previous sibling, display the subject */ + return (1); +} + +static void linearize_tree (CONTEXT *ctx) +{ + THREAD *tree = ctx->tree; + HEADER **array = ctx->hdrs + (Sort & SORT_REVERSE ? ctx->msgcount - 1 : 0); + + while (tree) + { + while (!tree->message) + tree = tree->child; + + *array = tree->message; + array += Sort & SORT_REVERSE ? -1 : 1; + + if (tree->child) + tree = tree->child; + else + { + while (tree) + { + if (tree->next) + { + tree = tree->next; + break; + } + else + tree = tree->parent; + } + } + } +} + +/* this calculates whether a node is the root of a subtree that has visible + * nodes, whether a node itself is visible, whether, if invisible, it has + * depth anyway, and whether any of its later siblings are roots of visible + * subtrees. while it's at it, it frees the old thread display, so we can + * skip parts of the tree in mutt_draw_tree() if we've decided here that we + * don't care about them any more. + */ +static void calculate_visibility (CONTEXT *ctx, int *max_depth) +{ + THREAD *tmp, *tree = ctx->tree; + int hide_top_missing = option (OPTHIDETOPMISSING) && !option (OPTHIDEMISSING); + int hide_top_limited = option (OPTHIDETOPLIMITED) && !option (OPTHIDELIMITED); + int depth = 0; + + /* we walk each level backwards to make it easier to compute next_subtree_visible */ + while (tree->next) + tree = tree->next; + *max_depth = 0; + + FOREVER + { + if (depth > *max_depth) + *max_depth = depth; + + tree->subtree_visible = 0; + if (tree->message) + { + FREE (&tree->message->tree); + if (VISIBLE (tree->message, ctx)) + { + tree->deep = 1; + tree->visible = 1; + tree->message->display_subject = need_display_subject (ctx, tree->message); + for (tmp = tree; tmp; tmp = tmp->parent) + { + if (tmp->subtree_visible) + { + tmp->deep = 1; + tmp->subtree_visible = 2; + break; + } + else + tmp->subtree_visible = 1; + } + } + else + { + tree->visible = 0; + tree->deep = !option (OPTHIDELIMITED); + } + } + else + { + tree->visible = 0; + tree->deep = !option (OPTHIDEMISSING); + } + tree->next_subtree_visible = tree->next && (tree->next->next_subtree_visible + || tree->next->subtree_visible); + if (tree->child) + { + depth++; + tree = tree->child; + while (tree->next) + tree = tree->next; + } + else if (tree->prev) + tree = tree->prev; + else + { + while (tree && !tree->prev) + { + depth--; + tree = tree->parent; + } + if (!tree) + break; + else + tree = tree->prev; + } + } + + /* now fix up for the OPTHIDETOP* options if necessary */ + if (hide_top_limited || hide_top_missing) + { + tree = ctx->tree; + FOREVER + { + if (!tree->visible && tree->deep && tree->subtree_visible < 2 + && ((tree->message && hide_top_limited) || (!tree->message && hide_top_missing))) + tree->deep = 0; + if (!tree->deep && tree->child && tree->subtree_visible) + tree = tree->child; + else if (tree->next) + tree = tree->next; + else + { + while (tree && !tree->next) + tree = tree->parent; + if (!tree) + break; + else + tree = tree->next; + } + } + } +} + +/* Since the graphics characters have a value >255, I have to resort to + * using escape sequences to pass the information to print_enriched_string(). + * These are the macros M_TREE_* defined in mutt.h. + * + * ncurses should automatically use the default ASCII characters instead of + * graphics chars on terminals which don't support them (see the man page + * for curs_addch). + */ +void mutt_draw_tree (CONTEXT *ctx) +{ + char *pfx = NULL, *mypfx = NULL, *arrow = NULL, *myarrow = NULL, *new_tree; + char corner = (Sort & SORT_REVERSE) ? M_TREE_ULCORNER : M_TREE_LLCORNER; + char vtee = (Sort & SORT_REVERSE) ? M_TREE_BTEE : M_TREE_TTEE; + int depth = 0, start_depth = 0, max_depth = 0, width = option (OPTNARROWTREE) ? 1 : 2; + THREAD *nextdisp = NULL, *pseudo = NULL, *parent = NULL, *tree = ctx->tree; + + /* Do the visibility calculations and free the old thread chars. + * From now on we can simply ignore invisible subtrees + */ + calculate_visibility (ctx, &max_depth); + pfx = safe_malloc (width * max_depth + 2); + arrow = safe_malloc (width * max_depth + 2); + while (tree) + { + if (depth) + { + myarrow = arrow + (depth - start_depth - (start_depth ? 0 : 1)) * width; + if (depth && start_depth == depth) + myarrow[0] = nextdisp ? M_TREE_LTEE : corner; + else if (parent->message && !option (OPTHIDELIMITED)) + myarrow[0] = M_TREE_HIDDEN; + else if (!parent->message && !option (OPTHIDEMISSING)) + myarrow[0] = M_TREE_MISSING; + else + myarrow[0] = vtee; + if (width == 2) + myarrow[1] = pseudo ? M_TREE_STAR + : (tree->duplicate_thread ? M_TREE_EQUALS : M_TREE_HLINE); + if (tree->visible) + { + myarrow[width] = M_TREE_RARROW; + myarrow[width + 1] = 0; + new_tree = safe_malloc ((2 + depth * width)); + if (start_depth > 1) + { + strncpy (new_tree, pfx, (start_depth - 1) * width); + strfcpy (new_tree + (start_depth - 1) * width, + arrow, (1 + depth - start_depth) * width + 2); + } + else + strfcpy (new_tree, arrow, 2 + depth * width); + tree->message->tree = new_tree; + } + } + if (tree->child && depth) + { + mypfx = pfx + (depth - 1) * width; + mypfx[0] = nextdisp ? M_TREE_VLINE : M_TREE_SPACE; + if (width == 2) + mypfx[1] = M_TREE_SPACE; + } + parent = tree; + nextdisp = NULL; + pseudo = NULL; + do + { + if (tree->child && tree->subtree_visible) + { + if (tree->deep) + depth++; + if (tree->visible) + start_depth = depth; + tree = tree->child; + + /* we do this here because we need to make sure that the first child thread + * of the old tree that we deal with is actually displayed if any are, + * or we might set the parent variable wrong while going through it. */ + while (!tree->subtree_visible && tree->next) + tree = tree->next; + } + else + { + while (!tree->next && tree->parent) + { + if (tree == pseudo) + pseudo = NULL; + if (tree == nextdisp) + nextdisp = NULL; + if (tree->visible) + start_depth = depth; + tree = tree->parent; + if (tree->deep) + { + if (start_depth == depth) + start_depth--; + depth--; + } + } + if (tree == pseudo) + pseudo = NULL; + if (tree == nextdisp) + nextdisp = NULL; + if (tree->visible) + start_depth = depth; + tree = tree->next; + if (!tree) + break; + } + if (!pseudo && tree->fake_thread) + pseudo = tree; + if (!nextdisp && tree->next_subtree_visible) + nextdisp = tree; + } + while (!tree->deep); + } + + FREE (&pfx); + FREE (&arrow); +} + +/* since we may be trying to attach as a pseudo-thread a THREAD that + * has no message, we have to make a list of all the subjects of its + * most immediate existing descendants. we also note the earliest + * date on any of the parents and put it in *dateptr. */ +static LIST *make_subject_list (THREAD *cur, time_t *dateptr) +{ + THREAD *start = cur; + ENVELOPE *env; + time_t thisdate; + LIST *curlist, *oldlist, *newlist, *subjects = NULL; + int rc = 0; + + FOREVER + { + while (!cur->message) + cur = cur->child; + + if (dateptr) + { + thisdate = option (OPTTHREADRECEIVED) + ? cur->message->received : cur->message->date_sent; + if (!*dateptr || thisdate < *dateptr) + *dateptr = thisdate; + } + + env = cur->message->env; + if (env->real_subj && + ((env->real_subj != env->subject) || (!option (OPTSORTRE)))) + { + for (curlist = subjects, oldlist = NULL; + curlist; oldlist = curlist, curlist = curlist->next) + { + rc = mutt_strcmp (env->real_subj, curlist->data); + if (rc >= 0) + break; + } + if (!curlist || rc > 0) + { + newlist = safe_calloc (1, sizeof (LIST)); + newlist->data = env->real_subj; + if (oldlist) + { + newlist->next = oldlist->next; + oldlist->next = newlist; + } + else + { + newlist->next = subjects; + subjects = newlist; + } + } + } + + while (!cur->next && cur != start) + { + cur = cur->parent; + } + if (cur == start) + break; + cur = cur->next; + } + + return (subjects); +} + +/* find the best possible match for a parent mesage based upon subject. + * if there are multiple matches, the one which was sent the latest, but + * before the current message, is used. + */ +static THREAD *find_subject (CONTEXT *ctx, THREAD *cur) +{ + struct hash_elem *ptr; + THREAD *tmp, *last = NULL; + int hash; + LIST *subjects = NULL, *oldlist; + time_t date = 0; + + subjects = make_subject_list (cur, &date); + + while (subjects) + { + hash = hash_string ((unsigned char *) subjects->data, + ctx->subj_hash->nelem); + for (ptr = ctx->subj_hash->table[hash]; ptr; ptr = ptr->next) + { + tmp = ((HEADER *) ptr->data)->thread; + if (tmp != cur && /* don't match the same message */ + !tmp->fake_thread && /* don't match pseudo threads */ + tmp->message->subject_changed && /* only match interesting replies */ + !is_descendant (tmp, cur) && /* don't match in the same thread */ + (date >= (option (OPTTHREADRECEIVED) ? + tmp->message->received : + tmp->message->date_sent)) && + (!last || + (option (OPTTHREADRECEIVED) ? + (last->message->received < tmp->message->received) : + (last->message->date_sent < tmp->message->date_sent))) && + tmp->message->env->real_subj && + mutt_strcmp (subjects->data, tmp->message->env->real_subj) == 0) + last = tmp; /* best match so far */ + } + + oldlist = subjects; + subjects = subjects->next; + FREE (&oldlist); + } + return (last); +} + +/* remove cur and its descendants from their current location. + * also make sure ancestors of cur no longer are sorted by the + * fact that cur is their descendant. */ +static void unlink_message (THREAD **old, THREAD *cur) +{ + THREAD *tmp; + + if (cur->prev) + cur->prev->next = cur->next; + else + *old = cur->next; + + if (cur->next) + cur->next->prev = cur->prev; + + if (cur->sort_key) + { + for (tmp = cur->parent; tmp && tmp->sort_key == cur->sort_key; + tmp = tmp->parent) + tmp->sort_key = NULL; + } +} + +/* add cur as a prior sibling of *new, with parent newparent */ +static void insert_message (THREAD **new, THREAD *newparent, THREAD *cur) +{ + if (*new) + (*new)->prev = cur; + + cur->parent = newparent; + cur->next = *new; + cur->prev = NULL; + *new = cur; +} + +/* thread by subject things that didn't get threaded by message-id */ +static void pseudo_threads (CONTEXT *ctx) +{ + THREAD *tree = ctx->tree, *top = tree; + THREAD *tmp, *cur, *parent, *curchild, *nextchild; + + if (!ctx->subj_hash) + ctx->subj_hash = mutt_make_subj_hash (ctx); + + while (tree) + { + cur = tree; + tree = tree->next; + if ((parent = find_subject (ctx, cur)) != NULL) + { + cur->fake_thread = 1; + unlink_message (&top, cur); + insert_message (&parent->child, parent, cur); + parent->sort_children = 1; + tmp = cur; + FOREVER + { + while (!tmp->message) + tmp = tmp->child; + + /* if the message we're attaching has pseudo-children, they + * need to be attached to its parent, so move them up a level. + * but only do this if they have the same real subject as the + * parent, since otherwise they rightly belong to the message + * we're attaching. */ + if (tmp == cur + || !mutt_strcmp (tmp->message->env->real_subj, + parent->message->env->real_subj)) + { + tmp->message->subject_changed = 0; + + for (curchild = tmp->child; curchild; ) + { + nextchild = curchild->next; + if (curchild->fake_thread) + { + unlink_message (&tmp->child, curchild); + insert_message (&parent->child, parent, curchild); + } + curchild = nextchild; + } + } + + while (!tmp->next && tmp != cur) + { + tmp = tmp->parent; + } + if (tmp == cur) + break; + tmp = tmp->next; + } + } + } + ctx->tree = top; +} + + +void mutt_clear_threads (CONTEXT *ctx) +{ + int i; + + for (i = 0; i < ctx->msgcount; i++) + { + ctx->hdrs[i]->thread = NULL; + ctx->hdrs[i]->threaded = 0; + } + ctx->tree = NULL; + + if (ctx->thread_hash) + hash_destroy (&ctx->thread_hash, *free); +} + +int compare_threads (const void *a, const void *b) +{ + static sort_t *sort_func = NULL; + + if (a || b) + return ((*sort_func) (&(*((THREAD **) a))->sort_key, + &(*((THREAD **) b))->sort_key)); + /* a hack to let us reset sort_func even though we can't + * have extra arguments because of qsort + */ + else + { + sort_func = NULL; + sort_func = mutt_get_sort_func (Sort); + return (sort_func ? 1 : 0); + } +} + +THREAD *mutt_sort_subthreads (THREAD *thread, int init) +{ + THREAD **array, *sort_key, *top, *tmp; + HEADER *oldsort_key; + int i, array_size, sort_top = 0; + + /* we put things into the array backwards to save some cycles, + * but we want to have to move less stuff around if we're + * resorting, so we sort backwards and then put them back + * in reverse order so they're forwards + */ + Sort ^= SORT_REVERSE; + if (!compare_threads (NULL, NULL)) + return (thread); + + top = thread; + + array = safe_calloc ((array_size = 256), sizeof (THREAD *)); + while (1) + { + if (init || !thread->sort_key) + { + thread->sort_key = NULL; + + if (thread->parent) + thread->parent->sort_children = 1; + else + sort_top = 1; + } + + if (thread->child) + { + thread = thread->child; + continue; + } + else + { + /* if it has no children, it must be real. sort it on its own merits */ + thread->sort_key = thread->message; + + if (thread->next) + { + thread = thread->next; + continue; + } + } + + while (!thread->next) + { + /* if it has siblings and needs to be sorted, sort it... */ + if (thread->prev && (thread->parent ? thread->parent->sort_children : sort_top)) + { + /* put them into the array */ + for (i = 0; thread; i++, thread = thread->prev) + { + if (i >= array_size) + safe_realloc (&array, (array_size *= 2) * sizeof (THREAD *)); + + array[i] = thread; + } + + qsort ((void *) array, i, sizeof (THREAD *), *compare_threads); + + /* attach them back together. make thread the last sibling. */ + thread = array[0]; + thread->next = NULL; + array[i - 1]->prev = NULL; + + if (thread->parent) + thread->parent->child = array[i - 1]; + else + top = array[i - 1]; + + while (--i) + { + array[i - 1]->prev = array[i]; + array[i]->next = array[i - 1]; + } + } + + if (thread->parent) + { + tmp = thread; + thread = thread->parent; + + if (!thread->sort_key || thread->sort_children) + { + /* make sort_key the first or last sibling, as appropriate */ + sort_key = (!(Sort & SORT_LAST) ^ !(Sort & SORT_REVERSE)) ? thread->child : tmp; + + /* we just sorted its children */ + thread->sort_children = 0; + + oldsort_key = thread->sort_key; + thread->sort_key = thread->message; + + if (Sort & SORT_LAST) + { + if (!thread->sort_key + || ((((Sort & SORT_REVERSE) ? 1 : -1) + * compare_threads ((void *) &thread, + (void *) &sort_key)) + > 0)) + thread->sort_key = sort_key->sort_key; + } + else if (!thread->sort_key) + thread->sort_key = sort_key->sort_key; + + /* if its sort_key has changed, we need to resort it and siblings */ + if (oldsort_key != thread->sort_key) + { + if (thread->parent) + thread->parent->sort_children = 1; + else + sort_top = 1; + } + } + } + else + { + Sort ^= SORT_REVERSE; + FREE (&array); + return (top); + } + } + + thread = thread->next; + } +} + +static void check_subjects (CONTEXT *ctx, int init) +{ + HEADER *cur; + THREAD *tmp; + int i; + + for (i = 0; i < ctx->msgcount; i++) + { + cur = ctx->hdrs[i]; + if (cur->thread->check_subject) + cur->thread->check_subject = 0; + else if (!init) + continue; + + /* figure out which messages have subjects different than their parents' */ + tmp = cur->thread->parent; + while (tmp && !tmp->message) + { + tmp = tmp->parent; + } + + if (!tmp) + cur->subject_changed = 1; + else if (cur->env->real_subj && tmp->message->env->real_subj) + cur->subject_changed = mutt_strcmp (cur->env->real_subj, + tmp->message->env->real_subj) ? 1 : 0; + else + cur->subject_changed = (cur->env->real_subj + || tmp->message->env->real_subj) ? 1 : 0; + } +} + +void mutt_sort_threads (CONTEXT *ctx, int init) +{ + HEADER *cur; + int i, oldsort, using_refs = 0; + THREAD *thread, *new, *tmp, top; + LIST *ref = NULL; + + /* set Sort to the secondary method to support the set sort_aux=reverse-* + * settings. The sorting functions just look at the value of + * SORT_REVERSE + */ + oldsort = Sort; + Sort = SortAux; + + if (!ctx->thread_hash) + init = 1; + + if (init) + ctx->thread_hash = hash_create (ctx->msgcount * 2); + + /* we want a quick way to see if things are actually attached to the top of the + * thread tree or if they're just dangling, so we attach everything to a top + * node temporarily */ + top.parent = top.next = top.prev = NULL; + top.child = ctx->tree; + for (thread = ctx->tree; thread; thread = thread->next) + thread->parent = ⊤ + + /* put each new message together with the matching messageless THREAD if it + * exists. otherwise, if there is a THREAD that already has a message, thread + * new message as an identical child. if we didn't attach the message to a + * THREAD, make a new one for it. */ + for (i = 0; i < ctx->msgcount; i++) + { + cur = ctx->hdrs[i]; + + if (!cur->thread) + { + if ((!init || option (OPTDUPTHREADS)) && cur->env->message_id) + thread = hash_find (ctx->thread_hash, cur->env->message_id); + else + thread = NULL; + + if (thread && !thread->message) + { + /* this is a message which was missing before */ + thread->message = cur; + cur->thread = thread; + thread->check_subject = 1; + + /* mark descendants as needing subject_changed checked */ + for (tmp = (thread->child ? thread->child : thread); tmp != thread; ) + { + while (!tmp->message) + tmp = tmp->child; + tmp->check_subject = 1; + while (!tmp->next && tmp != thread) + tmp = tmp->parent; + if (tmp != thread) + tmp = tmp->next; + } + + if (thread->parent) + { + /* remove threading info above it based on its children, which we'll + * recalculate based on its headers. make sure not to leave + * dangling missing messages. note that we haven't kept track + * of what info came from its children and what from its siblings' + * children, so we just remove the stuff that's definitely from it */ + do + { + tmp = thread->parent; + unlink_message (&tmp->child, thread); + thread->parent = NULL; + thread->sort_key = NULL; + thread->fake_thread = 0; + thread = tmp; + } while (thread != &top && !thread->child && !thread->message); + } + } + else + { + new = (option (OPTDUPTHREADS) ? thread : NULL); + + thread = safe_calloc (1, sizeof (THREAD)); + thread->message = cur; + thread->check_subject = 1; + cur->thread = thread; + hash_insert (ctx->thread_hash, + cur->env->message_id ? cur->env->message_id : "", + thread, 1); + + if (new) + { + if (new->duplicate_thread) + new = new->parent; + + thread = cur->thread; + + insert_message (&new->child, new, thread); + thread->duplicate_thread = 1; + thread->message->threaded = 1; + } + } + } + else + { + /* unlink pseudo-threads because they might be children of newly + * arrived messages */ + thread = cur->thread; + for (new = thread->child; new; ) + { + tmp = new->next; + if (new->fake_thread) + { + unlink_message (&thread->child, new); + insert_message (&top.child, &top, new); + new->fake_thread = 0; + } + new = tmp; + } + } + } + + /* thread by references */ + for (i = 0; i < ctx->msgcount; i++) + { + cur = ctx->hdrs[i]; + if (cur->threaded) + continue; + cur->threaded = 1; + + thread = cur->thread; + using_refs = 0; + + while (1) + { + if (using_refs == 0) + { + /* look at the beginning of in-reply-to: */ + if ((ref = cur->env->in_reply_to) != NULL) + using_refs = 1; + else + { + ref = cur->env->references; + using_refs = 2; + } + } + else if (using_refs == 1) + { + /* if there's no references header, use all the in-reply-to: + * data that we have. otherwise, use the first reference + * if it's different than the first in-reply-to, otherwise use + * the second reference (since at least eudora puts the most + * recent reference in in-reply-to and the rest in references) + */ + if (!cur->env->references) + ref = ref->next; + else + { + if (mutt_strcmp (ref->data, cur->env->references->data)) + ref = cur->env->references; + else + ref = cur->env->references->next; + + using_refs = 2; + } + } + else + ref = ref->next; /* go on with references */ + + if (!ref) + break; + + if ((new = hash_find (ctx->thread_hash, ref->data)) == NULL) + { + new = safe_calloc (1, sizeof (THREAD)); + hash_insert (ctx->thread_hash, ref->data, new, 1); + } + else + { + if (new->duplicate_thread) + new = new->parent; + if (is_descendant (new, thread)) /* no loops! */ + break; + } + + if (thread->parent) + unlink_message (&top.child, thread); + insert_message (&new->child, new, thread); + thread = new; + if (thread->message || (thread->parent && thread->parent != &top)) + break; + } + + if (!thread->parent) + insert_message (&top.child, &top, thread); + } + + /* detach everything from the temporary top node */ + for (thread = top.child; thread; thread = thread->next) + { + thread->parent = NULL; + } + ctx->tree = top.child; + + check_subjects (ctx, init); + + if (!option (OPTSTRICTTHREADS)) + pseudo_threads (ctx); + + if (ctx->tree) + { + ctx->tree = mutt_sort_subthreads (ctx->tree, init); + + /* restore the oldsort order. */ + Sort = oldsort; + + /* Put the list into an array. */ + linearize_tree (ctx); + + /* Draw the thread tree. */ + mutt_draw_tree (ctx); + } +} + +static HEADER *find_virtual (THREAD *cur, int reverse) +{ + THREAD *top; + + if (cur->message && cur->message->virtual >= 0) + return (cur->message); + + top = cur; + if ((cur = cur->child) == NULL) + return (NULL); + + while (reverse && cur->next) + cur = cur->next; + + FOREVER + { + if (cur->message && cur->message->virtual >= 0) + return (cur->message); + + if (cur->child) + { + cur = cur->child; + + while (reverse && cur->next) + cur = cur->next; + } + else if (reverse ? cur->prev : cur->next) + cur = reverse ? cur->prev : cur->next; + else + { + while (!(reverse ? cur->prev : cur->next)) + { + cur = cur->parent; + if (cur == top) + return (NULL); + } + cur = reverse ? cur->prev : cur->next; + } + /* not reached */ + } +} + +int _mutt_aside_thread (HEADER *hdr, short dir, short subthreads) +{ + THREAD *cur; + HEADER *tmp; + + if ((Sort & SORT_MASK) != SORT_THREADS) + { + mutt_error _("Threading is not enabled."); + return (hdr->virtual); + } + + cur = hdr->thread; + + if (!subthreads) + { + while (cur->parent) + cur = cur->parent; + } + else + { + if ((dir != 0) ^ ((Sort & SORT_REVERSE) != 0)) + { + while (!cur->next && cur->parent) + cur = cur->parent; + } + else + { + while (!cur->prev && cur->parent) + cur = cur->parent; + } + } + + if ((dir != 0) ^ ((Sort & SORT_REVERSE) != 0)) + { + do + { + cur = cur->next; + if (!cur) + return (-1); + tmp = find_virtual (cur, 0); + } while (!tmp); + } + else + { + do + { + cur = cur->prev; + if (!cur) + return (-1); + tmp = find_virtual (cur, 1); + } while (!tmp); + } + + return (tmp->virtual); +} + +int mutt_parent_message (CONTEXT *ctx, HEADER *hdr) +{ + THREAD *thread; + + if ((Sort & SORT_MASK) != SORT_THREADS) + { + mutt_error _("Threading is not enabled."); + return (hdr->virtual); + } + + for (thread = hdr->thread->parent; thread; thread = thread->parent) + { + if ((hdr = thread->message) != NULL) + { + if (VISIBLE (hdr, ctx)) + return (hdr->virtual); + else + { + mutt_error _("Parent message is not visible in this limited view."); + return (-1); + } + } + } + + mutt_error _("Parent message is not available."); + return (-1); +} + +void mutt_set_virtual (CONTEXT *ctx) +{ + int i; + HEADER *cur; + + ctx->vcount = 0; + ctx->vsize = 0; + + for (i = 0; i < ctx->msgcount; i++) + { + cur = ctx->hdrs[i]; + if (cur->virtual >= 0) + { + cur->virtual = ctx->vcount; + ctx->v2r[ctx->vcount] = i; + ctx->vcount++; + ctx->vsize += cur->content->length + cur->content->offset - cur->content->hdr_offset; + cur->num_hidden = mutt_get_hidden (ctx, cur); + } + } +} + +int _mutt_traverse_thread (CONTEXT *ctx, HEADER *cur, int flag) +{ + THREAD *thread, *top; + HEADER *roothdr = NULL; + int final, reverse = (Sort & SORT_REVERSE), minmsgno; + int num_hidden = 0, new = 0, old = 0; + int min_unread_msgno = INT_MAX, min_unread = cur->virtual; +#define CHECK_LIMIT (!ctx->pattern || cur->limited) + + if ((Sort & SORT_MASK) != SORT_THREADS && !(flag & M_THREAD_GET_HIDDEN)) + { + mutt_error (_("Threading is not enabled.")); + return (cur->virtual); + } + + final = cur->virtual; + thread = cur->thread; + while (thread->parent) + thread = thread->parent; + top = thread; + while (!thread->message) + thread = thread->child; + cur = thread->message; + minmsgno = cur->msgno; + + if (!cur->read && CHECK_LIMIT) + { + if (cur->old) + old = 2; + else + new = 1; + if (cur->msgno < min_unread_msgno) + { + min_unread = cur->virtual; + min_unread_msgno = cur->msgno; + } + } + + if (cur->virtual == -1 && CHECK_LIMIT) + num_hidden++; + + if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE)) + { + cur->pair = 0; /* force index entry's color to be re-evaluated */ + cur->collapsed = flag & M_THREAD_COLLAPSE; + if (cur->virtual != -1) + { + roothdr = cur; + if (flag & M_THREAD_COLLAPSE) + final = roothdr->virtual; + } + } + + if (thread == top && (thread = thread->child) == NULL) + { + /* return value depends on action requested */ + if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE)) + return (final); + else if (flag & M_THREAD_UNREAD) + return ((old && new) ? new : (old ? old : new)); + else if (flag & M_THREAD_GET_HIDDEN) + return (num_hidden); + else if (flag & M_THREAD_NEXT_UNREAD) + return (min_unread); + } + + FOREVER + { + cur = thread->message; + + if (cur) + { + if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE)) + { + cur->pair = 0; /* force index entry's color to be re-evaluated */ + cur->collapsed = flag & M_THREAD_COLLAPSE; + if (!roothdr && CHECK_LIMIT) + { + roothdr = cur; + if (flag & M_THREAD_COLLAPSE) + final = roothdr->virtual; + } + + if (reverse && (flag & M_THREAD_COLLAPSE) && (cur->msgno < minmsgno) && CHECK_LIMIT) + { + minmsgno = cur->msgno; + final = cur->virtual; + } + + if (flag & M_THREAD_COLLAPSE) + { + if (cur != roothdr) + cur->virtual = -1; + } + else + { + if (CHECK_LIMIT) + cur->virtual = cur->msgno; + } + } + + + if (!cur->read && CHECK_LIMIT) + { + if (cur->old) + old = 2; + else + new = 1; + if (cur->msgno < min_unread_msgno) + { + min_unread = cur->virtual; + min_unread_msgno = cur->msgno; + } + } + + if (cur->virtual == -1 && CHECK_LIMIT) + num_hidden++; + } + + if (thread->child) + thread = thread->child; + else if (thread->next) + thread = thread->next; + else + { + int done = 0; + while (!thread->next) + { + thread = thread->parent; + if (thread == top) + { + done = 1; + break; + } + } + if (done) + break; + thread = thread->next; + } + } + + /* return value depends on action requested */ + if (flag & (M_THREAD_COLLAPSE | M_THREAD_UNCOLLAPSE)) + return (final); + else if (flag & M_THREAD_UNREAD) + return ((old && new) ? new : (old ? old : new)); + else if (flag & M_THREAD_GET_HIDDEN) + return (num_hidden+1); + else if (flag & M_THREAD_NEXT_UNREAD) + return (min_unread); + + return (0); +#undef CHECK_LIMIT +} + + +/* if flag is 0, we want to know how many messages + * are in the thread. if flag is 1, we want to know + * our position in the thread. */ +int mutt_messages_in_thread (CONTEXT *ctx, HEADER *hdr, int flag) +{ + THREAD *threads[2]; + int i, rc; + + if ((Sort & SORT_MASK) != SORT_THREADS || !hdr->thread) + return (1); + + threads[0] = hdr->thread; + while (threads[0]->parent) + threads[0] = threads[0]->parent; + + threads[1] = flag ? hdr->thread : threads[0]->next; + + for (i = 0; i < ((flag || !threads[1]) ? 1 : 2); i++) + { + while (!threads[i]->message) + threads[i] = threads[i]->child; + } + + if (Sort & SORT_REVERSE) + rc = threads[0]->message->msgno - (threads[1] ? threads[1]->message->msgno : -1); + else + rc = (threads[1] ? threads[1]->message->msgno : ctx->msgcount) - threads[0]->message->msgno; + + if (flag) + rc += 1; + + return (rc); +} + + +HASH *mutt_make_id_hash (CONTEXT *ctx) +{ + int i; + HEADER *hdr; + HASH *hash; + + hash = hash_create (ctx->msgcount * 2); + + for (i = 0; i < ctx->msgcount; i++) + { + hdr = ctx->hdrs[i]; + if (hdr->env->message_id) + hash_insert (hash, hdr->env->message_id, hdr, 0); + } + + return hash; +} + +HASH *mutt_make_subj_hash (CONTEXT *ctx) +{ + int i; + HEADER *hdr; + HASH *hash; + + hash = hash_create (ctx->msgcount * 2); + + for (i = 0; i < ctx->msgcount; i++) + { + hdr = ctx->hdrs[i]; + if (hdr->env->real_subj) + hash_insert (hash, hdr->env->real_subj, hdr, 1); + } + + return hash; +} diff --git a/url.c b/url.c new file mode 100644 index 0000000..6e6dc77 --- /dev/null +++ b/url.c @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.org> + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +/* + * A simple URL parser. + */ + +#include "mutt.h" +#include "mapping.h" +#include "url.h" + +#include "mime.h" + +#include <ctype.h> + +static struct mapping_t UrlMap[] = +{ + { "file", U_FILE }, + { "imap", U_IMAP }, + { "imaps", U_IMAPS }, + { "pop", U_POP }, + { "pops", U_POPS }, + { "nntp", U_NNTP }, + { "nntps", U_NNTPS }, + { "snews", U_NNTPS }, + { "mailto", U_MAILTO }, + { NULL, U_UNKNOWN} +}; + + +static void url_pct_decode (char *s) +{ + char *d; + + if (!s) + return; + + for (d = s; *s; s++) + { + if (*s == '%' && s[1] && s[2] && + isxdigit ((unsigned char) s[1]) && + isxdigit ((unsigned char) s[2]) && + hexval (s[1]) >= 0 && hexval (s[2]) >= 0) + { + *d++ = (hexval (s[1]) << 4) | (hexval (s[2])); + s += 2; + } + else + *d++ = *s; + } + *d ='\0'; +} + +url_scheme_t url_check_scheme (const char *s) +{ + char sbuf[STRING]; + char *t; + int i; + + if (!s || !(t = strchr (s, ':'))) + return U_UNKNOWN; + if ((t - s) + 1 >= sizeof (sbuf)) + return U_UNKNOWN; + + strfcpy (sbuf, s, t - s + 1); + for (t = sbuf; *t; t++) + *t = ascii_tolower (*t); + + if ((i = mutt_getvaluebyname (sbuf, UrlMap)) == -1) + return U_UNKNOWN; + else + return (url_scheme_t) i; +} + +int url_parse_file (char *d, const char *src, size_t dl) +{ + if (ascii_strncasecmp (src, "file:", 5)) + return -1; + else if (!ascii_strncasecmp (src, "file://", 7)) /* we don't support remote files */ + return -1; + else + strfcpy (d, src + 5, dl); + + url_pct_decode (d); + return 0; +} + +/* ciss_parse_userhost: fill in components of ciss with info from src. Note + * these are pointers into src, which is altered with '\0's. Port of 0 + * means no port given. */ +static char *ciss_parse_userhost (ciss_url_t *ciss, char *src) +{ + char *t; + char *p; + char *path; + + ciss->user = NULL; + ciss->pass = NULL; + ciss->host = NULL; + ciss->port = 0; + + if (strncmp (src, "//", 2)) + return src; + + src += 2; + + if ((path = strchr (src, '/'))) + *path++ = '\0'; + + if ((t = strrchr (src, '@'))) + { + *t = '\0'; + if ((p = strchr (src, ':'))) + { + *p = '\0'; + ciss->pass = p + 1; + url_pct_decode (ciss->pass); + } + ciss->user = src; + url_pct_decode (ciss->user); + t++; + } + else + t = src; + + if ((p = strchr (t, ':'))) + { + *p++ = '\0'; + ciss->port = atoi (p); + } + else + ciss->port = 0; + + ciss->host = t; + url_pct_decode (ciss->host); + return path; +} + +/* url_parse_ciss: Fill in ciss_url_t. char* elements are pointers into src, + * which is modified by this call (duplicate it first if you need to). */ +int url_parse_ciss (ciss_url_t *ciss, char *src) +{ + char *tmp; + + if ((ciss->scheme = url_check_scheme (src)) == U_UNKNOWN) + return -1; + + tmp = strchr (src, ':') + 1; + + ciss->path = ciss_parse_userhost (ciss, tmp); + url_pct_decode (ciss->path); + + return 0; +} + +/* url_ciss_tostring: output the URL string for a given CISS object. */ +int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len, int flags) +{ + if (ciss->scheme == U_UNKNOWN) + return -1; + + snprintf (dest, len, "%s:", mutt_getnamebyvalue (ciss->scheme, UrlMap)); + + if (ciss->host) + { + strncat (dest, "//", len - strlen (dest)); + if (ciss->user) { + if (flags & U_DECODE_PASSWD && ciss->pass) + snprintf (dest + strlen (dest), len - strlen (dest), "%s:%s@", + ciss->user, ciss->pass); + else + snprintf (dest + strlen (dest), len - strlen (dest), "%s@", + ciss->user); + } + + if (ciss->port) + snprintf (dest + strlen (dest), len - strlen (dest), "%s:%hu/", + ciss->host, ciss->port); + else + snprintf (dest + strlen (dest), len - strlen (dest), "%s/", ciss->host); + } + + if (ciss->path) + strncat (dest, ciss->path, len - strlen (dest)); + + return 0; +} + +int url_parse_mailto (ENVELOPE *e, char **body, const char *src) +{ + char *t; + char *tmp; + char *headers; + char *tag, *value; + char scratch[HUGE_STRING]; + + int taglen; + + LIST *last = NULL; + + if (!(t = strchr (src, ':'))) + return -1; + + if ((tmp = safe_strdup (t + 1)) == NULL) + return -1; + + if ((headers = strchr (tmp, '?'))) + *headers++ = '\0'; + + url_pct_decode (tmp); + e->to = rfc822_parse_adrlist (e->to, tmp); + + tag = headers ? strtok (headers, "&") : NULL; + + for (; tag; tag = strtok (NULL, "&")) + { + if ((value = strchr (tag, '='))) + *value++ = '\0'; + if (!value || !*value) + continue; + + url_pct_decode (tag); + url_pct_decode (value); + + if (!ascii_strcasecmp (tag, "body")) + mutt_str_replace (body, value); + else + { + taglen = strlen (tag); + /* mutt_parse_rfc822_line makes some assumptions */ + snprintf (scratch, sizeof (scratch), "%s: %s", tag, value); + scratch[taglen] = '\0'; + value = &scratch[taglen+1]; + SKIPWS (value); + mutt_parse_rfc822_line (e, NULL, scratch, value, 1, 0, 0, &last); + } + } + + FREE (&tmp); + return 0; +} + diff --git a/url.h b/url.h new file mode 100644 index 0000000..5e0f3ae --- /dev/null +++ b/url.h @@ -0,0 +1,37 @@ +#ifndef _URL_H +# define _URL_H + +typedef enum url_scheme +{ + U_FILE, + U_POP, + U_POPS, + U_IMAP, + U_IMAPS, + U_NNTP, + U_NNTPS, + U_MAILTO, + U_UNKNOWN +} +url_scheme_t; + +#define U_DECODE_PASSWD (1) + +typedef struct ciss_url +{ + url_scheme_t scheme; + char *user; + char *pass; + char *host; + unsigned short port; + char *path; +} +ciss_url_t; + +url_scheme_t url_check_scheme (const char *s); +int url_parse_file (char *d, const char *src, size_t dl); +int url_parse_ciss (ciss_url_t *ciss, char *src); +int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len, int flags); +int url_parse_mailto (ENVELOPE *e, char **body, const char *src); + +#endif diff --git a/utf8.c b/utf8.c new file mode 100644 index 0000000..b65b2a9 --- /dev/null +++ b/utf8.c @@ -0,0 +1,76 @@ +#ifndef HAVE_WC_FUNCS + +#include <errno.h> + +#ifndef EILSEQ +#define EILSEQ EINVAL +#endif + +int mutt_wctoutf8 (char *s, unsigned int c) +{ + if (c < (1 << 7)) + { + if (s) + *s++ = c; + return 1; + } + else if (c < (1 << 11)) + { + if (s) + { + *s++ = 0xc0 | (c >> 6); + *s++ = 0x80 | (c & 0x3f); + } + return 2; + } + else if (c < (1 << 16)) + { + if (s) + { + *s++ = 0xe0 | (c >> 12); + *s++ = 0x80 | ((c >> 6) & 0x3f); + *s++ = 0x80 | (c & 0x3f); + } + return 3; + } + else if (c < (1 << 21)) + { + if (s) + { + *s++ = 0xf0 | (c >> 18); + *s++ = 0x80 | ((c >> 12) & 0x3f); + *s++ = 0x80 | ((c >> 6) & 0x3f); + *s++ = 0x80 | (c & 0x3f); + } + return 4; + } + else if (c < (1 << 26)) + { + if (s) + { + *s++ = 0xf8 | (c >> 24); + *s++ = 0x80 | ((c >> 18) & 0x3f); + *s++ = 0x80 | ((c >> 12) & 0x3f); + *s++ = 0x80 | ((c >> 6) & 0x3f); + *s++ = 0x80 | (c & 0x3f); + } + return 5; + } + else if (c < (1 << 31)) + { + if (s) + { + *s++ = 0xfc | (c >> 30); + *s++ = 0x80 | ((c >> 24) & 0x3f); + *s++ = 0x80 | ((c >> 18) & 0x3f); + *s++ = 0x80 | ((c >> 12) & 0x3f); + *s++ = 0x80 | ((c >> 6) & 0x3f); + *s++ = 0x80 | (c & 0x3f); + } + return 6; + } + errno = EILSEQ; + return -1; +} + +#endif /* !HAVE_WC_FUNCS */ diff --git a/wcwidth.c b/wcwidth.c new file mode 100644 index 0000000..e0e1cb7 --- /dev/null +++ b/wcwidth.c @@ -0,0 +1,140 @@ +/* + * This is an implementation of wcwidth() and wcswidth() as defined in + * "The Single UNIX Specification, Version 2, The Open Group, 1997" + * <http://www.UNIX-systems.org/online.html> + * + * Markus Kuhn -- 2000-02-08 -- public domain + */ + +/* Adapted for Mutt by Edmund Grimley Evans. + */ + +#ifndef HAVE_WC_FUNCS + +#include "mutt.h" +#include "mbyte.h" + +#include <ctype.h> + +/* These functions define the column width of an ISO 10646 character + * as follows: + * + * - The null character (U+0000) has a column width of 0. + * + * - Other C0/C1 control characters and DEL will lead to a return + * value of -1. + * + * - Non-spacing and enclosing combining characters (general + * category code Mn or Me in the Unicode database) have a + * column width of 0. + * + * - Spacing characters in the East Asian Wide (W) or East Asian + * FullWidth (F) category as defined in Unicode Technical + * Report #11 have a column width of 2. + * + * - All remaining characters (including all printable + * ISO 8859-1 and WGL4 characters, Unicode control characters, + * etc.) have a column width of 1. + * + * This implementation assumes that wchar_t characters are encoded + * in ISO 10646. + */ + +int wcwidth_ucs(wchar_t ucs) +{ + /* sorted list of non-overlapping intervals of non-spacing characters */ + static const struct interval { + unsigned short first; + unsigned short last; + } combining[] = { + { 0x0300, 0x034E }, { 0x0360, 0x0362 }, { 0x0483, 0x0486 }, + { 0x0488, 0x0489 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05B9 }, + { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C4 }, { 0x064B, 0x0655 }, { 0x0670, 0x0670 }, + { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, + { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, + { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, + { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A02, 0x0A02 }, + { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBF, 0x0CBF }, + { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0D41, 0x0D43 }, + { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, + { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, + { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, + { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, + { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x18A9, 0x18A9 }, + { 0x20D0, 0x20E3 }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, + { 0xFB1E, 0xFB1E }, { 0xFE20, 0xFE23 } + }; + int min = 0; + int max = sizeof(combining) / sizeof(struct interval) - 1; + int mid; + + if (ucs == 0) + return 0; + + /* test for 8-bit control characters */ + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return -1; + + /* first quick check for Latin-1 etc. characters */ + if (ucs < combining[0].first) + return 1; + + /* binary search in table of non-spacing characters */ + while (max >= min) { + mid = (min + max) / 2; + if (combining[mid].last < ucs) + min = mid + 1; + else if (combining[mid].first > ucs) + max = mid - 1; + else if (combining[mid].first <= ucs && combining[mid].last >= ucs) + return 0; + } + + /* if we arrive here, ucs is not a combining or C0/C1 control character */ + + /* fast test for majority of non-wide scripts */ + if (ucs < 0x1100) + return 1; + + return 1 + + ((ucs >= 0x1100 && ucs <= 0x115f) || /* Hangul Jamo */ + (ucs >= 0x2e80 && ucs <= 0xa4cf && (ucs & ~0x0011) != 0x300a && + ucs != 0x303f) || /* CJK ... Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ + (ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6)); +} + +#endif /* !HAVE_WC_FUNCS */ + +#if 0 /* original */ +int wcswidth(const wchar_t *pwcs, size_t n) +{ + int w, width = 0; + + for (;*pwcs && n-- > 0; pwcs++) + if ((w = wcwidth(*pwcs)) < 0) + return -1; + else + width += w; + + return width; +} +#endif -- 2.20.1